《学生成绩管理系统报告.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统报告.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、校公共选修课课程名称:C语言程序设计 题目名称:学生成绩管理系统 学生学院:物理与光电工程学院 专业班级:电子科学与技术(3)班学 号:3108009205 学生姓名:陈 浩 实验题目:学生成绩管理系统一、 实验目的1. 熟悉c语言的编译连接和运行过程。2. 掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。3. 掌握if语句及switch语句的运用方法及嵌套应用方法。4. 掌握实现循环结构的三种语句while、 do-while.、for 的使用。5. 掌握函数的定义方法和调用方法。6. 能够采用模块化思想调试程序。二实验内容1. 编写程序并进行调试运行。2. 输入
2、学生资料,并保存于文件。每个学生包含信息如:学号、姓名、性别.成绩信息等。3. 对已存入的学生信息进行更新操作,包括添加一个学生信息、删除某个学生信息和修改某个学生信息。4. 通过输入姓名、学号的方式查询学生信息。5. 最后输出学生信息。二、 需求分析1. 该程序可用于对学生的宿舍情况基本信息的存储、更新、查询、输出等操作,以实现对学生成绩的管理。2. 其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个学生信息,也可对个别学生信息进行适当的删除或修改。以便随时更新学生信息。3. 程序中设计的查询功能可根据需要从若干数据中查询某个学生信息,并且可根据两种不同的方法查询:按学
3、号查询和按姓名查询。以满足不同的需要。四、概要设计1、方案设计对系统进行分析,给出结构图 分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计 结构图如下:学生成绩管理系统查询模块输出模块更新模块退出系统排序模块添加模块按总成绩排序按计算机成绩排序按物理成绩排序按体育成绩排序按英语成绩排序按数学成绩排序按学号查寻按姓名查询退出系统修改学生信息删除学生信息退出系统2.模块功能说明对各个模块进行功能的描述(1).输出模块:可以对所有的学生信息进行输出。(2)添加模块:可添加一个或多个学生信息,并将所添加学生信息保存
4、,方便查找。(4)修改模块:可根据需要对多个学生信息进行修改,也可随时对个别项进行修改,还可以删除学生的信息。(5)查询模块:可对已建立的学生信息进行查询,并且可根据需要选择按姓名查询或按学号查询。 (6)保存模块:用于对信息进行保存。(7)退出系统:选择该项,自动退出该系统。五、详细设计及运行结果流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。开 始输入i的值判断i的值退出系统输出模块添加模块更新模块排序模块查询模块输入选择项所对应的值输入选择项所对应的值输入选择项所对应的值判断choose的值判断choose的值判断choose的值修改信息退出系统删除信息按总成绩排序按计算
5、机成绩排序按物理成绩排序按体育成绩排序按英语成绩排序按数学成绩排序按学号查询退出系统按姓名查询结 束保存模块 六 调试情况1、 对自己设计进行评价,指出合理和不足之处,提出改进的方案。此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可着毕竟是第一次独立完成这样的大程序,结果还不是太理想。由于时间很短,在选题报告中设想到的好多功能都没有实现。已有的那些功能虽已能基本上满足需要,但如果还有更多的功能程序就会
6、更加完美。2、在设计过程中的感受。 本次C 语言的课程设计让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,这次课程设计让我这种实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。本次课程设计中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次课程设计,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。七参考文献C语言程序设计 王曙燕 曹锰 科学出版社 2
7、005年2月C语言程序设计 谭浩强 清华大学出版社 1999年12月八 .源程序 #include #include #include #define N 35#define START1 printf(*n)#define START2 printf(n-学号-姓名-性别-高数-英语-体育-物理-计算机-总成绩-平均成绩n)#define START3 printf(%4d %2s %6s %6d %6d %6d %6d %6d %6d %6dn,Si.num,Si.name,Si.sex,Si.math,Si.English,Si.sport,Si.physic,Sputer,Si.tot
8、al,Si.aver) /*学生结构体类型*/struct student_typeint num; char name 20; char sex4; int math; int English; int sport; int physic; int computer; int total; int aver; SN; /*存放N个学生数据的结构体数组*/ int sum; /*保存数据单元*/ save_message(int sum)FILE *fp; int i=0; if (fp=fopen(chengji.txt,wb)=NULL) printf(读取文件错误! ! !); retu
9、rn; do if(fwrite(&Si,sizeof(struct student_type),1,fp)!=1) printf(写文件错误 ! ! !n); i+; while(Si.num!=0&Si.num!=Si-1.num); fclose(fp); /*读取数据单元*/ read_message() FILE *fp;int i=0;if(fp=fopen(chengji.txt,rb)=NULL)printf(nn*系统暂时没有信息,请按任意键进入主菜单选择基本信息的输入!*nn);while(feof(fp)!=1) fread(&Si,sizeof(struct stude
10、nt_type),1,fp); if(Si.num=0|Si.num=Si+1.num) break ; else i+; fclose(fp); return(i) ; /*输出学生数据模块*/ output_message()int i=0; clrscr(); do printf(n-学生成绩信息单-n); START2 ; START3 ; i+; while(Si.num!=0&Si-1.num!=Si.num); printf(n-随你所按,返回主菜单-n); bioskey(0); /*修改学生数据(更新区)*/ revise_message() int i=0,choose,r
11、evise_num; char did; do clrscr(); printf(n 输入要修改的学生的学号:n); scanf(%d,&revise_num); for(i=0;isum;i+) if(Si.num=revise_num) printf(n-该学生信息如下-n); START2; START3; printf(n*需要修改哪一项:*n); printf( 1.学号?n); printf( 2.姓名?n); printf( 3.性别?n); printf( 4.高数? n); printf( 5.英语?n); printf( 6.体育?n); printf( 7.物理?n);
12、printf( 8.计算机?n); printf(n*请选择(1-8),按回车键结束:*n); scanf(%d,&choose); while (choose8) printf(输入错误,请重新输入:); scanf(%d,&choose); switch (choose) case 1:printf( 输入修改后的学号:); scanf(%d,&Si.num); break; case 2:printf( 输入修改后的姓名:); scanf(%s,&Si.name); break; case 3:printf( 输入修改后的性别:); scanf(%s,&Si.sex); break; c
13、ase 4:printf( 输入修改后的高数成绩:); scanf(%d,&Si.math); while (Si.math100) printf( 输入错误,请重新输入:); scanf(%d,&Si.math); ; break; case 5:printf( 输入修改后的英语成绩:); scanf(%d,&Si.English) ; while (Si.English100) printf(输入错误,请重新输入); scanf(%d,&Si.English); ;break; case 6:printf( 输入修改后的体育成绩:); scanf(%d,&Si.sport) ; while
14、 (Si.sport100) printf(输入错误,请重新输入:); scanf(%d,&Si.sport); ;break; case 7:printf( 输入修改后的物理成绩:); scanf(%d,&Si.physic) ; while (Si.physic100) printf(输入错误,请重新输入:); scanf(%d,&Si.physic); ;break ; case 8:printf( 输入修改后的计算机成绩:); scanf(%d,&Sputer) ; while (Sputer100) printf(输入错误,请重新输入:); scanf(%d,&Sputer); ;b
15、reak ; Si.total=Si.math+Si.sport+Si.English+Si.physic+Sputer; Si.aver=Si.total/5; printf(n-修改后的信息如下:-n); START2; START3; printf(n 是否继续修改(y/n)? n); scanf(%c,&did); while(did=y); printf(n-按任意键返回-n); getchar(); bioskey(0); /*删除学生数据(更新区)*/ del_message() int del_num; int i,j,k=0; char choose; printf(n 输入
16、要删除的同学的序号:); scanf(%d,&del_num); for(i=0;isum;i+) if(Si.num=del_num&Si.num!=0) printf(n-同学信息-n); START2; START3; printf(n*确定要删除吗?(Y/N)*n); choose=getch(); if(choose=y) for(j=i;jsum;j+) Sj=Sj+1; sum-; printf(n*已成功删除!*n); printf(n*按任意键返回主菜单!*n); else k+; if(k=sum) printf(n*该同学不存在!*n); bioskey(0); /* 更
17、新学生数据模块 */ renew_message()int choose; do clrscr(); printf(n*更新学生数据*n); printf(n 1.修改学生信息n); printf(n 2.删除学生信息n); printf(n 0.返回主菜单n); printf(n 请选择(0-2)按回车确定:n); printf(n*n); scanf(%d,&choose); switch(choose) case 1:revise_message();break; case 2:del_message() ; break; case 0: break; while(choose!=0);
18、 /*添加学生信息模块*/input_message() int i; char choose; clrscr();for(i=sum;isum+1;i+) printf(*n); printf( 添加学生信息 n); printf(n*n); printf(n 学号:); scanf(%d,&Si.num); printf (n 姓名:); scanf(%s,Si.name); printf(n 性别:); scanf(%s, Si.sex); printf (n 高数:); scanf(%d,&Si.math);while (Si.math100) printf( 输入错误,请重新输入:)
19、; scanf(%d,&Si.math); printf(n 英语:); scanf(%d,&Si.English);while (Si.English100) printf(输入错误,请重新输入); scanf(%d,&Si.English); printf(n 体育:); scanf(%d,&Si.sport);while (Si.sport100) printf(输入错误,请重新输入:); scanf(%d,&Si.sport); printf(n 物理:); scanf(%d,&Si.physic);while (Si.physic100) printf(输入错误,请重新输入:); s
20、canf(%d,&Si.physic); printf(n 计算机:); scanf(%d,&Sputer);while (Sputer100) printf(输入错误,请重新输入:); scanf(%d,&Sputer); Si.total=Si.math+Si.English+Si.sport+Si.physic+Sputer ; Si.aver=Si.total/5; printf(n 是否继续(y/n)? n); getchar(); scanf( %c,&choose);if(choose=y) printf (n this thing will continue n); sum+;
21、 sum=sum+1; printf( n*随你所按,返回上一菜单*n); bioskey(0); /*按姓名查询*/ require_name()int i, j=0 ; char fund_name20; clrscr(); printf(n 输入需要查找的学生姓名:n); scanf(%s,fund_name); for(i=0;isum+1;i+) if(strcmp(Si.name,fund_name)=0) printf(n 该学生成绩如下:n); START2; START3; else j+; if(j=(sum+1) printf(n 该学生不存在!n); printf( n
22、-随你所按,返回上一 菜单-n); bioskey(0); /*按学号查询*/ require_num()int i, j=0 ; int fund_num; clrscr(); printf(n 输入需要查找的学生学号:n); scanf(%d,&fund_num); for(i=0;isum+1;i+) if(Si.num=fund_num) printf(n 该学生成绩如下:n); START2; START3; else j+; if(j=(sum+1) printf(n 该学生不存在!n); printf( n-随你所按,返回上一 菜单-n); bioskey(0); /*查询信息模
23、块*/ require_message() int choose ; do clrscr(); printf(*查询学生信息*n); printf( 1.按姓名查找n); printf( 2.按学号查找n); printf( 0.返回主菜单n); printf(n*请选择(0-2)按回车确定*n); getchar(); scanf(%d,&choose); while (choose2) printf(输入错误,请重新输入:); scanf(%d,&choose); switch(choose) case 1:require_name(); break; case 2:require_num
24、(); break; case 0: break; while(choose!=0); /*按高数成绩排行(排行区)*/ sort_math() struct student_type score, QN; int i,j; clrscr(); printf(n 按高数成绩排名:n); START2; START3; for(i=0;isum;i+) Qi=Si; for(i=0;isum-1;i+) score=Si; for(j=i+1;jsum;j+) if(Qi.mathQj.math) score=Qj; Qj=Qi; Qi=score; printf(n 学号 姓名 高数成绩n);
25、 for(i=0;isum;i+) printf(n %5d %10s %5dn,Qi.num,Qi.name,Qi.math); printf(n 按任意键返回上一菜单!); bioskey(0); /*按英语成绩排行(排行区)*/ sort_English() struct student_type score, QN; int i,j; clrscr(); printf(n 按英语成绩排名:n); START2; START3; for(i=0;isum;i+) Qi=Si; for(i=0;isum-1;i+) score=Si; for(j=i+1;jsum;j+) if(Qi.En
26、glishQj.English) score=Qj; Qj=Qi; Qi=score; printf(n 学号 姓名 英语成绩n); for(i=0;isum;i+) printf(n %5d %10s %5dn,Qi.num,Qi.name,Qi.English); printf(n 按任意键返回上一菜单!); bioskey(0); /*按物理成绩排行(排行区)*/ sort_physic() struct student_type score, QN; int i,j; clrscr(); printf(n 按物理成绩排名:n); START2; START3; for(i=0;isum
27、;i+) Qi=Si; for(i=0;isum-1;i+) score=Si; for(j=i+1;jsum;j+) if(Qi.physicQj.physic) score=Qj; Qj=Qi; Qi=score; printf(n 学号 姓名 物理成绩n); for(i=0;isum;i+) printf(n %5d %10s %5dn,Qi.num,Qi.name,Qi.physic); printf(n 按任意键返回上一菜单!); bioskey(0); /*按体育成绩排行(排行区)*/ sort_sport() struct student_type score, QN; int
28、i,j; clrscr(); printf(n 按体育成绩排名:n); START2; START3; for(i=0;isum;i+) Qi=Si; for(i=0;isum-1;i+) score=Si; for(j=i+1;jsum;j+) if(Qi.sportQj.sport) score=Qj; Qj=Qi; Qi=score; printf(n 学号 姓名 体育成绩n); for(i=0;isum;i+) printf(n %5d %10s %5dn,Qi.num,Qi.name,Qi.sport); printf(n 按任意键返回上一菜单!); bioskey(0); /*按计
29、算机成绩排行(排行区)*/ sort_computer() struct student_type score, QN; int i,j; clrscr(); printf(n 按计算机成绩排名:n); START2; START3; for(i=0;isum;i+) Qi=Si; for(i=0;isum-1;i+) score=Si; for(j=i+1;jsum;j+) if(QputerQputer) score=Qj; Qj=Qi; Qi=score; printf(n 学号 姓名 计算机成绩n); for(i=0;isum;i+) printf(n %5d %10s %5dn,Qi.num,Qi.name,Qputer); printf(n 按任意键返回上一菜单!); bioskey(0); /*按总成绩排序(排行区)*/ sort_all() struct student_type score, QN; int i,j; clrscr(); printf(n 按总分排名:n); START2
限制150内