C语言课程设计报告
——学生成绩简单管理程序
一、程序的主要功能
用单向链表结构实现简单的学生成绩管理功能,要求具有链表建立、链表输出、结点有序插入、节电删除、数据查询等功能。
各项菜单功能:
(1)Creat List(建立有序单向链表)
从键盘上一次输入一个学生的姓名和成绩,以姓名为序建立有序链表。插入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否着推出输入功能。
(2)Display All Record(显示所有结点记录)
按顺序显示链表中所有记录,每屏显示10条记录。每显示10条,按键继续显示下一屏。
(3)Insert a Record(插入一条结点记录)
在以姓名为序排列的链表中插入一条记录,插入后,链表仍然有序。输出成功信息。
(4)Delete a Record(按姓名查找,删除一条结点记录)
输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除。确认后,将该姓名的记录删除。
` (5) Query(查找并显示一个结点记录)
输入姓名,查找该记录,并显示该学生成绩。
(6)Add Records from a Text File (从正文文件添加数据到链表中)
用户可提前建立一个正文文件data.txt,存放多个带加入的记录。提示输入正文的文件名,然后从该文件中一次性加入多条学生记录。文件data.txt格式如下:
2 /*表示带添加的记录数*/
WangXiao 95 /*下面每行为姓名和成绩*/
LiuLin 87
(7)Write to a Text File
将链表中的全部记录写入文件records.txt,要求文件格式和data.txt相同。
新增菜单功能:
(8)Reverse List
将链表中的所有结点逆序存放。
(9) Delete the Same Record
删除相同姓名的记录。
(0)Quit
退出系统并释放链表存储空间。
二、主要问题及解决方法:
在写程序中遇到的问题是:开始时无法正确完成“确认后再继续”的问题再后来写附加程序对链表逆序有些疑惑。面对遇到的问题我先自己认真耐心的修改,严格按照老师说的各个功能分步测试方法,解决了其中的大多数问题,对遗留下来的以和同学交流探讨与问老师相结合的方式来达到彻底的解决。
心得体会:
完成之后程序运行到一半会停止,不得不对300多行的程序进行单步调试,解决了很多问题之后,发现编程需要非常严谨的态度和足够的耐心,否则就会因为一些问题而卡住甚至放弃。当然在整个过程中,同学帮助解决了许多自己没有意识到得错误,换一个角度,才能发现问题吧。
三、源程序及注释:
#include /*库函数调用*/
#include
#include
#include
#include
struct stud /*定义一个结构体类型struct stud*/
{
char name[20];
float score;
struct stud *next;
};
typedef struct stud Student; /*用Student替代struct stud*/
int menu_select(); /*全体函数的外部申明*/
Student *Create();
void Display(Student *);
Student *Insert(Student *,Student *);
Student *Insert_a_Record(Student *);
Student *Delete(Student *,char *);
Student *Delete_a_Record(Student *);
Student *Query(Student *,char *);
void Query_a_record(Student *);
Student *AddfromText(Student *,char *);
void WritetoText(Student *,char *);
void Quit(Student *);
Student *Reverse(Student *);
Student *DeleteSame(Student*);
int n; /*定义一个全局变量*/
main()
{
Student *head=NULL ;
char filename[20]; /*定义一个字符数组*/
while (1)
{
swi