大学生考勤系统C语言--升级版

要求:

人狠话不多,直接上代码(以下代码只展示部分,如需完整版代码,请私信联系我):

#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;
}

展示效果(功能太多,只展示部分):
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nuhao_

谢谢你打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值