手记

C语言程序设计-班级成绩管理系统

一.报告内容要求:

1.题目:班级成绩管理系统。

2.设计要求:对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

3:功能要求:a、成绩录入 b、成绩显示 c、成绩保存 d、成绩排序 e、成绩修改(要求先输入密码) f、成绩统计 1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩 3)显示超过某门课程平均成绩的学生人数 g、退出系统 (3)执行一个具体的功能之后,程序将重新显示菜单。 (4)将学生成绩保存到文件中。

二.引言:

C语言作为一门最通用的语言,在过去很流行,将来依然会如此。从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同。学习、掌握C语言是每一个计算机技术人员的基本功之一。进行课程设计的目的,无疑是为了使生活中的事处理起来更简单。本题旨在为了统计班级学生的成绩,使班级工作进行的更加顺畅。将学生信息统计在文件中,可以清晰地查看,修改学生信息,使教务工作变得更加轻松。

三.系统功能和原始数据 :

(1)原始数据

1.输入学生信息:

  1. 显示学生信息:

3.按平均成绩排序:

4.学生成绩的统计:

5.修改学生成绩:

(2)系统功能 :

本课程设计旨在对班级的学生成绩进行统计,并进行学生成绩的录入,修改学生成绩,显示学生成绩,学生成绩的统计以及按平均成绩排序等功能。并将学生信息保存在文件中。

四.程序总体设计:

(1)数据结构:定义一个结构体,结构体里包括了学生的学号,学生的姓名,学生的成绩,以及学生的平均成绩。

(2)模块划分和层次结构 :本课程设计中,运用了模块划分和层次结构。实现代码时,并非只用一个main函数,将所有的功能给予main函数,而是通过多个子函数来实现的,在本课程设计中,每个功能都被划分到相对应的子函数,对其进行实现。最后,在main函数中对这些子函数进行调用,实现课程设计的要求。层次为先次再主,先实现每个子函数的功能,再集合到main函数中,实现全部的功能。

(3)函数原型清单 :

1.void Student_Insert() //学生信息的插入//

2.void Student_Modify() //学生信息的修改//

3.void Student_Display() //学生信息的显示//

4.void choice1(),void choice2(), void choice3()//成绩统计

5.void Student_SortByAverage(struct Student students[]) //按平均值大小排序//

6.void readfile() /将学生信息从文件读出/

7.void printffile() /将学生信息写入文件/

8.float Avg(struct Student students)//计算学生成绩的平均值

(4)程序总体框架 :在main函数中调用每个子函数。

五.功能模块函数设计和调试 :

1.在void Student_Insert()这个函数中,通过while循环来不断输入所要的学生信息。并在while循环的每次结尾,判断是否还要继续进行学生信息的输入。

2.在void Student_SortByAverage(struct Student students[])这个函数中,需先打开文件,并判断文件中学生的个数,由于数组元素的下标是从0开始的,所以在最后统计的k中,要让k–,这样后面的步骤才能正确运行。紧接着,用冒泡排序对所有学生的平均成绩进行排序,其中,需要调用Avg(students[j])这个函数来计算每个学生的平均成绩。在对学生成绩排完序后,用printffile()将排完序后的学生数据存进文件中。

3.在void Student_Modify()这个函数中,也要先打开文件。后要先输入密码,如密码正确,开始修改,输入学号,判断此学生是否存在,若存在,则开始修改,同样,也许将修改后的学生信息存入文件中。

4.在void Student_Display()这个函数中,先打开文件,用ch=fgetc(fl);去读取文件中的内容,并用while(ch!=EOF)判断文件是否走到尽头。

5.在void choice1()这个函数中,定义变量max,让max等于每科成绩最大的数组下标,并直接在函数里将最大值打印出来。void choice2()和void choice3()同理。

----------------------------流程图----------------------------:

1.main函数:

2.子函数(录入学生信息):

3.子函数(修改学生信息):

4.子函数(显示学生信息):

***算法分析:

在main函数中,先输入choice(1—6),判断输入的choice的值,若为1,则执行录入学生信息操作;若为2,则修改学生成绩;若为3,则执行显示学生信息这一步;若为4,则进行学生成绩的统计;若为5,则按学生的平均成绩的大小输出结果;若为6,则退出程序。

六.程序清单 :

七.课程设计总结 :

经历了整整一周的课程设计,终于告了一段落。通过此次课程设计,使我更加扎实的掌握知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!在这一周里,我经历了很多,收获了很多。本次课程设计中,程序的运行情况基本符合设计的要求,在录完学生数据后,学生的数据也能正常存进文件中,并能从文件中读取出来。但这之前,我也经历了挫折与困惑。刚看到题目时,脑子里一片空白,完全没有思路,平时做的题目,也只是简单的编程,完全没有接触过这么综合性的题目。所以,一开始的时候,只能通过问同学、上网查找资料等方法,来获得一点思路。当时根据题目的要求,所有的思路就是先将每个子函数写出来,后面的事情后面再说,于是就一步一步地将各个函数写了出来(显示学生信息,修改学生信息,录入学生信息等)。最后,在主函数中,利用switch语句控制循环,将所要的步骤逐一进行。在写程序的过程中,遇到了许多问题。对文件的知识还不是很了解,所以,一开始的时候,可谓寸步难行,因为此题需将学生数据存进文件中并读取出来。但是,通过查找资料,我最终将文件的知识点搞懂了,题目也就自然而然的解决了。在这一周里,我学到了很多东西,例如,在显示学生信息这个函数里,我学会了用ch=fgetc(fl)来读取文件里的内容,这是之前完全不知道的、以及用while(!feof(fp))来判断文件是否结束,若结束,返回非零值;若未结束,返回零。在统计文件里学生个数时,需将最后的k值减一,这是因为数组的下标是从零开始的,之前排序时一直出错,后来找到了问题所在。在void Student_SortByAverage(struct Student students[])这个函数中,需定义一个结构体变量tmp,才能进行后面的学生信息的赋值(tmp=students[j+1])。本次课设中,最大的一个问题就是那个全局变量k,在录入学生信息时,确实能统计出k的值,存入文件。但在后来的一些函数,如成绩修改、按平均值输出信息等,是无法知道学生的数目,这是因为当这些函数运行前,需先打开文件,但没有对文件里的学生数量进行统计,如果少了这一步,程序将无法正确识别k值,所以要先求出k值,才能进行后面的操作。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。参考资料:

八.参考文献:

1.<<C程序设计教程>>

2.网上查阅资料

3.寻找同学的帮助

0人推荐
随时随地看视频
慕课网APP