✅作者简介:一位CSDN万粉博主的小娇妻,一名在读大二学生,希望大家多多支持
系列专栏:C语言
个人主页:梦园的CSDN博客

学生考勤管理系统

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

1 问题描述

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

2 功能要求

代码要能提供以下几个基本功能。
(1)考勤数据是由多条数据记录构成,其信息包括:姓名、年龄、学号、班级、打卡时间、打卡次数等等。
(2)需要实现的功能
a 新增学生信息数据.
b 查找数据
c 修改学生记录
d 删除学生记录
e 显示学生考勤数据列表
f 排序(可按学号、姓名升序、打卡次数降序等排序)。
g 数据统计
(3)界面功能要求:

  1. 采用友好的界面,实现一个功能控制菜单。
  2. 每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。
    备注
    (1)数据完整性保证。
    (2)要求报表格式灵活、形式多样、内容清楚,具体请学生自己构思、设计。

3 模块代码

主界面

运行结果如下:

✅代码如下:

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");}

录入系统

运行结果如下:


✅代码来咯~

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 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();}

查询系统

运行结果:

✅代码来嘞!

//查找信息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();}

添加系统

运行结果如下:

✅代码来啦:

//添加学生信息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("学号升序  姓名升序  打卡次数降序\n");scanf("%d",&op);if(op==1){//将学生信息按学号排序   for(int i=0;i<numCount-1;i++)   {   for(int j=0;jPArr[j+1].num)   {temp=PArr[j];   PArr[j]=PArr[j+1];   PArr[j+1]=temp;}   }   }}//将学生信息按姓名排序elseif(op==2){void StudentNameAsc(struct Student *PArr);{   struct Student temp;   for(int i=0;i<numCount-1;i++)   {   for(int j=0;jPArr[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<numCount-1;i++)   {   for(int j=0;j<numCount-i-1;j++)   {    if(PArr[j].num1<PArr[j+1].num1)   {   temp=PArr[j];   PArr[j]=PArr[j+1];   PArr[j+1]=temp;   }       }   }}Output(PArr);}

数据统计


✅代码来啦~

//数据统计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  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("学号升序  姓名升序  打卡次数降序\n");scanf("%d",&op);if(op==1){//将学生信息按学号排序   for(int i=0;i<numCount-1;i++)   {   for(int j=0;jPArr[j+1].num)   {temp=PArr[j];   PArr[j]=PArr[j+1];   PArr[j+1]=temp;}   }   }}//将学生信息按姓名排序elseif(op==2){void StudentNameAsc(struct Student *PArr);{   struct Student temp;   for(int i=0;i<numCount-1;i++)   {   for(int j=0;jPArr[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<numCount-1;i++)   {   for(int j=0;j<numCount-i-1;j++)   {    if(PArr[j].num1<PArr[j+1].num1)   {   temp=PArr[j];   PArr[j]=PArr[j+1];   PArr[j+1]=temp;   }       }   }}Output(PArr);}//数据统计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);}

结束语

以上就是用C制作学生考勤管理系统
大家的支持就是我创作的动力