C语言之学生考勤管理系统

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include<stdbool.h>

 

typedef struct Student

{

    int id;

    char name[20];

    char attendance[4][10]; // 出勤、迟到、早退、缺席

    struct Student* next;

} Student;

 

typedef struct Class 

{

    int class_id;

    char category[20];

    int student_count;

    Student* students;

    char monitor[20];

    char other_leaders[20][20];

} Class;

 

// 增加学生信息

void add_student(Class* class, int id, char* name)

{

    Student* new_student = (Student*)malloc(sizeof(Student));

    new_student->id = id;

    strcpy(new_student->name, name);

    new_student->next = NULL;

 

    if (class->students == NULL)

    {

        class->students = new_student;

    }

    else 

    {

        Student* temp = class->students;

        while (temp->next != NULL) //temp 是 0x7FF

        {

            temp = temp->next;

        }

        temp->next = new_student;

    }

    class->student_count++;

}

 

// 删除学生信息

void delete_student(Class* class, int id)

{

    Student* temp = class->students;

    Student* prev = NULL;

 

    while (temp != NULL)

    {

        if (temp->id == id)

        {

            if (prev == NULL) 

            {

                class->students = temp->next;

            }

            else

            {

                prev->next = temp->next;

            }

            free(temp);

            class->student_count--;

            return;

        }

        prev = temp;

        temp = temp->next;

    }

}

 

// 修改学生信息

void update_student(Class* class, int id, char* new_name)

{

    Student* temp = class->students;

 

    while (temp != NULL) 

    {

        if (temp->id == id) 

        {

            strcpy(temp->name, new_name);

            return;

        }

        temp = temp->next;

    }

}

 

// 考勤

void attend(Class* class, int id, char* status) 

{

    Student* temp = class->students;

 

    while (temp != NULL)

    {

        if (temp->id == id)

        {

            strcpy(temp->attendance[0], status);

            return;

        }

        temp = temp->next;

    }

}

 

// 按班级、学号、类别查询

void query(Class* class, int id, char* category)

{

    int i;

    for (i = 0; i < class->student_count; i++) 

    {

        if (class->students[i].id == id && strcmp(class->category, category) == 0)

        {

            printf("学号: %d, 姓名: %s, 出勤: %s, 迟到: %s, 早退: %s, 缺席: %s\n", class->students[i].id, class->students[i].name, class->students[i].attendance[0], class->students[i].attendance[1], class->students[i].attendance[2], class->students[i].attendance[3]);

            break;

        }

    }

}

void scanf_student(Class* class)

{

    int n;

    printf("请输入学生数量:");

    scanf("%d", &n);

 

    for (int i = 0; i < n; i++) 

    {

        int id;

        char name[20] ="";

        printf("请输入第%d个学生的学号和姓名:", i + 1);

        int i = scanf("%d %s", &id, name);

        add_student(&class, id, name);

    }

 

    int m;

    printf("请输入考勤记录数量:");

    scanf("%d", &m);

 

    for (int i = 0; i < m; i++) 

    {

        int id;

        char status[10];

        printf("请输入第%d条考勤记录的学号和出勤状态:", i + 1);

        scanf("%d %s", &id, status);

        attend(&class, id, status);

    }

 

    int q;

    printf("请输入查询次数:");

    scanf("%d", &q);

 

    for (int i = 0; i < q; i++)

    {

        int id;

        printf("请输入要查询的学生学号:");

        scanf("%d", &id);

        query(&class, id, "研究生班");

    }

}

int main() {

   

    Class class;

    strcpy(class.category, "研究生班");

    class.student_count = 0;

    class.students = NULL;

 

    char new_name[20] = "";

    char status[20] = "";

    char category[20] = "";

    int id = 0;

 

    int choice;

    while (true)

    {

        printf("**********************\n");

        printf("*******系统菜单*******\n");

        printf("**********************\n");

        printf("* 1.添加 *\n");

        printf("* 2.删除 *\n");

        printf("* 3.修改 *\n");

        printf("* 4.考勤 *\n");

        printf("* 0.退出 *\n");

        printf("**********************\n");

        printf("5.按班级、学号、类别查询\n");

        printf("请输入您在【0,5】之内的选择:");

        int result = scanf("%d", &choice);

       

        switch (choice)

        {

            case 1:

                //添加操作

                scanf_student(&class);

                break; 

            case 2:

                //删除操作

                printf("请输入要删除的学生学号:");

                scanf("%d", &id);

                delete_student(&class, id);

                break; 

            case 3:

                //修改操作

                printf("请输入要修改的学生学号和新姓名:");

                scanf("%d %s", &id, new_name);

                update_student(&class, id, new_name);

                break;

            case 4:

                //考勤操作

                printf("请输入要考勤的学生学号和出勤状态(出勤、迟到、早退、缺席):");

                scanf("%d %s", &id, status);

                attend(&class, id, status);

                break; 

            case 5:

                // 按班级、学号、类别查询

                printf("请输入要查询的学生学号:");

                scanf("%d", &id);

                query(&class, id, category);

                break; 

            case 0:

                //退出程序

                return 0;

            default:

                //已输入其他数字

                printf("\n");

                printf("无效的选择,请您重新选择!!!");

                printf("\n");

                break;

        }

    }

    return 0;

}

  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值