资源描述:
1.职工信息管理系统1.1系统概述职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复),职工信息管理,可具有以下功能:职工信息录入、输出、查询、删除、修改、数据保存、文件打开等。1.2系统框架结构和算法思想框架结构:①:先构造structworkers的结构体,在里面将职工的职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话定义为数据成员;②:构造链表;③:在主函数创建结构指针,并为该指针开辟空间;④:运用while循环制作职工信息管理系统的菜单,设置多种选项,并且再创建多个功能函数,用于菜单中选择各种功能来对职工信息的运用。算法思想:运用结构体知识,将职工信息存入,并且开辟空间,给结构指针,创建单链表,运用链表的知识将职工数据串在一起,通过对节点的连接,删除,修改等等来实现对职工信息的各种修改。然后运用文件的知识,创建、打开文件,将职工信息写入文件中,并且保持,然后关闭文件。要合理利用循环,使得我们的系统能够不断的修改各种信息,达到我们的预期效果。1.3功能模块实现①:运用结构指针worker做函数参数,将对象传入功能函数中;②:添加职工数据函数:创建文件,并且创建新的结构指针*p与*q,让q与参数中的结构指针相等,设置while循环,并在里面为p开辟空间,并且输入结构指针中数据成员的数据,利用链表,不断往后接,再让p的下一个节点指向NULL,将q的下一个节结点接成p;然后让q与p相等,再让p指向worker的下一个节点,然后用“wb”打开文件,在while循环中,用fprintf将结构指针中的数据写入文件中,p指向下一个节点,然后关闭文件。③:修改信息函数:创建一个文件指针与结构指针p,让p指向函数参数中结构指针work的下一个节点,输入要修改信息的职工的职工号,运用strcmp函数确定所要修改的职工信息,然后进去输入修改,接下来让p重新指向work的下一个节点,用“wb,”形将入被修改的信息写入文件,然后关闭文件。③:输出函数:创建一个结构体指针p,让它指向函数参数中的结构指针work的下一个节点,运用while循环,输出所以职工的信息。④:查询信息函数:创建一个结构体指针p,让它指向函数参数中的结构指针work的下一个节点,分成按职工号寻找,与按职工姓名查找,通过不同的方式,运用strcmp函数,来确定所要查询职工的信息。⑤:删除信息函数:创建结构体指针p与r,让p指向函数参数中的结构指针work的下一个节点,运用strcmp函数按职工号查找到想删除的职工信息,即让r等于work,运用循环,找到r的下个节点指向p,然后,将这个节点等于它的下个节点,便删除掉了该节点的信息。⑥:读取信息函数:创建一个结构体指针p和一个文件指针,让p指向函数参数中的结构指针work的下一个节点,运用“rb”的方式打开文件,在循环中运用fscanf将文件中的保存的信息输出到p,再用printf输出第一个职工的全部信息,不断往后,直到p为NULL,最后关闭文件。职工信息管理系统退出系统读取职工信息输入职工信息浏览职工信息查询职工信息修改职工信息删除职工信息全部信息按文件名按职工号按职工号按职工号全部信息按姓名1.4系统测试录入:输入测试用例测试数据期望输出选取理由,姓名数字类型XXX输入的类型为数字请重新输入姓名不能为数字类型非数字字符XXX显示有效类型有效性别Char类型XXX输入的性别为数字,错误,请重新输入性别不为数字X显示有效类型有效职工号非数字类型XXXXXX输入的长度与字符类型不正常,请输入7位的数字字符职工号不为字符数字类型XXX输入长度不对,请输入长度为7的职工号职工号长度不对数字类型XXXXXXX显示有效职工号为数字且长度符合浏览:浏览信息未录入信息的情况下没有信息显示用户可能在没有录入的时候选择录入有录入的情况下展示录入信息查询:输入测试用例测试数据期望输出选取理由开始查询是否有数据如果有数据再开始按职工号、姓名查询,没有则输出没有数据用户可能在没有录入数据的时候开始查询职工号输入的职工号不存在XX没有查询到该职工号输入职工号不正确输入正确存在的职工号XXXXXX显示该职工信息输入的职工号正确姓名输入的为数字XXX姓名不为数字姓名不为数字输入的姓名不存在XX输入的姓名不存在输入姓名不存在输入的姓名存在XXX显示查询职工的信息输入的姓名存在删除:输入测试用例测试数据期望输出选取理由开始删除是否有数据如果没有数据,用户可能在没,则输出没有职工信息删除,如果有数据,则按职工号删除有录入数据的时候,开始删除数据职工号输入的职工号存在XXXXXXX显示数据已经删除了输入的学号正确输入的职工号不存在XXXXXX显示输入的学号不正确输入的学号不正确文件:输入测试用例测试数据期望输出选取理由输入的文件不存在职工信息管理系统1.txt文件不存在,退出可能存在文件还没建立存在文件,但输入的文件名不正常职工信息管理系统123.txt文件名不正确已经建立了文件,但文件名输入不正确存在文件,且输入文件名正确职工信息管理系统1.txt显示文件里的职工信息正常读入文件,且显示正确1.5系统设计总结①:我学习到了如何利用链表的知识,建立链表,运用链表的知识进行数据的输入、修改、删除等等。①:并且对文件的打开、建立、读取、录入等,有了更加深刻的理解与体会。③:对于菜单管理系统的循环使用也了更加深刻的体会,能更加熟练地运用数据类型的存储、限制条件。②:对于结构体,结构体的嵌套使用有了更加深刻的理解;⑤:在不断完善职工信息管理系统的时间中,对代码整体的改动,调试,选择有了更加宏大的改变;并且学习并掌握到了许多新的函数,在平时的代码中,能够熟练的加以运用。代码如下:include#include#includestructworkers{charjobNumber[15];//职工号,charname[15];//姓名charsex[15];//性别charbirthday[15];//出生年月chardegree[15];//学历charposition[15];//职务charsalary[15];//工资charaddr[15];//住址chartelephone[15];//电话};//再定义一个结构体,将上面那个结构体放入typedefstructnode{structworkersdata;structnode*next;}Node;//添加职工用"尾插法建表"voidAdd(Node*worker){FILE*fp;Node*p,*q;charn[20];chara[20];charc[20];q=worker;while(q->next!=NULL)//让后面的数据能够接上来,{q=q->next;}while(1){inti,g,h,j,k,l,z;j=0;k=0;l=0;z=0;printf("提示:在职工号处,输入0,则返回主菜单!
1");printf("
2请输入职工号:");scanf("%s",n);if(strcmp(n,"0")==0){break;}for(i=0;i<7;i++){if(n[i]>='0'&&n[i]<='9'){j++;}}for(g=0;g<7;g++){if(n[g]>='a'&&n[g]<='z'||n[g]>='A'&&n[g]<='Z'){k++;}}if(j==7&&k==0){,p=(Node*)malloc(sizeof(Node));strcpy(p->data.jobNumber,n);//把'\0'结束符的字符串复制到另外一个地址空间!!printf("请输入姓名:");scanf("%s",p->data.name);strcpy(a,p->data.name);for(i=0;i<20;i++){if(a[i]>='0'&&a[i]<='9'){l++;}}if(l==0){printf("请输入性别:");scanf("%s",p->data.sex);strcpy(c,p->data.sex);for(h=0;h<20;h++){if(c[h]>='0'&&c[h]<='9'){z++;}}if(z==0){printf("请输入出生年月:");scanf("%s",p->data.birthday);printf("请输入学历:");scanf("%s",p->data.degree);printf("请输入职务:");scanf("%s",p->data.position);,printf("请输入工资:");scanf("%s",p->data.salary);printf("请输入住址:");scanf("%s",p->data.addr);printf("请输入电话:");scanf("%s",p->data.telephone);printf("提示:已经完成一条记录的添加!");p->next=NULL;q->next=p;q=p;if(worker->next==NULL){printf("没有记录!");}else{p=worker->next;//worker可以换成p}if((fp=fopen("职工信息管理系统1.txt","wb"))==NULL){printf("文件不能打开!
3");},while(p!=NULL){fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);p=p->next;}fclose(fp);}else{printf("输入的性别为数字,错误,请重新输入:
4");break;}}else{printf("输入的姓名为数字,请重新输入:
5");break;}}elseif(j<7&&k==0){printf("输入长度不对,请输入长度为7的职工号:
6");break;}elseif(j==7&&k>0){printf("输入的非数字字符,请修改:
7");break;}elseif(j<7&&k>0){printf("输入的长度与字符类型不正常,请输入7位的数字字符:
8");break;},}}//修改职工信息intchange(Node*worker){FILE*fp;Node*p;charfind[20];p=worker->next;if(p==NULL){printf("
9提示:没有资料可以修改!
10");return0;}printf("请输入要修改的职工号");scanf("%s",find);while(p!=NULL){if(strcmp(p->data.jobNumber,find)==0){break;}p=p->next;,}if(p!=NULL){intx;while(1){printf("完成修改请输入0,否则请输入非0数字进行修改!");scanf("%d",&x);if(x==0){break;}printf("请输入新职工号:");scanf("%s",p->data.jobNumber);printf("请输入新职工姓名:");scanf("%s",p->data.name);printf("请输入新职工性别:");scanf("%s",p->data.sex);printf("请输入新职工出生年月:");scanf("%s",p->data.birthday);printf("请输入新职工学历:");scanf("%s",p->data.degree);printf("请输入新职工职务:");scanf("%s",p->data.position);printf("请输入新职工工资:");scanf("%s",p->data.salary);,printf("请输入新职工住址:");scanf("%s",p->data.addr);printf("请输入新职工电话:");scanf("%s",p->data.telephone);printf("
11提示:该职工资料已经修改!
12");}if(worker->next==NULL){printf("没有记录!");}else{p=worker->next;}if((fp=fopen("职工信息管理系统1.txt","wb"))==NULL){printf("文件不能打开!
13");}while(p!=NULL){fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);p=p->next;,}fclose(fp);}elseprintf("
14提示:没有你要修改的资料!
15");}//输出全体职工的信息intDisp(Node*worker){Node*p;p=worker->next;if(p==NULL){printf("
16提示:没有信息可以显示!
17");return0;}printf("\t\t\t\t显示所有职工信息
18");while(p!=NULL){printf("
19职工工号为:%s
20职工名字为:%s
21职工性别为:%s
22职工出生年月:%s
23职工学历:%s
24职工职务为:%s
25职工工资为:%s
26职工地址为:%s
27职工电话为:%s\t
28",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);p=p->next;,}}//查询职工信息:按职工号、姓名查询intChaxun(Node*worker){intaa=0;intbb=0;chard[20];Node*p;intsel;charfind[20];p=worker->next;if(p==NULL){printf("
29提示:没有资料可以查询!
30");return0;}printf("
31提示:
32输入0----退出\t输入1----按职工号查询\t输入2-----按职工姓名查询
33");printf("
34请选择你想要查询的方法:");scanf("%d",&sel);if(sel==1){printf("
35请输入你要查询分类的职工号:");scanf("%s",find);,while(p!=NULL){if(strcmp(p->data.jobNumber,find)==0){printf("
36职工工号为:%s
37职工名字为:%s
38职工性别为:%s
39职工出生年月:%s
40职工学历:%s
41职工职务为:%s
42职工工资为:%s
43职工地址为:%s
44职工电话为:%s\t
45",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);aa++;}p=p->next;}if(aa==0){printf("没有查询到该职工号
46");}}elseif(sel==2){printf("
47输入你要查询分类的职工姓名:");scanf("%s",find);strcpy(d,find);while(p!=NULL){intm;intv=0;for(m=0;m<20;m++){if(d[m]>='0'&&d[m]<='9'),{v++;}}if(v==0){if(strcmp(p->data.name,find)==0){printf("
48职工工号为:%s
49职工名字为:%s
50职工性别为:%s
51职工出生年月:%s
52职工学历:%s
53职工职务为:%s
54职工工资为:%s
55职工地址为:%s
56职工电话为:%s\t
57",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);bb++;}p=p->next;}else{printf("姓名不为数字:
58");break;}}if(bb==0){printf("输入的姓名不存在
59");}}elseif(sel==0)return0;}//删除职工的信息,intDelete(Node*worker){intcc=0;Node*p,*r;charfind[10];p=worker->next;if(p==NULL){printf("提示:没有职工信息可以删除!
60");return0;}printf("
61提示:请输入你要删除的职工号!
62");scanf("%s",find);while(p!=NULL){if(strcmp(p->data.jobNumber,find)==0){cc++;break;}p=p->next;}if(p!=NULL){,r=worker;while(r->next!=p){r=r->next;}r->next=r->next->next;printf("数据已经删除了
63");}if(cc==0){printf("输入的学号不正确
64");}}//读取职工信息voidDuqu(Node*worker){Node*p;charwenjian[40];FILE*fp;p=worker->next;printf("请输入文件名:
65");printf("提示:文件名为:职工信息管理系统1.txt
66");scanf("%s",wenjian);if(strcmp(wenjian,"职工信息管理系统1.txt")==0)//一个汉字两个字节,上面wenjian设40,之前设20,在visual会报错,因为超出字节空间了!!!{if(p==NULL){printf("非常抱歉,没有数据哦!请先添加数据!
67");}if((fp=fopen("职工信息管理系统1.txt","rb"))==NULL){printf("文件不能打开!
68");,}else{while(p!=NULL){fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);printf("
69职工工号为:%s
70职工名字为:%s
71职工性别为:%s
72职工出生年月:%s
73职工学历:%s
74职工职务为:%s
75职工工资为:%s
76职工地址为:%s
77职工电话为:%s\t
78",p->data.jobNumber,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.addr,p->data.telephone);p=p->next;}}fclose(fp);}else{printf("输入文件名错误
79");}}intmain(){Node*worker;intxuhao;worker=(Node*)malloc(sizeof(Node));,worker->next=NULL;while(1){system("cls");//用于清屏刷新的printf("职工信息管理系统
80");printf("==================菜单==================
81");printf("*1.输入职工信息*
82");printf("*2.修改职工信息*
83");printf("*3.浏览职工信息*
84");printf("*4.查询职工信息*
85");printf("*5.删除职工信息*
86");printf("*6.读取职工信息*
87");printf("*0.退出*
88");printf("******************");printf("
89请输入你想要选择的序号:");scanf("%d",&xuhao);switch(xuhao){case0:printf("
90提示:退出系统!
91");system("pause");exit(0);case1:Add(worker);system("pause");break;//添加职工信息,并且自动保存到文件中去case2:change(worker);system("pause");break;//修改职工信息case3:Disp(worker);system("pause");break;//显示职工信息case4:Chaxun(worker);system("pause");break;//查询职工信息,case5:Delete(worker);system("pause");break;//删除职工信息case6:Duqu(worker);system("pause");break;//读取职工信息default:printf("提示:输入错误!
92");system("pause");//提示输入错误,重新输入}}}