员工管理系统

xiaoxiao2021-02-28  97

【员工管理系统】

问题描述:每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。

基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。

选作内容:实现图形用户界面。

通过链表实现

数据结构:

struct workers

{

     char name[15];//姓名

char  department[18];//单位

char gender;//性别

     unsigned int age;//年龄

      unsigned long telephone;//电话

unsigned long wage;//工资

unsigned long num;//职工号

     struct workers *next;

};

操作实现:

/*插入职工信息,通过链表实现  */

/*具体实现职工信息的插入*/

/*对职工信息的删除操作*/

/*修改操作*/

/*实现对员工信息的查找*/

/*排序*/

/* 输出员工信息 */

/* 显示职工工资情况 计算平均工资  */

#include<stdio.h> #include<stdlib.h> #include<string.h> #include <iostream> using namespace std; struct workers { char name[15];//姓名 char department[18];//单位 char gender;//性别 unsigned int age;//年龄 unsigned long long telephone;//电话 unsigned long wage;//工资 unsigned long num;//职工号 struct workers *next; char xueli[20];//学历 char zhiwu[20];//职务 char zhuzhi[20];//住址 workers operator=(workers &b) { strcpy(name,b.name); strcpy(department,b.department); strcpy(xueli,b.xueli); strcpy(zhiwu,b.zhiwu); strcpy(zhuzhi,b.zhuzhi); age=b.age; num=b.num; wage=b.wage; gender=b.gender; telephone=b.telephone; } }; workers *creat_list(workers *head,int n)//创建一个长度为n的链表 { workers *p,*q; int i; q=head; for(i=0; i<n; i++) { p=(workers *)malloc(sizeof(workers));//开辟一个新结点 if(p!=NULL) { q->next=p; q=p; } } p->next=NULL; return head;//返回头指针,这样就可以对链表进行操作 } void output(workers *head)//输出函数,从链表头部输到尾部 { workers *p=head; if(head->next==NULL) {printf("链表为空!\n");return;} else { cout<<"现存员工信息为:\n"; printf("姓名 单位 性别 年龄 电话"); printf(" 工资 职工号 学历 职务 住址\n"); while(1) { p=p->next; printf("%-15s ",p->name); printf("%-20s ",p->department); printf(" %c ",p->gender); printf("%-5d ",p->age); printf("%-13lld ",p->telephone); printf("%-6ld ",p->wage); printf("%-12ld ",p->num); printf("%-15s ",p->xueli); printf("%-15s ",p->zhiwu); printf("%-15s ",p->zhuzhi); printf("\n"); if(p->next==NULL) break; } } } void input(workers *head,int n)//输入员工信息 { workers *p=head->next; while(n>0) { cout<<"\n输入员工姓名: ";cin>>p->name; cout<<"输入员工单位: ";cin>>p->department; cout<<"输入员工职务: ";cin>>p->zhiwu; cout<<"输入员工性别: ";cin>>p->gender; cout<<"输入员工年龄: ";cin>>p->age; cout<<"输入员工电话: ";cin>>p->telephone; cout<<"输入员工工资: ";cin>>p->wage; cout<<"输入员工职工号: ";cin>>p->num; cout<<"输入员工学历: ";cin>>p->xueli; cout<<"输入员工住址: ";cin>>p->zhuzhi; //system("pause"); cout<<endl; p=p->next; n--; } } workers *shanchu(workers *head,unsigned long num)//按照职工号删除 { workers temp; workers *p=head->next,*q,*ans=head; if(p->num==num) head->next=p->next; else for(p=head->next;p->next!=NULL;p=p->next) { if(p->next->num==num) { q=p->next->next; p->next=q; break; } } cout<<"删除成功\n"; return ans; } void Sortbyage(workers *head)//排序函数,年龄升序 { workers temp; workers *p,*q,*max; for(p=head->next;p->next!=NULL;p=p->next) { max=p; for(q=p->next;q!=NULL;q=q->next) if(q->age< max->age) max=q; if(max!=p) //交换结点的数据域内容,指针内容没变。 { temp=*p; *p=*max; *max=temp; } } } void SortbyWage(workers *head)//排序函数,工资升序 { workers temp; workers *p,*q,*max; for(p=head->next;p->next!=NULL;p=p->next) { max=p; for(q=p->next;q!=NULL;q=q->next) if(q->wage <max->wage) max=q; if(max!=p) //交换结点的数据域内容,指针内容没变。 { temp=*p; *p=*max; *max=temp; } } } void SortbyNum(workers *head)//排序函数,工号升序 { workers temp; workers *p,*q,*max; for(p=head->next;p->next!=NULL;p=p->next) { max=p; for(q=p->next;q!=NULL;q=q->next) if(q->num< max->num) max=q; if(max!=p) //交换结点的数据域内容,指针内容没变。 { temp=*p; *p=*max; *max=temp; } } } void SearchbyNum(workers *head,unsigned long num)//按职工号查询,职工号唯一 { workers *p=head; int f=0; while(1) { p=p->next; if(p->num==num) { f=1; printf("%-15s ",p->name); printf("%-20s ",p->department); printf(" %c ",p->gender); printf("%d ",p->age); printf("%lld ",p->telephone); printf("%ld ",p->wage); printf("%ld ",p->num); printf("%-15s ",p->xueli); printf("%-15s ",p->zhiwu); printf("%-15s ",p->zhuzhi); printf("\n");break;} if(p->next==NULL) break; }if(f==0)cout<<"查无此人\n"; } bool check(workers *head,unsigned long num) { workers *p=head; while(1) { p=p->next; if(p->num==num) return true; if(p->next==NULL) break; } return false; } void SearchbyName(workers *head,char name[20])//按名字查询,可查重名的 { workers *p=head; int f=0; while(1) { p=p->next; if(strcmp(p->name,name)==0) { f=1; printf("%-15s ",p->name); printf("%-20s ",p->department); printf(" %c ",p->gender); printf("%d ",p->age); printf("%lld ",p->telephone); printf("%ld ",p->wage); printf("%ld ",p->num); printf("%-15s ",p->xueli); printf("%-15s ",p->zhiwu); printf("%-15s ",p->zhuzhi); printf("\n");} if(p->next==NULL) break; } if(f==0)cout<<"查无此人\n"; } void charu(workers *head) { workers *p=(workers *)malloc(sizeof(workers)); workers *q=head->next; head->next=p; p->next=q; cout<<"\n输入员工姓名: ";cin>>p->name; cout<<"输入员工单位: ";cin>>p->department; cout<<"输入员工职务: ";cin>>p->zhiwu; cout<<"输入员工性别: ";cin>>p->gender; cout<<"输入员工年龄: ";cin>>p->age; cout<<"输入员工电话: ";cin>>p->telephone; cout<<"输入员工工资: ";cin>>p->wage; cout<<"输入员工职工号: ";cin>>p->num; cout<<"输入员工学历: ";cin>>p->xueli; cout<<"输入员工住址: ";cin>>p->zhuzhi; cout<<"插入完成\n"; } void xiugai(workers *head,unsigned long num) { SearchbyNum(head,num); shanchu(head,num); charu(head); } void title() { printf("*****************员工管理系统********************\n"); printf("* *\n"); printf("* 功能说明: *\n"); printf("* 按下 0 输出员工信息 *\n"); printf("* 按下 1 新建一个链表存储员工信息 *\n"); printf("* 按下 2 按照职工号查询员工信息 *\n"); printf("* 按下 3 按照 姓名 查询员工信息 *\n"); printf("* 按下 4 按照职工号删除员工信息 *\n"); printf("* 按下 5 按照职工号对员工信息进行排序 *\n"); printf("* 按下 6 按照 年龄 对员工信息进行排序 *\n"); printf("* 按下 7 按照 工资 对员工信息进行排序 *\n"); printf("* 按下 8 输入工号可对员工信息进行修改 *\n"); printf("* 按下 9 可新增一个员工的信息 *\n"); printf("* 按下 10 退出系统 *\n"); printf("* *\n"); printf("*************************************************\n"); } void solve() { workers *head=(workers *)malloc(sizeof(workers)); head->next=NULL; int m; while(1) { title(); int n; cin>>n; int flag=0; switch(n) { case 0:output(head);break; case 1:cout<<"请输入要存储的员工信息的个数\n";cin>>m;creat_list(head,m);input(head,m);break; case 2:cout<<"请输入要查询的工号\n";int num;cin>>num;SearchbyNum(head,num);break; case 3:cout<<"请输入要查询的姓名\n";char name[20];cin>>name;SearchbyName(head,name);break; case 4:cout<<"请输入要删除的职工号\n";unsigned long hao;cin>>hao;if(check(head,hao))shanchu(head,hao);else cout<<"查无此人\n";break; case 5:cout<<"按照职工号对员工信息进行排序后结果如下:\n";SortbyNum(head);output(head);break; case 6:cout<<"按照 年龄 对员工信息进行排序后结果如下:\n";Sortbyage(head);output(head);break; case 7:cout<<"按照 工资 对员工信息进行排序后结果如下:\n";SortbyWage(head);output(head);break; case 8:cout<<"请输入要修改信息的员工的职工号\n";int aaa;cin>>aaa;xiugai(head,aaa);break; case 9:cout<<"新增一个员工信息\n";charu(head);break; case 10:flag=1;break; default: cout<<"输入有误,重新输入\n"; } if(flag==1)break; } } int main() { solve(); return 0; }

测试数据:

5 zhangsan jiaowuchu zhuzhen m 39 18846795237 5000 11101 shuoshi jiashuqu#1*1 lisi bangongshi zhiyuan f 32 18846789454 4500 11505 benke jiashuqu#2*8 wangwu yanjiushi caozuoyuan f 28 18867887854 4750 11809 benke jiashuqu#3*5 zhaoliu baoweichu baoan m 42 18564973854 3750 11209 gaozhong jiashuqu#7*4 zhangsan jiaowuchu chuzhang m 45 13345671238 6600 11001 yanjiusheng jiashuqu#4*3

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

最新回复(0)