华科CPP慕课SPOC第七章 编程题3

请完整戏票类的实现代码。并使用测试代码测试该类,测试代码的运行结果应和输出样例完全相同 注意, 1. booking函数的购票失败提示示例如下,编写代码时请复制其中的标点符号,以免由于中英文编码问题导致判分失效 余票(11)不足,购买失败 2. 输出的“:”都是中文“:”(25分)

题目内容:

//->戏票类

#include<iostream>

#include<cstring>

using namespace std;

class opera{

       char name[30];//歌剧名称

       int ts[4];  // ts[0]:包厢的总数,ts[1]:一等座的总座位数

                     //ts[2]:二等座的总座位数,ts[3]:三等座的总座位数

       int es[4];// es[0]:空包厢的数量,es[1]:一等座的空闲座位数

                     //es[2]:二等座的空闲座位数,es[3]:三等座的空闲座位数

       int ps[4];// ps[0]:包厢的票价,ps[1]:一等座的票价

                     //ps[2]:二等座的票价,,ps[3]:三等座的票价

       int income;//总收入

public:

       opera(); //默认构造函数,数据成员的初始值请参看输出样例

       void set_name(char *);//更改剧名

       void set_ps(int []);//更改座位价格

       void booking(int,int);//售票,如果余票小于订票数,

                            //终止该次售票,并输出购票失败提示信息

       void refund(int,int);//退票,不收手续费

       void print();

       ~opera(); //析构函数,完成票房统计,内容与格式请参看输出样例

   char * getName();

   int getPF(int);

   int getIncome();

};

void opera::print(){

char line[20]="------------------";

cout<<line<<"戏曲名:"<<name<<line<<endl;

char st[4][20]={ "包厢","一等座","二等座","三等座"};

       for(int i=0;i<4;i++) 

              cout<<st[i]<<"<"<<"票价:"<<ps[i]<<" /总数:"<<ts[i]<<" /可售:"<<es[i]<<">"<<endl;

       cout<<line<<"总收入:"<<income<<line<<endl;

}

//->测试代码,测试结果应和输出样例完全相同

int main(){

      opera p1;

      p1.print();

      p1.set_name("二进宫");//更改剧名

      int p[]={700,380,180,80};

  p1.set_ps(p);//更改座位价格

      p1.booking(0,9);//购买9张包厢票

      p1.booking(1,15);//购买15张一等票

      p1.booking(3,20);//购买20张三等票

      p1.print();

      p1.booking(0,13);//购买13张包厢票

      p1.booking(2,14);//购买14张二等票

      p1.refund(3,6);//退6张三等票

      //p1.print();     

 /*

 cout<<p1.getName()<<"的总收入:"<<p1.getIncome()<<endl;

  cout<<p1.getName()<<"的票房如下:"<<endl;

  cout<<"包厢售出"<<p1.getPF(0)<<endl;

  cout<<"一等座售出"<<p1.getPF(1)<<endl;

  cout<<"二等座售出"<<p1.getPF(2)<<endl;

  cout<<"三等座售出"<<p1.getPF(3)<<endl;

作为提示,要改掉;

*/

      return 0;

}

样例输出:

------------------戏曲名:未命名------------------

包厢<票价:0 /总数:20 /可售:20>

一等座<票价:0 /总数:100 /可售:100>

二等座<票价:0 /总数:240 /可售:240>

三等座<票价:0 /总数:300 /可售:300>

------------------总收入:0------------------

------------------戏曲名:二进宫------------------

包厢<票价:700 /总数:20 /可售:11>

一等座<票价:380 /总数:100 /可售:85>

二等座<票价:180 /总数:240 /可售:240>

三等座<票价:80 /总数:300 /可售:280>

------------------总收入:13600------------------

余票(11)不足,购买失败

------------------戏曲名:二进宫------------------

包厢<票价:700 /总数:20 /可售:11>

一等座<票价:380 /总数:100 /可售:85>

二等座<票价:180 /总数:240 /可售:226>

三等座<票价:80 /总数:300 /可售:286>

------------------总收入:15640------------------

二进宫的总收入:15640

二进宫的票房如下:

包厢售出9

一等座售出15

二等座售出14

三等座售出14

代码如下:

//->戏票类
#include<iostream>
#include<cstring>
using namespace std;

class opera{
       char name[30];//歌剧名称
       int ts[4];  // ts[0]:包厢的总数,ts[1]:一等座的总座位数
                     //ts[2]:二等座的总座位数,ts[3]:三等座的总座位数
       int es[4];// es[0]:空包厢的数量,es[1]:一等座的空闲座位数
                     //es[2]:二等座的空闲座位数,es[3]:三等座的空闲座位数
       int ps[4];// ps[0]:包厢的票价,ps[1]:一等座的票价
                     //ps[2]:二等座的票价,,ps[3]:三等座的票价
       int income;//总收入
public:
       opera(); //默认构造函数,数据成员的初始值请参看输出样例
       void set_name(char *);//更改剧名
       void set_ps(int []);//更改座位价格
       void booking(int,int);//售票,如果余票小于订票数,
                            //终止该次售票,并输出购票失败提示信息
       void refund(int,int);//退票,不收手续费
       void print();
       ~opera(); //析构函数,完成票房统计,内容与格式请参看输出样例
	   char * getName();
	   int getPF(int);
	   int getIncome();
};

opera::opera()
{
	char _name[30]="未命名";
	strcpy(name,_name);
	for(int i=0;i<4;i++)
	{
		ps[i]=0;
	}
	ts[0]=es[0]=20;
	ts[1]=es[1]=100;
	ts[2]=es[2]=240;
	ts[3]=es[3]=300;
	income=0;
}

void opera::set_name(char *_name)
{
	strcpy(name,_name);
}

void opera::set_ps(int *p)
{
	for(int j=0;j<4;j++)
	{
		ps[j]=p[j];
	}
}

void opera::booking(int a,int b)
{
	if(es[a]<b)
	{
		cout<<"余票("<<es[a]<<")不足,购买失败"<<endl;
		return ;
	}
	else 
	{
		es[a]-=b;
		income+=ps[a]*b;
	}
}

void opera::refund(int a,int b)
{
	income-=ps[a]*b;
	es[a]+=b;
}


char * opera::getName()
{
	return name;
}

int opera::getIncome()
{
	return income;
}

int opera::getPF(int x)
{
	return ts[x]-es[x];
}

opera::~opera()
{
	char line[20]="------------------";

	cout<<line<<"戏曲名:"<<name<<line<<endl;

	char st[4][20]={ "包厢","一等座","二等座","三等座"};

       for(int i=0;i<4;i++) 

              cout<<st[i]<<"<"<<"票价:"<<ps[i]<<" /总数:"<<ts[i]<<" /可售:"<<es[i]<<">"<<endl;

       cout<<line<<"总收入:"<<income<<line<<endl;
       
       	  cout<<getName()<<"的总收入:"<<getIncome()<<endl;
	  cout<<getName()<<"的票房如下:"<<endl;
	  cout<<"包厢售出"<<getPF(0)<<endl;
	  cout<<"一等座售出"<<getPF(1)<<endl;
	  cout<<"二等座售出"<<getPF(2)<<endl;
	  cout<<"三等座售出"<<getPF(3)<<endl;
}

void opera::print(){

	char line[20]="------------------";

	cout<<line<<"戏曲名:"<<name<<line<<endl;

	char st[4][20]={ "包厢","一等座","二等座","三等座"};

       for(int i=0;i<4;i++) 

              cout<<st[i]<<"<"<<"票价:"<<ps[i]<<" /总数:"<<ts[i]<<" /可售:"<<es[i]<<">"<<endl;

       cout<<line<<"总收入:"<<income<<line<<endl;

}



//->测试代码,测试结果应和输出样例完全相同
int main(){
      opera p1;
      p1.print();
      p1.set_name("二进宫");//更改剧名
      int p[]={700,380,180,80};
	  p1.set_ps(p);//更改座位价格
      p1.booking(0,9);//购买9张包厢票
      p1.booking(1,15);//购买15张一等票
      p1.booking(3,20);//购买20张三等票
      p1.print();
      p1.booking(0,13);//购买13张包厢票
      p1.booking(2,14);//购买14张二等票
      p1.refund(3,6);//退6张三等票
      //p1.print();     

      return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季风13

谢谢认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值