先设计一个基本账户类,再通过继承基本账户类设计一个储蓄账户类,储蓄账户 类中增加密码、地址、最小余额和利率等成员变量,并增加一些银行账户经常用到的成员函数。 要求: (1)类

先设计一个基本账户类,再通过继承基本账户类设计一个储蓄账户类,储蓄账户
类中增加密码、地址、最小余额和利率等成员变量,并增加一些银行账户经常用到的成员函数。
要求:
(1)类中的成员函数具有输入、输出储户上述信息的功能;
(2)将账号设计成不可更改;
(3)修改密码时要提供原密码。
本文为博主原创文章,未经博主允许不得转载。
版权为陈博超所有,第一次于2020年11月22日发表于BLOG上
本BLOG上原创文章未经本人许可,不得用于商业用途。转载请经允许后注明出处,否则保留追究法律责任的权利。

码字不宜,穷酸学生,各位老板打赏个1分钱支持一下,谢谢各位老板。
在这里插入图片描述

#include<iostream>
#include<string.h>
using namespace std;

class basic {
public:
	long id;
	basic(long a):id(a)						//基类构造函数
	{}
	void show(long id) {
		cout <<"账号:" << id << endl;
	}
	~basic()								//基类析构函数
	{}
};
class account :private basic {
public:
	char name[20];
	long balance;
	char password[20];
	char address[20];
	long minimum_balance;
	float annual_interest_rate;
	account(char *a, long b, long c, char *d, char *e, long f, float g): //派生类构造函数
		basic(b), balance(c), minimum_balance(f), annual_interest_rate(g)
	{
		strcpy_s(name, a);
		strcpy_s(password, d);
		strcpy_s(address, e);
	}
	void show1();							//声明显示函数
	void deposit(long money);				//声明存款函数
	void withdrawal(long money);			//声明取款函数
	void change_password(char* chpassword);	//声明修改密码函数
	void modify_name(char* chname);			//声明修改姓名函数
	void modification_address(char* chaddress);//声明修改地址函数
	~account()								//派生类析构函数
	{}
};
	void account::show1()
	{
	cout << "姓名:" << name << endl;
	basic::show(id);
	cout << "余额:" << balance << endl;
	cout << "密码:" << password << endl;
	cout << "地址:" << address << endl;
	cout << "最小余额:" << minimum_balance << endl;
	cout << "年利率:" << annual_interest_rate << endl;
	}
	void account::deposit(long money) {
		balance += money;
	}
	void account::withdrawal(long money) {
		balance -= money;
	}
	void account::change_password(char *chpassword) {
		strcpy_s(password, chpassword);
	}
	void account::modify_name(char* chname) {
		strcpy_s(name, chname);
	}
	void account::modification_address(char* chaddress) {
		strcpy_s(address, chaddress);
	}

int main() {
	char name[20];
	long id;
	long balance;
	char password[20];
	char address[20];
	long minimum_balance;
	float annual_interest_rate;
	long money;						//存款或取款数额
	int a;

	cout << "请输入客户信息" << endl;
	cout << "---------------------------------" << endl;
	cout << "姓名:";
	cin >> name;
	cout << "账号:";
	cin >> id;
	cout << "余额:";
	cin >> balance;
	cout << "密码:";
	cin >> password;
	cout << "地址:";
	cin >> address;
	cout << "最小余额:";
	cin >> minimum_balance;
	cout << "年利率";
	cin >> annual_interest_rate;
	account n(name, id, balance, password, address, minimum_balance, annual_interest_rate);
	cout << "------------------------请输入操作------------------------------" << endl;
	cout << "1.打印客户信息" << endl << "2.存款" << endl << "3.取款" << endl; 
	cout << "4.修改密码" << endl <<"5.修改姓名" << endl << "6.修改地址" << endl;

	while (scanf("%d", &a) != EOF) {
		switch (a) {
		case 1:
			n.show1();
			break;
		case 2:
			cout << "请输入存款金额:" << endl;
			cin >> money;
			n.deposit(money);
			cout << "当前余额:" << n.balance <<endl;
			break;
		case 3:
			cout << "请输入取款金额:" << endl;
			cin >> money;
			n.withdrawal(money);
			cout << "当前余额:" << n.balance << endl;
			break;
		case 4:
			char chpassword[20];
			cout << "请输入原始密码:" << endl;
			cin >> chpassword;
			if (strcmp(n.password, chpassword) != 0) {
				cout << "原始密码错误!请重新选择操作!" << endl;
			}
			else {
				cout << "请输入新密码:" << endl;
				cin >> chpassword;
				n.change_password(chpassword);
				cout << "修改成功!" << endl;
			}
			break;
		case 5:
			char chname[20];
			cout << "请输入修改后的姓名:" << endl;
			cin >> chname;
			n.modify_name(chname);
			cout << "修改成功!" << endl;
			break;
		case 6:
			char chaddress[20];
			cout << "请输入修改后的地址:" << endl;
			cin >> chaddress;
			n.modification_address(chaddress);
			cout << "修改成功!" << endl;
			break;
		}
	}
	return 0;
}

在这里插入图片描述
本文为博主原创文章,未经博主允许不得转载。
版权为陈博超所有,第一次于2020年11月22日发表于BLOG上
本BLOG上原创文章未经本人许可,不得用于商业用途。转载请经允许后注明出处,否则保留追究法律责任的权利。

码字不宜,穷酸学生,各位老板打赏个1分钱支持一下,谢谢各位老板。
在这里插入图片描述

  • 16
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,我知道了,不会泄漏您的信息。以下是银行账户设计,实现了封装、继承、友元、静态成员变量和函数: ```cpp #include <iostream> using namespace std; class Account { // 基 protected: string name; int balance; int number; public: void deposit(int amount) { balance += amount; } virtual void withdraw(int amount) = 0; // 纯虚函数 virtual void display() { cout << "Number: " << number << endl; cout << "Name: " << name << endl; cout << "Balance: " << balance << endl; } friend class ATM; // 将 ATM 设为友元 }; class CheckingAccount : public Account { // 储蓄账户继承自 Account private: static double fee; public: CheckingAccount(string n, int b) { name = n; balance = b; number = rand() % 10000; } void withdraw(int amount) { if (balance >= amount + fee) { balance -= (amount + fee); } else { cout << "Insufficient balance!" << endl; } } void display() { Account::display(); cout << "Checking Account Fee: " << fee << endl; } static void setFee(double f) { fee = f; } // 静态函数 }; double CheckingAccount::fee = 5.0; // 静态成员变量的初始化 class SavingsAccount : public Account { // 存款账户继承自 Account private: int rate; public: SavingsAccount(string n, int b, int r) { name = n; balance = b; rate = r; number = rand() % 10000; } void withdraw(int amount) { if (balance >= amount) { balance -= amount; } else { cout << "Insufficient balance!" << endl; } } void display() { Account::display(); cout << "Savings Account Rate: " << rate << "%" << endl; } static void compoundInterest(SavingsAccount& sa) { // 静态函数 double interest = sa.balance * sa.rate / 100.0; sa.balance += interest; } }; class ATM { // 友元 public: void withdraw(Account& acc, int amount) { acc.withdraw(amount); } }; int main() { CheckingAccount::setFee(10.0); // 使用静态函数设置所有储蓄账户的手续费 Account* acc[3]; acc[0] = new CheckingAccount("Tom", 2000); acc[1] = new SavingsAccount("Jerry", 3000, 5); acc[2] = new CheckingAccount("Alice", 1000); for (int i = 0; i < 3; i++) { acc[i]->display(); cout << endl; } SavingsAccount::compoundInterest(*(SavingsAccount*)acc[1]); // 强制型转换,调用静态函数计算利息 cout << "After compound interest: " << endl; for (int i = 0; i < 3; i++) { acc[i]->display(); cout << endl; } ATM atm; atm.withdraw(*acc[0], 500); // 取款 atm.withdraw(*acc[1], 2000); // 取款 cout << "After withdraw: " << endl; for (int i = 0; i < 3; i++) { acc[i]->display(); cout << endl; } return 0; } ``` 以上代码演示了一个银行账户管理的例子,基为 Account,其中包括了存款和取款操作,及展示账户信息的 display 函数。储蓄账户 CheckingAccount 继承自 Account,多加了一个手续费 fee,不足以支付手续费时,取款操作将失败。存款账户 SavingsAccount 同理,多包括了一个利率 rate。ATM 用于实现取款操作,需要将 Account 设为友元,避免取款操作需要知道私有成员的信息。当然,ATM 技术已经很老,这里只是为了演示的友元。 设计模式上,以上代码主要应用了模板方法模式,封装了储蓄和取款操作,便于扩展新的账户型。同时,利用了静态成员变量和函数,使得储蓄账户的手续费费率同步控制,利率定时计算。友元是典型的抽象工厂模式的应用,可以方便地扩展其他银行卡和业务功能。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值