实验室人员流动

  1. /*
  2. * 程序的版权和版本声明部分
  3. * Copyright (c)2013, 烟台大学计算机学院学生
  4. * All rightsreserved.
  5. * 文件名称: object.cpp
  6. * 作者:吴妍
  7. * 完成日期: 2013年04月09日
  8. * 版本号: v1.0
  9. 问题描述:模拟实验室人员流动 
  10. * 输入描述:
  11. * 程序输出:无
  12. */
  13. #include<iostream>
    using namespace std;
    class Student
    {
    public:
     Student(int snum)
     {
      num =snum; 
      cout<<"学号为"<<snum<<"同学进入实验室"<<endl;
     }
     ~Student()
     {
      cout<<"学号为"<<num<<"同学离开实验室"<<endl;
     }
     int getnum(){ return num; }
    private :
     int num;

    };
    class Lablink       //建立Lablink类
    {
    public:
     Lablink()
     {
      pstu=NULL;
      next=NULL;
     }
     Lablink *addstu(Lablink *head,int num);//声明函数addstu表示进入学生
     Lablink *delstu(Lablink *head,int num);//声明函数delstu表示学生离开
     void printstu(Lablink *head);//声明函数printstu表示剩余的学生
    private:
     Student *pstu;
     Lablink *next;
    };
    Lablink* Lablink::addstu(Lablink *head,int num)//定义类外成员函数表示进入的学生
    {
     Student *p=new Student(num);
     Lablink *plab=new Lablink;
     plab->pstu=p;
     if(head!=NULL)
      plab->next=head;//新人插在链首
     return plab;
    }
    Lablink* Lablink::delstu(Lablink *head,int num)//定义类外成员函数表示离开的学生
    {
     Lablink *pre,*cur;
     pre=cur=head;
     while(cur!=NULL)
     {
      if(cur->pstu->getnum()==num)//删除离开学生的信息
      {
       if(pre==cur)
       {
        cur=cur->next;
        delete pre->pstu;
        delete pre;
        return cur;
       }
       else
       {
        pre->next=cur->next;
        delete cur->pstu;
        delete cur;
        return head;
       }
      }
      else
      {
       pre=cur;
       cur=cur->next;
      }
     }
     return head;
    }
    void Lablink::printstu(Lablink *head)//定义类外函数显示剩余学生学号
    {
     Lablink *cur=head;
     while(cur!=NULL)
     {
      cout<<"学号为:"
       <<cur->pstu->getnum()
       <<endl;
      cur=cur->next;
     }
    }
    int main()
    {
     char action;
     int num;
     Lablink *head=NULL;
     while(cin>>action>>num)
     {
      switch(action)
      {
      case 'I':
       head=head->addstu(head,num);break;
      case 'O':
       head=head->delstu(head,num);break;
      case 'P':
       head->printstu(head);break;
      }
     }
     return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值