学院
课程设计报告
C语言程序设计课程设计
专班姓学
业 级 名 号
电气工程及其自动化
指导教师
年 月
新能源与动力工程学院课程设计任务书
课程名称:C语言程序设计课程设计 指导教师(签名): 班级: 姓名 学号: 一、课程设计题目 班级成绩管理系统 二、课程设计使用的原始资料(数据)及设计技术要求: 安装有Windows操作系统电脑 Visual C++ 6.0 二、课程设计的目的 学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和政治)等 三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等) 1.输入功能:可以一次完成无数条信息的输入。 2.输出功能:能按班级输出学生的成绩单。 3.修改功能:完成对单个学生成绩的修改。 4.查找功能:完成对单个学生信息查找,并显示。 5.排序功能:按学生成绩进行排序,并显示。 四、工作进度安排 7月8日:选择课程设计题目,确定分组 7月9日:查找资料,编辑程序 7月10日:查找资料,编辑程序 7月11日:查找资料,修改程序 7月12日:审核和打分 五、主要参考文献 [1] 谭浩强.《C语言程序设计》(第二版).北京: 清华大学出版社,2009. [2] 谭浩强《C程序设计程序设计学习辅导》 .北京 :清华大学出版社,2005. 审核批准意见 系主任(签字) 年 月 日
指导教师评语及成绩评定表
指导教师评语 设计过程 (40) 设计报告 (50) 小组答辩 (10) 总成绩 (100) 成绩
指导教师签字:
年 月 日
目录
一.引言........................................................ - 1 -
1.1 设计目的 .......................................... - 1 - 1.2意义 ............................................... - 1 - 1.3内容 ............................................... - 1 - 1.4主要任务 ........................................... - 2 -
二.主要功能和功能.............................................. - 3 -
2.1主要功能 ........................................... - 3 - 2.2要求 ............................................... - 3 -
三.系统的数据需求及性能分析..................................... - 4 -
3.1 数据需求 .......................................... - 4 - 3.2系统的性能分析 ..................................... - 4 -
四. 输入输出要求................................................ - 5 - 五.整体框架结构................................................ - 6 - 六.学生成绩业务管理图.......................................... - 7 - 七.系统概要设计................................................ - 8 -
7.1 程序的模块组成 .................................... - 8 - 7.2 学生信息结构数组 .................................. - 8 - 7.3 各个程序的主要功能介绍: .......................... - 9 -
八.系统详细设计................................................ - 10 -
8.1函数介绍 .......................................... - 10 -
九. 调试与测试................................................. - 13 -
9.1系统调试 .......................................... - 13 - 9.2系统测试 .......................................... - 13 -
十.总结....................................................... - 20 - 参考文献....................................................... - 22 - 附录 源代码................................................... - 23 -
一.引言
1.1 设计目的 1.学生成绩的录入
2.能统计学生的成绩,求学生的总分及平均分 3.能查询单个学生成绩 4.能修改单个学生信息 1.2意义
随着经济的快速发展,科技的日益普及。目前我国的信息数字化工作也进入一个全新发展时期,特别是高校的信息化建设已进入了全面的发展阶段,诸多高校充分地认识到,信息化建设己经成为了高校提高自身管理水平、提升综合竞争实力的重要手段。在高校,各种信息管理系统层出不穷。通过本系统,能够实现对学生成绩的有效管理,减少教务人员、教师的工作量,该系统能够很好的满足学校教学、管理方面的要求。为教务人员、教师提供学生成绩管理系统,以轻松实现学生成绩管理。系统化的成绩管理可以减少教务人员及教师因为工作量大而出现错误,为学校减少不必要的人力、物力、财力,便于学生成绩的增加、删除、修改、查询。
1.3内容
对一个有N个学生的班级,每个学生有四门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
- 1 -
1.4主要任务
1.能按完成对学生成绩的录入、修改。 2.能统计学生的成绩,求学生的总分及平均分。 3.能查询学生各科成绩。
- 2 -
二.主要功能和功能
2.1主要功能
1.学生查询功能:为了方便学生查找成绩等信息,将所有信息按照需要进行分类。这样学生就能很方便的找到自己所需要的信息。
2.管理员查询功能:管理员可以通过条件选择查询所有信息,并进行排序。
3.添加功能:管理员可以输入学生成绩等相关信息。
4.修改功能:输入密码后管理员可以对数据库中的信息进行修改,系统能够通过管理员的给出的条件查找出所要修改的信息,对修改后的信息进行保存。
5.统计功能:管理员可以通过此功能对信息进行统计。 2.2要求
使用二进制文件方式存储数据,系统以菜单方式工作 学生成绩信息包括:学号,班别,姓名,四门课程成绩(语文、数学、英语和政治)等。要求使用二进制文件方式存储数据,系统以菜单方式工作,实现对学生成绩的录入,修改,统计,排序,查询,输出等功能。
- 3 -
三.系统的数据需求及性能分析
3.1 数据需求
通过查阅资料以及对程序的理解,总结出用户对数据的需求如下: 1.学生信息:
包括:学号、学生姓名等信息。 2.课程信息:
包括:课程编号、课程名称等。 3.基本数据维护功能: (1)录入学生的成绩信息。 (2)显示学生的成绩信息。 (3)保存学生的成绩信息。 (4)排序学生的成绩信息。 (5)统计学生的成绩信息。 3.2系统的性能分析
1.系统的高速性、稳定性、安全性。 2.系统人机界面友好,易学易用。 3.系统维护成本较低。
- 4 -
四. 输入输出要求
在菜单选项中1-7,选择功能项,进行对应选项的函数调用。 1.每一条记录包括一个学生的学号、姓名、4门成绩、平均成绩; 2.输入功能:输入学生的基本信息存入磁盘文件中; 3.显示功能:输出已存盘的学生信息;
4.排序功能:输出用户所要选择科目的提问,输入科目后输出该科目一排好的学生成绩,并按学生平均成绩进行排序;
5.插入功能:插入新的信息;
6.修改功能,输入密码.错误输出是否继续输入密码.正确则逐个输出是否想要修改学生信息;
7.保存功能:将学生记录保存在任何自定义的文件中。
- 5 -
五.整体框架结构
主程序
初始化 录入 显示 排序 插入 修改 保存 退出 图1 整体框架结构图
- 6 -
六.学生成绩业务管理图
学生 新数 据 管理、 员 输入学号和密码 查询 学生数据库 输出结果 数据修改或添加 成绩数据库 统计汇总 输出结果 图2 学生成绩业务管理图
- 7 -
七.系统概要设计
7.1 程序的模块组成
第一个模块:先定义好一些必要的全局变量以及调用的函数和结构体数组。
第二个模块:设计一个菜单函数menu();实现能供用户选择功能项。
第三个模块:用enter()函数实现成绩的输入。 第四个模块:用save()函数实现成绩的保存。 第五个模块:用print()函数实现成绩输出。 第六个模块:用cort()函数实现成绩排序功能。 第七个模块:用modify()函数实现成绩修改功能。 第八个模块:用count()函数实现成绩统计功能。
main函数实现总的控制台界面,调用void enter(),void cort(),void modify(),void count(),print(),void save(),函数实现各种用户功能要求。
7.2 学生信息结构数组 struct stu {
char name[20]; int num; int score[M];
- 8 -
};
7.3 各个程序的主要功能介绍:
1.为便于用户使用,先定义一个常数N表示人数,学生信息的结构体数组,以及调用功能项的函数。
2.void main():利用swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
3.void Enter():用来执行学生成绩记录的输入。 4.void Print():显示所有学生的信息。
5.void save():这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。
6.void Cort():要排序的 科目的 序号,用选择排序法实现函数学生成绩的排序。
7.void Modify():需要通过密码验证,进入菜单后可实现对学生资料的修改。
8.void Count():可以显示学生的平均成绩以及科目最高分。
- 9 -
八.系统详细设计
8.1函数介绍
1.主函数main()利用swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
2. void Enter()函数用scanf依次输入学生信息,在输入多门成绩成绩时,用for循环来实现,结尾调用save()函数保存。
3. void Print()函数为了使界面美观对学生成绩用%5d输出,且用换行实现,学生信息整齐排列。
4.void Cort()函数先定义choice1,输出想要排序的科目的序号,用选择排序法实现函数学生成绩的排序。
5.void Modify()函数先定义好 一个密码以及flag=0;如果输入的密码错误则flag=1,用do ..while实现是否重新输入密码,密码准确后调用modi()函数,实现修改功能。
6. void Count()函数用menu1函数实现一个菜单功能。用switch实现,用户选择想执行的功能,从而调用Show1()Show2()Show3()。
- 10 -
开始 MainChoice函数 Choic7 4 sort() 退出程序 1 enter() print() 2 save() 3 5 modify () 6 count() 运行程序 图3 结构图
- 11 -
8.2 统计函数流程
开始 调用menu1函数 输入choice1 choice1 1 2 3 返回函数 调用show1函数 调用show2函数 输入选择J=0 I=0 J=j+1 I=0;sum=0 I=i+1 I 九.调试与测试 9.1系统调试 1.在enter()函数中对学生成绩的输入用scanf(“%d”,s);当输入一门成绩后就会跳回,使接下来的程序无法运行,改为for(j=1;j<=M;j++) scanf(“%d”,&s[i].score[j]);将错误解决。 2.在enter函数中,输入姓名用scanf(“%s”,&s[i].name);错误,在scanf函数中的输入项如果是字符数组名代表该数组的起始地址.则应改为scanf(“%d”,s[i].name)。 3.在运行print()函数时,第四门课显示出来的分数并非输入项:错误,在定义时将j=1,应改为j=0。 4.在count()函数中,show3();输出的人数比实际的多一人,因为b++在循环结束之后会自增一次,则比实际的大一。 9.2系统测试 1.运行时进入主界面,系统根据输入的数字选项来调用相应的函数。主要实现“功能选择”的界面,在这个界面里有显示系统的七大功能,根据每个功能前面的序号进行选择。以下为该界面; - 13 - 图5:主菜单 2.进行学生成绩输入时按照提示选择1键,录入第一个学员信息。完成后屏幕下方出现提示“是否继续输入?(Y\\N)”,此时,按键盘上的N键则为结束输入,返回主菜单;若按Y键,则继续输入第二个学生信息,依此类推。 - 14 - 图6:成绩录入 3.当要求显示学生成绩时输入2键,按下回车键即出现以下界面图中所显示的即为刚刚输入的学生成绩: - 15 - 图7 :成绩显示 4.选择保存成绩是选择3,按下回车则提示输入文件名则由图所示: 图8:成绩保存 - 16 - 5.当执行对学生成绩进行排序时,输入4键,会出现一个选择界面让所要排序的科目,当输入一个数字时及执行对该科目成绩的排序命令,具体如下截图: 图9:成绩排序 6.改时需要进行密码验证当密码错误时不能进行该操作,只有输入正确的密码才能运行,运行结果如下图: - 17 - 图10:成绩修改 7.当需要进行成绩统计时,输入数字6,按回车即可出现一个选择界面:输入数字1即显示每科成绩最高的学生信息:输入数字2即显示每科的平均成绩;输入数字3则退出该功能的运行。截图如下: - 18 - 图11:成绩统计 - 19 - 十.总结 在这为期一周的时间内,通过我们小组各成员之间的相互讨论和合作,我们完成了班级成绩管理系统系统的程序设计。 虽然在这学期中,我们已经学习了《C 语言程序设计》这门课,但是我所学的知识最多也就是在做作业的时候才会用到,平时没有什么练习的机会,这次的课程设计是我第一次通过自己构思,和同学讨论并且不断查阅资料来设计一项程序。这次设计,不仅巩固了我以前所学的知识,还让我对C语言有了更深一步的了解,掌握了更多的技巧和技能。 C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。 在我们小组有解决不了的问题时,我们会主动查阅相关的资料,或向其他同学询问,这不仅丰富了我们的知识,还增进了我们同学之间的友谊。 这次设计中,我们的收获还有就是学会了用流程图来表达自己的想法,并根据流程图来逐步实现程序的功能。在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。我们在函 - 20 - 数的编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间的调用(包括递归调用)。由于我们是分工编写代码,最后需要将每个人的代码放到一起进行调试。因为我们每个人写的函数的思想不都一样,所以在调试的过程中也遇到了困难,但经过我们耐心的修改,终于功夫不负有心人,我们成功了! 在参考书上,我们不仅参考了谭浩强主编的第二版《C语言程序设计》进行参考。 当然,我们的程序还有一些不完善的地方,比如说,当输入的数据不符合我们定义的数据的格式的时候,程序会出现一些错误,有时会出现主菜单的死循环;在一次程序运行中,只能行使一种权限,要想再行使另一种权限,就只能退出程序,然后再运行程序。 一周的课程设计即将结束,时间虽短,但是我收获了很多。最后,谢谢老师和同学们的指导,更要感谢我们小组成员之间的合作与交流。 - 21 - 参考文献 [1] 谭浩强.《C语言程序设计》(第二版).北京: 清华大学出版社,2009. [2] 谭浩强《C程序设计程序设计学习辅导》 .北京 :清华大学出版社,2005. 22 附录 源代码 #include char name[20]; int num; int score[M]; }; void enter(struct stu s[],int n); void print(struct stu s[],int n); void save(struct stu s[],int n); void sort(struct stu s[],int n); void modify(struct stu s[],int n); void count(struct stu s[],int n); int menu(); void main() { void clrscr(); struct stu student[NUM]; for( ; ; ) switch(menu()) { case 1:enter(student,NUM);break; case 2:print(student,NUM);break; case 3:save(student,NUM);break; case 4:sort(student,NUM);break; 23 case 5:modify(student,NUM);break; case 6:count(student,NUM);break; case 7:return; } } int menu() { int choice; printf(\"\\n*****************************************************\\n\"); printf(\" 1 成绩录入\\n\"); printf(\" 2 成绩显示\\n\"); printf(\" 3 成绩保存\\n\"); printf(\" 4 成绩排序\\n\"); printf(\" 5 成绩修改\\n\"); printf(\" 6 成绩统计\\n\"); printf(\" 7 退出系统\\n\"); printf(\" 学生人数级 NUM 课程 数学0 语文1 英语2 政治3\\n\"); printf(\"***************************************************************\\n\"); do { printf(\"\\nchoice1-7:\"); 班 级 成 绩 管 理 scanf(\"%d\} while(choice<1||choice>7); return choice; } void enter(struct stu s[],int n) { { 24 char c; int i=0; int j; do printf(\"please enter the message:\\n\"); getchar(); printf(\"enter name:\\n\"); scanf(\"%s\ printf(\"enter num:\\n\"); scanf(\"%d\ printf(\"enter score:\\n\"); for(j=0;j FILE *fp; scanf(\"%d\ printf(\"按Y继续录入,按N结束录入!\"); getchar(); scanf(\"%c\if(c!='Y'&&c!='y') break; ++i; }while(i!=n); int i; char save[20]; printf(\"enter the file name:\"); scanf(\"%s\ /*输入选择项*/ if((fp=fopen(\"stu-list\ { printf(\"can not open file\\n\"); return; } else { for (i=0;i 25 printf(\"file write error\\n\"); fclose(fp); printf(\"success\\n\"); } void print (struct stu s[],int n) { int i,j; } for(i=0;i printf(\" 数学 语文 英语 政治\\n\"); printf(\"%s\ printf(\"%d\ for(j=0;j int i,j,min,temp,k; } printf(\"please choice subject 1-4:\\n\"); scanf(\"%d\ for(i=0;i min=i; for(j=i+1;j { temp=s[min].score[k]; s[min].score[k]=s[j].score[k]; s[j].score[k]=temp; } 26 } printf(\"\\n The sorted numbers:\\n\"); for(i=0;i void count(struct stu s[],int n) { void show1(struct stu a[],int n1); void show2(struct stu a[],int n1); int menu1(); for( ; ;) switch(menu1()) { case 1:show1(s,n);break; case 2:show2(s,n);break; case 3:return; } } int menu1() {int choice1; printf(\"\\n**********************************\\n\"); printf(\"1:显示每科成绩最高的学生信息\\n\"); printf(\"2:显示每科平均成绩\\n\"); printf(\"3:退出\\n\"); printf(\"**********************************\\n\"); do {printf(\"\\n Enter tou choice1 (1-3):\"); scanf(\"%d\return choice1; } void show1(struct stu a[],int n1) { int k,i,j,c=0; 27