问题描述:
(1) 初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数;
(2) 各项目名次取法有如下几种:
取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1;
(3) 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。
(4) 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。
(5) 原始数据需保存到磁盘文件中。
*/
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std
#define N 4
#define M 3
#define W 3
struct Student
{
Student(){}
Student(vector<string>* departments):depars(departments){}
void Input()
void Print()
friend ofstream&operator<<(ofstream&ofs, Student&stu)
friend ifstream&operator>>(ifstream&ifs, Student&stu)
string name
string department
int points
private:
vector<string>* depars
}
ofstream&operator<<(ofstream&ofs, Student&stu)
{
ofs <<stu.name <<"\t"<<stu.department<<"\t" <<stu.points
return ofs
}
ifstream&operator>>(ifstream&ifs, Student&stu)
{
ifs >>stu.name >>stu.department >>stu.points
return ifs
}
void Student::Input()
{
cout<<"输入名字:"<<endl
cin >>name
bool invalid(true)
do
{
string d
cout<<"输入院系名称:"<<endl
cin >>d
vector<string>::iterator found=find(depars->begin(),depars->end(),d)
if(found != depars->end())
{
invalid = false
department = d
} else {
cout<<"无效院系名称,请重新输入。"<<endl
}
} while(invalid)
}
void Student::Print()
{
cout<<name <<"\t"<<department<<endl
}
// Forward declaration
class GameInfo
class SportEvent
{
public:
static int GetPoint(int ranking)
void InputWinners(GameInfo&g)
void Print()
friend ofstream&operator<<(ofstream&ofs, SportEvent&se)
friend ifstream&operator>>(ifstream&ifs, SportEvent&se)
public:
vector<Student>winners
string name
}
ofstream&operator<<(ofstream&ofs, SportEvent&se)
{
ofs <<se.name <<endl
ofs <<se.winners.size() <<endl
for(unsigned int i(0)i<se.winners.size()i++)
{
ofs <<se.winners.at(i) <<"\t"
}
return ofs
}
ifstream&operator>>(ifstream&ifs, SportEvent&se)
{
ifs >>se.name
unsigned int count(0)
ifs >>count
se.winners.clear()
for(unsigned int i(0)i<counti++)
{
Student student
ifs >>student
se.winners.push_back(student)
}
return ifs
}
int SportEvent::GetPoint(int ranking)
{
switch(ranking)
{
case 1:
return 7
break
case 2:
return 5
break
case 3:
return 3
break
case 4:
return 2
break
case 5:
return 1
break
}
return 0
}
void SportEvent::Print()
{
// #1 student_name department_name
for(int i(0)i<5i++)
{
cout <<"#"<<(i+1)<<"\t"
winners.at(i).Print()
}
}
class GameInfo
{
public:
void Init()
void InputResult()
void QueryDep(string depart)
void QueryStu(string student)
void QueryEve(string eventname)
void Save(ofstream&)
void Load(ifstream&)
public:
vector<string>departments
vector<SportEvent>mevents
vector<SportEvent>wevents
}
void SportEvent::InputWinners(GameInfo&g)
{
for(int i(0)i<5i++)
{
Student s(&g.departments)
cout<<"输入第"<<(i+1)<<"个获奖者"<<endl
s.Input()
winners.push_back(s)
}
}
void GameInfo::Save(ofstream&fout)
{
//保存院系名称
fout <<departments.size() <<endl
for(unsigned int i(0)i<departments.size()i++)
{
fout <<departments.at(i) <<"\t"
}
fout <<endl
//保存男子项目
fout <<mevents.size() <<endl
for(unsigned int i(0)i<mevents.size()i++)
{
fout <<mevents.at(i) <<"\t"
}
fout <<endl
//保存女子项目
fout <<wevents.size() <<endl
for(unsigned int i(0)i<wevents.size()i++)
{
fout <<wevents.at(i) <<"\t"
}
fout <<endl
}
void GameInfo::Load(ifstream&fin)
{
}
void GameInfo::Init()
{
for(int i(0)i<Ni++)
{
string dname
cout<<"输入第"<<(i+1)<<"个参赛院系名称:"
cin >>dname
departments.push_back(dname)
}
cout <<endl
for(int i(0)i<Mi++)
{
SportEvent mevent
cout<<"输入第"<<(i+1)<<"个男子项目名称:"
cin >>mevent.name
mevents.push_back(mevent)
}
cout <<endl
for(int i(0)i<Wi++)
{
SportEvent wevent
cout<<"输入第"<<(i+1)<<"个女子项目名称:"
cin >>wevent.name
wevents.push_back(wevent)
}
cout <<endl
}
void GameInfo::InputResult()
{
for(int i(0)i<Mi++)
{
cout<<"输入第"<<(i+1)<<"个男子项目\"" <<mevents.at(i).name<<"\""<<endl
mevents.at(i).InputWinners(*this)
}
for(int i(0)i<Wi++)
{
cout<<"输入第"<<(i+1)<<"个女子项目\"" <<wevents.at(i).name<<"\""<<endl
wevents.at(i).InputWinners(*this)
}
}
void GameInfo::QueryDep(string depart)
{
cout <<depart <<endl
int points(0)
for(int i(0)i<Mi++)
{
vector<Student>w = mevents.at(i).winners
for(unsigned int n(0)n<w.size()n++)
{
if(w.at(n).department==depart)
{
cout <<(w.at(n).name) <<"\t"
cout <<(mevents.at(i).name)
cout <<"\t#" <<(n+1)// ranking
int p(SportEvent::GetPoint(n+1))
cout <<"\t" <<p <<"分"<<endl// point
points+=p
}
}
}
for(unsigned int i(0)i<Wi++)
{
vector<Student>w = wevents.at(i).winners
for(unsigned int n(0)n<w.size()n++)
{
if(w.at(n).department==depart)
{
cout <<w.at(n).name <<"\t"
cout <<wevents.at(i).name
cout <<"\t#" <<(n+1)// ranking
int p(SportEvent::GetPoint(n+1))
cout <<"\t" <<p <<"分"<<endl// point
points+=p
}
}
}
if(points)
cout <<"团体总分(男女混合):" <<points <<"分"<<endl
}
void GameInfo::QueryStu(string student)
{
cout <<student <<endl
int points(0)
string d
for(int i(0)i<Mi++)
{
vector<Student>w = mevents.at(i).winners
for(unsigned int n(0)n<w.size()n++)
{
if(w.at(n).name==student)
{
cout <<mevents.at(i).name
cout <<"\t#" <<(n+1)// ranking
int p(SportEvent::GetPoint(n+1))
cout <<"\t" <<p <<"分"<<endl// point
points+=p
d = w.at(n).department
}
}
}
if(points)
cout <<"隶属于:"<<d <<endl<<"个人总分:" <<points <<"分"<<endl
cout <<endl
points =0
for(int i(0)i<Wi++)
{
vector<Student>w = wevents.at(i).winners
for(unsigned int n(0)n<w.size()n++)
{
if(w.at(n).name==student)
{
cout <<wevents.at(i).name
cout <<"\t#" <<(n+1)// ranking
int p(SportEvent::GetPoint(n+1))
cout <<"\t" <<p <<"分"<<endl// point
points+=p
d =w.at(n).department
}
}
}
if(points)
cout <<"隶属于:"<<d <<endl<<"个人总分:" <<points <<"分"<<endl
}
void GameInfo::QueryEve(string eventname)
{
for(int i(0)i<Mi++)
{
if(mevents.at(i).name == eventname)
{
mevents.at(i).Print()
}
}
for(int i(0)i<Wi++)
{
if(wevents.at(i).name == eventname)
{
wevents.at(i).Print()
}
}
}
int main()
{
const char* filename= "data.txt"
GameInfo gi
//读取
ifstream ifs(filename)
gi.Load(ifs)
ifs.close()
//录入
gi.Init()
gi.InputResult()
int opt(0)
string name
while(opt!=4)
{
cout <<"1.按院系名称查询"<<endl
cout <<"2.按比赛项目查询"<<endl
cout <<"3.按运动员姓名查询"<<endl
cout <<"4.退出"<<endl
cin >>opt
switch(opt)
{
case 1:
cout <<"请输入院系名称:" <<endl
cin >>name
gi.QueryDep(name)
break
case 2:
cout <<"请输入比赛项目:" <<endl
cin >>name
gi.QueryEve(name)
break
case 3:
cout <<"请输入运动员姓名:" <<endl
cin >>name
gi.QueryStu(name)
break
}
}
//保存
ofstream ofs(filename, ios::out | ios::app)
gi.Save(ofs)
ofs.close()
return 0
}
#include <stdio.h>#include <malloc.h>
#include <string.h>
typedef struct player{
char id[10]
float score
}*Lplayer
void input(Lplayer players,int count,int m,int n){
float score=0,score1=0,score2=0,max=0,min=9999,sum=0
for(int i=0i<counti++){
printf("请输入选手序号")
scanf("%s",players[i].id)
max=0,min=9999,sum=0
printf("请主评委为选手%s打分",players[i].id)
for (int j=0j<mj++)
{
scanf("%f",&score)
if(score>max)
max=score
if(score<min)
min=score
sum+=score
}
score1=(sum-max-min)/(m-2)
max=0,min=9999,sum=0
printf("请群众评委为选手%s打分",players[i].id)
for (int k=0k<nk++)
{
scanf("%f",&score)
if(score>max)
max=score
if(score<min)
min=score
sum+=score
}
score2=(sum-max-min)/(n-2)
players[i].score=score1*0.7+score2*0.3
}
}
void sort(Lplayer players,int count){
float mid=0
char num[10]
for (int i=0i<counti++)
{
for (int j=0j<count-i-1j++)
{
if(players[j].score<players[j+1].score){
mid=players[j+1].score
strcpy(num,players[j+1].id)
players[j+1].score=players[j].score
strcpy(players[j+1].id,players[j].id)
players[j].score=mid
strcpy(players[j].id,num)
}
}
}
}
void output(Lplayer players,int count){
printf("成绩降序的统计表\n")
for (int i=0i<counti++)
{
printf("%s\t%.2f\n",players[i].id,players[i].score)
}
}
void main(){
int count,m,n//count 选手人数;m主评委人数;n群众评委人数
printf("请输入选手人数、主评委人数、群众评委人数(空格隔开)")
scanf("%d %d %d",&count,&m,&n)
Lplayer players=(Lplayer)malloc(sizeof(player)*count)
input(players,count, m, n)
sort( players,count)
output( players,count)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)