C 语言实训报告
目录
C 语言程序设计实训报告.......................................................................错误!未定义书签。
1.实训题目与要求.....................................................................................................................2
2.系统设计..............................................................................................................................3
3.程序测试与运行结果.............................................................................................................5
4.实训总结.................................................................................................................................5
5.程序源代码.............................................................................................................................9
1
C 语言实训报告
1.实训题目与要求
学生证管理程序
题目描述:
请设计一个学生证管理的程序,以方便辅导员对学生证的管理,该程序应该具有以下功
能:
(1)能从键盘输入某位学生的学生证信息(学生证应该包含的信息可以参考自己的学生
证)。
(2)给定学号,显示该学生的学生证信息。
(3)给定班号,显示该班所有学生的学生证信息。
(4)给定学号,修改该学生的学生证信息。
(5)给定学号,删除该学生的学生证信息。
题目要求:
(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。
(2)学生证应该包含的信息参考自己的学生证。
(3)为程序设计 windows 窗口,在该窗口上以按钮的形式为用户提供“菜单”,通过点击
各个功能项对应的按钮完成操作。
输入要求:
(1)用户可以根据需求,选定相应的操作项目。进入每个操作后,通过窗口的文本框,
从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。
(2)能对输入的数据进行简单的校验,例如,学生的入学时间必须是一个合法的日期格
式,学号是唯一的(一个学号对应一条学生证信息)。
输出要求:
(1)应用程序运行后,要在屏幕上显示一个按钮形式的“菜单”。
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以
及结束方式等。
(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定学号删除学生证
信息时,如果该学生不存在,要提示没能删除,如果删除成功要提示删除成功。
实现要求:
(1)在程序中使用链表存储学生证信息。
(2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。
提示:
(1)使用结构体表示学生证信息,一个结点保存一条学生证信息。
扩展功能:
(1)提供一些统计功能。例如统计每个班学生的人数,统计男女生比例。
(2)学生证信息从文件读入。
(3)将学生证信息保存到文件中。
2
C 语言实训报告
2.系统设计
程序模块化设计:
导入到链表中,完成修改。
示导入失败。
一个指向该回调函数的指针。WindowProc 是用于应用程序定义函数的占位符。
等做合法性判断,判断合法后形成节点,导入链表中,最后导出到文件中,若不合法则提示
清晰、更易查错、代码更美观。
其中,修改并没有单独的函数,因为修改的本质是删除再添加,并且修改和删除中一定不变
在程序中实用WinMain(主函数)、WinProc(窗口函数)、add(添加函数)、delet(删
除函数)、input(导入函数)、find(查询函数)等函数实现程序模块化,使程序设计思路更
的都是学号,所以在修改学生信息完毕后,点击“修改”按钮,程序先执行delet 函数,程
序会将链表中包含此学号的节点删除;然后执行add 函数,将文本框中的信息形成节点并
WinMain: 1、创建注册窗口类
2、创建窗口句柄
3、显示更新窗口
4、消息循环
WinProc: 创建按钮和文本框,对发送给窗口的消息进行判断、处理。Winproc 类型定义了
add: 点击添加按钮后,首先读取文本框中的学生信息,再对学号、出生日期、入学日期
错误。delet:点击删除按钮后,首先获取文本框中的学号,放入字符串中。利用循环对节点进行
input:显示程序窗口后,首先输入文件名,点击导入,导入文件,若文件错误或不存在提
find:点击该按钮后,将根据班级或学号文本框中的信息查询整个班级或单个学生信息。
遍历,找到与该字符串匹配的节点后,使该节点的上一节点的指针指向该节点的下一节点,
从而实现对该节点的删除。最后将链表导出到文件中。
若是根据班级查询,首先将班级文本框的信息放入字符串中,对节点进行遍历,将找到与字
符串匹配的所有学生信息输出到大文本框中。
若是根据学号查询,首先将学号文本框中的信息放入字符串中,对接点进行遍历,找到与该
字符串匹配的学生信息,将学生信息一样对应输出到对应文本框中。
信息储存在文本中:
本程序实现了将学生信息存储在文件中,运行程序时文件中的信息会先导入到链表中,删除
和添加都先在链表中进行然后再导出到文件中。
框架设计:
五个菜单按钮在最上方,左边七个小文本框,在学号查询时用来显示单个学生成绩或根据单
个信息来查询学生完整信息,以及在添加和修改时键入学生信息。右边小文本框用来输入存
放学生证信息的文件名,大文本框用来显示提示信息和查询出来的整个班级信息。
3
流程图:
C 语言实训报告
导入文件
创建链表
查询
修改
删除
添加
导出文件
4
C 语言实训报告
3.程序测试与运行结果
文件导入
根据班级查询
5
C 语言实训报告
根据学号查询
根据学号删除
6
C 语言实训报告
修改学生信息(将“飒飒”改为“张飒”)
添加学生信息
7
C 语言实训报告
4.实训总结
通过本次实训我深刻体会到 C 语言的强大功能及其复杂性,此次实训不仅是对我们的一
次考验,更是我们的一次学习。在编写过程中我遇到了种种问题,非常棘手,甚至自己无法
解决,但通过询问老师、请教同学、翻阅书籍,一个一个解决这些问题。尽管艰难,但每天
都有收获,每天都有进展。
在最初设计程序的文本框、按钮时也遇到不少问题。例如:怎样设计才足够满足程序功
能?怎样设计才更人性化、美观且简洁明了?我意识到一个好的程序不仅仅在于代码,还在
于运行后窗口。在解决程序窗口及其文本框这些问题完后,开始着手于按钮功能的实现。
这也是程序设计最难、最核心的部分。要使程序设计思路更简洁明了,就要进行模块化设计,
那么就要使用到函数,逐步实现每一个按钮的功能。最先实现其功能的按钮必然是导入文件,
那么首先要定义结构体、结构体指针。将事先保存的学生信息读取之后、创建节点、导入链
表。这样才能实现程序的“查询”以及为后面按钮功能的实现打下基础。导入链表之后再设
计查询函数(通过学号查询或班级查询)。其次实现的是“添加”按钮,然后是“删除”按
钮,最后是“修改”按钮,因为修改其本质是删除和添加的结合,修改过程中不变的是学号,
而删除按钮也是根据学号,巧妙的利用删除和添加函数轻松实现修改功能,我觉得这是此
程序的一大亮点之一。本程序有严格的日期合法性验证,例如平年二月份天数不超过 28 天、
闰年不超过 29 天,大月天数不超过 31 天、小月不超过 30 天,以及大学生入学时年龄的合
法性(本程序将入学时年龄在 10 到 30 岁视为合法,其余为不合法)。
当然,由于本人能力有限,此程序也有诸多不足的地方,如程序窗口及其文本框设计仍
过于粗糙,还有不太人性化得地方,提示语过少等等。程序设计还有不合理的地方。在今后
的学习中我会慢慢领会 C 语言的精髓,我会保存好此程序,在后续学习中进一步改进。
本次实训我学习了很多,弄懂了许多上课过程中没有搞清的问题。领会到 C 语言的博大
精深,同时也意识到自己的不足,意识到还有很多东西需要去学习。
8