1. 程式人生 > 其它 >C++ATM客戶端設計陣列版

C++ATM客戶端設計陣列版

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

世界不會因為你的疲憊,而停下它的腳步