欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)快捷店會員管理系統(tǒng)

 更新時間:2022年03月18日 11:30:10   作者:一只代碼魚  
這篇文章主要為大家詳細介紹了C++實現(xiàn)快捷店會員管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文設(shè)計C++快捷店會員的簡單管理系統(tǒng)?;疽笕缦拢?/p>

(1)定義人民幣RMB類(數(shù)據(jù)成員包括元,角,分三個整型變量),實現(xiàn)人民幣的基本運算(對操作符+和-運算進行重載)和顯示(顯示元,角,分)。

(2)定義會員member類,表示會員的基本信息,包括:編號(按建立會員的順序自動生成),姓名,密碼,電話。提供輸入、輸出信息等功能。

(3)由RMB類和member類共同派生一個會員卡memberCar類(含有memberCar類型next指針變量),提供新建會員、充值、消費和查詢余額等功能。

(4)main函數(shù)定義一個memberCar類鏈表,保存會員卡,模擬一個快捷店的會員卡管理功能,主要包括:

1)、 新建會員(檢查輸入的會員電話號碼是否已經(jīng)存在;若存在,則表示已經(jīng)有該會員,需要重新輸入會員信息),則為該會員建立會員卡,將該會員卡所表示的對象插入memberCar類鏈表表尾;

2)、已有會員充值(需要對充值進行非負性檢查);

3)、已有會員消費(憑密碼,不能透支);

4)、輸出快捷店當前會員數(shù),當前所有會員的消費總額,所有會員卡剩余的額度總數(shù);

5)、遍歷鏈表,輸出所有會員卡的信息(不能輸出會員個人密碼);

6)、建立一個文本文件“member.txt”,將所有會員信息存入該文件中;

7) 、建立一個二進制文件“member.dat” ,將所有會員信息存入該文件中;

8) 、建立指針數(shù)組,初始化指針數(shù)組,存儲鏈表中每個會員對象的地址;對鏈表中的每個會員按照消費額度按照從小到大進行排序(要求不能改變鏈表的邏輯結(jié)構(gòu)),并將排序后的會員對象的地址存在指針數(shù)組中;

9)、利用(8)中的指針數(shù)組,在屏幕上輸出會員的排序結(jié)果。

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;
?? ?}
}

主函數(shù)

#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 << "快捷店當前會員數(shù)為:" << sum << endl;
?? ?cout << "當前所有會員的消費總額為:" << p->tCost << endl;
?? ?cout << "所有會員卡剩余額度總數(shù)為:" << 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; //<< "會員總?cè)藬?shù):" << 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 << "*********快捷店會員管理系統(tǒng)**********" << endl;
?? ??? ?cout << "************1.新建會員***************" << endl;
?? ??? ?cout << "***********2.已有會員充值************" << endl;
?? ??? ?cout << "***********3.已有會員消費************" << endl;
?? ??? ?cout << "*******4.輸出快捷店當前會員數(shù)********" << endl;
?? ??? ?cout << "*******當前所有會員的消費總額********" << endl;
?? ??? ?cout << "*******所有會員卡剩余的額度總數(shù)******" << endl;
?? ??? ?cout << "********5.輸出所有會員卡的信息*******" << endl;
?? ??? ?cout << "****6.采用二進制方式保存會員信息*****" << endl;
?? ??? ?cout << "******7.讀取文件中所有會員信息*******" << endl;
?? ??? ?cout << "**8.用數(shù)組存儲地址,并按消費額度排序*" << 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;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • C++?QT實現(xiàn)文件壓縮和解壓縮操作

    C++?QT實現(xiàn)文件壓縮和解壓縮操作

    這篇文章主要為大家詳細介紹了C++?QT如何實現(xiàn)壓縮文件、文件夾和解壓縮的操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-11-11
  • C語言指針和數(shù)組深入探究使用方法

    C語言指針和數(shù)組深入探究使用方法

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個字符串,使字符串處理更加方便、靈活
    2022-08-08
  • 使用C語言實現(xiàn)內(nèi)存池的示例代碼

    使用C語言實現(xiàn)內(nèi)存池的示例代碼

    所謂內(nèi)存池,顧名思義和線程池的設(shè)計原理是一樣的,為了減少頻繁申請釋放內(nèi)存而帶來的資源消耗,減少釋放內(nèi)存后產(chǎn)生的內(nèi)存碎片,下面我們就來看看如何使用C語言實現(xiàn)內(nèi)存池吧
    2024-02-02
  • C語言數(shù)據(jù)結(jié)構(gòu)中堆排序的分析總結(jié)

    C語言數(shù)據(jù)結(jié)構(gòu)中堆排序的分析總結(jié)

    堆是計算機科學中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將通過圖片詳細介紹堆排序,需要的可以參考一下
    2022-04-04
  • C++編寫生成不重復的隨機數(shù)代碼

    C++編寫生成不重復的隨機數(shù)代碼

    本文給大家匯總介紹了3種c++實現(xiàn)生成不重復的隨機數(shù)的函數(shù),十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • C語言實現(xiàn)最長遞增子序列問題的解決方法

    C語言實現(xiàn)最長遞增子序列問題的解決方法

    這篇文章主要介紹了C語言實現(xiàn)最長遞增子序列問題的解決方法,采用遞歸的方法解決該問題,是非常經(jīng)典的一類算法,需要的朋友可以參考下
    2014-09-09
  • C語言字符串函數(shù)入門

    C語言字符串函數(shù)入門

    這篇文章主要為大家介紹了C語言字符串函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 詳解C語言結(jié)構(gòu)體的定義和使用

    詳解C語言結(jié)構(gòu)體的定義和使用

    這篇文章主要為大家介紹了C語言結(jié)構(gòu)體的定義和使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++回調(diào)函數(shù)的理解和使用教程

    C++回調(diào)函數(shù)的理解和使用教程

    這篇文章主要給大家介紹了關(guān)于C++回調(diào)函數(shù)的理解和使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • C語言全局變量和局部變量的示例代碼

    C語言全局變量和局部變量的示例代碼

    本文主要介紹了C語言全局變量和局部變量的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05

最新評論