精华内容
下载资源
问答
  • ATM模拟程序java

    2018-11-28 21:24:55
    此为ATM模拟程序,单纯模拟,没有用cs架构,新手勿喷。
  • atm模拟程序 java源码,适合新手学习,本人的第一个小项目
  • java ATM模拟程序

    2013-06-29 15:44:07
    Java ATM自助模拟程序,实现了取款 存款 查询余额 修改密码等方法 里面不涉及 数据库的知识
  • ATM模拟程序(JAVA)

    2011-03-26 19:42:43
    模拟ATM各种功能(用数据库存储数据)java中数据库联接经典代码
  • ATM柜员机模拟程序前言一、问题描述二、问题分析二、代码设计1.用户信息类2.ATMMahine类设计,即主要类设计 前言 一、问题描述 模拟ATM柜员机的相关功能,实现其取款、余额查询、密码修改等相关功能,要求采用图形...

    前言

    一、问题描述

    模拟ATM柜员机的相关功能,实现存取款、余额查询、密码修改等相关功能,要求采用图形用户界面的

    二、问题分析

    将程序按功能分步骤解决,在执行各种操作之前先要有用户登录这一功能,所以第一步骤就是做用户登录;因为功能众多,要执行某一功能得由用户来选择,所以第二步骤应该是功能旋转;接下来就是实现各个功能的步骤:取存款功能、余额查询功能、密码修改功能。总体上还是数据与界面分开设计,由界面来查询和修改数据。

    界面实现详细步骤:
    用户登录功能:登录功能比较简单,分为界面设计和数据处理,登录界面主要有两个输入框输入账号和密码,一个登录按钮执行用户登录的检查账号密码是否正确,然后进入程序,当然还得有个退出功能,用于退出后执行其他用户的操作。
    登录界面

    功能选择功能:主要是各个功能的选择按钮,点击任一按钮就进入该功能界面还有一个退出功能按钮,用于退出该功能,选择其他功能。
    功能选择

    存取功能:界面设计部分主要有一个文本框输入金额,两个按钮一个进行存功能,一个进行取功能,还有一个退出功能按钮。数据处理方面要根据用户的选择对相应的用户信息进行修改,当然还要错误操作的查错功能,比如当钱少于100时,不能进行取两百元的操作。
    取钱
    存钱

    余额查询功能:一个文本框显示当前用户的余额,还有一个退出按钮退出该功能。
    余额查询

    密码修改功能:一个输入款进行输入新密码,一个确定按钮确认密码修改,一个退出按钮退出功能。
    修改密码

    数据设计:
    数据方面得有一个包含了所有用户的账号和密码以及各类信息如余额等信息的库,账号和密码用来来标识每一位用户,在登录时检查匹配输入账号和密码是否正确,以及密码修改功能需要修改该密码信息;余额用来在余额查询功能时显现余额,在存取金额时,修改余额。

    三、代码设计

    1.用户信息类

    定义用户类,一个用户必须要有的是账号和密码信息,这是标识每一个用户的重要属性,当然,如果你还想设计的更详细一点的话,可以加上姓名,年龄,性别等信息,这里主要是讲解实现ATM的各类功能,所以只定义了重要的几个属性。一个用户需要有的功能有修改密码和修改自己金额两个主要功能。代码中的其他方法主要用于辅助这两个主要功能。
    这其中还有一个静态方法,我把检查输入的账号和密码是否匹配正确写在用户类了,不过直接写在后面的ATMMahicne类里也行,按自己对问题的理解决定写在哪儿。

    import java.util.ArrayList;
    
    public class UserConfig {
    	private String accountString;
    	private String passWordString;
    	private Double money;
    	//构造函数,构造用户类
    	public UserConfig(String accountString,String passwordString,Double money) {
    		this.accountString=accountString;
    		this.passWordString=passwordString;
    		this.money=money;
    	}
    	public String getAccountString() {
    		return accountString;
    	}
    	public String getPassString() {
    		return passWordString;
    	}
    	public Double getMoney() {
    		return money;
    	}
    	//存取功能
    	public boolean modifyMoney(int type,Double moneyNumber) {
    		switch(type) {
    		case 1:
    			//存钱
    			money+=moneyNumber;
    			return true;
    		case 2:
    			//取钱
    			if(money>=moneyNumber) {
    				money-=moneyNumber;
    				return true;
    			}else {
    				//没那么多钱
    				return false;
    			}
    		}
    		return false;
    	}
    	//修改密码功能
    	public boolean AlterPassword(String newPassword) {
    		passWordString=newPassword;
    		return true;
    	}
    	//检查账号密码是否匹配正确的函数。
    	public static int checkAccount(ArrayList<UserConfig>Users,String accountString,String passWorString) {
    		for(int i=0;i<Users.size();i++) {
    			if(accountString.equals(Users.get(i).getAccountString())) {
    				if(passWorString.equals(Users.get(i).getPassString())) {
    					return i;
    				}
    				//放回-2说明密码错误
    				return -2;
    				
    			}
    		}
    		//未找到该账号
    		return -1;
    	}
    }
    

    2.ATMMahine类设计,即主要类设计

    分为两部分,一部分是界面设计,一部分是数据处理
    界面设计主要包括登录界面,功能选择界面,存钱界面,取钱界面,余额查询界面,密码修改界面。各功能间的光系如下:
    ATM功能界面关系流程图

    以下为各界面的实现代码,函数中有些没有声明就使用的组件,这是因为这些组件里的信息其他地方也需要使用,例如在登录界面时,点击登录按钮执行登录功能时需要获取得到账户输入框和密码输入框的内容进行账号密码匹配,所以我将这类组件都写在类里,供其他函数获取该组件的信息

    • 登录界面
    public void ShowLoginFrame() {
    		if(LoginPanel==null) {
    			JLabel acounJLabel=new JLabel("账号:");
    			acounJLabel.setBounds(40,10,50,25);
    			JLabel passwordLabel=new JLabel("密码:");
    			passwordLabel.setBounds(40,50,50,25);
    			accounField.setBounds(80,10,200,25);
    			passwordField.setBounds(80,50,200,25);
    			JButton loginButton=new JButton("登录");
    			loginButton.setBounds(120,100,100,25);
    			loginButton.addActionListener(new ButtonHandler(this, "Login"));
    			LoginPanel=new JPanel();
    			LoginPanel.setBounds(0, 0, 400, 200);
    			LoginPanel.setLayout(null);
    			LoginPanel.add(acounJLabel);
    			LoginPanel.add(passwordLabel);
    			LoginPanel.add(accounField);
    			LoginPanel.add(passwordField);
    			LoginPanel.add(loginButton);
    			ATMFrame.add(LoginPanel,BorderLayout.CENTER);
    		}
    		if(nowPanel!=null) {
    			nowPanel.setVisible(false);
    		}
    		accounField.setText("");
    		passwordField.setText("");
    		nowPanel=LoginPanel;
    		nowPanel.setVisible(true);
    	}
    
    • 功能选择界面
    	public void ShowFunctionChoosenFrame() {
    		if(functionChoosenPanel==null) {
    			JButton quit=new JButton("退出");
    			quit.setBounds(160, 130, 80, 30);
    			quit.addActionListener(new ButtonHandler(this,"showLogin"));
    			JButton moneyDeposit=new JButton("存钱");
    			moneyDeposit.addActionListener(new ButtonHandler(this, "showDeposit"));
    			moneyDeposit.setBounds(1, 50, 80, 30);
    			JButton moneywithdraw=new JButton("取钱");
    			moneywithdraw.addActionListener(new ButtonHandler(this, "showWithdraw"));
    			moneywithdraw.setBounds(100, 50, 80, 30);
    			JButton moneyQuery=new JButton("查询");
    			moneyQuery.addActionListener(new ButtonHandler(this, "showMoneySearch"));
    			moneyQuery.setBounds(190, 50, 80, 30);
    			JButton passwordAlter=new JButton("修改密码");
    			passwordAlter.addActionListener(new ButtonHandler(this, "showPasswordChange"));
    			passwordAlter.setBounds(290, 50, 100, 30);
    			functionChoosenPanel=new JPanel();
    			functionChoosenPanel.setBounds(0,0,400,200);
    			functionChoosenPanel.add(quit);
    			functionChoosenPanel.add(moneywithdraw);
    			functionChoosenPanel.add(moneyDeposit);
    			functionChoosenPanel.add(moneyQuery);
    			functionChoosenPanel.add(passwordAlter);
    			functionChoosenPanel.setLayout(null);
    			 
    			ATMFrame.add(functionChoosenPanel,BorderLayout.CENTER);
    		}
    		if(nowPanel!=null) {
    			//ATMFrame.remove(nowPanel);
    			nowPanel.setVisible(false);
    		}
    		nowPanel=functionChoosenPanel;
    		nowPanel.setVisible(true);
    		
    		System.out.println("进入功能选择界面");
    	}
    
    • 余额查询界面
    	public void ShowMoneySearchFrame() {
    		if(searchMoneyPanel==null) {
    			searchMoneyPanel=new JPanel();
    			searchMoneyPanel.setLayout(null);
    			searchMoneyPanel.setBounds(0,0,400,200);
    			JButton quitButton=new JButton("退出");
    			quitButton.setBounds(160, 130, 80, 30);
    			quitButton.addActionListener(new ButtonHandler(this, "showFunctionChoosen"));
    			nowUserMoneyLabel.setBounds(160, 50, 80, 30);
    			searchMoneyPanel.add(quitButton);
    			searchMoneyPanel.add(nowUserMoneyLabel);
    			ATMFrame.add(searchMoneyPanel);
    		}
    		nowUserMoneyLabel.setText("余额:"+nowUser.getMoney());
    		if(nowPanel!=null) {
    			nowPanel.setVisible(false);
    		}
    		nowPanel=searchMoneyPanel;
    		nowPanel.setVisible(true);
    	}
    
    • 存钱界面,取钱界面与存钱界面相似,就不赘述了
    	public void ShowDepositFrame() {
    		if(depositePanel==null) {
    			depositePanel=new JPanel();
    			depositePanel.setBounds(0,0,400,200);
    			depositePanel.setLayout(null);
    			JLabel moneyJLabel=new JLabel("金额:");
    			moneyJLabel.setBounds(100,50,60,30);
    			JButton deposite=new JButton("存钱");
    			deposite.setBounds(100,100,80,30);
    			deposite.addActionListener(new ButtonHandler(this, "deposite"));
    			JButton quit=new JButton("退出");
    			quit.setBounds(200,100,80,30);
    			quit.addActionListener(new ButtonHandler(this, "showFunctionChoosen"));
    			depositePanel.add(quit);
    			depositePanel.add(deposite);
    			depositePanel.add(moneyJLabel);
    			ATMFrame.add(depositePanel);
    		}
    		nowUserMoneyText.setBounds(150,50,100,30);
    		nowUserMoneyText.setText("");
    		depositePanel.add(nowUserMoneyText);
    		if(nowPanel!=null) {
    			nowPanel.setVisible(false);
    		}
    		nowPanel=depositePanel;
    		nowPanel.setVisible(true);
    	}
    
    • 密码修改界面
    	public void ShowPasswordAlterFrame() {
    		if(alterPasswordPanel==null) {
    			alterPasswordPanel=new JPanel();
    			alterPasswordPanel.setLayout(null);
    			alterPasswordPanel.setBounds(0,0,400,200);
    			newPasswordField.setBounds(130,50,200,30);
    			JLabel newPassLabel=new JLabel("新密码:");
    			newPassLabel.setBounds(80,50,80,30);
    			JButton quitButton=new JButton("退出");
    			quitButton.setBounds(200,100,80,30);
    			quitButton.addActionListener(new ButtonHandler(this,"showFunctionChoosen"));
    			JButton determineButton=new JButton("确定");
    			determineButton.setBounds(100,100,80,30);
    			determineButton.addActionListener(new ButtonHandler(this,"determineAlter"));
    			alterPasswordPanel.add(newPasswordField);
    			alterPasswordPanel.add(newPassLabel);
    			alterPasswordPanel.add(quitButton);
    			alterPasswordPanel.add(determineButton);
    			ATMFrame.add(alterPasswordPanel);
    		}
    		if(nowPanel!=null) {
    			nowPanel.setVisible(false);
    		}
    		nowPanel=alterPasswordPanel;
    		nowPanel.setVisible(true);
    	}
    

    界面设计好了,我们还有数据处理设计

    • 按钮监听
    	class ButtonHandler implements ActionListener{
    		private ATMMahcin ATM;
    		private String type;
    		public ButtonHandler(ATMMahcin ATM,String type) {
    			this.ATM=ATM;
    			this.type=type;
    		}
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			switch(type) {
    			case "showFunctionChoosen":
    				ATM.ShowFunctionChoosenFrame();
    				break;
    			case "showLogin":
    				ATM.ShowLoginFrame();
    				break;
    			case "Login":
    				ATM.Login();
    				break;
    			case "showDeposit":
    				ATM.ShowDepositFrame();
    				break;
    			case "showWithdraw":
    				ATM.ShowWithdrawFrame();
    				break;
    			case "showMoneySearch":
    				ATM.ShowMoneySearchFrame();
    				break;
    			case "showPasswordChange":
    				ATM.ShowPasswordAlterFrame();
    				break;
    			case "determineAlter":
    				ATM.PasswordAlter();
    				break;
    			case "deposite":
    				ATM.DepositOrWithdraw(1);
    				break;
    			case "withdraw":
    				ATM.DepositOrWithdraw(2);
    				break;				
    			}			
    		}
    	}
    
    • 存取钱功能
    	public void DepositOrWithdraw(int type) {
    		if(nowUser.modifyMoney(type, Double.parseDouble(nowUserMoneyText.getText()))) {
    			System.out.println("操作成功");
    		}else {
    			System.out.println("操作失败");
    		}
    	}
    
    • 修改密码功能
    	public void PasswordAlter() {
    		String newPassword=newPasswordField.getText();
    		if(nowUser.AlterPassword(newPassword)) {
    			System.out.println("修改成功");
    		}else {
    			System.out.println("修改失败");
    		}
    	}
    

    四、完整源代码地址

    java ATM模拟地址

    展开全文
  • ATM柜员机模拟程 序 JAVA课程设计 1 2020 年 4 月 19 日 文档仅供参考 软 件 学 院 课程设计报告书 课程名称 面向对象程序设计 设计题目 ATM 柜员机模拟程序 专业班级 学 号 姓 名 指导教师 2 2020 年 4 月 19 日 ...
  • 程序设计专题训练中多线程银行ATM模拟程序,主要实现了自动取款机的一些常规草最,包括取款,修改密码,存款等
  • /*创建主程序*/ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swi
  • Java ATM模拟程序

    2014-12-11 21:54:09
    Java ATM模拟程序,用NetBeans IDE8.0编写的,程序从简单到难,一共五个例子保证能让初学者明白。
  • 模拟ATMJAVA程序

    2012-02-21 21:13:32
    模拟ATM程序,用JAVA写的。里面有三个类
  • JAVA程序:当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行(规则可以按照实际系统做需求):(1)查询余额:初始余额为10000元。(2)ATM取款:每次取款...
  • ATM模拟java实现.zip

    2021-04-20 18:07:23
    ATM柜员机模拟程序 java程序,相关解说可以看我的ATM柜员机模拟程序 java程序博文,地址为:https://blog.csdn.net/qq_45750263/article/details/115910949?spm=1001.2014.3001.5501
  • Java写的ATM模拟程序

    2016-11-21 10:04:00
    import java.util.*;import java.applet.*;class Atm_ZH{ float yue; String name; String date; long mima; int caozuo; public Atm_ZH(){} public Atm_ZH(float y,String n,String d,long m){ yue=y; name=...

    import java.util.*;
    import java.applet.*;
    class Atm_ZH{
    float yue;
    String name;
    String date;
    long mima;
    int caozuo;

    public Atm_ZH(){}
    public Atm_ZH(float y,String n,String d,long m){
    yue=y; name=n; date=d; mima=m;
    }

    //登陆 n=1
    int denglu(){
    int n=1;
    System.out.println("*****存取款一体机*****\n请插入您的卡:(0.插卡;1.退出)");
    Scanner in=new Scanner(System.in);
    n=in.nextInt();
    if(n==0){
    System.out.print("请输入密码:");

    long m=in.nextLong();
    if(mima==m)
    return n=1;
    else
    return n=0;
    }
    else{
    System.exit(1);
    return n=0;
    }
    }
    //密码 t/f

    //显示界面
    void showjiemian(){
    //Runtime r=Runtime.getRuntime();
    //r.exec("CLS");

    System.out.println("1.取款\t\t\t2.转账\n3.查询余额\t\t\t4.存款\n5.修改密码\t\t\t6.退卡");
    System.out.println("请选择:");
    }

    //存款
    void cunkuan(){
    System.out.print("请输入存款金额:");
    Scanner in=new Scanner(System.in);
    long cj=in.nextLong();
    yue+=cj;
    showjiemian();
    }
    //取款

    //取款
    void qukuan(){
    Scanner in=new Scanner(System.in);
    int n;
    System.out.println("1.100\t\t\t2.500\n3.1000\t\t\t4.1500\n5.2000\t\t\t"
    +"6.5000\n7.其他金额");
    n=in.nextInt();

    if(n==1){
    if(yue<100){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-100;
    showjiemian();
    }
    }
    else if(n==2){
    if(yue<500){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-500;
    showjiemian();
    }
    }
    else if(n==3){
    if(yue<1000){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-1000;
    showjiemian();
    }
    }
    else if(n==4){
    if(yue<1500){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-1500;
    showjiemian();
    }
    }
    else if(n==5){
    if(yue<2000){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-2000;
    showjiemian();
    }
    }
    else if(n==6){
    if(yue<5000){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-5000;
    showjiemian();
    }
    }
    else if(n==7){
    int jine;
    System.out.println("请输入金额");
    jine=in.nextInt();

    if(yue<jine){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    System.out.println("取款成功,请尽快拿走您的款项");
    yue=yue-jine;
    showjiemian();
    }
    }
    else{
    System.out.println("输入错误");
    showjiemian();
    }
    }

    //转账
    //转账
    void zhuanzhang(){
    Scanner in=new Scanner(System.in);
    System.out.print("请输入行号:");
    String hanghao=in.nextLine();

    System.out.print("确认行号后,请输入转账金额:");
    float zj=in.nextFloat();
    if(yue<zj){
    System.out.println("余额不足");
    showjiemian();
    }
    else{
    yue=yue-zj;
    System.out.println("转账成功");
    showjiemian();
    }
    }

    //修改密码
    //修改密码
    void xiugaimima(){
    Scanner in=new Scanner(System.in);
    System.out.print("请输入修改后的密码:");
    long xm=in.nextLong();

    System.out.print("请确定修改后的密码:");
    long qm=in.nextLong();

    if(qm!=xm){
    System.out.println("操作失败,确认密码输入错误");
    showjiemian();
    }
    else{
    mima=xm;
    System.out.println("修改成功");
    showjiemian();
    }
    }

    //显示用户信息
    //查询余额
    void showyue(){
    System.out.println("当前可用余额为:"+yue);
    showjiemian();
    }
    }

    public class ATM {
    public static void main(String args[]){
    Atm_ZH peo=new Atm_ZH(100000,"易赞","2016.11.15",123456);
    int n=peo.denglu();
    peo.showjiemian();
    while(n==1){


    Scanner in=new Scanner(System.in);
    int caozuo=in.nextInt();
    if(caozuo==1)
    peo.qukuan();
    else if(caozuo==2)
    peo.zhuanzhang();
    else if(caozuo==3)
    peo.showyue();
    else if(caozuo==4)
    peo.cunkuan();
    else if(caozuo==5)
    peo.xiugaimima();
    else if(caozuo==6){
    System.out.print("***谢谢使用***\n请取走您的卡");
    System.exit(1);
    }
    else {
    System.out.println("输入错误");
    n=1;
    }
    }
    }
    }

    转载于:https://www.cnblogs.com/yizanboke/p/6084432.html

    展开全文
  • ATM JAVA编写模拟程序

    2010-10-14 20:29:34
    JAVA程序语言编写ATM模拟取款机功能
  • 课程设计(大作业报告 课程名称面向对象程序设计课程设计 设计题目:M柜员... 院系:信息技术学院 专 业:计算机科学与技术 学 号 任务起止日期20161-4-2016-1- 课程设计题目 设计一个ATM柜员机模拟程序实现系统登录余额查
  • ATM模拟程序

    千次阅读 2020-03-05 21:45:18
      我估计看了以下该模拟程序的要求可能会有一些人会怀疑是不是和我一个学校的,没错,咱们就是一个学校的,当初大一的时候看到这个实验整个人都懵了,完全不会玩,因此最后也是求助别人,但是其实也没看懂别人几百...

      我估计看了以下该模拟程序的要求可能会有一些人会怀疑是不是和我一个学校的,没错,咱们就是一个学校的,当初大一的时候看到这个实验整个人都懵了,完全不会玩,因此最后也是求助别人,但是其实也没看懂别人几百行的代码。前一段时间也是听导师说这个程序是教我们C++的一个经典的实验,自学了Java之后对类的使用和理解也才算真正是入门了。个人觉得这个实验值得一做,所以就去看了当时的实验要求并开始写这个程序。整个程序大概写了四五小时左右。

      代码主要使用类来进行实现,因为面向对象设计嘛。由于要实现一个账户转账给另一个账户转账,从银行的角度来设计需要用到数据库了,这里并不要求我们这么麻烦,所以在写了LoanAccount借款账户之后马上实例化了一个对象,因为会在DepositAccount存款账户中需要用到。基本信息储存在account.in文件中,操作之后其中的数据也会随之改变,当然你要是想保留数据可以把运行后的数据输出到另一个文本文档中。

      这个程序最关键的是先做需求分析,一个ATM需要具有哪些功能(当初自己这点就完全没想,所以啥也写不出来)。如果你是大佬觉得代码不行请跳过,如果你还属于小白无法写出这个程序,我希望本文能对您有所帮助,切勿题都不看直接copy,博主不希望你没有实质性的收获,因为代码较长,可能会上传有误,若发现代码运行不成功,请评论留言,同时欢迎讨论,下面是实验要求。

    ATM模拟程序能够完成ATM的主要功能,包括:

    1.显示欢迎词及提示信息;

    2.用户插卡,ATM验证用户账号及密码有效性,输入错误3次即被锁卡;

    3.用户的帐户有两类,一类是存款帐户,一类是借款帐户,存款帐户里的钱是用户自己的钱, 借款帐户无余额只有信用额度和已借银行的钱.。

    4.存款帐户的可以查询余额:初始余额为10000元;

    5.借款帐户的可以查询当前欠银行的钱的数量和信用额度;

    6.存款帐户和借款帐户都可以取款,每次取款额为100的整数倍,有单笔和单日金额限制,存款帐户的余额不能为负,借款帐户欠的钱不能超过信用额度;

    7.存款帐户的可以转账,可将本账户中的存款转入其它账户,转入账户账号需两次输入确认;

    8.借款帐户的可以接受还款(转账),接收其它存款账户将钱转入本账户;

    9.修改密码:密码为6位数字,新密码需要两次输入确认;

    10.退卡。

    设计实现命令行界面,界面应友好、方便操作。参考界面如图1所示。

    程序所涉及到的用户资料、银行帐户、存取款记录等信息保存在数据文件中。其中银行账户的格式如下:
    在这里插入图片描述

    Account.h头文件

    #ifndef Atmprogram
    #define Atmprogram
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Account
    {
    private:
        string userAccount;  //用户账号
        string userName;     //用户姓名
        string idCard;       //用户身份证
        string userPassword; //用户密码
    
    public:
        Account(string account, string name, string id, string pwd)
        {
            userAccount = account;
            userName = name;
            idCard = id;
            userPassword = pwd;
        }
    
        void setAccount(string account)
        {
            userAccount = account;
        }
    
        void setName(string name)
        {
            userName = name;
        }
    
        void setId(string id)
        {
            idCard = id;
        }
    
        void setPassword(string pwd)
        {
            userPassword = pwd;
        }
    
        string getAccount()
        {
            return userAccount;
        }
    
        string getName()
        {
            return userName;
        }
    
        string getId()
        {
            return idCard;
        }
    
        string getPassword()
        {
            return userPassword;
        }
    
        void getCard() //插卡交互界面
        {
            cout << "----------------------欢迎来到中国银行----------------------" << endl;
            cout << "请插入您的银行卡" << endl;
            cout << "请稍等,系统正在确认..." << endl;
            cout << "请输入你的密码(温馨提示:输入错误3次即被锁卡):";
            string password;
            for (int i = 0; i < 3; i++)
            {
                cin >> password;
                if (password == getPassword())
                {
                    cout << "恭喜您登陆成功" << endl;
                    operate();
                    break;
                }
                else if (i == 2)
                    cout << "您已经输错密码三次,系统自动锁卡,请于次日凭身份证领卡" << endl;
                else
                    cout << "您的密码有误,请重新输入(您还有" << 2 - i << "次重输机会):";
            }
            cout << "----------------------期待下次为您服务----------------------" << endl;
        }
    
        void changePassword() //修改密码
        {
            string pwd1, pwd2;
            cout << "请输入新的密码:";
            while (true)
            {
                cin >> pwd1;
                if (pwd1 == getPassword())
                    cout << "新密码不能与旧密码相同,请重新输入新的密码:";
                else
                    break;
            }
    
            cout << "请确认新的密码:";
            cin >> pwd2;
            if (pwd1 == pwd2)
            {
                setPassword(pwd1);
                cout << "密码修改成功\n"
                     << endl;
            }
            else
                cout << "前后密码不一致,修改失败\n"
                     << endl;
        }
    
        virtual void operate(){};
        virtual void withdraw(){};
    };
    
    class LoanAccount : public Account //借款账户
    {
    private:
        int credit; //信用额度
        int debt;   //当前欠款
    public:
        LoanAccount(string account, string name, string id, string pwd, int cre, int dt) : Account(account, name, id, pwd)
        {
            credit = cre;
            debt = dt;
        }
    
        int getCredit()
        {
            return credit;
        }
    
        int getDebt()
        {
            return debt;
        }
    
        void setCredit(int cre)
        {
            credit = cre;
        }
    
        void setDebt(int dt)
        {
            debt = dt;
        }
    
        void operate()
        {
            cout << "此账户为借款账户,以下为您的基本信息" << endl;
            cout << "-------------------------------------" << endl;
            cout << "账号   " << getAccount() << endl;
            cout << "姓名   " << getName() << endl;
            cout << "身份证  " << getId() << endl;
            cout << "密码   " << getPassword() << endl;
            cout << "信用额度  " << getCredit() << endl;
            cout << "当前欠款  " << getDebt() << endl;
            cout << "-------------------------------------" << endl;
    
            cout << "----------------------本机提供以下服务----------------------" << endl;
            int num;
            while (true)
            {
                cout << "1.还款  2.取款  3.查询欠款  4.查询信用额度  5.修改密码  6.退卡" << endl;
                cout << "请根据提示栏输入对应数字进入相应服务:";
                cin >> num;
                switch (num)
                {
                case 1:
                    repayment();
                    break;
                case 2:
                    withdraw();
                    break;
                case 3:
                    checkDebt();
                    break;
                case 4:
                    checkCredit();
                    break;
                case 5:
                    changePassword();
                    break;
                case 6:
                    cout << "您已经退卡" << endl;
                    return;
                default:
                    cout << "无效的输入,执行退卡" << endl;
                    return;
                }
            }
        }
    
        void repayment() //还款
        {
            if (getDebt() == 0)
                cout << "您欠款已经还清,无需还款" << endl;
            else
            {
                cout << "您目前待还" << getDebt() << "元" << endl;
                int money;
                cout << "请将您的存款整理好放入ATM机中并输入还款金额:";
                cin >> money;
                cout << "系统正在处理中..." << endl;
                setDebt(getDebt() - money);
                if (getDebt() == 0)
                    cout << "您本次还款" << money << "元,欠款已经还清,即将返回主界面...\n"
                         << endl;
                else
                    cout << "您本次还款" << money << "元,还有" << getDebt() << "元待还,即将返回主界面...\n"
                         << endl;
            }
        }
    
        void repayment(int money) //转账还款
        {
            setDebt(getDebt() - money);
        }
    
        void withdraw() //取款
        {
            int remain = getCredit() - getDebt();
            if (remain < 100)
                cout << "您的额度不足,无法进行取款" << endl;
            else
            {
                cout << "请输入取款金额:";
                int money;
                static int withdraw2 = 0;
                while (true)
                {
                    cin >> money;
                    if (money % 100 == 0)
                    {
                        if (remain - money < 0)
                        {
                            cout << "您的余额不足,当前还可取" << remain << "元,请重新输入取款金额:";
                        }
                        else if (money > 5000)
                        {
                            cout << "单笔取款最大限额为5000元,请重新输入取款金额:";
                        }
                        else
                        {
                            if (withdraw2 + money > 14000)
                            {
                                cout << "单日最大取款金额为14000元,您今日还可以取" << 14000 - withdraw2 << "元,请重新输入取款金额:";
                            }
                            else
                            {
                                cout << "请稍等,系统正在处理中..." << endl;
                                setDebt(getDebt() + money);
                                withdraw2 += money;
                                cout << "取款成功,即将返回主界面...\n"
                                     << endl;
                                return;
                            }
                        }
                    }
                    else
                        cout << "每次取款额为100的整数倍,请重新输入取款金额:";
                }
            }
        }
    
        void checkDebt() //查询欠款
        {
            if (getDebt() == 0)
                cout << "您的欠款已经还清" << endl;
            else
            {
                cout << "您当前欠款:" << getDebt() << "元" << endl;
                cout << "即将返回主界面...\n"
                     << endl;
            }
        }
    
        void checkCredit() //查询信用额度
        {
            cout << "您当前的信用额度为:" << getCredit() << "元" << endl;
            cout << "即将返回主界面...\n"
                 << endl;
        }
    };
    
    LoanAccount loan("", "", "", "", 0, 0); //实例化一个借款账户,因为需要在存款账户的转账中用到
    
    class DepositAccount : public Account //存款账户
    {
    private:
        int balance; //用户余额
    public:
        DepositAccount(string account, string name, string id, string pwd, int bal) : Account(account, name, id, pwd)
        {
            balance = bal;
        }
    
        int getBal()
        {
            return balance;
        }
    
        void setBal(int bal)
        {
            balance = bal;
        }
    
        void operate()
        {
            cout << "此账户为存款账户,以下为您的基本信息" << endl;
            cout << "-------------------------------------" << endl;
            cout << "账号   " << getAccount() << endl;
            cout << "姓名   " << getName() << endl;
            cout << "身份证  " << getId() << endl;
            cout << "密码   " << getPassword() << endl;
            cout << "余额  " << getBal() << endl;
            cout << "-------------------------------------" << endl;
    
            cout << "----------------------本机提供以下服务----------------------" << endl;
            int num;
            while (true)
            {
                cout << "1.存款   2.取款   3.转账   4.查询余额   5.修改密码   6.退卡" << endl;
                cout << "请根据提示栏输入对应数字进入相应服务:";
                cin >> num;
                switch (num)
                {
                case 1:
                    deposit();
                    break;
                case 2:
                    withdraw();
                    break;
                case 3:
                    transfer();
                    break;
                case 4:
                    checkBalances();
                    break;
                case 5:
                    changePassword();
                    break;
                case 6:
                    cout << "您已经退卡" << endl;
                    return;
                default:
                    cout << "无效的输入,执行退卡" << endl;
                    return;
                }
            }
        }
    
        void deposit() //存款
        {
            int money;
            cout << "请将您的存款整理好放入ATM机中并输入存款金额:" << endl;
            cin >> money;
            cout << "系统正在处理中..." << endl;
            setBal(getBal() + money);
            cout << "存款成功,即将返回主界面...\n"
                 << endl;
        }
    
        void withdraw() //取款
        {
            if (getBal() < 100)
                cout << "您的余额不足,无法进行取款" << endl;
            else
            {
                cout << "请输入取款金额:";
                int money;
                static int withdraw1 = 0;
                while (true)
                {
                    cin >> money;
                    if (money % 100 == 0)
                    {
                        if (getBal() - money < 0)
                        {
                            cout << "您的余额不足,请重新输入取款金额:";
                        }
                        else if (money > 1000)
                        {
                            cout << "单笔取款最大限额为1000元,请重新输入取款金额:";
                        }
                        else
                        {
                            if (withdraw1 + money > 5000)
                            {
                                cout << "单日最大取款金额为5000元,您今日还可以取" << 5000 - withdraw1 << "元,请重新输入取款金额:";
                            }
                            else
                            {
                                cout << "请稍等,系统正在处理中..." << endl;
                                setBal(getBal() - money);
                                withdraw1 += money;
                                cout << "取款成功,即将返回主界面...\n"
                                     << endl;
                                return;
                            }
                        }
                    }
                    else
                        cout << "每次取款额为100的整数倍,请重新输入取款金额:";
                }
            }
        }
    
        void transfer() //转账
        {
            while (true)
            {
                string account1, account2;
                cout << "请输入转入账户账号:";
                cin >> account1;
                cout << "请确认转入账户账号:";
                cin >> account2;
                if (account1 == account2)
                {
                    cout << "请耐心等待系统确认..." << endl;
                    cout << "确认完毕,请输入转账金额(取消转账请输入0):";
                    int money;
                    while (true)
                    {
                        cin >> money;
                        if (money == 0)
                        {
                            cout << "请稍等,系统正在取消转账..." << endl;
                            cout << "成功取消转账,即将返回主界面...\n"
                                 << endl;
                            return;
                        }
                        else if (money > getBal())
                        {
                            cout << "您的转账金额超出了您的余额!" << endl;
                            cout << "若您想继续转账,请重新输入金额(取消转账请输入0):";
                        }
                        else if (loan.getAccount() == account1)
                        {
                            cout << "系统正在处理中..." << endl;
                            if (money > loan.getDebt())
                            {
                                cout << "你所转账的借款账户只欠了" << loan.getDebt() << "元" << endl;
                                cout << "如果您同意只转账" << loan.getDebt() << "元请按1,按0重新输入金额:";
                                int flag;
                                cin >> flag;
                                if (flag == 1)
                                {
                                    money = loan.getDebt();
                                    loan.repayment(money);
                                    setBal(getBal() - money);
                                    cout << "转账成功,即将返回主界面...\n"
                                         << endl;
                                    return;
                                }
                                else
                                {
                                    cout << "请重新输入金额(取消转账请输入0):" << endl;
                                }
                            }
                            else
                            {
                                loan.repayment(money);
                                setBal(getBal() - money);
                                cout << "转账成功,即将返回主界面...\n"
                                     << endl;
                                return;
                            }
                        }
                        else
                        {
                            cout << "系统正在处理中..." << endl;
                            setBal(getBal() - money);
                            cout << "转账成功,即将返回主界面...\n"
                                 << endl;
                            return;
                        }
                    }
                    break;
                }
                else
                    cout << "两次账号输入不一致,请重新输入" << endl;
            }
        }
    
        void checkBalances() //查询余额
        {
            cout << "您的余额为:" << getBal() << "元" << endl;
            cout << "即将返回主界面...\n"
                 << endl;
        }
    };
    
    DepositAccount depo("", "", "", "", 0); //反正已经实例化了一个借款账户,顺便把存款账户也实例化了
    
    #endif
    

    ATM.cpp源文件

    #include "Account.h"
    #include <fstream>
    
    void initDepo(DepositAccount &de, string str[4], int bal) //初始化存款账户
    {
        de.setAccount(str[0]);
        de.setName(str[1]);
        de.setId(str[2]);
        de.setPassword(str[3]);
        de.setBal(bal);
    }
    
    void initLoan(LoanAccount &lo, string str[], int cre, int debt) //初始化借款账户
    {
        lo.setAccount(str[0]);
        lo.setName(str[1]);
        lo.setId(str[2]);
        lo.setPassword(str[3]);
        lo.setCredit(cre);
        lo.setDebt(debt);
    }
    
    void printDepo(DepositAccount de)
    {
        cout << de.getAccount() << " ";
        cout << de.getName() << " ";
        cout << de.getId() << " ";
        cout << de.getPassword() << " ";
        cout << de.getBal() << endl;
    }
    
    void printLoan(LoanAccount lo)
    {
        cout << lo.getAccount() << " ";
        cout << lo.getName() << " ";
        cout << lo.getId() << " ";
        cout << lo.getPassword() << " ";
        cout << lo.getCredit() << " ";
        cout << lo.getDebt() << endl;
    }
    
    int main()
    {
        ifstream ifs;
        ifs.open("account.in", ios::in);
        string str[4];
        int bal, cre, debt;
        for (int i = 0; i < 4; i++)
            ifs >> str[i];
        ifs >> bal;
        initDepo(depo, str, bal);
    
        for (int i = 0; i < 4; i++)
            ifs >> str[i];
        ifs >> cre >> debt;
        initLoan(loan, str, cre, debt);
    
        ifs.close();
    
        depo.getCard();
        cout << endl;
        loan.getCard();
    
        freopen("account.in", "w", stdout);
        printDepo(depo);
        printLoan(loan);
        return 0;
    }
    

    测试文件account.in

    1234567891234567891 Peter 510225199908141234 123456 8000
    2691843158321816816 Bob   500381199908141234 123456 20000 7000
    
    展开全文
  • java编写的ATM模拟程序,可运行
  • JavaATM机取款模拟程序

    2015-01-27 10:14:28
    ATM取款模拟项目用Java编写,是本学期《面向对象》课程学期过程中老师要求写的,现上传供广大Java初学者和刚接触面向对象的朋友学习和参考。本代码只实现取款过程,有兴趣的朋友可以自己再改进。本人也是Java的初学...
  • ATM java程序

    2012-03-27 17:40:31
    多线程银行ATM模拟程序 要求:使用图形用户界面。当输入给定的账户和密码时,系统能登录ATM柜员机系统, 并按照相应规则获得服务。 . ATM 系统分成服务器和客户机两个部分,服务器相当于银行的服务器,客户机相当于 ...
  • JAVA编写的模拟ATM取款,存款流程

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 189
精华内容 75
关键字:

atm模拟程序java

java 订阅