system.h
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<conio.h> //控制台输入输出 getch
#include<iomanip> //格式化输入、输出 stew
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<fstream> //重载运算符
using namespace std;
class student //学生类的定义
{
private: //私有成员
char name[20];
char sex[6];
int number;
int score[7];
int total;
int average;
int last;
public: //公有成员
student();
void add();
void output();
void search();
void modify();
void deleted();
void save();
void load();
student & operator=(student & T); //重载"="运算符
friend istream & operator >> (istream & scin, student &s1); //重载">>"运算符
friend ostream & operator << (ostream & sout, student &s2); //重载"<<"运算符
};
system.cpp
#include "system.h"
student stu[250];
int n = 0;
void student::add() //类外定义录入学生信息函数
{
system("cls"); //调用系统命令cls,清除屏幕
char flag = 'Y'; //设置输入判断字符
while (toupper(flag) == 'Y')//toupper的功能是将小写英文字母转换为对应的大写字母,否则返回原来的值
{
cout << endl << "====>> 请输入学生成绩 <<====" << endl;
cin >> stu[n]; //重载后的输入运算,按照定义可以输入对象的各个成员,同时保留输入的原有功能
n++;
cout << "请问要继续录入吗?(是请输入y,否请输入n)";
cin >> flag;
if (toupper(flag) != 'Y')
{
if (toupper(flag) == 'N')
{
break;
}
else
{
cout << "输入错误,请重新输入:";
cin >> flag;
}
}
}
}
void student::output()//类外定义输出学生信息函数
{
if (n != 0)
{
cout << "---------------------------------------------------------------------------------\n";
cout << "学号 姓名 性别 语文 英语 数学 物理 化学 生物 平时成绩 总评 \n";
cout << "---------------------------------------------------------------------------------\n";
for (int t = 0; t<n; t++)
{
cout << stu[t];//重载后的输出运算,按照定义可以输出对象的各个成员,同时保留输出的原有功能
}
}
_getch();
}
void student::search()//类外定义查找学生数据函数
{
system("cls");
bool i = 0;
char n1[20];
student temp;
cout << "\n====>> 查找学生成绩 <<====\n";
cout << "请输入您要查找的学生姓名:";
cin >> n1;
for (int j = 0; j<n; j++)
{
if (strcmp(stu[j].name, n1) == 0)//字符串比较函数
{
temp = stu[j];
i = 1;
}
}
if (i == 0)
cout << "=====>提示:对不起,无法找到该学生的信息!" << endl;
else
{
cout << "--------------------------------------------------------------------------\n";
cout << "学号 姓名 性别 语文 英语 数学 物理 化学 生物 平时成绩 总评 \n";
cout << "--------------------------------------------------------------------------\n";
cout << temp.number << setw(7) << temp.name << setw(7) << temp.sex << setw(7) << temp.score[0]
<< setw(7) << temp.score[1] << setw(7) << temp.score[2] << setw(7) << temp.score[3] << setw(7) << temp.score[4]
<< setw(7) << temp.score[5] << setw(7) << temp.score[6] << setw(7) << temp.last << endl;
}
_getch();
}
void student::modify()//类外定义修改学生信息函数
{
system("cls");
bool j = 0;
int t;
char n2[50];
cout << "\n====>> 修改学生成绩 <<====\n";
cout << "请输入您要修改的学生姓名:";
cin >> n2;
for (int j = 0; j<n; j++)
{
if (strcmp(stu[j].name, n2) == 0)//字符串比较函数,对比输入的字符串是否和已有的数据相同
{
t = j;
j = 1;
}
}
if (j == 0)
cout << "=====>提示:对不起,无该学生的成绩……" << endl;
else
{
cout << "----------该学生的信息----------" << endl;
cout << "--------------------------------------------------------------------------\n";
cout << "学号 姓名 性别 语文 英语 数学 物理 化学 生物 平时成绩 总评 \n";
cout << "--------------------------------------------------------------------------\n";
cout << stu[t].number << setw(7) << stu[t].name << setw(7) << stu[t].sex << setw(7) << stu[t].score[0]
<< setw(7) << stu[t].score[1] << setw(7) << stu[t].score[2] << setw(7) << stu[t].score[3] << setw(7) << stu[t].score[4]
<< setw(7) << stu[t].score[5] << setw(7) << stu[t].score[6] << setw(7) << stu[t].last << endl;
cout << "请输入修改后的学生学号:";//重新输入所需要修改的数据
cin >> stu[t].number;
cout << "请输入修改后的学生姓名:";
cin >> stu[t].name;
cout << "请输入修改后的学生性别:";
cin >> stu[t].sex;
cout << "请输入修改后的语文成绩:";
cin >> stu[t].score[0];
cout << "请输入修改后的英语成绩:";
cin >> stu[t].score[1];
cout << "请输入修改后的数学成绩:";
cin >> stu[t].score[2];
cout << "请输入修改后的物理成绩:";
cin >> stu[t].score[3];
cout << "请输入修改后的化学成绩:";
cin >> stu[t].score[4];
cout << "请输入修改后的生物成绩:";
cin >> stu[t].score[5];
cout << "请输入修改后的平时成绩:";
cin >> stu[t].score[6];
stu[t].total = stu[t].score[0] + stu[t].score[1] + stu[t].score[2] + stu[t].score[3] + stu[t].score[4] + stu[t].score[5];
stu[t].average = stu[t].total / 6;
stu[t].last = (int)(stu[t].score[6] * 0.3 + stu[t].average*0.7);
cout << "修改成功!" << endl;
}
_getch();
}
void student::deleted()//类外定义删除学生信息函数
{
system("cls");
char n3[20];
bool k = 0;
char c;
do{
cout << "\n====>> 删除学生成绩 <<====\n";
cout << "请输入您要删除的学生姓名:";//根据姓名删除学生,当然也可以设置为根据学号删除学生
cin >> n3;
for (int i = 0; i<n; i++)
{
if (strcmp(n3, stu[i].name) == 0)//查找对应的学生
{
cout << "----------该学生的信息----------" << endl;
cout << "--------------------------------------------------------------------------\n";
cout << "学号 姓名 性别 语文 英语 数学 物理 化学 生物 平时成绩 总评\n";
cout << "--------------------------------------------------------------------------\n";
cout << stu[i].number << setw(7) << stu[i].name << setw(7) << stu[i].sex << setw(7) << stu[i].score[0]
<< setw(7) << stu[i].score[1] << setw(7) << stu[i].score[2] << setw(7) << stu[i].score[3] << setw(7) << stu[i].score[4]
<< setw(7) << stu[i].score[5] << setw(7) << stu[i].score[6] << setw(7) << stu[i].last << endl;
k = 1;
n--;
do{
stu[i] = stu[i + 1];//直接覆盖数据
i++;
} while (i <= n);
}
}
if (k == 0)
cout << "====>提示:对不起,无法找到该学生……";
cout << "删除成功!" << endl;
cout << "请问要继续删除吗?(是请输入y,否请输入n)" << endl;
cin >> c;
if (toupper(c) != 'Y'&&toupper(c) != 'N')
{
cout << "输入错误!您只能输入y或n" << endl;
cin >> c;
}
} while (toupper(c) == 'Y');
_getch();
}
void student::save()//类外定义保存函数
{
char filename1[20];
cout << "\n====>>请输入文件名:";
cin >> filename1; //输入自定义文件名
ofstream fout(filename1, ios::app);//fout是向文件里写入数据
if (!fout)cout << "====>>文件不能打开!<<====\n" << endl;
else
{
for (int i = 0; i<n; i++)
fout << ' ' << stu[i].number << ' ' << stu[i].name << ' ' << stu[i].sex << ' '
<< stu[i].score[0] << ' ' << stu[i].score[1] << ' ' << stu[i].score[2] << ' ' << stu[i].score[3] << ' ' << stu[i].score[4] << ' '
<< stu[i].score[5] << ' ' << stu[i].score[6] << ' ' << stu[i].total << ' ' << stu[i].average << ' ' << stu[i].last;
cout << "保存成功!" << endl;
}
fout.close();
_getch();
}
void student::load()//类外定义读取函数
{
char filename2[20];
cout << "请输入您要读取的文件名:";
cin >> filename2;
ifstream fin(filename2, ios::in);//fin是从文件里读数据
if (!fin)cout << "文件不能打开!" << endl;
else
{
for (int i = 0; i<n; i++)
{
if (fin.eof())break;
fin >> stu[i].number >> stu[i].name >> stu[i].sex
>> stu[i].score[0] >> stu[i].score[1] >> stu[i].score[2] >> stu[i].score[3] >> stu[i].score[4]
>> stu[i].score[5] >> stu[i].score[6] >> stu[i].total >> stu[i].average >> stu[i].last;
}
cout << "文件已读取成功!" << endl;
}
fin.close();
_getch();
}
student & student::operator=(student & T)//重载=运算定义
{
strcpy(name, T.name);
strcpy(sex, T.sex);
number = T.number;
for (int i = 0; i<7; i++)
score[i] = T.score[i];
total = T.total;
average = T.average;
last = T.last;
return (*this);
}
ostream & operator << (ostream & scout, student &s2)//重载流插入运算符<<运算定义 //数据读入到对象中 //成员具有可交换性时,重载为友元函数
{
cout << setw(5) << s2.number << setw(7) << s2.name << setw(7) << s2.sex << setw(7) << s2.score[0]
<< setw(7) << s2.score[1] << setw(7) << s2.score[2] << setw(7) << s2.score[3] << setw(7) << s2.score[4]
<< setw(7) << s2.score[5] << setw(7) << s2.score[6] << setw(7) << s2.last << '\n';
return scout;
}
istream & operator >> (istream & scin, student &s1)//重载流提取运算符>>运算定义 //从对象中将数据读出
{
cout << '\n';
cout << "学号:";
scin >> s1.number;
cout << "姓名:";
scin >> s1.name;
cout << "性别:";
scin >> s1.sex;
cout << "语文:";
scin >> s1.score[0];
cout << "英语:";
scin >> s1.score[1];
cout << "数学:";
scin >> s1.score[2];
cout << "物理:";
scin >> s1.score[3];
cout << "化学:";
scin >> s1.score[4];
cout << "生物:";
scin >> s1.score[5];
cout << "平时成绩:";
scin >> s1.score[6];
s1.total = s1.score[0] + s1.score[1] + s1.score[2] + s1.score[3] + s1.score[4] + s1.score[5];
s1.average = s1.total / 6;
s1.last = (int)(s1.score[6] * 0.3 + s1.average*0.7);
return scin;
}
student::student()//
{
strcpy(name, " ");
strcpy(sex, " ");
number = 0;
for (int i = 0; i<7; i++)score[i] = 0;
total = 0;
average = 0;
last = 0;
}
void menu()//系统菜单
{
cout << "*********************欢 迎 登 录 学 生 成 绩 管 理 系 统********************" << endl;
cout << "****************★ ☆ 1.录入学生成绩 ☆ ★****************" << endl;
cout << "****************★ ☆ 2.浏览学生成绩 ☆ ★****************" << endl;
cout << "****************★ ☆ 3.查询学生成绩 ☆ ★****************" << endl;
cout << "****************★ ☆ 4.修改学生成绩 ☆ ★****************" << endl;
cout << "****************★ ☆ 5.删除学生成绩 ☆ ★****************" << endl;
cout << "****************★ ☆ 6.数据存入文件 ☆ ★****************" << endl;
cout << "****************★ ☆ 7.文件读出数据 ☆ ★****************" << endl;
cout << "****************★ ☆ 0.安全退出系统 ☆ ★****************" << endl;
cout << "\n\n\t请输入一位数字(0-7)选择您所需的功能,并按回车键确认:";
}
test.cpp
#include "system.h"
int main()
{
int choose;
student s;
do{
menu();
cin >> choose;
switch (choose)
{
case 1:
s.add();
break;
case 2:
s.output();
break;
case 3:
s.search();
break;
case 4:
s.modify();
break;
case 5:
s.deleted();
break;
case 6:
s.save();
break;
case 7:
s.load();
break;
default:
break;
}
} while (choose != 0);
}