代写C语言、C++、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业,
长期接单,信誉有保证,标价10-20每份,如有需要请加文章最下方QQ。
本文资源:https://download.csdn.net/download/weixin_47040861/88971523
1.题目要求
题目描述:
请设计一个学生证管理的程序,以方便辅导员对学生证的管理,该程序应该具有以下功能:
(1)能从键盘输入某位学生的学生证信息(学生证应该包含的信息可以参考自己的学生证)。
(2)给定学号,显示该学生的学生证信息。
(3)给定班号,显示该班所有学生的学生证信息。
(4)给定学号,修改该学生的学生证信息。
(5)给定学号,删除该学生的学生证信息。
题目要求:
(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。
(2)学生证应该包含的信息参考自己的学生证。
(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
扩展功能:
(1)提供一些统计功能。例如统计每个班学生的人数,统计男女生比例。
(2)学生证信息从文件读入。
(3)将学生证信息保存到文件中。
2.视频演示
【C语言期末/课程设计】学生证管理程序(vc2010项目)
3.使用流程
结构体和公共变量:
typedef struct data//定义包含学生证信息的结构体
{
char name[ 10 ];//姓名
char sex[ 5 ];//性别
char number[50];//学号
char date[50];//入学时间
char xueyuan[ 50 ];//所属学院
char banji[ 50 ];//所属班级
struct data *next;//连接下一个结构体
}STUDENT;
// 结构体存储班级和人数
typedef struct {
char className[50];
int count;
} ClassInfo;
主函数:
首先调用get()函数初始化链表头并赋值给*head,然后调用display()函数打印菜单,根据用户输入的操作编号调用对应的功能函数并清空屏幕,操作完成后调用set()函数将数据保存到当前项目中的"Student.csv"文件中
int main()
{
STUDENT *head = get();// 初始化链表头
char choice;//定义变量存储选项
int flag=1;//定义变量确定循环
while( flag )
{
display();
printf("请输入操作编号:");
choice = getch();//读取用户操作选项
system("cls");
switch( choice)//根据选项调用对应函数
{
case '1' : add(head); break;
case '2' : find(head); break;
case '3' : findClass(head); break;
case '4' : changedata(head); break;
case '5' : deldata(head); break;
case '6' : sortClass(head); break;
case '7' : sortSex(head); break;
case '0' : flag=0; break;
default : break;
}
system("pause");
set(head);//每次执行操作后将数据存储到文件中
}
// 释放链表内存
freeList(head);
return 0;
}
1.添加学生 add():
- 创建一个新的学生节点
newStudent
,并为其分配内存。 - 如果内存分配失败,则打印错误信息并退出程序。
- 提示用户输入学生的姓名、性别、学号、入学日期、所属学院和所属班级,并将输入的信息保存到新节点的相应字段中。
- 使用
isUniqueNumber
函数验证学号的唯一性,如果学号已经存在于链表中,则要求用户重新输入学号,直到输入一个唯一的学号。 - 使用
isValidDate
函数验证输入的日期格式是否正确,如果格式不正确,则要求用户重新输入日期,直到输入一个正确的日期格式。 - 将新节点的
next
指针设置为NULL
。 - 如果链表为空(即
head
指针为NULL
),则将新节点设置为链表的头节点。 - 如果链表不为空,则遍历链表,找到链表的末尾节点,然后将新节点添加到末尾节点的后面。
- 打印添加成功的提示信息。
2.个人查询 find():
- 创建一个指向链表头部的指针
current
,并初始化为head
。 - 提示用户输入要查找的学号,并将输入的学号保存到
number
数组中。 - 遍历链表,直到
current
指针为空:- 检查当前节点的学号是否与用户输入的学号相匹配:
- 如果匹配,则打印找到的学生信息,包括姓名、性别、学号、入学日期、所属学院和所属班级,然后返回函数。
- 如果不匹配,则将
current
指针移动到下一个节点。
- 检查当前节点的学号是否与用户输入的学号相匹配:
- 如果遍历完链表仍未找到匹配的学生信息,则打印未找到学生信息的提示信息。
3.班级查询 findClass():
- 创建一个指向链表头部的指针
current
,并初始化为head
。 - 提示用户输入要查找的班级,并将输入的班级名称保存到
banji
数组中。 - 初始化一个标志变量
flag
为0,用于判断是否存在符合条件的学生信息。 - 遍历链表,直到
current
指针为空:- 检查当前节点的班级名称是否与用户输入的班级名称相匹配:
- 如果匹配,则打印找到的学生信息,包括姓名、性别、学号、入学日期、所属学院和所属班级,并将
flag
设为1。 - 如果不匹配,则继续遍历下一个节点。
- 如果匹配,则打印找到的学生信息,包括姓名、性别、学号、入学日期、所属学院和所属班级,并将
- 检查当前节点的班级名称是否与用户输入的班级名称相匹配:
- 如果存在符合条件的学生信息(即
flag
为1),则打印分隔线和学生信息;如果不存在,则打印未找到学生信息的提示信息。
4.修改信息 changedata():
- 创建一个指向链表头部下一个节点的指针
current
,并初始化为head->next
,因为头节点不存储具体的学生信息。 - 提示用户输入要修改信息的学生学号,并将输入的学号保存到
number
数组中。 - 提示用户选择要修改的操作,包括修改姓名、性别、入学日期、所属学院和所属班级,用户根据相应的操作编号进行选择。
- 遍历链表,直到
current
指针为空:- 检查当前节点的学号是否与用户输入的学号相匹配:
- 如果匹配,则根据用户选择的操作编号进行相应的操作,修改对应的学生信息,并打印修改成功的提示信息。
- 如果不匹配,则继续遍历下一个节点。
- 检查当前节点的学号是否与用户输入的学号相匹配:
- 如果找到匹配的学生信息并成功修改,则直接返回函数,结束操作。
- 如果遍历完链表仍未找到匹配的学生信息,则打印未找到学生信息的提示信息,表示无法进行修改。
5.删除学生 deldata():
- 创建一个指向链表头部的指针
current
,并初始化为head
。 - 创建一个指向当前节点前一个节点的指针
prev
,并初始化为NULL
,用于在删除节点时重新连接链表。 - 提示用户输入要删除的学生学号,并将输入的学号保存到
number
数组中。 - 遍历链表,直到
current
指针指向链表的最后一个节点(即current->next
为NULL
):- 检查当前节点的下一个节点的学号是否与用户输入的学号相匹配:
- 如果匹配,则将要删除的节点从链表中移除,即将当前节点的
next
指针指向要删除节点的下一个节点,然后释放要删除节点的内存空间,并打印删除成功的提示信息,然后返回函数。 - 如果不匹配,则将
prev
指针指向当前节点,将current
指针移动到下一个节点。
- 如果匹配,则将要删除的节点从链表中移除,即将当前节点的
- 检查当前节点的下一个节点的学号是否与用户输入的学号相匹配:
- 如果遍历完链表仍未找到匹配的学生信息,则打印未找到学生信息的提示信息,表示无法删除该学生信息。
6.统计各班人数 sortClass():
主要函数sortClass():
- 声明一个
ClassInfo
结构体数组classInfo
和一个整数变量len
。 - 调用
getClassInfo
函数获取链表中所有不重复的班级到classInfo
数组中,并更新len
。 - 调用
printClassInfo
函数,遍历classInfo
数组,打印每个班级的名称和对应的人数。
辅助函数getClassInfo():
- 创建一个指向链表头部的指针
current
,并初始化为head
。 - 初始化一个计数变量
len
,用于记录不重复的班级数量,初始值为0。 - 遍历链表,直到
current
指针为空:- 检查当前节点的班级名称是否已存在于
classInfo
中:- 如果不存在,则将该班级名称添加到
classInfo
数组中,并将对应的人数设置为1,然后增加len
的值。 - 如果已存在,则在
classInfo
数组中找到该班级名称的索引,并增加对应的人数计数。
- 如果不存在,则将该班级名称添加到
- 检查当前节点的班级名称是否已存在于
- 遍历完链表后,
classInfo
数组中存储了所有不重复的班级名称和对应的人数。
7.统计男女性别 sortSex():
- 创建一个指向链表头部的指针
current
,并初始化为head
。 - 初始化两个变量
maleCount
和femaleCount
,分别用于统计男性和女性的人数,初始值都为0。 - 遍历链表,直到
current
指针为空:- 检查当前节点的性别:
- 如果是男性,则增加
maleCount
的值。 - 如果是女性,则增加
femaleCount
的值。
- 如果是男性,则增加
- 检查当前节点的性别:
- 遍历完链表后,
maleCount
存储了男性的人数,femaleCount
存储了女性的人数。 - 使用
printf
函数打印男女人数的对应关系,格式为性别和对应的人数。
↓如有任何问题,请加下方QQ↓