📄 nnn.cpp
字号:
//=================================================
//filename:Basic.cpp
//实验讲义P185 7.4.8
//Steven Chan
//2008-04-18
//=================================================
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<conio.h>
int n,d=0,a=0;
struct student *creat(); //建立学生资料库
struct student *p1,*head;
//-------------------------------------------------
class Base //基类
{
public:
void init_stu(void); //初始化学生基本资料
void modify_infor(void); //修改学生基本资料
void sech_num(long nu); //按学号查找
void sech_nam(char *na); //按姓名查找
void show(void); //显示学生基本资料
protected:
long num; //学号
char name[30]; //姓名
int sex; //性别
int age; //年龄
char addr[50]; //住址
char mdep[30]; //主修专业名称
};
//-------------------------------------------------
class Fbase:virtual public Base //辅修类
{
public:
void set_fdep(void); //输入辅修专业名称
void set_fscore(void); //输入辅修成绩单
void Fmodify(void); //修改学生辅修成绩
void count_asfal(void); //统计学生成绩
void show_Fxco(void);
protected:
char fdep[30]; //辅修专业名称
int Fscore[4]; //辅修成绩表
};
//-------------------------------------------------
class First:virtual public Base //主修类
{
public:
void initial(void); //输入学生主修成绩
void modify(void); //修改学生主修成绩
void count_maexc(void); //统计优秀学生成绩
void count_mafal(void); //统计不及格学生成绩
void show_maj(void); //输出学生主修资料
protected:
int Mscore[5]; //主修成绩表
};
//-------------------------------------------------
class Manag:public First,public Fbase
{
public:
Manag(void); //构造函数
void statics_major(void); //对主修系成绩进行统计的函数
void Statics_second(void); //对辅修系成绩进行统计的函数
void show_statics(void); //输出学位情况函数
protected:
char sta_maj[20]; //主修学位
char sta_sec[20]; //辅修学位
};
//---------------------------------------------------
struct student
{
Manag *stu;
student *next; //指向下一结点
};
//-------------------------------------------------
void First::show_maj()
{
cout<<"********************************************************************\n";
cout<<"-----------------STUDENT INFORMATIONS-------------------------------\n";
cout<<" NAME: "<<name<<"\t\t\tID NO.: "<<num<<endl;
cout<<" SEX: "<<sex<<"\t\t\tAGE: "<<age<<endl;
cout<<" ADD: "<<addr<<"\t\t\tMAJOR: "<<mdep<<endl;
cout<<"\n";
int j;
cout<<"-----------------STUDENT MAJOR SUBJECT INFORMATIONS-----------------\n";
for (j=0; j<5; j++)
cout<<"SUBJECT "<<j+1<<": "<<Mscore[j]<<"\t";
cout<<"--------------------------------------------------------------------\n";
}
//---------------------------------------------------
void Fbase::show_Fxco()
{
cout<<"********************************************************************\n";
cout<<"-----------------STUDENT INFORMATIONS-------------------------------\n";
cout<<" NAME: "<<name<<"\t\t\tID NO.: "<<num<<endl;
cout<<" SEX: "<<sex<<"\t\t\tAGE: "<<age<<endl;
cout<<" ADD: "<<addr<<endl;
cout<<"\n";
int j;
cout<<"-----------------STUDENT FBASE SUBJECT INFORMATIONS-----------------\n";
cout<<"Minor name: "<<fdep;
for(j=0;j<4;j++)
cout<<"\nSUBJECT "<<j+1<<": "<<Fscore[j]<<"\t\n";
cout<<"---------------------------------------------------------------------\n";
}
//----------------------------------------------------
Manag::Manag()
{ int i;
num=0;
strcpy(name,"NONAME");
sex=0;
age=0;
strcpy(addr,"NO");
strcpy(mdep,"NO");
strcpy(fdep,"NO");
strcpy(sta_maj,"Empty");
strcpy(sta_sec,"empty");
for (i=0; i<5; i++)
Mscore[i]=0;
for(i=0;i<4;i++)
Fscore[i]=0;
}
//-------------------------------------------------
void Base::init_stu() //初始化学生资料函数定义
{
cout<<"--------------------Initialization--------------------\n";
cout<<"ID NO.: ";
cin>>num;
cin.get();
if(num==0)
{
a=1;
return;
}
cout<<"STUDENT NAME: ";
cin.getline(name,30);
cout<<"ENTER SEX: ";
cin>>sex;
cout<<"ENTER AGE: ";
cin>>age;
cin.get();
cout<<"ADDRESS: ";
cin.getline(addr,50);
cout<<"MAJOR: ";
cin.getline(mdep,30);
cout<<"----------------End of Initialization!----------------\n";
return;
}
//-------------------------------------------------
void Base::modify_infor()//修改学生基本资料函数定义
{
int ans;
cout<<"------------------Modify Information------------------\n";
cout<<"| MENU |\n";
cout<<"| 1.Modify student's ID Number |\n";
cout<<"| 2.Modify student's name |\n";
cout<<"| 3.Modify student's sex |\n";
cout<<"| 4.Modify student's age |\n";
cout<<"| 5.Modify student's address |\n";
cout<<"| 6.Modefy student's major |\n";
cout<<"------------------------------------------------------\n";
do
{
cout<<"Enter your choise [ ]\b\b";
cin>>ans;
cin.get();
if(ans<1||ans>6)
{
cout<<"\a---------------------INPUT ERROR!---------------------\n";
if(ans<1) cout<<" You should enter a number over 1.\n";
if(ans>6) cout<<" You should enter a number under 6.\n";
cout<<"Input again,please!\n";
cout<<"------------------------------------------------------\n";
}
}while(ans<1||ans>6);
switch(ans)
{
case 1: //修改学号
{
cout<<"ENTER NEW ID NO.: ";
cin>>num;
break;
}
case 2://修改姓名
{
cout<<"ENTER NEW NAME: ";
cin.getline(name,30);
cin.get();
break;
}
case 3://修改性别
{
cout<<"ENTER NEW SEX: ";
cin>>sex;
break;
}
case 4://修改年龄
{
cout<<"ENTER NEW AGE: ";
cin>>age;
break;
}
case 5://修改地址
{
cout<<"ENTER NEW ADDRESS: ";
cin.getline(addr,50);
break;
}
case 6://修改专业
{
cout<<"ENTER NEW MAJOR: ";
cin.getline(mdep,30);
cin.get();
break;
}
default://操作错误
cout<<"OPERATION ERROR!\n";
}
}
//-------------------------------------------------
void Base::sech_num(long nu) //按学号查找函数定义
{ a=0;
if(nu==num) a=1;
}
//-------------------------------------------------
void Base::sech_nam(char *na) //按姓名查找函数定义
{ a=0;
if(strcmp(name,na)==0) a=1;
}
//-------------------------------------------------
void Base::show() //显示学生基本资料
{
cout<<"-----------------STUDENT INFORMATIONS-----------------\n";
cout<<" NAME: "<<name<<"\tID NO.: "<<num<<endl;
cout<<" SEX: "<<sex<<"\tAGE: "<<age<<endl;
cout<<" ADD: "<<addr<<"\tMAJOR: "<<mdep<<endl;
cout<<"------------------------------------------------------\n";
return;
}
//-------------------------------------------------
void First::initial() //输入学生成绩函数定义
{
cout<<"---------------ENTER MAIN MAJOR SCORES!---------------\n";
for(int i=0;i<5;i++)
{
cout<<"SCORE "<<i+1<<": ";
cin>>Mscore[i];
}
cout<<"---------------END OF ENTER OPERATION !---------------\n";
return;
}
//-------------------------------------------------
void First::modify() //修改学生主修成绩
{
int i=0,j=0;
cout<<"---------------MODIFY MAIN MAJOR SCORES---------------\n";
cout<<"ENTER THE NO. OF THESE SCORES: ";
cin>>i;
cout<<"ENTER THE NEW SCORE: ";
cin>>j;
Mscore[i-1]=j;
cout<<"---------------END OF MODIFY OPERATION!---------------\n";
return;
}
//-------------------------------------------------
void First::count_maexc() //统计优秀学生主修成绩
{
int i=0,j;
d=0;
for(j=0;j<5;j++)
{
if(Mscore[j]<70)
{
i=0;
break;
}
if(Mscore[j]>=85) i++;
}
if(i>=3)
{ cout<<"**************************************************************\n";
cout<<"----------------------Excellent student-----------------------\n";
show(); //显示学生基本资料
cout<<"\n------------------EXCELLENT SCORE INFORMATIONS-----------------\n";
for(j=0;j<5;j++)
if(Mscore[j]>=85)
cout<<"SUBJECT "<<j+1<<": "<<Mscore[j]<<"\t";
cout<<"\n---------------------------------------------------------------\n";
d=d+1;
}
}
//-------------------------------------------------
void First::count_mafal() //统计不及格学生成绩
{
int i,j=0;
d=0;
for(i=0;i<5;i++)
if(Mscore[i]<60)
j++;
if(j!=0)
{ cout<<"*****************************************************************\n";
cout<<"-----------------------FAIL SCORE student------------------------\n";
show();
cout<<"\n--------------------FAIL SCORE INFORMATIONS!--------------------\n\n";
for(i=0;i<5;i++)
if(Mscore[i]<60)
cout<<"SUBJECT "<<i+1<<": "<<Mscore[i]<<"\t";
cout<<"\nYou need having examination again.\n";
cout<<"\n-----------------------------------------------------------\n";
d=d+1;
}
}
//-------------------------------------------------
void Fbase::set_fdep() //输入辅修专业名称
{ cin.get();
cout<<"--------------------ENTER SUBJECT!--------------------\n\n";
cout<<"Please input the sub-subject you choice.\n";
cin.getline(fdep,30);
cout<<"\n---------------------END OF ENTER---------------------\n";
return;
}
//-------------------------------------------------
void Fbase::set_fscore() //输入辅修成绩单
{
cout<<"-------------------ENTER SUB-SCORE!-------------------\n\n";
cout<<"Please input the sub-scores.\n";
for(int i=0;i<4;i++)
{
cout<<"SCORE "<<i+1<<": ";
cin>>Fscore[i];
}
cout<<"\n---------------------END OF ENTER---------------------\n";
return;
}
//-------------------------------------------------
void Fbase::Fmodify() //修改学生辅修成绩
{
int n,m;
cout<<"-------------------MODIFY SUB-SCORE-------------------\n\n";
cout<<"Which score need modifying?\nNO.: ";
cin>>n;
cout<<"Please input the new score!\nNEW SCORE: ";
cin>>m;
Fscore[n-1]=m;
cout<<"\n--------------------END OF MODIFY!--------------------\n";
return;
}
//-------------------------------------------------
void Fbase::count_asfal() //统计学生成绩
{
int i,j=0;
d=0;
for(i=0;i<4;i++)
{
if(Fscore[i]<60) j++;
}
if(j!=0)
{
show();
cout<<"---------------FAIL SCORE INFORMATIONS!---------------\n\n";
for(i=0;i<4;i++)
if(Fscore[i]<60)
cout<<"SUBJECT "<<i+1<<": "<<Fscore[i]<<"\t";
cout<<"You need having examination again.\n";
cout<<"\n------------------------------------------------------\n";
d=1;
}
}
//-------------------------------------------------
struct student *creat()
{
student *p1,*p2,*head1;
Manag *angle_ptr2;
n=0;
angle_ptr2=new Manag;
while(angle_ptr2==NULL)
angle_ptr2=new Manag;
p1=p2=new student;
while(p1==NULL)
p1=p2=new student;
head1=NULL;
p1->stu=angle_ptr2;
angle_ptr2->init_stu();
while(1)
{
n=n+1;
if(n==1) head1=p1;
else p2->next=p1;
p2=p1;
p1=new student;
while(p1==NULL)
p1=new student;
angle_ptr2=new Manag;
while(angle_ptr2==NULL)
angle_ptr2=new Manag;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -