2008年12月北大自考c++机试

 

1、一个趣味射箭比赛,有三种得分方式:一、射箭可以射靶子,分为1-10环。二、有十个气球。三、有个鬼脸面具。
2、上述三种得分方式如下:靶子射中以后,得分根据1-10环分别得分相应的分数(环数),如果射中气球,每个1分,总共有  十个;鬼脸面具射中一次为3分,再次射中不得分。
3、根据以上要求分析为游戏者类(Competitor)、面具类(Mask),气球类(Balloon),靶子类(Target),最后定义一个排名类(Rank)
   游戏者类应包括姓名,编号,成绩等。
   排名类包括定义三个游戏者类,能输出如下格式:
   Rank        No       Name        Scores
   1           10       Jack         18
   2           11       Rose         11
   3           23       Robot         5

备注(各位老大指点一下,没学过c++,有点象c语言,呵呵)

  1. //"gamePku.h"
  2. #include <iomanip>
  3. using namespace std;
  4. class Borad//目标抽象基类
  5. {
  6.     void virtual ShowMe() = 0;
  7. };
  8. class Mask:public Borad//面具类
  9. {
  10.     static int mnum;
  11. public :
  12.     Mask();
  13.     ~Mask();
  14.     void ShowMe();
  15.     int getScores(){return mnum;};
  16. };
  17. class Balloon:public Borad//气球类
  18. {
  19.     static int bnum;
  20. public:
  21.     Balloon();
  22.     ~Balloon();
  23.     void ShowMe();
  24.     int getScores(){return bnum;};
  25. };
  26. class Target:public Borad//靶子类
  27. {
  28.     static int tnum;
  29. public:
  30.     Target(int i=0);
  31.     ~Target();
  32.     void ShowMe();
  33.     int getScores(){return tnum;};
  34. };
  35. class Competitor//参赛者类
  36. {
  37.     int ID;
  38.     int scores;
  39.     char *name;
  40.     Balloon *ball;
  41.     Mask *mask;
  42.     Target *tag;
  43. public:
  44.     Competitor();
  45.     char *getName(){return name;};
  46.     int getScores(){return scores;};
  47.     int getID(){return ID;};
  48.     friend istream operator>>(istream is,Competitor &com);
  49.     int Add();
  50. };
  51. class Rank//排名类
  52. {
  53.     Competitor *com[3];
  54. public:
  55.     Rank();
  56.     showRank();
  57. };
  58. //"gamePku.cpp"
  59. #include "stdafx.h"
  60. #include "gamePku.h"
  61. int Mask::mnum = 0;
  62. Mask::Mask()
  63. {
  64.     if(mnum==0)//判断是否已经得分了
  65.         mnum+=3;
  66. }
  67. Mask::~Mask()
  68. {
  69.     mnum = 0;
  70. }
  71. void Mask::ShowMe()
  72. {
  73.     cout<<"本次得分:"<<mnum<<endl;
  74. }
  75. int Balloon::bnum = 0;
  76. Balloon::Balloon()
  77. {
  78.     if(bnum<10)//判断气球数
  79.         bnum++;
  80. }
  81. Balloon::~Balloon()
  82. {
  83.     bnum=0;
  84. }
  85. void Balloon::ShowMe()
  86. {
  87.     cout<<"本次得分:"<<bnum<<endl;
  88. }
  89. int Target::tnum = 0;
  90. Target::Target(int n)
  91. {
  92.     switch(n)//输入的环数
  93.     {
  94.     case 1:
  95.         tnum++;
  96.         break;
  97.     case 2:
  98.         tnum+=2;
  99.         break;
  100.     case 3:
  101.         tnum+=3;
  102.         break;
  103.     case 4:
  104.         tnum+=4;
  105.         break;
  106.     case 5:
  107.         tnum+=5;
  108.         break;
  109.     case 6:
  110.         tnum+=6;
  111.         break;
  112.     case 7:
  113.         tnum+=7;
  114.         break;
  115.     case 8:
  116.         tnum+=8;
  117.         break;
  118.     case 9:
  119.         tnum+=9;
  120.         break;
  121.     case 10:
  122.         tnum+=10;
  123.         break;
  124.     default:
  125.         break;
  126.     }
  127.     
  128. }
  129. Target::~Target()
  130. {
  131.     tnum = 0;
  132. }
  133. void Target::ShowMe()
  134. {
  135.     cout<<"本次得分:"<<tnum<<endl;
  136. }
  137. Competitor::Competitor()//参赛者类初始化
  138. {
  139.     name = new char[20];
  140.     ID = 0;
  141.     strcpy(name,"");
  142.     scores = 0;
  143. }
  144. int Competitor::Add ()//根据射中的目标计算得取得分数
  145. {
  146.     int i(0),n(0);
  147.     int ballNum(0);
  148.     int maskNum(0);
  149.     while(i!=-1)
  150.     {
  151.         cout<<"输入以下1-4选择:"<<endl;
  152.         cout<<"1-输入靶子成绩:"<<endl;
  153.         cout<<"2-射中气球:"<<endl;
  154.         cout<<"3-射中面具:"<<endl;
  155.         cout<<"4-退出:"<<endl;
  156.         cin>>i;
  157.         if(i==1)
  158.         {
  159.             cout<<"请输入射中的环数:";
  160.             cin>>n;
  161.             cout<<endl;
  162.             tag = new Target(n);
  163.             scores+= tag->getScores();//计入总成绩
  164.             tag->ShowMe();//显示本次得分
  165.             delete tag;
  166.         }
  167.         else if(i==2)
  168.         {
  169.             if(ballNum==10)
  170.             {
  171.                 cout<<"所有气球已都被射破!"<<endl;//气球已经没了
  172.             }
  173.                 
  174.             else
  175.             {
  176.                 ball = new Balloon();
  177.                 scores+=ball->getScores ();
  178.                 ball->ShowMe();
  179.                 ballNum++;//计数
  180.                 delete ball;
  181.             }           
  182.         }
  183.         else if(i==3)
  184.         {
  185.             if(maskNum==0)//判断有没设中一次以上
  186.             {
  187.                 maskNum++;
  188.                 mask = new Mask();
  189.                 scores += mask->getScores();
  190.                 mask->ShowMe();
  191.                 delete mask;
  192.             }   
  193.             else
  194.                 cout<<"面具已经被射中一次了,以后再次射中不能再计分!"<<endl;
  195.         }
  196.         else
  197.             break;
  198.     }
  199.     return 0;
  200. }
  201. istream operator >>(istream is,Competitor &com)//重载输入函数
  202. {
  203.     cout<<"输入参赛者编号:";
  204.     cin>>com.ID;
  205.     cout<<"输入参赛者姓名:";
  206.     cin>>com.name;
  207.     return is;
  208. }
  209. Rank::Rank()//排名类初始化
  210. {
  211.     
  212.     for(int i=0;i<3;i++)
  213.     {
  214.         com[i] = new Competitor();
  215.         cin>>*com[i];//输入参赛者情况
  216.         com[i]->Add();//增加得分项目
  217.     }
  218. }
  219. Rank::showRank()
  220. {
  221.     int tem,scores[3]={0,0,0},index[3]={0,0,0};
  222.     for(int i=0;i<3;i++)
  223.         scores[i] = com[i]->getScores();
  224.     cout<<"排名情况如下:"<<endl;
  225.     cout.setf(ios::left);
  226.     cout<<setw(9)<<"Rank"<<setw(9)<<"No"<<setw(9)<<"Name"<<setw(9)<<"Scores"<<endl;//格式化
  227.     for(i=0;i<3;i++)
  228.     {
  229.         tem = i;
  230.         index[i] = tem;//默认次序
  231.         for(int j=0;j<3;j++)
  232.         {
  233.             if(scores[tem]<scores[j])
  234.             {
  235.                 tem = j;                
  236.             }
  237.         }
  238.         
  239.         if(tem!=i)//成绩最大的序号
  240.         {
  241.             index[i] = tem;             
  242.         }       
  243.         scores[tem] = -1;//成绩最大的置标志
  244.         cout.setf(ios::left);//左对齐
  245.         cout<<setw(9)<<i+1;         
  246.         cout<<setw(9)<<com[index[i]]->getID();      //编号
  247.         cout<<setw(9)<<com[index[i]]->getName();    //名字
  248.         cout<<setw(9)<<com[index[i]]->getScores();  //成绩
  249.         cout<<endl;
  250.     }
  251. }
  252. int _tmain(int argc, _TCHAR* argv[])
  253. {
  254.     Rank *rank = new Rank();
  255.     rank->showRank();
  256.     system("pause");
  257.     return 0;
  258. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值