1、void exit0(); /*退出*/int menu_select(); /*主菜单*/*链表操作所用结构体指针*/struct worker *head=NULL,*p1,*p2,*p3;/*定义结构体指针head 为头指针p1 为输入数据缓存空间指针p2 为尾指针*/*职工记录保存标志全局变量*/int writeinfo_flag=0;/*主函数*/int main() loadRec(); for(;) switch(menu_select() case 1: system(cls); createRec();break; case 2: searchRec(); case 3:
2、modifyRec(); case 4: insertRec(); case 5: deleteRec(); case 6: listRec(); case 7: writeInfo(); case 0: exit0();return 0; default : getchar(); printf(n 选择错误,请正确输入你的选择(05),:nn 按任意键返回.n getchar(); system( /*清屏*/ return 0;/*主菜单*/int menu_select() int c; printf(tt*菜单*nttt1.新建职工记录nttt2.查询职工记录nttt3.修改职工记录n
3、ttt4.插入职工记录nttt5.删除职工记录nttt6.显示所有信息nttt7.保存职工记录nttt0.退出(任何情况下按Ctrl+C 退出程序)nn 输入你的选择(07): scanf(%d,&c); return c;/*从磁盘文件导入职工信息到内存*/void loadRec() FILE *fp; int n=0; if(fp=fopen(f:zxinfo.dat,r)=NULL) /*打开文件*/ printf(文件不存在或无法打开! return; head=p1=(struct worker *)malloc(LEN); /*开辟一个新单元*/ p1-next =NULL; w
4、hile(!feof(fp) n+; fscanf(fp,%s%lf%s, p1-id,&p1-basepay,p1-name); if(p1-id0id09) n-; p2=(struct worker *)malloc(LEN); /*开辟一个新单元*/ p1-next =p2; p3=p1; p1=p2; free(p2); p3-next=NULL;n %d项信息输入完毕,按任意键返回.n,n); getchar(); /*清屏*/ writeinfo_flag=0; /*设置保存记录标志*/ if( fclose(fp) ) /* 关闭文件 */ printf( Can not cl
5、ose the file! ); exit(0);/*新建职工记录*/void createRec() int n,i; if(head!=0) p3=head; while( p3-next!=NULL) p3=p3-next; getchar(); printf(n 职工信息数据库已存在,新建职工信息将接续在信息库的后面,按任意键继续.: system( p3-next=p1=(struct worker *)malloc(LEN); else head=p1=(struct worker *)malloc(LEN);nn 请输入希望建立的职工基本信息条数n(n1&n10): do sca
6、nf(n); if(n10) printf(nn输入范围有误,请重新输入希望建立的职工基本信息条数n(n while(n10); /*开始建立n条职工基本信息记录*/nn 请每行按职工号(id=18位) 职工工资 职工姓名(name=10汉字)的形式输入%d条职工记录: for(i=0;iid,id )=0) printf(t该职工信息如下:nt 职工号: printf(%sn,p1-id );t 职工工资:%.0fnbasepay );t 职工姓名:name ); break; else p1=p1-next ; if(p1=NULL) printf(nn找不到该职工信息! getch();
7、/*修改指定职工号的记录*/void modifyRec() if(head=NULL) getchar();n 职工信息数据库为空,不能修改,按任意键将返回: getchar();nn请输入要修改记录的职工号: while(strcmp(id,p1-id )!=NULL& p1=p1- if(strcmp(id,p1-id )=NULL) strcpy(p1-id,id);nn 请输入该职工号的工资:%lfbasepay);nn 请输入该职工号的姓名:n1项信息修改完毕, elsenn找不到该职工号信息!按任意键将返回: return;/*插入职工记录*/void insertRec() i
8、nt n=0,m,i; if(head=NULL) /*空数据库插入在第一个位置*/n 职工信息数据库为空,只能插入第一个位置,按任意键将继续。:nn 请按职工号(id scanf(, head-head-basepay,head-n1项信息输入完毕,按任意键返回.n writeinfo_flag=1; return; /*数据库不为空时,分插入第一个位置,中间位置,最后一个位置三种情况*/ do n+; while(p1!=0);职工信息数据库中共有%d条记录,请输入插入的位置n:m); if(mn+1) printf(nn 输入范围有误,请重新输入希望插入的正确位置(n=1&=%d):,n
9、+1); while(m p1=p1- p2=(struct worker *)malloc(LEN);, p2-p2-basepay,p2- p2- p1- /*插入在数据库的中间第n个位置*/ for(i=1;m; p2=p1; p3=(struct worker *)malloc(LEN);, p3-p3-basepay,p3-next=p1; p2-next =p3; /*删除指定职工号的记录*/void deleteRec()n 职工信息数据库为空,不能删除,按任意键将返回:nn请输入要删除的职工号:=0&id )=0) if(head-next=NULL) free(head);
10、head=NULL; else if(head=p1) head=p1- free(p1); else p2-next=p1- free(p1);n删除完毕;按任意键返回:/*显示所有信息*/void listRec() if(head=NULL) printf(n数据库中没有职工信息,按任意键返回。n全部职工信息如下:n 职工号 职工工资 职工姓名n %s t%.2lf t%snid,p1-n按任意键返回!.n /*清屏*/*保存职工记录*/void writeInfo() /*定义文件指针*/ if(writeinfo_flag=0) printf(n数据库中职工信息已保存过,按任意键返回。wn数据库中职工信息无法保存,按任意键返回。 fprintf(fp,t%st%.2lft%sn fclose(fp);n数据库中职工信息保存完毕,按任意键返回。 /*设置保存记录标志*/*退出*/void exit0() if(writeinfo_flag=1) /*修改过记录时,先保存,再退出*/ writeInfo(); while( p1! p2=p1- free(p1);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1