题目描述
编写程序,统计某旅馆住宿客人的总数和收入总额。要求输入客人的姓名,输出客人编号(2015+顺序号,顺序号4位,如第1位为0001,第2位为0002,依此类推)、姓名、总人数以及收入总额。总人数和收入总额用静态成员,其他属性采用普通的数据成员。旅馆类声明如下:
输入
第1行:输入旅馆单个顾客房租第2行开始,依次输入顾客姓名,0表示输入结束。
输出
每行依次输出顾客信息和当前旅馆信息。包括顾客姓名,顾客编号,旅馆当前总人数,旅馆当前总收入。样例输入
150
张三 李四 王五 0
样例输出
张三 20150001 1 150
李四 20150002 2 300
王五 20150003 3 450
#include<iostream>
#include<string.h>
#include<iomanip>
using namespace std;
class Hotel{
private:
static int m_TotalCusNum; //顾客总人数
static float m_TotalEearning; //旅店总收入
static float m_Rent; //每一个顾客的房租
char* m_CustomerName; //顾客名字
int m_CustomerID; //顾客编号
public:
Hotel(char *a_Customer){
m_CustomerName=new char[strlen(a_Customer)+1];
strcpy(m_CustomerName,a_Customer);
m_TotalCusNum++;
m_CustomerID=m_TotalCusNum;
m_TotalEearning=m_TotalCusNum*m_Rent;
}
~Hotel(){
delete m_CustomerName;
}
static void setRent(float r){
m_Rent=r;
}
void Display(){
cout<<m_CustomerName<<" 2015"<<setfill('0')<<setw(4)<<m_CustomerID;
cout<<" "<<m_CustomerID<<" "<<m_TotalEearning<<endl;
}
};
float Hotel::m_Rent=0;
int Hotel::m_TotalCusNum=0;
float Hotel::m_TotalEearning=0;
int main(){
float rent;
char name[50];
cin>>rent;
Hotel::setRent (rent);
while(1){
cin>>name;
if(name[0]=='0')
break;
Hotel h1(name);
h1.Display();
}
}
静态数据成员与静态成员函数几个注意的点
1.必须初始化静态数据成员
2.静态调用必须是静态成员函数
Hotel::setRent (rent);//静态调用:使用类名进行调用
------------------
h1.Display();//动态调用:使用了对象h1进行调用
3.非静态成员函数可以访问静态和非静态成员
4.静态成员函数只能访问静态成员