C课程设计学生成绩管理系统.docx
- 文档编号:9496492
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:32
- 大小:328.98KB
C课程设计学生成绩管理系统.docx
《C课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C课程设计学生成绩管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
C课程设计学生成绩管理系统
二○一○~二○一一学年第一学期
信息科学与工程学院
课程设计报告书
课程名称:
班级:
学号:
姓名:
指导教师:
二○一○年九月
学生成绩管理程序
一、需求分析:
设计要求:
◆能录入学生信息存储在文件中,每位学生录入的信息有:
姓名、学号、性别、班级、和三门功课(数学,英语,计算机)的成绩。
如:
学号姓名性别班级数学英语计算机
0701王鹏男1班705898
0702李燕女2班688895
0703赵亚芳女3班584896
0704刘飞男4班677858
◆能够统计每个学生三门课程的总成绩;
◆能按学生学号查询其三门功课成绩并显示;
◆能浏览全部学生成绩;
◆能按总成绩由高到低显示学生信息。
系统功能分析:
该学生成绩管理系统有八大功能:
1.录入功能:
能录入学生的学号,姓名,性别,英语,计算机等
2.排序功能:
能按总分排序
3.查询功能:
能按姓名查找该生的成绩并且显示其全部成绩
4.删除功能:
能按学号删除某一个学生的成绩
5.修改功能:
能按姓名修改某个学生的成绩
6.插入功能:
能在已输入的成绩中插入一个新学生的成绩
7.显示功能:
操作完以上的功能后每次返回主菜单选择该项便可将结果显示出来
8.保存与读取功能:
能将数据自定义的txt格式保存在外部磁盘并且读取,
二、概要设计:
(1)主函数结构图:
(2)模块功能详细说明及思路:
A、录入模块:
此模块可以连续输入80个学生的资料,若学生数少于80,录入完后输入n就可退出此模块,输入y可以继续
B、排序模块:
在此模块可以将已经输入进来的学生按总分进行排序,此处排序使用的冒泡排序法
C、查询模块:
此模块中使用学生姓名对比查找,如对比存在就显示出来
D、修改模块:
此模块中先通过姓名对比找到要修改的学生成绩,然后覆盖原来已有的成绩从而达到修改某一个学生的任何一门功课的成绩
E、删除模块:
此模块中用到的删除原理为覆盖要删除的学生的资料。
过程简述,先输入要删除的学生的学号,系统找到此学生的信息后会给一个提示,是否删除信息,如是系统会再次要求输入学号并给它复制下一个学生的信息,给下一个学生的纪录复制下下一个学生的信息,一直到最后一个学生的信息复制给倒数第二个学生的信息为止。
然后文件中的学生总数减一。
F、插入模块:
此模块能是在定义num当前已有的学生个数后,通过循环在后面加入的,直到输入N或n为止,即可完成插入函数
G、显示模块:
此模块能是被其它函数调用执行一次操作,再回到主菜单调用显示出经过以上操作的最终结果
H、保存和读入模块:
此模块能将信息以txt形式保存在外部磁盘上,并且也能从外部磁盘读入给程序使用
三、详细设计:
(1)各个模块的程序流程图
录入模块:
删除模块:
求和函数:
排序模块:
查询模块:
插入模块
修改模块:
保存模块:
打开模块:
三、主要程序代码清单及关键注释
1,程序源代码:
#include
#include
#include
#defineMAX80
voidinput();/*原始数据录入函数*/
voidoutput();/*显示操作结果函数*/
voidsortall();/*对总分分排序*/
voidfind();/*根据姓名查找成绩*/
voidinsert();/*插入一个成绩*/
voiddel();/*删除成绩记录*/
voidchange();/*修改记录*/
voidsave();/*保存函数*/
voidread();/*读入函数*/
voidaverage();/*求平均分*/
intnum=0;
structstudent//学生信息
{
intno;
charname[20];
charsex[4];
charban[8];
floatmath;
floatenglish;
floatcomputer;
floatave;
floatsum;
};
structstudentstu[MAX],*p;
voidmain()/*主函数*/
{
intas;
inti;
start:
{
printf("%55s\n","\3武汉科技大学学生成绩管理系统\3\n");
printf("\t\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf("制作者:
武汉科技大学信息科学与工程学院自动化0901肖小龙\n");
}
do
{
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("\51输入信息\52输出信息\n");
printf("\53按平均分排序\54按姓名查找\n");
printf("\55插入\56按学号删除\n");
printf("\57按姓名修改\58保存到文件\n");
printf("\59读取文件\50退出\n");
for(i=0;i<=79;i++)
putchar('=');
putchar('\n');
printf("%s\n","\6请输入各操作对应的序号:
");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
case1:
system("cls");input();break;
case2:
system("cls");output();break;
case3:
system("cls");sortall();break;
case4:
system("cls");find();break;
case5:
system("cls");insert();break;
case6:
system("cls");del();break;
case7:
system("cls");change();break;
case8:
system("cls");save();break;
case9:
system("cls");read();break;
case0:
system("exit");exit(0);
default:
system("cls");gotostart;
}
}while
(1);
}
voidinput()/*原始数据录入模块*/
{
inti=0;
charch;
do
{
printf("\t\t\t\t1.录入学生信息\n\5请输入第%d个学生的信息\5\n",i+1);
printf("\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\n\6输入学生学号:
");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n\6输入学生姓名:
");
fflush(stdin);
gets(stu[i].name);
printf("\n\6输入学生性别:
");
fflush(stdin);
gets(stu[i].sex);
printf("\n\6输入学生班级:
");
fflush(stdin);
gets(stu[i].ban);
printf("\n\6输入学生数学成绩:
");
fflush(stdin);
scanf("%f",&stu[i].math);
printf("\n\6输入学生英语成绩:
");
fflush(stdin);
scanf("%f",&stu[i].english);
printf("\n\6输入学生计算机成绩:
");
fflush(stdin);
scanf("%f",&stu[i].computer);
printf("\n\n");
i++;
num=i;
printf("是否继续输入?
(Y/N)");
fflush(stdin);
ch=getchar();
system("cls");
}
while(ch!
='n'&&ch!
='N');
system("cls");
}
voidoutput()/*显示数据函数*/
{
inti;
charas;
average();
do
{
printf("\t\t\t\5班级学生信息表\5\n");
for(i=0;i<80;i++)
putchar('-');
printf("\t|学号\t|姓名\t|性别\t|班级\t|数学\t|英语\t|计算机\t|平均分\t|总分");
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
for(i=0;i { printf("\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f",stu[i].no,stu[i].name,stu[i].sex,stu[i].ban,stu[i].math,stu[i].english,stu[i].computer,stu[i].ave,stu[i].sum); putchar('\n'); } for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("按回车键继续: "); getchar(); getchar(); as=getchar(); }while(! as); system("cls"); } voidaverage()/*求平均数*/ { inti; for(i=0;i { stu[i].sum=stu[i].math+stu[i].english+stu[i].computer; stu[i].ave=stu[i].sum/3; } } voidsortall()/*按总分排序数据函数*/ { structstudenttemp; inti,j; average(); for(i=1;i { for(j=1;j<=num-i;j++) { if(stu[j-1].sum { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } voidfind()/*查询函数*/ { inti; charstr[20],as; do { printf("\t\t\3欢迎进入查询系统\3\n"); printf("\4请输入要查询的学生姓名: "); fflush(stdin); gets(str); for(i=0;i if(! strcmp(stu[i].name,str)) { printf("\t|学号\t|姓名\t|性别\t|班级\t|}数学\t|英语\t|计算机\t|平均分\t|总分|\n"); printf("\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].ban,stu[i].math,stu[i].english,stu[i].computer,stu[i].ave,stu[i].sum); for(i=0;i<80;i++) putchar('='); putchar('\n'); } printf("\t\t\4按任意键返回主菜单."); fflush(stdin); as=getchar(); } while(! as); system("cls"); } voidinsert()/*插入数据函数*/ { charch; do { printf("\t\t\3欢迎进入插入系统: \3\n"); printf("\n\t\t\6请输入新插入学生信息\n"); printf("\n\6输入学生学号: "); scanf("%d",&stu[num].no); fflush(stdin); printf("\n\6请输入学生姓名: "); fflush(stdin); gets(stu[num].name); printf("\n\6请输入学生性别: "); fflush(stdin); gets(stu[num].sex); printf("\n\6请输入学生班级: "); fflush(stdin); gets(stu[num].ban); printf("\n\6请输入学生数学成绩: "); fflush(stdin); scanf("%f",&stu[num].math); printf("\n\6请输入学生英语成绩: "); fflush(stdin); scanf("%f",&stu[num].english); printf("\n\6请输入学生计算机成绩: "); fflush(stdin); scanf("%f",&stu[num].computer); printf("\n\n"); num=num+1; sortall(); printf("是否继续输入? (Y/N)"); fflush(stdin); ch=getchar(); system("cls"); } while(ch! ='n'&&ch! ='N'); } voiddel()/*删除数据函数*/ { intinum,i; charch; printf("\t\t\3欢迎进入删除系统: \3\n"); printf("\5输入要删除学员的编号: "); scanf("%d",&inum); printf("\6你真想删除该学生的信息吗? 一但删除不能恢复\6\n"); printf("是否继续? (Y/N)"); fflush(stdin); ch=getchar(); system("cls"); if(ch=='y'||ch=='Y') { printf("\6请再次输入要删除学员的编号: "); scanf("%d",&inum); } else gotoa; for(i=0;i { if(stu[i].no==inum) { if(i==num) num-=1; else { stu[i]=stu[num-1]; num-=1; } sortall(); break; } } printf("删除成功! "); a: ; system("cls"); } voidchange()/*修改数据函数*/ { inti; charstr[20]; printf("\t\t欢迎进入成绩修改系统: "); printf("\6输入要修改的学生姓名: "); fflush(stdin); gets(str); for(i=0;i if(! strcmp(stu[i].name,str)) { system("cls"); printf("\n\t\t\6请输入新插入学生信息\n"); printf("\n输入学生学号: "); scanf("%d",&stu[i].no); fflush(stdin); printf("\n\6输入学生姓名: "); fflush(stdin); gets(stu[i].name); printf("\n\6输入学生性别: "); fflush(stdin); gets(stu[i].sex); printf("\n\6输入学生班级: "); fflush(stdin); gets(stu[i].ban); printf("\n\6输入学生数学成绩: "); fflush(stdin); scanf("%f",&stu[i].math); printf("\n\6输入学生英语成绩: "); fflush(stdin); scanf("%f",&stu[i].english); printf("\n\6输入学生计算机成绩: "); fflush(stdin); scanf("%f",&stu[i].computer); printf("\n\n"); sortall(); break; } system("cls"); } voidsave()/*保存数据函数*/ { FILE*fp; inti; charfilepath[20]; printf("输入要保存的文件路径: "); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) { printf("\n保存失败! "); exit(0); } fprintf(fp,"\t|学号\t|姓名\t|性别\t|班级\t|数学\t|英语\t|计算机\t|平均分\t|总分\n"); for(i=0;i { stu[i].sum=stu[i].math+stu[i].english+stu[i].computer; stu[i].ave=stu[i].sum/3; fprintf(fp,"\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].ban,stu[i].math,stu[i].english,stu[i].computer,stu[i].ave,stu[i].sum); } fclose(fp); printf("学生信息已保存在%s中! \n",filepath); system("pause"); system("cls"); } voidread()/*读取功能*/ { FILE*fp; inti; charfilepath[20]; printf("输入要读入的文件路径: "); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"r"))==NULL) { printf("找不到%s文件! \n",filepath); system("pause"); exit(0); } num=0; for(i=0;i feof(fp);i++) { fscanf(fp,"\t学号\t姓名\t性别\t班级\t数学\t英语\t计算机\t平均分\t总分\n"); fscanf(fp,"\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].ban,stu[i].math,stu[i].english,stu[i].computer,stu[i].ave,stu[i].sum); num++; } fclose(fp); printf("保存的在文件%s中的所有信息已经读入! \n",filepath); system("pause"); system("cls"); } 五,调试分析过程描述: 数据测试 1、菜单主页面 2、选择输入信息 添加完毕后回到主菜单,选择2,显示添加成功 可以看到总分一栏并未被排序,返回主菜单选择3,再选择2即可显示 可以看到排序成功,证明排序功能存在 3、选择4按姓名查找 4、选择5插入功能 5、选择删除功能 6、选择修改功能7 可以看到修改后刘飞的总成绩变为266,原为203 7、选择保存8 可以重新打开看到记事本中已有记录,说明保存成功 8、对程序调试过程的思考: 1.每次录入信息时,如果出错时,很难更改,不能进行重新更改功能,经调试和修改还未能解决,另外没能将删除的信息进行恢复,2.有部分函数执行后不能立即显示结果,需要返回到主菜单调用其他的。 3.另外在录如时不能检查是否因误录入导致学号相同,再删除时只能删掉一个4.对调试的看法,首先要要按一定的步骤来处理,昨天由于没有按一定的步骤,结果花了很长时间也未能搞好。 六、课程设计小结: 1、在设计过程中的感受: 首先经过的是暑期在家准备编写程序,并在开学第一周进行调试,并最后附一段的报告总结,我对C这门语言有了新的认识,应该是获益不浅! 在此过程中给我最大的体会是要想编写一个准确、高效并有使用价值的程序,一定先1.要对课本知识熟悉,因为,在调试过程中,可以发现好多出错误是在基本的知识上,2.还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。 就光调试程序用的时间最对,稍改一点,就可能得不到预期的结果。 这次课程设计,让我对C语言了解更进一层,而且还得到了用C语言解决实际问题的宝贵经验。 其次,通过此次编程我也发现了自己在学习中的错误和不足,不仅复习了以前学过的知识。 同时也学到了一些没学过的知识,让我从中收益非浅,也为即将到来的计算机二级考试准备了一下! 更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法! 再则,因为初次接触等原因此次设计遇到了许多问题,我深刻体会到网络所发挥的重要作用,因为好多不懂的在网上基本能找到相关的解答。 C语言程序对我们来说比较难,在匆匆忙忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,虽然匆忙但是初步了解如何调试,以后还得多练习,才能有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 学生 成绩管理系统