实验室考勤系统设计报告.docx
《实验室考勤系统设计报告.docx》由会员分享,可在线阅读,更多相关《实验室考勤系统设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
![实验室考勤系统设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/12/582aa3d4-ba2b-492b-934b-5d44f59fdfad/582aa3d4-ba2b-492b-934b-5d44f59fdfad1.gif)
实验室考勤系统设计报告
实验室考勤系统设计报告
题目:
某高校实验室学生考勤情况管理,需要先存储学生的基本信息,内容包括
学号、姓名、班级、进入时间、退出时间、出勤次数、迟到早退次数。
其中学号唯一不能重复。
具体要求:
∙主界面:
实现可视化,让用户能方便快捷的使用此程序。
∙显示功能:
能显示当前内存中所有的数据。
∙查询功能:
能按照用户所使用的条件查询所需数据。
∙添加功能:
根据实验室人员的增添情况添加。
∙更改功能:
根据查询对相应的记录进行修改并记录。
∙删除功能:
视情况删除数据。
∙保存功能:
把学生信息写入文件夹。
∙读取功能:
从文件夹中读取学生信息。
主要框图:
分析:
显然我们要编辑存储人员的信息自然要运用到文件!
而人员的信息必须要以结构体的形式来表示才能够方便我们提取信息!
在运用文件夹时我们需要对文件夹进行读取和保存,所以我们需要有读取和保存功能。
为了使设计可视化,我们首先要做一个可视界面,进入界面后需要选择功能程序,这将在main()程序中对各个功能模块进行调用。
当有需要时被调函数还可以调用其他的函数!
很显然需要用switch语句比较简洁方便。
解题思路:
∙定义结构体
structstudent
{
intId;//学号
charname[15];//学生姓名
intcl;//学生班级
chardate1[14];//入实验室时间
chardate2[14];//出实验室时间
intnum;//出勤次数
ints;//迟到早退次数
}temp,student[100];//预定义一百个学生和一个临时变量
∙主程序(进入主菜单并对功能进行选择)
voidmain(void)
{
load_main();//进入主菜单
while
(1)
{
scanf("%c",&in);
switch(in)
{
case'3':
{
system("CLS");
add_message();
puts("***************************回主菜单请按回车键*********************************");
getchar();//接收add_message()结束的回车键
getchar();//接收任意键结束
system("CLS");
load_main();
break;
}
case'1':
{
system("CLS");
puts("****************************全部员工信息如下**********************************");
display();
puts("***************************回主菜单请按回车键*********************************");
getchar();//接收p结束时敲下的回车键
getchar();//接收任意键结束
system("CLS");
load_main();
break;
}
case'2':
{
system("CLS");
chek_one();
puts("***************************回主菜单请按回车键*********************************");
getchar();//接收chek_one()结束的回车键
getchar();//接收任意键结束
system("CLS");
load_main();
break;
}
case'4':
{
system("CLS");
change();
puts("***************************回主菜单请按回车键键*********************************");
getchar();//接收change()结束的回车键
getchar();//接收任意键结束
system("CLS");
load_main();
break;
}
case'5':
{
system("CLS");
delete_messa();
puts("***************************回主菜单请按回车键*********************************");
getchar();//接收delete_messa()结束的回车键
getchar();//接收任意键结束
system("CLS");
开始
load_main();
break;
}
显示一系列功能选项
case'6':
{
exit();
}
根据x的值调用各功能模块函数
}
}
}
结束
∙增加人员信息
voidadd_message()
{
charrecv='y';
count=read_num();//count就是已经存在的学生数量
read_data();//还应该从数据库读取数据信息
puts("请输入学生信息:
学号姓名班级进入时间退出时间出勤次数迟到早退次数\n");
scanf("%d%s%d%s%s%d%d",&student[count].Id,&student[count].name,&student[count].cl,&student[count].date1,&student[count].date2,&student[count].num,&student[count].s);
getchar();//用来接收回车键的哈
puts("是否保存该学生信息?
");
scanf("%c",&recv);
if(recv=='Y')
{
count++;//已存学生数量
wn.worknum=count;
save_data(student);//传参整个结构体数组
write_num();//同时应该保存学生个数
puts("文件成功保存!
");
}
else
{
puts("警告:
没有保存该学生信息!
");
}
}
开voidadd_message()
{
charrecv='y';
count=read_num();//count就是已经存在的学生数量
read_data();//还应该从数据库读取数据信息
puts("请输入学生信息:
学号姓名班级进入时间退出时间出勤次数迟到早退次数\n");
scanf("%d%s%d%s%s%d%d",&student[count].Id,&student[count].name,&student[count].cl,&student[count].date1,&student[count].date2,&student[count].num,&student[count].s);
getchar();//用来接收回车键的哈
puts("是否保存该学生信息?
");
scanf("%c",&recv);
if(recv=='Y')
{
count++;//已存学生数量
wn.worknum=count;
save_data(student);//传参整个结构体数组
write_num();//同时应该保存学生个数
puts("文件成功保存!
");
}
else
{
puts("警告:
没有保存该学生信息!
");
}
}始
输入信息
保存信息
结束
∙删除
voiddelete_messa()//学生编号从1开始编辑,存在0号单元如果参数为0表示删除所有信息
{
FILE*fp;
intnum;
puts("**********************请输入你要删除的学生编号*************************");
scanf("%d",&num);
count=read_num();
if(num>count)
{
puts("对不起,你要删除的学生信息不存在!
");
exit(0);
}
else
{
if(num==0)
{
fp=fopen("data.dat","wb");
fclose(fp);
fp=fopen("num.dat","wb");
fclose(fp);
}
else
{
read_data();
for(inti=num-1;i{
student[i]=student[i+1];
}
count--;
wn.worknum=count;
write_num();
save_data(student);
}
}
}
∙查询
voidchek_one()
{
FILE*fp;
intnum;
puts("***************************请输入要查寻人员的学号*****************************");
scanf("%d",&num);
count=read_num();
if(num>count)
{
puts("你输入的学号有误!
");
exit(0);
}
else
{
fp=fopen("data.dat","rb");
if(fp==NULL)
{
printf("打开文件出错!
");
exit(0);
}
num--;
puts("学号姓名班级进入时间退出时间出勤次数迟到早退次数\n");
fseek(fp,num*sizeof(structstudent),0);
fread(&temp,sizeof(structstudent),1,fp);
printf("%4d%14s%4d%14s%10s%10s%16s\n",temp.Id,temp.name,temp.cl,temp.date1,temp.date2,temp.num,temp.s);
}
}
∙显示
voiddisplay()
{
puts("学号姓名班级进入时间退出时间出勤次数迟到早退次数\n");
count=read_num();
read_data();
for(inti=0;i{
printf("%4d%14s%4d%11s%11s%12d%12d%\n",student[i].Id,student[i].name,student[i].cl,student[i].date1,student[i].date2,student[i].num,student[i].s);
}
puts("\n");
}
∙更改
voidchange()
{
intnum,flag;
puts("**********************请输入你要更改的学生的学号、更改学号***********************");
puts("***********更改编号说明:
出勤次数(5)、迟到早退次数(6)***********");
scanf("%d%d",&num,&flag);
count=read_num();
if(num>count||num==0)
{
puts("对不起,你要更改的学生信息不存在!
");
exit(0);
}
else
{
if(flag==5||flag==6||flag==7)
{
read_data();
puts("请输入更改的内容:
");
if(flag==5)
{
scanf("%s",&student[num-1].date2);
}
elseif(flag==6)
{
scanf("%s",&student[num-1].num);
}
else
{
scanf("%s",&student[num-1].s);
}
save_data(student);
}
}
}
∙保存
voidsave_data(structstudent[])
{
FILE*fp;
fp=fopen("data.dat","wb");
if(fp==NULL)
{
printf("打开文件出错!
");
exit(0);
}
for(inti=0;i{
if(fwrite(&student[i],sizeof(structstudent),1,fp)!
=1)
{
puts("存入文件出错!
");
}
}
fclose(fp);
}
∙读取
voidread_data()
{
FILE*fp;
fp=fopen("data.dat","rb");
if(fp==NULL)
{
printf("打开文件出错!
");
exit(0);
}
for(inti=0;i{
fread(&student[i],sizeof(structstudent),1,fp);
}
fclose(fp);
}
运行与测试报告:
主界面
显示功能
查找功能
增加功能
增加功能后显示
更改功能
更改功能后显示
删除功能
删除功能后显示
退出功能