📄 c++课程设计(胡华良-18).cpp
字号:
#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 + -