(1)用户输入用户名及口令,然后在已有的用户名及口令中检查是否合法,合法进入查询界面;对于不合法的用户或口令最多出错3次,超出3次后自动退出程序;(2)在评委所打的分数中,去掉一个最高分,去掉一个最低分,得出各选手的平均分,然后按平均分进行排序,得出各选手的名次。(3)设计出菜单,使用户能够设置评委的人数并输入姓名,设置选手的人数,并能将最后的得分及名次情况能够保存到文件中记录下来。(3)参考所给出的程序,其它未说明功能可自行添加设计。
代码如下,如有帮助,请采纳一下,谢谢。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//定义参赛选手信息
struct StPartner
{
string name;
vector<float> score;
float avg;
};
//登陆
bool Login(string name,string pwd,int tms)
{
int i = 0;
string us,pd;
while(i < tms)
{
cout << "请输入用户名和密码:";
cin >> us >> pd;
if (us == name && pwd == pd)
{
return true;
}else
{
i++;
cout << "用户名或密码错误,还有" << tms -i << "次机会。" << endl;
}
}
return false;
}
//录入评委信息
void LoadPwinfo(vector<string> &vpw)
{
int nmb,i;
string name;
cout << "请输入评委的人数:" << endl;
cin >> nmb;
cout << "请输入评委的名字:";
for (i = 0; i < nmb; i++)
{
cin >> name;
vpw.push_back(name);
}
}
//录入选手成绩
int LoadXsInfo(StPartner* vp,int n)
{
int nmb,i,j;
float sum = 0.0,max,min,tmp;
cout << "请输入选手人数:" ;
cin >> nmb;
cout << "请输入选手姓名和" << n << "个评委给出的成绩:" << endl;
for (i = 0; i < nmb;i++)
{
sum = 0.0;
StPartner st;
cin >> st.name;
for (j = 0;j < n;j++)
{
cin >> tmp;
st.score.push_back(tmp);
sum += tmp;
if(j == 0)
{
max = tmp;
min = tmp;
}else
{
if(tmp > max) max = tmp;
if(tmp < min) min = tmp;
}
}
st.avg = (sum - max - min)/(n-2);
vp[i] = st;
}
return nmb;
}
//排名
void Sortv(StPartner* vp,int size)
{
int i,j;
StPartner tmp;
for (i = 0; i < size -1; i++)
{
for (j = 0; j < size -1 - i; j++)
{
if (vp[j].avg < vp[j+1].avg)
{
tmp = vp[j];
vp[j] = vp[j+1];
vp[j+1] = tmp;
}
}
}
cout << "排序后" << endl;
for (i = 0; i < size; i++)
{
cout << vp[i].name << ": " << vp[i].avg << endl;
}
}
//写入文件
void WriteFile(StPartner* vp,int size)
{
int i,j;
FILE* fp;
if (!(fp = fopen("a.txt","w")))
{
return;
}
for (i = 0; i< size; i++)
{
fprintf(fp,"%s %d %.2f ",vp[i].name.c_str(),i+1,vp[i].avg);
for (j = 0;j < vp[i].score.size(); j++)
{
if(j < vp[i].score.size()-1)
fprintf(fp,"%.2f ",vp[i].score[j]);
else
fprintf(fp,"%.2f\n",vp[i].score[j]);
}
}
fclose(fp);
}
int main()
{
string username = "zhangsan";
string pwd = "123456";
int tms =3;
string strum;
string strpw;
bool isLogin = false; //是否已经登录
vector<string> vPw; //评委名字
StPartner vp[20]; //选手信息
int opt;
int nmbxs = 0;
//
while(true)
{
//system("cls");
cout << "1.登录系统" << endl;
cout << "2.录入评委人数和姓名" << endl;
cout << "3.录入选手名字和分数" << endl;
cout << "4.显示排名" <<endl;
cout << "5.写入文件" << endl;
cout << "9.退出系统" << endl;
cin >> opt;
switch(opt)
{
case 1:
isLogin = Login(username,pwd,tms);
if(!isLogin)
return 0;
system("cls");
break;
case 2:
if (!isLogin)
cout << "请先登陆系统" << endl;
else
{
LoadPwinfo(vPw);
system("cls");
}
break;
case 3:
if (!isLogin)
cout << "请先登陆系统" << endl;
else if (vPw.size() == 0)
{
cout << "请先录入评委信息"<< endl;
}else
{
nmbxs = LoadXsInfo(vp,vPw.size());
system("cls");
}
break;
case 4:
if (!isLogin)
cout << "请先登陆系统" << endl;
else if (vPw.size() == 0)
{
cout << "请先录入评委信息"<< endl;
}else if(nmbxs == 0)
{
cout << "请先录入选手成绩" << endl;
}else
Sortv(vp,nmbxs);
break;
case 5:
WriteFile(vp,nmbxs);
break;
case 9:
return 0;
default:
break;
}
}
}
那正确的口令和密码从哪来呢?
你这是两个题目,还是一个题目啊
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632