2009年2月7日星期六

[C++]课程设计——学生信息管理

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

// 学生信息管理系统 //

// 52computer //

// 2008年12月25日 //

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

#include<iostream>
#include<string>
#include<fstream>
#include<conio.h>
#include<windows.h>
using namespace
std;

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

// 抽象基类 //

///////////////////////////////////
class Base
{
protected:
int id;//本科生,研究生识别
int num;
char name[20];
char sex[5];
double ch,en,ma;//成绩
int borth;

public:
Base();
virtual int getid()=0;//本科生,研究生识别
virtual void set()=0;//纯虚函数,在派生类中调用
virtual void display()=0;
double getsum();//取总成绩
char * getsex();//取性别
double getch();//取各科成绩
double geten();
double getma();
int getborth();
int getnum();//取学号
char* getname();//取姓名
};


Base::Base()//基类构造
{
num=0;
strcpy(name,"No name");
ch=0;en=0;ma=0;
borth=1900;
}

int Base::getborth()
{
return borth;}

double Base::getsum()
{
return ch+en+ma;}

double Base::getch()
{
return ch;}

double Base::geten()
{
return en;}

double Base::getma()
{
return ma;}

int Base::getnum()
{
return num;}

char *Base::getsex()
{
return sex;}

char * Base::getname()
{
return name;}


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

// 本科生类 //

///////////////////////////////////
class College:public Base//本科生类
{
private:
int id;//本科生识别
char subject[20];//专业
public:
College();//College构造
int getid();//本科生识别
char* getsub();
void set();
void display();
friend ostream& operator<<(ostream&,const College&);
friend istream& operator>>(istream&,College&);
};
void College::set()
{
cout<<"输入本科生信息\n"<<"学号 姓名 性别(man/woman) 专业 三科成绩 出生年\n";
cin>>num>>name>>sex>>subject>>ch>>en>>ma>>borth;
}

College::College():Base()//College构造
{
id=0;
strcpy(subject,"Computer");
}

char*College::getsub()
{
return subject;}

int College::getid()
{
return id;}

void College::display()//打印
{
cout<<"\n本科生:\n"<<num<<" "<<name<<" "<<sex<<" "<<subject<<" "<<(ch+en+ma)/3<<" "<<(2008-borth)<<endl;
}

//本科生类中重载输入输出符
ostream& operator<<(ostream& out,const College& right)
{

out<<right.num<<" "<<right.name<<" "<<right.sex<<" "<<right.subject<<" "<<(right.ch+right.en+right.ma)/3<<" "<<(2008-right.borth)<<endl;
return out;
}

istream& operator>>(istream& in,College& right)
{

in>>right.num>>right.name>>right.sex>>right.subject>>right.ch>>right.en>>right.ma>>right.borth;
return in;
}

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

// 研究生类 //

///////////////////////////////////
class Graduate:public Base
{
private:
int id;//研究生识别
char instruct[20];//导师
public:
Graduate();//Graduate构造
int getid();
void set();
void display();
char*getins();
friend ostream& operator<<(ostream&,const Graduate&);
friend istream& operator>>(istream&,Graduate&);
};

void Graduate::set()
{
cout<<"输入研究生信息\n"<<"学号 姓名 性别(man/woman) 导师 三科成绩 出生年\n";
cin>>num>>name>>sex>>instruct>>ch>>en>>ma>>borth;
}

int Graduate::getid()
{
return id;}

char*Graduate::getins()
{
return instruct;}

Graduate::Graduate():Base()
{
id=1;
strcpy(instruct,"Mir noname");
}

void Graduate::display()
{
cout<<"\n研究生:\n"<<num<<" "<<name<<" "<<sex<<" "<<instruct<<" "<<(ch+en+ma)/3<<" "<<(2008-borth)<<endl;
}
//研究生类中重载输入输出符
ostream& operator<<(ostream& out,const Graduate& right)
{
out<<right.num<<" "<<right.name<<" "<<right.sex<<" "<<right.instruct<<" "<<(right.ch+right.en+right.ma)/3<<" "<<(2008-right.borth)<<endl;
return out;
}

istream& operator>>(istream& in,Graduate& right)
{
in>>right.num>>right.name>>right.sex>>right.instruct>>right.ch>>right.en>>right.ma>>right.borth;
return in;
}

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

// 主函数 //

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

int main()
{
int getin,j;//主菜单中接受选择
int c1,c2,c3,c4,c5,c6,c7,c8;//case中用来接收选择
Base * p[100];
int hao[100],htp;// case 8
int m,n;//case 8
double zong[100],ztp;//case 8
static int i=0;//静态,用来统计对象创建的个数

ofstream out("com.txt");
ifstream in("com.txt");

lab2:system("cls");
cout<<"\n\n\n";
cout<<" *----------学生信息管理系统----------*\n\n";
cout<<" 1.录入信息\n";
cout<<" 2.显示全部学生\n";
cout<<" 3.计算平均成绩\n";
cout<<" 4.删除一个学生\n";
cout<<" 5.按年级输出学生信息\n";
cout<<" 6.按性别输出学生信息\n";
cout<<" 7.按姓名检索学生\n";
cout<<" 8.按总分排序\n";
cout<<" 9.结束程序运行\n\n";
cout<<" *---------- 52computer -----------*\n";
cout<<"\n\n输入您的选择(1~8):";
cin>>getin;

switch(getin)
{
case 1://录入信息

lab1: system("cls");
cout<<"1.录入本科生信息"<<endl;
cout<<"2.录入研究生信息"<<endl;
cout<<"3.保存所有信息"<<endl;
cout<<"4.返回上一级菜单"<<endl;
cout<<"选择:";
cin>>c1;
cout<<endl;
switch(c1)
{

case 1:{
p[i]=new College;
p[i]->set();
i++;
goto lab1;
}

case 2:{
p[i]=new Graduate;
p[i]->set();
i++;
goto lab1;
}
case 3://输出文件

for(j=0;j<i;j++)
{
if(p[j]->getid()==1)
out<<p[j]->getnum()<<" "<<p[j]->getname()<<" "<<p[j]->getsex()<<" "<<p[j]->getch()<<" "<<p[j]->geten()<<" "<<p[j]->getma()<<" "<<2008-p[j]->getborth()<<endl;
if(p[j]->getid()==0)
out<<p[j]->getnum()<<" "<<p[j]->getname()<<" "<<p[j]->getsex()<<" "<<p[j]->getch()<<" "<<p[j]->geten()<<" "<<p[j]->getma()<<" "<<2008-p[j]->getborth()<<endl;
}
cout<<" 保存成功!";
goto lab1;


default:
goto lab2;
}
break;

case 2: //显示全部信息
system("cls");
cout<<"学生信息\n"<<"学号 姓名 性别(man/woman) 专业/导师 平均成绩 年龄\n";
for(j=0;j<i;j++)
{
p[j]->display();
//cout<<p[j]->display();
}
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c2;
switch(c2)
{
case 1:case 2:case 3:default: goto lab2;
}
case 3://计算平均成绩
system("cls");
cout<<endl<<endl;
cout<<" ------计算平均成绩-----\n";
cout<<" 1. 语文平均成绩\n";
cout<<" 2. 英语平均成绩\n";
cout<<" 3. 数学平均成绩\n";
cout<<" -----------------------\n";
cout<<" 你的选择:";
cin>>c3;
switch(c3)
{
case 1:{

double sumy=0;
for(j=0;j<i;j++)
{
sumy=sumy+p[j]->getch();
}
cout<<"\n语文平均成绩:"<<(sumy/i)<<endl;
break;
}
case 2:{
double sume=0;
for(j=0;j<i;j++)
{
sume=sume+p[j]->getch();
}
cout<<"\n英语平均成绩:"<<(sume/i)<<endl;
break;
}
case 3:{
double summ=0;
for(j=0;j<i;j++)
{
summ=summ+p[j]->getch();
}
cout<<"\n数学平均成绩:"<<(summ/i)<<endl;
break;
}
default :
goto lab2;
}
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;

}

case 4://删除一个学生
system("cls");
cout<<endl<<endl;
cout<<" ------删除一个学生-----\n";
cout<<" 1. 按学号删除\n";
cout<<" 2. 按姓名删除\n";
cout<<" 3. 返回上级\n";
cout<<" -----------------------\n";
cout<<" 你的选择:";
cin>>c4;
switch(c4)
{
case 1:
int xuehao;
cout<<"输入学生的学号:";
cin>>xuehao;
for(j=0;j<i;j++)
{
if(p[j]->getnum()==xuehao)
{
for(int del=j;del<i;del++)
p[del]=p[del+1];
i--;
}
}
cout<<" \n成功删除.......!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;

}

case 2:
char ming[20];
cout<<"输入学生的姓名:";
cin>>ming;
for(j=0;j<i;j++)
{
if(strcmp(p[j]->getname(),ming)==0)
{
for(int del=j;del<i;del++)
p[del]=p[del+1];
i--;
}
}
cout<<" \n成功删除........!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c3;
switch(c3)
{
case 1:case 2:case 3:default: goto lab2;

}
default:goto lab2;
}
case 5: ////按年级输出学生信息////
system("cls");
cout<<"\n\n\n";
cout<<" ---------按年级输出学生信息---------\n";
cout<<" 1.按本科生输出学生信息\n";
cout<<" 2.按研究生输出学生信息\n";
cout<<" ------------------------------------\n";
cout<<" 你的选择:";
cin>>c5;
switch(c5)
{
case 1:
cout<<"学号 姓名 性别 专业 平均成绩 年龄\n";
for(j=0;j<i;j++)
{
if(p[j]->getid()==0)
p[j]->display();
}
cout<<"\n输入任意数字返回主菜单:";
cin>>c5;
switch(c5)
{
case 1:case 2:case 3:default: goto lab2;
}
case 2:
cout<<"学号 姓名 性别 导师 平均成绩 年龄\n";
for(j=0;j<i;j++)
{
if(p[j]->getid()==1)
p[j]->display();
}
cout<<"\n输入任意数字返回主菜单:";
cin>>c5;
switch(c5)
{
case 1:case 2:case 3:default: goto lab2;
}
default:
cout<<"\n输入错误!\n";
break;
cout<<"\n输入任意数字返回主菜单:";
cin>>c5;
switch(c5)
{
case 1:case 2:case 3:default: goto lab2;
}
}
case 6://按性别输出学生信息
system("cls");
cout<<endl<<endl;
cout<<" --------按性别输出学生信息-------\n";
cout<<" 1.显示全部女生\n";
cout<<" 2.显示全部男生\n";
cout<<" ---------------------------------\n";
cout<<" 你的选择:";
cin>>c6;
if(c6==1)
{
for(j=0;j<i;j++)
{
if(strcmp(p[j]->getsex(),"man"))
p[j]->display();
}
}
else if(c6==2)
for(j=0;j<i;j++)
{
if(strcmp(p[j]->getsex(),"woman"))
p[j]->display();
}
else
cout<<"\n\n Error!\n";
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c6;
switch(c6)
{
case 1:case 2:case 3:default: goto lab2;

}


case 7://按姓名检索学生
system("cls");
cout<<"\n\n\n\n\n\n";
char xingm[20];
cout<<"输入学生的姓名:";
cin>>xingm;
for(j=0;j<i;j++)
{
if(strcmp(p[j]->getname(),xingm)==0)
{
p[j]->display();
}
}
cout<<"\n\n输入任意数字返回主菜单:";
cin>>c7;
switch(c7)
{
case 1:case 2:case 3:default: goto lab2;

}
case 8://按总分排序


for(int ci=0;ci<i;ci++)
{
hao[ci]=p[ci]->getnum();
zong[ci]=p[ci]->getsum();
}

for(n=0;n<i;n++)
{
for(m=n+1;m<i;m++)
{
if(zong[n]>zong[m])
{
htp=hao[m];
hao[m]=hao[n];
hao[n]=htp;
ztp=zong[m];
zong[m]=zong[n];
zong[n]=ztp;
}
}
}
system("cls");
cout<<endl<<endl;
cout<<" ---------按总分排序--------\n";
cout<<" 学生学号 总分\n";
for(j=0;j<i;j++)
{
cout<<" "<<hao[j]<<" "<<zong[j]<<endl;
}

cout<<"\n\n输入任意数字返回主菜单:";
cin>>c8;
switch(c8)
{
case 1:case 2:case 3:default: goto lab2;

}


}
//switch end !

for(j=0;j<i;j++)//释放内存空间
delete p[j];


/* 测试输入输出<<,>>重载
College d;
Graduate g;
cout<<"输入本科生信息\n"<<"学号 姓名 专业 三科成绩 出生年\n";
cin>>d;
cout<<"学号 姓名 专业 平均成绩 年龄\n";
cout<<d;
cout<<"输入研究生信息\n"<<"学号 姓名 导师 三科成绩 出生年\n";
cin>>g;
cout<<"学号 姓名 导师 平均成绩 年龄\n";
cout<<g;
*/



return 0;

}
// main end !























2 条评论:

  1. 这里的首页怎么把文章全显示出来了?
    不能只显示标题吗?

    回复删除
  2. 似乎可以只显示标题
    但是我想要显示摘要~

    回复删除

关注者