职工信息管理系统

xiaoxiao2021-02-28  13

/*********************************************************** * 版权所有(C)2017. zangyunpeng * * 文件名称:职工信息管理系统 * 文件标识:无 * 内容摘要:该代码用于函数声明及结构体构建 * 其它说明:无 * 当前版本: V1.0 * 作 者:臧云鹏 * 完成日期: 2017 12 22 * *修改记录1: *修改日期: 2017 12 22 *版本号 V1.0 *修改人: zangyunpeng * **********************************************************/

课程设计要求:

6 块 。  职 工 信 息 管 理 系 统 职 工 信 息 包 括 职 工 号 、 姓 名 、 性 别 、 年 龄 、 学 历 、 工 资 、 住 址 、 电 话 等 ( 职 工 号 不 重 复 ) 。 设 计 一 个 职 工 信 息 管 理 系 统 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 统 以 菜 单 方 式 工 作 ( 2 ) 职 工 信 息 录 入 功 能 ( 职 工 信 息 用 文 件 保 存 ) - - 输 入 ( 3 ) 职 工 信 息 浏 览 功 能 - - 输 出 , 包 括 在 退 出 系 统 时 , 将 数 据 保 存 到 文 件 ( 4 ) 查 询 和 排 序 功 能 : 按 工 资 查 询 按 学 历 查 询 等 6 块 。  职 工 信 息 管 理 系 统 职 工 信 息 包 括 职 工 号 、 姓 名 、 性 别 、 年 龄 、 学 历 、 工 资 、 住 址 、 电 话 等 ( 职 工 号 不 重 复 ) 。 设 计 一 个 职 工 信 息 管 理 系 统 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 统 以 菜 单 方 式 工 作 ( 2 ) 职 工 信 息 录 入 功 能 ( 职 工 信 息 用 文 件 保 存 ) - - 输 入 ( 3 ) 职 工 信 息 浏 览 功 能 - - 输 出 , 包 括 在 退 出 系 统 时 , 将 数 据 保 存 到 文 件 ( 4 ) 查 询 和 排 序 功 能 : 按 工 资 查 询 按 学 历 查 询 等 6 块 。  职 工 信 息 管 理 系 统 职 工 信 息 包 括 职 工 号 、 姓 名 、 性 别 、 年 龄 、 学 历 、 工 资 、 住 址 、 电 话 等 ( 职 工 号 不 重 复 ) 。 设 计 一 个 职 工 信 息 管 理 系 统 , 使 之 能 提 供 以 下 功 能 : ( 1 ) 系 统 以 菜 单 方 式 工 作 ( 2 ) 职 工 信 息 录 入 功 能 ( 职 工 信 息 用 文 件 保 存 ) - - 输 入 ( 3 ) 职 工 信 息 浏 览 功 能 - - 输 出 , 包 括 在 退 出 系 统 时 , 将 数 据 保 存 到 文 件 ( 4 ) 查 询 和 排 序 功 能 : 按 工 资 查 询 按 学 历 查 询 等 职工信息管理系统职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。设计一个职工信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)职工信息录入功能(职工信息用文件保存)--输入(3)职工信息浏览功能--输出,包括在退出系统时,将数据保存到文件(4)查询和排序功能:按工资查询按学历查询等 6 块 。  职 工 信 息 管 理 系 统 职 工 信 息 包 括 职 工 号 、 姓 名 、 性 别 、 年 龄 、 学 历 、 工 资 、 住 址 、 电 话 等 ( 职 工 号 不 重 复 ) 。 设 计 一 个 职 工 信 息 管 理 系 统 , 使 之 能 提 供 以 下 能 : ( 1 ) 系 统 以 菜 单 方 式 工 作 ( 2 ) 职 工 信 息 录 入 功 能 ( 职 工 信 息 用 文 件 保 存 ) - - 输 入 ( 3 ) 职 工 信 息 浏 览 功 能 - - 输 出 , 包 括 在 退 出 系 统 时 , 将 数 据 保 存 到 文 件 ( 4 ) 查 询 和 排 序 功 能 : 按 工 资 查 询 按 学 历 查 询 等

实现源代码如下:

1.source.cpp

#include<stdio.h> #include<stdlib.h> #include<string.h> #include"head.h" /*************************************************************************************** *功能描述:菜单函数 *输入参数:无 *输出参数:无 *返回值:1 ***************************************************************************************/ void menu() { system("color 6E"); printf("\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"); printf("\t◆ 欢迎使用职工信息管理系统 ◆\n"); printf("\t◆ ◆\n"); printf("\t◆ 【菜单】 ◆\n"); printf("\t◆ 1.录入职工信息 ◆\n"); printf("\t◆ 2.查询职工信息 ◆\n"); printf("\t◆ 3.职工信息排序 ◆\n"); printf("\t◆ 4.插入职工信息 ◆\n"); printf("\t◆ 5.浏览职工信息 ◆\n"); printf("\t◆ 6.修改职工信息 ◆\n"); printf("\t◆ 7.删除职工信息 ◆\n"); printf("\t◆ 8.保存职工信息 ◆\n"); printf("\t◆ 【9】退出系统 ◆\n"); printf("\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"); } /*************************************************************************************** *功能描述:初始化单链表 *输入参数:无 *输出参数:无 *返回值:1 ***************************************************************************************/ int Initlist(Linklist *L) //初始化单链表 { *L=(Linklist )malloc(sizeof(LNode)); if((*L)==NULL) return (0); (*L)->next=NULL; return OK; } /*************************************************************************************** *功能描述:头插法生成单链表 *输入参数:职工各项信息工号、姓名、性别、年龄、学历、工资、住址 *输出参数:无 *返回值:1或0 ***************************************************************************************/ int CreatList(Linklist L)//头插法生成单链表 { LNode *p,*r,*s; char id[30]; int k=0; r=L; s=L->next;//链表没有节点时,s=null;/链表有节点时,指向第一个职工节点 while(r->next!=NULL)//如果存在后继结点时,r指针后移一个 { r=r->next; } while(L) { printf("\t职工号:"); scanf("%s",id); s=L->next;//每次从第一个节点开始找,看id是否重复 while(s) { if(strcmp(s->data.id,id)==0) { printf("\t提示:职工号为'%s'的职工已经存在!\n",id); k=1; return OK; } s=s->next; } p=(Linklist)malloc(sizeof(LNode)); memset(p,0,sizeof(LNode));//清空内存 strcpy(p->data.id,id); printf("\t姓名:"); scanf("%s",p->data.name); printf("\t性别:"); scanf("%s",p->data.sex); printf("\t年龄:"); scanf("%d",&p->data.age); printf("\t学历:"); scanf("%s",p->data.edu); printf("\t工资:"); scanf("%lf",&p->data.salary); printf("\t电话:"); scanf("%s",p->data.phone); printf("\t地址:"); scanf("%s",p->data.address); break; } p->next=NULL;//表明这是链表的尾部结点 r->next=p;//将新建的结点加入链表尾部中 r=p; return OK; } /*************************************************************************************** *功能描述:显示职工信息 *输入参数:p指针 *输出参数:职工各项信息 *返回值:无 ***************************************************************************************/ void Display(Linklist L)//显示职工信息 { LNode *p; p=L->next; if(p==NULL) { printf("\t现在没有职工信息,请先输入职工信息\n\n"); return; } printf("\t职工号\t姓名\t\t性别\t年龄\t学历\t工资\t电话\t地址\n\n"); while(p) { printf("\t%s\t",p->data.id); printf("%s\t\t",p->data.name); printf("%s\t",p->data.sex); printf("%d\t",p->data.age); printf("%s\t",p->data.edu); printf("%0.2lf\t",p->data.salary); printf("%s\t",p->data.phone); printf("%s\t",p->data.address); printf("\n"); p=p->next; } } /*************************************************************************************** *功能描述:职工信息查询 *输入参数:a k *输出参数:查找到的职工信息 *返回值:1 ***************************************************************************************/ void Search(Linklist L)//职工信息查询 { int a,k=0; char name[10]; char id[20]; char phone[30]; printf("\t请输入查询方式(1按职工号查询,2按姓名查找):"); scanf("%d",&a); if(a==1) { k=1; printf("\t请输入查询职工号:"); scanf("%s",&id); SearchID(L,id);//ID查询 } if(a==2) { k=1; printf("\t请输入查询职工姓名:"); scanf("%s",&name); SearchName(L,name);//姓名查询 } if(k==0) { printf("\t请输入正确的序号!\n"); } } /*************************************************************************************** *功能描述:职工号查询 *输入参数:职工工号 p指针 L *输出参数:该职工各项信息 *返回值:1 ***************************************************************************************/ int SearchID(Linklist L,char id[20])//职工号查询 { LNode *p; p=L; int k=0; while(p) { if(strcmp(p->data.id,id)==0) { printf("\t职工号 %s\n",p->data.id); printf("\t姓名 %s\n",p->data.name); printf("\t性别 %s\n",p->data.sex); printf("\t年龄 %d\n",p->data.age); printf("\t学历 %s\n",p->data.edu); printf("\t工资 %0.2lf\n",p->data.salary); printf("\t电话 %s\n",p->data.phone); printf("\t地址 %s\n",p->data.address); k=1; } p=p->next; } if(k==0) { printf("\t对不起,没有您想要查找的人!\n"); } return OK; } /*************************************************************************************** *功能描述:姓名查询 *输入参数:职工姓名 p指针 *输出参数:该职工各项信息 *返回值:1 ***************************************************************************************/ int SearchName(Linklist L,char name[10])//姓名查询 { LNode *p; p=L; int k=0; while(p) { if(strcmp(p->data.name,name)==0) { printf("\t职工号 %s\n",p->data.id); printf("\t姓名 %s\n",p->data.name); printf("\t性别 %s\n",p->data.sex); printf("\t年龄 %d\n",p->data.age); printf("\t学历 %s\n",p->data.edu); printf("\t工资 %0.2lf\n",p->data.salary); printf("\t电话 %s\n",p->data.phone); printf("\t地址 %s\n",p->data.address); k=1; } p=p->next; } if(k==0) { printf("\t对不起,没有您想要查找的人!\n"); } return OK; } /*************************************************************************************** *功能描述:职工信息排序 *输入参数:b k *输出参数:ID排序 ;姓名排序; 工资排序后的职工信息 *返回值:无 ***************************************************************************************/ void Sort(Linklist L)//职工信息排序 { int b,k=0; printf("\t请输入排序方式(1按职工号排序,2按姓名排序,3按工资排序):"); scanf("%d",&b); if(b==1) { k=1; printf("\t按职工号排序为:\n"); SortID(L);//职工号排序 Display(L); } if(b==2) { k=1; printf("\t按姓名排序为:\n"); SortName(L);//姓名排序 Display(L);//显示职工信息 } if(b==3) { k=1; printf("\t按工资排序为:\n"); SortSalary(L);//工资排序 Display(L);//显示职工信息 } if(k==0) { printf("\t请输入正确的序号!\n"); } } /*************************************************************************************** *功能描述:职工号排序 *输入参数:p指针 q指针 *输出参数:按照职工号排序后各职工各项信息 *返回值:无 ***************************************************************************************/ void SortID(Linklist L)//职工号排序 { Linklist p,q; struct employee temp; for(p=L->next;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if((strcmp(p->data.id,q->data.id)>0)) { temp=q->data; q->data=p->data; p->data=temp; } } } } /*************************************************************************************** *功能描述:姓名排序 *输入参数:p,q指针 *输出参数:按照姓名排序后各职工各项信息 *返回值:无 *其他说明: ***************************************************************************************/ void SortName(Linklist L)//姓名排序 { Linklist p,q; struct employee temp; for(p=L->next;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if((strcmp(p->data.name,q->data.name)>0)) { temp=q->data; q->data=p->data; p->data=temp; } } } } /*************************************************************************************** *功能描述:职工工资排序 *输入参数:p,q指针 *输出参数:按照职工工资排序后各职工各项信息 *返回值:无 ***************************************************************************************/ void SortSalary(Linklist L)//职工工资排序 { Linklist p,q; struct employee temp; for(p=L->next;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if(p->data.salary>q->data.salary) { temp=q->data; q->data=p->data; p->data=temp; } } } } /*************************************************************************************** *功能描述:插入信息 *输入参数:pre s 指针 *输出参数:职工信息 *返回值:1 *其他说明: ***************************************************************************************/ int Ins(Linklist L, char id[20])//插入信息 { LNode *pre,*s; int k=0; pre=L; while(pre->next!=NULL) { pre=pre->next; if((strcmp( pre->data.id,id))==0) { k=1; printf("\t对不起,要查找职工号已存在!\n"); } } if(k==0) { s=(LNode*)malloc(sizeof(LNode)); printf("\t请输入要插入员工信息\n"); printf("\t职工号:"); scanf("%s",&s->data.id); printf("\t姓名:"); scanf("%s",&s->data.name); printf("\t性别:"); scanf("%s",&s->data.sex); printf("\t年龄:"); scanf("%d",&s->data.age); printf("\t学历:"); scanf("%s",&s->data.edu); printf("\t工资:"); scanf("%0.2lf",&s->data.salary); printf("\t电话:"); scanf("%s",&s->data.phone); printf("\t地址:"); scanf("%s",&s->data.address); s->next=pre->next; pre->next=s; printf("\t插入员工信息成功!\n"); } return OK; } /*************************************************************************************** *功能描述:更改信息 *输入参数: c k p指针 *输出参数:修改后的职工信息 *返回值:1 *其他说明: ***************************************************************************************/ int Alter(Linklist L,char id[20])//更改信息 { int c; int k=0; LNode *p; p=L; while(p) { if(strcmp(p->data.id,id)==0) { k=1; printf("\t原来的职工信息:\n"); printf("\t职工号 %s\n",p->data.id); printf("\t姓名 %s\n",p->data.name); printf("\t性别 %s\n",p->data.sex); printf("\t年龄 %d\n",p->data.age); printf("\t学历 %s\n",p->data.edu); printf("\t工资 %0.2lf\n",p->data.salary); printf("\t电话 %s\n",p->data.phone); printf("\t地址 %s\n",p->data.address); printf("\t请输入要修改的选项(1职工号,2姓名,3性别,4年龄\n"); printf(" \t 5学历,6工资,7电话,8地址):"); scanf("%d",&c); switch(c) { case 1: { printf("\t请输入修改员工编号:",p->data.id); scanf("%s",p->data.id); printf("\t修改员工信息成功!\n"); break; } case 2: { printf("\t请输入员工修改姓名:",p->data.name); scanf("%s",p->data.name); printf("\t修改员工信息成功!\n"); break; } case 3: { printf("\t请输入员工修改性别:",p->data.sex); scanf("%s",p->data.sex); printf("\t修改员工信息成功!\n"); break; } case 4: { printf("\t请输入员工修改年龄:",p->data.age); scanf("%d",&p->data.age); printf("\t修改员工信息成功!\n"); break; } case 5: { printf("\t请输入员工修改学历:",p->data.edu); scanf("%s",p->data.edu); printf("\t修改员工信息成功!\n"); break; } case 6: { printf("\t请输入员工修改工资:",p->data.salary); scanf("%lf",&p->data.salary); printf("\t修改员工信息成功!\n"); break; } case 7: { printf("\t请输入员工修改电话:",p->data.phone); scanf("%s",p->data.phone); printf("\t修改员工信息成功!\n"); break; } case 8: { printf("\t请输入员工修改地址:",p->data.address); scanf("%s",p->data.address); printf("\t修改员工信息成功!\n"); break; } default: printf("\t请输入正确序号!\n"); break; } } p=p->next; } if(k==0) { printf("\t该职工号不存在!\n"); } return OK; } /*************************************************************************************** *功能描述:按职工号删除 *输入参数:p r 指针 *输出参数:无 *返回值:1 *其他说明: ***************************************************************************************/ int Del(Linklist L,char id[20])//按ID删除 { LNode *p; LNode *r; p=L->next; r=L; while(!(strcmp(p->data.id,id)==0)&&p) { r=p; p=p->next; } if(!p) printf("\n删除位置不合理\n"); else { r->next=p->next; free(p); printf("删除成功!\n"); } return 1; } /*************************************************************************************** *功能描述:将操作完成后的信息存储到文件 *输入参数:无 *输出参数:无 *返回值:无 ***************************************************************************************/ void Save(Linklist L) { FILE *fpb2; //文件指针 LNode *p2; fpb2=fopen("worker.txt","wb"); //把职工信息写入到文件中 for(p2=L->next; p2!=NULL; p2=p2->next) fwrite(p2,sizeof(LNode),1,fpb2); fclose(fpb2); } /*************************************************************************************** *功能描述:把文件中的职工信息读出来 *输入参数:无 *输出参数:无 *返回值:无 ***************************************************************************************/ void Read(Linklist L) { FILE *fpb1; //文件指针 LNode *p1,*s1; fpb1=fopen("worker.txt","rb"); //读方式打开职工文件 if(fpb1!=NULL) { p1=(Linklist)malloc(sizeof(LNode)); if(!p1) exit(1); p1->next=NULL; while(fread(p1,sizeof(LNode),1,fpb1)==1) { if(L->next==NULL) { L->next=p1; s1=p1; } else { s1->next=p1; s1=p1; } p1=(Linklist)malloc(sizeof(LNode)); if(!p1) exit(1); p1->next=NULL; } } }

2.main.cpp

#include<stdio.h> #include<stdlib.h> #include<string.H> #include"D://head.h" #define OK 1 #define ERROR 0 /*************************************************************************************** *功能描述:测试函数 *输入参数:你的选择 *输出参数:无 *返回值:0 *其他说明:完成各个函数测试,消息字段之间用分号(;)隔离 ***************************************************************************************/ int main()//主函数 { Linklist L; int x=1; int y; char m; char id[20]; Initlist(&L);//初始化单链表 Read(L); while(x) { menu(); printf("\t请选择操作序号并按回车:"); scanf("%d",&y); switch(y) { case 1: { system ("cls");//清空主界面 printf("\t*********************欢迎进入录入模块********************\n"); CreatList(L);//头插法生成单链表 do { printf("\t是否继续输入?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { CreatList(L);//显示职工信息 } } while(m!='n'); printf("\t*******************欢迎下次进入录入模块******************\n"); break; } case 2: { system ("cls");//清空主界面 printf("\t*********************欢迎进入查询模块********************\n"); Search(L);//职工信息查询 do { printf("\t是否继续查询?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { Search(L);//职工信息查询 } } while(m!='n'); printf("\t*******************欢迎下次进入查找模块******************\n"); break; } case 3: { system ("cls");//清空主界面 printf("\t*******************欢迎进入排序模块**********************\n"); Sort(L); do { printf("\t是否继续查询?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { Sort(L); } } while(m!='n'); printf("\t*******************欢迎下次进入排序模块******************\n"); break; } case 4: system ("cls");//清空主界面 printf("\t*********************欢迎进入插入模块********************\n"); printf("\t请输入要插入查找的职工号:"); getchar(); scanf("%s",&id); Ins(L,id);//插入信息 do { printf("\t是否继续插入?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { printf("\t请输入要插入查找的职工号:"); getchar(); scanf("%s",&id); Ins(L,id);//插入信息 } } while(m!='n'); printf("\t*******************欢迎下次进入插入模块******************\n"); break; case 5: system ("cls");//清空主界面 printf("\t*********************欢迎进入显示模块********************\n"); printf("\t所有职工信息如下所示\n"); Display(L);//显示职工信息 printf("\t*******************欢迎下次进入显示模块******************\n"); break; case 6: system ("cls");//清空主界面 printf("\t*********************欢迎进入修改模块********************\n"); printf("\t请输入要修改员工职工号:"); getchar(); scanf("%s",&id); Alter(L,id);//更改信息 do { printf("\t是否继续修改?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { printf("\t请输入要修改员工职工号:"); getchar(); scanf("%s",&id); Alter(L,id);//更改信息 } } while(m!='n'); printf("\t******************欢迎下次进入修改模块*******************\n"); break; case 7: system ("cls");//清空主界面 printf("\t*********************欢迎进入删除模块********************\n"); printf("\t请输入删除员工职工号:"); getchar(); scanf("%s",&id); Del(L,id);//按职工号删除 do { printf("\t是否继续删除?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { printf("\t请输入要删除员工职工号:"); getchar(); scanf("%s",&id); Del(L,id);//按职工号删除 } } while(m!='n'); printf("\t******************欢迎下次进入删除模块*******************\n"); break; case 8: system("cls"); printf("\t*********************欢迎进入保存模块********************\n"); Save(L);//保存数据 printf("\t职工信息保存成功!\n"); printf("\t******************欢迎下次进入保存模块*******************\n"); break; case 9: system ("cls");//清空主界面 x=0; printf("\t****************感谢您使用本系统,再见!*****************\n"); exit(0); default: printf("\t请输入正确序号!\n"); break; } } return 0; }3。head

#define OK 1 #define ERROR 0 struct employee { char id[20];//职工号 char name[20];//姓名 char sex[20];//性别 int age;//年龄 char edu[20];//学历 double salary;//工资 char phone[30];//电话 char address[30];//地址 }; //存储结构 typedef struct LNode { struct employee data; struct LNode* next; }LNode, *Linklist; void menu();//菜单函数 int Initlist(Linklist *L);//初始化单链表 int CreatList(Linklist L);//头插法生成单链表 void Display(Linklist L);//显示职工信息 void Search(Linklist L);//职工信息查询 int SearchID(Linklist L,char id[20]);//职工号查询 int SearchName(Linklist L,char name[10]);//姓名查询 void Sort(Linklist L);//职工信息排序 void SortID(Linklist L);//职工号排序 void SortName(Linklist L);//姓名排序 void SortSalary(Linklist L);//工资排序 int Ins(Linklist L, char id[20]);//插入信息 int Alter(Linklist L,char id[20]);//更改信息 int Del(Linklist L,char id[20]);//按职工号删除 void Save(Linklist L);//保存到文件 void Read(Linklist L);//读取信息

运行结果截图:

转载请注明原文地址: https://www.6miu.com/read-2250128.html

最新回复(0)