(1)用户输入用户名及口令,然后在已有的用户名及口令中检查是否合法,合法进入查询界面;对于不合法的用户或口令最多出错3次,超出3次后自动退出程序;(2)在评委所打的分数中,去掉一个最高分,去掉一个最低分,得出各选手的平均分,然后按平均分进行排序,得出各选手的名次。(3)设计出菜单,使用户能够设置评委的人数并输入姓名,设置选手的人数,并能将最后的得分及名次情况能够保存到文件中记录下来。(3)参考所给出的程序,其它未说明功能可自行添加设计。
3条回答 默认 最新
- qfl_sdu 2021-06-04 19:14关注
代码如下,如有帮助,请采纳一下,谢谢。
#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; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报