1、05 设计异质链表实现学校人员管理第5章 设计异质链表实现学校人员管理5.5 源程序代码/*/* 模块名称:12.cpp 功能描述:这是一个非多态方法实现的异质链表程序 创建人 : 修改记录:*/#include #include #include /枚举三种节点类型enum node_type student,staff,professor;/结构体,表示学生的特殊信息struct student_type float average; /平均分 int grade; /年级;/*/* 函数名称:node 功能描述:定义类node 修改记录:*/class node friend class
2、 list;private: char name15; /姓名 char sex2; /性别 int age; /年龄 char ID20; /身份证号 char address30; /地址 long phone; /电话 node_type type; /节点类型 /联合,定义单一节点类型 union student_type s; float annual_salary; float hourly_salary; ; node * next;public: node(char * name1,char * sex1, int age1,char * id1,char * address1
3、,long phone1,node_type type1) strcpy(name,name1); strcpy(sex,sex1); age= age1; strcpy(ID,id1); strcpy(address,address1); phone= phone1; type= type1; next= 0; node() name0=0; sex0=0; age= 0; ID0=0; address0=0; phone= 0; next= 0; /*/ /* 函数名称:set_node_type 功能描述:设置节点的类型 修改记录: */ void set_node_type(node_
4、type type1) type=type1; /*/ /* 函数名称:set_name 功能描述:设置姓名 修改记录: */ void set_name(char * name1) strcpy(name,name1); /*/ /* 函数名称:set_sex 功能描述:设置性别 修改记录: */ void set_sex(char * sex1) strcpy(sex,sex1); /*/ /* 函数名称:set_age 功能描述:设置年龄 修改记录: */ void set_age(int age1) age= age1; /*/ /* 函数名称:set_ID 功能描述:设置身份证号 修
5、改记录: */ void set_ID(char * id1) strcpy(ID,id1); /*/ /* 函数名称:set_address 功能描述:设置地址 修改记录: */ void set_address(char * address1) strcpy(address,address1); /*/ /* 函数名称:set_phone 功能描述:设置电话号码 修改记录: */ void set_phone(long phone1) phone= phone1; /*/ /* 函数名称:set_average 功能描述:设置学生的平均分 修改记录: */ void set_average
6、(float average1) s.average= average1; /*/ /* 函数名称:set_grade 功能描述:设置学生的年级 修改记录: */ void set_grade(int grade1) s.grade=grade1; /*/ /* 函数名称:set_annual_salary 功能描述:设置教授的年薪 修改记录: */ void set_annual_salary(float salary) annual_salary= salary; /*/ /* 函数名称:set_annual_salary 功能描述:设置教工的小时工资 修改记录: */ void set_
7、hourly_salary(float hsalary) hourly_salary= hsalary; ;/*/* 函数名称:list 功能描述:list类的定义 修改记录:*/class listprivate: node * root;public: list() root= 0; void insert(node * n); void remove(char * id1); void search(char * id1); void print_list();/*/* 函数名称:insert 功能描述:插入节点 修改记录:*/void list:insert (node * n) /l
8、ist 以ID为关键字排序,ID从小到大的顺序进行排列 char key18; strcpy(key,n-ID) ; node * current_node=root; node * previous= 0; while(current_node!=0 & strcmp(current_node-ID,key)next ; node*new_node=new node(n-name ,n-sex ,n-age ,n-ID ,n-address ,n-phone,n-type ); switch(n-type ) case student: new_node-s.grade =n-s.grade
9、 ; new_node-s.average = n-s.average ; break; case professor: new_node-annual_salary = n-annual_salary ; break; case staff: new_node-hourly_salary = n-hourly_salary ; new_node-next = current_node; if(previous=0) root= new_node; else previous-next= new_node;此函数的效果图可以参考图5.2。/*/* 函数名称:remove 功能描述:删除节点 修
10、改记录:*/void list:remove (char * id1) node * current_node= root; node * previous= 0; while(current_node!=0 & strcmp(current_node-ID,id1)next ; if(current_node!=0 & previous=0) root=current_node-next ; delete current_node; cout身份证号:id1成功删除!next = current_node-next ; delete current_node; cout身份证号:id1成功删
11、除!endl; else cout对不起,链表中没有这个人员的信息!endl;此函数的效果图可以参考图5.3。/*/* 函数名称:print_list 功能描述:显示整个链表 修改记录:*/void list:print_list () node * cur= root; while(cur!=0) coutt姓名:ttnameendl; coutt性别:ttsexendl; coutt年龄:ttageendl; coutt身份证号:tIDendl; coutt地址:ttaddressendl; coutt电话号码:tphonetype ) case student: coutt人员身份:t学
12、生endl; coutt平均分:ts.average endl; coutt年级:tts.grade endl; break; case professor: coutt人员身份:t教授endl; coutt年薪:ttannual_salary endl; break; case staff: coutt人员身份:t教工endl; coutt小时工资:thourly_salary next; coutID,id1)next ; if(current_node!=0) coutt姓名:ttnameendl; coutt性别:ttsexendl; coutt年龄:ttageendl; coutt身
13、份证号:tIDendl; coutt地址:ttaddressendl; coutt电话号码:tphonetype ) case student: coutt人员身份:t学生endl; coutt平均分:ts.average endl; coutt年级:tts.grade endl; break; case professor: coutt人员身份:t教授endl; coutt年薪:ttannual_salary endl; break; case staff: coutt人员身份:t教工endl; coutt小时工资:thourly_salary endl; break; else cout对
14、不起,没有找到这个人!endl;此函数的效果图可以参考图5.5。/*/* 函数名称:main 功能描述:主函数 修改记录:*/void main() int i=1; coutendlendl; cout -endl; cout * *endl; cout 欢迎进入异质链表的非多态性实现程序endl; cout * *endl; cout -endl; list people; node temp; char na15; char sex2; int age; char ID20; char add30; long ph; int type; float annual_salary; floa
15、t hourly_salary; float average; int grade; while(i) coutendlendl; cout请选择您的查询内容:endlendl; cout 1.链表中插入节点;endl; cout 2.链表中删除节点;endl; cout 3.显示整个链表;endl; cout 4.查询链表中的节点;endl; cout 0.退出;endl; couti; cout=0 & i=4) switch(i) /case1:链表中插入节点 case 1: coutna; coutsex; coutage; coutID; coutadd; coutph; coutt
16、ype; /输入三种人员的不同信息 switch(type ) /学生信息 case 0: coutaverage; coutgrade; temp.set_average (average); temp.set_grade (grade); temp.set_node_type (student); break; /教授信息 case 1: coutannual_salary; temp.set_annual_salary (annual_salary); temp.set_node_type (professor); break; /教工信息 case 2: couthourly_sala
17、ry; temp.set_hourly_salary (hourly_salary); temp.set_node_type (staff); break; temp.set_name (na); temp.set_sex (sex); temp.set_age (age); temp.set_ID (ID); temp.set_address (add); temp.set_phone (ph); people.insert (&temp); break; /删除节点信息 case 2: coutID; people.remove (ID); break; /显示链表所有节点 case 3: people.print_list (); break; /查询链表中的节点 case 4: coutID; people.search (ID); break; else cout按键错误,请重新选择!endl; coutendl;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1