学生证管理系统—C语言课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生证管理系统
1.题目与要求
该系统应该具有下列功能:
1)录入某位学生的学生证信息。
2)给定学号,显示某位学生的学生证信息。
3)给定某个班级的班号,显示该班所有学生的学生证信息。
4)给定某位学生的学号,修改该学生的学生证信息。
5)给定某位学生的学号,删除该学生的学生证信息。
6)提供一些统计各类信息的功能。
【输入要求】
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
【输出要求】
1)应用程序运行后,要在屏幕上显示一个菜单。
2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
2.功能实现设计
2.1总体设计:
根据题目要求,由于要设计学生证的管理系统,所以学生证信息中应该包含学号、姓名、性别、班号等信息。除此之外,还要做到先录入,再输出,即如果使用者还没有录入任何学生证信息就不能做任何输出。由于学生信息要不断更改,所以还要设定修改、增加、删除、查找功能。另外,学生数量多而繁,故应设置不同类别的统计功能,供使用者方便使用。
综上所述,可将该程序分为:主函数、菜单显示模块、菜单提示模块、学生证信息生成模块、添加学生证信息模块、学生证信息显示模块、学生证信息修改模块、学生证信息删除模块、计算所有学生人数模块、计算各班人数模块。
2.2详细设计:
1)主函数
主函数一般设计比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其流程图如下图所示:
开始
菜单显示函数显示一系列功能
进入main函
数体,选择n
Y
根据n的值调用个功能模块
函数
结束
【程序】
2)各功能模块设计
1.结构体
2.输入模块
从主函数送进来的n=1,进入struct create,在struct create中通过链表开辟一个长度为student结构体的连续动态空间。接着在此函数中通过*p1这个指针调用void tips_create(struct student *p)函数来提示用户录入学生证各项信息。录入完毕后*p1再从void tips_create(struct student *p)函数中跳回struct create中,将其值赋给*p2,这样保存*p2到开辟的内存单元中即可。具体流程图如下图所示:
n=1,调用struct student * create(void)
p1、p2在内存中开辟一段长度
提示输入学生证信息,调用void tips_create(struct
student *p)函数来完成引导用户的信息录入
void tips_create(struct student *p)返回*p1,*p1再
将值赋给*p2,保存在动态存储单元中
【程序】
注意:如果输入完毕,要在各项输入时键入0以示。
3.学生证信息添加模块
该模块的功能主要用于录入完学生证信息后,发现漏录入了信息或学生变动需要添加学生信息用。
【程序】
4.输出模块
输出模块主要功能有:输出出所有学生的学生证信息、给定学号后输出某位学生的学生证信息和给定班号后输出该班所有学生的学生证信息三大功能。
首先,通过main函数得到选择结果(3、4或5),如果选择3则赋值给print函数一个num=0,继而进入第一个分模块——输出所有学生的学生证信息;如果选择4则赋值给print函数一个num=1,继而进入第二个分模块——给定学号后输出某位学生的学生证信息;如果选择5则赋值给print函数一个num=2,继而进入第三个分模块——给定班号后输出该班所有学生的学生证信息。
【程序】
该程序流程图如下图所示:
第一分模块流程图如下图所示:开始
读入main传过来的int num
Num=?
0?1?2?
第一分模块第二分模块第三分模块
其他各分模流程图与上图类似,这里不多述。
5. 修改模块
修改模块是用于给定某位学生的学号,修改该学生的学生证信息。
具体过程:读取学号,在链表中找到相对应的结构单元,用新输入的学生信息替换原有信息。 【程序】
开始
读取n 的值,确定用户是否已录入任何学生证信息
n=0?
提示用户录入学生证信息,并返回至菜单选择
P=head 指向链表的头
通过p 指针输出链表个项值
结束
6.删除模块
删除模块用于给定某位学生的学号,删除该学生的学生证信息。具体过程与修改模块相似。【程序】
7.统计模块
1)总人数统计模块
【程序】
2)各班人数统计模块
【程序】
该程序具体操作操作如下:
1)判断n的值,若n=0,表明用户还未录入任何学生证信息,提示用户录入学生证信息,并跳
至菜单处供用户重新选择。若n不为0,则进入下面的程序。
2)将指针*p指向链表的头(head),验证head是否为空(NULL)。
3)先将*p读到student结构体里的class赋值给二维数组的[0][0]位置,进入for循环,如
果*p读到的class值和二维数组[0][0]位置的值相同,则学生人数(该二维数组所对应的第二列)自加一次;若不同,则跳出if语句,进行二维数组i++(行加1),再进入if语句来比较。当for循环完毕跳出时指针p指向next单元,由此再回到此段开头进行do…while 循环。直至指针p指向的next为空结束。
4)输出记录着班级和各班人数的二维[20][2]的数组,得到统计结果。
具体流程图如下图所示: