<pre class="html" name="code">#include<string.h>
#include<stdio.h>
#include<iostream.h>
enum node_type{student,professor,staff};//枚举三种结点类型
//结构体,表示学生的特殊信息
struct student_type
{
float average;
int grade;
};
class node
{
friend class list;
private:
char name[15];
char sex[2];
int age;
char ID[20];
char address[30];
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,name1);
strcpy(sex,sex1);
age=age1;
strcpy(ID,id1);
strcpy(address,address1);
phone=phone1;
type=type1;
next=0;
}
node()
{
name[0]='\0';
sex[0]='\0';
age=0;
ID[0]='\0';
address[0]='\0';
phone=0;
next=0;
}
void set_node_type(node_type type1)
{
type=type1;
}
void set_name(char *name1)
{
strcpy(name,name1);
}
void set_sex(char *sex1)
{
strcpy(sex,sex1);
}
void set_age(int age1)
{
age=age1;
}
void set_ID(char *id1)
{
strcpy(ID,id1);
}
void set_address(char *address1)
{
strcpy(address,address1);
}
void set_phone(long phone1)
{
phone=phone1;
}
void set_average(float average1)
{
s.average=average1;
}
void set_grade(int grade1)
{
s.grade=grade1;
}
void set_annual_salary(float salary)
{
annual_salary=salary;
}
void set_hourly_salary(float hsalary)
{
hourly_salary=hsalary;
}
};
class list
{
private:
node *root;
public:
list()
{
root=0;
}
void insert(node *n);
void remove(char *id1);
void search(char *id1);
void print_list();
};
void list::insert (node *n)
{
char key[18];
strcpy(key,n->ID);
node * current_node=root;
node *previous=0;
while(current_node!=0&&strcmp(current_node->ID,key)<0)
{
previous=current_node;
current_node=current_node->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;
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;
}
void list::remove(char *id1)
{
node *current_node=root;
node *previous=0;
while(current_node!=0&&strcmp(current_node->ID,id1)<0)
{
previous=current_node;
current_node=current_node->next;
}
if(current_node!=0 && previous==0)
{
root=current_node->next;
delete current_node;
cout<<"身份证号"<<id1<<"成功删除!"<<endl;
}
else if (current_node!=0 && previous!=0)
{
previous->next=current_node->next;
delete current_node;
cout<<"身份证号"<<id1<<"成功删除!"<<endl;
}
else
cout<<"对不起,链表中没有这个人员的信息"<<endl;
}
void list::print_list()
{
node *cur=root;
while(cur!=0)
{
cout<<"\t姓名:\t\t"<<cur->name<<endl;
cout<<"\t姓别:\t\t"<<cur->sex<<endl;
cout<<"\t年龄:\t\t"<<cur->age<<endl;
cout<<"\t身份证号:\t\t"<<cur->ID<<endl;
cout<<"\t地址:\t\t"<<cur->address<<endl;
cout<<"\t电话号码:\t\t"<<cur->phone<<endl;
switch(cur->type)
{
case student:
cout<<"\t人员身份:\t学生"<<endl;
cout<<"\t平均分:\t"<<cur->s.average<<endl;
cout<<"\t年级:\t"<<cur->s.grade<<endl;
break;
case professor:
cout<<"\t人员身份:\t教授"<<endl;
cout<<"\t年薪:\t"<<cur->annual_salary<<endl;
break;
case staff:
cout<<"\t人员身份:\t教工"<<endl;
cout<<"\t小时工资:\t"<<cur->hourly_salary<<endl;
break;
}
}
cur=cur->next;
cout<<endl;
}
void list::search(char *id1)
{
node *current_node=root;
node *previous=0;
while(current_node!=0 && strcmp(current_node->ID,id1)<0)
{
previous=current_node;
current_node=current_node->next;
}
if(current_node!=0)
{
cout<<"\t姓名:\t\t"<<current_node->name<<endl;
cout<<"\t姓别:\t\t"<<current_node->sex<<endl;
cout<<"\t年龄:\t\t"<<current_node->age<<endl;
cout<<"\t身份证号:\t\t"<<current_node->ID<<endl;
cout<<"\t地址:\t\t"<<current_node->address<<endl;
cout<<"\t电话号码:\t\t"<<current_node->phone<<endl;
switch(current_node->type)
{
case student:
cout<<"\t人员身份:\t学生"<<endl;
练习5.26
最新推荐文章于 2023-05-26 23:46:39 发布