分类: C/C++
2010-08-24 10:13:56
//希望对你有帮助.这个不是我自己写的,是搜集的别人的,写的不错,可以运行。 /************************************************** 内容及要求: 1注册新职工,添加新职工的详细信息, 如:职工号,姓名,出生年份,性别,职称,部门,工资等; 2按姓名,部门等条件进行查询; 3修改和删除职工信息; 4按工资高低进行排序; 5把各项纪录存储在文本文件中。 评说:有删除和增加的操作,最好选取链表来做。 **************************************************/ #include#include #include #include #include #include #include #include using namespace std; struct Employee {//声明职工的结构作为链表节点。 //-----数据域----- string m_Code; string m_Name; unsigned short int m_Year; string m_Sex; string m_Post; string m_Department; unsigned int m_Wage; //链表节点的指针域--- struct Employee* Next; }; //-----个人习惯:取别名------- typedef struct Employee Node; typedef Node* Link; //-------函数声明------------- Link Create(Link Head); void Release(Link Head); Link Add(Link Head); bool Search(Link Head); Link Search_Unique(Link Head); void Display_List(Link Head); void Display_Node(Link pNode); Link Modify(Link Head); Link Del(Link Head); void Save_ByFile(Link Head,fstream& ofile); Link Sort(Link Head); //-------函数实现-------------------------- Link Create(Link Head) {//创建一个带头节点的空链表。 Head=(Link)new Node; if(!Head) { cout<<"分配内存失败!"< m_Code=""; Head->m_Name=""; Head->m_Year=0; Head->m_Sex=""; Head->m_Post=""; Head->m_Department=""; Head->m_Wage=0; Head->Next=NULL; return Head; } void Release(Link Head) {//释放链表。 Link ptr;//声明一个操作用的指针。 while(Head!=NULL) { ptr=Head; Head=Head->Next; delete ptr;//释放节点资源。 } } Link Add(Link Head) {//前插法添加数据。 Link pNew;// 声明一个新节点。 char again; string code,name,sex,post,department; unsigned short int year; unsigned int wage; do { pNew=(Link)new Node; //数据域。 cout<<"请输入职工代码:"; cin>>code; cout< >name; cout< >year; while(cin.fail()) { cout<<"请输入正确的年份格式。"< >year; } cout< >sex; cout< >post; cout< >department; cout< >wage; while(cin.fail()) { cout<<"请输入正确的工资数据。"< >wage; } cout< m_Code=code; pNew->m_Name=name; pNew->m_Year=year; pNew->m_Sex=sex; pNew->m_Post=post; pNew->m_Department=department; pNew->m_Wage=wage; //指针域。 pNew->Next=Head->Next; Head->Next=pNew; cout<<"数据添加成功!是否继续添加?(Y/N)"< >again; }while(again=='Y'||again=='y'); return Head; } bool Search(Link Head) {//查询同时满足“姓名”和“部门”的职工信息。 Link ptr; string department; string name; ptr=Head->Next; cout<<"请输入部门:"; cin>>department; cout< >name; cout< m_Name==name)&&(ptr->m_Department==department)) { Display_Node(ptr);//打印满足条件的节点。 return true; } ptr=ptr->Next;//查询下一节点。 } cout<<"无此职工的信息。"< >code; cout< Next) { if(ptr->Next->m_Code==code) //Display_Node(ptr);//打印满足条件的节点。 return ptr;//注意,是返回的查询到的节点的直接前趋节点。 ptr->Next=ptr->Next->Next;//查询下一节点。 } return ptr; } void Display_List(Link Head) { Link ptr; ptr=Head->Next; cout<<"==================所有职工信息=================="< Next; } } void Display_Node(Link pNode) {//在标准输出设备上输出。 cout< m_Code < m_Name < m_Year < m_Sex < m_Post < m_Department < m_Wage< Next) { cout<<"-------你现在可以修改此职工的信息了-------"< >code; cout< >name; cout< >year; while(cin.fail()) { cout<<"请输入正确的年份格式。"< >year; } cout< >sex; cout< >post; cout< >department; cout< >wage; while(cin.fail()) { cout<<"请输入正确的工资数据。"< >wage; } cout< Next->m_Code=code;//因ptr是前趋节点,所以要用ptr->Next; ptr->Next->m_Name=name; ptr->Next->m_Year=year; ptr->Next->m_Sex=sex; ptr->Next->m_Post=post; ptr->Next->m_Department=department; ptr->Next->m_Wage=wage; } cout<<"没找到此职工的记录,无法修改。"< Next; if(ptr) { ptr_front->Next=ptr->Next; delete ptr;//删除此节点。 } cout<<"没找到此职工的记录,无法删除。"< Next; ofile.clear();//清除文件结束状态。 while(pNode) { ofile< m_Code < m_Name < m_Year < m_Sex < m_Post < m_Department < m_Wage< Next; } cout<<"数据文件保存成功!"< Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。 { cout<<"数据节点数少于2个,不用排序!"< Next->Next; ptr_F=Head; Head->Next->Next=NULL;//到此,分成了两个链表。 //第三步。 while(ptr) { ptr_N=ptr->Next; ptr_F=Head;//ptr_F的归位。 while(ptr_F->Next) { if(ptr->m_Wage>ptr_F->Next->m_Wage) { ptr->Next=ptr_F->Next; ptr_F->Next=ptr; break; }//if else { ptr_F=ptr_F->Next; } }//while(ptr_F->Next) if(ptr_F->Next==NULL) { ptr->Next=ptr_F->Next; ptr_F->Next=ptr;//表示插到有序链表的最后面了。 } ptr=ptr_N;//归位,准备下一次排序。 }//while(ptr) cout<<"从高到低,排序成功!"< >menu; while(cin.fail()) { cout<<"请选择正确的菜单选项。"< >menu; } switch(menu) { case 0: cout<<"成功退出系统!"<
chinaunix网友2010-08-26 14:21:34
Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com