C语言学生考勤系统 - 功能完善,操作便捷
本系统使用 C语言 编写,实现学生信息录入、查询、签到、签退、修改、删除等功能,操作简单,功能完善,适合学校或机构进行学生考勤管理。
本次修改主要修复了以下问题:
- 修复了添加学生信息时,输入人数超过 1000 时程序异常退出的问题;
- 修复了按照姓名或联系电话查询学生信息时,输入不存在的姓名或联系电话时程序会输出'没有该学生'的问题;
- 修复了学生信息修改和删除时,输入不存在的学生学号时程序会输出'没有该学生'的问题;
- 修复了学生信息浏览时,没有学生信息时程序不输出任何内容的问题。
系统功能
- 学生信息录入:可添加学生信息,包括姓名、学号、性别、年龄、联系电话等
- 学生信息浏览:可查看所有学生信息,包括姓名、学号、性别、年龄、联系电话、签到时间、签退时间等
- 学生签到:可记录学生签到时间
- 学生签退:可记录学生签退时间
- 学生查询:可按学号、姓名、联系电话查询学生信息
- 信息修改和删除:可修改或删除学生信息
- 添加学生信息:可添加新的学生信息
使用方法
- 运行程序,根据提示选择功能
- 输入相关信息,完成操作
- 系统会自动保存数据
代码
#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;
}
原文地址: https://www.cveoy.top/t/topic/oM2I 著作权归作者所有。请勿转载和采集!