C++学校运动会管理系统的实现

 更新时间:2018年10月18日 09:43:06   作者:zzuli-dk  
这篇文章主要为大家详细介绍了C++如何实现学校运动会管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

本文实例为大家分享了C++实现运动会管理系统的具体代码,供大家参考,具体内容如下

#include <iostream>
#include <cstdio>
#include <string>
#include <windows.h>
#include <set>
#include <map>
using namespace std;
const int MAXN = 100005;
typedef long long LL;
map< pair<string, string>, int> mtable;//男生参赛成绩
map< pair<string, string>, int> wtable;//女生参赛成绩
multimap<string, string> parti;//学号对应参赛项目
set <string> st;//有哪些学生学号
map<string, int> mitem;//参加该项目的女学生数
map<string, int> witem;//参加该项目的男学生数
map<string, int> item;//项目数参加人数
map<string, int> acad;//学院的总得分
map<string, int> macad;//学院男生得分
map<string, int> wacad;//学院女生得分
int cnt;
struct student
{
 string number;
 string name;
 string acad;
 string sex;
 int participate;
} stu[MAXN];
void menu()
{
 cout<<"**************系统菜单功能项*****************\n";
 cout<<"1.运动会报名\n";
 cout<<"2.参赛信息查询\n";
 cout<<"3.竞赛检录\n";
 cout<<"4.竞赛成绩录入\n";
 cout<<"5.竞赛成绩查询\n";
 cout<<"6.竞赛成绩排序\n";
 cout<<"7.退出程序\n";
 return ;
}
void apply()//报名
{
 system("cls");
 string s1,s2,s3,s4,s5;
 cout<<"请输入学生信息\n";
 cout<<"请分别输入学生所属学院名,学生姓名,学生学号, 学生性别,学生参加的项目名\n";
 cin>>s1>>s2>>s3>>s4>>s5;
 if(st.find(s3)==st.end())
 {
 stu[cnt].acad=s1;
 stu[cnt].name=s2;
 stu[cnt].number=s3;
 stu[cnt].sex=s4;
 stu[cnt++].participate++;
 st.insert(s3);
 }
 else
 {
 for(int i=0; i<cnt; ++i)
 {
  if(s3==stu[i].number)
  {
  if(stu[i].participate+1<=3)
   stu[i].participate++;
  else
  {
   printf("此学生已经报满3项,无法继续填报\n");
   return ;
  }
  }
 }
 }
 parti.insert(make_pair(s3,s5));
 acad.insert(make_pair(s1,0));
 item[s5]++;
 if(s4=="男")
 {
 mitem[s5]=mitem[s5]+1;
 macad.insert(make_pair(s1,0));
 mtable[pair<string, string>(s3,s5)]=0;
 }
 else
 {
 witem[s5]=witem[s5]+1;
 wacad.insert(make_pair(s1,0));
 wtable[pair<string, string>(s3,s5)]=0;
 }
 return ;
}
void query()//查询
{
 printf("信息查询的结果如下\n");
 for(int i=0; i<cnt; ++i)
 {
 cout<<"学生学号"<<stu[i].number<<" "<<"学生姓名"<<stu[i].name<<" "<<"学生性别"<<stu[i].sex<<" "<<"学生所属院系"<<stu[i].acad<<" "<<"学生参加项目数"<<stu[i].participate<<endl;;
 cout<<"同学姓名:"<<" "<<stu[i].name<<" "<<"参加了以下项目\n";
 multimap<string,string>::iterator it=parti.begin();
 for(; it!=parti.end(); it++)
 {
  if(it->first==stu[i].number)
  {
  cout<<it->second<<" ";
  }
 }
 cout<<"\n";
 }
 return ;
}
void registration()//检录
{
 system("cls");
 cout<<"请输入即将检录的比赛项目名字"<<endl;
 string s;
 cin>>s;
 cout<<"请一下同学前来检录"<<"\n";
 int flag=0;
 multimap<string, string>::iterator it = parti.begin();
 for(; it!=parti.end(); ++it)
 {
 if(it->second==s)
 {
  flag=1;
  cout<<it->first<<endl;
 }
 }
 if(!flag)
 cout<<"没有人报名该比赛\n"<<endl;
 return ;
}
void record()//录入成绩
{
 printf("请输入学生学号,和项目名字以及项目的名次\n");
 string s1,s2;
 int grade, ans=0;
 cin>>s1>>s2>>grade;
 for(int i=0; i<cnt; ++i)
 {
 if(stu[i].number==s1)
 {
  if(stu[i].sex=="男")
  {
  if(mitem[s2]>6)
  {
   if(grade==1)
   ans=7;
   else if(grade==2)
   ans=5;
   else if(grade==3)
   ans=3;
   else if(grade==4)
   ans=2;
   else if(grade==5)
   ans=1;
   else
   ans=0;
  }
  else
  {
   if(grade==1)
   ans=5;
   else if(grade==2)
   ans=3;
   else if(grade==3)
   ans=2;
   else
   ans=0;
  }
  macad[stu[i].acad]+=ans;
  mtable[pair<string,string>(s1,s2)]=ans;
  }
  else
  {
  if(witem[s2]>6)
  {
   if(grade==1)
   ans=7;
   else if(grade==2)
   ans=5;
   else if(grade==3)
   ans=3;
   else if(grade==4)
   ans=2;
   else if(grade==5)
   ans=1;
   else
   ans=0;
  }
  else
  {
   if(grade==1)
   ans=5;
   else if(grade==2)
   ans=3;
   else if(grade==3)
   ans=2;
   else
   ans=0;
  }
  wacad[stu[i].acad]+=ans;
  wtable[pair<string, string>(s1,s2)]=ans;
  }
  acad[stu[i].acad]+=ans;
 }
 }
}
void menu2()
{
 cout<<"1.按学院查看\n";
 cout<<"2.按参赛项目查看\n";
 cout<<"3.按参赛运动员查看\n";
 cout<<"4.退出\n";
 cout<<"请输入您的选择\n";
 return ;
}
void query_contest1()
{
 map<string, int>::iterator it=acad.begin();
 for(; it!=acad.end(); ++it)
 {
 cout<<"学院名字:"<<it->first<<endl;
 for(int i=0; i<cnt; ++i)
 {
  if(stu[i].acad==it->first)
  {
  multimap<string, string>::iterator iter=parti.begin();
  for(; iter!=parti.end(); ++iter)
  {
   if(stu[i].number!=iter->first)
   continue;
   if(stu[i].sex=="男")
   cout<<"姓名: "<<stu[i].name<<"项目: "<<iter->second<<"成绩: "<<mtable[pair<string,string>(iter->first,iter->second)]<<endl;
   else
   cout<<"姓名: "<<stu[i].name<<"项目: "<<iter->second<<"成绩: "<<wtable[pair<string,string>(iter->first,iter->second)]<<endl;
  }
  }
 }
 }
}
void query_contest2()
{
 map<string, int>::iterator it=item.begin();
 for(; it!=item.end(); it++)
 {
 cout<<"项目名称:"<<it->first<<endl;
 multimap<string, string>::iterator iter=parti.begin();
 for(; iter!=parti.end(); iter++)
 {
  if(iter->second==it->first)
  {
  for(int i=0; i<cnt; ++i)
  {
   if(iter->first==stu[i].number)
   {
   if(stu[i].sex=="男")
    cout<<"姓名: "<<stu[i].name<<"项目: "<<iter->second<<"成绩: "<<mtable[pair<string,string>(iter->first,iter->second)]<<endl;
   else
    cout<<"姓名: "<<stu[i].name<<"项目: "<<iter->second<<"成绩: "<<wtable[pair<string,string>(iter->first,iter->second)]<<endl;
   }
  }
  }
 }
 }
}
void query_contest3()
{
 for(int i=0; i<cnt; ++i)
 {
 cout<<"姓名: "<<stu[i].name<<"\n";
 multimap<string, string>::iterator iter=parti.begin();
 for(; iter!=parti.end(); iter++)
 {
  if(iter->first==stu[i].number)
  {
  if(stu[i].sex=="男")
   cout<<"项目: "<<iter->second<<"成绩: "<<mtable[pair<string,string>(iter->first,iter->second)]<<endl;
  else
   cout<<"项目: "<<iter->second<<"成绩: "<<wtable[pair<string,string>(iter->first,iter->second)]<<endl;
  }
 }
 }
}
void query_contest()//比赛成绩查询
{
 system("cls");
 menu2();
 int op;
 if(cnt==0)
 {
 printf("当前无人报名比赛,请先报名比赛\n");
 return ;
 }
 scanf("%d", &op);
 switch(op)
 {
 case 1:
 query_contest1();
 break;
 case 2:
 query_contest2();
 break;
 case 3:
 query_contest3();
 break;
 case 4:
 return;
 break;
 default:
 printf("输入有误,请重新输入\n");
 }
}
void sort_contest()//比赛成绩排序
{
 int Size=acad.size();
 for(int i=0; i<Size; ++i)
 {
 int Max=-1;
 string Maxs="";
 map<string, int >::iterator it = acad.begin();
 map<string, int >::iterator iter;
 for(; it!=acad.end(); ++it)
 {
  if(Max<it->second)
  {
  Max=it->second;
  Maxs=it->first;
  iter=it;
  }
 }
 acad.erase(iter);
 cout<<"学院名称:"<<Maxs<<" 学院总分:"<<Max<<endl;
 cout<<"男生总得分:"<<macad[Maxs]<<" 女生总得分"<<wacad[Maxs]<<endl;
 }
}
int main()
{
 int op;
 cout<<("**************学校运动会管理系统*****************\n");
// printf("请分别输入参赛学院个数,男子竞赛项目数和女子竞赛项目数\n");
// scanf("%d %d %d", &c, &n, &m);
// if(c<0||n<0||m<0)
// {
// printf("输入值有误,请重新输入\n");
// scanf("%d %d %d", &c, &n, &m);
// }
 cnt=0;
 while(1)
 {
 menu();
 scanf("%d", &op);
 switch(op)
 {
 case 1:
  apply();
  break;
 case 2:
  query();
  break;
 case 3:
  registration();
  break;
 case 4:
  record();
  break;
 case 5:
  query_contest();
  break;
 case 6:
  sort_contest();
  break;
 case 7:
  return 0;
  break;
 default:
  cout<<"错误输入, 请重新输入\n";
  break;
 }
 }
 return 0;
}

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。

相关文章

  • C/C++中使用列表框组件Qt?ListWidget

    C/C++中使用列表框组件Qt?ListWidget

    本文详细讲解了C/C++中使用列表框组件Qt?ListWidget的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • C++类的特种函数生成机制详解

    C++类的特种函数生成机制详解

    这篇文章主要给大家介绍了关于C++类特种函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-09-09
  • C++实现LeetCode(68.文本左右对齐)

    C++实现LeetCode(68.文本左右对齐)

    这篇文章主要介绍了C++实现LeetCode(68.文本左右对齐),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言进阶学习之指针

    C语言进阶学习之指针

    关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏。其实指针并不复杂,学习指针,要正确的理解指针,本片文章能给就来学习一下
    2021-09-09
  • win10+VS2017+Cuda10.0环境配置详解

    win10+VS2017+Cuda10.0环境配置详解

    这篇文章主要介绍了win10+VS2017+Cuda10.0环境配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • C语言关于文件的操作方法总结

    C语言关于文件的操作方法总结

    在任何程序的开发中,对于文件的操作都是绕不开的一个知识点,因为总是要用到存储读取的功能,今天我们来详细了解C语言中是怎么操作文件的
    2021-11-11
  • C++基于灰度图上色GrayToColorFromOther的实现

    C++基于灰度图上色GrayToColorFromOther的实现

    本文主要介绍了C++基于灰度图上色GrayToColorFromOther的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • C++实现LeetCode(48.旋转图像)

    C++实现LeetCode(48.旋转图像)

    这篇文章主要介绍了C++实现LeetCode(48.旋转图像),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中memset函数用法详解

    C++中memset函数用法详解

    这篇文章主要介绍了C++中memset函数用法,结合实例形式详细分析了memset函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2016-06-06
  • C语言三子棋的实现思路到过程详解

    C语言三子棋的实现思路到过程详解

    所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜。这篇文章主要为大家详细介绍了如何通过C语言实现三子棋小游戏,感兴趣的小伙伴可以尝试一下
    2023-02-02

最新评论

?


http://www.vxiaotou.com