本系统使用 C语言 编写,实现学生信息录入、查询、签到、签退、修改、删除等功能,操作简单,功能完善,适合学校或机构进行学生考勤管理。

本次修改主要修复了以下问题:

  1. 修复了添加学生信息时,输入人数超过 1000 时程序异常退出的问题;
  2. 修复了按照姓名或联系电话查询学生信息时,输入不存在的姓名或联系电话时程序会输出'没有该学生'的问题;
  3. 修复了学生信息修改和删除时,输入不存在的学生学号时程序会输出'没有该学生'的问题;
  4. 修复了学生信息浏览时,没有学生信息时程序不输出任何内容的问题。

系统功能

  • 学生信息录入:可添加学生信息,包括姓名、学号、性别、年龄、联系电话等
  • 学生信息浏览:可查看所有学生信息,包括姓名、学号、性别、年龄、联系电话、签到时间、签退时间等
  • 学生签到:可记录学生签到时间
  • 学生签退:可记录学生签退时间
  • 学生查询:可按学号、姓名、联系电话查询学生信息
  • 信息修改和删除:可修改或删除学生信息
  • 添加学生信息:可添加新的学生信息

使用方法

  1. 运行程序,根据提示选择功能
  2. 输入相关信息,完成操作
  3. 系统会自动保存数据

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define FILE_NAME "employee.txt"

void save();
void load();
void input();
void check_in();
void check_out();
void search();
void search_name();
int search_num();
void search_dianhua();
void xiugai();
void add();
void shuchu();
void revise(int k);
void deletel(int k);
unsigned long suiji();

int M = 0;

struct employee //定义结构体 
{
    char name[20];
    unsigned long num;
    char sex;
    int age; 
    char tel[12];
    time_t check_in_time[31];
    time_t check_out_time[31];
};

struct employee emp[1000];

int main()
{
    int a;
    while(1) {
        printf("================学生考勤系统================
");
        printf(" \t1.录入学生信息        2.学生信息浏览

");
        printf(" \t3.学生签到            4.学生签退        

");
        printf(" \t5.学生查询            6.信息修改和删除

");
        printf(" \t7.添加学生信息        8.退出系统       
");
        printf("==========================================
");
        printf("          请选择,输入1-8键:");
        scanf("%d",&a);
        switch(a) {
            case 1:
                input();
                break;
            case 2:
                shuchu();
                break;
            case 3:
                check_in();
                break;
            case 4:
                check_out();
                break;
            case 5:
                search();
                break; 
            case 6:
                xiugai();
                break;
            case 7:
                add();
                break;
            case 8:
                exit(0);
                break;
            default:
                printf("
非法操作!
");
        }
        system("pause");
        system("cls");
    }
}

void input()
{
    int i,j,k;
    printf("
                        欢迎进入录入学生信息
");
    printf("=============================================================
");
    printf("
输入要添加的学生人数:");
    for(i=0;i<10;i++) 
	{
        scanf("%d",&j);
        if(j<1000) 
		{
            break;
        }
        printf("该系统只能存放1000人以内的信息,请重新输入
");
    }
    if(i==10) 
	{
        printf("输入的人数超过范围
");
        exit(0);
    }
    for(i=0;i<j;i++) {
        printf("输入第%d个学生的姓名:",i+1);
        scanf("%s",emp[i].name);
        printf("输入第%d个学生的性别(w/m):",i+1);
        getchar();
        scanf("%c",&emp[i].sex);
        printf("输入第%d个学生的年龄:",i+1);
        scanf("%d",&emp[i].age);
        getchar();
        printf("输入第%d个学生的联系电话:",i+1);
        scanf("%s",emp[i].tel);
        emp[i].num=suiji();
        printf("该学生的学号被系统定义为:%lu
",emp[i].num);
        printf("
");
        emp[i].check_in_time[0]=0;
        emp[i].check_out_time[0]=0;
    }
    M+=j;
    save();
    printf("

                        录入成功!
");
    system("pause");
}

void save()
{
    FILE* fp;
    int i,j;
    fp=fopen(FILE_NAME,"w");
    if(fp==NULL) 
	{
        printf("
文件打开失败!
");
        exit(0);
    }
    fprintf(fp,"%d
",M);
    for(i=0;i<M;i++) 
	{
        fprintf(fp,"%s %lu %c %d %s ",emp[i].name,emp[i].num,emp[i].sex,emp[i].age,emp[i].tel);
        for(j=0;j<31;j++) 
		{
            fprintf(fp,"%lld %lld ",emp[i].check_in_time[j],emp[i].check_out_time[j]);
        }
        fprintf(fp,"
");
    }
    fclose(fp);
}

void load()
{
    FILE* fp;
    int i,j;
    fp=fopen(FILE_NAME,"r");
    if(fp==NULL) {
        printf("
文件打开失败!
");
        return;
    }
    fscanf(fp,"%d",&M);
    for(i=0;i<M;i++) {
        fscanf(fp,"%s %lu %c %d %s ",emp[i].name,&emp[i].num,&emp[i].sex,&emp[i].age,emp[i].tel);
        for(j=0;j<31;j++) {
            fscanf(fp,"%lld %lld ",&emp[i].check_in_time[j],&emp[i].check_out_time[j]);
        }
    }
    fclose(fp);
}

unsigned long suiji()
{
    unsigned long h;
    srand(time(NULL));
    h=rand()%1000+2023000;
    return h;
}

void check_in()
{
    int n;
    printf("
                            欢迎进入学生签到
");
    printf("=============================================================
");
    n=search_num();
    if(n==-1) {
        printf("
没有该学生!
");
        return;
    }
    if(emp[n].check_in_time[0]!=0) {
        printf("
该学生已经签到!
");
        return;
    }
    emp[n].check_in_time[0]=time(NULL);
    printf("
签到成功!
");
    save();
    return;
}

void check_out()
{
    int n;
    printf("
                            欢迎进入学生签退
");
    printf("=============================================================
");
    n=search_num();
    if(n==-1) {
        printf("
没有该学生!
");
        return;
    }
    if(emp[n].check_in_time[0]==0) {
        printf("
该学生尚未签到!
");
        return;
    }
    if(emp[n].check_out_time[0]!=0) {
        printf("
该学生已经签退!
");
        return;
    }
    emp[n].check_out_time[0]=time(NULL);
    printf("
签退成功!
");
    save();
    return;
}

void search()//查询的主菜单 
{
    int a;
    while(1) {
        printf("
                     欢迎进入学生信息查询
");
        printf("=============================================================
");
        printf(" \t1.按学号查询   2.按姓名查询     3.按联系电话查询

");
        printf(" \t4.返回上一级   5.退出系统
");
        printf("=============================================================
");
        printf("              请选择,输入1-5键:");
        scanf("%d",&a);
        switch(a) {
            case 1:
                search_num();
                break;
            case 2:
                search_name();
                break;
            case 3:
                search_dianhua();
                break;
            case 4:
                return;
            case 5:
                exit(0);
                break;
            default:
                printf("
非法操作!
");
        }
        system("pause");
        system("cls");
    }
}

int search_num()//按学号查询 
{
    unsigned long k;
    int i;
    printf("
请输入要查询的学生学号:");
    scanf("%lu",&k);
    for(i=0;i<M;i++) {
        if(k==emp[i].num) {
            printf("
");
            printf("=============================================================
");
            printf("学号:%lu 姓名:%s 性别:%c 年龄:%d 联系电话:%s
",emp[i].num,emp[i].name,emp[i].sex,emp[i].age,emp[i].tel);
            if(emp[i].check_in_time[0]==0) {
                printf("尚未签到
");
            }
            else {
                printf("签到时间:%s",asctime(localtime(&emp[i].check_in_time[0])));
            }
            if(emp[i].check_out_time[0]==0) {
                printf("尚未签退
");
            }
            else {
                printf("签退时间:%s",asctime(localtime(&emp[i].check_out_time[0])));
            }
            printf("=============================================================
");
            return i;
        }
    }
    return -1;
}

void search_name()//按姓名查询 
{
    char k[20];
    int i,j=0;
    printf("
请输入要查询的学生姓名:");
    scanf("%s",k);
    for(i=0;i<M;i++) {
        if(strcmp(k,emp[i].name)==0) {
            printf("
");
            printf("=============================================================
");
            printf("学号:%lu 姓名:%s 性别:%c 年龄:%d 联系电话:%s
",emp[i].num,emp[i].name,emp[i].sex,emp[i].age,emp[i].tel);
            if(emp[i].check_in_time[0]==0) {
                printf("尚未签到
");
            }
            else {
                printf("签到时间:%s",asctime(localtime(&emp[i].check_in_time[0])));
            }
            if(emp[i].check_out_time[0]==0) {
                printf("尚未签退
");
            }
            else {
                printf("签退时间:%s",asctime(localtime(&emp[i].check_out_time[0])));
            }
            printf("=============================================================
");
            j=1;
        }
    }
    if(j==0) {
        printf("
没有该学生!
");
    }
    return;
}

void search_dianhua()//按电话查询 
{
    char k[12];
    int i,j=0;
    printf("
请输入要查询的学生联系电话:");
    scanf("%s",k);
    for(i=0;i<M;i++) {
        if(strcmp(k,emp[i].tel)==0) {
            printf("
");
            printf("=============================================================
");
            printf("学号:%lu 姓名:%s 性别:%c 年龄:%d 联系电话:%s
",emp[i].num,emp[i].name,emp[i].sex,emp[i].age,emp[i].tel);
            if(emp[i].check_in_time[0]==0) {
                printf("尚未签到
");
            }
            else {
                printf("签到时间:%s",asctime(localtime(&emp[i].check_in_time[0])));
            }
            if(emp[i].check_out_time[0]==0) {
                printf("尚未签退
");
            }
            else {
                printf("签退时间:%s",asctime(localtime(&emp[i].check_out_time[0])));
            }
            printf("=============================================================
");
            j=1;
        }
    }
    if(j==0) {
        printf("
没有该学生!
");
    }
    return;
}

void xiugai()
{
    int k,chose;
    printf("
                        欢迎进入学生信息修改和删除
");
    printf("=============================================================
");
    k=search_num();
    if(k==-1) {
        printf("
没有该学生!
");
        return;
    }
    printf("
请选择,输入1-2键:");
    printf("
 \t1.修改   2.删除
");
    scanf("%d",&chose);
    switch(chose) {
        case 1:
            revise(k);
            break;
        case 2:
            deletel(k);
            break;
        default:
            printf("
非法操作!
");
    }
    return;
}
void revise(int k)
{
    printf("
请输入修改后的学生姓名:");
    scanf("%s",&emp[k].name);
    getchar();
    printf("请输入修改后的学生性别(w/m):");
    scanf("%c",&emp[k].sex);
	getchar(); 
    printf("请输入修改后的学生年龄:");
    scanf("%d",&emp[k].age);
    getchar();
    printf("请输入修改后的学生联系电话:");
    scanf("%s",&emp[k].tel);
    save();
    printf("
修改成功!
");
}

void deletel(int k)
{
    int i;
    for(i=k;i<M-1;i++) 
	{
        emp[i]=emp[i+1];
    }
    M--;
    save();
    printf("
  删除成功!
");
}
void add()
{
    int i,j;
    printf("
                        欢迎进入添加学生信息
");
    printf("=============================================================
");
    printf("
输入要添加的学生人数:");
    for(i=0;i<10;i++) 
	{
        scanf("%d",&j);
        if(M+j<=1000) 
		{
            break;
        }
        printf("该系统只能存放1000人以内的信息,还能添加%d人,请重新输入添加人数
",1000-M);
    }
    if(i==10) {
        printf("可添加人数为%d
",1000-M);
        return;
    }
    for(i=M;i<M+j;i++) {
        printf("输入第%d个学生的姓名:",i+1);
        scanf("%s",emp[i].name);
        printf("输入第%d个学生的性别(w/m):",i+1);
        getchar();
        scanf("%c",&emp[i].sex);
        printf("输入第%d个学生的年龄:",i+1);
        scanf("%d",&emp[i].age);
        getchar();
        printf("输入第%d个学生的联系电话:",i+1);
        scanf("%s",emp[i].tel);
        emp[i].num=suiji();
        printf("
");
        emp[i].check_in_time[0]=0;
        emp[i].check_out_time[0]=0;
    }
    M+=j;
    save();
    printf("

                            添加成功!
");
    system("pause");
}
void shuchu()
{
    int i;
    printf("
                       欢迎进入学生信息浏览
");
    printf("=============================================================
");
    if(M==0) 
	{
        printf("
暂无学生信息!
");
        return;
    }
    printf("
当前学生信息如下:(共%d人)
",M);
    printf("=============================================================
");
    for(i=0;i<M;i++) {
        printf("学号:%lu 姓名:%s 性别:%c 年龄:%d 联系电话:%s
",emp[i].num,emp[i].name,emp[i].sex,emp[i].age,emp[i].tel);
        if(emp[i].check_in_time[0]==0) 
		{
            printf("尚未签到
");
        }
        else 
		{
            printf("签到时间:%s",asctime(localtime(&emp[i].check_in_time[0])));
        }
        if(emp[i].check_out_time[0]==0) 
		{
            printf("尚未签退
");
        }
        else 
		{
            printf("签退时间:%s",asctime(localtime(&emp[i].check_out_time[0])));
        }
        printf("=============================================================
");
    }
    return;
}
C语言学生考勤系统 - 功能完善,操作便捷

原文地址: https://www.cveoy.top/t/topic/oM2I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录