python定义一个类savingaccount表示银行账户_c#教程之c#模拟银行atm机示例分享

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ATM

{

abstract class Account

{

//账户号码

protected long id;

public long ID

{

get { return id; }

set { id = value; }

}

//账户密码

protected string password;

public string PassWord

{

get { return password; }

set { password = value; }

}

//户主的姓名

protected string name;

public string Name

{

get { return name; }

set { name = value; }

}

//身份证号码

protected string personId;

public string PersonId

{

get { return personId; }

set { personId = value; }

}

//email

protected string email;

public string Email

{

get { return email; }

set { email = value; }

}

//余额

protected double balance;

public double Balance

{

get { return balance; }

set { balance = value; }

}

//静态号码生成器

private static long idBuilder = 100000;

public static long IdBuilder

{

get { return idBuilder; }

set { idBuilder = value; }

}

public void Deposit(double sum)//存款

{

if (sum < 0)

throw new InvalidOperationException("输入的金额为负数");

balance += sum;

}

public abstract void Withdraw(double sum);//取款

public Account()

{ }

public Account(string password, string name, string personId, string email)

{

this.id = ++idBuilder;

this.password = password;

this.name = name;

this.personId = personId;

this.email = email;

}

}

//创建CreditAccount类,该类继承抽象类Account

class CreditAccount : Account

{

protected double ceiling;//透支额度

public double Ceiling

{

get { return ceiling; }

set { ceiling = value; }

}

public CreditAccount(string password, string name, string personId, string email)

: base(password, name, personId, email)

{ }

//信用账户的取款操作

public override void Withdraw(double sum)

{

if (sum < 0)

{

throw new InvalidOperationException("输入的金额为负数!");

}

if (sum > balance + ceiling)

{

throw new InvalidOperationException("金额已经超出余额和透支度的总数了");

}

balance -= sum;

}

}

//创建SavingAccount类,该类继承抽象类Account

class SavingAccount : Account

{

public SavingAccount(string password, string name, string personId, string email)

: base(password, name, personId, email)

{ }

public override void Withdraw(double sum)

{

if (sum < 0)

{

throw new InvalidOperationException("输入的金额为负数!");

}

if(sum>balance)

{

throw new InvalidOperationException("金额已经超出金额!");

}

balance -= sum;

}

}

//bank类,对银行中的所有账户进行管理

class Bank

{

//存放账户的集合

private List accounts;

public List Accounts

{

get { return accounts; }

set { accounts = value; }

}

//当前银行的账户数量

private int currentAccountNumber;

public int CurrentAccountNumber

{

get { return currentAccountNumber; }

set { currentAccountNumber = value; }

}

//构造函数

public Bank()

{

accounts=new List();

}

//开户

public Account OpenAccount(string password, string confirmationPassword, string name, string personId, string email, int typeOfAccount)

{

Account newAccount;

if (!password.Equals(confirmationPassword))

{

throw new InvalidOperationException("两次密码输入的不一致");

}

switch (typeOfAccount)

{

case 1: newAccount = new SavingAccount(password, name, personId, email);

break;

case 2: newAccount = new CreditAccount(password,name,personId,email);

break;

default: throw new ArgumentOutOfRangeException("账户类型是1和2之间的整数");

}

//把新开的账号加到集合中

accounts.Add(newAccount);

return newAccount;

}

//根据账户id得到账户对象

private Account GetAccountByID(long id)

{

foreach (Account account in accounts)

{

if (account.ID == id)

{

return account;

}

}

return null;

}

//根据账号和密码登陆账户

public Account SignIn(long id, string password)

{

foreach (Account account in accounts)

{

if (account.ID == id && account.PassWord.Equals(password))

{

return account;

}

}

throw new InvalidOperationException("用户名或者密码不正确,请重试");

}

//存款

public Account Deposit(long id, double sum)

{

Account account = GetAccountByID(id);

if (account != null)

{

account.Deposit(sum);

return account;

}

throw new InvalidOperationException("非法账户!");

}

//取款

public Account Withdraw(long id, double sum)

{

Account account = GetAccountByID(id);

if (account != null)

{

account.Withdraw(sum);

return account;

}

throw new InvalidOperationException("非法账户!");

}

//设置透支额度

public Account SetCeiling(long id, double newCeiling)

{

Account account = GetAccountByID(id);

try

{

(account as CreditAccount).Ceiling = newCeiling;

return account;

}

catch (Exception)

{

throw new InvalidOperationException("次账户不是信用账户!");

}

throw new InvalidOperationException("非法账户");

}

//统计银行所有账户余额

public double GetTotalBalance()

{

double totalBalance = 0;

foreach (Account account in accounts)

{

totalBalance += account.Balance;

}

return totalBalance;

}

//统计所有信用账户透支额度总数

public double GetTotalCeiling()

{

double totalCeiling = 0;

foreach (Account account in accounts)

{

if (account is CreditAccount)

{

totalCeiling += (account as CreditAccount).Ceiling;

}

}

return totalCeiling;

}

}

//进行客户测试

class Program

{

static Account SignIn(Bank icbc)

{

Console.WriteLine("\nPlease input your account ID");

long id;

try

{

id = long.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid account ID!");

return null;

}

Console.WriteLine("Please input your password");

string password = Console.ReadLine();

Account account;

try

{

account = icbc.SignIn(id, password);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

return null;

}

return account;

}

static void Main(string[] args)

{

Bank icbc = new Bank();

while (true)

{

Console.WriteLine("Please choose the service your need");

Console.WriteLine("(1) Open a new account");

Console.WriteLine("(2) Desposit");

Console.WriteLine("(3) Withdraw");

Console.WriteLine("(4) Set Ceiling");

Console.WriteLine("(5) Get Total Balance");

Console.WriteLine("(6) Get Total Ceiling");

Console.WriteLine("(0) Exit");

string choice;

choice = Console.ReadKey().KeyChar.ToString();

//ConsoleKey i=Console.ReadKey().Key;

switch (choice)

{

case "1":

{

string personId;

int typeOfAccount;

string password;

Console.WriteLine("\nWhich kind of account do you want to open?");

while (true)

{

Console.WriteLine("(1)Saving Account\n(2)Credit Account\n(3)return to Last Menu");

try

{

typeOfAccount = int.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("\nInvalid option,please choose again");

continue;

}

if (typeOfAccount < 1 || typeOfAccount > 3)

{

Console.WriteLine("\nInvalid option,please choooose again!");

continue;

}

break;

}

if (typeOfAccount == 3)

{

break;

}

Console.WriteLine("\nPlease input your name:");

string name = Console.ReadLine();

while (true)

{

Console.WriteLine("Please input your Personal ID");

personId = Console.ReadLine();

if (personId.Length != 18)

{

Console.WriteLine("Invalid Personal ID,please input again!");

continue;

}

break;

}

Console.WriteLine("Please input your E-mail");

string email = Console.ReadLine();

while (true)

{

Console.WriteLine("Please input your password");

password = Console.ReadLine();

Console.WriteLine("Please confirm your password");

if (password != Console.ReadLine())

{

Console.WriteLine("The password doesn't math!");

continue;

}

break;

}

Account account = icbc.OpenAccount(password, password, name, personId, email, typeOfAccount);

Console.WriteLine("The account opened successfully");

Console.WriteLine("Account ID:{0}\nAccount Name;{1}\nPerson ID:{2}\nemail;{3}\nBalance:{4}",account.ID,account.Name,account.PersonId,account.Email,account.Balance);

}

break;

case "2":

{

Account account = SignIn(icbc);

if (account == null)

{

break;

}

int amount;

while (true)

{

Console.WriteLine("Please input the amount;");

try

{

amount = int.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid input!");

continue;

}

break;

}

try

{

icbc.Deposit(account.ID, amount);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

break;

}

Console.WriteLine("Deposit successfully,our balance is{0}元",account.Balance);

}

break;

case "3":

{

Account account = SignIn(icbc);

if (account == null)

{

break;

}

int amount;

while (true)

{

Console.WriteLine("Please input the amount");

try

{

amount = int.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid input!");

continue;

}

break;

}

try

{

icbc.Withdraw(account.ID, amount);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

break;

}

Console.WriteLine("Deposit successfully,your balance is{0}yuan",account.Balance);

}

break;

case "4":

{

Account account = SignIn(icbc);

if (account == null)

{

break;

}

double newCeiling;

while (true)

{

Console.WriteLine("Please input the new ceiling");

try

{

newCeiling = double.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid input!");

continue;

}

break;

}

try

{

icbc.SetCeiling(account.ID, newCeiling);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

break;

}

Console.WriteLine("Set ceiling successfully,your new ceiling is{0} yuan",(account as CreditAccount).Ceiling);

}

break;

case "5":

Console.WriteLine("\nThe total balance is:"+icbc.GetTotalBalance());

break;

case "6":

Console.WriteLine("\nThe total ceiling is:" + icbc.GetTotalCeiling());

break;

case "0":

return;

default:

Console.WriteLine("\nInvalid option,plwase choose again!");

break;

}

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 在线人数 mysql_PHP+MYSQL实例:编写网站在线人数的程序代码

以下为引用的内容&#xff1a;//Put your basic server info here$server "localhost"; //normally localhost$db_user "root"; //your MySQL database username$db_pass "password"; //your MySQL database password$database "users&…

tracepro杂散光分析例子_光刻机的蜕变过程及专利分析

来源&#xff1a;芯通社近两年&#xff0c;中国芯片产业受到了严重打击&#xff0c;痛定思痛之余也让国人意识到芯片自主研发的重要性。从2008年以来&#xff0c;十年间&#xff0c;芯片都是我国第一大宗进口商品&#xff0c;进口额远超于排名第二的石油。2018年我国进口集成电…

docker mysql日志_面试官问:了解Mysql主从复制原理么?我呵呵一笑

搭建Mysql主从同步之前&#xff0c;我们先来说他们之间同步的过程与原理&#xff1a;同步复制过程献上一张图&#xff0c;这张图诠释了整个同步过程主从复制过程&#xff1a;slave节点与主节点进行连接&#xff0c;建立主从关系&#xff0c;并把从哪开始同步&#xff0c;及哪个…

python 文件加密_python实现文件快照加密保护的方法

本文实例讲述了python实现文件快照加密保护的方法。分享给大家供大家参考。具体如下&#xff1a;这段代码可以对指定的目录进行扫描&#xff0c;包含子目录&#xff0c;对指定扩展名的文件进行SHA-1加密后存储在cvs文件&#xff0c;以防止文件被篡改调用方法&#xff1a;python…

查看socket缓冲区数据_什么是socket缓冲区?

Socket 就是发送和接收网络数据&#xff0c;Socket 有发送缓冲也有接收缓冲&#xff0c;这些缓冲区有什么作用&#xff1f;1、什么是Socket缓冲区&#xff1f;熟悉 Socket 的读者都知道&#xff0c;Socket 的发送和接收&#xff0c;就是调用 send 和 recv 函数。实际操作中&…

python登录并关注公众号_python微信公众号之关注公众号自动回复

我们知道一旦使用开发者模式&#xff0c;我们就无法使用公众号平台中的自动回复功能&#xff0c;也就是关注自动回复功能只有自己写才可以。如图所示&#xff0c;我们无法直接使用此功能。那么接着上一个博客&#xff0c;我们完成了关键词自动回复功能&#xff0c;博文地址实现…

哈工大大数据实验_科研常用 | 实验大数据分析方法

对于每个科研工作者而言&#xff0c;对实验数据进行处理是在开始论文写作之前十分常见的工作之一。但是&#xff0c;常见的数据分析方法有哪些呢&#xff1f;常用的数据分析方法有&#xff1a;聚类分析、因子分析、相关分析、对应分析、回归分析、方差分析。1、聚类分析(Cluste…

搭建github服务器_搭建一个属于自己的公网博客

相信每一位程序员都喜欢拥有一个属于自己的博客。当然&#xff0c;在我认为&#xff0c;内容以及模块都要自己进行可扩展定义才是真正属于自己的。那么想要一个博客就必须要有一个服务器和一个域名&#xff0c;这样的话才能让自己的博文内容发扬光大&#xff0c;但是服务器的性…

mysql超过1W条查询不显示_mysql 被写入1W数据后无法select*from table,但是加入limit参数后可以查询...

数据库表结构 innodbSELECT 查询错误提示ERROR 2013 (HY000): Lost connection to MySQL server during query我觉得可能是 SELECT 执行时间过长,所以报错.mysql 日志150414 03:11:26 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql150414 3:11:27 In…

python分支结构基础实训_零基础Python教程-分支结构

文章目录下面就让我们先一起学习单分支结构&#xff1a;单分支结构双分支结构多分支结构在日常生活中&#xff0c;我们会遇到很多选择类的问题。比如&#xff1a;午饭吃螺蛳粉还是生煎包?下班回家坐地铁还是公交车?这也就是我们编程语言中常说的“分支结构”&#xff0c;今天…

mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

1.外键: 用来建立两张表之间的关系- 一对多- 多对多- 一对一研究表与表之间的关系:1.定义一张 员工部门表id, name, gender, dep_name, dep_desc- 将所有数据存放在一张表中的弊端:1.结构不清晰 ---> 不致命2.浪费空间 ---> 不致命3.可扩展性极差 ---> 不可忽视的弊端…

python3 urllib安装_对python3 urllib包与http包的使用详解

urllib包和http包都是面向HTTP协议的。其中urllib主要用于处理 URL&#xff0c;使用urllib操作URL可以像使用和打开本地文件一样地操作。而 http包则实现了对 HTTP协议的封装&#xff0c;是urllib.request模块的底层。1.urllib包简介2. http 包简介1.urllib包简介urllib包主要模…

OpenCV学习笔记 - 使用密集光流检测运动的简单方法

一、简述 使用光流进行运动检测的方法与帧间差分方法类似。主要区别在于第一步,我们将从光流而不是帧差分中获取初始运动信息(一些神经网络模型也是基于光流和原始图像进行运动识别训练的)。 该算法概述如下: 1、计算密集光流 2、获得运动掩模的阈值光流 3、在运动蒙版中查…

mysql 5.6.27安装图解_Linux下MySQL 5.6.27 安装教程

本文实例为大家分享了Linux下MySQL 5.6.27 安装教程&#xff0c;供大家参考&#xff0c;具体内容如下1、下载地址2、将压缩包上传到服务器3、解压tar -zxf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz4、移动压缩包至mysql文件夹下mp mysql-5.6.27-linux-glibc2.5-x86_64 /usr…

linux部署tomcat项目404_Tomcat部署项目的几种常见方式

点击蓝字“程序员考拉”欢迎关注&#xff01;1 /直接将web项目文件件拷贝到webapps目录中这是最常用的方式&#xff0c;Tomcat的Webapps目录是Tomcat默认的应用目录&#xff0c;当服务器启动时&#xff0c;会加载所有这个目录下的应用。如果你想要修改这个默认目录&#xff0c;…

mysql bug_MySQL 记一次 Bug发现过程

水平有限有误请谅解这个问题是一位朋友DBA-老庄的,他们使用的是PXC环境如下:MySQL:5.7.18-15wsrep:29.20os:Red Hat Enterprise Linux Server release 6.5实际上我对PXC并不是很熟&#xff0c;通过分析pstack还是找到了问题。并且提交Bug&#xff0c;percona确认了。虽然我不是…

用python将word文档导入数据库_python读取word文档,插入mysql数据库的示例代码

表格内容如下&#xff1a;1、实现批量导入word文档&#xff0c;取文档标题中的数字作为编号2、除取上面打钩的内容需要匹配出来入库入库&#xff0c;其他内容全部直接入库mysql# wuyanfeng# -*- coding:utf-8 -*-# 读取docx中的文本代码示例import docximport pymysqlimport re…

mysql编程语法_MYSQL语法(一)

数据表准备&#xff1a;CREATE TABLE student3 ( id int, name varchar(20), age int, sex varchar(5), address varchar(100), math int, english int);INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES(1,马云,55,男,杭州,66,78),(2,马化腾,45,女,深圳,98…

python绘制混淆矩阵_如何实现python绘制混淆矩阵?

大家从python基础到如今的入门&#xff0c;想必都对python有一定基础&#xff0c;今天小编给大家带来一个关于python的高阶内容——绘制混淆矩阵&#xff0c;一起来看下吧~介绍&#xff1a;混淆矩阵通过表示正确/不正确标签的计数来表示模型在表格格式中的准确性。计算/绘制混淆…

用python做舆情分析系统_科学网-如何用Python做舆情时间序列可视化?-王树义的博文...

如何批量处理评论信息情感分析&#xff0c;并且在时间轴上可视化呈现&#xff1f;舆情分析并不难&#xff0c;让我们用Python来实现它吧。痛点你是一家连锁火锅店的区域经理&#xff0c;很注重顾客对餐厅的评价。从前&#xff0c;你苦恼的是顾客不爱写评价。最近因为餐厅火了&a…