《学生成绩管理系统实验报告muban.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统实验报告muban.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学生成绩管理系统 课程设计实验报告专 业:通信工程班 级:2012级23班设计时间:2014年4月20日学 号:20122302学生姓名:李震任课教师:黄玉兰一、 系统功能模块结构图系统功能1、学生基本情况录入。2、允许对已经录入的数据进行显示。3、允许进行数据的插入。4、删除基本数据的相关信息。5、基于姓名的查询。如:姓张的所有同学。6、基于各种基本数据的统计计算。如:统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。列出90分及以上、80分及以上、70分及以上、60分及以上、不及格学生清
2、单(学号、姓名、不及格的课程和成绩)。统计并输出各门功课的平均成绩和总平均成绩。二、 数据结构设计及用法说明学生基本信息包括: 学号、姓、名、性别、出生年月日 、考试成绩(外语SCORE0、高数SCORE1、C语言SCORE2、马哲SCORE3、平均成绩和总成绩 所以采用的数据结构如下:struct student char IDNumber16;/*学号*/ char FamilyName16; /*姓*/char GivenName16; /*名*/ int sex; /*性别(0代表女,1代表男)*/ int BirthYear; /*出生年*/int BirthMonth; /*出生月
3、*/int BirthDay; /*出生日*/float score3;/绩*/ float sum; /*总分*/ float average; /*平均分*/ 其中char IDNumber16 用来存储学生的学号,char FamilyName16存储学生姓名中的姓,char GivenName16记录学生姓名中的名,int sex记录学生的性别, int BirthYear记录学生出生年年月日的年,int BirthMonth记录学生出生年年月日的月,int BirthDay记录学生出生年年月日的日,float score4存储学生信息中的4科成绩,float sum 用来记录学生信息
4、中的四科学习成绩的总分,float average 用来存放每位学生的平均成绩。三、程序结构成绩管理系统 1.成绩录入 2.成绩查询 3.插入记录 4删除记录 5显示全部记录 6成绩统计 7退出系统 四、各模块功能:根据学生成绩管理系统中各模块的功能不同,将本实验中学生成绩管理系统划分为以下几个功能模块:1主模块:显示系统菜单,用switch语句来选择对象来执行不同的功能模块。2 成绩录入:功能:连续添加学生的信息,包括学生学号学生姓名、性别、生日、学号和课程成绩的相关信息;3成绩查询: 功能:内分按姓名查询和按学号查询,可显示当前指定学生所有信息。4插入记录:功能:插入新记录,并将成绩做排序
5、处理,但不作输出。5删除记录:功能:删除指定学生全部记录。6显示全部记录:功能:按成绩排序输出所有学生记录。 7 成绩统计:功能:统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。统计并输出各门功课的平均成绩和总平均成绩。8退出系统五、实验结果主菜单:按1录入信息:按2查询成绩:按3插入记录按4删除记录按5显示全部记录:按6成绩统计:按7退出六
6、、 心得与体会 之前从未编写过这么大的程序,刚看到题目的时候感觉大框挺清晰,依仗之前的C语言底子,决定代码完全由自己来完成,于是踏上一条坎坷路。在细化编写的过程中,困难层出不穷,比如功能怎样来实现,还有编译时的错误,执行中的乱码。有了问题就要查错,而查错的过程相当闹心,需要足够的耐心、仔细、打不败的韧劲,由此感觉到程序员的心理承受力需要多么强大!然而,当经历千辛万苦问题终于被改正,程序终于按功能运行的时候,那种顺畅,无以言表! 经历了这次练习,我明显对编程又增加了兴趣,并且对大型程序也不再怵,在思路和技巧上都有增强,以后还要继续提高编程能力,用好编程。附录:程序清单(原创)#include#i
7、nclude#include struct student char IDNumber16;/*学号*/ char FamilyName16; /*姓*/ char GivenName16; /*名*/ int sex; /*性别(0代表女,1代表男)*/ int BirthYear; /*出生年*/ int BirthMonth; /*出生月*/ int BirthDay; /*出生日*/ float score4; /*成绩*/ float sum; /*总分*/ float average; /*平均分*/ struct student *next; ; struct student *
8、head; struct student *p,*q,*v;/*/ void Getinformation() /*信息连续输入 OK*/ printf(请输入学号);scanf(%s,p-IDNumber); printf(请输入姓); scanf(%s,p-FamilyName); printf(请输入名); scanf(%s,p-GivenName); printf(请输入性别(0代表女,1代表男));scanf(%d,&p-sex); printf(请输入出生年);scanf(%d,&p-BirthYear); printf(请输入出生月);scanf(%d,&p-BirthMonth
9、); printf(请输入出生日);scanf(%d,&p-BirthDay); printf(请输入外语成绩);scanf(%f,&p-score0); printf(请输入高数成绩);scanf(%f,&p-score1); printf(请输入C语言成绩);scanf(%f,&p-score2); printf(请输入马哲成绩);scanf(%f,&p-score3); p-next=(struct student*)malloc(sizeof(struct student); p=p-next; p-next=NULL; void deal(); deal(); /*/ void de
10、al() /* 成绩处理 (排序) OK*/ int i,j,m,count=0; float f; char k16;q=head; while(q-next)!=NULL)q-sum=(q-score0+q-score1+q-score2+q-score3);(q-average)=(q-sum)/4;q=q-next; for(q=head;q-next!=NULL;q=q-next) count+; for(i=1;icount;i+)for(q=head,j=0;jnext,j+) if (q-sum)next-sum) strcpy(k,q-IDNumber);strcpy(q-I
11、DNumber,q-next-IDNumber);strcpy(q-next-IDNumber,k); strcpy(k,q-FamilyName);strcpy(q-FamilyName,q-next-FamilyName);strcpy(q-next-FamilyName,k); strcpy(k,q-GivenName);strcpy(q-GivenName,q-next-GivenName);strcpy(q-next-GivenName,k); m=q-sex;q-sex=q-next-sex;q-next-sex=m; m=q-BirthYear;q-BirthYear=q-nex
12、t-BirthYear;q-next-BirthYear=m; m=q-BirthMonth;q-BirthMonth=q-next-BirthMonth;q-next-BirthMonth=m; m=q-BirthDay;q-BirthDay=q-next-BirthDay;q-next-BirthDay=m; f=q-score0;q-score0=q-next-score0;q-next-score0=f; f=q-score1;q-score1=q-next-score1;q-next-score1=f; f=q-score2;q-score2=q-next-score2;q-next
13、-score2=f; f=q-score3;q-score3=q-next-score3;q-next-score3=f; f=q-sum;q-sum=q-next-sum;q-next-sum=f; f=q-average;q-average=q-next-average;q-next-average=f; /*/ void search() /*查找 OK*/ char m,n16,v16; int flag=0; deal(); doprintf(a按学号查找 b按姓名查找 c退出查找);scanf(%s,&m);if(m=a) printf(请输入学号);scanf(%s,n); fo
14、r(q=head;q-next!=NULL;q=q-next) if(strcmp(n,q-IDNumber)=0) printf(学号%s姓名%s%s性别%d出生年月日%8d%8d%8d外语成绩%5.1f高数成绩%5.1fC语言成绩%5.1f马哲成绩%5.1f总分%5.1f平均分%5.1fn, q-IDNumber,q-FamilyName,q-GivenName,q-sex,q-BirthYear,q-BirthMonth,q-BirthDay,q-score0, q-score1,q-score2,q-score3,q-sum,q-average); flag=1; ; if(flag=
15、0) printf(无此学生信息n); if(m=b) printf(请输入姓); scanf(%s,n); printf(请输入名); scanf(%s,v); for(q=head;q-next!=NULL;q=q-next) if(strcmp(n,q-FamilyName)=0) if(strcmp(v,q-GivenName)=0)printf(学号%s姓名%s%s性别%d出生年月日%8d%8d%8d外语成绩%5.1f高数成绩%5.1fC语言成绩%5.1f马哲成绩%5.1f总分%5.1f平均分%5.1fn, q-IDNumber,q-FamilyName,q-GivenName,q-
16、sex,q-BirthYear,q-BirthMonth,q-BirthDay,q-score0, q-score1,q-score2,q-score3,q-sum,q-average);flag=1; if(flag=0) printf(无此学生信息n); if(m=c) break; if(m!=a&m!=b&m!=c) printf(请安提示输入n);m=a;while(m=a|m=b); /*/ void insert() /*插入记录 OK*/ char judge; void Getinformation(); doGetinformation(); printf(n您想继续输入下
17、一位学生的成绩吗n想,请按y 不想,请按nn); scanf(%s,&judge);while (judge=y)|(judge=Y); /*/void delet() /*删除记录 OK*/ char m,judge,n16,w16; int flag=0,count,j=0,i; void deal(); deal();doprintf(a按学号删除信息 b按姓名删除信息 c取消);scanf(%s,&m); if(m=a) printf(请输入学号);scanf(%s,n); for(q=head;q-next!=NULL;q=q-next,j+) if(strcmp(n,q-IDNum
18、ber)=0) printf(学号%st姓名%s%st性别%dt出生年月日%8d%8d%8d外语成绩%8.1f高数成绩%8.1fC语言成绩%8.1f马哲成绩%8.1f总分%8.1f平均分%8.1fn, q-IDNumber,q-FamilyName,q-GivenName,q-sex,q-BirthYear,q-BirthMonth,q-BirthDay,q-score0, q-score1,q-score2,q-score3,q-sum,q-average); flag=1;count=j; printf(您确定要删除该同学所有信息?n确认请按1 取消请按2n); scanf(%s,&jud
19、ge); if(judge=1) if(count=0) head=head-next; else for(q=head,i=0;inext,i+); for(v=head;v-next!=q;v=v-next);v-next=v-next-next;/*该步实现删除*/; ; ; if(flag=0) printf(无此学生信息); ; if(m=b) flag=0; printf(请输入姓);scanf(%s,n); printf(请输入名);scanf(%s,w); for(q=head,j=0;q-next!=NULL;q=q-next,j+) if(strcmp(n,q-Family
20、Name)=0) if(strcmp(w,q-GivenName)=0)printf(学号%st姓名%s%st性别%dt出生年月日%8d%8d%8d外语成绩%8.1f高数成绩%8.1fC语言成绩%8.1f马哲成绩%8.1f总分%8.1f平均分%8.1fn, q-IDNumber,q-FamilyName,q-GivenName,q-sex,q-BirthYear,q-BirthMonth,q-BirthDay,q-score0, q-score1,q-score2,q-score3,q-sum,q-average);flag=1;count=j; printf(您确定要删除该同学所有信息?n确
21、认请按1 取消请按2n); scanf(%s,&judge); if(judge=1) if(count=0) head=head-next; else for(q=head,i=0;inext,i+); for(v=head;v-next!=q;v=v-next); v-next=v-next-next;/*该步实现删除*/ count-=1; ; ; if(flag=0) printf(无此学生信息); if(m=c) break; if(m!=a&m!=b) printf(请安提示输入n);m=a;while(m=a|m=b); /*/ void print() /*显示链表中所有记录
22、OK*/ int i=1; printf(名次t学号t姓名t性别t出生年月日t外语成绩t高数成绩tC语言成绩t马哲成绩t总成绩t平均成绩tn); for(q=head;q-next!=NULL;q=q-next,i+) printf(%dt%st%s%st%dt%4d%4d%4dt%3.1ft%3.1ft%3.1ft%3.1ft%5.1ft%3.1ftn, i,q-IDNumber,q-FamilyName,q-GivenName,q-sex,q-BirthYear,q-BirthMonth,q-BirthDay, q-score0,q-score1,q-score2,q-score3,q-s
23、um,q-average); /*/ void cale() /*统计 OK*/ char n; int count=0; float sum,m=0; void print(); printf(1 按名次显示所有学生信息n2 显示分数段情况n3 各门功课平均成绩和总平均成绩); scanf(%s,&n); switch(n) case 1:print();break; case 2:printf(注意!如果分数段后无成绩输出,则说明无该分数段成绩n); printf(外语90分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score0=90) pr
24、intf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score0); printf(高数90分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score1=90) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score1); printf(C语言90分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score2=90) printf(%st%s%st%3.1ftn,q-
25、IDNumber,q-FamilyName,q-GivenName,q-score2); printf(马哲90分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score3=90) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score3);printf(外语80分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score0=80) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-G
26、ivenName,q-score0); printf(高数80分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score1=80) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score1); printf(C语言80分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score2=80) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score2); pri
27、ntf(马哲80分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score3=80) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score3);printf(外语70分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score0=70) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score0); printf(高数70分以上t); for(q=head
28、;q-next!=NULL;q=q-next) if(q-score1=70) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score1); printf(C语言70分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score2=70) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score2); printf(马哲70分以上t); for(q=head;q-next!=NULL;q=q-next)
29、 if(q-score3=70) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score3); printf(外语60分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score0=60) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score0); printf(高数60分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score1=60) printf(
30、%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score1); printf(C语言60分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score2=60) printf(%st%s%st%3.1ftn,q-IDNumber,q-FamilyName,q-GivenName,q-score2); printf(马哲60分以上t); for(q=head;q-next!=NULL;q=q-next) if(q-score3=60) printf(%st%s%st%3.1ftn,q-IDNum
31、ber,q-FamilyName,q-GivenName,q-score3);printf(外语不及格t); for(q=head;q-next!=NULL;q=q-next) if(q-score0IDNumber,q-FamilyName,q-GivenName,q-score0); printf(高数不及格t); for(q=head;q-next!=NULL;q=q-next) if(q-score1IDNumber,q-FamilyName,q-GivenName,q-score1); printf(C语言不及格t); for(q=head;q-next!=NULL;q=q-next
32、) if(q-score2IDNumber,q-FamilyName,q-GivenName,q-score2); printf(马哲不及格t); for(q=head;q-next!=NULL;q=q-next) if(q-score3IDNumber,q-FamilyName,q-GivenName,q-score3); break;case 3:for(sum=0,q=head;q-next!=NULL;q=q-next,count+) sum+=q-score0;m+=sum; printf(外语平均成绩%3.1fn,sum/count); for(sum=0,q=head;q-nex
33、t!=NULL;q=q-next) sum+=q-score1;m+=sum; printf(高数平均成绩%3.1fn,sum/count); for(sum=0,q=head;q-next!=NULL;q=q-next) sum+=q-score2;m+=sum; printf(C语言平均成绩%3.1fn,sum/count); for(sum=0,q=head;q-next!=NULL;q=q-next) sum+=q-score3;m+=sum; printf(马哲平均成绩%3.1fn,sum/count); printf(总平均成绩%5.1fn,m/(4*count);break; /*/ void main() /*主函数*/ char judge,t;START:printf( 欢迎进入成绩管理系统n1成绩录入t2成绩查询t3插入记录n4删除记录t5显示全部记录t6成绩统计n7退出系统n);