题目要求(手打,累):设计一个类CStudent,类中包含一个学生的基本数据如下:
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。
并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。如:
1 LiPing m 18 89 98 94
请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具体连续编码的编号num为"序"来对文件中各对象进行随机读写处理)。并设计该类的成员函数,而且对输出运算符"<<"进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能:
(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4) 计算某编号学生的总成绩与平均成绩。
(5) 列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。
思考:可进一步对上述程序进行扩充,如,添加学生的基本数据(籍贯,专业,班级,其他各门成绩,奖罚记录等),并添加所需要的其他相关处理函数(如可通过咨询教学办公室管理人员后确立),进而将其编织成为一个简单而且实用的小型学籍与成绩管理软件。
以下为代码:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;
#define NUM 10000
void Menu(); //菜单功能
class CStudent
{
private:
int num; //编号
string name; //姓名
char gender; //性别
int age; //年龄
double math; //数学成绩
double physics; //物理成绩
double computer; //计算机成绩
double english; //外语成绩
string major; //专业
string RP; //奖罚记录
double sum; //总成绩
double ave; //平均成绩
public:
void Insert(CStudent & S); //插入,添加
void Dlete(); //删除
void Numseek(); //按编号查找
void Nameseek(); //按姓名查找
void Grade(); //计算某个学生的平均成绩和总成绩
void Sort(CStudent & S); //对学生的总成绩进行排序
void Inquire(double n, char ch); //根据输入的成绩和性别排查超过输入成绩且性别一样的同学
void Save(); //保存数据到文件
void Read(); //读取数据
void Sum(){sum = math + physics + computer + english;} //计算总成绩
void Ave(){ave = (math + physics + computer + english) / 4;}
void operator <<(CStudent & S)
{
cout << setw(5) << S.num << setw(5) << S.name << setw(5) << S.gender << setw(5) << S.age << setw(5) << S.math << setw(5) << S.physics << setw(7) << S.computer
<< setw(5)<< S.english << setw(5) << S.major << setw(9) << S.RP << endl;
}
};
static int j;
CStudent C[NUM];
int main()
{
fstream File("学生学籍与成绩管理系统.txt");
cout << "\n\t\t^^^检查文件是否存在中^^^" << endl << endl << endl;
if(!File)
{
cout << "\t\t文件不存在,请创建名为学生学籍与成绩管理系统的文档!" &l