![]() |
#2
lonmaor2012-06-10 19:30
|
后面的三个指针最好定义在联合体中,而且定义的结构还能使用stl中的list< >。

#include <iostream>
#include <string>
#include <list>
using namespace std;
typedef struct ZhiGong
{
char no[15];
char name[5];
char depno[15];
int salary;
ZhiGong *next;
union
{
ZhiGong *pno;
ZhiGong *pdeno;
ZhiGong *psalary;
}Zhizhen;
}zhig;
void shuru();//录入新员工信息
void shuchuall();//输出所有员工信息
void pailieno();//按职工号排序
void shuchuno();//按职工号全部输出
void pailiedepno();//按部门号排序
void shuchudepno();//按部门号全部输出
void pailiesalary();//按工资排序
void shuchusalary();//按工资全部输出
void clearall();//全部清除
void baocuntuichu();//保存并退出
void init(zhig *s)
{
s->next=NULL;
}
void shuru(zhig *s)
{
zhig *p;
p=new zhig;
cout<<"请输入职工号:";
cin>>p->no;
cout<<endl<<"请输入名字:";
cin>>p->name;
cout<<endl<<"请输入部门号:";
cin>>p->depno;
cout<<endl<<"请输入工资:";
cin>>p->salary;
p->next=s->next;
s->next=p;
}
void shuchuall(zhig *s)
{
zhig *q;
q=s->next;
while(q!=NULL)
{
cout<<"职工号:"<<q->no<<endl;
cout<<"姓名:"<<q->name<<endl;
cout<<"部门号:"<<q->depno<<endl;
cout<<"工资:"<<q->salary<<endl;
q=q->next;
}
cout<<endl;
}
void pailieno(zhig *s)
{
/*zhig *p,*r;
r=s;
p=s->next;
while(r->next!=NULL){
while(p->next!=NULL)
{
if(strcmp(r->next->no,p->next->no))
{
//
}
p=p->next;
}
r=r->next;
}*/
list<zhig> l(s);//在排序不分我想用stl中的函数,但不知道怎么用求教
l.sort();
}
int main()
{
zhig *s;
s=new zhig;
init(s);
cout<<"**************************************\n";
cout<<" 职工信息表\n";
cout<<"**************************************\n";
cout<<" 请输入相应的数字进行操作(0-9)\n";
cout<<" 1: 添加一个职工记录\n";
cout<<" 2: 输出全部职工记录\n";
cout<<" 3: 按职工号排序\n";
cout<<" 4: 按职工号全部输出\n";
cout<<" 5: 按部门号排序\n";
cout<<" 6: 按部门号全部输出\n";
cout<<" 7: 按工资排序\n";
cout<<" 8: 按工资全部输出\n";
cout<<" 9: 全部清除\n";
cout<<" 0: 保存并退出\n";
cout<<"**************************************\n";
int m=10;
while(m)
{
cout<<"请输入0-9的数字:";
cin>>m;
switch(m)
{
case 1:shuru(s);break;
case 2:shuchuall(s);break;
/*case 3:pailieno();break;
case 4:shuchuno();break;
case 5:pailiedepno();break;
case 6:shuchudepno();break;
case 7:pailiesalary();break;
case 8:shuchusalary();break;
case 9:clearall();break;
case 0:baocuntuichu();break;*/
}
}
return 0;
}
在排序部份我想用stl中的排序函数(sort)进行排序,但不知道怎么用求教.急!#include <string>
#include <list>
using namespace std;
typedef struct ZhiGong
{
char no[15];
char name[5];
char depno[15];
int salary;
ZhiGong *next;
union
{
ZhiGong *pno;
ZhiGong *pdeno;
ZhiGong *psalary;
}Zhizhen;
}zhig;
void shuru();//录入新员工信息
void shuchuall();//输出所有员工信息
void pailieno();//按职工号排序
void shuchuno();//按职工号全部输出
void pailiedepno();//按部门号排序
void shuchudepno();//按部门号全部输出
void pailiesalary();//按工资排序
void shuchusalary();//按工资全部输出
void clearall();//全部清除
void baocuntuichu();//保存并退出
void init(zhig *s)
{
s->next=NULL;
}
void shuru(zhig *s)
{
zhig *p;
p=new zhig;
cout<<"请输入职工号:";
cin>>p->no;
cout<<endl<<"请输入名字:";
cin>>p->name;
cout<<endl<<"请输入部门号:";
cin>>p->depno;
cout<<endl<<"请输入工资:";
cin>>p->salary;
p->next=s->next;
s->next=p;
}
void shuchuall(zhig *s)
{
zhig *q;
q=s->next;
while(q!=NULL)
{
cout<<"职工号:"<<q->no<<endl;
cout<<"姓名:"<<q->name<<endl;
cout<<"部门号:"<<q->depno<<endl;
cout<<"工资:"<<q->salary<<endl;
q=q->next;
}
cout<<endl;
}
void pailieno(zhig *s)
{
/*zhig *p,*r;
r=s;
p=s->next;
while(r->next!=NULL){
while(p->next!=NULL)
{
if(strcmp(r->next->no,p->next->no))
{
//
}
p=p->next;
}
r=r->next;
}*/
list<zhig> l(s);//在排序不分我想用stl中的函数,但不知道怎么用求教
l.sort();
}
int main()
{
zhig *s;
s=new zhig;
init(s);
cout<<"**************************************\n";
cout<<" 职工信息表\n";
cout<<"**************************************\n";
cout<<" 请输入相应的数字进行操作(0-9)\n";
cout<<" 1: 添加一个职工记录\n";
cout<<" 2: 输出全部职工记录\n";
cout<<" 3: 按职工号排序\n";
cout<<" 4: 按职工号全部输出\n";
cout<<" 5: 按部门号排序\n";
cout<<" 6: 按部门号全部输出\n";
cout<<" 7: 按工资排序\n";
cout<<" 8: 按工资全部输出\n";
cout<<" 9: 全部清除\n";
cout<<" 0: 保存并退出\n";
cout<<"**************************************\n";
int m=10;
while(m)
{
cout<<"请输入0-9的数字:";
cin>>m;
switch(m)
{
case 1:shuru(s);break;
case 2:shuchuall(s);break;
/*case 3:pailieno();break;
case 4:shuchuno();break;
case 5:pailiedepno();break;
case 6:shuchudepno();break;
case 7:pailiesalary();break;
case 8:shuchusalary();break;
case 9:clearall();break;
case 0:baocuntuichu();break;*/
}
}
return 0;
}