一,设计需求:将考生的姓名、成绩,每个科目最低分数要求和初式、复试录取分数线等信息输入进程序中,通过程序判断考生是否能够被录取,然后通过程序将参加考试的考生和通过考试的考生输出成txt格式。
二,设计思想:先创建用于(1)存放各个科目最低录取分数和初式、复试录取分数线的goall类(2)存放考生成绩的object类(3)存放考生个人信息的student类,其中包含一个object类成员(4)存放一个student类数组及该数组考生人数a_num的base类,并让它成为goall类的子类。
编写addstudent函数对考生进行写入操作(写入考生考号等信息)。
编写printsa函数利用ofstream流处理器操作将输入的考生输出等名为“参与考生名单”的txt文件上。
编写printsb函数对输入的考生进行挑选,其中各个科目超过最低分数要求而且总分超过初式分数线的考生利用ofstream输出到名为“初式录取名单“的txt的文件中(通过冒泡排序让输出考生顺序结果按总分成绩从大到小排序)。
编写fushi函数对初式录取的考生进行挑选,其中复试成绩超过分数线的考生将输出成功被复试录取的结果,其中复试成绩低于分数线的考生将输出被淘汰的结果,结果利用ofstream输出在名为“复试考生录取结果”的txt文件中(通过冒泡排序让考生输出结果按复试成绩加专业课成绩之和从大到小排序)。
在主函数中创建一个base类 b1,将考生数据及分数线储存在b1中。并在函数先后执行对addstudent函数的调用、输入初式录取分数线及各个科目最低分数要求、对printsa的调用、对printsb的调用、输入复试的分数线、对fushi函数的调用。
三,设计表示:goall类中goal用来存放初式分数线 fgoal存放复试分数线 mgoal存放数学最低分分数线 egoal存放外语最低分分数线 ogoal存放政治最低分分数线 pgoal存放专业课最低分分数线。
Object类中math用来存放考生数学成绩 lan存放考生外语成绩 profession存放考生专业课成绩 poility存放考生政治成绩 toall存放考生总分成绩 fp存放考生复试成绩
Student类中 a存放考生成绩 name存放考生姓名信息 num存放考生考号 profess存放考生专业 sth存放考生是否为应届的信息
Base类中a[100]用来存放参与考式所有考生 a_num用来存放考生数量。
四,源代码:
#include<iostream>
#include<fstream>
using namespace std;
class goal1 {//存放各个科目最低录取分数和初式、复试录取分数线
public:
goal1() {
goal = 0;
fgoal = 0;
mgoal=0;
egoal=0;
ogoal=0;
pgoal=0;
}
int goal;
int fgoal;
int mgoal;
int egoal;
int ogoal;
int pgoal;
};
class object {//存放考生成绩
public:
int math;
int lan;
int profession;
int poility;
int toall;
int fp;
};
class student {//存放考生个人信息
public:
object a;
string name;
int num;
string profess;
string sth;
};
class base :public goal1 {//存放一个student类数组及该数组考生人数a_num
public:
base() {
a_num = 0;
}
student a[100];
int a_num;
};
void addstudent(base* abs) {//输入考生的函数
string name;
cout << "请输入考生姓名" << endl;
cin >> name;
abs->a[abs->a_num].name = name;
int num;
cout << "请输入考生准考证号" << endl;
cin >> num;
abs->a[abs->a_num].num = num;
string profess;
cout << "请输入考生报考专业" << endl;
cin >> profess;
abs->a[abs->a_num].profess = profess;
string zc;
cout << "考生是否是应届生" << endl;
cin >> zc;
abs->a[abs->a_num].sth = zc;
cout << "请输入考生4门课成绩(数学、外语、政治、专业基础课)" << endl;
cin >> abs->a[abs->a_num].a.math >> abs->a[abs->a_num].a.lan >> abs->a[abs->a_num].a.poility
>> abs->a[abs->a_num].a.profession;
abs->a[abs->a_num].a.toall = abs->a[abs->a_num].a.math + abs->a[abs->a_num].a.lan + abs->a[abs->a_num].a.poility
+ abs->a[abs->a_num].a.profession;
abs->a_num++;
cout << "添加成功" << endl;
system("pause");
system("cls");//清屏
}
void printsa(base* abs) {//输出考生名单
if (abs->a_num == 0) {
cout << "当前无考生输入" << endl;
}
std::ofstream one;
one.open("参与考生名单.txt", std::ios::out);
for (int i = 0; i < abs->a_num; i++) {
one << "参与这次录取考试的考生有:" << endl;
one << "姓名: " << abs->a[i].name << "\t" << "准考证号:" << abs->a[i].
num << "\t" << "报考专业: " << abs->a[i].profess << "\t" << "是否应届: " << abs->a[i].sth << "\t" << endl <<
"数学成绩: " << abs->a[i].a.math << " " << "外语成绩: " << abs->a[i].a.lan << " " <<
"政治成绩: " << abs->a[i].a.poility << " " << "专业课成绩: " << abs->a[i].a.profession << " " << "总分为: " << abs->a[i].a.toall << " " << endl;
system("pause");
system("cls");
}
}
void printsb(base* abs) {//输出初式录取考生
int x = 0;
int b[100];
if (abs->a_num == 0) {
cout << "当前无考生输入" << endl;
}
for (int i = 0; i < abs->a_num; i++) {
if (abs->a[i].a.toall >= abs->goal) {
b[x] = i;
x++;
}
else continue;
}
for (int i = 0; i < x - 1; i++) {
for (int j = 0; j < x - 1 - i; j++) {
if (abs->a[b[j]].a.toall < abs->a[b[j + 1]].a.toall) {
student c = abs->a[b[j]];
abs->a[b[j]] = abs->a[b[j + 1]];
abs->a[b[j + 1]] = c;
}
}
}
ofstream two;
two.open("初式录取名单.txt", ios::out);
for (int i = 0; i < x ; i++) {
if (abs->a[b[i]].a.math >= abs->mgoal && abs->a[b[i]].a.lan >= abs->egoal && abs->a[b[i]].a.poility >= abs->ogoal &&
abs->a[b[i]].a.profession >= abs->pgoal) {
two << "初式被录取的考生有" << endl;
two << "姓名: " << abs->a[b[i]].name << "\t" << "准考证号:" << abs->a[b[i]].num
<< "\t" << "报考专业: " << abs->a[b[i]].profess << "\t" << "是否应届: " << abs->a[b[i]].sth << "\t" << endl <<
"数学成绩: " << abs->a[b[i]].a.math << " " << "外语成绩: " << abs->a[b[i]].a.lan << " " <<
"政治成绩: " << abs->a[b[i]].a.poility << " " << "专业课成绩: " << abs->a[b[i]].a.profession << " " << "总分为: " << abs->a[b[i]].a.toall << " " << endl;
}
else continue;
}
system("pause");
system("cls");
}
void fushi(base* abs) {//输出复试结果
int b[100];
int x = 0;
for (int i = 0; i < abs->a_num; i++) {
if (abs->a[i].a.toall >= abs->goal) {
b[x] = i;
x++;
}
}
for (int i = 0; i < abs->a_num; i++) {
if (abs->a[i].a.toall >= abs->goal && abs->a[i].a.math >= abs->mgoal && abs->a[i].a.lan >= abs->egoal && abs->a[i].a.poility >= abs->ogoal &&
abs->a[i].a.profession >= abs->pgoal) {
cout << abs->a[i].name << "的复试成绩为:";
cin >> abs->a[i].a.fp;
cout << endl;
}
}
for (int i = 0; i < x - 1; i++) {
for (int j = 0; j < x - i - 1; i++) {
if (abs->a[b[j]].a.fp + abs->a[b[j]].a.profession < abs->a[b[j + 1]].a.fp + abs->a[b[j + 1]].a.profession) {
student s1 = abs->a[b[j]];
abs->a[b[j]] = abs->a[b[j + 1]];
abs->a[b[j + 1]] = s1;
}
}
}
std::ofstream three;
three.open("复试考生录取结果.txt", std::ios::out);
for (int i = 0; i < abs->a_num; i++) {
if (abs->a[i].a.toall >= abs->goal&& abs->a[i].a.math >= abs->mgoal && abs->a[i].a.lan >= abs->egoal && abs->a[i].a.poility >= abs->ogoal &&
abs->a[i].a.profession >= abs->pgoal) {
int temp = (abs->a[i].a.fp + abs->a[i].a.profession) / 2;
if (abs->a[i].a.fp >= abs->fgoal) {
three << "姓名: " << abs->a[i].name << "\t" << "准考证号:" << abs->a[i].
num << "\t"
<< "报考专业: " << abs->a[i].profess << "\t" << "是否应届: " << abs->a[i].sth << "\t" << endl <<
"复试成绩: " << abs->a[i].a.fp << " " << "成功被复试录取" << endl;
}
else {
three << "姓名: " << abs->a[i].name << "\t" << "准考证号:" << abs->a[i].
num << "\t"
<< "报考专业: " << abs->a[i].profess << "\t" << "是否应届: " << abs->a[i].sth << "\t" << endl <<
"复试成绩: " << abs->a[i].a.fp << " " << "被淘汰"<<endl;
}
}
else;
}
}
int main() {
cout << "请输入你要添加的考生个数" << endl;
int a = 0;
cin >> a;
base b1;
for (int i = 0; i < a; i++) {
addstudent(&b1);
}
cout << "请输入初式录取总分要求" << endl;
cin >> b1.goal;//输入初式录取总分
cout << "请输入各个科目最低分数要求(数学、外语、政治,专业课)" << endl;
cin >> b1.mgoal >> b1.egoal >> b1.ogoal >> b1.pgoal;//输入各个科目最低分数要求
printsa(&b1);
printsb(&b1);
cout << "请输入复试录取成绩要求" << endl;
cin >> b1.fgoal;//输入复试录取成绩要求
fushi(&b1);
system("pause");
return 0;
}
测试数据:初式分数线260分,各个科目最低要求为60分,复试分数线80分
输入考生名单:
姓名: 张1 准考证号:202221 报考专业: 信息安全 是否应届: 是
数学成绩: 80 外语成绩: 70 政治成绩: 60 专业课成绩: 80 总分为: 290
姓名: 张2 准考证号:202222 报考专业: 计算机 是否应届: 否
数学成绩: 80 外语成绩: 70 政治成绩: 90 专业课成绩: 80 总分为: 320
姓名: 张3 准考证号:202223 报考专业: 信息安全 是否应届: 是
数学成绩: 50 外语成绩: 10 政治成绩: 40 专业课成绩: 30 总分为: 130
姓名: 张4 准考证号:202224 报考专业: 软件工程 是否应届: 否
数学成绩: 80 外语成绩: 70 政治成绩: 60 专业课成绩: 90 总分为: 300
姓名: 张5 准考证号:202225 报考专业: 计算机 是否应届: 是
数学成绩: 50 外语成绩: 40 政治成绩: 60 专业课成绩: 80 总分为: 230
姓名: 张6 准考证号:202226 报考专业: 软件工程 是否应届: 否
数学成绩: 70 外语成绩: 80 政治成绩: 90 专业课成绩: 70 总分为: 310
姓名: 张7 准考证号:202227 报考专业: 计算机 是否应届: 否
数学成绩: 40 外语成绩: 50 政治成绩: 80 专业课成绩: 90 总分为: 260
姓名: 张8 准考证号:202228 报考专业: 大数据 是否应届: 是
数学成绩: 80 外语成绩: 70 政治成绩: 90 专业课成绩: 80 总分为: 320
姓名: 张9 准考证号:202229 报考专业: 大数据 是否应届: 否
数学成绩: 80 外语成绩: 90 政治成绩: 70 专业课成绩: 80 总分为: 320
姓名: 张10 准考证号:202230 报考专业: 建筑 是否应届: 否
数学成绩: 80 外语成绩: 70 政治成绩: 90 专业课成绩: 50 总分为: 290
运行结果:
参与考生名单:
初式录取名单:
复试考生录取结果: