1、 2010-2011(二)C 程序设计课程设计报告 课 设 题 目 : 学生成绩简单管理程序一 学 生 学 号 : 课 设 教 师 : 日 期 : 2011.5.31 一程序主要功能:(写出程序完成的主要功能) 用结构体数组结构实现简单的学生成绩管理功能,要求具有数据输入、数据输出、数组 排序、元素插入、元素删除、查询等功能。 各菜单功能: 1. Input Records(输入若干条记录) 从键盘一次输入一个学生的姓名和成绩(一条记录) ,依次存放到结构体数组中。掺 入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否 则,退出输入功能。 2. Display All R
2、ecord(显示所有记录) 按顺序显示表中所有记录,每屏显示十条记录。每显示十条记录,按键继 续显示下一屏。 3. Sort(排序) 以姓名为序排列数组。 4. Insert a Record(插入一条记录) 在以姓名为序排列的数组中插入一条记录,插入后数组仍有序。输出插入成功的信 息。 5. Delete a Record(按姓名查找,删除一条记录) 输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除。确认后,将 该姓名的记录删除。 6. Query(查找并显示一个记录) 输入姓名,查找该记录,并显示该同学的成绩。 7. Add Records from a Text File(从
3、正文文件中添加数据到结构体数组中) 用户可事前建立一个正文文件 data.txt,存放多个待加入的记录。 提示输入正文文件的 文件名,然后从该文件中一次性加入多条学生记录。文件 data,txt 格式如下: 2 Wang Xiao 95 LiuLin 87 8. Write to a Text file 将数组中的全部记录写入文件 records.txt,要求文件格式和文件 data.txt 相同。 9. Quit(退出学生成绩管理程序) 二说明:(写出对题目的分析,设计中遇到的主要问题及解决方法,对设计的 感想和心得。如有新增加的功能,给出增加功能的设计说明) 1.题目分析 该题主要考察对结
4、构体,指针,文件的操作,以及 C 语言算法的掌握,所以完成此道题 目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个 程序可以学习到以前调试短程序没有的的经验。 菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有 C 语言学过的技巧, 下面就各个子程序中的功能进行说明: 功能 1 和 4 的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过 gets 将所有的多余的字符,回车读去,否则就会出错。 功能 2 是显示所有的记录,通过循环输出,格式也比较重要。 功能 3 为按学号排序, 因为学号定义成了字符数组的形式, 因此在运用冒泡法进行排序的
5、时 候,要用到 strcmp,strcpy 等函数。 功能 5 为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到 就将此记录都向前移一位,返回 n-1。 功能 6 的算法在 5 中就已经体现了,输入姓名,一一比较。 功能 7 为新增的功能, 因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能, 因此 新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。 功能 8 和 9 是对文件的操作,提前准备好数据。 2. 在写程序中遇到的问题: 开始时无法正确完成“确认后再继续”我先是自己认真耐心地用很多方法调试修改, 然后问了几个同学,解决了这个
6、问题,还有有关文件读写的问题,因为是上课时没有听太明 白,所以自己再次仔细看了一遍书,分析书中例题,然后再运用到该程序的编写中,在同学 的帮助下解决了。 面对遇到的其他很多或大或小的问题主要都是和同学交流探讨与问老师相 结合的方式来达到彻底的解决的。 3. 心得体会: 编这样一个程序在之前看的时候总是觉得不可能做到,完全没有思路,不过当静下心 坐在电脑前仔细看完要求和提示后, 一步一步地编写, 慢慢地发现其实只要肯想肯问就能积 少成多,完成这样一个在我们之前看来很复杂的程序设计。两百多行的程序内容很多,有的 地方也很复杂,尤其是一些细节问题,粗心地丢三落四,造成很多不必要的错误并且很难发 现,因此的确是对我毅力的一种考验。完成之后程序运行到第一次输入数据总是会停止,不 得不对 300 多行的程序进行单步调试, 再次解决了之前没有发现的问题之后, 发现编程需要 非常严谨的态度和足够的耐心, 否则就会因为一些问题而卡住甚至放弃。 当然在整个过程中, 同学帮助解决了许多自己没有意识到得错