研究生与本科生

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class Student
{
public:
	Student();
	Student(string n,string nu,char s,int sc):name(n),number(nu),sex(s),score(sc){}
	Student *next;
	string name;
	string number;
	char sex;
	int score;
	virtual ~Student();
};
typedef Student NODE;
typedef Student *LIST;
typedef LIST PNODE;
class Undergrad:public Student
{
public:
	Undergrad();
	Undergrad(string n,string nu,char s,int sc,string m):Student(n,nu,s,sc),major(m){}
	string major;
	friend ostream &operator<<(ostream &,const  Undergrad &);
	virtual ~Undergrad();
};
class Graduate:public Undergrad
{
public:
	Graduate();
	Graduate(string n,string nu,char s,int sc,string m,string t):Undergrad(n,nu, s,sc, m),teacher(t){}
	string teacher;
    friend ostream &operator<<(ostream &,const  Graduate &);
	virtual ~Graduate();
};
ostream &operator<<(ostream &output,const  Undergrad &t)
{
	output<<"name:"<<t.name<<'\n'<<"number:"<<t.number<<'\n'<<"sex:"<<t.sex<<'\n'<<"score:"<<t.score<<'\n'<<"major:"<<t.major<<endl;
	return output;
}
ostream &operator<<(ostream &output,const  Graduate &t)
{
    output<<"name:"<<t.name<<'\n'<<"number:"<<t.number<<'\n'<<"sex:"<<t.sex<<'\n'<<"score:"<<t.score<<'\n'<<"major:"<<t.major<<"teacher:"<<t.teacher<<endl;
	return output;
}
LIST Creat_List()
{
	PNODE p,tail;
	PNODE list= new NODE;
	list->next=NULL;	
    tail = list;
	int choose;
	int sc;
	string n,nu,m,t;
	char s;
	cout<<"ÇëÊäÈëÄãÏë´´½¨µÄѧÉúÀàÐÍ£º1):±¾¿Æ  2) :Ñо¿Éú 3) :½áÊø"<<endl;
	cin>>choose;
    switch(choose)
	{
	case 1:
	     cout<<"name:"<<'\t'<<"number:"<<'\t'<<"sex:"<<'\t'<<"score:"<<'\t'<<"major:"<<endl;
	     cin>>n>>nu>>s>>sc>>m;
		 p=new Undergrad(n,nu,s,sc,m);  
	case 2:
		 cout<<"name:"<<'\t'<<"number:"<<'\t'<<"sex:"<<'\t'<<"score:"<<'\t'<<"major:"<<"teacher:"<<endl;
         p=new Graduate(n,nu,s,sc,m,t);
	case 3:
		 break;
	}
	if(p)
		{			
			tail->next = p;
			tail	   = p;
			tail->next = NULL;
		}
		p=NULL;
	return list;
}
void destroyList(LIST list)
{
	PNODE head=list,p;
	Graduate *pg;
	Undergrad *pu;
	cout<<"Ïú»ÙÁ´±í"<<endl;
	if(!head) return;
	while((p=head)!=NULL)
	{		
		if(pg=dynamic_cast<Graduate*>(p))
			cout<<*pg;
		else if(pu=dynamic_cast<Undergrad*>(p))
			cout<<*pu;
		head=p->next;
		delete p;
	}		
}
int main()
{
	LIST list =Creat_List();	
	destroyList(list);	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值