标题:通过看资料码一些代码,是关于学生成绩统计的 请给点意见,谢谢!
取消只看楼主
enzi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-20
结帖率:100%
已结贴  问题点数:20 回复次数:4 
通过看资料码一些代码,是关于学生成绩统计的 请给点意见,谢谢!
请问一下如果我要把学生成绩保存在一个表格(或者数据库中)中,之后就对表格(或者数据库中)进行增删查功能就可以了 ,这样的话我需要怎么做,大家可以给点意见吗?




# include <stdio.h>
# include <malloc.h>
# include <Windows.h>
# include <string.h>

struct person  //定义结构体 包含姓名和各科成绩
    {
        char name[50];
        float yuwen;
        float shuxue;
        float yingyu;
        float huaxue;
        float wuli;
        float stu; //平均成绩

    };
void input_stu(struct person *,int); //信息输入

void output_stu(struct person *,int); //信息输出
float avr_stu(struct person *,int,char name [50] ); //根据名字查询平均成绩
void paixu_stu(struct person *,int); //平均成绩进行学生成绩排序
void chaxun_stu(struct person *,int,char name [50] ); //根据名字查询成绩

int main(void)
{   
    int len;
    int i,g;

//    struct person *p ;
    printf("                         欢迎使用学生管理系统:                  \n");
    printf("请输入需要管理的学生个数 len=");
     scanf("%d",&len);
    printf("学生管理系统初始化中,请稍后!!!!\n");
    struct person *p = (struct person *)malloc(sizeof(struct person )*len);
    Sleep( 1000);  //系统等待。其中Sleep中S需要大写 ,要不系统不认。

    printf("学生管理系统已经完成,请使用!!!!\n");
F1: printf("请按照功能编号选择系统功能。\n");     
    printf("1学生信息输入    2学生信息输出   3 学生成绩查询  4按照平均成绩进行学生成绩排序  5 退出 \n");
    printf("请选择系统功能(1-5):\n");
    scanf("%d",&i);
   
    switch (i)
    {
        
case 1:
    {
ff1:     input_stu(p,len); // 学生信息输入
         printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
         scanf("%d",&g);
         if(g == 0) goto ff1;
         else goto F1;
         break;
    }
case 2:
    {
ff2:     output_stu(p,len);  // 学生信息输出
         printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
         scanf("%d",&g);
         if(g == 0) goto ff2;
         else goto F1;
         break;
    }
case 3:      // 成绩查询
        {
         char name[50];
ff3:     printf("请输入需要查询成绩的学生名字\n");
         scanf("%s",&name);
         chaxun_stu(p,len,name);  
         printf("如果要查询该生平均成绩请按1,按其他数字则返回上级菜单\n");
         scanf("%d",&g);
         if(g == 1)
         {
        //     pj = avr_stu(p,len,name);
            printf("该学生的平均成绩是%f\n",avr_stu(p,len,name));
         }
         else goto fff1;

fff1:   printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
         scanf("%d",&g);
         if(g == 0) goto ff3;
         else goto F1;
         break;
    }
case 4:
         {
ff4:     paixu_stu(p,len);  // 平均成绩进行学生成绩排序
         printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
         scanf("%d",&g);
         if(g == 0) goto ff4;
         else goto F1;
         break;
    }

case 5:
      {
   
         goto F2;
         break;
      }
   
    }
    // input_stu(p,len); // 程序调用
   //  output_stu(p,len);


F2:      free(p);
      return 0;
}
// 学生 信息输入
void input_stu(struct person *q,int i)
{   
    int j = 0;
//    float stu[5] = {0};
//    float k;
    for (j = 0; j < i; ++j)
    {
    printf("请输入第%d学生姓名:",j+1);
    scanf("%s", &q[j].name);
    printf("请输入语文成绩:");
    scanf("%f",&q[j].yuwen);
//    stu[0] = q[j].yuwen;
    printf("请输入数学成绩:");
    scanf("%f",&q[j].shuxue);
//    stu[1] = q[j].shuxue;
    printf("请输入英语成绩:");
    scanf("%f",&q[j].yingyu);
//    stu[2] = q[j].yingyu;
    printf("请输入化学成绩:");
    scanf("%f",&q[j].huaxue);
//    stu[3] = q[j].huaxue;
    printf("请输入物理成绩:");
    scanf("%f",&q[j].wuli);
//    stu[4] = q[j].wuli;
//    k = avr_stu(stu,4);
  //  q[j].stu = k ;
   //   avr_stu(stu,4);
//    printf("各科平均成绩是%f:",k);
   

    }
}
//学生信息输出
void output_stu(struct person *q,int i)
{   
    int j;
    for (j = 0; j < i; ++j)
    {
    printf("第%d学生姓名是%s:\n",j+1,q[j].name);
   
    printf("语文成绩%f:\n",q[j].yuwen);

    printf("数学成绩%f:\n",q[j].shuxue);
   
    printf("英语成绩%f:\n",q[j].yingyu);
   
    printf("化学成绩%f:\n",q[j].huaxue);
   
    printf("物理成绩%f:\n",q[j].wuli);
//    printf("成绩%f:\n",q[j].stu);

    }
}

float avr_stu(struct person *q,int i,char name [50])
{
    float t;
    int j;
    for (j = 0; j < i; j++)
    {
        if(! strcmp(name,q[j].name))  //用字符串比较函数 查找相同的名字后输出
        {
           t = (q[j].huaxue + q[j].shuxue + q[j].wuli + q[j].yingyu + q[j].yuwen)/5;
    //        printf("该学生的平均成绩是%f",t);
        }
    }
    return t;
}

void chaxun_stu(struct person *q,int i,char name [50])
{
    int j;
    for (j = 0; j < i; j++)
    {
        if(! strcmp(name,q[j].name))  //用字符串比较函数 查找相同的名字后输出
        {
           printf("该学生姓名是%s:\n",q[j].name);
   
           printf("语文成绩%f:\n",q[j].yuwen);

           printf("数学成绩%f:\n",q[j].shuxue);
   
           printf("英语成绩%f:\n",q[j].yingyu);
   
           printf("化学成绩%f:\n",q[j].huaxue);
   
           printf("物理成绩%f:\n",q[j].wuli);

        }
    }

}

void paixu_stu(struct person * q, int i)
{
    int j,k;
    int d = 1;
    float m;
//    float paixu[i] = {0};
    float *paixu = (float *)malloc(sizeof(float )*i); // 定义一个数组存放每个学生的平均成绩
    struct person p ;
    for (j = 0 ; j < i ; ++j)
    {
      paixu[j] = (q[j].huaxue + q[j].shuxue + q[j].wuli + q[j].yingyu + q[j].yuwen)/5;

    }
    // 通过冒泡排序方法 对平均成绩数组排序 ,同时也对学生成绩进行排序。
    for (j = 0 ; j < i ; ++j )
    {
     for (k = 0 ; k < i-j-1 ; ++k )
       {   
          if (paixu[k] < paixu[k+1])
           {
               m = paixu[k];
               paixu[k] = paixu[k+1];
               paixu[k+1] = m;
               p = q[k];
               q[k] = q[k+1];
               q[k+1] = p;     
           }
       }

    }
    for (j = 0 ; j < i ; ++j)
    {
    //  printf("第%d名是%s\n",j+1,q[j].name);
      printf("第%d名是%s,平均成绩是%f\n",j+1,q[j].name,avr_stu(q,i,q[j].name));
    }
     free(paixu);
}
搜索更多相关主题的帖子: include person huaxue yingyu 数据库 
2014-11-11 09:43
enzi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-20
得分:0 
回复 楼主 enzi
这个是自己写的 其中是参考一些别人想法。我想把输入的学生成绩到文件中或者数据库中 需要了解哪些知识。谢谢
2014-11-11 09:48
enzi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-20
得分:0 
回复 2 楼 wp231957
这个是自己写的 其中是参考一些别人想法。我想把输入的学生成绩到文件中或者数据库中 需要了解哪些知识。谢谢
2014-11-11 09:48
enzi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-20
得分:0 
回复 5 楼 wp231957
好的! 谢谢提供一个方向。论坛上能够找到文件读写方面的资料吗?
2014-11-11 10:10
enzi
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-20
得分:0 
回复 5 楼 wp231957
你好!我写一个把学生信息以文本形式保存的函数,可以直接打开文本看。但是用函数读出来再显示就是乱码。
int baocun_stu(struct person *q,int i)  //把信息保存到文件中
{
     FILE *fp;
     int  n ;
     struct person *p = (struct person *)malloc(sizeof(struct person )*i);
     if((fp=fopen("d:\\chengji.txt","wb+"))==NULL)
     {
       printf("信息保存不成功!");
       return 0;
     }

   // 以文本形式保存在文本中,方便人员直接看。
     char ch2[73] = {"姓名     "  "语文         "  "数学         "  "英语         "  "化学         " "物理       "};
     fprintf(fp,"%s\n",ch2);
     for(n = 0; n < i; ++n)
     {
       fprintf(fp,"%s    %f    %f    %f    %f    %f\n",q[n].name,q[n].huaxue , q[n].shuxue , q[n].wuli , q[n].yingyu , q[n].yuwen);
      
     }
   // fread(p,sizeof(struct person),i,fp);
  //    output_stu(p,i);
    fclose(fp);

但是用这个函数的话,打开文本就显示乱码,用函数读出来再显示又是正常的。
int baocun_stu(struct person *q,int i)  //把信息保存到文件中
{
     FILE *fp;
     int  n ;
   
//      printf("%s\n%d\n%d\n%d\n%d\n%d\n",q[0].name,q[0].huaxue,q[0].shuxue,q[0].wuli,q[0].yingyu,q[0].yuwen);
     struct person *p = (struct person *)malloc(sizeof(struct person )*i);
     if((fp=fopen("d:\\chengji.txt","wb+"))==NULL)
     {
       printf("信息保存不成功!");
       return 0;
     }

   fwrite(q,sizeof(struct person),i,fp);  
    rewind(fp);
    fread(p,sizeof(struct person),i,fp);

     }
     output_stu(p,i);
    fclose(fp);
}
有什么方式,可以直接打开看不是乱码, 用函数读出显示也不乱码。在线等!! 谢谢!!
2014-11-12 15:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-438420-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.118065 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved