C语言课程设计-学生成绩管理系统(.doc

上传人:来看看 文档编号:5014248 上传时间:2020-01-28 格式:DOC 页数:33 大小:196.50KB
返回 下载 相关 举报
C语言课程设计-学生成绩管理系统(.doc_第1页
第1页 / 共33页
C语言课程设计-学生成绩管理系统(.doc_第2页
第2页 / 共33页
C语言课程设计-学生成绩管理系统(.doc_第3页
第3页 / 共33页
C语言课程设计-学生成绩管理系统(.doc_第4页
第4页 / 共33页
C语言课程设计-学生成绩管理系统(.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《C语言课程设计-学生成绩管理系统(.doc》由会员分享,可在线阅读,更多相关《C语言课程设计-学生成绩管理系统(.doc(33页珍藏版)》请在三一文库上搜索。

1、 题目:学生成绩管理系统(1)一、课程设计时间2001011第2学期 第15周,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:1录入学生数据信息(不用考虑学期),学生信息至少包括姓名、学号、数学成绩三方面,学生信息应及时保存在文件中;2根据学号查询某生成绩;3插入新的学生数据信息。4统计分析:要求能够将成绩排序,并统计及格人数及及格率。三、课程设计要求:1. 程序质量:l 贯彻结构化程序设计思想。l 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。l 用户界面中的菜单至少应包括“录入学生信息”、“查询某学生成绩”、“插入新生信息”、“统计分析”、“退出”5项。l

2、代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、成绩六、教师评语沈阳航空航天大学设计用纸目录一、需求分析1二、设计分析2三、主要界面截图3四、技术要点17五、个人总结20六、参考文献20七、源程序2131一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。该系统是一个较典型的数据管理系统,其使用者被假定为某办公室的学生成绩管理人员,系统应该具有安全、稳定、功能齐全的特点。1. 安全性分析系统管理的数据涉及到

3、学院的所有同学,数据量较大且是一种基础性数据,能够为其它方面的学生管理工作提供重要参考,所以要通过设置密码等手段确保数据不能被随意的删减和修改。2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。3. 主要功能分析(1)数据录入:允许用户输入学号、姓名、数学成绩。对用户由于疏忽录入的非法数据,能够及时提示并更正。(2)数据保存:对于输入的数据,或被修改的数据应该保存到某个磁盘文件中,实现永久存储。文件的具体格式题目未作具体要求,所以可采用随机文件,也可采用文本文件。不管采用哪种文件形式,文件中的数据应有固定的格式,以便

4、于程序自动读取或人工阅读。(3)数据查询:用户输入查询条件,系统规则地在界面显示查询结果,且显示的数据尽量全面。当输入学号时,可查询到该学生的学号、姓名、数学课程成绩信息。(4)统计分析:将录入学生成绩排序,统计及格率,且使显示尽量简洁,操作尽量简单。二、设计分析主要有6个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:录入函数 (newrecord),查询函数(searchmenu),统计函数(listmenu),添加函数(addrecord),写入函数(writetofile),以及显示目录的主函数(main)。解决本题首先要解决两个问题:首先是录入文件或者读取文

5、件,录入相对,读取文件这一步我是参照书上可用 FILE *fp=fopen(),但是这一步又是非常麻烦,稍有不慎很可能就不能打开。其次,在读取文件时要先做一个循环,再构造一个主菜单的程序,即在用户界面首页输出简单的操作界面,为了能使用户在使用更加明了方便,可再构造子菜单。1、 主函数流程 void main()readfromfile();while (1)mainmenu(); 图2-1主函数流程图2.主要功能菜单流程图(1)主菜单流程void mainmenu()/主菜单 char choic;system(cls); printf(ntt*主菜单*); printf(ntt* 1-录入学

6、生信息 2-查询学生信息 *); printf(ntt* 3-插入新生信息 *); printf(ntt* 4-统计分析 *); printf(ntt* 5-保存退出 6-不保存退出*); printf(ntt*); printf(ntt请选择:); choic=getch();switch (choic) case 1:newrecord();break; case 2:searchmenu();break; case 3:addrecord();break; case 4:listmenu();break; case 5:writetofile();break; case 6:exit(0

7、); default:mainmenu(); 图2-2 执行主菜单流程图(2)case1执行录入函数该函数的核心内容是学生成绩信息被存在结构体里,需要把学生的姓名、学号、数学成绩、分别输入到结构体里。,实现多名学生信息的输入。具体的程序段如下void newrecord()/添加纪录 printf(ntt* 请输入学生信息 *n); printf(ntt输入学号:); scanf(%s,&studentnum.id); printf(ntt输入姓名:); scanf(%s,&studentnum.name); printf(ntt输入数学成绩:);scanf(%d,&studentnum.ma

8、cth);num+; printf(ntt是否继续添加?(Y/N):); if (getch()=y) newrecord(); return; 图2-3 录入函数流程图(3)case2执行查询函数该函数的核心内容是通过输入要查找的学生的学号,在结构体中逐一对照已有学生信息和要查找学生信息。如果和已有学生信息符合,则进行该学生数学成绩信息的输出,如果没有符合学生,则出现找不到学生信息!对话框。具体程序段如void searchmenu()/查询菜单 char choic;system(cls);printf(ntt* 查询菜单 *); printf(ntt* 1-显示所有 2-按学号查询 *)

9、; printf(ntt* 3-返回主菜单*); printf(ntt*); printf(ntt请选择:); choic=getch();switch (choic)case 1:showall();break; case 2:searchbyid();break; case 3:mainmenu();break; void searchbyid()/按学号查询 int mark=0; int i; int a=0; printf(ntt* 按学号查找 *n); char id10; printf(ntt请输入学号:); scanf(%s,id); for(i=0;inum;i+) if (

10、strcmp(studenti.id,id)=0) printf(ntt* 以下是您查找的学生信息 *); printf(ntt学号: %s,studenti.id); printf(ntt姓名: %s,studenti.name);printf(ntt数学成绩: %d,studenti.macth);printf(ntt*); printf(ntt按任意键返回主菜单:); mark+; getch(); return; if (mark=0) printf(ntt没有该学生的信息); printf(ntt按任意键返回主菜单); getch(); return; void showall()/

11、显示所有 int i; system(cls); if(num!=0) printf(ntt* 以下为学生系统所有信息*); for (i=0;inum;i+) printf(ntt学号: %s,studenti.id); printf(ntt姓名: %s,studenti.name); printf(ntt数学成绩: %d,studenti.macth); printf(tt); if (i+1num) printf(ntt_); system(pause); printf(ntt*); else printf(ntt学生系统中无任何纪录); printf(ntt按任意键返回主菜单:); g

12、etch(); return; 图2-4 查询函数流程图(3)case3执行添加函数该函数的核心内容是将新生成绩信息存在结构体里,需要把学生的姓名、学号、数学成绩、分别输入到结构体里。,实现多名学生信息的输入(与录入函数相似)。具体的程序段如下void addrecord()/插入新信息 printf(ntt* 请输入学生信息 *n); printf(ntt输入学号:); scanf(%s,&studentnum.id); printf(ntt输入姓名:); scanf(%s,&studentnum.name); printf(ntt输入数学成绩:);scanf(%d,&studentnum.

13、macth);num+; printf(ntt是否继续添加?(Y/N):); if (getch()=y) newrecord(); return; 图2-5添加函数流程图(4)case4执行统计函数该函数的核心内容是:1. 通过冒泡法逐一分析学生信息,将学生成绩排序;2.将学生成绩大于60的都附给m做一个循环,让m为一个数级,最后除以总数求出及格率。具体的程序段如下:void listmenu()/统计菜单 char choic; if(num=0) printf(ntt对不起,文件中无任何纪录); printf(ntt按任意键返回主菜单); getch(); return; system(

14、cls); printf(ntt* 统计菜单 *); printf(ntt* 1-按学号排序 2-显示及格率 *);printf(ntt*3-返回主菜单*);printf(ntt*); printf(ntt请选择:); choic=getch(); switch(choic) case 1:listbyid();break; case 2:pas();break; case 3:mainmenu();break; default:mainmenu();break; void listbyid()/按学号排序 int i,j; struct record tmp; for (i=1;inum;i

15、+) if(strcmp(studenti.id,studenti-1.id)0) tmp=studenti; j=i-1; do studentj+1=studentj; j-; while (strcmp(tmp.id,studentj.id)=0); studentj+1=tmp; printf(ntt排序成功,是否显示?(y/n); if (getch()=y) showall(); return;void pas()/及格率计算 int mark=0; int i; int a=0;float m=0;float pin=0.0;char s=%;for(i=0;i=60) m+;p

16、in=(m/num);pin=pin*100;printf(ntt及格率为:); printf(ntt%f,pin);printf(%c,s);printf(ntt按任意键返回主菜单:); mark+; getch(); return; if (mark=0) printf(ntt记录为空!); printf(ntt按任意键返回主菜单); getch(); return; 图2-6 统计函数流程图(4)case5执行保存退出该函数的核心内容是通过FILE *fp=fopen()将录入学生信息写入只写文件后退出具体的程序段如下:void writetofile()/写入文件 int i; if

17、(fp=fopen(myfile.txt,wb)=NULL) printf(ntt文件打开失败); for (i=0;i0) /*文件不为空*/rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) & fread(&studentnum,sizeof(struct record),1,fp);num+);printf(ntt文件导入成功);printf(ntt按任意键返回主菜单);getch();return;printf(ntt文件导入成功);printf(ntt学生成绩文件中无任何纪录);printf(ntt按任意键返回主菜单);getch

18、();return;(2)文件写入void writetofile()/写入文件 int i; if (fp=fopen(myfile.txt,wb)=NULL) printf(ntt文件打开失败); for (i=0;inum;i+) if (fwrite(&studenti,sizeof(struct record),1,fp)!=1) printf(ntt写入文件错误!n); fclose(fp); printf(ntt学生成绩文件已保存); printf(ntt按任意键退出程序ntt); exit(0); 3、统计分析 此程序的难点重点在于统计分析,其可分为两个方面内容,一为排序;二为

19、计算及格率,排序运用较为常用的冒泡法解决,而计算及格率将分数大于60的都附给m,让m为一个数级,最后除以总数求出及格率。五、个人总结通过这次课程设计,使我又进一步熟悉和掌握了通过用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。题除了读取文件和统计分析较为困难外,还有所要编写的程序也不是很容易。再有就是编写程序时要尽量考虑到程序简洁明了,为程序编写出现错误时修改提供方便,这也是非常重要的。在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。使程序基本能完成编好和完善了程序,而且用户界面

20、也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。六、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006。七、源程序#include #include #include #include #include #include struct record char id10; char name20; int macth; student500; int num=0;/外部变量num为文件中的纪录数 FILE *fp; void mainmenu();/主菜单void pas();/及格率计算

21、void newrecord();/新添纪录 void searchmenu();/查询菜单 void addrecord();/插入新信息void searchbyid();/按学号查询 void showall();/显示所有 void readfromfile();/读取文件 void writetofile();/写入文件 void listbyid();/按学号排序 void listmenu();/排序菜单 void readfromfile()/从文件导入 if(fp=fopen(myfile.txt,rb)=NULL)printf(ntt学生成绩文件不存在);if (fp=fo

22、pen(myfile.txt,wb)=NULL)printf(ntt建立失败);exit(0);elseprintf(ntt学生成绩文件已建立);printf(ntt按任意键进入主菜单);getch();return;exit(0);fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)0) /*文件不为空*/rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) & fread(&studentnum,sizeof(struct record),1,fp);num+);printf(ntt文件导入成功);pr

23、intf(ntt按任意键返回主菜单);getch();return;printf(ntt文件导入成功);printf(ntt学生成绩文件中无任何纪录);printf(ntt按任意键返回主菜单);getch();return; void mainmenu()/主菜单 char choic;system(cls); printf(ntt* 主菜单 *); printf(ntt* 1-录入学生信息 2-查询学生信息 *); printf(ntt* 3-插入新生信息 *); printf(ntt* 4-统计分析 *); printf(ntt* 5-保存退出 6-不保存退出*); printf(ntt*

24、); printf(ntt请选择:); choic=getch();switch (choic) case 1:newrecord();break; case 2:searchmenu();break; case 3:addrecord();break; case 4:listmenu();break; case 5:writetofile();break; case 6:exit(0); default:mainmenu(); void newrecord()/添加纪录 printf(ntt* 请输入学生信息 *n); printf(ntt输入学号:); scanf(%s,&studentn

25、um.id); printf(ntt输入姓名:); scanf(%s,&studentnum.name); printf(ntt输入数学成绩:);scanf(%d,&studentnum.macth);num+; printf(ntt是否继续添加?(Y/N):); if (getch()=y) newrecord(); return; void searchmenu()/查询菜单 char choic;system(cls);printf(ntt* 查询菜单 *); printf(ntt* 1-显示所有 2-按学号查询 *); printf(ntt* 3-返回主菜单*); printf(ntt

26、*); printf(ntt请选择:); choic=getch();switch (choic)case 1:showall();break; case 2:searchbyid();break; case 3:mainmenu();break; void searchbyid()/按学号查询 int mark=0; int i; int a=0; printf(ntt* 按学号查找 *n); char id10; printf(ntt请输入学号:); scanf(%s,id); for(i=0;inum;i+) if (strcmp(studenti.id,id)=0) printf(nt

27、t* 以下是您查找的学生信息 *); printf(ntt学号: %s,studenti.id); printf(ntt姓名: %s,studenti.name);printf(ntt数学成绩: %d,studenti.macth);printf(ntt*); printf(ntt按任意键返回主菜单:); mark+; getch(); return; if (mark=0) printf(ntt没有该学生的信息); printf(ntt按任意键返回主菜单); getch(); return; void showall()/显示所有 int i; system(cls); if(num!=0)

28、 printf(ntt* 以下为学生系统所有信息*); for (i=0;inum;i+) printf(ntt学号: %s,studenti.id); printf(ntt姓名: %s,studenti.name); printf(ntt数学成绩: %d,studenti.macth); printf(tt); if (i+1num) printf(ntt_); system(pause); printf(ntt*); else printf(ntt学生系统中无任何纪录); printf(ntt按任意键返回主菜单:); getch(); return; void addrecord()/插入

29、新信息 printf(ntt* 请输入学生信息 *n); printf(ntt输入学号:); scanf(%s,&studentnum.id); printf(ntt输入姓名:); scanf(%s,&studentnum.name); printf(ntt输入数学成绩:);scanf(%d,&studentnum.macth);num+; printf(ntt是否继续添加?(Y/N):); if (getch()=y) newrecord(); return; void listmenu()/排序菜单 char choic; if(num=0) printf(ntt对不起,文件中无任何纪录)

30、; printf(ntt按任意键返回主菜单); getch(); return; system(cls); printf(ntt* 排序菜单 *); printf(ntt* 1-按学号排序 2-显示及格率 *);printf(ntt*3-返回主菜单*);printf(ntt*); printf(ntt请选择:); choic=getch(); switch(choic) case 1:listbyid();break; case 2:pas();break; case 3:mainmenu();break; default:mainmenu();break; void listbyid()/按学号排序 int i,j; struct record tmp; for (i=1;inum;i+) if(strcmp(studenti.id,studenti-1.id)0) tmp=studenti; j=i-1; do studentj+1=studentj; j-; while (strcmp(tmp.id,studentj.id)=0); studentj+1=tmp; printf(ntt排序成功,是否显示?(y/n);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1