1、计算机程序编程课程设计实验报告学生成绩计算机程序编程课程设计实验报告2 实验名称学生成绩管理系统学 院通信工程学院专业班级通信工程系11级25班姓 名梁仙友学 号52112507任课教师孙大洋实验时间2013/8/14 实验目的:使用标准C或C+实现学生成绩管理系统的录入、查询、删除、统计等基本操作。进一步巩固C语言的学习,以提高学生对开发环境的进一步认识和综合编程能力。系统功能模块结构图:数据结构设计及用法说明:数据结构定义如下 typedef struct St1 char IDNumber16;/*学号*/ char FamilyName16; /*姓*/char GivenName16
2、; /*名*/ int sex; /*性别(0代表“女”,1代表“男”)*/ int BirthYear; /*出生年*/int BirthMonth; /*出生月*/int BirthDay; /*出生日*/ float score4; /*成绩*/ float sum; /*总分*/ float average; /*平均分*/ struct St1 *next; StudentNode;需要处理的基础数据学生基本信息:学号(例如2003级12班6号写作20031206)、姓、名、性别、出生年月日、课程名称(外语SCORE0、高数SCORE1、C语言SCORE2、马哲SCORE3)、考试成
3、绩等。统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。统计并输出各门功课的平均成绩和总平均成绩。按班级统计并输出总成绩。(需要对学号进行解析)以下代码可以获取系统当前时间,用于判断年龄是否合理。#include time.h void main() struct tm* ptm; long ts; int y,m,d,h,n,s; ts =
4、time(NULL); ptm = localtime(&ts); y = ptm- tm_year+1900; /年 m = ptm- tm_mon+1; /月 d = ptm- tm_mday; /日 h = ptm- tm_hour; /时 n = ptm- tm_min; /分 s = ptm- tm_sec; /秒程序结构(画流程图):主函数:StudentNode *create ()StudentNode *Delete(StudentNode *head)void Print(StudentNode *head)StudentNode *Load()StudentNode *c
5、ompute(StudentNode *head)Search(head) StudentNode *Insert(StudentNode *head,StudentNode *New) 各模块的功能1、StudentNode *Create() :根据提示学生录入学生基本信息:学号(例如2003级12班6号写作20031206)、姓、名、性别、出生年月日、课程(外语SCORE0、高数SCORE1、C语言SCORE2、马哲SCORE3)成绩。2、StudentNode *Delete (StudentNode *head):根据所给学号删除对应学号学生对基本信息。3、void Print(St
6、udentNode *head):先根据学生干的平均成绩对学生进行排序,再根据平均成绩从高到低依次输出各个学生的基本信息,在统计列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。4、StudentNode *search(StudentNode *head):找出对应姓名的学生的基本信息并输出。5、StudentNode *Save(StudentNode *head):将链表中的记录依次保存到所指定的文件中。6、StudentNode *Load():从指定文件中读取学生的相关信息并依次输出。
7、7、StudentNode *compute(StudentNode *head):计算所有学生的总分和平均分并输出。8、StudentNode * CompositorByAverage (StudentNode *head):输出对应班级的学生的学号 姓 名 总分 平均分。9、StudentNode *Insert(StudentNode *head,StudentNode *New):将输入的学生的基本信息插入到对应链表中并按平均成绩排序后输出链表中学生的基本信息。试验结果(包括输入数据和输出结果)菜单界面显示界面文件查找:体会通过一个星期的C语言编程设计实验我学会了很多东西,初步了解了
8、学生成绩管理系统的编程过程,对编程有了更深一次的掌握,学会了如何分块把问题解决。使用标准C或C+实现学生成绩管理系统的录入、查询、删除、统计等基本操作。本次实验设计的成绩管理系统功能还有限,都是些基本功能,还有很多的功能有待完善,比如学生成绩是否符合正太分布,虽然完成的功能有限,但是感觉收获还是很大,写代码的时候需要集中精力,很多小细节可能导致大错误,比如大括号的丢失,程序调试也很费时间,最好是分布检查每个部分,确保准确的运行,再逐步释放代码,很容易发现问题所在。附录:程序清单及源程序软盘#include#include#include#include /*字符串函数*/ #include #
9、define LEN sizeof(StudentNode)typedef struct St1 char IDNumber16; /*学号*/ char FamilyName16; /*姓*/ char GivenName16; /*名*/ int sex; /*性别(0代表女,1代表男)*/ int BirthYear; /*出生年*/ int BirthMonth; /*出生月*/ int BirthDay; /*出生日*/ int score4; /*成绩*/ int sum; /*总分*/ int average; /*平均分*/ int rank; /*排名*/ struct St
10、1 *next; StudentNode;StudentNode *New;StudentNode *first() return NULL;int Menu() /菜单选择函数 int m; printf(n按回车键进入主菜单.press any button to enter menun); getchar(); printf(nn); printf(n); printf(tt欢迎使用学生管理系统n); printf(ntt Welcome to student database systemn); printf( MENUn); printf(ttt1 输入学生成绩记录 Enter li
11、stn); printf(ttt2 删除记录 Delete a record from listn); printf(ttt3 显示链表中所有记录 Print listn); printf(ttt4 按照姓名查找记录 Search record on namen); printf(ttt5 记录保存到文件 Save the filen); printf(ttt6 从文件中读入记录 Load the filen); printf(ttt7 计算总分和均分 Compute the scoren); printf(ttt8 按班级查询学生总分 Query by classn); printf(ttt
12、9 插入记录 Insert record to listn); printf(ttt10 退出 Quitn ); printf(nn); printf(nn); doprintf(nttt请输入你要操作的代号 Enter your select choice(110):);fflush(stdin);scanf(%d,&m);while(m10);return (m);StudentNode *Create() /信息的输入 int i,s=0; StudentNode *head=NULL,*p; system(cls); for(;) p=(StudentNode *)malloc(LEN
13、); if(!p) printf(n输出内存溢出.OUT OF MEMORY.); return (head); printf(请输入学号,please enter the num:(输入n结束输入); scanf(%s,p-IDNumber); if(p-IDNumber0=n) break; printf(请输入姓名:(姓名之间用空格间隔); scanf(%s %s,p-FamilyName,p-GivenName); do printf(请输入性别:0代表女,1代表男); scanf(%d,&p-sex); while(p-sex!=0)&(p-sex!=1); do printf(请输
14、入生日(年月日用空格分隔):); scanf(%d %d %d,&p-BirthYear,&p-BirthMonth,&p-BirthDay); while(p-BirthMonthBirthMonth13); printf(请输入4门成绩 please enter the scoren); for(i=0;iscorei); if(p-scoreiscorei100) printf(数据输入错误,请重新输入n); while(p-scoreiscorei100); s=s+p-scorei; p-sum=s; p-average=s/4; p-rank=0; p-next=head; hea
15、d=p; return (head); void Print(StudentNode *head) /信息的显示 int i=0; StudentNode *p; char s2; system(cls); p=head; printf(n学生信息n); printf(-n); printf(|Rec Num Fna Gna Sex Yea Mon Day Sc1 Sc2 Sc3 Sc4 Sum Ave Rank|n); printf(-n); while (p!=NULL) i+; printf(|%3d %4s %2s %2s %d %d %d %d %d %d %d %d %d %d %
16、d |n,i, p-IDNumber,p- FamilyName,p- GivenName,p-sex,p-BirthYear,p-BirthMonth, p-BirthDay,p-score0,p-score1,p-score2,p-score3,p-sum,p-average, p-rank); p=p-next; printf(-n); printf(ENDn); scanf(%s,s); printf(输入任意键返回菜单.n); void Search(StudentNode *head) /查找记录函数 StudentNode *p; char s2;char f2; system(
17、cls); printf(请输入姓:n); scanf(%s,s); printf(请输入名:n); scanf(%s,f); p=head; while(p!=NULL) if(strcmp(p-FamilyName,s)!=0)|(strcmp(p-GivenName,f)!=0) p=p-next; else break; if(p) printf(n已找到n); printf(-n); printf(| Num Name sc1 sc2 sc3 sc4 Sum Ave Rank|n); printf(-n); printf(| %4s %s %s %3d %3d %3d %3d %3d
18、 %d %-5d|n,p-IDNumber,p-FamilyName, p-GivenName,p-score0,p-score1,p-score2,p-score3,p-sum,p-average,p-rank); printf(-n); printf(结束n); else printf(n没有需要查找的%s %s学生,s, f); StudentNode *Sort (StudentNode *head) /排序函数 int i=0; StudentNode *p1,*p2,*t,*temp; temp=head-next; head-next=NULL; while(temp!=NULL
19、) t=temp; temp=temp-next; p1=head; p2=head; while(t-averageaverage&p1!=NULL) p2=p1; p1=p1-next; if(p1=p2) t-next=p1; head=t; else t-next=p1; p2-next=t; p1=head; while(p1!=NULL) i+; p1-rank=i; p1=p1-next; printf(已排序成功.n); return(head);StudentNode *Insert(StudentNode *head,StudentNode *New) /信息的插入 Stu
20、dentNode *p0,*p1,*p2; /int n=0; int sum1,i; p1=head; p0=New; printf(输入学号:); scanf(%s,New-IDNumber); printf(输入姓:); scanf(%s,New-FamilyName); printf(输入名); scanf(%s,New-GivenName); printf(性别:); scanf(%d,&New-sex); printf(出生年:); scanf(%d,&New-BirthYear); printf(出生月:); scanf(%d,&New-BirthMonth); printf(出
21、生日:); scanf(%d,&New-BirthDay); printf(Please enter the 4 scores.n); sum1=0; for(i=0;iscorei); if(New-scorei100|New-scoreiscorei100|New-scoreiscorei; New-sum=sum1; New-average=sum1/4; New-rank=0; if(head=NULL) head=p0; p0-next=NULL; else while(p0-averageaverage)&(p1-next!=NULL) p2=p1; p1=p1-next; if(
22、p0-average=p1-average) if (head=p1)head=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=NULL; /n=n+1; head=Sort(head); printf(学生%s %s已被更新.n,New-FamilyName,New-GivenName); return(head); StudentNode *Delete (StudentNode *head) /删除记录函数 int n=0; StudentNode *p1,*p2; char c,s6; printf(请输入要删除的学生
23、学号:); scanf(%s,s); p1=p2=head; while(strcmp(p1-IDNumber,s)&p1!=NULL) p2=p1; p1=p1-next; if(strcmp(p1-IDNumber,s)=0) printf(找到了n); printf(-n); printf(-n); printf(结束n); printf(删除请按Y,退出请按N); for(;) scanf(%c,&c); if(c=n|c=N)break; if(c=Y|c=y) if(p1=head) head=p1-next; else p2-next=p1-next;n=n-1; printf(n%s学生的信息已被删除n,s); break; else printf(n没有此人信息n); return(head); void Save(StudentNode *head) /保存数据到文件 FILE *fp; StudentNode *p; char outfile10; printf(输入文件例如:c: score enter outfile name.n); scanf(%s,outfile); if(fp=fopen
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1