一.封面------------------------------1
二.目录页--------------------------------2
三.基本内容和要求------------------------3-4
四.软件设计整体规划及方案----------------5
五.程序功能简介--------------------------6
六.主体内容------------------------------6-30
1.设计分析----------------------------6-7
2.程序结构----------------------------7
3.各模块功能、程序说明与源程序---------7-25
4.操作方法与试验结果------------------26-29
5.设计体会----------------------------30
6.参考文献----------------------------30
三.基本内容和要求
设计一个研究生基本信息管理案例,实现对不同学制的研究生的信息管理。研究生的学制包括:学术硕士和工程硕士。定义一个基本的研究生类,基本信息包括:专业,发表论文((名称与级别1、2、3)可以多篇,最多三篇),论文成绩,总成绩;工程硕士属性包括:领域,参与项目(名称与级别A,B,C…)项目成绩,总成绩。计算方式如下
1) 学术硕士论文成绩计算:各个级别的论文得分为:级别*10,每个学生论文最高90分:假设某研究生发表两篇论文,级别分别为1、2,那么论文成绩=(10\90+20\90)*100,总成绩=课程成绩*0.7+论文成绩*0.3;
2) 工程硕士项目成绩计算:每个学生只参与一项项目,各个级别得分:A级90,B级75,C级60,不参与项目得分为0。
总成绩=课程成绩*0.5+项目成绩*0.5;
1、 数据文件管理功能:利用输入输出流创建新文件、打开文件、保存文件。
2、 计算与统计功能:采用静态数据成员与成员函数完成记录中的相关数据统计。
1) 能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括总数、平均值、分段信息),例如:按总成绩得分为100、90-99、80-89、70-79、60-69和不及格学生的人数,以及所占的百分比。
2) 计算每个研究生的总成绩。
3、 记录管理功能:利用继承与派生思想创建不同的类;记录的管理采用链表或者指针数组实现;采用抽象类、虚函数等实现对象与函数的动态关联,体现多态性。
1) 输入\添加\插入记录:利用重载运算符“>>”完成对任意一条记录输入、添加或插入数据表中,并保存到数据文件中。
2) 查询、显示记录:能够打开已经存在的数据表文件,根据用户要求按所给记录关键字查询一个或多个相关联记录的各项信息。利用重载运算符“<<”输出个对象的信息。
3) 修改记录:能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。
4) 删除记录:能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具备逻辑删除(具有恢复功能)和物理删除功能,并对更新的数据表信息进行文件保存。
四.软件设计整体规划及方案
1.对于研究生信息,建立基类Graduated,并由此派生出两种研究生学制:学术硕士Xueshu和工程硕士Gongcheng,以此实现对基本信息的录入。
2.在编写程序过程中,可以用到重载,派生,多态性,链表等功能来实现相应的功能。
3.大致方案:
对研究生各类论文和项目进行收集和录入。先定义一个研究生基类,录入两类研究生的基本个人信息:班级,学号,姓名,性别等。由研究生基类派生出两类研究生:学术硕士研究生和工程硕士研究生。在研究生个人基本信息录入成功后,再设计模块对各类研究生的论文和项目信息进行收集,进行计分和成绩统计及计算平均分和各分段所占相应总体的成绩。在完成相应信息和成绩的录入后再输出各类研究生的基本信息及成绩和各分段所占相应总体的成绩,在系统已经录入了各类研究生的各项信息的前提下,使用输出功能可以显示各类研究生的所有信息及相应成绩的相关内容等等。具体包括两类研究生的姓名,学号,性别,论文成绩/项目成绩,论文/项目题目,以及各分段占总体相应的比例。然后实现查看各类研究生各方面的信息功能,再返回到主菜单进行之后的相应操作,选择插入、修改、删除等所需操作来继续进行系统的完善。然后在所有操作完成后对所记录的信息进行保存,方便在下次使用时直接对已录入并记录的信息进行查询或者其它相应操作。
五.程序功能简介
本系统主要用于对不同种类(学术硕士、工程硕士两种)的研究生各类成绩进行信息收集和管理。通过本系统,可以将各个类的研究生的个人基本信息和相应成绩输入到系统中,由系统对不同种类的研究生的成绩进行相应各类计算和录入,再保存到相应文件中,实现信息的录入和记录,便于进行相关查询和相关管理操作。
此程序可以实现:录入、添加各类研究生信息,删除各类研究生相关信息,修改各类研究生信息,查询各类研究生信息,计算与统计各类研究生相关信息并将所录入的信息保存至txt文件,在查询时可显示之前所录入的相关信息。
六.主体内容
1.设计分析:对于一个管理系统而言,主函数,函数以及成员函数是其重要组成部分。主函数的主要任务是确定所需调用函数,根据课程设计要求,该系统至少应该实现以下几种基本功能:输出研究生各类基本信息,删除所需的各类研究生相关信息,修改各类研究生相关信息,查找各类研究生相关信息,保存所输入的研究生相关信息。实现以上任何一种功能都必须要调用一个函数,而编写函数的目的是编写一个能实现某种功能的函数供主函数调用。根据C++面向对象的特点,函数可以调用类中的成员函数。这样主函数和函数以及成员函数之间就层次分明,关系清晰明了,避免过于繁长。不同的函数调用的成员函数是不尽相同的,大体上每个函数都有一个相对应的成员函数,这些成员函数都是共有函数,并且只被其对应函数仅且只调用一次。当然,每个函数不可能只调用一个成员函数。而成员函数是一个系统的灵魂所在,因为所有的处理过程的细节都在成员函数中完成的。编写成员函数实际上就是一个算法的实现。成员函数的设计包括两方面内容:成员函数算法的实现和成员函数过程的实现。 有了这些重要的部分,一个程序也就具备了初步的条件,一个管理系统的模型就被建立了起来。
2.程序结构:主界面1----输入菜单----选择操作----选择所要录入研究生类别----录入相关信息和成绩----修改\插入\查询\删除\退出。
3.各模块功能、源程序及程序说明:
1.头文件
//#include "stdafx.h"
#include
#include
#include
using namespace std;
2.重载
class Xueshu;
istream& operator>>(istream &in,Xueshu &x);
ostream& operator<< (ostream &out,Xueshu &x);
3.基类与派生模块
class Graduated //研究生类 为基类
{public:
int num; //学号
string name; //姓名
char s //性别
int age; //年龄
float score; //课程分数
};
/////////////////////////////////////////////////////////////////////////////////////
class Gongcheng; //全局声明
class Xueshu:public Graduated //学术硕士类
{public:
string major;
Paper pap[3];
float scopap; //学术硕士论文成绩
float sump; //学术硕士总成绩
public:
static float sum; //学术硕士全体总成绩
static int count; //学术硕士总人数
static float average; //学术硕士平均成绩
static int a[6]; //学术硕士总分分段人数
friend void ifshuoshi(Xueshu x[],Gongcheng g[]);
friend void ofshuoshi(Xueshu x[],Gongcheng g[]);
friend istream& operator>>(istream &in,Xueshu &x); //重载运算符>>为"in"
friend ostream& operator<< (ostream &out,Xueshu &x); //重载运算符<<为"out"
void sumpap(); //成员函数,求学术硕士论文成绩
void sumsump(); //成员函数,求学术硕士论文总成绩
void sumsum(); //成员函数,求学术硕士总成绩,为以后的函数求平分
static void aver(); //成员函数,求学术硕士平均成绩
void tongji(); //成员函数,统计不同分段的情况
int chanum(int n); //成员函数,用于学号的查询是否正确,然后返回相应值
int chaname(string n); //成员函数,用于姓名的查询是否正确,然后返回相应值
int renum(); //成员函数,重置学号,使其归0,便于查询功能的实现
};
////////////////////////////////////////////////////////////////////////////////////////////
class Gongcheng:public Graduated //工程硕士类
{public:
string block; //领域
Project pro; //项目
float scopro; //工程硕士项目成绩
float sump; //工程硕士总成绩
public:
static float sum; //静态数据成员求和
static int count; //静态数据成员累计
static float average; //求静态数据成员全体平均成绩
static int a[6]; //求静态数据成员存放6个分段的人数
friend void ifshuoshi(Xueshu x[],Gongcheng g[]); //从文件输入信息
friend void ofshuoshi(Xueshu x[],Gongcheng g[]);//将信息保存于文件中
friend istream& operator>>(istream&in,Gongcheng&g); //友元重载输入函数输入工程硕士
friend ostream& operator<< (ostream&out,Gongcheng&g);//友元重载输出函数输出工程硕士
void sumpro(); //求成员函数工程硕士项目成绩
void sumsump(); //求成员函数工程硕士总成绩
void sumsum(); //求成员函数工程硕士全体总成绩
static void aver(); //求成员函数工程硕士全体平均成绩
void tongji(); //成员函数统计不同分段信息
int chanum(int n); //成员函数,用于学号的查询是否正确,然后返回相应的值
int chaname(string n); //成员函数,用于姓名的查询是否正确,然后返回相应的值
int return_num2(); //成员函数,重置学号,使其归0, 便于查询功能的实现
}
3.声明、定义函数与文件操作
class Paper //论文类
{public:
Paper():name("as"),level(0){} //构造函数进行初始化
int level; //论文等级
string name; //论文题目
void input(); //构造一个输入论文的成员函数
void output(); //构造一个输出论文的成员函数
};
void Paper:: input()
{
cout<<"请输入学术硕士论文题目:";
cin>>name;
cout<<"请输入学术硕士论文等级(1,2,3):";
cin>>level;
for(;level!=1&&level!=2&&level!=3;)
{
cout<<"!输入错误!请重新输入!:";
cin>>level;
}
}
void Paper::output()
{
cout<<"该学术硕士论文题目为:"<
cout<<"该学术硕士论文等级为:"<
}
////////////////////////////////////////////////////////////////////////////////////////
class Project //项目类
{public:
Project():name("as"),level('a'){} //构造函数进行初始化
char level; //项目等级
string name; //项目名称
void input(); //构造一个输入项目的成员函数
void output(); //构造一个输出论文的成员函数
};
void Project:: input()
{
cout<<"请输入工程硕士参与项目名称:";
cin>>name;
cout<<"请输入工程硕士项目得分(A,B,C):";
cin>>level;
for(;level!='A'&&level!='B'&&level!='C';)
{
cout<<"!输入错误!请重新输入:";
cin>>level;
}
}
void Project::output()
{
cout<<"该工程硕士参与项目为:"<
cout<<"该工程硕士项目等级为:"<
}
//////////////////////////////////////////////////////////////////////////////////
class Gongcheng; //全局声明
class Xueshu:public Graduated //学术硕士类
{public:
string major;
Paper pap[3];
float scopap; //学术硕士论文成绩
float sump; //学术硕士总成绩
public:
static float sum; //学术硕士全体总成绩
static int count; //学术硕士总人数
static float average; //学术硕士平均成绩
static int a[6]; //学术硕士总分分段人数
friend void ifshuoshi(Xueshu x[],Gongcheng g[]);
friend void ofshuoshi(Xueshu x[],Gongcheng g[]);
friend istream& operator>>(istream &in,Xueshu &x); //重载运输符>>为"in"
friend ostream& operator<< (ostream &out,Xueshu &x); //重载运算符<<为"out"
void sumpap(); //成员函数,求学术硕士论文成绩
void sumsump(); //成员函数,求学术硕士论文总成绩
void sumsum(); //成员函数,求学术硕士总成绩,为以后的函数求平均分
static void aver(); //成员函数,求学术硕士平均成绩
void tongji(); //成员函数,统计不同分段的情况
int chanum(int n); //成员函数,用于学号的查询是否正确,然后返回相应的值
int chaname(string n); //成员函数,用于姓名的查询是否正确,然后返回相应的值
int renum(); //成员函数,重置学号,使其归0,便于查询功能的实现
};
float Xueshu::sum=0;
int Xueshu::count=0;
float Xueshu::average=0;
int Xueshu::a[6]={0,0,0,0,0,0};
istream& operator>>(istream&in,Xueshu&x) //重载运算符>>
{
int i;
char j='y';
cout<<"请输入学术硕士学号:";
in>>x.num;
cout<<"请输入学术硕士姓名:";
in>>x.name;
cout<<"请输入学术硕士性别【m(男)/f(女)】:";
in>>x.sex;
for(;x.sex!='m'&&x.sex!='f';)
{
cout<<"!输入错误!请重新输入!:";
in>>x.sex;
}
cout<<"请输入学术硕士年龄:";
in>>x.age;
cout<<"请输入学术硕士成绩:";
in>>x.score;
for(;x.score<0||x.score>100;)
{
cout<<"!成绩无效!请重新输入:";
in>>x.score;
}
cout<<"请输入学术硕士专业:";
in>>x.major;
for(i=0;i<3&&j=='y';i++)
{
x.pap[i].input();
cout<<"(y/n)继续/停止输入学术论文:";
in>>j;
}
return in;
}
ostream& operator<< (ostream&out,Xueshu&x) //重载运算符<<
{
int i;
out<<"该学术硕士学号为:"<
out<<"该学术硕士姓名为:"<
out<<"该学术硕士性别为:"<
out<<"该学术硕士年龄为:"<
out<<"该学术硕士课程成绩为:"<
out<<"该学术硕士专业为:"<
for(i=0;i<3&&(x.pap[i].level==1||x.pap[i].level==2||x.pap[i].level==3);i++)
x.pap[i].output();
out<<"该学术硕士总成绩为:"<
return out;
}
void Xueshu::sumpap()
{
scopap=0;
int i;
for(i=0;i<3&&(pap[i].level==1||pap[i].level==2||pap[i].level==3);i++)
scopap+=pap[i].level/9*100;
}
void Xueshu::sumsump()
{
sumpap();
sump=(float)(scopap*0.3+score*0.7);
}
void Xueshu::sumsum()
{
sum+=sump;
count++;
}
void Xueshu::aver()
{
average=sum/count;
}
void Xueshu::tongji()
{
if(sump==100)a[0]++;
if(sump>=90&&sump<100)a[1]++;
if(sump>=80&&sump<90)a[2]++;
if(sump>=70&&sump<80)a[3]++;
if(sump>=60&&sump<70)a[4]++;
if(sump<60)a[5]++;
}
int Xueshu::chanum(int n)
{
if(num==n)
return 1;
else
return 0;
}
int Xueshu::chaname(string n)
{
if(name==n)
return 1;
else
return 0;
}
int Xueshu::renum()
{
return num;
}
/////////////////////////////////////////////////////////////////////////////////////////
class Gongcheng:public Graduated //工程硕士类
{public:
string block; //领域
Project pro; //项目
float scopro; //工程硕士项目成绩
float sump; //工程硕士总成绩
public:
static float sum; //静态数据成员求和
static int count; //静态数据成员累计
static float average; //静态数据成员,求工程硕士全体平均成绩
static int a[6]; //静态数据成员,求工程硕士存放6个分段的人数
friend void ifshuoshi(Xueshu x[],Gongcheng g[]); //从文件输入信息
friend void ofshuoshi(Xueshu x[],Gongcheng g[]); //将信息保存于文件中
friend istream& operator>>(istream&in,Gongcheng&g); //友元重载输入函数输入工程硕士
friend ostream& operator<< (ostream&out,Gongcheng&g);//友元重载输出函数输出工程硕士
void sumpro(); //求成员函数工程硕士项目成绩
void sumsump(); //求成员函数工程硕士总成绩
void sumsum(); //求成员函数工程硕士全体总成绩
static void aver(); //求成员函数工程硕士全体平均成绩
void tongji(); //成员函数统计不同分段信息
int chanum(int n); //成员函数,用于学号的查询是否正确,然后返回相应的值
int chaname(string n); //成员函数,用于姓名的查询是否正确,然后返回相应的值
int return_num2(); //成员函数,重置学号,使其归0,便于查询功能的实现
};
float Gongcheng::sum=0;
int Gongcheng::count=0;
float Gongcheng::average=0;
int Gongcheng::a[6]={0,0,0,0,0,0};
istream& operator>>(istream&in,Gongcheng&g) //重载 >>
{
char j;
cout<<"请输入工程硕士学号:";
in>>g.num;
cout<<"请输入工程硕士姓名:";
in>>g.name;
cout<<"请输入工程硕士性别【m(女)/f(男)】:";
in>>g.sex;
for(;g.sex!='m'&&g.sex!='f';)
{
cout<<"!输入错误!请重新输入:";
in>>g.sex;
}
cout<<"请输入工程硕士年龄:";
in>>g.age;
cout<<"请输入工程硕士成绩:";
in>>g.score;
for(;g.score<0||g.score>100;)
{
cout<<"抱歉!成绩无效!请重新输入:";
in>>g.score;
}
cout<<"请输入工程硕士领域名称:";
in>>g.block;
cout<<"(y/n)是/否输入工程项目:";
in>>j;
if(j=='y')
g.pro.input();
return in;
}
ostream& operator<< (ostream&out,Gongcheng&g) //重载 <<
{
out<<"该工程硕士学号为:"<
out<<"该工程硕士姓名为:"<
out<<"该工程硕士性别为:"<
out<<"该工程硕士年龄为:"<
out<<"该工程硕士成绩为:"<
out<<"该工程硕士领域为:"<
if(g.pro.level=='A'||g.pro.level=='B'||g.pro.level=='C')
g.pro.output();
out<<"该工程硕士总成绩为:"<
return out;
}
void Gongcheng::sumpro() //求工程硕士项目成绩
{
scopro=0;
if(pro.level=='A'||pro.level=='B'||pro.level=='C')
{
if(pro.level=='A')
scopro=90;
if(pro.level=='B')
scopro=75;
if(pro.level=='C')
scopro=60;
}
}
void Gongcheng::sumsump() //求工程硕士个人总成绩
{
sumpro();
sump=(float)(scopro*0.5+score*0.5);
}
void Gongcheng::sumsum() //求工程硕士全体总成绩
{
sum+=sump;
count++;
}
void Gongcheng::aver() //求工程硕士全体平均成绩
{
average=sum/count;
}
void Gongcheng::tongji() //统计分段信息
{
if(sump==100) a[0]++;
if(sump>=90&&sump<100) a[1]++;
if(sump>=80&&sump<90) a[2]++;
if(sump>=70&&sump<80) a[3]++;
if(sump>=60&&sump<70) a[4]++;
if(sump<60)a[5]++;
}
int Gongcheng::chanum(int n) //按学号查询
{
if(num==n)
return 1;
else
return 0;
}
int Gongcheng::chaname(string n) //按姓名查询
{
if(name==n)
return 1;
else
return 0;
}
int Gongcheng::return_num2()
{
return num;
}
///////////////////////////////////////////////////////////////////////////////////
static int X=0; //功能函数
static int G=0;
void inxue(Xueshu x[]) //从键盘输入学术硕士信息
{
cout<<"输入学术硕士人数:";
cin>>X;
int i;
for(i=0;i
{
cin >> x[i];
}
}
void outxue(Xueshu x[]) //学术硕士信息输出到屏幕
{
int i;
for(i=0;i
{
x[i].sumsump();
x[i].sumsum();
x[i].tongji();
cout<
cout<
}
Xueshu::aver();
cout<<"学术硕士总人数为:"<
cout<<"其中他们的平均分为:"<
cout<<"成绩分布为:"<
cout<<"100人数为:"<
cout<<"90~99人数为:"<
cout<<"80~89人数为:"<
cout<<"70~79人数为:"<
cout<<"60~69人数为:"<
cout<<"不及格人数为:"<
}
////////////////////////////////////////////////////////////////////////////////////////////
void ingong(Gongcheng g[]) //从键盘输入工程硕士信息
{
int i;
cout<<"输入工程硕士人数:";
cin>>G;
for(i=0;i
{
cin>>g[i];
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
void outgong(Gongcheng g[]) //工程硕士信息输出到屏幕
{
int i;
for(i=0;i
{
g[i].sumsump();
g[i].sumsum();
g[i].tongji();
cout<
cout<
}
Gongcheng::aver();
cout<<"工程硕士总人数为:"<
cout<<"其中他们的平均分为:"<
cout<<"成绩分布为:"<
cout<<"100人数为:"<
cout<<"90~99人数为:"<
cout<<"80~89人数为:"<
cout<<"70~79人数为:"<
cout<<"60~69人数为:"<
cout<<"不及格人数为:"<
}
/////////////////////////////////////////////////////////////////////////////////////////
void ifshuoshi(Xueshu x[],Gongcheng g[]) //从文件输入信息
{
int i;
ifstream infile("f1.dat",ios::in);
if(!infile)
{
cerr<<"!打开失败!"<
exit(1);
}
infile>>X;
for(i=0;i
{
infile>>x[i].num>>x[i].name>>x[i].sex>>x[i].age>>x[i].score>>x[i].major;
infile>>x[i].pap[0].name>>x[i].pap[0].level>>x[i].pap[1].name;
infile>>x[i].pap[1].level>>x[i].pap[2].name>>x[i].pap[2].level;
}
infile>>G;
for(i=0;i
{
infile>>g[i].num>>g[i].name>>g[i].sex>>g[i].age>>g[i].score>>g[i].block;
infile>>g[i].pro.name>>g[i].pro.level;
}
infile.close(); //关闭文件
}
///////////////////////////////////////////////////////////////////////////////////
void ofshuoshi(Xueshu x[],Gongcheng g[]) //将信息保存于文件
{
int i;
int j;
ofstream outfile("f1.dat",ios::out);
if(!outfile)
{
cerr<<"!打开失败!"<
exit(1);
}
outfile<
for(i=0;i
{
outfile<
outfile<
for(j=0;j<3;j++)
outfile<
}
outfile<
for(i=0;i
{
outfile<
outfile<
outfile<
}
outfile.close(); //关闭文件
}
/////////////////////////////////////////////////////////////////////////////
void conin(Xueshu x[],Gongcheng g[]) //控制输入文件
{
int i;
cout<<"1*从文件输入-------------------------------------------------------------"<
cout<<"2*从键盘输入-------------------------------------------------------------"<
cout<<"****************************************************************************"<
cin>>i;
for(;i!=1&&i!=2;)
{
cout<<"抱歉!输入无效!请重新输入:"<
cin>>i;
}
if(i==1)
ifshuoshi(x,g);
if(i==2)
{
inxue(x);
cout<
ingong(g);
}
}
/////////////////////////////////////////////////////////////////////////////////////////
void conout(Xueshu x[],Gongcheng g[]) //控制输出文件
{
cout<<"学术硕士:"<
outxue(x);
cout<
cout<<"工程硕士:"<
outgong(g);
}
//////////////////////////////////////////////////////////////////////////////////////////
Xueshu *chanum1(Xueshu x[],int n) //按学号查询信息
{
int i;
for(i=0;i
if(x[i].chanum(n))
return &x[i];
while(i==X)//?????
{
cout<<"抱歉!查无此人!请重新输入学号:";
cin>>n;
for(i=0;i
if(x[i].chanum(n))
return &x[i];///?????
}
}
Xueshu* chaname1(Xueshu x[],string n) //按姓名查询信息
{
int i;
for(i=0;i
if(x[i].chaname(n))
return &x[i];
while(i==X)
{
cout<<"抱歉!查无此人!请重新输入姓名:";
cin>>n;
for(i=0;i
if(x[i].chaname(n))
return &x[i];
}
}
Gongcheng* chanum2(Gongcheng g[],int n) //引用工程类对象
{
int i;
for(i=0;i
if(g[i].chanum(n))
return &g[i];
while(i==G)
{
cout<<"抱歉!查无此人!请重新输入学号:";
cin>>n;
for(i=0;i
if(g[i].chanum(n))
return &g[i];
}
}
Gongcheng* chaname2(Gongcheng g[],string n)
{
int i;
for(i=0;i
if(g[i].chaname(n))
return &g[i];
while(i==G)
{
cout<<"抱歉!查无此人!请重新输入姓名:";
cin>>n;
for(i=0;i
if(g[i].chaname(n))
return &g[i];
}
}
///////////////////////////////////////////////////////////////////////////////////////////
void all(Xueshu x[],Gongcheng g[]) //查询、删除、修改信息
{ int i;
int j;
Xueshu *q;
Gongcheng *b;
string n;
cout<
cout<<"按1*选择查询学术硕士:";
cout<<"按2*选择查询工程硕士:";
cout<<"-------------------------------------------------------------------------"<
cin>>j;
for(;j!=1&&j!=2;)
{
cout<<"输入错误请重新输入:";
cin>>j;
}
if(j==1)
{
cout<<"-----------------------------------------------------------------------"<
cout<<"按1*选择学号查询:";
cout<<"按2*姓名查询:";
cout<<" ";
cout<<"------------------------------------------------------------------------"<
cin>>i;
for(;i!=1&&i!=2;)
{
cout<<"!输入错误!请重新输入:";
cin>>i;
}
if(i==1)
{
cout<<"请输入你想查询的学号:";
cin>>i;
q=chanum1(x,i);
cout<<*q;
}
if(i==2)
{
cout<<"请输入你想查询的姓名:";
cin>>n;
q=chaname1(x,n);
cout<<*q;
}
cout<<"--------------------------------------------------------------------------"<
cout<<"按[1]/[2]/[3]/[4]***********选择***********[修改] / [插入] / [删除记录] / [结束]";
cout<<" ";
cout<<"--------------------------------------------------------------------------"<
cin>>i;
for(;i!=1&&i!=2&&i!=3&&i!=4;)
{
cout<<"!输入错误!请重新输入:";
cin>>i;
}
if(i==1)
cin>>*q;
if(i==2)
{
cin>>x[X];
X++;
}
if(i==3)
{
x[X]=*q;
for(i=0;i<&x[X]-q;i++)
*(q+i)=*(q+1+i);
X--;
}
}
if(j==2)
{ cout<<"-------------------------------------------------------------------------"<
cout<<"按1*选择学号查询:";
cout<<"按2*选择姓名查询:";
cout<<" ";
cout<<"----------------------------------------------------------------------------"<
cin>>i;
for(;i!=1&&i!=2;)
{
cout<<"!输入错误!请重新输入:";
cin>>i;
}
if(i==1)
{cout<<"请输入你想查询的学号:";
cin>>i;
b=chanum2(g,i);
cout<<*b;
}
else
{
cout<<"请输入你想查询的姓名:";
cin>>n;
b=chaname2(g,n);
cout<<*b;
}
cout<<"--------------------------------------------------------------------------"<
cout<<"按[1]/[2]/[3]/[4]***********选择***********[修改] / [插入] / [删除记录] / [结束]";
cout<<" ";
cout<<"--------------------------------------------------------------------------"<
cin>>i;
for(;i!=1&&i!=2&&i!=3&&i!=4;)
{
cout<<"!输入错误!请重新输入:";
cin>>i;
}
if(i==1)
cin>>*b;
if(i==2)
{
cin>>g[G];
G++;
}
if(i==3)
{
g[G]=*b;
for(i=0;i<&g[G]-b;i++)
*(b+i)=*(b+1+i);
G--;
}
}
}
void rank(Xueshu x[],Gongcheng g[]) //对记录按学号排序
{
int i;
int k;
Xueshu q[20];
Gongcheng b[20];
int n[20];
int j[20];
for(i=0;i
{
n[i]=x[i].renum();
}
for(k=0;k
{
for(i=0;i
{
if(n[i]>n[i+1])
j[X-k-1]=i;
}
n[j[X-k-1]]=0;
}
for(i=0;i
{
q[i]=x[i];
}
for(i=0;i
{
x[i]=q[j[i]];
}
for(i=0;i
{
n[i]=g[i].return_num2();
}
for(k=0;k
{
for(i=0;i
{
if(n[i]>n[i+1])
j[G-k-1]=i;
}
n[j[G-k-1]]=0;
}
for(i=0;i
{
b[i]=g[i];
}
for(i=0;i
{
g[i]=b[j[i]];
}
}
4.主函数部分
Void show1() //输入界面1
{
cout<<"**********************************************************************************"<
cout<
cout<
cout<
cout<
cout<<"********************************************************************************"<
getchar();
system("cls");
}
int main() //主函数
{ show1();
cout<<" **********欢迎进入研究生管理系统**********"<
cout<<"--------------------------------------------------------------------------------"<
Xueshu x[20];
Gongcheng g[20];
conin(x,g);
conout(x,g);
all(x,g);
ofshuoshi(x,g);
rank(x,g);
return 0;
} cout<<"--------------------------------------------------------------------------------"<
Xueshu x[20];
Gongcheng g[20];
conin(x,g);
conout(x,g);
all(x,g);
ofshuoshi(x,g);
rank(x,g);
return 0;
}
4.操作方法与实验结果截图
按enter键进入系统进行操作选择
选择2从键盘输入所要录入研究生信息
输入工程硕士与学术硕士的相关信息进行信息录入。
两类硕士成绩所占的各类百分比
查询功能,对所记录的信息进行查询。
修改功能,对已录入的信息进入修改操作。5.心得体会
起初做课程设计时,遇到了许多的问题,如类的定义、公有函数怎么去实现所要的结果等一系列的问题,刚开始觉得有点棘手,很多问题搞不懂,不过经过和同组同学的认真讨论以及仔细的阅读教材和相关参考文献,渐渐认识到问题本质,进而将问题一一击破解决,将课程设计比较成功的完成了。但在我的整个系统整体上功能有些不太健全,自己感觉系统有点冗长,部分程序需精简,而且程序界面也不太美观,没有设计一些美观的板块,还有很多不足和需要改进的地方。经过这几天苦心钻研,我觉得C++是一门很有趣的学科,它很好的发散了我们的思维,使思维更开阔,让个人的自主学习能力有了很大的飞跃,与此同时,课程设计也很好的锻炼了同学之间配合与协作,有很多不懂的地方可以一起钻研。做程序的调试的时候常会出现许多问题,同学之间相互帮忙解决处理问题就会比较快。而在编程序的过程中耐心也非常重要,常常会出现这样或者那样的小问题,又很难找出来,需要的是我们的细心以及耐心去一一克服这些难题。虽然上了一学期的C++课程,但是真正编起程来,还是有很大差距的,理论和动手之间的确有很大不同,总之很感谢这次的课程设计,让我学到了许多以前课堂上都很难学到的知识,实践真的非常重要。在这次的课程设计中我提升了自己的实际动手编程能力,获益匪浅,很感谢这次的经验,为我以后打下了坚实的基础。
6.参考文献:谭浩强版《C++程序设计(第二版)》
谭浩强版《C++程序设计题解与上机指导》
¥29.8
¥9.9
¥59.8