C语言学生成绩管理系统实训报告

郑州大学

实 训 报 告

实训名称:     “学生成绩管理系统”设计                                     

姓    名:               

院 (系):  软件学院             

专业班级:              

学    号:               

指导教师:               

成    绩:                

时间:年2月日至    年  月 31日  


实训任务书………………………………………………………I

实训进度日历……………………………………………………IV

实训报告…………………………………………………………1

1.     软件需求分析………………………………………………1

2.     软件规格说明………………………………………………1

3.     系统框架和思路……………………………………………1

4.     流程图………………………………………………………2

实训感想………………………………………………………….3

附录……………………………………………………………….4


郑州大学软件学院

学生实训任务书

一、题目

“学生成绩管理系统”设计

二、学生信息

专业               

学号         

姓名                     

三、用户需求及约束条件

1、用C语言实现基于Dos操作系统的“学生成绩管理系统”。

2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。

3、“学生成绩管理系统”具有以下功能:

    1)系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能)。

2)录入学生成绩(信息有:班级、姓名、学号、五门课程成绩);

3)计算学生五门功课的平均成绩并存档。

下面的功能必须是第3)项功能完成以后才能进行。

4)输出学生的信息和对应的原始成绩以及平均成绩;

5)按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。

6)对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。

7)增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。

8)附加功能:把学生信息和对应的课程成绩和平均成绩存入到文件中。

9)附加功能:输出文件中的内容。

10)附加功能:试着从文件中导入数据到成绩管理系统中,然后进行管理。

四、设计要求、技术参数及设计规格

1、设计的系统能够运行,基本功能实现;

2、撰写实训报告,实训报告中的内容包括:

1)软件需求分析;

2)软件规格说明和设计要求;

3)对数据的管理方案;

4)“学生成绩管理系统”设计的思路和整体框架;

5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;

6)“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。

3、程序设计环境为 Turbo C++ 3.0或Visual C++ 6.0。

4、实训结束前提交纸质实训报告及其word文档、系统的源程序文件和可执行文件,将这三个文件压缩后以“学号后两位姓名”的形式命名,上传到FTP上自己所在班级对应的文件夹里。

FTP地址:实训报告要求按以下顺序装订:

l  封面

l  简单目录

l  任务书

l  实训进度日历

l  实训报告正文

l  实训感想

l  [附件]

6、所有的设计工作需要同学自己真实地、独立地完成。

五、工作量

六、考核形式、考核时间、考核指标及成绩评定

实训成绩由下面构成:

实训纪律、实训态度和平时表现占20%;实训结果占30%;实训报告占30%;实践操作能力占20%。

考核形式:

1)老师每日对学生的考察、评估和考核;

2)最后对实训项目完成的质量进行考核和验收。

完  成  期  限:年12月31日

指导教师签章:

专业负责人签章:                  

教学院长签章                      

年12月10日


实训进度日历

实训报告

1.软件需求分析

(1)、成绩录入功能(信息有:班级、姓名、学号、五门课程成绩)

(2)、求解学生个人平均成绩并存档

(3)、输出学生的信息和对应的原始成绩以及平均成绩

(4)、按平均成绩对学生信息进行排序,排序后重新输出

(5)、对成绩修改,分别有两种模式,一种是按学号查找和修改;另一种是按姓名查找和修改;修改后重新排序,并输出学生信息和成绩。

(6)、增补信息(个人信息和课程成绩)功能,并重新排序和输出。

(7)、附加功能,用文件对信息进行管理。

(8)、每次输入口令,系统接收时都要接收到“enter”,为保证程序正常运行每次输入后都要对键盘进行清空。

2.软件规格说明

(1)、系统用户界面尽量居中、美观,所有的命令简单有效。

(2)、具有人机交互功能;

(3)、通过菜单选择功能;

(4)、只能由菜单退出系统;

(5)、操作信息提示(界面友好);

(6)、拦截一些误操作错误;

(7)、按原始成绩格式输出。

                 

3、系统框架和思路

(1)、功能分类,把一个问题分解为多个子问题。

(2)、考虑数据结构:结构体数组;结构体链表;文件;数据库文件。

(3)、功能逐步细化,自顶向下设计,最小的模块用函数实现。

(4)、先搭框架,用空函数实现。

(5)、计算平均成绩及最大最小,用到排序法,冒泡排序法适用于数组排序法。

(6)、运用switch语句,这样可以为用户提供具有选择性的多功能循环操作。

(7)、使用if()else语句实现一些选择操作

(8)、使用结构体表变量:将不同类型的数据结合成一个有机整体

4、流程图


实训感想

总结:

  

通过这次实际操作,从开始的迷茫无知到现在的清晰思路,真正明白了它的用途,虽然还有很多不足之处,但是却感受到了不一样的思想方式,增加了我学习软件技术的兴趣,认识到了自己必须“路漫漫其修远兮,吾将上下而求索”。这次实训是老师给了范例程序,经过自己的改写,基本实现了要求,感谢老师您对我们的指导及对您的无比的负责任表示深深的敬佩,谢谢您,老师!

在实际操作过程中对犯的一些错误还会有意外的收获,也渐渐的明白了C语言的真正用途。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,特别是对数组和循环有了深刻的理解,有一种收获良多的喜悦 ,而这一切都是老师您对我们的谆谆教诲,再次感谢您,老师!


附录

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct student

{

    char name[100];

    char num[3];

    float chinese;

       float c_program;

       float english;

       float math;

       float sum;

       float average;

};

struct student s[300];

int Number=0;

int dq(struct student s[]) 

{

       FILE *fp=NULL;

       int i=0;

       fp=fopen("C:student.dat","rb");

       while(fread(&s[i],sizeof(struct student),1,fp))

              i++;

       fclose(fp);

       return i;

}

void menu()

{

       printf("\t*****************************************************************\n");

       printf("\t*\t\t\t\t\t\t\t\t*\n");

       printf("\t*\t\t\t欢迎使用学生成绩管理系统\t\t\t*\n");

       printf("\t*\t\t\t\t\t\t\t\t*\n");

       printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("\t* [1] 增加学生信息 \t\t[2] 查看学生信息 \t\t*\n");

       printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("\t* [3] 查找学生成绩 \t\t[4] 删除学生信息 \t\t*\n");

       printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

    printf("\t* [5] 修改学生成绩 \t\t[6] 成绩排序     \t\t*\n");

       printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("\t* [7]  输出挂科人数及成绩 \t[0] 退出系统    \t\t*\n");

       printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("\t*  \t\t\t*\n");

       printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

       printf("\t*       \t\t\t*\n");

       printf("\t*****************************************************************\n");

}

void bc(struct student *s) 

{

       FILE *fp=NULL;

       fp=fopen("C:student.dat","ab+");

       fwrite(s,sizeof(struct student),1,fp);

       fclose(fp);

}

void add()

{  

       int n=0;

       int i=0,j=0,k=0;

      struct student S;

       printf("\t请输入要增加学生成绩个数:");

       scanf("%d",&n);

       for(i=0;i<n;i++)

       {

              k=0;

              printf("\t输入第%d个同学信息\n",i+1);

              printf("\t请输入学生的姓名:");

           scanf("%s",&S.name);

        printf("\t学号:");

        scanf("%s",&S.num);

              for (j=0;j<Number;j++)

              {

                     if(strcmp(S.num,s[i].num)==0)

                     {

                            k=1;

                     }

              }

              if(k!=0)

              {

                     printf("\t添加失败,学号重复!\n");       

              }

              else

              {

                     printf("\t[语文]成绩:");

            scanf("%f",&S.chinese);

                     printf("\t[数学]成绩:");

            scanf("%f",&S.math);

            printf("\t[英语]成绩:");

            scanf("%f",&S.english);

            printf("\t[C语言设计]成绩:");

            scanf("%f",&S.c_program);

                     S.sum=S.chinese+S.math+S.english+S.c_program;

            S.average=S.sum/4;

              }

             

       }

       if(k==0)

       {

              s[Number++]=S;

              bc(&S);

              printf("\t\t\t\t ==>添加成功<==\n\n");

       }

}

void select()

{

   int i=0,j=0;

   for(i=0;i<Number;i++)

   {

          j++;

   }

   printf("\t以下是全部 %d 名学生的成绩:\n",j);

   printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

   for(i=0;i<Number;i++)

   {

          printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);

   }

}                                  

void xhxg()

{

       FILE *fp=NULL;

       char id[3];

       int i=0,j=0,k=0;

       int XH=-1;

       printf("\t请输入要修改的学生学号:");

       scanf("%s",id);                                                                                                                                           

       for(i=0;i<Number;i++)                              

       {                  

              if (strcmp(id,s[i].num)==0)

              {

                     XH=i;                                                                                     

              }

       }

       if(XH==-1)

       {

              printf("\t不存在该学生信息!\n");                 

       }

       else

       {

              printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

              printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n",s[XH].name,s[XH].num,s[XH].chinese,s[XH].math,s[XH].english,s[XH].c_program,s[XH].sum,s[XH].average);

              printf("\t请重新输入该学生信息:\n");

              printf("\t姓名:");

              scanf("%s",s[XH].name);

              printf("\t学号:");

              scanf("%s",s[XH].num);

              for (j=0;j<Number;j++)

              {

                     if(strcmp(s[XH].num,s[j].num)==0&&XH!=j)

                     {

                            k=1;

                     }

              }

              if(k!=0)

              {

                     printf("\t修改失败,学号重复!\n");       

              }

              else

              {

                     printf("\t[语文]成绩:");

                     scanf("%f",&s[XH].chinese);

                     printf("\t[数学]成绩:");

                     scanf("%f",&s[XH].math);

                     printf("\t[英语]成绩:");

                     scanf("%f",&s[XH].english);

                     printf("\t[C语言设计]成绩:");

                     scanf("%f",&s[XH].c_program);

                     s[XH].sum=s[XH].chinese+s[XH].math+s[XH].english+s[XH].c_program;

                     s[XH].average=s[XH].sum/4;

                    

                     for (i=0;i<Number;i++)

                            {

                                   fwrite(&s[i],sizeof(struct student),1,fp);

                            }

                    

                    

                     fclose(fp);

                     printf("\t\t\t\t==>修改成功<==\n");

              }

       }

}

void xmxg()

{

       FILE *fp=NULL;

    char name[60];

    int i=0,j=0,k=0;

    int XM=-1;

    printf("\t请输入要修改的学生姓名:");

    scanf("%s",name);

       for (i=0;i<Number;i++)

       {

              if (strcmp(name,s[i].name)==0)

              {

                     XM=i;

              }

       }

       if(XM==-1)

       {

              printf("\t不存在该学生信息!\n");                 

       }

       else

       {

              printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

        printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n\n",s[XM].name,s[XM].num,s[XM].chinese,s[XM].math,s[XM].english,s[XM].c_program,s[XM].sum,s[XM].average);

        printf("\t请重新输入该学生信息:\n");

        printf("\t姓名:");

        scanf("%s",s[XM].name);

        printf("\t学号:");

        scanf("%s",s[XM].num);

              for (j=0;j<Number;j++)

              {

                     if(strcmp(s[XM].num,s[j].num)==0&&XM!=j)

                     {

                            k=1;

                     }

              }

              if(k!=0)

              {

                     printf("\t修改失败,学号重复!\n");       

              }

              else

              {

                     printf("\t[语文]成绩:");

                     scanf("%f",&s[XM].chinese);

                     printf("\t[数学]成绩:");

                     scanf("%f",&s[XM].math);

                     printf("\t[英语]成绩:");

                     scanf("%f",&s[XM].english);

                     printf("\t[C语言设计]成绩:");

                     scanf("%f",&s[XM].c_program);

                     fp=fopen("C:student.dat","wb");

                     s[XM].sum=s[XM].chinese+s[XM].math+s[XM].english+s[XM].c_program;

                     s[XM].average=s[XM].sum/4;

                     for (i=0;i<Number;i++)

                            {

                                   fwrite(&s[i],sizeof(struct student),1,fp);

                            }

                    

             

                     fclose(fp);     

                     printf("\t\t\t\t==>修改成功<==\n");

              }

       }

}           

void fh()

{

       printf("\t\t\t   ==>按Enter键返回主菜单<==");

}

void xmcz()

{

       char name[7];

       int i=0,j=0;

       printf("\t请输入要查找的学生姓名:");

       scanf("%s",name);

       system("cls");

       printf("\t查找结果:\n");

       for (i=0;i<Number;i++)

       {

              if (strcmp(name,s[i].name)==0)

              {

                     j=1;

                     printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

                     printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);

              }

       }

       if (j==0)

       {

              printf("\t不存在该学生信息!\n");

       }

}

void xhcz()

{

       char id[7];

       int i=0,j=0;

       printf("\t请输入要查找的学生学号:");

       scanf("%s",id);

       system("cls");

       printf("\t查找结果:\n");

       for (i=0;i<Number;i++)

       {

              if (strcmp(id,s[i].num)==0)

              {

                     j=1;

                     printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

                     printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);

              }

       }

       if (j==0)

       {

              printf("\t不存在该学生信息!\n");

       }

}

void xmsc()

{

       FILE *fp=NULL;

       char name[60];

       int i=0,j=0,k=0;

       printf("\t请输入要删除的学生姓名:");

       scanf("%s",name);

       for(i=0;i<Number;i++)

       {

              if (strcmp(name,s[i].name)==0)

              {

                     printf("\t删除的学生信息:\n姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

                     printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);

                     for (j=i;j<Number-1;j++)

                     {

                            s[j]=s[j+1];

                     }

                     Number--;

                     k=1;

              }

       }

       fp=fopen("C:student.dat","wb");

       for (i=0;i<Number;i++)

       {

              fwrite(&s[i],sizeof(struct student),1,fp);

       }

       fclose(fp);

       if(k==1)

              printf("\t\t\t\t==>删除成功<==\n");

       else

              printf("\t\t\t\t==>信息不存在<==\n");

}

void cz()

{

       int n=0;

       printf("\t请选择查找方式:\n");

       printf("\t1 按姓名查找\n");

       printf("\t2 按学号查找\n");

       scanf("%d",&n);

       switch(n)

       {

       case 1: xmcz();break;

       case 2: xhcz();break;

       default: printf("\t输入有误,结束!\n");break;

       }

}

void xhsc()

{

       FILE *fp=NULL;

       char id[60];

       int i=0,j=0,k=0;

       printf("\t请输入要删除的学生学号:");

       scanf("%s",id);

       for(i=0;i<Number;i++)

       {

              if (strcmp(id,s[i].num)==0)

              {

                     printf("\t删除的学生信息:\n姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

                     printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);

                     for (j=i;j<Number-1;j++)

                     {

                            s[j]=s[j+1];

                     }

                     Number--;

                     k=1;

              }

       }

       fp=fopen("C:student.dat","wb");

       for (i=0;i<Number;i++)

       {

              fwrite(&s[i],sizeof(struct student),1,fp);

       }

       fclose(fp);

       if(k==1)

              printf("\t\t\t\t==>删除成功<==\n");

       else

              printf("\t\t\t\t==>信息不存在<==\n");

}

void sh()

{

       int n=0;

       printf("\t请选择删除方式:\n");

       printf("\t1 按姓名删除\n");

       printf("\t2 按学号删除\n\t");

       scanf("%d",&n);

       switch(n)

       {

       case 1: xmsc();break;

       case 2: xhsc();break;

       }

}

void px()

{

       struct student P;

       int X=0;

       int i=0,j=0,k=0;

       for(i=0;i<Number-1;i++)

       {

              for(j=0;j<Number-1-i;j++)

              {

                     if(s[j].average>s[j+1].average)

                     {

                            P=s[j];

                            s[j]=s[j+1];

                            s[j+1]=P;

                     }

              }

       }

       printf("\t你想输出前几名的成绩:");

       scanf("%d",&X);

       if (X>Number)

       {

              X=Number;

       }

       i=1;

       printf("\t\t\t名次\t姓名\t学号\t平均成绩\n");

       for(k=Number-1;k>(Number-X-1);k--)

       {

              printf("\t\t\t%d\t%s\t%s\t%.2f\n",i,s[k].name,s[k].num,s[k].average);

              if(s[k].average!=s[k-1].average)

              {i++; }

       }

}

void bjg()

{

       int i=0,j=0;

       for (i=0;i<Number;i++)

       {

              if(s[i].chinese<60||s[i].math<60||s[i].english<60||s[i].c_program<60)

              {j++;}

       }

       if(j==0)

              printf("\t不存在不及格的学生!\n\n");

       else

       {

              printf("\t以下是 %d 名不及格的学生信息:\n",j);

              printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");

       }

       for (i=0;i<Number;i++)

       {

              if(s[i].chinese<60||s[i].math<60||s[i].english<60||s[i].c_program<60)

              {

                     printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);

              }

       }

}

void xg()

{

       int way=0;

       printf("\t请选择修改查找方式\n");

       printf("\t1 按姓名查找修改\n");

       printf("\t2 按学号查找修改\n\t");

       scanf("%d",&way);

       switch(way)

       {

       case 1: xmxg();

              break;

       case 2: xhxg();

              break;

       default: printf("\t输入有误,结束!\n");

              break;

       }

}

int main()        

{

       int choose=0;

       FILE *fp=NULL;

       char yesorno;

       if((fp=fopen("C:student.dat","rb"))==NULL)

       {

              printf("\n\t\t\t==>提示:文件不存在,是否要创建一个?(y/n)\n");

              scanf("%c",&yesorno);

              if(yesorno=='y'||yesorno=='Y')

              {

                     fp=fopen("C:student.dat","wb");

                     fclose(fp);

              }

              else

                     exit(0);

       }

       else

       {

              Number=dq(s);

       }

       system("cls");

       while(true)

       {

              Number=dq(s);

              menu();

              printf("\n\t\t\t==>请选择操作:");

              scanf("%d",&choose);

              system("cls");

              switch(choose)

              {

              case 0: exit(0);

                     break;

              case 1: add();

                     fh();break;

              case 2: select();

                     fh();break;

              case 3: cz();

                     fh();break;

              case 4: sh();

                     fh(); break;

              case 5:xg();

                     fh();break;

              case 6: px();

                     fh();break;

              case 7: bjg();

                     fh(); break;

              default:

                     printf("\t输入错误!\n");

                     fh();

                     break;

              }

              fflush(stdin);

              getchar();

              system("cls");

       }

}

相关推荐