<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文設計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; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45