aceahhd 2021-06-04 17:12 采纳率: 25%
浏览 27
已采纳

用c++面向对象设计一个代码,求大佬

(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;
    		}
    	}
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料