C++实现会员管理程序

 更新时间:2020年07月23日 11:48:39   作者:TwcatL_tree  
这篇文章主要为大家详细介绍了C++实现会员管理程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现会员管理程序的具体代码,供大家参考,具体内容如下

设计快捷店会员的简单管理程序。基本要求如下:

(1)定义人民币RMB类,实现人民币的基本运算和显示。
(2)定义会员member类,表示会员的基本信息,包括:编号(按建立会员的顺序自动生成),姓名,密码,电话。提供输入、输出信息等功能。
(3)由RMB类和member类共同派生一个会员卡memberCar类,提供新建会员、充值、消费和查询余额等功能。
(4)main函数定义一个memberCar类数组或链表,保存会员卡,模拟一个快捷店的会员卡管理功能,主要包括:

① 新建会员;
② 已有会员充值;
③ 已有会员消费(凭密码,不能透支);
④ 输出快捷店当前会员数,营业额(收、支情况)。

代码:

#include<iostream>
#include<String.h>
using namespace std;
class RMB{
  int yuan,jiao,fen;
public:
  RMB(int y=0,int j=0,int f=0){
    yuan=y;
    jiao=j;
    fen=f;
  }
  RMB(double x)
  {
     int n = int((x + 0.005) * 100);
     yuan = n / 100;
     jiao = (n - yuan * 100) / 10;
     fen = n % 10;
  }
  operator double()
  {
     return (yuan + jiao * 0.1 + fen * 0.01);
  }
  ~RMB() {}
   friend ostream & operator<<(ostream&output, const RMB&m){
    output << m.yuan << "元" << m.jiao << "角" << m.fen << "分" << endl;
    return output;
   }
  friend istream & operator>>(istream&input, RMB&m){
     cout << "元:";
     input >> m.yuan;
     cout << "角:";
     input >> m.jiao;
     cout << "分:";
     input >> m.fen;
     return input;
  }
};
class member{
public:
  static int number;
  char name[20],code[10], phoneNumber[12];
  static int bianhao() { number++; return number; }
  member(char*a,char*c,char*p){
  strcpy(name,a);
  strcpy(code,c);
  strcpy(phoneNumber,p);
  }
  ~member() {}
   friend istream&operator>>(istream&input, member&A)
  {
     cout << "please input name: " << endl;
     input >> A.name;
     cout << "please input code: " << endl;
     input >> A.code;
     cout << "please input phone number : " << endl;
     input >> A.phoneNumber;
     return input;
  }
  friend ostream&operator<<(ostream&output, member&A)
  {
    output << "the information of member:" << endl;
    output << "number" << '\t' << "name" << '\t' << "phone" << endl;
    output << A.bianhao() << '\t' << A.name << '\t' << A.phoneNumber << endl;
    return output;
  }
};
int member::number=0;
class memberCar:public RMB,public member{
public:
   RMB income, outcome, balance;
   memberCar*next;
   memberCar(char*a, char*c, char*p):member(a,c,p){
    balance = 0;
    income = 0;
    outcome = 0;
   }
  ~memberCar() {}
  friend ostream&operator<<(ostream&output, const memberCar&A)
{
  output << "the information of member:" << endl;
  output << "number" << '\t' << "name" << '\t' << "phone" << '\t' << '\t' << "balance" << endl;
  output << A.bianhao() << '\t' << A.name << '\t' << A.phoneNumber << '\t' << A.balance << endl;
  return output;
}
void recharge()
  {
     cout << "How much do you want to recharge?" << '\n' << "please input the money : " << endl;
     cin >> income;
     balance =balance + income;
     cout << "your balance : " << balance << endl;
  }
void cost()
  {
     char y[10];
     cout << "please input your code : " << endl;
     cin >> y;
     if (strncmp(code, y, 10)==0)
     {
       cout << "please input the money you cost : " << endl;
       cin >> outcome;
       if (outcome > balance)
       {
         cout << "your balance is not enough ! " << endl;
       }
       else
       {
         balance = balance - outcome;
         cout << "your balance : "<< balance;
       }
     }
     else
     {
       cout << "your code is wrong ! " << endl;
     }
  }
  void query(){ cout << "your balance : " << balance; }
};
void AddFront(memberCar*&h, memberCar*&t)
{
  t->next = h;
  h = t;
}
void FindList(memberCar*head, int n = 2)
{
  char s[20];
  cout << "please input your name : " << endl;
  cin >> s;
  while (head)
  {
     if (strncmp(head->name, s, 20) == 0)      {
     switch (n)
       {
       case 2:
         (*head).recharge();
         break;
       case 3:
         (*head).cost();
         break;
       }
     }
     head = head->next;
  }
}
void ShowList(memberCar*head)
{
  int count = 0;
  RMB I=0, O=0;
  while (head)
  {
     count++;
     I=I+head->income;
     O = O + head->outcome;
     head = head->next;
  }
  cout << "the number of member :  " << count << endl;
  cout << "the income of the store : " << I << endl;
  cout << "the outcome of the store : " << O << endl;
  cout << "turn-over of the store :  " << (I - O) << endl;
}

int main()
{
  int choice;
  memberCar*head = NULL, *p;
  do
  {
     cout << "please choice:\n";
     cout << "1 : new member, 2 : recharge, 3 : purchase , 4 :output the number of member and turn-over,other number is over! " << endl;
     cin >> choice;
     switch (choice)
     {
     case 1:
    {
        cout << "input information of new member : " << endl;
        char a[20],c[10],h[12];
        cout << "please input name: " << endl;
        cin>>a;
        cout << "please input code: " << endl;
        cin>>c;
        cout << "please input phone number : " << endl;
        cin>>h;
       p = new memberCar(a, c, h);
       AddFront(head, p);
       cout << *p << endl;
       break;
     }
     case 2:
     {
       FindList(head, 2);
       break;
     }
     case 3:
     {
       FindList(head, 3);
       break;
     }
     case 4:
     {
       ShowList(head);
       break;
     }
     }
  } while (choice);
  return 0;
}

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • C++深入学习之彻底理清重载函数匹配

    C++深入学习之彻底理清重载函数匹配

    C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载,下面这篇文章主要给大家介绍了关于C++深入学习之彻底理清重载函数匹配的相关资料,需要的朋友可以参考下
    2019-01-01
  • C++STL之string类的使用

    C++STL之string类的使用

    这篇文章主要为大家详细介绍了C++STL中的string类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • OpenCV利用霍夫变换进行直线检测

    OpenCV利用霍夫变换进行直线检测

    这篇文章主要为大家详细介绍了OpenCV利用霍夫变换进行直线检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • C++ 中国象棋的实现流程详解

    C++ 中国象棋的实现流程详解

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动
    2021-11-11
  • 简单分析针对ARM平台的C语言程序的编译问题

    简单分析针对ARM平台的C语言程序的编译问题

    这篇文章主要介绍了针对ARM平台的C语言程序的编译问题,从优化编译选项的几个方面进行分析,需要的朋友可以参考下
    2015-12-12
  • String类的写时拷贝实例

    String类的写时拷贝实例

    下面小编就为大家带来一篇String类的写时拷贝实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言Turbo C下实现俄罗斯方块

    C语言Turbo C下实现俄罗斯方块

    这篇文章主要为大家详细介绍了C语言Turbo C下写的俄罗斯方块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 使用C/C++读写.mat文件的方法详解

    使用C/C++读写.mat文件的方法详解

    这篇文章主要为大家详细介绍了使用C/C++读写.mat文件的方法,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++高级程序员成长之路

    C++高级程序员成长之路

    本文主要是结合自身的经验,给大家罗列了一些如何成为C++高级程序员的方法和注意事项,分享给大家,希望对新手能够有所帮助。
    2015-12-12
  • C++初始化列表学习

    C++初始化列表学习

    在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示
    2013-09-09

最新评论