练习5.26

   <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;
    


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值