会员卡(继承)

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;
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅梦曾倾

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值