1、 /性别 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,long phone1,node_type type1) strcpy(name,
2、name1); strcpy(sex,sex1); age= age1; strcpy(ID,id1); strcpy(address,address1); phone= phone1; type= type1; next= 0; node() name0=0; sex0= age= 0; ID0= address0= phone= 0; /*set_node_type设置节点的类型 */ void set_node_type(node_type type1) type=type1;set_name设置姓名 void set_name(char * name1)set_sex设置性别 void
3、 set_sex(char * sex1)set_age设置年龄 void set_age(int age1)set_ID设置身份证号 void set_ID(char * id1)set_address设置地址 void set_address(char * address1)set_phone设置电话号码 void set_phone(long phone1)set_average设置学生的平均分 void set_average(float average1) s.average= average1;set_grade设置学生的年级 void set_grade(int grade1)
4、s.grade=grade1;set_annual_salary设置教授的年薪 void set_annual_salary(float salary) annual_salary= salary;设置教工的小时工资 void set_hourly_salary(float hsalary) hourly_salary= hsalary;listlist类的定义class list node * root; list() root= 0; void insert(node * n); void remove(char * id1); void search(char * id1); void
5、print_list();insert插入节点void list:insert (node * n) /list 以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 ); swit
6、ch(n-type ) case student: new_node-s.grade =n-s.grade ;s.average = n-s.average ; break; case professor:annual_salary = n-annual_salary ; case staff:hourly_salary = n-hourly_salary ; new_node-next = current_node; if(previous=0) root= new_node; else previous-next= new_node;此函数的效果图可以参考图5.2。remove删除节点re
7、move (char * id1) node * current_node= root;ID,id1) delete current_node; cout身份证号:id1对不起,链表中没有这个人员的信息!此函数的效果图可以参考图5.3。print_list显示整个链表print_list () node * cur= root; while(cur!t姓名:ttcur-namet性别:sext年龄:aget身份证号:tIDt地址:addresst电话号码:phone case student: coutt人员身份:t学生t平均分:s.average t年级:s.grade break; cas
8、e professor:t教授t年薪:annual_salary case staff:t教工t小时工资:hourly_salary next;此函数的效果图可以参考图5.4。search查询节点信息search(char * id1)current_node- switch(current_node-对不起,没有找到这个人!此函数的效果图可以参考图5.5。main主函数void main() int i=1; coutendli; /判断输入,0退出 if(i i=4) switch(i) /case1:链表中插入节点 case 1: coutna;t请输入性别:sex;t请输入年龄:age
9、;t请输入身份证号:ID;t请输入家庭地址:add;t请输入电话号码:ph;t请输入人员类别(0:student; 1:professor; 2:staff):type; /输入三种人员的不同信息 switch(type ) /学生信息 case 0: coutaverage;t请输入年级:grade; temp.set_average (average); temp.set_grade (grade); temp.set_node_type (student); break; /教授信息 case 1:t请输入年薪:annual_salary; temp.set_annual_salary
10、(annual_salary); temp.set_node_type (professor); /教工信息 case 2:t请输入小时工资:hourly_salary; temp.set_hourly_salary (hourly_salary); temp.set_node_type (staff); 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:请输入要删除的人员的身份证号: people.remove (ID); /显示链表所有节点 case 3: people.print_list (); /查询链表中的节点 case 4:请输入要查询的人员的身份证号: people.search (ID); else按键错误,请重新选择!