一个初级C++·题目请教

运动会分数统计**任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或... 运动会分数统计**  任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)  功能要求:1).可以输入各个项目的前三名或前五名的成绩;  2).能统计各学校总分,  3).可以按学校编号、学校总分、男女团体总分排序输出;  4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。   规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)C++ 展开
 我来答
sa495566524
推荐于2016-07-04 · TA获得超过379个赞
知道小有建树答主
回答量:82
采纳率:0%
帮助的人:140万
展开全部

楼主你好,你要的程序如下:

#include <iostream>

#include <string>

#include <iomanip>

using namespace std;

class School{

private:

int id;//学校编号

string name;//学校名称

int total;//学校总分

int male;//男子总分

int female;//女子总分

public:

School(){//初始化

id=0;

male=0;

female=0;

total=0;

}

void setName(string s){

name=s;

}

string getName(){

return name;

}

void setId(int i){

id=i;

}

int getId(){

return id;

}

void setTotal(int a){

total=a;

}

int getTotal(){

return total;

}

void setMale(int a){

male=a;

}

void setFemale(int a){

female=a;

}

int getMale(){

return male;

}

int getFemale(){

return female;

}

};

class Item{

private:

School sc[20];

string name;

public:

School getSchool(int i){

return sc[i];

}

School* getSchools(){

return sc;

}

void setSchool(School sch,int i){

sc[i]=sch;

}

void setName(string s){

name=s;

}

string getName(){

return name;

}

};

class Count{

private:

School sc[20];

Item item[20];

int integral[5];

int n;

public:

Count(){

n=0;

integral[0]=7;

integral[1]=5;

integral[2]=3;

integral[3]=2;

integral[4]=1;

}

void input();//输入

void print(int);//打印

void statisticsForTotal();//按总分排序

void statisticsForId();//按编号排序

void statisticsForMale();//按男子总分排序

void statisticsForFemale();//按女子总分排序

void schoolInfo();//显示学校信息

void itemInfo();//显示项目信息

void menu();//显示菜单

void sort(School*,string,int);//排序操作

};

void Count::input(){

int i,j,num,m,f,id;

School *sch;

Item *it;

string s;

cout<<"输入学校数目:";

cin>>n;

for(i=0;i<n;i++){

sch=new School;

cout<<"请输入第"<<i+1<<"学校的名称:";

cin>>s;

sch->setName(s);

sch->setId(i+1);

sc[i]=*sch;

}

cout<<"输入男子和女子项目的数目:";

cin>>m;

cin>>f;

while(m>20||m<1||f>20||f<1){

cout<<"输入数据有误,请重新输入:"<<endl;

cin>>m;

cin>>f;

}

for(i=0;i<m+f;i++){

cout<<"输入第"<<i+1<<"个项目的名称:";

cin>>s;

it=new Item;

it->setName(s);

item[i]=*it;

cout<<"输入第"<<i+1<<"个项目的前5名学校的编号:"<<endl;

for(j=0;j<5;j++){

cin>>id;

if(i<m)

sc[id-1].setMale(sc[id-1].getMale()+integral[j]);

else if(i<m+f)

sc[id-1].setFemale(sc[id-1].getFemale()+integral[j]);

sc[id-1].setTotal(sc[id-1].getTotal()+integral[j]);

item[i].setSchool(sc[id-1],j);

}

}

}

void Count::print(int i){

cout<<"   "<<sc[i].getId()<<setw(10)<<sc[i].getName()<<setw(8)<<sc[i].getTotal()

<<setw(9)<<sc[i].getMale()<<setw(10)<<sc[i].getFemale()<<endl;

}

void Count::sort(School* sch,string mode,int num){//排序函数

int i,j,exchange;

School t;

if(mode=="total"){

exchange=0;

for(i=0;i<num-1;i++){

for(j=num-2;j>=0;j--)

if(sch[j+1].getTotal()>sch[j].getTotal()){

exchange=1;

t=sc[j+1];

sch[j+1]=sch[j];

sch[j]=t;

}

if(!exchange)

return;

}

return;

}

if(mode=="id"){

for(i=0;i<num;i++){

for(j=i+1;j<num;j++)

if(sch[i].getId()>sch[j].getId()){

t=sch[i];

sch[i]=sch[j];

sch[j]=t;

}

}

return;

}

if(mode=="male"){

exchange=0;

for(i=0;i<num-1;i++){

for(j=num-2;j>=0;j--)

if(sch[j+1].getMale()>sch[j].getMale()){

exchange=1;

t=sc[j+1];

sch[j+1]=sch[j];

sch[j]=t;

}

if(!exchange)

return;

}

return;

}

if(mode=="female"){

exchange=0;

for(i=0;i<num-1;i++){

for(j=num-2;j>=0;j--)

if(sch[j+1].getFemale()>sch[j].getFemale()){

exchange=1;

t=sc[j+1];

sch[j+1]=sch[j];

sch[j]=t;

}

if(!exchange)

return;

}

return;

}

}

void Count::statisticsForTotal(){

int i;

sort(sc,"total",n);

cout<<"按总分排序:"<<endl;

cout<<"学校编号  学校名称  总分 男子总分 女子总分"<<endl;

for(i=0;i<n;i++)

print(i);

}

void Count::statisticsForId(){

int i;

sort(sc,"id",n);

cout<<"按编号排序为:"<<endl;

cout<<"学校编号 学校名称 总分 男子总分 女子总分"<<endl;

for(i=0;i<n;i++)

print(i);

}

void Count::statisticsForMale(){

int i;

sort(sc,"male",n);

cout<<"按男子项目积分排序:"<<endl;

cout<<"学校编号 学校名称 总分 男子总分 女子总分"<<endl;

for(i=0;i<n;i++)

print(i);

}

void Count::statisticsForFemale(){

int i;

sort(sc,"female",n);

cout<<"按女子项目积分排序:"<<endl;

cout<<"学校编号 学校名称 总分 男子总分 女子总分"<<endl;

for(i=0;i<n;i++)

print(i);

}

void Count::schoolInfo(){ //查询学校的情况

int i,s;

cout<<"输入需要查询的学校编号:";

while(1){ 

cin>>s;

if(s<1||s>n){

cout<<"输入数据有误,请重新输入:";

continue;

}

break;

printf("该学校的信息信息:\n");

printf("编号 学校名称 总分 男子总分 女子总分\n");

for(i=0;i<n;i++){

if(sc[i].getId()==s){ 

print(i);

break;

}

}

cout<<endl;

}

void Count::itemInfo(){ //查询项目的情况

int i,s;

cout<<"输入需要查询的项目的编号:";

while(1){ 

cin>>s;

if(s<1||s>n){

cout<<"输入数据有误,请重新输入:";

continue;

}

break;

cout<<item[s-1].getName()<<"前5名学校编号及名称为:"<<endl;

sort(item[s-1].getSchools(),"total",5);

cout<<"名次 学校编号 学校名称"<<endl;

for(i=0;i<5;i++)

cout<<" "<<i+1<<"\t"<<item[s-1].getSchool(i).getId()

<<"\t"<<item[s-1].getSchool(i).getName()<<endl;

}

void Count::menu(){ //程序菜单

int i,flag=1;

while(flag){ 

cout<<"选择您需要的操作:"<<endl;

cout<<"1.按学校编号排序输出"<<endl;

cout<<"2.按学校总分排序输出"<<endl;

cout<<"3.按学校男总分排序输出"<<endl;

cout<<"4.按学校女总分排序输出"<<endl;

cout<<"5.查询某个学校成绩"<<endl;

cout<<"6.查询某个项目成绩"<<endl;

cout<<"7.结束"<<endl;

cin>>i;

while(i<1||i>7){

cout<<"你的输入有误,请重新输入:";

cin>>i;

}

switch(i){

case 1:

statisticsForId();

break;

case 2:

statisticsForTotal();

break;

case 3:

statisticsForMale();

break;

case 4:

statisticsForFemale();

break;

case 5:

schoolInfo();

break;

case 6:

itemInfo();

break;

case 7:

flag=0;

break;

}

}

}

void main(){

Count c;

c.input();

c.menu();

}

程序运行截图:

长城OZTEX
2011-09-01
知道答主
回答量:5
采纳率:0%
帮助的人:8355
展开全部
这个好像是个数据结构的课程设计,当时没有选这个题目!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w9xhcn
2011-09-01 · TA获得超过828个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:183万
展开全部
男女各20个太多了。
我设置的 一共3个学校, 男子2个项目,女子2个项目。
运行看看吧。

#include <iostream>
#include <string>
using namespace std;

struct School
{
int n; //学校编号
string name; //学校名字
int m; //男生团体积分
int w; //女生团体积分
int total; //总成绩
};

struct SUM //定义项目以及3个学校的成绩
{
float A;
float B;
float C;
};

void result(SUM *score,School *sch,int t,int n) //计算出男团总分,女团总分
// t判断男女,0是男,1是女
{//男/////////////////////////////////
if(!t){
if(score[n].A>score[n].B){
if(score[n].A>score[n].C&&score[n].B>score[n].C)sch[0].m+=5,sch[1].m+=3,sch[2].m+=2;
if(score[n].A>score[n].C&&score[n].B<score[n].C)sch[0].m+=5,sch[2].m+=3,sch[1].m+=2;
if(score[n].A<score[n].C)sch[2].m+=5,sch[0].m+=3,sch[1].m+=2;
}
if(score[n].A<score[n].B){
if(score[n].A>score[n].C)sch[1].m+=5,sch[0].m+=3,sch[2].m+=2;
if(score[n].A<score[n].C&&score[n].B>score[n].C)sch[1].m+=5,sch[2].m+=3,sch[0].m+=2;
if(score[n].A<score[n].C&&score[n].B<score[n].C)sch[2].m+=5,sch[1].m+=3,sch[0].m+=2;
}
}

//女///////////////////////////////
else{
if(score[n].A>score[n].B){
if(score[n].A>score[n].C&&score[n].B>score[n].C)sch[0].w+=5,sch[1].w+=3,sch[2].w+=2;
if(score[n].A>score[n].C&&score[n].B<score[n].C)sch[0].w+=5,sch[2].w+=3,sch[1].w+=2;
if(score[n].A<score[n].C)sch[2].w+=5,sch[0].w+=3,sch[1].w+=2;
}
if(score[n].A<score[n].B){
if(score[n].A>score[n].C)sch[1].w+=5,sch[0].w+=3,sch[2].w+=2;
if(score[n].A<score[n].C&&score[n].B>score[n].C)sch[1].w+=5,sch[2].w+=3,sch[0].w+=2;
if(score[n].A<score[n].C&&score[n].B<score[n].C)sch[2].w+=5,sch[1].w+=3,sch[0].w+=2;
}
}
}

void _1(School *sch) //第一种选择
{

for(int i=0;i<3;i++)
{
cout<<"学校编号:"<<sch[i].n<<endl;
cout<<"学校名称:"<<sch[i].name<<endl;
cout<<"学校总分:"<<sch[i].total<<endl;
cout<<"男团总分:"<<sch[i].m<<endl;
cout<<"女团总分:"<<sch[i].w;
cout<<endl<<endl;
}
}

void _2(School *sch,SUM *score) //第二种选择
{
int n;
cout<<"请输入学校编号:";
cin>>n;
switch(n){
case 1:
cout<<endl;
cout<<sch[0].name<<":\n";
cout<<"男子项目1:"<<score[0].A<<endl;
cout<<"男子项目2:"<<score[1].A<<endl;
cout<<"女子项目1:"<<score[2].A<<endl;
cout<<"女子项目2:"<<score[3].A<<endl;break;
case 2:
cout<<endl;
cout<<sch[1].name<<":\n";
cout<<"男子项目1:"<<score[0].B<<endl;
cout<<"男子项目2:"<<score[1].B<<endl;
cout<<"女子项目1:"<<score[2].B<<endl;
cout<<"女子项目2:"<<score[3].B<<endl;break;
case 3:
cout<<endl;
cout<<sch[2].name<<":\n";
cout<<"男子项目1:"<<score[0].C<<endl;
cout<<"男子项目2:"<<score[1].C<<endl;
cout<<"女子项目1:"<<score[2].A<<endl;
cout<<"女子项目2:"<<score[3].A<<endl;break;
}
}

void _3(SUM *score) //第三种选择
{
int n;
cout<<"请输入比赛项目编号(男子分别是1,2 女子分别是3,4):\n";
cin>>n;
n-=1;
cout<<endl;
switch(n)
{
case 0:
cout<<"男子项目1:\n";break;
case 1:
cout<<"男子项目2:\n";break;
case 2:
cout<<"女子项目1:\n";break;
case 3:
cout<<"女子项目2:\n";break;
}
if(score[n].A>score[n].B){
if(score[n].A>score[n].C&&score[n].B>score[n].C){
cout<<"学校A:"<<score[n].A<<endl;
cout<<"学校B:"<<score[n].B<<endl;
cout<<"学校C:"<<score[n].C<<endl;
}
if(score[n].A>score[n].C&&score[n].B<score[n].C){
cout<<"学校A:"<<score[n].A<<endl;
cout<<"学校C:"<<score[n].C<<endl;
cout<<"学校B:"<<score[n].B<<endl;
}
if(score[n].A<score[n].C){
cout<<"学校C:"<<score[n].C<<endl;
cout<<"学校A:"<<score[n].A<<endl;
cout<<"学校B:"<<score[n].B<<endl;
}
}
if(score[n].A<score[n].B){
if(score[n].A>score[n].C){
cout<<"学校B:"<<score[n].B<<endl;
cout<<"学校A:"<<score[n].A<<endl;
cout<<"学校C:"<<score[n].C<<endl;
}
if(score[n].A<score[n].C&&score[n].B>score[n].C){
cout<<"学校B:"<<score[n].B<<endl;
cout<<"学校C:"<<score[n].C<<endl;
cout<<"学校A:"<<score[n].A<<endl;
}
if(score[n].A<score[n].C&&score[n].B<score[n].C){
cout<<"学校C:"<<score[n].C<<endl;
cout<<"学校B:"<<score[n].B<<endl;
cout<<"学校A:"<<score[n].A<<endl;
}
}
cout<<"\n";
}
int main()
{
//定义了3个学校,并初始化数据;
School sch[3] = {1,"学校A",0,0,0,2,"学校B",0,0,0,3,"学校C",0,0,0};
//定义了4个项目,并初始化成绩
SUM score[4]={0};

int choice; //接受用户输入的选择

cout<<"有三个学校:1.学校A 2.学校B 3.学校C\n\n";
for(int i=0;i<4;i++){
if(i<2){
cout<<"请输入男子项目"<<i+1<<"的三个学校的成绩(依次输入A,B,C三学校):\n";
cin>>score[i].A>>score[i].B>>score[i].C;
result(&score[i],sch,0,i);
}else {
cout<<"请输入女子项目"<<i-1<<"的三个学校的成绩(依次输入A,B,C三学校):\n";
cin>>score[i].A>>score[i].B>>score[i].C;
result(&score[i],sch,0,i);
}
}
for(int i=0;i<3;i++){ //求总成绩
sch[i].total=sch[i].m+sch[i].w;
}

system("cls");
cout<<"有三个学校:1.学校A,2.学校B,3.学校C\n\n";

cout<<"- - - - - - - - - - - - - - - - - - - - - - - \n";
cout<<"| 1)输出每个学校的情况 |\n";
cout<<"| 2)输入学校编号,查看某个项目的情况 |\n";
cout<<"| 3)输入项目编号,查看学校的排名情况 |\n";
cout<<"- - - - - - - - - - - - - - - - - - - - - - - \n";
cout<<"\n请输入:";
cin>>choice;
system("cls");
switch(choice)
{
case 1:
_1(sch);break;
case 2:
_2(sch,score);break;
case 3:
_3(score);break;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lexus99
2011-09-01 · 超过11用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:40.7万
展开全部
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
int n; //n个学校
int m; //m个男子项目
int w; //w个女子项目
struct pro //表示项目的结构体
{
string name; //项目名称
int snum[6]; //前5名学校的编号
}p[21];
struct school //表示学校的结构体
{
int num;
string name; //学校名称
int score; //学校总分
int male; //男子总分
int female; //女子总分
}sch[21];
int integral[5]={7,5,3,2,1};//前五名得分
void input()
{
int i,j,y,x;
printf("输入学校数目:");
y=0;
while(1)
{
scanf("%d",&n);
if(n>=1&&n<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
for(i=1;i<=n;i++)
{
printf("输入第%d个学校的名称:",i);
cin>>sch[i].name;
sch[i].score=0;
sch[i].female=0;
sch[i].male=0;
sch[i].num=i;
}
printf("输入男子项目数和女子项目数:");
y=0;
while(1)
{
scanf("%d%d",&m,&w);
if(m<=20&&m>=1&&w<=20&&w>=1)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
for(i=1;i<=m+w;i++)
{
printf("输入第%d个项目的名称:\n",i);
cin>>p[i].name;
printf("输入第%d个项目的前5名的学校编号:\n",i);
for(j=1;j<=5;j++)
{
y=0;
while(1)
{
scanf("%d",&x);
if(x>=1&&x<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
p[i].snum[j]=x;
sch[x].score+=integral[j-1];
if(i<=m)sch[x].male+=integral[j-1];
else sch[x].female+=integral[j-1];
}
}
}
void print(int i)
{
cout<<sch[i].num<<setw(10)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9)
<<sch[i].male<<setw(10)<<sch[i].female<<endl;
}
void bianhao() //按编号排序
{
int i,j;
school t;
for(i=1;i<n;i++)
{
for(j=i;j<=n;j++)
if(sch[i].num>sch[j].num)
{t=sch[i];sch[i]=sch[j];sch[j]=t;}
}
printf("\n按编号排列:\n");
printf("编号 学校名称 总分 男子总分 女子总分\n");
for(i=1;i<=n;i++)
print(i);
}
void zongfen() //按学校总分排序
{
int i,j;
school t;
for(i=1;i<n;i++)
{
for(j=i;j<=n;j++)
if(sch[i].score<sch[j].score)
{t=sch[i];sch[i]=sch[j];sch[j]=t;}
}
printf("\n按学校总分排列:\n");
printf("编号 学校名称 总分 男子总分 女子总分\n");
for(i=1;i<=n;i++)
print(i);
ofstream fout;
fout.open("运动会分数统计.txt");
fout<<"编号 学校名称 总分 男子总分 女子总分"<<endl;
for(i=1;i<=n;i++)
{fout<<sch[i].num<<setw(13)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9)
<<sch[i].male<<setw(10)<<sch[i].female<<endl; }
fout.close();
}
void malezf() //按学校男总分排序
{
int i,j;
school t;
for(i=1;i<n;i++)
{
for(j=i;j<=n;j++)
if(sch[i].male<sch[j].male)
{t=sch[i];sch[i]=sch[j];sch[j]=t;}
}
printf("\n按学校男子总分排列:\n");
printf("编号 学校名称 总分 男子总分 女子总分\n");
for(i=1;i<=n;i++)
print(i);
}
void femalezf() //按学校女总分排序
{
int i,j;
school t;
for(i=1;i<n;i++)
{
for(j=i;j<=n;j++)
if(sch[i].female<sch[j].female)
{t=sch[i];sch[i]=sch[j];sch[j]=t;}
}
printf("\n按学校女子总分排列:\n");
printf("编号 学校名称 总分 男子总分 女子总分\n");
for(i=1;i<=n;i++)
print(i);
cout<<endl;
}
void cxsch() //查询学校信息
{
int i,y,s;
printf("输入需要查询的学校编号:");
y=0;
while(1)
{
scanf("%d",&s);
if(s>=1&&s<=n)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
printf("该学校相关信息:\n");
printf("编号 学校名称 总分 男子总分 女子总分\n");
for(i=1;i<=n;i++)
{
if(sch[i].num==s)
{
print(i);
break;
}
}
cout<<endl;
}
void cxxm() //查询项目信息
{
int i,y,s;
printf("输入需要查询的项目编号:");
y=0;
while(1)
{
scanf("%d",&s);
if(s>=1&&s<=n)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
cout<<p[s].name<<"前5名学校编号及名称为:"<<endl;
printf("名次 编号 学校名称\n");
for(i=1;i<=5;i++)
cout<<" "<<i<<" "<<p[s].snum[i]<<setw(12)<<sch[ p[s].snum[i] ].name<<endl;
cout<<endl;
}

void solve() //菜单函数
{
int z;
while(1)
{
printf("\n选择您需要的操作(选择序号):\n");
printf("1.按学校编号排序输出\n");
printf("2.按学校总分排序输出\n");
printf("3.按学校男总分排序输出\n");
printf("4.按学校女总分排序输出\n");
printf("5.查询某个学校成绩\n");
printf("6.查询某个项目成绩\n");
printf("7.结束\n\n");
scanf("%d",&z);
if(z==1)bianhao();
if(z==2)zongfen();
if(z==3)malezf();
if(z==4)femalezf();
if(z==5)cxsch();
if(z==6)cxxm();
if(z==7)break;
}
}
int main() //主函数
{
input();
solve();
return 0;
}
//你运行一下试试 功能还算齐全 主要是给你一个思路
如果你要写论文的话 我有现成的 给个邮箱地址 发给你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
段浩岚3H
2011-09-01 · TA获得超过186个赞
知道小有建树答主
回答量:628
采纳率:0%
帮助的人:193万
展开全部
不会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式