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");
}
}
}
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
学生成绩管理系统课程设计报告书学生成绩管理系统单位分院班级学号姓名指导老师完成日期20xx年7月14日1学生成绩管理系统内容摘要摘…
数据结构课程设计报告学号0820xx106姓名付振华日期20xx年7月9日一课程设计题目学生成绩管理二需求分析给出n个学生的m门考…
学生成绩管理系统用户名xdxy密码700619includeltstdiohgtincludeltconiohgt清屏includ…
内蒙古科技大学课程设计论文内蒙古科技大学本科生课程设计论文题目学生成绩管理系统学生姓名胡书培学号1067111106专业计算机科学…
福建师范大学人民武装学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师陈琳姓名黄强学号119xx20xx0262…
学生成绩管理系统课程设计报告书学生成绩管理系统单位分院班级学号姓名指导老师完成日期20xx年7月14日1学生成绩管理系统内容摘要摘…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
C程序设计报告C语言课程设计题目学生信息管理系统设计者梁天江专业机械设计制造及其自动化班级学号0720xx31所属院系机电学院指导…
C程序设计报告C语言课程设计题目班级学生成绩管理系统设计者焦鹏专业经济学班级学号08112227所属院系经济管理学院指导教师马钊2…
移通学院C语言程序设计报告书设计名称学生成绩管理系统专业指导老师班级姓名学号座号时间一实验目的1在编辑应用程序过程中逐步加深对C语…