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