c++程序设计基础(上)第五版继承的最后一道题,作业,一道题做了一下午。
挺综合的,用到了继承,重载的知识,记录一下。
题目:
设计快捷店会员的简单管理程序。
基本要求如下:
(1)定义人民币 RMB 类,实现人民币的基本运算和显示。
(2)定义会员 member 类,表示会员的基本信息,包括:编号(按建立会员的顺序自动生成),姓名, 密码,电话。提供输入、输出信息等功能。
(3)由 RMB 类和 member 类共同派生一个会员卡 memberCar 类,提供新建会员、充值、消费和查询 余额等功能。
(4)main 函数定义一个 memberCar 类数组或链表,保存会员卡,模拟一个快捷店的会员卡管理功能, 主要包括:
① 新建会员;
② 已有会员充值;
③ 已有会员消费(凭密码,不能透支);
④ 输出快捷店当前会员数,营业额(收、支情况)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
#define ll long long
class RMB
{
protected:
int yuan, jiao, fen;
bool mark;
public:
RMB(int y, int j, int f, bool m) :yuan(y), jiao(j), fen(f), mark(m) {}
RMB(double x = 0);
~RMB() {}
operator double()const;
friend istream& operator >> (istream& input, RMB& rmb);
friend ostream& operator << (ostream& output, RMB& rmb);
};
RMB::RMB(double x)
{
if (x < 0)
{
mark = 1;
x = -x;
}
else
mark = 0;
int n = int((x + 0.005) * 100);
yuan = n / 100;
n %= 100;
jiao = n / 10;
fen = n % 10;
}
RMB::operator double()const
{
double rmb = yuan + jiao / 10.0 + fen / 100.0;
if (mark)
rmb = -rmb;
return rmb;
}
istream& operator >> (istream& input, RMB& rmb)
{
cout << "请输入人民币数额:" << endl;
cout << "元:";
input >> rmb.yuan;
cout << "角:";
input >> rmb.jiao;
cout << "分:";
input >> rmb.fen;
return input;
}
ostream& operator << (ostream& output, RMB& rmb)
{
if (rmb.mark)
cout << "-";
output << rmb.yuan << "元" << rmb.jiao << "角" << rmb.fen << "分" << endl;
return output;
}
class member
{
protected:
string name, password, phone;
public:
static int num;
int number;
member(string, string, string);
~member() {}
friend istream& operator >> (istream& input, member& m);
friend ostream& operator << (ostream& output, member& m);
};
int member::num = 0;
member::member(string n, string word, string p)
{
name = n;
password = word;
phone = p;
number = 0;
}
istream& operator >> (istream& input, member& m)
{
cout << "请输入您的姓名:" << endl;
input >> m.name;
cout << "请输入您的密码:" << endl;
input >> m.password;
cout << "请输入您的手机号码:" << endl;
input >> m.phone;
return input;
}
ostream& operator << (ostream& output, member& m)
{
cout << "您的信息如下:" << endl;
cout << "编 号:" << m.number << endl;
cout << "姓 名:" << m.name << endl;
cout << "手机号码:" << m.phone << endl;
return output;
}
class memberCar :public RMB, public member
{
RMB balance, inrmb, outrmb;//余额,充值,消费
public:
static double qiann;
memberCar(string n = "\0", string w = "\0", string p = "\0") :member(n, w, p)
{
balance = inrmb = outrmb = 0;
}
~memberCar() {}
friend ostream& operator << (ostream& output, memberCar& m);
void recharge();
void cost();
void queryb()
{
cout << "您的余额为:" << balance << endl;
}
};
double memberCar::qiann = 0;
ostream& operator << (ostream& output, memberCar& m)
{
cout << "您的信息如下:" << endl;
cout << "编 号:" << m.number << endl;
cout << "姓 名:" << m.name << endl;
cout << "手机号码:" << m.phone << endl;
cout << "余 额:" << m.balance << endl;
return output;
}
void memberCar::recharge()
{
cout << "请输入您要充值的金额:" << endl;
cin >> inrmb;
balance = balance + inrmb;
cout << "现在您的余额为:" << endl;
cout << balance;
}
void memberCar::cost()
{
string mm;
cout << "请输入您的密码:" << endl;
cin >> mm;
if (mm == password)
{
cout << "请输入您要消费的金额:" << endl;
cin >> outrmb;
if (outrmb > balance)
{
cout << "您的余额不足!" << endl;
}
else
{
balance = balance - outrmb;
qiann = qiann + outrmb;
cout << "您已消费:" << outrmb;
cout << "您的余额为:" << balance;
}
}
else
cout << "您输入的密码错误!" << endl;
}
int main()
{
memberCar MemberCard[1000];
int n = 1;
int a = 1;
do{
cout << "请选择您要办理的业务:\n"
<< "1、新建会员\n" << "2、充值\n"
<< "3、消费\n" << "4、查询\n" << "5、店铺会员数及盈利\n"
<< "0、退出" << endl;
cin >> a;
switch (a)
{
case 1: {
cout << "请输入您的信息:" << endl;
char a[20], b[10], c[12];
cout << "请输入您的姓名:";
cin >> a;
cout << "请输入您的密码:";
cin >> b;
cout << "请输入您的手机号码:";
cin >> c;
MemberCard[n] = memberCar(a, b, c);
MemberCard[n].number = n;
cout << "您的会员编号为:" << MemberCard[n].number << endl;
n++;
}break;
case 2: {
int nb;
cout << "请输入您要充值的卡号:" << endl;
cin >> nb;
if (nb > n)
cout << "该卡号不存在!" << endl;
else MemberCard[nb].recharge();
}break;
case 3: {
int nb;
cout << "请输入您要消费的卡号:" << endl;
cin >> nb;
if (nb > n)
cout << "该卡号不存在!" << endl;
else MemberCard[nb].cost();
}break;
case 4: {
int nb;
cout << "请输入您要查询的卡号:" << endl;
cin >> nb;
if (nb > n)
cout << "该卡号不存在!" << endl;
else MemberCard[nb].queryb();
}break;
case 5: {
cout << "会员数为:" << MemberCard[n].num << endl;
cout << "盈 利:" << MemberCard[n].qiann << endl;
}
}
} while (a);
return 0;
}