【C语言期末/课程设计】学生证管理程序(vc2010项目)

代写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():

  1. 创建一个新的学生节点 newStudent,并为其分配内存。
  2. 如果内存分配失败,则打印错误信息并退出程序。
  3. 提示用户输入学生的姓名、性别、学号、入学日期、所属学院和所属班级,并将输入的信息保存到新节点的相应字段中。
  4. 使用 isUniqueNumber 函数验证学号的唯一性,如果学号已经存在于链表中,则要求用户重新输入学号,直到输入一个唯一的学号。
  5. 使用 isValidDate 函数验证输入的日期格式是否正确,如果格式不正确,则要求用户重新输入日期,直到输入一个正确的日期格式。
  6. 将新节点的 next 指针设置为 NULL
  7. 如果链表为空(即 head 指针为 NULL),则将新节点设置为链表的头节点。
  8. 如果链表不为空,则遍历链表,找到链表的末尾节点,然后将新节点添加到末尾节点的后面。
  9. 打印添加成功的提示信息。

2.个人查询 find():

  1. 创建一个指向链表头部的指针 current,并初始化为 head
  2. 提示用户输入要查找的学号,并将输入的学号保存到 number 数组中。
  3. 遍历链表,直到 current 指针为空:
    • 检查当前节点的学号是否与用户输入的学号相匹配:
      • 如果匹配,则打印找到的学生信息,包括姓名、性别、学号、入学日期、所属学院和所属班级,然后返回函数。
      • 如果不匹配,则将 current 指针移动到下一个节点。
  4. 如果遍历完链表仍未找到匹配的学生信息,则打印未找到学生信息的提示信息。

3.班级查询 findClass():

  1. 创建一个指向链表头部的指针 current,并初始化为 head
  2. 提示用户输入要查找的班级,并将输入的班级名称保存到 banji 数组中。
  3. 初始化一个标志变量 flag 为0,用于判断是否存在符合条件的学生信息。
  4. 遍历链表,直到 current 指针为空:
    • 检查当前节点的班级名称是否与用户输入的班级名称相匹配:
      • 如果匹配,则打印找到的学生信息,包括姓名、性别、学号、入学日期、所属学院和所属班级,并将 flag 设为1。
      • 如果不匹配,则继续遍历下一个节点。
  5. 如果存在符合条件的学生信息(即 flag 为1),则打印分隔线和学生信息;如果不存在,则打印未找到学生信息的提示信息。

4.修改信息 changedata():

  1. 创建一个指向链表头部下一个节点的指针 current,并初始化为 head->next,因为头节点不存储具体的学生信息。
  2. 提示用户输入要修改信息的学生学号,并将输入的学号保存到 number 数组中。
  3. 提示用户选择要修改的操作,包括修改姓名、性别、入学日期、所属学院和所属班级,用户根据相应的操作编号进行选择。
  4. 遍历链表,直到 current 指针为空:
    • 检查当前节点的学号是否与用户输入的学号相匹配:
      • 如果匹配,则根据用户选择的操作编号进行相应的操作,修改对应的学生信息,并打印修改成功的提示信息。
      • 如果不匹配,则继续遍历下一个节点。
  5. 如果找到匹配的学生信息并成功修改,则直接返回函数,结束操作。
  6. 如果遍历完链表仍未找到匹配的学生信息,则打印未找到学生信息的提示信息,表示无法进行修改。

5.删除学生 deldata():

  1. 创建一个指向链表头部的指针 current,并初始化为 head
  2. 创建一个指向当前节点前一个节点的指针 prev,并初始化为 NULL,用于在删除节点时重新连接链表。
  3. 提示用户输入要删除的学生学号,并将输入的学号保存到 number 数组中。
  4. 遍历链表,直到 current 指针指向链表的最后一个节点(即 current->nextNULL):
    • 检查当前节点的下一个节点的学号是否与用户输入的学号相匹配:
      • 如果匹配,则将要删除的节点从链表中移除,即将当前节点的 next 指针指向要删除节点的下一个节点,然后释放要删除节点的内存空间,并打印删除成功的提示信息,然后返回函数。
      • 如果不匹配,则将 prev 指针指向当前节点,将 current 指针移动到下一个节点。
  5. 如果遍历完链表仍未找到匹配的学生信息,则打印未找到学生信息的提示信息,表示无法删除该学生信息。

6.统计各班人数 sortClass():

主要函数sortClass():

  1. 声明一个 ClassInfo 结构体数组 classInfo 和一个整数变量 len
  2. 调用 getClassInfo 函数获取链表中所有不重复的班级到 classInfo 数组中,并更新 len
  3. 调用 printClassInfo 函数,遍历 classInfo 数组,打印每个班级的名称和对应的人数。

辅助函数getClassInfo():

  1. 创建一个指向链表头部的指针 current,并初始化为 head
  2. 初始化一个计数变量 len,用于记录不重复的班级数量,初始值为0。
  3. 遍历链表,直到 current 指针为空:
    • 检查当前节点的班级名称是否已存在于 classInfo 中:
      • 如果不存在,则将该班级名称添加到 classInfo 数组中,并将对应的人数设置为1,然后增加 len 的值。
      • 如果已存在,则在 classInfo 数组中找到该班级名称的索引,并增加对应的人数计数。
  4. 遍历完链表后, classInfo 数组中存储了所有不重复的班级名称和对应的人数。

7.统计男女性别 sortSex():

  1. 创建一个指向链表头部的指针 current,并初始化为 head
  2. 初始化两个变量 maleCountfemaleCount,分别用于统计男性和女性的人数,初始值都为0。
  3. 遍历链表,直到 current 指针为空:
    • 检查当前节点的性别:
      • 如果是男性,则增加 maleCount 的值。
      • 如果是女性,则增加 femaleCount 的值。
  4. 遍历完链表后, maleCount 存储了男性的人数, femaleCount 存储了女性的人数。
  5. 使用 printf 函数打印男女人数的对应关系,格式为性别和对应的人数。

↓如有任何问题,请加下方QQ↓

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辰代写

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值