3. 实验2——静态成员 —— 模拟共享书店

【问题描述】

假设有一个这样的共享书店,当客户进入书店时需要托管一定数量的书籍,而这些书籍将被书店内所有用户共享,当客户离开书店时,他便会把之前进入书店托管的书一起带走。 

设计一个 User 类(客户类),现有一个共享书店,该书店客户在进入书店时需要托管一定量的书籍,而这些书籍将由书店内所有用户共享,当客户离开书店时,他还是要将他进入书店时托管的书带走。设计时访问性可自主选择,具体要求如下:

姓名:string Name

托管的书籍量:int Books

带参构造函数:User(string name,int books),使用这两个参数初始化内部的两个成员,同时按照姓名 数量 进入的格式打印一条消息。

析构函数:~User(),按照姓名 数量 离开的格式打印一条消息。

静态成员函数:void GetState(),按照书店人数:用户总数,书店共享书数量:书籍总数,人均共享数量:人均书籍量的格式打印一条消息,其中人均书籍量只保留整数部分。

提示:可以增加 userCount ,bookCount 两个静态变量用于记录已有用户数和已有书籍数。


【样例输入】

厉宏富 10

冷欣荣 2

叶文光 0


【样例输出】

厉宏富 10 进入

冷欣荣 2 进入

书店人数:2,书店共享书数量:12,人均共享数量:6

厉宏富 10 离开

叶文光 0 进入

书店人数:2,书店共享书数量:2,人均共享数量:1

冷欣荣 2 离开

书店人数:1,书店共享书数量:0,人均共享数量:0

叶文光 0 离开

#include  <string>
#include  <iostream>
using  namespace  std;
/*********  Begin  *********/
class  User
{
        //在此处声明所需的成员

public:
    string Name;
    int Books;
    static int userCount;
    static int bookCount;
    User(string name,int books);
    static void GetState();
    ~User();

};
int  User::userCount  =  0;  //都初始化为0
int  User::bookCount  =  0;
//在此处定义成员函数

User::User(string name,int books)
{
    Name=name;
    Books=books;
    cout<<Name<<" "<<Books<<" 进入"<<endl;
    userCount++;
    bookCount+=Books;
}
void User::GetState()
{
    int avebook;
    avebook=bookCount/userCount;
    if(userCount==0)
       cout<<"书店人数:"<<userCount<<",书店共享书数量:"<<bookCount<<",人均共享数量:"<<'0'<<endl;
    else
       cout<<"书店人数:"<<userCount<<",书店共享书数量:"<<bookCount<<",人均共享数量:"<<avebook<<endl;
}
User::~User()
{
    cout<<Name<<" "<<Books<<" 离开"<<endl;
    userCount--;
    bookCount-=Books;
}

/*********  End  *********/

int  main()
{
        string  name1,name2,name3;
        int  books1,books2,books3;
        cin>>name1>>books1;
        cin>>name2>>books2;
        cin>>name3>>books3;
        User  *user1=new  User(name1,books1);
        User  *user2=new  User(name2,books2);
        user1->GetState();
        delete  user1;
        User  user3(name3,books3);
        user3.GetState();
        delete  user2;
        user3.GetState();
        return  0;
}

【注】此分栏为西安理工大学C++练习题,所有答案仅供同学们参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值