【问题描述】
假设有一个这样的共享书店,当客户进入书店时需要托管一定数量的书籍,而这些书籍将被书店内所有用户共享,当客户离开书店时,他便会把之前进入书店托管的书一起带走。
设计一个 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++练习题,所有答案仅供同学们参考。