C++ATM客戶端設計陣列版
阿新 • • 發佈:2021-10-13
世界不會因為你的疲憊,而停下它的腳步#include<iostream> #include<string> using namespace std; class User; class Date { public: Date() {} Date(int year, int month, int day) :year(year), month(month), day(day) {} ~Date() {} void setYear(int year) { this->year = year; } void setMonth(int month) { this->month = month; } void setDay(int day) { this->day = day; } int getYear() { return year; } int getMonth() { return month; } int getDay() { return day; } friend ostream &operator<<(ostream &out, const Date &date); friend istream &operator>>(istream &in, Date &date); bool operator<(Date date) { if (year < date.year) { return true; } else if (year == date.year) { if (month < date.month) { return true; } else if (month = date.month) { if (day <= date.day) { return true; } } } return false; } private: int year; int month; int day; }; ostream &operator<<(ostream &out, const Date &date) { out << date.year << "年" << date.month << "月" << date.day<<"日"; return out; } istream &operator>>(istream &in, Date &date) { in >> date.year >> date.month >> date.day; return in; } void test1() { Date d; cin >> d; cout << d<<endl; Date d1(2019,12,1); if (d1<d) { cout << d << endl; } else { cout << d1 << endl; } d.setYear(2020); d.setMonth(4); d.setDay(15); cout << d << endl; } class Record { public: Record() {} Record(Date date, double balance) :date(date), balance(balance) {} Record(string name,Date date, string type, double amount, double balance) { this->name = name; this->date = date; this->type = type; this->amount = amount; this->balance = balance; } void setName(string name) { this->name = name; } void setDate(Date date) { this->date = date; } void setType(string type) { this->type = type; } void setAmount(double amount) { this->amount = amount; } Date getDate() { return date; } double getBalance() { return balance; } string getType() { return type; } double getAmount() { return amount; } string getName() { return name; } friend ostream & operator<<(ostream & out, Record & r) { out << "交易時間:" << r.date << "\n" << "使用者姓名:" << r.name << "\n" << "交易型別:" << r.type << "\n" << "交易金額:" << r.amount << "\n" << "餘額:" << r.balance << endl; return out; } /*void show() { cout <<"交易時間:"<< date.getYear() << "年" << date.getMonth() << "月" << date.getDay() <<"日"<< endl; //cout << date << endl; cout << "使用者姓名:" << name << "交易型別:" << type << "交易金額:" << amount << "餘額:" << balance << endl; }*/ void show(Record r) { cout << r << endl; } private: string name; Date date; double balance;//餘額 double amount;//交易金額 string type;//交易型別 }; void test2() { Date d(2021, 4, 15); Record r("張三", d, "存錢", 1000, 1000); cout << r << endl; r.setName("李四"); Date d1(2021, 4, 14); r.setDate(d1); r.setType("取錢"); r.setAmount(100); r.show(r); } class User { public: User() {}; User(string name, string id1, string id2) :uname(name), cid(id1), uid(id2) { this->balance = 0; this->num = 0; } ~User() {}; friend ostream &operator<<(ostream &out, const User &user); friend istream &operator>>(istream &in, User &user); void setUname(string uname) { this->uname = uname; } void setCid(string cid) { this->cid = cid; } void setUid(string uid) { this->uid = uid; } void setBalance(double balance) { this->balance = balance; } void setRecord(Record r1) { r[++num] = r1; } string getUname() { return uname; } string getCid() { return cid; } string getUid() { return uid; } double getBalance() { return balance; } int getNum() { return num; } Record getRecord(int i) { return r[i]; } void add(Record r1) { setRecord(r1); } void show(int i) { getRecord(i).show(getRecord(i)); cout << "****************************************" << endl; } void showall() { for (int i = 1; i <= getNum(); ++i) { getRecord(i).show(getRecord(i)); cout << "****************************************" << endl; } } void querybydate(Date d1, Date d2) { for (int i = 1; i <= getNum(); ++i) { if (d1 < getRecord(i).getDate() && getRecord(i).getDate() < d2) { getRecord(i).show(getRecord(i)); } } } void querybytype(string type) { for (int i = 1; i <= getNum(); ++i) { if (getRecord(i).getType() == type) { getRecord(i).show(getRecord(i)); } } } private: string uname; string cid; string uid; double balance; Record r[100]; int num; }; ostream &operator<<(ostream &out, const User &user) { out << user.uname << " " << user.cid << " " << user.uid<<" "<<user.balance; return out; } istream &operator>>(istream &in, User &user) { in >> user.uname >> user.cid >> user.uid>>user.balance; return in; } void test3() { User u1; cin >> u1; cout << u1; cout << endl; u1.setUname("張三"); u1.setCid("111111"); u1.setUid("341204"); u1.setBalance(100); cout << u1.getUname()<<" "<<u1.getCid()<<" "<<u1.getUid()<<" "<<u1.getBalance()<<endl; cout << u1; } class RecordOperation { public: RecordOperation() {} RecordOperation(User user,Date date) :user(user),date(date) { } RecordOperation(Date date) : date(date) { } ~RecordOperation() {} void drawmoney(double dm)//取錢 { //double dm; //cin >> dm; if (dm <= user.getBalance()) { user.setBalance(user.getBalance() - dm); Record r1(user.getUname(), date, "取錢", dm, user.getBalance()); user.add(r1); } else { cout << date; cout << "此時餘額" << user.getBalance() << endl; cout << "操作錯誤餘額不足!"<<endl; cout << "****************************************" << endl; Record r1(user.getUname(), date, "取錢", 0, user.getBalance()); user.add(r1); } } void deposite(double dp) { //double dp; //cin >> dp; user.setBalance(user.getBalance() + dp); Record r1(user.getUname(), date, "存錢", dp, user.getBalance()); user.add(r1); } void querybydate(Date d1, Date d2) { /*int y, m, d; cin >> y >> m >> d; Date d1(y, m, d); int y0, m0, d0; cin >> y0 >> m0 >> d0; Date d2(y0, m0, d0); */ user.querybydate(d1, d2); } void querydeposit() { user.querybytype("存錢"); } void querydrawmoney() { user.querybytype("取錢"); } void show(int i) { user.show(i); } void show() { user.showall(); } void setDate(Date date) { this->date = date; } private: User user; Date date; }; void test4() { User user("張三","111111","341204"); Date date(2021, 4, 15); Date date1(2021, 3, 15); Date date2(2020, 2, 15); Date date3(2019, 6, 30); Date date4(2019, 12, 4); RecordOperation rop(user,date); rop.deposite(1000); rop.drawmoney(500); rop.setDate(date1); rop.deposite(10000); rop.setDate(date2); rop.drawmoney(5000); rop.setDate(date3); rop.drawmoney(10000); rop.setDate(date4); rop.deposite(50000); //rop.show(1); //rop.show(2); //rop.show(); //rop.querydeposit(); //rop.querydrawmoney(); rop.querybydate(date3, date2); } int main() { //test1(); //test2(); //test3(); test4(); return 0; }