问题描述:每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。
选作内容:实现图形用户界面。
通过链表实现
数据结构:
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
#include
#include
#include
#include
using namespace std;
typedef 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;
}*Linklist,Lnode;
void frist_print()
{
printf("\t\t⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ \n\n");
printf("\t\t\t欢迎进入员工管理系统\n");
}
void menu()
{
printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("\t\t \t ◎1.创建员工信息\t \n");
printf("\t\t \t ◎2.插入员工信息\t \n");
printf("\t\t \t ◎3.修改员工信息\t \n");
printf("\t\t \t ◎4.删除员工信息\t \n");
printf("\t\t \t ◎5.查询员工信息\t \n");
printf("\t\t \t ◎6.员工信息排序\t \n");
printf("\t\t \t ◎7.显示员工信息\t \n");
printf("\t\t \t ◎8.员工工资情况\t \n");
printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("注意:输入均以回车作为结束\n");
printf("please choise 1--8:\t ");
//putchar(12);
}
void Inset(Linklist Head){
Linklist s,L;
unsigned int agee;
unsigned long wagee,numm;
unsigned long long telephonee;
char namee[15],genderr,departmentt[18];
if(Head==NULL){
Head=(Linklist)malloc(sizeof(Lnode));
Head->next=NULL;
}
L=Head;
cout<<" ----------请输入员工个人信息----------"<
s=(Linklist)malloc(sizeof(Lnode));
s->num=numm;
s->wage=wagee;
s->telephone=telephonee;
s->age=agee;
strcpy(s->name,namee);
s->gender=genderr;
strcpy(s->department,departmentt);
s->next=L->next;
L->next=s;
cout<<"插入成功!"<
Linklist Create(){
Linklist L,s;
int n;
unsigned int agee;
unsigned long wagee,numm;
unsigned long long telephonee;
char namee[15],genderr,departmentt[18];
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
cout<<"请输入成员总人数:";
cin>>n;
cout<<" ----------请输入员工个人信息----------"<
cin>>numm>>namee>>genderr>>agee>>departmentt>>wagee>>telephonee;
s=(Linklist)malloc(sizeof(Lnode));
s->num=numm;
s->wage=wagee;
s->telephone=telephonee;
s->age=agee;
strcpy(s->name,namee);
s->gender=genderr;
strcpy(s->department,departmentt);
s->next=L->next;
L->next=s;
n--;
}
cout<<"创建成功!"<
}
void Dellist(Linklist Head,int n){
Linklist p,q;
p=Head;
int flag=0;
while(p->next!=NULL){
q=p->next;
if(q->num==n){
flag=1;
break;
}
p=p->next;
}
if(flag){
q=p->next;
p->next=q->next;
free(q);
cout<<"删除成功!"<
else cout<<"删除失败!"<
int Change(Linklist Head,unsigned long int n){
Linklist p,q;
p=Head;
unsigned long long int flag=0,cc=0,ch;
char sf[30],sc;
while(p->next!=NULL){
p=p->next;
if(p->num==n){
flag=1;
break;
}
}
if(flag){
cout<<"查找成功!"<
if(cc==1){
cout<<"请输入修改后的姓名:";
cin>>sf;
strcpy(p->name,sf);
}
if(cc==2){
cout<<"请输入修改后的性别:";
cin>>sc;
p->gender=sc;
}
if(cc==3){
cout<<"请输入修改后的年龄:";
cin>>ch;
p->age=ch;
}
if(cc==4){
cout<<"请输入修改后的单位:";
cin>>sf;
strcpy(p->department,sf);
}
if(cc==5){
cout<<"请输入修改后的工资:";
cin>>ch;
p->wage=ch;
}
if(cc==6){
cout<<"请输入修改后的电话号:";
cin>>ch;
p->telephone=ch;
}
return 1;
}
return 0;
}
void Show(Linklist Head){
Linklist p;
p=Head;
if(p!=NULL&&p->next!=NULL){
cout<<"职工号 姓名 性别 年龄 单位 工资 电话号"<
p=p->next;
cout<
else
cout<<"空表,请填补信息后再操作!"<
void Showm(Linklist Head){
Linklist p;
p=Head;
double sum=0;
int nume=0;
if(p!=NULL&&p->next!=NULL){
cout<<"职工号 姓名 工资"<
p=p->next;
sum+=p->wage;nume++;
cout<
cout<<"平均工资:";
cout<
cout<<"空表,请填补信息后再操作!"<
void Search(Linklist Head){
unsigned long long int sea,sead,flag=0;
char seac[30];
Linklist p;
p=Head;
cout<<"请选择查找方式:1(职工号)、2(姓名)、3(电话号):";
cin>>sea;
if(sea==1){
cout<<"请输入该员工的职工号:";
cin>>sead;
while(p->next!=NULL){
p=p->next;
if(p->num==sead){
flag=1;
cout<<"查找成功!"<
}
}
}
if(sea==2){
cout<<"请输入该员工的姓名:";
cin>>seac;
while(p->next!=NULL){
p=p->next;
if(strcmp(p->name,seac)==0){
flag=1;
cout<<"查找成功!"<
}
}
}
if(sea==3){
cout<<"请输入该员工的电话号:";
cin>>sead;
while(p->next!=NULL){
p=p->next;
if(p->telephone==sead){
flag=1;
cout<<"查找成功!"<
}
}
}
if(!flag) cout<<"查找失败!"<
void swapp(Lnode* a,Lnode* b){
unsigned long long int tem;
char temm[30],tt;
tem=a->num;
a->num=b->num;
b->num=tem;
tem=a->age;
a->age=b->age;
b->age=tem;
tem=a->wage;
a->wage=b->wage;
b->wage=tem;
tem=a->telephone;
a->telephone=b->telephone;
b->telephone=tem;
strcpy(temm,a->name);
strcpy(a->name,b->name);
strcpy(b->name,temm);
strcpy(temm,a->department);
strcpy(a->department,b->department);
strcpy(b->department,temm);
tt=a->gender;
a->gender=b->gender;
b->gender=tt;
}
//找到分割点
Lnode* getSeparator_1(Lnode* pBegin,Lnode* pEnd){
Lnode* p = pBegin;
Lnode* q = pBegin->next;
int key = p->num;
while(q!=pEnd){
if(q->num < key){
p = p->next;
swapp(p,q);
}
q = q->next;
}
swapp(pBegin,p);
return p;
}
Lnode* getSeparator_2(Lnode* pBegin,Lnode* pEnd){
Lnode* p = pBegin;
Lnode* q = pBegin->next;
char key[30];
strcpy(key,p->name);
while(q!=pEnd){
if(strcmp(q->name,key)<0){
p = p->next;
swapp(p,q);
}
q = q->next;
}
swapp(pBegin,p);
return p;
}
Lnode* getSeparator_3(Lnode* pBegin,Lnode* pEnd){
Lnode* p = pBegin;
Lnode* q = pBegin->next;
int key = p->wage;
while(q!=pEnd){
if(q->wage < key){
p = p->next;
swapp(p,q);
}
q = q->next;
}
swapp(pBegin,p);
return p;
}
//快速排序
void fastSort_1(Lnode* pBegin,Lnode* pEnd){
if(pBegin != pEnd){
Lnode* separator = getSeparator_1(pBegin,pEnd);
fastSort_1(pBegin,separator);
fastSort_1(separator->next,pEnd);
}
}
void fastSort_2(Lnode* pBegin,Lnode* pEnd){
if(pBegin != pEnd){
Lnode* separator = getSeparator_2(pBegin,pEnd);
fastSort_2(pBegin,separator);
fastSort_2(separator->next,pEnd);
}
}
void fastSort_3(Lnode* pBegin,Lnode* pEnd){
if(pBegin != pEnd){
Lnode* separator = getSeparator_3(pBegin,pEnd);
fastSort_3(pBegin,separator);
fastSort_3(separator->next,pEnd);
}
}
void Sort(Linklist Head){
Linklist p;
p=Head;
int sad=0;
cout<<"请选择关键字排序:1(职工号)、2(姓名)、3(工资):"<
if(sad==1){
fastSort_1(p->next,NULL);
cout<<"排序成功!"<
if(sad==2){
fastSort_2(p->next,NULL);
cout<<"排序成功!"<
if(sad==3){
fastSort_3(p->next,NULL);
cout<<"排序成功!"<
}
int main()
{
int chol=0,num;
Linklist Lhead=NULL,p=NULL;
frist_print();
menu();
cin>>chol;
while(1){
switch(chol){
case 1:
Lhead=Create();
p=Lhead;
system("pause");
system("cls");
menu();
break;
case 2:
Inset(p);
system("pause");
system("cls");
menu();
break;
case 3:
cout<<"请输入要修改的员工编号:";
cin>>num;
Change(p,num);
system("pause");
system("cls");
menu();
break;
case 4:
cout<<"请输入要删除的员工编号:";
cin>>num;
Dellist(p,num);
system("pause");
system("cls");
menu();
break;
case 5:
Search(p);
system("pause");
system("cls");
menu();
break;
case 6:
Sort(p);
system("pause");
system("cls");
menu();
break;
case 7:
Show(p);
system("pause");
system("cls");
menu();
break;
case 8:
Showm(p);
system("pause");
system("cls");
menu();
break;
}
cin>>chol;
}
return 0;
}
/*
6
201521 城市化 y 23 技术部 300000 15648573763
201423 大数据 y 27 管理部 500000 15648675762
201628 好美丽 M 20 生活部 300000 15345436543
201522 很年轻 M 22 人工部 100000 18845335725
201422 真有钱 y 25 资金部 400000 15634675125
201523 差不多 y 24 后勤部 200000 18834534211
*/