#include<iostream>
#include<fstream>
#include<typeinfo>
#include<math.h>
using namespace std;
int Z = 0;
class date
{
public:
string year;
string month;
string day;
};
class person
{
protected:
string name;
string sex;
string idnum;
date birth;
public:
person() {}
~person() {}
};
class student :public person
{
private:
string stunum;
string classnum;
string grade[4];
public:
string gstunum()
{
return stunum;
}
string gclassnum()
{
return classnum;
}
string gname()
{
return name;
}
string ggrade(int i)
{
return grade[i];
}
string gsex()
{
return sex;
}
void snum(string num)
{
stunum = num;
}
friend istream& operator >>(istream& is, student
friend ostream& operator <<(ostream& os, student
};
void map(student);
void shuru(student);
void baocun(student);
void duqu(student);
void chaxun(student);
void paixu(student);
int str_int(string);
void chakan(student);
void shangchu(student);
void xiugai(student);
void banjipaiming(student);
istream& operator >>(istream& is, student& ra)
{
if (typeid(is) == typeid(cin))
{
cout << "学号" << endl;
is >> ra.stunum;
cout << "班级" << endl;
is >> ra.classnum;
cout << "姓名" << endl;
is >> ra.name;
cout << "身份证号" << endl;
is >> ra.idnum;
cout << "性别" << endl;
is >> ra.sex;
cout << "生日年" << endl;
is >> ra.birth.year;
cout << "生日月" << endl;
is >> ra.birth.month;
cout << "生日日" << endl;
is >> ra.birth.day;
cout << "成绩" << endl;
for (int i = 0; i < 4; i++) {
is >> ra.grade[i];
}
}
else
{
is >> ra.stunum >> ra.classnum >> ra.name >> ra.idnum >> ra.sex >> ra.birth.year >> ra.birth.month >> ra.birth.day;
for (int i = 0; i < 4; i++)
{
is >> ra.grade[i];
}
}
return is;
}
ostream& operator <<(ostream& os, student& ra)
{
if (typeid(os) == typeid(cout))
{
os << "学号 " << ra.stunum << " ";
os << "班级 " << ra.classnum << " ";
os << "姓名 " << ra.name << " ";
os << "身份证号 " << ra.idnum << " ";
os << "性别 " << ra.sex << " ";
os << "生日年 " << ra.birth.year << " ";
os << "生日月 " << ra.birth.month << " ";
os << "生日日 " << ra.birth.day << " ";
os << "成绩 " << " ";
for (int i = 0; i < 4; i++) {
os << ra.grade[i] << " ";
}
os << endl;
}
else
{
os << ra.stunum << " " << ra.classnum << " " << ra.name << " " << ra.idnum << " " << ra.sex << " " << ra.birth.year << " " << ra.birth.month << " " << ra.birth.day;
for (int i = 0; i < 4; i++)
{
os << " " << ra.grade[i] << " ";
}
os << endl;
}
return os;
}
void shuru(student stu[])
{
cin >> stu[Z];
Z++;
cout << "输入成功" << endl;
system("pause");
}
void baocun(student stu[])
{
ofstream ofs;
ofs.open("d:\\student.txt");
int a = Z;
for (int i = 0; i < a; i++)
{
ofs << stu[i];
Z--;
}
ofs.close();
cout << "保存完成" << endl;
system("pause");
}
void duqu(student stu[])
{
ifstream ifs;
ifs.open("d:\\student.txt");
while (!ifs.eof())
{
ifs >> stu[Z];
Z++;
}
Z--;
ifs.close();
cout << "读取完成" << endl;
system("pause");
}
void chaxun(student stu[])
{
cout << "请输入学生学号或姓名和班级" << endl;
string sign;
cin >> sign;
for (int i = 0; i < Z; i++)
{
if (sign == stu[i].gstunum() || sign == (stu[i].gclassnum() + stu[i].gname()) || sign == (stu[i].gname() + stu[i].gclassnum()))
{
cout << stu[i];
system("pause");
}
}
}
void paixu(student stu[])
{
int mark[100] = { 0 };
int paiming[100] = { 0 };
int max = -999999;
int maxpos = -1;
int pingjunfen[100];
for (int i = 0; i < Z; i++)
{
for (int j = 0; j < 4; j++)
{
mark[i] += str_int(stu[i].ggrade(j));
}
pingjunfen[i] = mark[i] / 4;
}
for (int i = 0; i < Z; i++)
{
for (int j = 0; j < Z; j++)
{
if (mark[j] >= max)
{
max = mark[j];
maxpos = j;
}
}
max = -999999;
mark[maxpos] = -99999999;
paiming[i] = maxpos;
}
cout << "名次" << " 学号" << " 班级" << " 姓名" << " 总分" << " 平均分" << endl;
for (int i = 0; i < Z; i++)
{
cout << "第" << i + 1 << "名 " << stu[paiming[i]].gstunum() << " " << stu[paiming[i]].gclassnum() << " " << stu[paiming[i]].gname() << " " << pingjunfen[paiming[i]] * 4 << " " << pingjunfen[paiming[i]] << endl;
}
system("pause");
}
int str_int(string s)
{
int sl = s.size();
char Int[10];
int wei = 0;
int ans = 0;
for (int i = 0; i < sl; i++)
{
wei++;
Int[i] = s[i];
}
for (int i = 0; i < sl; i++)
{
if (wei != 0)
{
ans = ans + (Int[i] - '0') * pow(10, wei - 1);
wei--;
}
}
return ans;
}
void chakan(student stu[])
{
for (int i = 0; i < Z; i++)
{
cout << stu[i];
}
system("pause");
}
void shangchu(student stu[])
{
cout << "请输入需要删除的学号" << endl;
string num;
cin >> num;
int Intnum = str_int(num);
if (Intnum == 1)
{
for (int i = Z - 1; i >= 1; i--)
{
stu[i].snum(stu[i - 1].gstunum());
}
for (int i = 0; i < Z; i++)
{
stu[i] = stu[i + 1];
}
Z--;
cout << "删除成功" << endl;
system("pause");
}
else if (Intnum == Z)
{
Z--;
cout << "删除成功" << endl;
system("pause");
}
else
{
for (int i = Z - 1; i >= Intnum - 1; i--)
{
stu[i].snum(stu[i - 1].gstunum());
}
for (int i = Intnum - 1; i < Z; i++)
{
stu[i] = stu[i + 1];
}
Z--;
cout << "删除成功" << endl;
system("pause");
}
}
void xiugai(student stu[])
{
cout << "请输入要修改的学生学号" << endl;
int chose;
cin >> chose;
cout << stu[chose];
cout << "请输入要修改的内容" << endl;
cin >> stu[chose];
}
void banjipaiming(student stu[])
{
int banji[100] = { 0 };
int classmark[100] = { 0 };
int men[100] = { 0 };
int women[100] = { 0 };
int classzongpaiming[100] = { 0 };
int classpingpaiming[100] = { 0 };
int classpingjun[100] = { 0 };
int pingjuntemp[100] = { 0 };
int zongtemp[100] = { 0 };
int classmax = -9999999;
int classmaxpos = -1;
int banjinum = 0;
for (int i = 0; i < Z; i++)
{
for (int j = 1; j < 11; j++)
{
if (str_int(stu[i].gclassnum()) == (-1260 + (j - 1) * 100))
{
banji[j]++;
if (stu[i].gsex() == "男")
{
men[j] ++;
}
else
{
women[j]++;
}
for (int k = 0; k < 4; k++)
{
classmark[j] += str_int(stu[i].ggrade(k));
zongtemp[j] += str_int(stu[i].ggrade(k));
}
}
}
}
for (int i = 1; i < 11; i++)
{
if (banji[i] != 0)
{
banjinum++;
}
}
for (int j = 1; j <= banjinum; j++)
{
if (banji[j] != 0)
{
classpingjun[j] = classmark[j] / banji[j];
pingjuntemp[j] = classmark[j] / banji[j];
}
}
for (int i = 1; i <= banjinum; i++)
{
for (int j = 1; j <= banjinum; j++)
{
if (classmark[j] >= classmax)
{
classmax = classmark[j];
classmaxpos = j;
}
}
classmax = -999999;
classmark[classmaxpos] = -99999999;
classzongpaiming[i] = classmaxpos;
}
for (int i = 1; i <= banjinum; i++)
{
for (int j = 1; j <= banjinum; j++)
{
if (classpingjun[j] >= classmax)
{
classmax = classpingjun[j];
classmaxpos = j;
}
}
classmax = -999999;
classpingjun[classmaxpos] = -99999999;
classpingpaiming[i] = classmaxpos;
}
cout << "请输入需要查看的信息" << endl;
cout << "1-----班级总分排名" << endl;
cout << "2-----班级平均分分排名" << endl;
cout << "3-----各班级信息" << endl;
int chose;
cin >> chose;
switch (chose)
{
case 1:
cout << " 班级总分排名" << endl;
for (int i = 1; i <= banjinum; i++)
{
cout << " 第 " << i << " 名 " << classzongpaiming[i] << "班" << " 总分 " << zongtemp[classzongpaiming[i]] << endl;
}
break;
case 2:
cout << " 班级平均分排名" << endl;
for (int i = 1; i <= banjinum; i++)
{
cout << " 第 " << i << " 名 " << classpingpaiming[i] << "班" << " 平均分 " << pingjuntemp[classpingpaiming[i]] << endl;
}
break;
case 3:
cout << " 各班级信息" << endl;
cout << "班级" << " 人数" << " 男 " << " 女 " << " 总分" << " 平均分" << endl;
for (int i = 1; i <= banjinum; i++)
{
cout << i << "班 " << banji[i] << " " << men[i] << " " << women[i] << " " << zongtemp[i] << " " << pingjuntemp[i] << endl;
}
break;
}
system("pause");
}
void map(student stu[])
{
int state = 1;
while (1)
{
cout << " ***************************** 学生成绩管理系统************************************" << endl;
cout << " *****************************1-- 输入学生信息*************************************" << endl;
cout << " *****************************2-- 保存学生信息*************************************" << endl;
cout << " *****************************3-- 读取学生信息*************************************" << endl;
cout << " *****************************4-- 查询学生信息*************************************" << endl;
cout << " *****************************5-- 查看学生排名*************************************" << endl;
cout << " *****************************6-- 修改学生信息*************************************" << endl;
cout << " *****************************7-- 删除学生信息*************************************" << endl;
cout << " *****************************8-- 查看学生信息*************************************" << endl;
cout << " *****************************9-- 查看各班信息*************************************" << endl;
cout << " *****************************10-- 退出 *************************************" << endl;
int chose;
cout << endl << " --------------请输入选择的操作---------------- " << endl;
cin >> chose;
switch (chose)
{
case 1:shuru(stu); break;
case 2:baocun(stu); break;
case 3:duqu(stu); break;
case 4:chaxun(stu); break;
case 5:paixu(stu); break;
case 6:xiugai(stu); break;
case 7:shangchu(stu); break;
case 8:chakan(stu); break;
case 9:banjipaiming(stu); break;
case 10:state = 0; break;
}
system("cls");
if (state == 0)
{
break;
}
}
}
int main()
{
student* p;
p = new student[100];
map(p);
delete[]p;
return 0;
}