相关推荐recommended
【C语言】学生考勤管理系统
作者:mmseoamin日期:2024-03-04

✅作者简介:一名在读大二学生,希望大家多多支持👍👍👍

🔥系列专栏:C语言

💬个人主页:梦园的CSDN博客

【C语言】学生考勤管理系统,请添加图片描述,第1张

学生考勤管理系统

    • 1 问题描述
    • 2 功能要求
    • 3 模块代码
      • 主界面
      • 录入系统
      • 输出系统
      • 删除系统
      • 修改系统
      • 查询系统
      • 添加系统
      • 排序系统
      • 数据统计
      • 4 系统全部代码
      • 结束语🥇

        1 问题描述

        要求实现一个简单、实用的学生考勤系统程序,主要功能包括考勤数据的输入、输出、删除、修改、查询、添加、排序、数据统计等。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法的应用。

        2 功能要求

        代码要能提供以下几个基本功能。

        (1)考勤数据是由多条数据记录构成,其信息包括:姓名、年龄、学号、班级、打卡时间、打卡次数等等。

        (2)需要实现的功能

        a 新增学生信息数据.

        b 查找数据

        c 修改学生记录

        d 删除学生记录

        e 显示学生考勤数据列表

        f 排序(可按学号、姓名升序、打卡次数降序等排序)。

        g 数据统计

        (3)界面功能要求:

        1. 采用友好的界面,实现一个功能控制菜单。
        2. 每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。

          备注

          (1)数据完整性保证。

          (2)要求报表格式灵活、形式多样、内容清楚,具体请学生自己构思、设计。

        3 模块代码

        主界面

        运行结果如下:

        【C语言】学生考勤管理系统,在这里插入图片描述,第2张

        ✅代码如下:

        void PrintfStudentFunction()
        {
            printf("-------------------------------------------------\n");
            printf("-----------------学生管理系统--------------------\n");
            printf("-----------------1.录入学生信息------------------\n");
            printf("-----------------2.输出学生信息------------------\n");
            printf("-----------------3.删除学生信息------------------\n");
            printf("-----------------4.修改学生信息------------------\n");
            printf("-----------------5.查询学生信息------------------\n");
            printf("-----------------6.添加学生信息------------------\n");
            printf("-----------------7.排序(姓名、学号、打卡次数)--\n");
            printf("-----------------8.考勤数据统计------------------\n");
            printf("-----------------9.退出系统------o( ̄ヘ ̄o#)----\n");
        }
        

        录入系统

        运行结果如下:

        【C语言】学生考勤管理系统,在这里插入图片描述,第3张

        【C语言】学生考勤管理系统,在这里插入图片描述,第4张

        ✅代码来咯~

        struct Student *Input(struct Student *pArr, int len)
        {
            //录入学生信息
            count = len;
            //开辟存储空间
            pArr = (struct Student *)malloc(sizeof(struct Student) * len);
            for (int i = 0; i < len; i++)
            {
                //当前学生人数+1
                numCount++;
                printf("请输入第%d个学生的名字:\n", i + 1);
                scanf("%s", pArr[i].name);
                printf("请输入第%d个学生的年龄\n", i + 1);
                scanf("%d", &pArr[i].age);
                printf("请输入第%d个学生的学号\n", i + 1);
                scanf("%d", &pArr[i].num);
                printf("请输入第%d个学生的班级\n",i+1);
        		scanf("%d",&pArr[i].c);
        		printf("请输入第%d个学生的打卡时间\n", i + 1);
                scanf("%f", &pArr[i].date);
        		printf("请输入第%d个同学的打卡次数\n",i+1);
        		scanf("%d",&pArr[i].num1);
            }
        	printf("学生信息录入完毕!!!!!!!\n");
            system("cls");
            PrintfStudentFunction();
            return pArr;
        }
        

        输出系统

        【C语言】学生考勤管理系统,在这里插入图片描述,第5张

        运行结果:

        【C语言】学生考勤管理系统,在这里插入图片描述,第6张

        ✅代码来啦~

        //输出学生信息
        void Output(struct Student *pArr)
        {
            printf("姓名\t年龄\t学号\t班级\t打卡时间\t打卡次数\n");
            for (int i = 0; i < numCount; i++)
            {
                printf("%s\t%d\t%d\t%d\t%.2f\t%10d\n", pArr[i].name, pArr[i].age, pArr[i].num,
                       pArr[i].c,pArr[i].date, pArr[i].num1);
            }
            PrintfStudentFunction();
        }
        

        删除系统

        运行结果:

        【C语言】学生考勤管理系统,在这里插入图片描述,第7张

        ✅代码来啦~

        //删除信息
        void Delete(struct Student *PArr)
        {
            char name[25];
            int num;
            printf("请输入你要删除数据的名字\n");
            scanf("%s", name);
            for (int i = 0; i < numCount; i++)
            {
                if (strcmp(PArr[i].name, name) == 0)
                {
                    num = i;
                    break;
                }
            }
            //num = 1;
            for (int i = num; i < numCount - 1; i++)
            {
                PArr[i] = PArr[i + 1];
            }
            numCount--;
            Output(PArr);
        }
        

        修改系统

        运行结果:

        【C语言】学生考勤管理系统,在这里插入图片描述,第8张

        ✅代码来咯~

        //修改学生信息
        void Change(struct Student *PArr)
        {
            char name[25];
            printf("请输入你要修改学生的名字:\n");
            scanf("%s", name);
            int num = 0;
            int i = 0;
            for (i = 0; i < numCount; i++)
            {
                if (strcmp(PArr[i].name, name) == 0)
                {
                    num = i;
                    break;
                }
            }
            if (num == i)
            {
                printf("请输入学生的名字:\n");
                scanf("%s", PArr[num].name);
                printf("请输入学生的年龄:\n");
                scanf("%d", &PArr[num].age);
                printf("请输入学生的学号:\n");
                scanf("%d", &PArr[num].num);
                printf("请输入学生的班级\n");
                scanf("%f", &PArr[num].c);
                printf("请输入学生的打卡时间\n");
                scanf("%f", &PArr[num].date);
                printf("请输入学生的打卡次数\n");
                scanf("%f", &PArr[num].num1);
               
            }
            else
            {
                printf("对不起没有要修改的学生信息");
            }
            PrintfStudentFunction();
        }
        

        查询系统

        运行结果:

        【C语言】学生考勤管理系统,在这里插入图片描述,第9张

        ✅代码来嘞!

        //查找信息
        void Search(struct Student *pArr)
        {
            printf("请输入要查找学生的名字\n");
            char name[25];
            scanf("%s", name);
            int num;
            int i;
            for (i = 0; i < numCount; i++)
            {
                if (strcmp(pArr[i].name, name) == 0)
                {
                    printf("%s\t%d\t%d\t%d\t%f\t%d\n",pArr[i].name, pArr[i].age, pArr[i].num,pArr[i].c,pArr[i].date, pArr[i].num1);
                    break;
                }
            }
            if (i == numCount)
            {
                printf("对不起没有你要查找的数据\n");
            }
            PrintfStudentFunction();
        }
        

        添加系统

        运行结果如下:

        【C语言】学生考勤管理系统,在这里插入图片描述,第10张

        ✅代码来啦:

        //添加学生信息
        struct Student *Add(struct Student *PArr)
        {
            printf("请输入要添加的人数\n");
            int num;
            scanf("%d", &num);
            if (numCount + num > count)
            {
                struct Student *p = NULL;
                p = PArr;
                PArr = (struct Student *)malloc(sizeof(struct Student) * (numCount + num));
                count = numCount + num;
                for (int i = 0; i < numCount; i++)
                {
                    PArr[i] = p[i];
                }
            }
            for (int i = 0; i < num; i++)
            {
                printf("请输入第%d个添加学生的名字:\n", i + 1);
                scanf("%s", PArr[numCount].name);
                printf("请输入第%d个添加学生的年龄:\n", i + 1);
                scanf("%d", &PArr[numCount].age);
                printf("请输入第%d个添加学生的学号:\n", i + 1);
                scanf("%d", &PArr[numCount].num);
                printf("请输入第%d个添加学生的班级:\n", i + 1);
                scanf("%f", &PArr[numCount].c);
                printf("请输入第%d个添加学生的打卡时间:\n", i + 1);
                scanf("%f", &PArr[numCount].date);
                printf("请输入第%d个添加学生的打卡次数:\n", i + 1);
                scanf("%f", &PArr[numCount].num1);
                numCount++;
            }
            printf("数据添加成功");
            PrintfStudentFunction();
            return PArr;
        }
        

        排序系统

        【C语言】学生考勤管理系统,在这里插入图片描述,第11张

        运行结果:

        【C语言】学生考勤管理系统,请添加图片描述,第12张

        ✅代码来咯~

        void Order(struct Student *PArr)
        {
        int op;
        struct Student temp;
        printf("<1>学号升序  <2>姓名升序  <3>打卡次数降序\n");
        scanf("%d",&op);
        if(op==1)
        {
        //将学生信息按学号排序
           for(int i=0;iPArr[j+1].num)
        	   {temp=PArr[j];
        	   PArr[j]=PArr[j+1];
        	   PArr[j+1]=temp;}
           }
           }
        }
        //将学生信息按姓名排序
        else
        	if(op==2)
        	{
        void StudentNameAsc(struct Student *PArr);
        {
           struct Student temp;
           for(int i=0;iPArr[j+1].name[0])
        	   {
        	   temp=PArr[j];
        	   PArr[j]=PArr[j+1];
        	   PArr[j+1]=temp;
        	   }
               }
           }
           }
           
        }
        //将学生信息按打卡次数排序
        	else
        {
           struct Student temp;
           for(int i=0;i 
        

        数据统计

        【C语言】学生考勤管理系统,在这里插入图片描述,第13张

        ✅代码来啦~

        //数据统计
        void studentsta(struct Student *PArr)
        {
         printf("请输入应打卡次数:\n");
            int num2;
            scanf("%d", &num2);
        	for(int i=0;iPArr[i].num1)
        	printf("%s没有打卡%d次\n", PArr[i].name,num2-PArr[i].num1);
        	  
        	}
        	Output(PArr);
        }
        

        4 系统全部代码

        #include 
        #include 
        #include 
        //定义一个学生类型的结构体
        struct Student
        {
            char name[25];  //名字
            int age;        //年龄
            int num;        //学号
            int c;         //班级
            float date;      //日期 
            int num1;       //打卡次数
        };
        void PrintfStudentFunction();
        //学生的人数
        int numCount = 0;
        //申请空间的容量
        int count = 0;
        //得到学生人数
        int Num();
        //定义一个输入函数 用来输入学生的信息
        struct Student *Input(struct Student *pArr, int len);
        //输出信息方法
        void Output(struct Student *pArr);
        //删除信息
        void Delete(struct Student *PArr);
        //查找信息
        void Search(struct Student *PArr);
        //修改学生信息
        void Change(struct Student *PArr);
        //添加学生信息
        struct Student *Add(struct Student *PArr);
        //排序
        void Order(struct Student * PArr);
        //统计学生数据
        void studentsta(struct Student *PArr);
        int main()
        {
            struct Student *pArr = NULL;
            struct Student *P = NULL;
        	printf("============================================\n");
            printf("============================================\n");
            printf("============================================\n");
            printf("**************欢迎来到考勤系统**************\n");
            printf("============================================\n"); 
            printf("============================================\n");
            printf("============================================\n");
        	printf("....请按任意键进入考勤系统  <( ̄︶ ̄)↗[GO!]\n");
            getchar();
            system("cls");
            PrintfStudentFunction();
            while (1)
            {
                printf("请选择操作的命令:\n");
                int item, num;
                scanf("%d", &item);
                switch (item)
                {
                case 1:
                    //录入信息
                    {
                        system("cls");
                        num = Num();
                        P = Input(pArr, num);
                    }
                    break;
                case 2:
                    //输出学生信息
                    {
                        system("cls");
                        Output(P);
                    }
                    break;
                case 3:
                    //删除学生信息
                    {
                        system("cls");
                        Delete(P);
                    }
                    break;
                case 4:
                    //修改学生信息
                    {
                        system("cls");
                        Change(P);
                    }
                    break;
                case 5:
                    //查询学生信息
                    {
                        system("cls");
                        Search(P);
                    }
                    break;
                case 6:
                    //添加学生信息
                    {
                        system("cls");
                        P = Add(P);
                    }
                    break;
        		case 7:
        			//排序
        			{
        			    system("cls");
        				Order(P);
        			}
        			break;
        		//数据统计
        		case 8:
        			{
        			system("cls");
        			studentsta(P);
        			}break;
                 case 9:
                    //退出系统
                    {
                        //程序结束
                        system("cls");
                        exit(0);
                    }
                    break;
                default:
                    printf("用户输入错误,请重新输入\n");
                    break;
                }
            }
            return 1;
        }
        void PrintfStudentFunction()
        {
            printf("-------------------------------------------------\n");
            printf("-----------------学生管理系统--------------------\n");
            printf("-----------------1.录入学生信息------------------\n");
            printf("-----------------2.输出学生信息------------------\n");
            printf("-----------------3.删除学生信息------------------\n");
            printf("-----------------4.修改学生信息------------------\n");
            printf("-----------------5.查询学生信息------------------\n");
            printf("-----------------6.添加学生信息------------------\n");
            printf("-----------------7.排序(姓名、学号、打卡次数)--\n");
            printf("-----------------8.考勤数据统计------------------\n");
            printf("-----------------9.退出系统------o( ̄ヘ ̄o#)----\n");
        }
        //得到学生人数
        int Num()
        {
            int num;
            printf("请输入要录入学生的人数\n");
            scanf("%d", &num);
            return num;
        }
        struct Student *Input(struct Student *pArr, int len)
        {
            //录入学生信息
            count = len;
            //开辟存储空间
            pArr = (struct Student *)malloc(sizeof(struct Student) * len);
            for (int i = 0; i < len; i++)
            {
                //当前学生人数+1
                numCount++;
                printf("请输入第%d个学生的名字:\n", i + 1);
                scanf("%s", pArr[i].name);
                printf("请输入第%d个学生的年龄\n", i + 1);
                scanf("%d", &pArr[i].age);
                printf("请输入第%d个学生的学号\n", i + 1);
                scanf("%d", &pArr[i].num);
                printf("请输入第%d个学生的班级\n",i+1);
        		scanf("%d",&pArr[i].c);
        		printf("请输入第%d个学生的打卡时间\n", i + 1);
                scanf("%f", &pArr[i].date);
        		printf("请输入第%d个同学的打卡次数\n",i+1);
        		scanf("%d",&pArr[i].num1);
            }
        	printf("学生信息录入完毕!!!!!!!\n");
            system("cls");
            PrintfStudentFunction();
            return pArr;
        }
        //输出学生信息
        void Output(struct Student *pArr)
        {
            printf("姓名\t年龄\t学号\t班级\t打卡时间\t打卡次数\n");
            for (int i = 0; i < numCount; i++)
            {
                printf("%s\t%d\t%d\t%d\t%.2f\t%10d\n", pArr[i].name, pArr[i].age, pArr[i].num,
                       pArr[i].c,pArr[i].date, pArr[i].num1);
            }
            PrintfStudentFunction();
        }
        //删除信息
        void Delete(struct Student *PArr)
        {
            char name[25];
            int num;
            printf("请输入你要删除数据的名字\n");
            scanf("%s", name);
            for (int i = 0; i < numCount; i++)
            {
                if (strcmp(PArr[i].name, name) == 0)
                {
                    num = i;
                    break;
                }
            }
            //num = 1;
            for (int i = num; i < numCount - 1; i++)
            {
                PArr[i] = PArr[i + 1];
            }
            numCount--;
            Output(PArr);
        }
        //查找信息
        void Search(struct Student *pArr)
        {
            printf("请输入要查找学生的名字\n");
            char name[25];
            scanf("%s", name);
            int num;
            int i;
            for (i = 0; i < numCount; i++)
            {
                if (strcmp(pArr[i].name, name) == 0)
                {
                    printf("%s\t%d\t%d\t%d\t%f\t%d\n",pArr[i].name, pArr[i].age, pArr[i].num,pArr[i].c,pArr[i].date, pArr[i].num1);
                    break;
                }
            }
            if (i == numCount)
            {
                printf("对不起没有你要查找的数据\n");
            }
            PrintfStudentFunction();
        }
        //修改学生信息
        void Change(struct Student *PArr)
        {
            char name[25];
            printf("请输入你要修改学生的名字:\n");
            scanf("%s", name);
            int num = 0;
            int i = 0;
            for (i = 0; i < numCount; i++)
            {
                if (strcmp(PArr[i].name, name) == 0)
                {
                    num = i;
                    break;
                }
            }
            if (num == i)
            {
                printf("请输入学生的名字:\n");
                scanf("%s", PArr[num].name);
                printf("请输入学生的年龄:\n");
                scanf("%d", &PArr[num].age);
                printf("请输入学生的学号:\n");
                scanf("%d", &PArr[num].num);
                printf("请输入学生的班级\n");
                scanf("%f", &PArr[num].c);
                printf("请输入学生的打卡时间\n");
                scanf("%f", &PArr[num].date);
                printf("请输入学生的打卡次数\n");
                scanf("%f", &PArr[num].num1);
               
            }
            else
            {
                printf("对不起没有要修改的学生信息");
            }
            PrintfStudentFunction();
        }
        //添加学生信息
        struct Student *Add(struct Student *PArr)
        {
            printf("请输入要添加的人数\n");
            int num;
            scanf("%d", &num);
            if (numCount + num > count)
            {
                struct Student *p = NULL;
                p = PArr;
                PArr = (struct Student *)malloc(sizeof(struct Student) * (numCount + num));
                count = numCount + num;
                for (int i = 0; i < numCount; i++)
                {
                    PArr[i] = p[i];
                }
            }
            for (int i = 0; i < num; i++)
            {
                printf("请输入第%d个添加学生的名字:\n", i + 1);
                scanf("%s", PArr[numCount].name);
                printf("请输入第%d个添加学生的年龄:\n", i + 1);
                scanf("%d", &PArr[numCount].age);
                printf("请输入第%d个添加学生的学号:\n", i + 1);
                scanf("%d", &PArr[numCount].num);
                printf("请输入第%d个添加学生的班级:\n", i + 1);
                scanf("%f", &PArr[numCount].c);
                printf("请输入第%d个添加学生的打卡时间:\n", i + 1);
                scanf("%f", &PArr[numCount].date);
                printf("请输入第%d个添加学生的打卡次数:\n", i + 1);
                scanf("%f", &PArr[numCount].num1);
                numCount++;
            }
            printf("数据添加成功");
            PrintfStudentFunction();
            return PArr;
        }
        void Order(struct Student *PArr)
        {
        int op;
        struct Student temp;
        printf("<1>学号升序  <2>姓名升序  <3>打卡次数降序\n");
        scanf("%d",&op);
        if(op==1)
        {
        //将学生信息按学号排序
           for(int i=0;iPArr[j+1].num)
        	   {temp=PArr[j];
        	   PArr[j]=PArr[j+1];
        	   PArr[j+1]=temp;}
           }
           }
        }
        //将学生信息按姓名排序
        else
        	if(op==2)
        	{
        void StudentNameAsc(struct Student *PArr);
        {
           struct Student temp;
           for(int i=0;iPArr[j+1].name[0])
        	   {
        	   temp=PArr[j];
        	   PArr[j]=PArr[j+1];
        	   PArr[j+1]=temp;
        	   }
               }
           }
           }
        }
        //将学生信息按打卡次数排序
        	else
        {
           struct Student temp;
           for(int i=0;iPArr[i].num1)
        	printf("%s没有打卡%d次\n", PArr[i].name,num2-PArr[i].num1);
        	  
        	}
        	Output(PArr);
        }
        

        结束语🥇

        以上就是用C制作学生考勤管理系统

        大家的支持就是我创作的动力💖💖💖

        【C语言】学生考勤管理系统,在这里插入图片描述,第14张