c语言课程设计 学生成绩管理.docx
- 文档编号:27608568
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:25
- 大小:273.15KB
c语言课程设计 学生成绩管理.docx
《c语言课程设计 学生成绩管理.docx》由会员分享,可在线阅读,更多相关《c语言课程设计 学生成绩管理.docx(25页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生成绩管理
中南大学
C语言程序设计实践报告
题目学生成绩管理系统
学生姓名
指导教师穆帅
学院信息科学与工程学院
专业班级
完成时间2010年7月5日
目录
一系统描述3
二功能模块结构4
三数据结构设计5
四主要模块的算法说明6
五运行结果11
六课程设计总结15
七参考文献16
八附录(源程序)17
一系统描述
系统的基本要求和内容:
1、该系统首先要能够实现数据的输入,即能够实现学生成绩和学生基本信息的输入。
学生的基本信息包括姓名、性别、学号、班级等,学生的成绩包括数学、语文、英语和平均成绩等。
2、数据输入完成后,系统可以显示出输入的数据并能修改有错误的数据,能够按照学生的学号删除无效的数据和删除所有的数据。
3、系统能够按照不同的方式将输入的数据进行排序,比如按照学生的学号大小或者按照学生的平均分高低进行排序,给程序使用者更大的方便。
4、系统能够根据指定要求查询某位学生的成绩(如按照学号查询)并对该成绩进行修改,若找不到,则显示输入的信息错误。
5、当数据录入完毕后,能够随时插入其他学生的数据。
6、数据输入完成后,系统能对不及格学生进行统计并列出不及格学生的名单。
7、系统的界面美观,便于使用者的使用。
二功能模块结构
1、根据该系统实现的功能,可以将系统分为4个功能模块,分别为数据录入模块、数据删除模块、数据查询模块和数据统计模块。
2、各模块的功能描述
1)数据录入模块:
该模块实现数据的录入和插入功能,录入或插入学生的基本信息与各科成绩。
2)数据删除模块:
该模块实现数据的删除,分为删除单个数据和删除全部数据两种。
3)数据查询模块:
该模块可以按照学生的学号对学生数据进行查询并显示。
4)数据统计模块:
该模块能够对输入的数据进行统计,找到不及格学生并显示,同时该模块可以按照学生的学号从小到大和平均成绩由高到低进行排序并显示。
3、各模块之间的关系
三数据结构设计
该系统定义了一个结构体----student,该结构体用来存放学生的基本信息学号、性别、姓名,班级和学生的成绩,学生成绩用数组score[3]来定义,分别存放数学、语文和英语成绩。
具体如下所示:
structstudent/*定义结构体*/
{
intnum;/*定义学号*/
charname[15];/*定义学生姓名*/
charsex[20];/*定义学生性别*/
charcla[20];/*定义班级*/
doublescore[3];/*定义学生成绩*/
doubleave;/*定义学生平均成绩*/
};
四主要模块的算法说明
1数据录入模块
该模块主要运用printf函数与scanf函数具体如下:
printf("\n\t\t\tStudent'snumber:
");
scanf("%d",&t.num);
printf("\n\t\t\tStudent'sname:
");
scanf("%s",&t.name);
…….
同时在计算学生的平均成绩时,需要使用for语句,来对录入的三个成绩进行相加,具体如下:
for(i=0;i<3;i++)
{
sum+=t.score[i];/*求总成绩*/
}
t.ave=sum/3;/*求平均成绩*/
returnt;
2数据删除模块
该模块根据学号来删除学生的数据,首先需使用scanf函数输入学号,再使用for一项一项比较输入的学号与结构体中已有学生的学号是否相同,若不同则输出错误,若相同则使用赋值语句将j+1学生的数据赋给j,这样即可实现j学生数据的删除,部分代码如下:
intdel(structstudents[],inttotal)/*定义删除函数*/
{
intt,i,j;
printf("\n\t\t\t\t**Deletearecord**\n\n");
printf("\n\t\t\t*************************************\n\n");
printf("\tPleaseinputthenumberyouwanttodelete:
");
scanf("%d",&t);
for(i=0;i {if(t==s[i].num) break;} if(i {for(j=i;j { s[j]=s[j+1]; } 3、数据查询模块 该模块可以按照学生的学号和数学成绩,查找并显示学生的数据,需要使用if和for语句。 if语句用来选择查询的方式,即按学号查询和按数学成绩查询,for语句用于循环,查找与所需条件吻合的学生数据,其中选择查找方式的代码如下: voidsearchNum(structstudents[],inttotal) { intt=0,p,v,q; system("cls"); printf("\n\t\t\t**Inquireaboutstudentinformation**\n\n"); printf("\n\t\t\t*************************************\n\n"); printf("\t\t\tSeleceachoice\n"); printf("\n\n\t*|1.Inquirebynum|*"); printf("\n\n\t*|2.Inquirebymathscore|*"); printf("\n\n\tGiveyourchoice(1-2): "); scanf("\t\t\t%d",&v); while(getchar()! ='\n'); 两种查找方式的基本思想相同都是使用for语句循环对数据逐一比对,使用if语句判断所需查找条件与结构体中数据是否吻合,符合条件时输出学生数据,不符合时则显示NotFound! 其中按学号查找的代码如下: if(v==1)/*按照学号查找*/ { printf("\n\t\t\tPleaseinputthenumber: "); scanf("\t\t\t%d",&p);/*输入学生学号*/ printf("\n"); for(t=0;t {if(p==s[t].num)/*if语句进行判断*/ break;} if(t {printf("\t\tNum\tName\tMath\tChinese\tEnglish\tAverage\n\n"); printf("\t\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n\n\t",s[t].num,s[t].name,s[t].score[0],s[t].score[1],s[t].score[2],s[t].ave);} else printf("\t\t\tNotFound! \n\n\t"); } 按数学成绩查找与按学号查找的方法相同,这里t用于循环,p用于学生的学号,q用于学生的数学成绩,v用于选择查找的方式。 4、数据统计模块 该模块首先应可以显示所有学生的数据,这个函数比较简单,只需使用for函数即可实现,为了显示的更加整齐,使用\t代码: 具体如下: voiddisplay(structstudents[],inttotal) {inti; printf("\tNum\tName\tSex\tClass\tMath\tChinese\tEnglish\tAverage\n\n"; for(i=0;i {printf("\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n\n",s[i].num,s[i].name,s[i].sex,s[i].cla,s[i].score[0],s[i].score[1],s[i].score[2],s[i].ave);} } 除了显示所有数据外,还要对数据按照平均分、学号进行排序,这里需要使用if语句对排序方式进行选择,这和选择数据查询方式完全相同。 在对数据排序时,我使用的是冒泡法,部分代码如下: if(v==1) for(i=0;i {for(j=0;j {if(s[j].ave {temp=s[j]; s[j]=s[j+1]; s[j+1]=temp;}}} 最后要列出不及格学生的名单,这里要使用for和if语句用来查找不及格的学生,for用于循环,if用来判断,部分代码如下: intp; for(p=0;p if(s[p].ave<60) { printf("\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n\n",s[p].num,s[p].name,s[p].sex,s[p].cla,s[p].score[0],s[p].score[1],s[p].score[2],s[p].ave); } 以上即为四个模块的算法说明。 五运行结果 为了测试程序的运行结果,我们按照下面的表格输入一些数据: 学号 姓名 性别 班级 数学 语文 英语 01 lili nv 0912 67 56 54 13 lina nv 0913 78 89 76 03 jay nan 0914 78 67 56 06 david nan 0914 45 56 60 15 chen nan 0915 76 87 90 系统运行主界面: 录入学生数据界面: 按下y键时会继续输入数据,按下n时则返回主菜单,数据录入完成后,我们按照两种方式对输入的输入进行排序,当选择1时为按平均分排序,以下为排序效果: 选择2时为按学号排序,以下为排序效果: 排序完成后,我们来查找某位学生的数据,这里,我们只选择按照学号查找,另一种方式,这里不做介绍。 我们输入学号6,则david的数据显示在桌面,以下为查询效果: 最后,我们来测试删除模块的功能,这里输入学生的学号13,删除lina的数据,数据删除前,如下图: 数据删除后,如下图: 六课程设计总结 两周的课程设计结束了,起初,拿到题目的时候,自己是一头雾水,之后去查阅资料,慢慢知道应该怎么样去编写程序。 首先要定义一个结构体,用来存放学生的基本信息和学生的各科成绩,之后,要定义数据的输入、删除、排序和显示等函数,在主函数中还要用到函数的调用。 对我来说,在这四个模块中,最难的是删除和排序模块,起初,不知道这两个模块该怎么去编,最后去向班级的其他同学请教, 我终于知道删除模块要用其它数据代替要删除的学生数据,这样就能实现数据的删除,排序模块我参考书上的冒泡法,最终完成了这两个程序的编写。 在程序的编写过程中,出现过很多错误,最多时出现几十多个错误,只能一次次的修改,一次次的调试,当错误数慢慢减少,最后可以运行的时候,自己非常高兴,可是运行后发现,很多功能都无法使用,只能再次慢慢的修改,调试。 就是再这一次次的修改和调试中,我完成了现在的这个程序。 虽然程序完成了,可是其中还是存在一些不足之处,比如说录入数据时,重名的情况,我没有考虑,希望在以后的学习实践中能够考虑的更加全面,编写出更优秀的程序。 通过这次的程序设计,是我对C语言的兴趣更加浓厚,更深的理解了函数的定义和调用、数组的定义以及结构体的运用,我还学习到了更多关于c语言的知识,使我收益匪浅! 七参考文献 《C语言程序设计》————中国铁道出版社 《C程序设计》————清华大学出版社谭浩强主编 《C程序设计题解与上机指导》————清华大学出版社 八附录(源程序) #include #include #include #defineN50 structstudent/*定义结构体*/ { intnum; charname[15]; charsex[20]; charcla[20]; doublescore[3]; doubleave; }; voidmenu()/*菜单函数*/ { printf("\n\t\t*******************************************\n\n"); printf("\t\t****Students'GradeManagementsystem****\n\n"); printf("\t\t*******************************************"); printf("\n\n\t\t*\t|1.Inputstudents'information*"); printf("\n\n\t\t*\t|2.Displayallrecords*"); printf("\n\n\t\t*\t|3.Sorttherecords*"); printf("\n\n\t\t*\t|4.Inquireaboutstudentinformation*"); printf("\n\n\t\t*\t|5.Listaverage<60record*"); printf("\n\n\t\t*\t|6.Insertarecord*"); printf("\n\n\t\t*\t|7.Deletearecord*"); printf("\n\n\t\t*\t|8.Deleteallrecords*"); printf("\n\n\t\t*\t|9.Quit*"); printf("\n\n\t\t*******************************************\n"); } structstudentinput()/*输入数据函数*/ { inti; doublesum=0; structstudentt; printf("\t\t\tPleaseinputthestudent'sgrade"); printf("\n"); printf("\n\t\t\tStudent'snumber: "); scanf("%d",&t.num); printf("\n\t\t\tStudent'sname: "); scanf("%s",&t.name); printf("\n\t\t\tStudent'ssex: "); scanf("%s",&t.sex); printf("\n\t\t\tStudent'sclass: "); scanf("%s",&t.cla); printf("\n\t\t\tStudent'smathgrade: "); scanf("%lf",&t.score[0]); printf("\n\t\t\tStudent'schinesegrade: "); scanf("%lf",&t.score[1]); printf("\n\t\t\tStudent'senglishigrade: "); scanf("%lf",&t.score[2]); for(i=0;i<3;i++) { sum+=t.score[i]; } t.ave=sum/3; returnt; } voiddisplay(structstudents[],inttotal)/*显示数据函数*/ { inti; printf("\tNum\tName\tSex\tClass\tMath\tChinese\tEnglish\tAverage\n\n"); for(i=0;i { printf("\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n\n",s[i].num,s[i].name,s[i].sex,s[i].cla,s[i].score[0],s[i].score[1],s[i].score[2],s[i].ave); } } voidlist(structstudents[],inttotal)/*列出不及格函数*/ { intp; printf("\t\t\t****Listaverage<60record****\n\n"); printf("\t\t************************************************\n\n"); printf("\tNum\tName\tSex\tClass\tMath\tChinese\tEnglish\tAverage\n\n"); for(p=0;p if(s[p].ave<60) { printf("\t%d\t%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n\n",s[p].num,s[p].name,s[p].sex,s[p].cla,s[p].score[0],s[p].score[1],s[p].score[2],s[p].ave); } } voidsort(structstudents[],inttotal)/*排序函数*/ { inti,j,v,k; structstudenttemp; printf("\t\t\tSelectaway\n"); printf("\n\n\t*|1.Sortbyaverage|*"); printf("\n\n\t*|2.Sortbynumber|*"); printf("\n\n\tGiveyourchoice(1-2): "); scanf("\t\t\t%d",&v); while(getchar()! ='\n'); if(v==1) for(i=0;i { for(j=0;j { if(s[j].ave { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } } } if(v==2) for(i=0;i { for(j=0;j { if(s[j].num>s[j+1].num) {temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } } } } voidinsert(structstudents[],inttotal)/*插入数据函数*/ { structstudentt; inti,k; t=input(); for(i=0;i { if(t.ave>s[i].ave) break; } k=i; for(i=total;i>k;i--) { s[i]=s[i-1]; } s[k]=t; } intdel(structstudents[],inttotal)/*删除数据函数*/ { intt,i,j; printf("\n\t\t\t\t**Deletearecord**\n\n"); printf("\n\t\t\t*************************************\n\n"); printf("\tPleaseinputthenumberyouwanttodelete: "); scanf("%d",&t); for(i=0;i { if(t==s[i].num) break; } if(i { for(j=i;j { s[j]=s[j+1]; } return1; } else { return0; } } voidsearchNum(structstudents[],inttotal)/*查找数据函数*/ { intt=0,p,v,q; system("cls"); printf("\n\t\t\t**Inquireaboutstudentinformation**\n\n"); printf("\n\t\t\t*************************************\n\n"); printf("\t\t\tSeleceachoice\n"); printf("\n\n\t*|1.Inquirebynum|*"); printf("\n\n\t*|2.Inquirebymathscore|*"); printf("\n\n\tGiveyourchoice(1-2): "); scanf("\t\t\t%d",&v); while(getchar()! ='\n'); if(v==1) { printf("\n\t\t\tPleaseinputthenumber: "); scanf("\t\t\t%d",&p); printf("\n"); for(t=0;t { if(p==s[t].num) break; } if(t { printf("\t\tNum\tName\tMath\tChinese\tEnglish\tAverage\n\n"); printf("\t\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n\n\t",s[t].num,s[t].name,s[t].score[0],s[t].score[1],s[t].score[2],s[t].ave); } else printf("\t\t\tNotFound! \n\n\t"); } if(v==2) { printf("\n\t\tPleaseinputthemathscore: "); scanf("\t\t\t%d",&q); printf("\n"); printf("\t\tNum\tName\tMath\tChinese\tEnglish\tAverage\n\n"); for(t=0;t { if(q==s[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言课程设计 学生成绩管理 语言 课程设计 学生 成绩 管理