C++实现快捷店会员管理系统

本文设计C++快捷店会员的简单管理系统。基本要求如下:

(1)定义人民币RMB类(数据成员包括元,角,分三个整型变量),实现人民币的基本运算(对操作符+和-运算进行重载)和显示(显示元,角,分)。

(2)定义会员member类,表示会员的基本信息,包括:编号(按建立会员的顺序自动生成),姓名,密码,电话。提供输入、输出信息等功能。

(3)由RMB类和member类共同派生一个会员卡memberCar类(含有memberCar类型next指针变量),提供新建会员、充值、消费和查询余额等功能。

(4)main函数定义一个memberCar类链表,保存会员卡,模拟一个快捷店的会员卡管理功能,主要包括:

1)、 新建会员(检查输入的会员电话号码是否已经存在;若存在,则表示已经有该会员,需要重新输入会员信息),则为该会员建立会员卡,将该会员卡所表示的对象插入memberCar类链表表尾;

2)、已有会员充值(需要对充值进行非负性检查);

3) 、已有会员消费(凭密码,不能透支);

4)、输出快捷店当前会员数,当前所有会员的消费总额,所有会员卡剩余的额度总数;

5)、遍历链表,输出所有会员卡的信息(不能输出会员个人密码);

6)、建立一个文本文件“member.txt”,将所有会员信息存入该文件中;

7) 、建立一个二进制文件“member.dat” ,将所有会员信息存入该文件中;

8) 、建立指针数组,初始化指针数组,存储链表中每个会员对象的地址;对链表中的每个会员按照消费额度按照从小到大进行排序(要求不能改变链表的逻辑结构),并将排序后的会员对象的地址存在指针数组中;

9) 、利用(8)中的指针数组,在屏幕上输出会员的排序结果。

RMB头文件:

#pragma once
#include <iostream>
using namespace std;
 
class RMB {
public:
    static double tCost;
    int m_Yuan;
    int m_Jiao;
    int m_Fen;
    RMB();
    RMB& operator+(double rmb);
    RMB& operator-(double rmb);
    void show();
};

RMB源文件

#include "RMB.h"
 
double RMB::tCost = 0;
RMB::RMB() {
    m_Yuan = 0;
    m_Jiao = 0;
    m_Fen = 0;
}
RMB& RMB::operator+(double rmb) {
    int yuan = ((int)(rmb * 100)) / 100;
    int jiao = ((int)(rmb * 10)) % 10;
    int fen = ((int)(rmb * 100)) % 10;
    this->m_Yuan += yuan;
    this->m_Jiao += jiao;
    this->m_Fen += fen;
    return *this;
}
RMB& RMB::operator-(double rmb) {
    int yuan = ((int)(rmb * 100)) / 100;
    int jiao = ((int)(rmb * 10)) % 10;
    int fen = ((int)(rmb * 100)) % 10;
    this->m_Yuan -= yuan;
    this->m_Jiao -= jiao;
    this->m_Fen -= fen;
    return *this;
}
void RMB::show() {
    cout << "您的余额为:" << this->m_Yuan << "元" << this->m_Jiao << "角" << this->m_Fen << "分" << endl;
}

member头文件

#pragma once
#include <iostream>
#include <string>
using namespace std;
 
class member {
public:
    static long preId;
    long m_id;
    string m_Name;
    string m_Passport;
    string m_PhoneNumber;
    member();
    void inIft();
    void outIft();
};

member源文件

#include "member.h"
 
long member::preId = -1L;
member::member() {
    this->m_id = preId + 1;
    preId = this->m_id;
}
void member::inIft() {
    string name;
    cout << "请输入您的姓名:";
    cin >> name;
    this->m_Name = name;
    cout << endl;
    string passport;
    cout << "请输入您的密码:";
    cin >> passport;
    this->m_Passport = passport;
    cout << endl;
    string phoneNum;
    cout << "请输入您的电话:";
    cin >> phoneNum;
    this->m_PhoneNumber = phoneNum;
    cout << endl;
}
void member::outIft() {
    cout << "编号:" << m_id << " 姓名:" << m_Name << " 密码:" << m_Passport << " 电话:" << m_PhoneNumber << endl;
}

memberCard头文件

#pragma once
#include <iostream>
#include "RMB.h"
#include "member.h"
using namespace std;
 
class memberCard:public RMB,public member{
public:
    static int num_;
    memberCard* next;
    double Con = 0;
    memberCard();
    void create();
    void deposit();
    void consume();
    void balanceCheck();
    ~memberCard();
};

memberCard源文件

#include "memberCard.h"
 
int memberCard::num_ = -1;
memberCard::memberCard() {
    num_++;
    this->next = NULL;
}
void memberCard::create() {
    inIft();
}
void memberCard::deposit() {
    cout << "请输入充值的金额:";
    double money;
    cin >> money;
    cout << endl;
    if (money < 0) {
        cout << "充值金额不能为负!" << endl;
        return;
    }
    this->operator+(money);
}
void memberCard::consume() {
    cout << "请输入消费金额:";
    double money;
    cin >> money;
    Con += money;
    cout << endl;
    cout << "请输入密码:";
    string passport;
    cin >> passport;
    if (strcmp(passport.c_str(), m_Passport.c_str()) == 0) {
        if (((int)(money * 100)) / 100 > m_Yuan) {
            cout << "余额不足!" << endl;
            return;
        }
        else if (((int)(money * 100)) / 100 == m_Yuan) {
            if (((int)(money * 10)) % 10 > m_Jiao) {
                cout << "余额不足!" << endl;
                return;
            }
            else if (((int)(money * 10)) % 10 == m_Jiao) {
                if (((int)(money * 100)) % 10 > m_Fen) {
                    cout << "余额不足!" << endl;
                    return;
                }
            }
        }
        this->operator-(money);
        RMB::tCost += money;
    }
    else {
        cout << "密码错误!" << endl;
        return;
    }
}
void memberCard::balanceCheck() {
    this->show();
}
memberCard::~memberCard() {
    if (this->next != NULL) {
        delete this->next;
        this->next = NULL;
    }
}

主函数

#include <iostream>
#include "RMB.h"
#include "member.h"
#include "memberCard.h"
#include <string>
#include <fstream>
using namespace std;
 
#define FILENAME1 "member.txt"
#define FILENAME2 "member.dat"
void AddMember(memberCard*& head, memberCard*& pre) {
    if (head == NULL) {
        head = new memberCard;
        pre = head;
        return;
    }
    memberCard* p = new memberCard;
    p->create();
    p->next = NULL;
    pre->next = p;
    pre = p;
    cout << "添加成功!" << endl;
    system("pause");
}
bool check(memberCard*& head, memberCard*& pre) {
    if (head == NULL) {
        return false;
    }
    cout << "请输入要办理会员的电话号:";
    string phoneNum;
    cin >> phoneNum;
    cout << endl;
    memberCard* p = head->next;
 
    while (p != NULL) {
        if (strcmp(phoneNum.c_str(), p->m_PhoneNumber.c_str()) == 0) {
            cout << "该手机号已有会员!" << endl;
            system("pause");
            return true;
        }
        p = p->next;
    }
    return false;
}
void deposit_(memberCard* head) {
    if (head == NULL) {
        return;
    }
    memberCard* p = head->next;
    cout << "请输入要充值的会员卡手机号:" << endl;
    string phoneNum;
    cin >> phoneNum;
    while (p != NULL) {
        if (strcmp(phoneNum.c_str(), p->m_PhoneNumber.c_str()) == 0) {
            p->deposit();
            cout << "充值成功!" << endl;
            system("pause");
            return;
        }
        p = p->next;
    }
    cout << "未查询到会员卡!" << endl;
    system("pause");
}
void consume_(memberCard* head) {
    if (head == NULL) {
        return;
    }
    cout << "请输入要消费的会员手机号:" << endl;
    string phoneNum;
    cin >> phoneNum;
    memberCard* p = head->next;
    while (p != NULL) {
        if (strcmp(phoneNum.c_str(), p->m_PhoneNumber.c_str()) == 0) {
            p->consume();
            
            return;
        }
        p = p->next;
    }
    cout << "未查询到会员卡!" << endl;
    system("pause");
}
void total(memberCard* head) {
    if (head == NULL) {
        return;
    }
    memberCard* p = head->next;
    int sum = 0;
    double totalBalance = 0;
    while (p != NULL) {
        sum++;
        double balance = p->m_Yuan * 1.0 + p->m_Jiao * 0.1 + p->m_Fen * 0.01;
        totalBalance += balance;
        p = p->next;
    }
    cout << "快捷店当前会员数为:" << sum << endl;
    cout << "当前所有会员的消费总额为:" << p->tCost << endl;
    cout << "所有会员卡剩余额度总数为:" << totalBalance << endl;
    system("pause");
}
void display(memberCard*& head) {
    if (head == NULL) {
        cout << "无任何会员卡" << endl;
        return;
    }
    memberCard* p = head->next;
    while (p != NULL) {
        double balance = p->m_Yuan * 1.0 + p->m_Jiao * 0.1 + p->m_Fen * 0.01;
        cout << "id:" << p->m_id << " 姓名:" << p->m_Name << " 电话:" << p->m_PhoneNumber << " 余额:" <<balance << endl;
        p = p->next;
    }
    system("pause");
}
void save(memberCard*& head) {
    if (head == NULL) {
        return;
    }
    ofstream oft;
    oft.open(FILENAME1, ios::out);
 
    memberCard* p = NULL;
    p = head->next;
    while (p != NULL) {
        oft<< p->m_id << " " << p->m_Name << " " << p->m_Passport << " " << p->m_PhoneNumber << " " << p->m_Yuan << " " << p->m_Jiao << " " <<p->m_Fen<< " " << p->preId<< " " << p->tCost<< endl; //<< "会员总人数:" << p->num_
        p = p->next;
    }
    oft.close();
}
void save2(memberCard* head) {
    if (head == NULL) {
        return;
    }
    ofstream oft;
    oft.open(FILENAME2, ios::binary | ios::out);
    memberCard* p = head->next;
    while (p != NULL) {
        oft.write((const char*)&p, sizeof(memberCard));
        p = p->next;
    }
    cout << "保存成功!" << endl;
    system("pause");
}
void readFile() {
    ifstream ifs;
    ifs.open(FILENAME1, ios::in);
    if (ifs.is_open()) {
        char buf[1024] = { 0 };
        while (ifs >> buf) {
            cout << buf << endl;
        }
    }
    ifs.close();
    system("pause");
}
void toArray(memberCard* head,memberCard**& arr) {
    /*memberCard** arr = new memberCard*[memberCard::num_];*/
    memberCard* p = head->next;
    int index = 0;
    while (p != NULL) {
        arr[index] = p;
        index++;
        p = p->next;
    }
    for (int i = 0; i < memberCard::num_; i++) {
        for (int j = i + 1; j < memberCard::num_; j++) {
            if (arr[i]->Con > arr[j]->Con) {
                memberCard* temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
 
int main() {
    memberCard* head = NULL;
    memberCard* pre = NULL;
    FileIsEmpty(head,pre);
    while (true) {
 
        cout << "*************************************" << endl;
        cout << "*********快捷店会员管理系统**********" << endl;
        cout << "************1.新建会员***************" << endl;
        cout << "***********2.已有会员充值************" << endl;
        cout << "***********3.已有会员消费************" << endl;
        cout << "*******4.输出快捷店当前会员数********" << endl;
        cout << "*******当前所有会员的消费总额********" << endl;
        cout << "*******所有会员卡剩余的额度总数******" << endl;
        cout << "********5.输出所有会员卡的信息*******" << endl;
        cout << "****6.采用二进制方式保存会员信息*****" << endl;
        cout << "******7.读取文件中所有会员信息*******" << endl;
        cout << "**8.用数组存储地址,并按消费额度排序*" << endl;
        cout << "*************************************" << endl;
        int d_select;
        cout << "请输入您的选择:" << endl;
        cin >> d_select;
 
        switch (d_select) {
        case 1:
        {
            if (check(head,pre)) {
                break;
            }
            AddMember(head, pre);
            break;
        }
        case 2:
            deposit_(head);
            break;
        case 3:
            consume_(head);
            break;
        case 4:
            total(head);
            break;
        case 5:
            display(head);
            break;
        case 6:
            save2(head);
            break;
        case 7:
            readFile();
            break;
        case 8:
        {
            memberCard** arr = new memberCard * [memberCard::num_];
            toArray(head, arr);
            for (int i = 0; i < memberCard::num_; i++) {
                double balance = arr[i]->m_Yuan * 1.0 + arr[i]->m_Jiao * 0.1 + arr[i]->m_Fen * 0.01;
                cout << "id:" << arr[i]->m_id << " 姓名:" << arr[i]->m_Name << " 电话:" << arr[i]->m_PhoneNumber << " 余额:" << balance << endl;
            }
            system("pause");
            break;
        }
        }
        save(head);
        system("cls");
    }
 
    
    system("pause");
    return 0;
}

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

(0)

相关推荐

  • C++实现会员管理程序

    本文实例为大家分享了C++实现会员管理程序的具体代码,供大家参考,具体内容如下 设计快捷店会员的简单管理程序.基本要求如下: (1)定义人民币RMB类,实现人民币的基本运算和显示. (2)定义会员member类,表示会员的基本信息,包括:编号(按建立会员的顺序自动生成),姓名,密码,电话.提供输入.输出信息等功能. (3)由RMB类和member类共同派生一个会员卡memberCar类,提供新建会员.充值.消费和查询余额等功能. (4)main函数定义一个memberCar类数组或链表,保存会员

  • C++实现快捷店会员管理系统

    本文设计C++快捷店会员的简单管理系统.基本要求如下: (1)定义人民币RMB类(数据成员包括元,角,分三个整型变量),实现人民币的基本运算(对操作符+和-运算进行重载)和显示(显示元,角,分). (2)定义会员member类,表示会员的基本信息,包括:编号(按建立会员的顺序自动生成),姓名,密码,电话.提供输入.输出信息等功能. (3)由RMB类和member类共同派生一个会员卡memberCar类(含有memberCar类型next指针变量),提供新建会员.充值.消费和查询余额等功能. (4

  • Spring Boot 会员管理系统之处理文件上传功能

    温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使用是没问题,但是,涉及到一些异常和原理的话可能就有些困难. 1. 前端部分 在前端部分addMember.html是通过form表单来提交会员的信息,其中就包括了图片上传功能(这里涉及了文件上传操作),表单部分代码如下: <form th:action="@{/admin/addMember}

  • C语言实现会员管理系统

    本文实例为大家分享了C语言实现会员管理系统的具体代码,供大家参考,具体内容如下 会员信息包括:会员号(6位数,唯一),姓名,身份证号,联系电话,状态(1表示正常,0表示挂失). 会员管理包括:会员的添加.删除.修改(会员号不能修改).挂失.查询.接触挂失. 先给大家看看效果: 上代码: #include <stdio.h> #include <stdlib.h> #include <string.h> struct VIP             //定义结构体,存储会

  • python实现会员管理系统

    本文用python写了一个会员管理系统,供大家参考,具体内容如下: """ 后台管理员前台会员信息系统 1.后台管理员只有一个用户:admin 密码:admin 2.当管理员登陆成功后,可以管理前台会员信息 3.当会员信息管理包含: 添加会员信息 删除会员信息 查看会员信息 退出 添加用户: 1)判断用户是否存在 2)如果存在,,报错 3)如果不存在,分别添加用户名和密码到列表中 删除用户: 1)判断用户是否存在 2)如果存在,删除 3)如果不存在,报错 "&quo

  • Java实现超市会员管理系统

    本文实例为大家分享了Java实现超市会员管理系统的具体代码,供大家参考,具体内容如下 要求:借助集合框架及实用类实现该系统 1.积分累计2.积分兑换3.查询剩余积分4.修改密码5.开卡6.退出 执行结果: 开卡.积分累计部分: 兑换积分.查询剩余积分部分: 修改密码.使用新密码查询部分: 退出部分: 实现思路: 1.创建会员用户类: 用户名.密码.会员卡号(随机生成).注册日期.积分 2.创建超市业务类: 菜单展示 业务选择 积分存取方法.积分兑换方法.积分查询方法.修改密码方法.开卡方法 判断

  • 基于javaweb+jsp的游泳馆会员管理系统(推荐)

    基于javaweb+jsp的游泳馆会员管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Bootstrap Ajax 基础JSP+Servlet或JSP+SSM(Spring.SpringMVC.MyBatis)框架或JSP+SSM+Maven(pom.xml)框架或SpringBoot…均可 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 <nav c

  • 基于javaweb+jsp的游泳馆会员管理系统(附源码)

    目录 适用 运行环境 开发工具 技术框架 适用 功能说明 源代码 基于javaweb+jsp的游泳馆会员管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Bootstrap Ajax 基础JSP+Servlet或JSP+SSM(Spring.SpringMVC.MyBatis)框架或JSP+SSM+Maven(pom.xml)框架或SpringBoot…均可 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适

  • python实现会员信息管理系统(List)

    题目要求 1.后台管理员只有一个用户:admin, 密码: admin2.当管理员登陆成功后,可以管理前台会员信息.3.会员信息管理包括:   添加会员信息   删除会员信息   查看会员信息   退出 代码示例 print('管理员登陆'.center(50,'*')) inuser=input('Username:') inpasswd=input('Password:') users = ['root','westos'] passwds=['123','456'] if inuser==

  • C语言实现餐饮点餐管理系统

    本文实例为大家分享了C语言实现餐饮点餐管理系统的具体代码,供大家参考,具体内容如下 具体代码如下 /* 项目名称:南航餐饮管理系统 组员:梁文新,刘青林,刘艺,施瑞文(组长) */ //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员 //头文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h&g

随机推荐