1、实验室考勤系统设计报告实验室考勤系统设计报告题目:某高校实验室学生考勤情况管理,需要先存储学生的基本信息,内容包括学号、姓名、班级、进入时间、退出时间、出勤次数、迟到早退次数。其中学号唯一不能重复。具体要求: 主界面:实现可视化,让用户能方便快捷的使用此程序。 显示功能:能显示当前内存中所有的数据。 查询功能:能按照用户所使用的条件查询所需数据。 添加功能:根据实验室人员的增添情况添加。 更改功能:根据查询对相应的记录进行修改并记录。 删除功能:视情况删除数据。 保存功能:把学生信息写入文件夹。 读取功能:从文件夹中读取学生信息。主要框图: 分析: 显然我们要编辑存储人员的信息自然要运用到文件
2、!而人员的信息必须要以结构体的形式来表示才能够方便我们提取信息!在运用文件夹时我们需要对文件夹进行读取和保存,所以我们需要有读取和保存功能。 为了使设计可视化,我们首先要做一个可视界面,进入界面后需要选择功能程序,这将在main()程序中对各个功能模块进行调用。当有需要时被调函数还可以调用其他的函数!很显然需要用switch语句比较简洁方便。解题思路: 定义结构体struct student int Id; /学号 char name15; /学生姓名 int cl; /学生班级 char date114; /入实验室时间 char date214; /出实验室时间 int num; /出勤次
3、数 int s; /迟到早退次数temp,student100; /预定义一百个学生和一个临时变量 主程序(进入主菜单并对功能进行选择)void main(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); p
4、uts(*全部员工信息如下*); 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(*回主菜单请按
5、回车键键*); 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的值调用各功能模块函数 结束 增加人员信息void add_message()
6、 char recv=y; count=read_num(); /count就是已经存在的学生数量 read_data(); /还应该从数据库读取数据信息 puts( 请输入学生信息:学号 姓名 班级 进入时间 退出时间 出勤次数 迟到早退次数 n); scanf(%d %s %d %s %s %d %d,&studentcount.Id,&studentcount.name,&studentcount.cl,&studentcount.date1,&studentcount.date2,&studentcount.num,&studentcount.s); getchar(); /用来接收回
7、车键的哈 puts(是否保存该学生信息?); scanf(%c,&recv); if(recv=Y) count+; /已存学生数量 wn.worknum=count; save_data(student); /传参整个结构体数组 write_num(); /同时应该保存学生个数 puts(文件成功保存!); else puts(警告:没有保存该学生信息!); 开void add_message() char recv=y; count=read_num(); /count就是已经存在的学生数量 read_data(); /还应该从数据库读取数据信息 puts( 请输入学生信息:学号 姓名 班
8、级 进入时间 退出时间 出勤次数 迟到早退次数 n); scanf(%d %s %d %s %s %d %d,&studentcount.Id,&studentcount.name,&studentcount.cl,&studentcount.date1,&studentcount.date2,&studentcount.num,&studentcount.s); getchar(); /用来接收回车键的哈 puts(是否保存该学生信息?); scanf(%c,&recv); if(recv=Y) count+; /已存学生数量 wn.worknum=count; save_data(stud
9、ent); /传参整个结构体数组 write_num(); /同时应该保存学生个数 puts(文件成功保存!); else puts(警告:没有保存该学生信息!); 始输入信息保存信息结束 删除void delete_messa()/学生编号从1开始编辑,存在0号单元 如果参数为0表示删除所有信息 FILE *fp; int num; puts(*请输入你要删除的学生编号*); scanf(%d,&num); count=read_num(); if(numcount) puts(对不起,你要删除的学生信息不存在!); exit(0); else if(num=0) fp=fopen(data
10、.dat,wb); fclose(fp); fp=fopen(num.dat,wb); fclose(fp); else read_data(); for(int i=num-1;icount) puts(你输入的学号有误!); exit(0); else fp=fopen(data.dat,rb); if(fp=NULL) printf(打开文件出错!); exit(0); num-; puts( 学号 姓名 班级 进入时间 退出时间 出勤次数 迟到早退次数n); fseek(fp,num*sizeof(struct student),0); fread(&temp,sizeof(struc
11、t student),1,fp); printf(%4d%14s%4d%14s%10s%10s%16sn,temp.Id,temp.name,temp.cl,temp.date1,temp.date2,temp.num,temp.s); 显示void display() puts( 学号 姓名 班级 进入时间 退出时间 出勤次数 迟到早退次数n); count=read_num(); read_data(); for(int i=0;icount|num=0) puts(对不起,你要更改的学生信息不存在!); exit(0); else if(flag=5|flag=6|flag=7) rea
12、d_data(); puts(请输入更改的内容:); if(flag=5) scanf(%s,&studentnum-1.date2); else if(flag=6) scanf(%s,&studentnum-1.num); else scanf(%s,&studentnum-1.s); save_data(student); 保存void save_data(struct student) FILE *fp; fp=fopen(data.dat,wb); if(fp=NULL) printf(打开文件出错!); exit(0); for(int i=0;icount;i+) if(fwri
13、te(&studenti,sizeof(struct student),1,fp)!=1) puts(存入文件出错!); fclose(fp); 读取void read_data() FILE *fp; fp=fopen(data.dat,rb); if(fp=NULL) printf(打开文件出错!); exit(0); for(int i=0;icount;i+) fread(&studenti,sizeof(struct student),1,fp); fclose(fp);运行与测试报告:主界面显示功能查找功能增加功能 增加功能后显示更改功能更改功能后显示删除功能删除功能后显示退出功能
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1