⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++课程设计(胡华良-18).cpp

📁 学校学生管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<iostream>
#include<string>
#include<ctime>
#include<iomanip>
using namespace std;
#define N1 2
#define N2 1
#define N3 1

/////////////////////////////////////////////
///////////////////////////
struct Kecheng      //申请一个结构体,其中成员放课程信息
{string name;
 float xuefen;
 float score;
 Kecheng *next;
 };


///////////////////////////////////////////
////////////////////////
class Student
{
  public:
	virtual  void input()=0;
	virtual  void show()=0;          //申请一个Student类作为基类。
  protected:
	  string name;
	  int num;
	  char sex;
	  string class_grate;
	  int xuezhi;
};

void Student::input()
{
   cout<<"姓名   学号   性别(f/m)  班级"<<endl;
   cin>>name>>num>>sex>>class_grate;
}

void Student::show()
{   
	
	cout<<"该学生情况如下:"<<endl;
	cout<<"姓名:"<<name<<endl;
	cout<<"学号:"<<num<<endl;
	cout<<"性别:"<<sex<<endl;
	cout<<"班级:"<<class_grate<<endl;
	cout<<"学制:"<<xuezhi<<endl;
}

class Undergratuate:public Student
{
	public:
	  void input();                        //申请本科生的类。
	  void show();
	  friend void student_seek();
	  friend void student_rank();
	  friend void Classgrate_information();
	  friend void school_information();
	  friend void kecheng_add();
	  friend void kecheng_delete();
	  friend void stu_basic_information_change();
	protected:
	  void input_kecheng();
	  void putout_Kecheng();
	  string speciality;    //专业
	  string teacher_name;   //班主任姓名
	  Kecheng *kecheng;
	  float SUM;
	  float Average;
};

void  Undergratuate::input_kecheng()        //动态的输入课程
{
	Kecheng *p,*head,*tail;
	head=NULL;
	int n;
	cout<<"请输入该同学选修的课程数目:"<<endl;
	cin>>n;
 if(n==0)
	kecheng=NULL;
 else
 {	for(int i=0;i<n;i++)
	{
		if(i==0)
		{head=new Kecheng;
		   cout<<"请输入课程名称,学分和成绩"<<endl;
		   cin>>head->name>>head->xuefen>>head->score;
		   tail=head;
		}
		else
		{p=new Kecheng;
         cout<<"请输入课程名称,学分和成绩"<<endl;    
		 cin>>p->name>>p->xuefen>>p->score;
		 tail->next=p;
		 tail=p;
		}
	}
	tail->next=NULL;
	kecheng=head;
 }
}


 void  Undergratuate::putout_Kecheng()           //动态的输出课程
 {
  if(kecheng==NULL) cout<<"此学生没有选修任何课程"<<endl;
  else
  {cout<<"此同学的选修课程情况如下:"<<endl;
    Kecheng *k;
	k=kecheng;
	  do
	  {
	    cout<<"课程名称"<<setw(8)<<"学分:"<<setw(8)<<"成绩:"<<endl;
		cout<<k->name<<setw(8)<<k->xuefen<<setw(8)<<k->score<<endl;
        k=k->next;
	  }while(k!=NULL);
  }
}


void  Undergratuate::input()        //输出本科声的信息
{
	Student::input();
	xuezhi=4;
	cout<<"输入专业/班主任姓名"<<endl;
	cin>>speciality>>teacher_name;
	input_kecheng();
	Kecheng *k;
	int n=0;
	k=kecheng;
	if(k==NULL)
	{SUM=0;Average=0;}
	else
	{
		while(k!=NULL)
		{  SUM+=k->score;
		   n++;
		   Average=SUM/n;
		   k=k->next;
		}
	}
}


void  Undergratuate::show()   
{
	Student::show();
	cout<<"专业:"<<speciality<<endl;
	cout<<"班主任姓名"<<teacher_name<<endl;
    putout_Kecheng();
}

//////////////////////////////////////////////////
////////////
//////////////////////////////////
class Zhuanke:public Undergratuate         //申请专科生的类,并且Undergratuate (本科声的类)作为他得基类
{
  public:
	void input();
	friend void student_seek();
	friend void student_rank();
	friend void Classgrate_information();
	friend void school_information();
	friend void kecheng_add();
    friend void kecheng_delete();
	friend void stu_basic_information_change();
};

void Zhuanke::input()
{
	Undergratuate::input();
	xuezhi=3;
}

/////////////////////////////////
/////////
//////////////////////////////

class Gratuate:public Student       //申请研究生的类
{  
    public:
	void  input();
	void  show();
	friend void student_seek();
    friend void student_rank();
	friend void Classgrate_information();
	friend void school_information();
	friend void kecheng_add();
    friend void kecheng_delete();
	friend void stu_basic_information_change();
	private:
	void input_kecheng();
    void putout_kecheng();
    string speciality;
	string mentor_name;
    string research_direction;
    string research_title;
    float  research_wage;
	Kecheng *kecheng;
	float SUM;
	float Average;
};


void Gratuate::input_kecheng()
{	Kecheng *p,*head,*tail;
	head=NULL;
	int n;
	cout<<"请输入该同学选修的课程数目:"<<endl;
	cin>>n;
 if(n==0)
	kecheng=NULL;
 else
 {	for(int i=0;i<n;i++)
	{
		if(i==0)
		{head=new Kecheng;
		   cout<<"请输入课程名称,学分和成绩"<<endl;
		   cin>>head->name>>head->xuefen>>head->score;
		   tail=head;
		}
		else
		{p=new Kecheng;
         cout<<"请输入课程名称,学分和成绩"<<endl;
		 cin>>p->name>>p->xuefen>>p->score;
		 tail->next=p;
		 tail=p;
		}
	}
	tail->next=NULL;
	kecheng=head;
 }
}


void Gratuate::putout_kecheng()
 {
  if(kecheng==NULL) cout<<"此学生没有选修任何课程"<<endl;
  else
  {cout<<"此同学的选修课程情况如下:"<<endl;
	  do
	  {
	    cout<<"课程名称:"<<kecheng->name<<"  "<<"学分:"<<kecheng->xuefen<<"  "<<"成绩:"<<kecheng->score<<endl;
        kecheng=kecheng->next;
	  }while(kecheng!=NULL);
  }
}


void Gratuate::input()
{
	Student::input();
	xuezhi=3;
	cout<<"输入专业/导师姓名/研究方向/研究课题/研究经费"<<endl;
	cin>>speciality>>mentor_name>>research_direction>>research_title>>research_wage;
	input_kecheng();
	Kecheng *k;
	int n=0;
	k=kecheng;
	if(k==NULL)
	{SUM=0;Average=0;}
	else
	{
		while(k!=NULL)
		{  SUM+=k->score;
		   n++;
		   Average=SUM/n;
		   k=k->next;
		}
	}
}


void Gratuate::show()
{	Student::show();
	cout<<"学制:"<<xuezhi<<endl;
	cout<<"专业:"<<speciality<<endl;
	cout<<"导师姓名:"<<mentor_name<<endl;
	cout<<"研究方向:"<<research_direction<<endl;
	cout<<"研究课题:"<<research_title<<endl;
	cout<<"研究经费:"<<research_wage<<endl;
    putout_kecheng();
}
/////////////////////////////////
////////////////////////////////
///////
Undergratuate undergratuate[N1];     //分别申请本科生,专科生,研究生的数组
Zhuanke zhuanke[N2];
Gratuate gratuate[N3];
bool prime=false;

void student_array()
{  prime=true;
   cout<<"对本科生的信息进行输入"<<endl;
   for(int i=0;i<N1;i++)
	   undergratuate[i].input();
   cout<<"下面输入的是专科生"<<endl;
   for(i=0;i<N2;i++)
	   zhuanke[i].input();
   cout<<"下面输入的是研究生"<<endl;
   for(i=0;i<N3;i++)
	   gratuate[i].input();
}

/////////////////////////
///////////////////////////
///////////////////////
void student_seek()          //根据学号学号查找学生,并输出该学生的所有信息
{ 
  cout<<"输入你想查找的同学的学号!"<<endl;
  int NUM,i;
  cin>>NUM;
  bool b=false;
   for( i=0;i<N1;i++)
	{
	  if(undergratuate[i].num==NUM)  
	  {b=true;
	   undergratuate[i].show();
	   cout<<"该同学的总成绩为:"<<undergratuate[i].SUM<<endl<<"其平均分为:"<<undergratuate[i].Average<<endl;
	  }
	}
    i=0;
	for(i=0;i<N2;i++)
	{ 
		if(zhuanke[i].num==NUM)
		{b=true;
		 zhuanke[i].show();
		 cout<<"该同学的总成绩为:"<<zhuanke[i].SUM<<endl<<"其平均分为:"<<zhuanke[i].Average<<endl;
		}
	}
	i=0;
	for(i=0;i<N3;i++)
	{	
		if(gratuate[i].num==NUM)
		{b=true;
		 gratuate[i].show();
		 cout<<"该同学的总成绩为:"<<gratuate[i].SUM<<endl<<"其平均分为:"<<gratuate[i].Average<<endl;
		}
	}
 if(b==false)
  { cout<<"对不起,没有找到你要找的同学,请确认你输入的学号无误!"<<endl;
    int m;
    cout<<"*************重新查询请输入1**************"<<endl;
	cout<<"*************离开此菜单输入2**************"<<endl;
    cin>>m;
    if(m==1)  student_seek();
  }
}
//////////////////
//***************

void student_rank()      //对学生成绩进行排名。
{   
 	int i,j,k;
    Undergratuate  temp1;
	Zhuanke     temp2;
	Gratuate    temp3;
	cout<<"本科生成绩排名如下:"<<endl;
	for(i=0;i<N1-1;i++)
	{  k=i;
	   for(j=i+1;j<N1;j++)
	   {  if(undergratuate[j].Average>undergratuate[k].Average)  k=j;
		  temp1=undergratuate[i];
		  undergratuate[i]=undergratuate[k];
		  undergratuate[k]=temp1;
		  
	   }
	}
	i=0;
	for(i=0;i<N1;i++)
	   cout<<"第"<<i+1<<"名为:"<<undergratuate[i].name<<"  "<<"总分为:"<<undergratuate[i].SUM<<"  "<<"平均分为:"<<undergratuate[i].Average<<endl;
    cout<<"专科生成绩排名如下:"<<endl;
	i=0;
   	for(i=0;i<N2-1;i++)
	{  k=i;
	   for(j=i+1;j<N2;j++)
	   {  if(zhuanke[j].Average>zhuanke[k].Average)  k=j;
	     if(k!=i)
		 {temp2=zhuanke[i];
		  zhuanke[i]=zhuanke[k];
		  zhuanke[k]=temp2;
		 }
	   }
	}
    i=0;
   	for(i=0;i<N2;i++)
	   cout<<"第"<<i+1<<"名为:"<<zhuanke[i].name<<"  "<<"总分为:"<<zhuanke[i].SUM<<"  "<<"平均分为:"<<zhuanke[i].Average<<endl;
    cout<<"研究生成绩排名如下:"<<endl;
	i=0;
	for(i=0;i<N3-1;i++)
	{  k=i;
	   for(j=i+1;j<N3;j++)
	   {  if(gratuate[j].Average>gratuate[k].Average)  k=j;
	     if(k!=i)
		 {temp3=gratuate[i];
		  gratuate[i]=gratuate[k];
		  gratuate[k]=temp3;
		 }
	   }
	}
	i=0;
	for(i=0;i<N3;i++)
	   cout<<"第"<<i+1<<"名为:"<<gratuate[i].name<<"  "<<"总分为:"<<gratuate[i].SUM<<"  "<<"平均分为:"<<gratuate[i].Average<<endl;
}

//***********************
//*************************//
 void Classgrate_information()          //对班级信息进行查询
 {
	 cout<<"~~~~~~~~~~~你想查找的班级!~~~~~~~~~~~"<<endl;
	 string  classgrate;
	 cin>>classgrate;
	 bool b1=false,b2=false,b3=false;
	 int n1=0,n2=0,n3=0,i;
     float sum=0,average;
	 for(i=0;i<N1;i++)
	 {
		 if(undergratuate[i].class_grate==classgrate)
		 {   b1=true;
			 n1++;
			 sum+=undergratuate[i].Average;
			 average=sum/n1;
			 if(undergratuate[i].sex=='m')
				 n2++;
			 else
				 n3++;
         }
	 }
     if(b1==true)
	 {
		 cout<<classgrate<<"班的情况如下:"<<endl;
		 cout<<"该班男生人数为:"<<n2<<endl;
		 cout<<"该班女生人数为:"<<n3<<endl;
         cout<<"该班的平均成绩为:"<<average<<endl;
	 }
    n1=0;n2=0;n3=0;i=0;sum=0;
	for(i=0;i<N2;i++)
	 {
		 if(zhuanke[i].class_grate==classgrate)
		 {   b2=true;
			 n1++;
			 sum+=zhuanke[i].Average;
			 average=sum/n1;
			 if(zhuanke[i].sex=='m')
				 n2++;
			 else
				 n3++;
         }
	 }
     if(b2==true)
	 {
		 cout<<classgrate<<"班的情况如下:"<<endl;
		 cout<<"该班男生人数为:"<<n2<<endl;
		 cout<<"该班女生人数为:"<<n3<<endl;
         cout<<"该班的平均成绩为:"<<average<<endl;
	 }	  
    n1=0;n2=0;n3=0;i=0;sum=0;
	for(i=0;i<N3;i++)
	 {
		 if(gratuate[i].class_grate==classgrate)
		 {   b3=true;
			 n1++;
			 sum+=gratuate[i].Average;
			 average=sum/n1;
			 if(gratuate[i].sex=='m')
				 n2++;
			 else
				 n3++;
         }
	 }
     if(b3==true)
	 {
		 cout<<classgrate<<"班的情况如下:"<<endl;
		 cout<<"该班男生人数为:"<<n2<<endl;
		 cout<<"该班女生人数为:"<<n3<<endl;
         cout<<"该班的平均成绩为:"<<average<<endl;
	 }
	 if(b1==false&&b2==false&&b3==false)
	 {   int m;
		 cout<<"对不起!你要查找的班级不存在,请确认您的输入是否有误!!"<<endl;
		 cout<<"******************重新查询请按1*************************"<<endl;
		 cout<<"******************退出当前菜单请按2*********************"<<endl;
		 cin>>m;
		 if(m==1)   Classgrate_information();
	 }
 }
	 
//************************
 //********************************************
 void school_information()         //对学校信息进行查询
 {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -