职工综合信息管理系统
要求:设计一个程序来管理职工较全面数据信息,具备数据的输入、查找、删除等功能。具体功能细节可以根据自己理解情况进行增加。
# include <iostream.h>
# include <string.h>
# include <iomanip>
# define max 1000 //定义最大的数组下标
# define NULL 0 //定义NULL为0
typedef struct node //定义员工结构体
{
char num[10]; //工号
char name[10]; //姓名
char sex[4]; //性别
char age[4]; //年龄
char degree[20]; //学历
char wage[20]; //工资
char telnum[20]; //电话
char address[100]; //住址
node *next; //指针域
}employ;
void Create(employ *L,int m) //创建函数
{
char num[10],name[10],sex[4],age[4],degree[20],wage[20],telnum[20],address[100];//定义编号,姓名,性别,出生年月,学历,职务,电话,住址
int i=0,j=0,k=0;
employ *M;
while(i<m) //m为输入员工的个数
{
cout<<"请输入第"<<i <<"名员工的信息(用TAB分隔):"<<endl;
cout<<"-----------------------------------------------------------------------------"<<endl;
cout<<"工号 姓名 性别 年龄 学历 工资 电话 住址"<<endl;
cout<<"-----------------------------------------------------------------------------"<<endl;
cin>>num;
cin>>name;
cin>>sex;
cin>>age;
cin>>degree;
cin>>wage;
cin>>telnum;
cin>>address;
M=(employ *)malloc(sizeof(employ)); //分配内存给该结点
strcpy(M->num,num); //将姓名值赋给新结点的姓名
strcpy(M->name,name); //将工号值赋给新结点的编号
strcpy(M->sex,sex); //将性别值赋给新结点的性别
strcpy(M->age,age); //将年龄值赋给新结点的年龄
strcpy(M->degree,degree); //将学历值赋给新结点的学历
strcpy(M->wage,wage); //将工资值赋给新结点的工资
strcpy(M->telnum,telnum); //将电话值赋给新结点的电话
strcpy(M->address,address); //将住址值赋给新结点的住址
M->next=NULL; //新结点的指针域置为空
L->next=M; //将新结点链到单链表上
L=M; //指向新结点
i++ ;
}
}
void Display(employ *L) //显示函数
{ cout<<"-------------------------------------------------"<<endl;
cout<<"工号 姓名 性别 年龄 学历 工资 电话 住址"<<endl;
while(L->next!=NULL)
{
L=L->next;
cout<<L->num<<" "; //输出工号,姓名,性别,年龄,学历,工资,电话,住址
cout<<L->name<<" ";
cout<<L->sex<<" ";
cout<<L->age<<" ";
cout<<L->degree<<" ";
cout<<L->wage<<" ";
cout<<L->telnum<<" ";
cout<<L->address<<endl;
}
cout<<"------------------------------------------------"<<endl;
if(L->next=NULL)
cout<<"当前没有任何员工的信息!"<<endl;
}
void Show(employ *L) //显示某一个结点函数
{
cout<<"-------------------------------------------------"<<endl;
cout<<"工号 姓名 性别 年龄 学历 工资 电话 住址"<<endl;
cout<<L->num<<" "; //输出工号,姓名,性别,年龄,学历,工资,电话,住址
cout<<L->name<<" ";
cout<<L->sex<<" ";
cout<<L->age<<" ";
cout<<L->degree<<" ";
cout<<L->wage<<" ";
cout<<L->telnum<<" ";
cout<<L->address<<endl;
cout<<"------------------------------------------------"<<endl;
}
void Search(employ *L) //查询函数
{
char num[10],name[10],telnum[20];
employ *p;
p=L; //p指向头结点
int x;
while(1)
{
cout<<"1.按工号查找 2.按姓名查找"<<endl;
cout<<"3.按电话号码查找 4.退出"<<endl;
cout<<"请选择:(1,2,3,4,)"<<endl;
cin>>x;
L=L->next; //指向第一个结点
if(x==1)
{
cout<<"请输入要查找员工的工号:"<<endl;
cin>>num;
while(L!=NULL)
{
if(strcmp(L->num,num)==0)
{
Show(L); //显示该结点信息
break;
}
else L=L->next;
}
if(L==NULL)
cout<<"不存在该员工的信息,请重新输入:"<<endl;
L=p; //指回头结点
}
else if(x==2)
{
cout<<"请输入要查找员工的姓名:"<<endl;
cin>>name;
while(L!=NULL)
{
if(strcmp(L->name,name)==0)
{
Show(L);
break;
}
else L=L->next;
}
if(L==NULL)
cout<<"不存在该员工的信息,请重新输入:"<<endl;
L=p; //指回头结点
}
else if(x==3)
{
cout<<"请输入要查找员工的电话号码:"<<endl;
cin>>telnum;
while(L!=NULL)
{
if(strcmp(L->telnum,telnum)==0)
{
Show(L); //显示该结点信息
break;
}
else L=L->next;
}
if(L==NULL)
cout<<"查无此人,请重新输入:"<<endl;
L=p;
}
else if(x==4)
break;
else
cout<<"你输入的为非法字符,请重新输入:"<<endl;
}
}
void Update(employ *L) //修改函数
{
char num[10];
int x;
char name[10],sex[4],age[4],degree[20],wage[20],telnum[20],address[100];
cout<<"请输入要更新员工的工号:"<<endl;
cin>>num;
L=L->next;
while(L!=NULL)
{
if(strcmp(L->num,num)==0)
{
Show(L);
break;
}
else L=L->next;
}
if(L==NULL)
cout<<"查无此人,请重新输入:"<<endl;
else
{
while(1)
{
cout<<"1.更新数据 2.退出"<<endl;
cout<<"请选择:(1,2)"<<endl;
cin>>x;
if(x==1)
{
cout<<"请输入新数据:"<<endl;;
cin>>num; //输入工号
cin>>name; //输入姓名
cin>>sex; //输入性别
cin>>age; //输入年龄
cin>>degree; //输入学历
cin>>wage; //输入工资
cin>>telnum; //输入电话
cin>>address; //输入住址
strcpy(L->num,num); //将姓名值赋给新结点的姓名
strcpy(L->name,name); //将工号值赋给新结点的工号
strcpy(L->sex,sex); //将性别值赋给新结点的性别
strcpy(L->age,age); //将年龄值赋给新结点的年龄
strcpy(L->degree,degree); //将学历值赋给新结点的学历
strcpy(L->wage,wage); //将工资值赋给新结点的工资
strcpy(L->telnum,telnum); //将电话值赋给新结点的电话
strcpy(L->address,address);//将住址值赋给新结点的住址
cout<<"更新后的数据为:"<<endl;
Show(L);
}
else if(x==2) break;
else
cout<<"你输入的为非法字符,请重新输入:"<<endl;
}
}
}
void Delete(employ *L)//删除函数
{
char num[10];
int x;
employ *p,*q,*w;
cout<<"请输入要删除员工的工号:"<<endl;
cin>>num;
w=L;
L=L->next;
while(L!=NULL)
{
if(strcmp(L->num,num)==0)
{
Show(L);
break;
}
else
{
w=L;
L=L->next;
}
}
if(L==NULL)
cout<<"查无此人,请重新输入:"<<endl;
else
{
p=w;
while(1)
{
cout<<"1.删除数据 2.退出 "<<endl;
cout<<"请选择:(1,2)"<<endl;
cin>>x;
if(x==1)
{
q=p->next;
p->next=q->next;
free(q);
break;
}
else if(x==2)
break;
else
cout<<"你输入的为非法字符,请重新输入:"<<endl;
}
}
}
int main()
{
int x,m;
employ *L; //建立新结点,并分配内存空间
L=(employ *)malloc(sizeof(employ));
L->next=NULL;
cout<<" * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<" * *"<<endl;
cout<<" * 欢 迎 进 入 员 工 管 理 系 统 *"<<endl;
cout<<" * *"<<endl;
cout<<" * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
while(1)
{
cout<<" --------------------------------------------------- "<<endl;
cout<<" | 1.创 建 2.查 询 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 3.修 改 4.显 示 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 5.删 除 6.退 出 |"<<endl;
cout<<" | |"<<endl;
cout<<" --------------------------------------------------- "<<endl;
cout<<"请选择:";
cin>>x;
if(x==1)
{
cout<<"请输入员工数目:"<<endl;
cin>>m;
Create(L,m);
}
else if(x==2)
{
if(L->next==NULL)
cout<<"当前没有任何员工的信息,不能进行查询!"<<endl;
else
Search(L);
}
else if(x==3)
{
if(L->next==NULL)
cout<<"当前没有任何员工的信息,不能进行修改!"<<endl;
else
Update(L);//调用修改函数
}
else if(x==4)
{
if(L->next==NULL)
cout<<"当前没有任何员工的信息!"<<endl;
else
{
cout<<"该员工管理系统的所有信息:"<<endl;
Display(L); //显示函数
}
}
else if(x==5)
{
if(L->next==NULL)
cout<<"当前没有任何员工的信息,不能进行删除!"<<endl;
else
Delete(L); //删除函数
}
else if(x==6)
{
cout<<" ·*·*·*·*·*·*·谢谢您的使用!!·*·*·*·*·*·"<<endl;
break;
}
else
cout<<"您输入的为非法字符,请重新输入:"<<endl;
}
return 0;
}
程序界面:
查询、修改、显示及删除功能均要有员工信息才可以使用。
增加员工信息:
输入信息之后就可以使用查询功能了。
查询功能:
查询功能可以通过工号、姓名、电话号码查询员工信息,当然也可以选择其他查找方式,因为不太清楚员工究竟实际用到哪些信息,这里就找最常用的意思意思下,可以按实际情况于源程序中添加更精确的查找功能。
修改员工信息:
显示所有员工信息:
可以看到上面的修改功能正常运作,也可以显示所有的员工信息了
删除功能:
删除该员工信息后到显示所有员工信息里确认,确实把员工删除了