要求:
人狠话不多,直接上代码(以下代码只展示部分,如需完整版代码,请私信联系我):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h> // 添加头文件以使用布尔类型
//定义一个学生类型的结构体
struct Student
{
char name[25]; //名字
int age; //年龄
int num; //学号
int c; //班级
float date; //日期
char Attandance_Result[25]; //考勤结果
};
// 输出学生管理系统功能菜单
void PrintfStudentFunction();
//学生的人数,表示当前已经存在的学生数量。它的初始值设置为0,每次添加新的学生时会增加。
int numCount = 0;
//申请空间的容量,后续在通过用户要输入几个学生的个数len 来决定大小,初始值设置为0
//(如果 count 的初始值设置为0,则表示一开始没有为学生结构体数组分配任何内存空间。
//在这种情况下,当用户输入要添加的学生数量 num 大于0时,会进入重新分配内存空间的逻辑。
//也就是说,程序会使用 malloc 函数动态分配大小为 num 的学生结构体数组所需的内存空间,并将这块内存空间的起始地址赋给 PArr。
//接下来,会将用户输入的学生信息存储在这个新分配的内存空间中,并更新 numCount 和 count 的值。
//需要注意的是,在这种情况下,当添加第一个学生时,会将 PArr 指针指向新分配的内存空间。而后续添加的学生仍然会在这个已经分配好的内存空间中存储。
//总结起来,如果将 count 的初始值设置为0,表示一开始没有为学生结构体数组分配内存空间,并且会根据用户输入的学生数量动态分配所需的内存空间。)
int count = 0;
//得到学生人数
int Num();
// 输入学生信息,并将其存储在结构体数组中
struct Student *Input(int *len);
// 输出学生信息
void Output(struct Student *pArr, int len);
// 删除学生信息
void Delete(struct Student *pArr, int *len);
// 查找学生信息
void Search(struct Student *PArr,int len);
// 修改学生信息
void Change(struct Student *pArr, int len);
// 排序学生信息
void Order(struct Student *pArr,int len);
// 将学生信息保存到文件
void SaveToFile(struct Student *pArr, int len);
// 从文件中加载学生信息
struct Student *LoadFromFile(int *len);
// 检查学号是否已存在
bool isNumExist(struct Student *pArr, int len, int num);
// 检查学号是否重复
int isDuplicate(struct Student *pArr, int len, int newNum);
//统计学生考勤信息
void studentsta(struct Student *pArr, int len);
int i,j; // 用于循环的计数器
int len; // 学生数组的长度
int num; // 临时变量
struct Student *pArr = NULL; // 指向学生结构体数组的指针
struct Student *P= NULL; // 临时指针,用于在函数间传递学生结构体数组
int main()
{
//(定义了一个 struct Student 类型的指针 pArr,以及一个整型参数 len。函数的返回类型也是 struct Student*。
PrintfStudentFunction();
while (1)
{
printf("请选择操作的命令:\n");
int item, num;
scanf("%d", &item);
switch (item)
{
case 1:
//录入信息
{
P = Input(&len);
}
break;
case 2:
//输出学生信息
{
// 从文件中读取学生信息并打印
P = LoadFromFile(&len);
printf("从文件中读取的学生信息如下:\n");
Output(P, len);
}
break;
case 3:
//删除学生信息
{
P = LoadFromFile(&len);
Delete(P,&len);
}
break;
case 4:
//修改学生信息
{
P = LoadFromFile(&len);
Change(P,len);
}
break;
case 5:
//查询学生信息
{
P = LoadFromFile(&len);
Search(P,len);
}
break;
case 6:
//排序
{
P=LoadFromFile(&len);
Order(P,len);
}
break;
case 7:
//统计
{
P=LoadFromFile(&len);
studentsta(P, len);
}
break;
case 8:
//退出系统
{
//程序结束
printf("成功退出!");
exit(0);
}
break;
default:
printf("用户输入错误,请重新输入\n");
break;
}
}
return 1;
}