C语言学生考勤系统:含签到、签退、信息查询、修改、删除、添加功能
#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;
原文地址: https://www.cveoy.top/t/topic/oM26 著作权归作者所有。请勿转载和采集!