#include<iostream> #include<fstream> #include<string> #include<iomanip> using namespace std; typedef struct node { int no,deno,salary; string name; node *pno,*depno,*psalary,*next; }*ptrn; int length(ptrn &e) { int count=0; ptrn temm; temm=e; while(temm!=0) { count++; temm=temm->next; } return count; } void main() { ifstream inf("salary.dat",ifstream::out|ifstream::app); string no1,name1,depart,salary1; int time=0; ptrn head,temp,newnode; head=0; while(!inf.eof()) { inf>>no1>>name1>>depart>>salary1; if(time==0) { time=1; continue; } newnode=new node; newnode->no=atoi(no1.c_str()); newnode->name=name1; newnode->deno=atoi(depart.c_str()); newnode->salary=atoi(salary1.c_str()); if(head==0) { head=newnode; temp=newnode; } else { temp->next=newnode; temp=newnode; } } if(head)temp->next=0; inf.close(); cout<<" | (1)添加职工信息 |"<<endl; cout<<" | (2)输出所有信息 |"<<endl; cout<<" | (3)按职工号输出 |"<<endl; cout<<" | (4)按部门号输出 |"<<endl; cout<<" | (5)按工资输出 |"<<endl; cout<<" | (6)清空职员信息 |"<<endl; cout<<" | (7)退出 |"<<endl; cout<<"___________________________________________________________________"<<endl; while(1) { cout<<" 请输入序号 "<<endl; int m; cin>>m; if(m==1) { cout<<"请按照职员号------姓名-------部门号-------工资的顺序输入"<<endl; if(head) { newnode=new node; cin>>newnode->no>>newnode->name>>newnode->deno>>newnode->salary; temp->next=newnode; temp=newnode; } else { newnode=new node; cin>>newnode->no>>newnode->name>>newnode->deno>>newnode->salary; head=newnode; temp=newnode; } temp->next=0; ofstream ouf1("salary.dat"); ouf1<<std::left<<setw(10)<<"职工号"<<std::right<<setw(6)<<"姓--名"<<std::right<<setw(10)<<"部门号"<<std::right<<setw(10)<<"工--资"<<endl; ptrn tepp; tepp=head; while(tepp!=0) { ouf1<<std::left<<setw(10)<<tepp->no<<std::right<<setw(6)<<tepp->name<<std::right<<setw(10)<<tepp->deno<<std::right<<setw(10)<<tepp->salary<<endl; tepp=tepp->next; } ouf1.close(); cout<<"___________________________________________________________________"<<endl; } else if(m==2) { if(head==0) cout<<" 无信息"<<endl; else { ptrn tem; tem=head; cout<<std::left<<setw(10)<<"职工号"<<std::right<<setw(6)<<"姓--名"<<std::right<<setw(10)<<"部门号"<<std::right<<setw(10)<<"工--资"<<endl; while(tem!=0) { cout<<std::left<<setw(10)<<tem->no<<std::right<<setw(6)<<tem->name<<std::right<<setw(10)<<tem->deno<<std::right<<setw(10)<<tem->salary<<endl; tem=tem->next; } } cout<<"___________________________________________________________________"<<endl; } else if(m==3) { int mm=0; mm=length(head); for(int i=0;i<mm;i++) { ptrn te; te=head; for(int j=0;j<mm-i-1;j++) { if(te->no>te->next->no) { ptrn newnode1; newnode1=new node; newnode1->no=te->next->no; newnode1->name=te->next->name; newnode1->deno=te->next->deno; newnode1->salary=te->next->salary; te->next->no=te->no; te->next->name=te->name; te->next->deno=te->deno; te->next->salary=te->salary; te->no=newnode1->no; te->name=newnode1->name; te->deno=newnode1->deno; te->salary=newnode1->salary; } te=te->next; } } ptrn tem1,tem2; tem2=head; cout<<std::left<<setw(10)<<"职工号"<<std::right<<setw(6)<<"姓--名"<<std::right<<setw(10)<<"部门号"<<std::right<<setw(10)<<"工--资"<<endl; while(tem2!=0) { tem1=new node; tem1->no=tem2->no; tem1->name=tem2->name; tem1->deno=tem2->deno; tem1->salary=tem2->salary; tem1->pno=0; cout<<std::left<<setw(10)<<tem1->no<<std::right<<setw(6)<<tem1->name<<std::right<<setw(10)<<tem1->deno<<std::right<<setw(10)<<tem1->salary<<endl; tem1=tem1->pno; tem2=tem2->next; } cout<<"___________________________________________________________________"<<endl; } else if(m==4) { int mm=0; mm=length(head); for(int i=0;i<mm;i++) { ptrn te; te=head; for(int j=0;j<mm-i-1;j++) { if(te->deno>te->next->deno) { ptrn newnode1; newnode1=new node; newnode1->no=te->next->no; newnode1->name=te->next->name; newnode1->deno=te->next->deno; newnode1->salary=te->next->salary; te->next->no=te->no; te->next->name=te->name; te->next->deno=te->deno; te->next->salary=te->salary; te->no=newnode1->no; te->name=newnode1->name; te->deno=newnode1->deno; te->salary=newnode1->salary; } te=te->next; } } ptrn tem1,tem2; tem2=head; cout<<std::left<<setw(10)<<"职工号"<<std::right<<setw(6)<<"姓--名"<<std::right<<setw(10)<<"部门号"<<std::right<<setw(10)<<"工--资"<<endl; while(tem2!=0) { tem1=new node; tem1->no=tem2->no; tem1->name=tem2->name; tem1->deno=tem2->deno; tem1->salary=tem2->salary; tem1->depno=0; cout<<std::left<<setw(10)<<tem1->no<<std::right<<setw(6)<<tem1->name<<std::right<<setw(10)<<tem1->deno<<std::right<<setw(10)<<tem1->salary<<endl; tem1=tem1->depno; tem2=tem2->next; } cout<<"___________________________________________________________________"<<endl; } else if(m==5) { int mm=0; mm=length(head); for(int i=0;i<mm;i++) { ptrn te; te=head; for(int j=0;j<mm-i-1;j++) { if(te->salary>te->next->salary) { ptrn newnode1; newnode1=new node; newnode1->no=te->next->no; newnode1->name=te->next->name; newnode1->deno=te->next->deno; newnode1->salary=te->next->salary; te->next->no=te->no; te->next->name=te->name; te->next->deno=te->deno; te->next->salary=te->salary; te->no=newnode1->no; te->name=newnode1->name; te->deno=newnode1->deno; te->salary=newnode1->salary; } te=te->next; } } ptrn tem1,tem2; tem2=head; cout<<std::left<<setw(10)<<"职工号"<<std::right<<setw(6)<<"姓--名"<<std::right<<setw(10)<<"部门号"<<std::right<<setw(10)<<"工--资"<<endl; while(tem2!=0) { tem1=new node; tem1->no=tem2->no; tem1->name=tem2->name; tem1->deno=tem2->deno; tem1->salary=tem2->salary; tem1->psalary=0; cout<<std::left<<setw(10)<<tem1->no<<std::right<<setw(6)<<tem1->name<<std::right<<setw(10)<<tem1->deno<<std::right<<setw(10)<<tem1->salary<<endl; tem1=tem1->psalary; tem2=tem2->next; } cout<<"___________________________________________________________________"<<endl; } else if(m==6) { ofstream ouf5("salary.dat"); ouf5<<std::left<<setw(10)<<"职工号"<<std::right<<setw(6)<<"姓--名"<<std::right<<setw(10)<<"部门号"<<std::right<<setw(10)<<"工--资"<<endl; ouf5.close(); cout<<" 已清空"<<endl; cout<<"___________________________________________________________________"<<endl; } else break; } }