#include<stdio.h>
#include <iostream>
#include<string>
#include<stdlib.h>
using namespace std;
class student{
public:
string name;
string num;
string duixiang;
student(string n,string m,string d):name(n),num(m),duixiang(d){}
virtual void display()
{}
};
class UnderGrad:public student
{
public:
virtual void creatlb()
{}
UnderGrad(string n,string m,string d):student(n,m,d){}
virtual void display()
{
cout<<"学生信息:"<<endl;
cout<<"本科生:"<<endl;
cout<<"学号:"<<num<<endl;
cout<<"姓名:"<<name<<endl;
cout<<endl;
}
string getname()
{
return name;
}
};
class Graduate:public student{
public:
string ds;
virtual void creatlb()
{}
Graduate(string n,string m,string d,string s):student(n,m,d),ds(s){}
virtual void display()
{
cout<<"信息:"<<endl;
cout<<"研究生:"<<endl;
cout<<"学号:"<<num<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"导师姓名:"<<ds<<endl;
cout<<endl;
}
};
typedef struct _studentlist{
student *data;
struct _studentlist * next;
}studentlist,*studentlis;
int creatklb(studentlist *&L)
{
L= new studentlist;
if(!L)
{
return 0;
}
L->next = NULL;
return 1;
}
studentlis CreateList(studentlis L,student **ptr)
{
studentlist* p = new studentlist;
p->data=*ptr;
p->next = NULL;
p->next=L->next;
L->next=p;
return L;
}
void displays(student *ptr)
{
ptr->display();
}
studentlis caidan(studentlis &L,student **ptr)
{
studentlis l=L;
string n1,m1,d1,d2;
char slect;
do
{
cout<<"(u)UnderGrad,(g)Graduate,(e)end"<<endl;
cin>>slect;
switch(slect)
{
case 'u':
cout<<"本科生:"<<endl;
cout<<"学号:";
cin>>n1;
cout<<"姓名:";
cin>>m1;
d1="bks";
*ptr=new UnderGrad(m1,n1,d1);
CreateList(l,ptr);
break;
case 'g':
cout<<"研究生:"<<endl;
cout<<"学号:";
cin>>n1;
cout<<"姓名:";
cin>>m1;
cout<<"导师姓名:";
cin>>d2;
d1="bks";
*ptr=new Graduate(m1,n1,d1,d2);
CreateList(l,ptr);
break;
case 'e':
cout<<"遍历"<<endl;
studentlis lwl =l;
while(lwl->next )
{
lwl=lwl->next;
lwl->data->display();
cout<<endl;
}
break;
}
}
while(slect!='e');
return L;
}
int main()
{
studentlist *l;
student *ptr;
creatklb(l);
caidan(l,&ptr);
return 0;
}