1、 分析: 显然我们要编辑存储人员的信息自然要运用到文件!而人员的信息必须要以结构体的形式来表示才能够方便我们提取信息!在运用文件夹时我们需要对文件夹进行读取和保存,所以我们需要有读取和保存功能。 为了使设计可视化,我们首先要做一个可视界面,进入界面后需要选择功能程序,这将在main()程序中对各个功能模块进行调用。当有需要时被调函数还可以调用其他的函数!很显然需要用switch语句比较简洁方便。解题思路: 定义结构体struct student int Id; /学号 char name15; /学生姓名 int cl; /学生班级 char date114; /入实验室时间 char dat
2、e214; /出实验室时间 int num; /出勤次数 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()结束的回车键/接收任意键结束 break; case 1 puts(*全部员工信息如下* display();/
3、接收p结束时敲下的回车键 system(2 chek_one();/接收chek_one()结束的回车键4 change();*回主菜单请按回车键键*/接收change()结束的回车键5 delete_messa();/接收delete_messa()结束的回车键开始显示一系列功能选项6 exit();根据x的值调用各功能模块函数 结束 增加人员信息void add_message() char recv=y; count=read_num(); /count就是已经存在的学生数量 read_data(); /还应该从数据库读取数据信息 请输入学生信息:学号 姓名 班级 进入时间 退出时间 出
4、勤次数 迟到早退次数 n%d %s %d %s %s %d %dstudentcount.Id,&studentcount.name,&studentcount.cl,&studentcount.date1,&studentcount.date2,&studentcount.num,&studentcount.s); getchar(); /用来接收回车键的哈是否保存该学生信息?recv); if(recv=Y) count+; /已存学生数量 wn.worknum=count; save_data(student); /传参整个结构体数组 write_num(); /同时应该保存学生个数文件
5、成功保存! else警告:没有保存该学生信息!开void add_message()始输入信息保存信息 删除void delete_messa()/学生编号从1开始编辑,存在0号单元 如果参数为0表示删除所有信息 FILE *fp;*请输入你要删除的学生编号*%dnum); if(numcount)对不起,你要删除的学生信息不存在! exit(0); if(num=0) fp=fopen(data.dat,wb fclose(fp);num.dat for(int i=num-1;icount-1;i+) studenti=studenti+1; count-; 查询void chek_one
6、()*请输入要查寻人员的学号* puts(你输入的学号有误! exit(0);rb if(fp=NULL) printf(打开文件出错! num-; 学号 姓名 班级 进入时间 退出时间 出勤次数 迟到早退次数n fseek(fp,num*sizeof(struct student),0); fread(&temp,sizeof(struct student),1,fp);%4d%14s%4d%14s%10s%10s%16sn,temp.Id,temp.name,temp.cl,temp.date1,temp.date2,temp.num,temp.s); 显示void display() f
7、or(int i=0;count;%4d%14s%4d%11s%11s%12d%12d%n,studenti.Id,studenti.name,studenti.cl,studenti.date1,studenti.date2,studenti.num,studenti.s);n 更改void change() int num,flag;*请输入你要更改的学生的学号、更改学号*更改编号说明:出勤次数(5)、迟到早退次数(6)*%d %dnum,&flag);count|num=0)对不起,你要更改的学生信息不存在! if(flag=5|flag=6|flag=7)请输入更改的内容: if(flag=5) %sstudentnum-1.date2); else if(flag=6) studentnum-1.num); else scanf(studentnum-1.s); 保存void save_data(struct student) if(fwrite(&studenti,sizeof(struct student),1,fp)!=1)存入文件出错! 读取void read_data()studenti,sizeof(struct student),1,fp);运行与测试报告:主界面显示功能查找功能增加功能增加功能后显示更改功能更改功能后显示删除功能删除功能后显示退出功能
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1