#include<bits/stdc++.h>//请在根目录创建scores.txt储存数据
//#include<fstream>
using namespace std;
const int M = 100;
struct st
{
double m;
double e;
double c;
string n;
double sum_ ;
};
struct menu
{
st sta[M];
int size;
double c_sum;
double m_sum;
double e_sum;
double c_e;
double m_e;
double e_e;
double c_p;
double m_p;
double e_p;
double c_m;
double m_m;
double e_m;
double c_mi;
double m_mi;
double e_mi;
}m;
void showMenu()//菜单
{
cout << "------------------------------------------------" << endl;
cout << "||----------------成绩管理系统----------------||" << endl;
cout << "||-----------------1.添加成绩-----------------||" << endl;
cout << "||-----------------2.查询成绩-----------------||" << endl;
cout << "||-----------3.平均成绩,最高分最低分----------||" << endl;
cout << "||---------------4.优秀及格情况---------------||" << endl;
cout << "||---------------5.清空所有数据---------------||" << endl;
cout << "||-----------------6.总分排行-----------------||" << endl;
cout << "||------------0.退出系统并保存数据------------||" << endl;
cout << "||---------------作者:nbufe000---------------||" << endl;
cout << "------------------------------------------------" << endl;
}
bool cmp(st a,st b)
{
if(a.sum_>b.sum_)
return 1;
else
return 0;
}
int isExist(menu* e, string name)
{
for (int i = 0; i < e->size; i++)
{
if (name == e->sta[i].n)
return i;
}
return -1;
}
void add(menu* add)//添加成绩
{
if (add->size == M)
{
cout << "人数已满" << endl;
return;
}
string name;
int s;
cout << "请输入姓名:";
cin >> name;
add->sta[add->size].n = name;
cout << "请输入语文分数:";
cin >> s;
if (s >= 80)
add->c_e++;
if (s >= 60)
add->c_p++;
if(s>add->c_m)
add->c_m=s;
if(s<add->c_mi)
add->c_mi=s;
add->c_sum += s;
add->sta[add->size].c = s;
cout << "请输入数学分数:";
cin >> s;
if (s >= 80)
add->m_e++;
if (s >= 60)
add->m_p++;
if(s>add->m_m)
add->m_m=s;
if(s<add->m_mi)
add->m_mi=s;
add->m_sum += s;
add->sta[add->size].m = s;
cout << "请输入英语分数:";
cin >> s;
if (s >= 80)
add->e_e++;
if (s >= 60)
add->e_p++;
if(s>add->e_m)
add->e_m=s;
if(s<add->e_mi)
add->e_mi=s;
add->e_sum += s;
add->sta[add->size].e = s;
add->sta[add->size].sum_ = add->sta[add->size].e + add->sta[add->size].c + add->sta[add->size].m;
add->size++;
cout << "添加成功" << endl;
}
void inq(menu* inq)//查询成绩
{
cout << " 请输入想要查询的姓名:";
string name;
cin >> name;
int ret = isExist(inq, name);
if (ret != -1)
{
cout << "姓名:" << inq->sta[ret].n << endl;
cout << "语文分数:" << inq->sta[ret].c << endl;
cout << "数学分数:" << inq->sta[ret].m << endl;
cout << "英语分数:" << inq->sta[ret].e << endl;
cout << "总分数:" << inq->sta[ret].sum_ << endl;
}
else
cout << "没有查询到此学生" << endl;
}
void in_txt(menu* add)//读取文件内容
{
if (add->size == M)
{
cout << "人数已满" << endl;
return;
}
string name;
int s;
ifstream ifs;
ifs.open("scores.txt", ios::in);
if (!ifs.is_open())
{
cout << "----------初始化数据失败!----------" << endl;
return;
}
//cout << "请输入姓名:";
while (ifs >> name)
{
add->sta[add->size].n = name;
//cout << "请输入语文分数:";
ifs >> s;
if (s >= 80)
add->c_e++;
if (s >= 60)
add->c_p++;
if(s>add->c_m)
add->c_m=s;
if(s<add->c_mi)
add->c_mi=s;
add->c_sum += s;
add->sta[add->size].c = s;
//cout << "请输入数学分数:";
ifs >> s;
if (s >= 80)
add->m_e++;
if (s >= 60)
add->m_p++;
if(s>add->m_m)
add->m_m=s;
if(s<add->m_mi)
add->m_mi=s;
add->m_sum += s;
add->sta[add->size].m = s;
//cout << "请输入英语分数:";
ifs >> s;
if (s >= 80)
add->e_e++;
if (s >= 60)
add->e_p++;
if(s>add->e_m)
add->e_m=s;
if(s<add->e_mi)
add->e_mi=s;
add->e_sum += s;
add->sta[add->size].e = s;
add->sta[add->size].sum_ = add->sta[add->size].e + add->sta[add->size].c + add->sta[add->size].m;
add->size++;
}
ifs.close();
cout << "----------初始化数据成功!----------" << endl;
}
void out_txt(menu* out)//储存数据
{
ofstream ofs;
ofs.open("scores.txt", ios::out);
if (!ofs.is_open())
{
cout << "----------数据储存失败!----------" << endl;
return;
}
for (int i = 0; i < out->size; i++)
{
ofs << out->sta[i].n << " " << out->sta[i].c << " " << out->sta[i].m << " " << out->sta[i].e << endl;
}
ofs.close();
cout << "----------数据储存成功!----------" << endl;
}
void clr()
{
m.size = 0;
m.c_sum = 0;
m.m_sum = 0;
m.e_sum = 0;
m.c_e = 0;
m.m_e = 0;
m.e_e = 0;
m.c_p = 0;
m.m_p = 0;
m.e_p = 0;
}
void rank_list(menu* rl)
{
sort(rl->sta,rl->sta+rl->size,cmp);
for(int i=0;i<rl->size;i++)
{
cout << "排名:" << i+1 << " ";
cout << "姓名:" << rl->sta[i].n << " ";
cout << "语文分数:" << rl->sta[i].c << " ";
cout << "数学分数:" << rl->sta[i].m << " ";
cout << "英语分数:" << rl->sta[i].e << " ";
cout << "总分数:" << rl->sta[i].sum_ << endl;
}
}
void pass()
{
if(m.size)
{
cout << "语文优秀率:" << m.c_e / m.size * 100 << "%" << " " << "语文及格率:" << m.c_p / m.size * 100 << "%" << endl;
cout << "数学优秀率:" << m.m_e / m.size * 100 << "%" << " " << "数学及格率:" << m.m_p / m.size * 100 << "%" << endl;
cout << "英语优秀率:" << m.e_e / m.size * 100 << "%" << " " << "英语及格率:" << m.e_p / m.size * 100 << "%" << endl;
}
else
{
cout << "语文优秀率:" << "0" << "%" << '\t' << "语文及格率:" << "0" << "%" << endl;
cout << "数学优秀率:" << "0" << "%" << '\t' << "数学及格率:" << "0" << "%" << endl;
cout << "英语优秀率:" << "0" << "%" << '\t' << "英语及格率:" << "0" << "%" << endl;
}
cout<<"语文不及格人数:"<<m.size-m.c_p<<endl;
cout<<"语文不及格名单:"<<endl;
for(int i=0;i<m.size;i++)
{
if(m.sta[i].c<60)
cout<<m.sta[i].n<<" ";
}
cout<<endl;
cout<<"数学不及格人数:"<<m.size-m.m_p<<endl;
cout<<"数学不及格名单:"<<endl;
for(int i=0;i<m.size;i++)
{
if(m.sta[i].m<60)
cout<<m.sta[i].n<<" ";
}
cout<<endl;
cout<<"英语不及格人数:"<<m.size-m.e_p<<endl;
cout<<"英语不及格名单:"<<endl;
for(int i=0;i<m.size;i++)
{
if(m.sta[i].e<60)
cout<<m.sta[i].n<<" ";
}
cout<<endl;
}
int main()
{
m.size = 0;m.c_sum = 0;m.m_sum = 0;m.e_sum = 0;m.c_e = 0;m.m_e = 0;m.e_e = 0;m.c_p = 0;m.m_p = 0;m.e_p = 0;m.c_m=0;m.m_m=0;m.e_m=0;m.c_mi=100;m.m_mi=100;m.e_mi=100;
//m.e = 0; m.p = 0; m.size = 0; m.sum = 0;
in_txt(&m);//读取文件内容
system("pause");
system("cls");
while (1)
{
showMenu();
int select;
cin >> select;
switch (select)
{
case 1://1.添加成绩
add(&m);
break;
case 2://2.查询成绩
inq(&m);
break;
case 3://3.平均成绩
if(m.size)
{
cout << "语文平均成绩:" << m.c_sum / m.size << endl;
cout << "数学平均成绩:" << m.m_sum / m.size << endl;
cout << "英语平均成绩:" << m.e_sum / m.size << endl;
cout << "语文最高分:" << m.c_m << endl;
cout << "数学最高分:" << m.m_m << endl;
cout << "英语最高分:" << m.e_m << endl;
if(m.size)
{
cout << "语文最低分:" << m.c_mi << endl;
cout << "数学最低分:" << m.m_mi << endl;
cout << "英语最低分:" << m.e_mi << endl;
}
else
{
cout << "语文最低分:" << "0" << endl;
cout << "数学最低分:" << "0" << endl;
cout << "英语最低分:" << "0" << endl;
}
}
else
{
cout << "语文平均成绩:" << "0" << endl;
cout << "数学平均成绩:" << "0" << endl;
cout << "英语平均成绩:" << "0" << endl;
}
break;
case 4://4.优秀率,及格率
pass();
break;
case 5:
clr();
break;
case 6:
rank_list(&m);
break;
case 0://0.退出系统
out_txt(&m);
cout << "|---------欢迎下次使用。---------|" << endl;
system("pause");
return 0;
}
system("pause");
system("cls");
}
return 0;
}