C语言课程设计报告 学生成绩管理系统

C语言课程设计报告

题目:学生成绩管理系统

学院:      计算机与信息工程学院 

专业:      信息管理与信息系统   

班级:      09级1班            

学号:      094631105            

姓名:      阿布都许克尔·尔肯   

指导老师:  达新民               

成绩:                            

   

20##年5月18日

C语言程序设计课程设计报告

一.课程设计题目: <<学生成绩管理系统>>.

二.课程设计内容:

1. 成绩录入

可以保存每个学生的多门课成绩;

成绩一边录入,一边统计每个学生各门课程的总成绩;

录入成绩的时候自动保存,不必手动保存。

2. 成绩查询

提供“按学号查询”和“按姓名查询”等两种查询。用户看自己的情况可以调选进行有关的成绩查询;

如果查询成功的话,分别输出学生的“学号”、“姓名”、“各门课程的成绩”、“各门课程的总成绩”和“平均成绩”;

如果查询失败,输出“没有这个同学”并返回查询界面;

如果再不想查询输入“0”可以返回主页面。

3. 成绩排序

提供“按学号排序”、“按姓名排序”、“按成绩排序”的三种排序。用户看自己的情况可以调选进行有关的排序;

进行某个排序的时候,电脑自动执行排序功能快速的排序;

缺点是一次智能执行一种排序,不能同时执行多种排序;

排序完毕后,自动返回主页面。

4. 建立文件

存储文件使用指定文件名;

自动保存输入记录在文件里面;

如果已有文件,不保存文件。

5. 成绩读取

进行“读取成绩”操作的时候,提示您输入文件名,输入文件名以后计算机自动搜索文件,如果找到屏幕上显示文件里面的数据,如入没有那样的文件输出文件不存在。

注意:读取的文件是您“建立文件“方式建立的文件。

6. 显示成绩和打印文件

1)      显示成绩

该功能是打印前面准备;

执行“显示成绩”命令之后屏上显示现在打印的成绩报表;

显示的内容是每个学生的学号”、姓名、各门课程的成绩、各门课程的总成绩和平均成绩。

2)      打印成绩

该功能是用打印文件里保存的的学生信息和学生成绩;

打印准备好后执行该功能,打印出文件保存的每个学生的学号、姓名、各门课程的成绩、各门课程的总成绩和平均成绩;

如果打印机没准备好,屏幕上输出“打印机没准备好”。

7. 退出

  该功能用使用完后退出程序。

三.课程设计要求:

1.整体功能:

1) 可以随时添加、检索、排序、保存、读取、打印记录。

2) 默认的学生总数100,课程总数10。这两个数字看情况可以改。

3) 是学号可由10位字符(10位数字、10个英文字母或10个混合编码)组成的。

4) 使姓名可由20位字符(20位数字、20个英文字母或20个混合编码)组成的。

5) 使课程名称可由20位字符(20位数字、20个英文字母或20个混合编码)组成的。

6) 学生成绩按照学生总数和课程总数确定。

7) 录入学生成绩的时候,一边录入成绩,一边计算机自动计算总成绩和平均成绩。

8) 将输出学生信息和成绩栏,例如

姓名   学号   access   C语言   数据结构   总成绩   平均成绩

李四   1234     96       79       85        260      86.7

 9) 使用菜单实现功能的正确的选择

 10) 所有节点信息和成绩都是动态生成。

2.测试程序:

 应列出测试大纲对程序进行测试;

应保证测试用例测试到程序的各种边缘情况.

四.课程设计的总体设计(包含的功能模块):

1. 函数声明部分和全局变量定义部分:

#define MAXN 100

#define MAXM 10

char kecheng_mingcheng[MAXM][12];

char xuehao[MAXN][10];

char xingming[MAXN][20];

float kecheng_chengji[MAXN][MAXM];

float zongchengji[MAXN];

int m,n;

void shuru();

void chaxun();

void paixu();

void baocun();

void duqu();

void dayin_chengji();

void tuichu();

2. 成绩录入功能:void shuru();

3. 成绩查找功能:void chaxun();

4. 成绩排序功能:void paixu();

5. 成绩保存功能: void baocun();

6. 成绩读取功能:void duqu();

7. 成绩打印功能:void dayin_chengji();

8. 退出功能:    void tuichu();

[系统功能模块结构图]

组织结构图

五.详细设计(功能模块的具体实现)相关图如下:

1.成绩录入功能:

组织结构图

2.成绩查询功能:

组织结构图

3.成绩排序功能:

组织结构图

4. 成绩保存功能

组织结构图

5.成绩读取功能:

组织结构图

6.成绩打印功能:

组织结构图

六.各模块(函数)的功能介绍,设计描述。

1.模块的功能介绍:

主函数:              void main()

成绩录入:        void shuru();

成绩查找:        void chaxun();

按学号查找:  void chaxun1();

按姓名查找:  void chaxun2();

成绩排序:        void paixu();

按学号排序:  void paixu1();

按姓名排序:  void paixu2();

按成绩排序:  void paixu3();

成绩保存:     void baocun();

成绩读取:     void duqu();

成绩打印:     void dayin_chengji();

显示报表:     void dayin_chengji1();

打印成绩:     void dayin_chengji2();

退出功能:     void tuichu();

2.数组设计描述:

#define MAXN 100

#define MAXM 10

char kecheng_mingcheng[MAXM][12];

char xuehao[MAXN][10];

char xingming[MAXN][20];

float kecheng_chengji[MAXN][MAXM];

float zongchengji[MAXN];

int m,n;

这是一个二维数组,其中MAXN表示班级人数的最大值,MAXM表示课程门数的最大值,xingming表示学生的姓名,xuehao表示学生的学号,kecheng_mingcheng表示每门课程的名称,kecheng_chengji表示学生每门课程的成绩,zongchengji表示学生每门课程的总成绩,n表示我们当前输入的学生人数,m表示我们当前输入的课程门数。

七.实验结果:

1.      录入成绩:

请输入全班人数:2↙

请输入课程门数:2↙

请输入2门课程名称:

第1门课程名称:access↙

第2门课程名称:C语言↙

请输入2个学生的数据:

请输入第1个学生的数据:

学号:094631101↙

姓名:许克尔↙

2门课程的成绩:

Access:98↙

C语言:97↙

请输入第2个学生的数据:

学号:094631102↙

姓名:阿吉↙

2门课程的成绩:

Access:94↙

C语言:93↙

输入成功。

2.      查询成绩:

选1:

请输入要查询的学号:094631101↙

学号:094631105

姓名:许克尔

Access:98

C语言:97

总成绩:195.00

平均成绩:97.50

      

<如果>

094631108↙

没有这个同学。

      

选2:

请输入你要查询的姓名:阿吉↙

学号:094631102

姓名:阿吉

Access:94

C语言:93

总成绩:187.00

平均成绩:93.50

      

<如果>

麦麦提↙

没有这个同学。

      

选0:返回主页面。

3. 成绩排序:

  选1:排序完毕。

选2:排序完毕。

选3:排序完毕。

选0:返回主页面。

4. 成绩保存:

  请输入文件名:信管091↙

  保存完毕。

5. 成绩读取:

请输入文件名:信管091↙

学号                姓名             access           C语言         总成绩         平均成绩

094631101      许克尔         98                 97                 195.00          97.50

094631102      阿吉             94                 93                 187.00          93.50

读取完毕。

<如果>

信管081↙

文件不存在。

6.      显示和打印成绩:

选1:

成绩总表

学号               姓名             access           C语言         总成绩         平均成绩

094631101     许克尔         98                 97                 195.00          97.50

094631102     阿吉             94                 93                 187.00          93.50

显示完毕。

选2:

请准备打印机,按任意键继续……

<如果打印机没准备>

打印机没有准备好!

<如果准备好>

成绩总表

学号                姓名             access           C语言         总成绩         平均成绩094631101 许克尔     98                 97                 195.00          97.50

094631102       阿吉             94                 93                 187.00          93.50

打印完毕。

八.体会及总结:

这次的课程设计总体来说,比前段时期的C语言综合实验难度大了好多,而且综合性更强,少了综合实验是老师给我们提供的那些函数,所有的函数都要自己去想,自己去找,翻阅好多的书,上机自己动手体验,极大的促进了自己的动手能力及独立思考能力,,总体上完成了老师要求的基本功能,没有完成其他的扩展功能,有待改进的地方就是未能设置很好的界面。

九.参考文献:

《C语言程序设计》     第二版  主编:占跃华    出版社:北京邮电大学出版社

班次:20##年6月第二次印刷

十.程序清单:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define MAXN 100                      //班里的最多人数

#define MAXM 10                                          //最多课程门数

char kecheng_mingcheng[MAXM][12];      //保存所有课程的名称                          

char xuehao[MAXN][10];                        //保存学号

char xingming[MAXN][20];                        //保存姓名

float kecheng_chengji[MAXN][MAXM];      //保存全班所有课程名称

float zongchengji[MAXN];                          //保存总成绩

int m,n;                                               //全局变量  n,m保存全班实际人数和课程数

void shuru();

void chaxun();

void paixu();

void baocun();

void duqu();

void dayin_chengji();

void tuichu();

void shuru()                                                                 //输入成绩模块

{

       int i,j;

       printf("\n\n\n");

       printf("\t\t请输入全班人数:");

       scanf("%d",&n);

       printf("\t\t请输入课程门数:");

       scanf("%d",&m);

       printf("\t\t请输入%d门课程名称:\n",m);

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

       {

              printf("\t\t第%d门课程名称:",j+1);

              scanf("%s",&kecheng_mingcheng[j]);

       }

       printf("\n\t\t请输入%d个学生的数据:\n",n);

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

       {

              printf("\n\t\t请输入%d个学生的数据:\n",i+1);

              printf("\t\t学号:");

              scanf("%s",&xuehao[i]);

              printf("\t\t姓名:");

              scanf("%s",xingming[i]);

              printf("\n\t\t%d门课程的成绩:\n",m);

              zongchengji[i]=0;                                                 //边输入边统计总成绩

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

              {

                     printf("\t\t%s:",kecheng_mingcheng[j]);

                     scanf("%f",&kecheng_chengji[i][j]);

                     zongchengji[i]=zongchengji[i]+kecheng_chengji[i][j];

              }           

       }

       printf("\n\n\n\t\t\t输入成功。\n");

}

void chaxun()                                                                     //查询成绩模块

{

       int j;

       int chaxun1();

       int chaxun2();

       int xuanze,suoyin;

       while(1)

       {

              printf("\n\n\n\n\n");

              printf("\t\t    >>>>>> XX班学生成绩管理系统 <<<<<<\n\n\n");

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

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

              printf("\t\t    1. —————— 按学号查询\n");

              printf("\t\t    2. —————— 按姓名查询\n");

              printf("\t\t    0. —————— 返回\n");

              printf("\t\t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n");

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

              printf("\n\t\t请输入您的选择编号:");

              scanf("%d",&xuanze);

              switch(xuanze)

              {

              case 1: suoyin=chaxun1();break;

              case 2: suoyin=chaxun2();break;

              case 0: return;

              }

              if(suoyin!=-1)

              {

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

                     printf("\n\n\t\t学号:  %5s\n\n",xuehao[suoyin]);

                     printf("\t\t姓名:  %5s\n",xingming[suoyin]);

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

                     {

                            printf("\n\t\t%s:",kecheng_mingcheng[j]);

                            printf("%12.1f\n",kecheng_chengji[suoyin][j]);

                     }

                     printf("\n\t\t总成绩:%10.2f",zongchengji[suoyin]);

                     printf("\n\n\t\t平均成绩:%10.2f",zongchengji[suoyin]/m);

              }

              else      

                     printf("\n\n\n\t\t\t没有这个同学。\n\n\n");        

              }

}

int chaxun1()                                                                      //按学号查询模块

{

       int i;

       char s_xuehao[10];

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

       scanf("%s",s_xuehao);

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

              if(strcmp(xuehao[i],s_xuehao)==0)

                     break;

              if(i<n)

                     return i;

              else return -1;

}

int chaxun2()                                                        //按姓名查询模块

{

       int i;

       char s_xingming[20];

       printf("\n\t\t请输入要查询的姓名:");

       scanf("%s",s_xingming);

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

              if (strcmp(xingming[i],s_xingming)==0)

                     break;

              if(i<n)

                     return i;

              else return -1;

}

void paixu()                                                                               //排序模块

{

       void paixu1();

       void paixu2();

       void paixu3();

       int xuanze;

       while(1)

       {

              printf("\n\n\n\n\n");

              printf("\t\t    >>>>>> XX班学生成绩管理系统 <<<<<<\n\n\n");

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

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

              printf("\t\t    1. —————— 按学号排序\n");

              printf("\t\t    2. —————— 按姓名排序\n");

              printf("\t\t    3. —————— 按总成绩排序\n");

              printf("\t\t    0. —————— 返回\n");

              printf("\t\t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n");

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

              printf("\n\t\t请输入您的选择编号:");

              scanf("%d",&xuanze);

              switch (xuanze)

              {

              case 1: paixu1();break;

              case 2: paixu2();break;

              case 3: paixu3();break;

              case 0: return;

              }

       }

}

void paixu1()                                                        //按学号排序模块

{

       int i,j,k;

       char x_xuehao[10];

       char x_xingming[20];

       float x;

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

       {

              k=i;

              for(j=i+1;j<n;j++)

                     if(strcmp(xuehao[j],xuehao[k])<0)

                            k=j;

                     if(k!=i)

                     {

                            strcpy(x_xuehao,xuehao[i]);

                            strcpy(xuehao[i],xuehao[k]);

                            strcpy(xuehao[k],x_xuehao);

                            strcpy(x_xingming,xingming[i]);

                            strcpy(xingming[i],xingming[k]);

                            strcpy(xingming[k],x_xingming);

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

                            {

                                   x=kecheng_chengji[i][j];

                                   kecheng_chengji[i][j]=kecheng_chengji[k][j];

                                   kecheng_chengji[k][j]=x;

                            }

                            x=zongchengji[i];

                            zongchengji[i]=zongchengji[k];

                            zongchengji[k]=x;

                     }

       }

       printf("\n\n\n\n\n");

       printf("\t\t\t排序完毕。\n");

}

void paixu2()                                                                             //按姓名排序

{

       int i,j,k;

       char x_xuehao[10];

       char x_xingming[20];

       float x;

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

       {

              k=i;

              for(j=i+1;j<n;j++)

                     if(strcmp(xingming[j],xingming[k])<0)

                            k=j;

                     if(k!=i)

                     {

                            strcpy(x_xuehao,xuehao[i]);

                            strcpy(xuehao[i],xuehao[k]);

                            strcpy(xuehao[k],x_xuehao);

                            strcpy(x_xingming,xingming[i]);

                            strcpy(xingming[i],xingming[k]);

                            strcpy(xingming[k],x_xingming);

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

                            {

                                   x=kecheng_chengji[i][j];

                                   kecheng_chengji[i][j]=kecheng_chengji[k][j];

                                   kecheng_chengji[k][j]=x;

                            }

                            x=zongchengji[i];

                            zongchengji[i]=zongchengji[k];

                            zongchengji[k]=x;

                     }

       }

       printf("\n\n\n\n\n");

       printf("\t\t\t排序完毕。\n");

}

void paixu3()                                                                      //按总成绩排序模块

{

       int i,j,k;

       char x_xuehao[10];

       char x_xingming[20];

       float x;

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

       {

              k=i;

              for(j=i+1;j<n;j++)

                     if(zongchengji[j]<zongchengji[k])

                            k=j;

                     if(k!=i)

                     {

                            strcpy(x_xuehao,xuehao[i]);

                            strcpy(xuehao[i],xuehao[k]);

                            strcpy(xuehao[k],x_xuehao);

                            strcpy(x_xingming,xingming[i]);

                            strcpy(xingming[i],xingming[k]);

                            strcpy(xingming[k],x_xingming);

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

                            {

                                   x=kecheng_chengji[i][j];

                                   kecheng_chengji[i][j]=kecheng_chengji[k][j];

                                   kecheng_chengji[k][j]=x;

                            }

                            x=zongchengji[i];

                            zongchengji[i]=zongchengji[k];

                            zongchengji[k]=x;

                     }

       }

       printf("\n\n\n\n\n");

       printf("\t\t\t排序完毕。\n");

}

void baocun()                                                       //保存成绩模块

{

       FILE *fp;

       char wenjianming[20];

       int i,j;

       printf("\n\n\n\n\n");

       printf("\t\t\t请输入文件名:");

       scanf("%s",wenjianming);

       if((fp=fopen(wenjianming,"w"))==NULL)

       {

              printf("\n\n\n\n\n");

              printf("\t\t\t文件无法保存。\n");

              return;

       }           

       fprintf(fp,"%d %d",n,m);

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

              fprintf(fp,"%s",kecheng_mingcheng[j]);

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

       {

              fprintf(fp,"%s %s",xuehao[i],xingming[i]);

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

                     fprintf(fp,"%5.1f",kecheng_chengji[i][j]);

       }

       fclose(fp);

       printf("\n\n\n\n\n");

       printf("\t\t\t保存完毕。\n");

      

}

void duqu()                                                                 //提取成绩模块

{

       FILE *fp;

       char wenjianming[20];

       int i,j;

       printf("\n\n\n\n\n");

       printf("\t\t\t请输入文件名:");

       scanf("%s",wenjianming);

       if((fp=fopen(wenjianming,"r"))==NULL)

       {

              printf("\n\n\n\n\n");

              printf("\t\t\t文件不存在。\n");

              return;

       }

       fscanf(fp,"%d%d",&n,&m);

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

              fscanf(fp,"%s",kecheng_mingcheng[j]);

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

       {

              fscanf(fp,"%s%s",xuehao[i],xingming[i]);

              zongchengji[i]=0;

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

              {

                     fscanf(fp,"%f",kecheng_chengji[i][j]);

                     zongchengji[i]=zongchengji[i]+kecheng_chengji[i][j];

              }

       }

       fclose(fp);

       printf("\n\n\n\n\n");

       printf("\t\t\t读取完毕。\n");          

}

void dayin_chengji()                                                   //打印成绩报表模块

{

       void dayin1();

       void dayin2();

       int xuanze;

       printf("\n\n\n\n\n");

       printf("\t\t    >>>>>> XX班学生成绩管理系统 <<<<<<\n\n\n");

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

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

       printf("\t\t    1. —————— 屏幕显示报表\n");

       printf("\t\t    2. —————— 打印机打印报表\n");

       printf("\t\t    3. —————— 返回\n");

       printf("\t\t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n");

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

       printf("\n\t\t请输入你的选择编号:");

       scanf("%d",&xuanze);

       switch(xuanze)

       {

       case 1: dayin1();break;

       case 2: dayin2();break;

       case 0: return;

       }

}

void dayin1()                                                       //屏幕显示报表模块

{

       int i,j;

       printf("\n\n\n\n");

       printf("成绩总表\n\n");

       printf("学号\t     姓名");

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

              printf("%14s",kecheng_mingcheng[j]);

       printf("\t   总成绩\t平均成绩\n");

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

       {

              printf("%8s %8s",xuehao[i],xingming[i]);

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

                     printf("%13.1f",kecheng_chengji[i][j]);

              printf("%13.1f %13.2f\n",zongchengji[i],zongchengji[i]/m);

       }

       printf("\n\n显示完毕。\n");

}

void dayin2()                                                                            //打印机打印报表模块

{

       FILE *fp;

       int i,j;

       printf("\n\n\n\n\n");

       printf ("\t\t\t请准备打印机,按任意键继续......\n");

       scanf("%*c");

       if((fp=fopen("prn","w"))==NULL)

       {

              printf("\n\n\n\n\n");

              printf("\t\t\t打印机没有准备好!\n");

              return;

       }

       fprintf(fp,"成绩总表\n");

       fprintf(fp,"学号 姓名\n");

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

              fprintf(fp,"%10s",kecheng_mingcheng[j]);

       fprintf(fp,"总成绩 平均成绩\n");

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

       {

              fprintf(fp,"%8s %8s",xuehao[i],xingming[i]);

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

                     fprintf(fp,"%6.1f",kecheng_chengji[i][j]);

              fprintf(fp,"%6.1f %6.2f\n",zongchengji[i],zongchengji[i]/m);

       }

       fclose(fp);

       printf("打印完毕。\n");

}

void tuichu()

{

              printf("\n\n\n\n\n");

              printf("\t\t    >>>>>> XX班学生成绩管理系统 <<<<<<\n\n\n");

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

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

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

              printf("\n\t\t**\t\t谢谢您的使用。       \t**\n");

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

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

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

              exit(0);

}

void main()

{

       int xuanze;

       while(1)

       {

              printf("\n\n\n\n\n");

              printf("\t\t    >>>>>> XX班学生成绩管理系统 <<<<<<\n\n\n");

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

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

              printf("\t\t    1. —————— 成绩录入\n");

              printf("\t\t    2. —————— 成绩查询\n");

              printf("\t\t    3. —————— 成绩排序\n");

              printf("\t\t    4. —————— 成绩保存\n");

              printf("\t\t    5. —————— 成绩读取\n");

              printf("\t\t    6. —————— 成绩报表打印\n");

              printf("\t\t    0. —————— 退出\n");

              printf("\t\t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n");

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

              printf("\n\t\t请输入您的选择编号:");

              scanf("%d",&xuanze);

              if(xuanze>=0 && xuanze<=6)

              {

                     switch(xuanze)

                     {

                     case 1: shuru();break;

                     case 2: chaxun();break;

                     case 3: paixu();break;

                     case 4: baocun();break;

                     case 5: duqu();break;

                     case 6: dayin_chengji();break;

                     case 0: tuichu();break;

                     }

              }

              else

              {

                    

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

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

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

                     printf("\n\t\t**\t    输入有误,请重新输入!\t**\n");

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

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

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

              }

       }

}

             

相关推荐