#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define FILE_NAME "employee.txt"

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]; int score; int check_in_count; // 签到次数 int check_out_count; // 签退次数 };

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 emp[1000];

int main() { load();

int a;
while(1) 
{
    printf("================学生考勤系统================

"); printf(" \t1.录入学生信息 2.学生信息浏览 \n"); printf(" \t3.学生签到 4.学生签退
\n"); printf(" \t5.学生查询 6.信息修改和删除 \n"); 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: save(); exit(0); break; default: printf("\n非法操作! "); } system("pause"); system("cls"); } }

void input() { int i,j,k; printf("\n 欢迎进入录入学生信息 "); printf("============================================================= "); printf("\n输入要添加的学生人数:"); 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("\n"); emp[i].check_in_time[0]=0; emp[i].check_out_time[0]=0; emp[i].check_in_count = 0; emp[i].check_out_count = 0; } M+=j; save(); printf("\n\n 录入成功! "); system("pause"); }

void save() { FILE* fp; int i,j; fp=fopen(FILE_NAME,"w"); if(fp==NULL) { printf("\n文件打开失败! "); 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<emp[i].check_in_count;j++) { fprintf(fp,"%lld ",emp[i].check_in_time[j]); } fprintf(fp," "); for(j=0;j<emp[i].check_out_count;j++) { fprintf(fp,"%lld ",emp[i].check_out_time[j]); } fprintf(fp,"\n"); } fclose(fp); }

void load() { FILE* fp; int i,j; fp=fopen(FILE_NAME,"r"); if(fp==NULL) { printf("\n文件打开失败! "); 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); fscanf(fp," "); for(j=0;j<31;j++) { if(fscanf(fp,"%lld ",&emp[i].check_in_time[j]) != 1) { break; } emp[i].check_in_count++; } for(j=0;j<31;j++) { if(fscanf(fp,"%lld ",&emp[i].check_out_time[j]) != 1) { break; } emp[i].check_out_count++; } } fclose(fp); }

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

void check_in() { int n; printf("\n 欢迎进入学生签到 "); printf("============================================================= "); n=search_num(); if(n==-1) { printf("\n没有该学生! "); return; } if(emp[n].check_in_count == 31) { printf("\n该学生签到次数已达上限! "); return; } emp[n].check_in_time[emp[n].check_in_count] = time(NULL); emp[n].check_in_count++; printf("\n签到成功! "); save(); return; }

void check_out() { int n; printf("\n 欢迎进入学生签退 "); printf("============================================================= "); n=search_num(); if(n==-1) { printf("\n没有该学生! "); return; } if(emp[n].check_in_count == 0) { printf("\n该学生尚未签到! "); return; } if(emp[n].check_out_count == 31) { printf("\n该学生签退次数已达上限! "); return; } emp[n].check_out_time[emp[n].check_out_count] = time(NULL); emp[n].check_out_count++; printf("\n签退成功! "); save(); return; }

void search()//查询的主菜单 { int a; while(1) { printf("\n 欢迎进入学生信息查询 "); printf("============================================================= "); printf(" \t1.按学号查询 2.按姓名查询 3.按联系电话查询 \n"); 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("\n非法操作! "); } system("pause"); system("cls"); } }

int search_num()//按学号查询 { unsigned long k; int i; printf("\n请输入要查询的学生学号:"); scanf("%lu",&k); for(i=0;i<M;i++) { if(k==emp[i].num) { printf("\n"); 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_count == 0) { printf("尚未签到 "); } else { printf("签到时间:\n"); for(int j = 0; j < emp[i].check_in_count; j++) { printf("%s", asctime(localtime(&emp[i].check_in_time[j]))); } } if(emp[i].check_out_count == 0) { printf("尚未签退 "); } else { printf("签退时间:\n"); for(int j = 0; j < emp[i].check_out_count; j++) { printf("%s", asctime(localtime(&emp[i].check_out_time[j]))); } } printf("============================================================= "); return i; } } return -1; }

void search_name()//按姓名查询 { char k[20]; int i,j=0; printf("\n请输入要查询的学生姓名:"); scanf("%s",k); for(i=0;i<M;i++) { if(strcmp(k,emp[i].name)==0) { printf("\n"); 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_count == 0) { printf("尚未签到 "); } else { printf("签到时间:\n"); for(int j = 0; j < emp[i].check_in_count; j++) { printf("%s", asctime(localtime(&emp[i].check_in_time[j]))); } } if(emp[i].check_out_count == 0) { printf("尚未签退 "); } else { printf("签退时间:\n"); for(int j = 0; j < emp[i].check_out_count; j++) { printf("%s", asctime(localtime(&emp[i].check_out_time[j]))); } } printf("============================================================= "); j=1; } } if(j==0) { printf("\n没有该学生! "); } return; }

void search_dianhua()//按电话查询 { char k[12]; int i,j=0; printf("\n请输入要查询的学生联系电话:"); scanf("%s",k); for(i=0;i<M;i++) { if(strcmp(k,emp[i].tel)==0) { printf("\n"); 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_count == 0) { printf("尚未签到 "); } else { printf("签到时间:\n"); for(int j = 0; j < emp[i].check_in_count; j++) { printf("%s", asctime(localtime(&emp[i].check_in_time[j]))); } } if(emp[i].check_out_count == 0) { printf("尚未签退 "); } else { printf("签退时间:\n"); for(int j = 0; j < emp[i].check_out_count; j++) { printf("%s", asctime(localtime(&emp[i].check_out_time[j]))); } } printf("============================================================= "); j=1; } } if(j==0) { printf("\n没有该学生! "); } return; }

void xiugai() { int k,chose; printf("\n 欢迎进入学生信息修改和删除 "); printf("============================================================= "); k=search_num(); if(k==-1) { printf("\n没有该学生! "); return; } printf("\n请选择,输入1-2键:"); printf("\n \t1.修改 2.删除 "); scanf("%d",&chose); switch(chose) { case 1: revise(k); break; case 2: deletel(k); break; default: printf("\n非法操作! "); } return; } void revise(int k) { printf("\n请输入修改后的学生姓名:"); 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("\n修改成功! "); }

void deletel(int k) { int i; for(i=k;i<M-1;i++) { emp[i]=emp[i+1]; } M--; save(); printf("\n 删除成功! "); } void add() { int i,j; printf("\n 欢迎进入添加学生信息 "); printf("============================================================= "); printf("\n输入要添加的学生人数:"); 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("\n"); emp[i].check_in_time[0]=0; emp[i].check_out_time[0]=0; emp[i].check_in_count = 0; emp[i].check_out_count = 0; } M+=j; save(); printf("\n\n 添加成功! "); system("pause"); } void shuchu() { int i; printf("\n 欢迎进入学生信息浏览 "); printf("============================================================= "); if(M==0) { printf("\n暂无学生信息! "); return; } printf("\n当前学生信息如下:(共%d人) ",M); printf("============================================================= "); for(i=0;i<M;i++) { printf("学号:%lu 姓名:%s 性别:%c 年龄:%d 联系电话:%s 分数:%d ",emp[i].num,emp[i].name,emp[i].sex,emp[i].age,emp[i].tel,emp[i].score); if(emp[i].check_in_count == 0) { printf("尚未签到 "); } else { printf("签到时间:\n"); for(int j = 0; j < emp[i].check_in_count; j++) { printf("%s", asctime(localtime(&emp[i].check_in_time[j]))); } } if(emp[i].check_out_count == 0) { printf("尚未签退 "); } else { printf("签退时间:\n"); for(int j = 0; j < emp[i].check_out_count; j++) { printf("%s", asctime(localtime(&emp[i].check_out_time[j]))); } } printf("============================================================= "); } return; }

C语言学生考勤系统:实现多次考勤记录功能

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

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