#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]; int score; // 添加一个分数变量 }; struct employee emp[1000]; int main() { 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: 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; emp[i].score = 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,'%d ', emp[i].score); // 保存分数到文件 } 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]); } fscanf(fp, '%d', &emp[i].score); // 从文件读取分数 } 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; } printf(' 请输入该学生的分数:'); scanf('%d', &emp[n].score); // 让用户输入学生的分数 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.按联系电话查询 \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(' 非法操作! '); } 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; emp[i].score = 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 分数:%d ',emp[i].num,emp[i].name,emp[i].sex,emp[i].age,emp[i].tel,emp[i].score); if(emp[i].check_in_time[0]==0) { printf('尚未签到 '); } else { printf('签到时间:%s 分数:%d ',asctime(localtime(&emp[i].check_in_time[0])), emp[i].score); } if(emp[i].check_out_time[0]==0) { printf('尚未签退 '); } else { printf('签退时间:%s 分数:%d ',asctime(localtime(&emp[i].check_out_time[0])), emp[i].score); } printf('============================================================= '); } return;

C语言学生考勤系统:含签到、签退、信息查询、修改、删除、添加功能

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

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