Java模拟银行存取款系统

2021/6/22 9:26:54

本文主要是介绍Java模拟银行存取款系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

设计性实验报告

课程名称

面向对象程序设计(Java)

  

项目名称

模拟银行存取款业务

实验类型

设计性

 

二、实验内容

模拟网上银行业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型。操作类型包括四种(存款:1  取款:2  余额:3  修改个人密码:4  退出:0),输入数字1、2时,将进行存取款操作,此时需要输入存取的金额,并进行正确的金额加减计算;输入数字3时,显示当前账户的余额;输入数字4时,可修改当前账户的密码;输入数字0时将退出整个系统。可利用HashMap集合存储模拟的账户信息,其中key值用于存储银行卡号,value值用于存储整个账户对象。

三、总体设计(设计原理、设计方案及流程等) 

我的代码使用了对象序列化反序列化的方式 将对象属性保存到磁盘中去,从而实现记录底层数据,并且将序列化和反序列化写成两个独立的方法,我们只需在主类中调用方法即可;在对象类中实现了Serializable类。

 

在com.ggc包下创建了BankObject对象类和BankDemo主类

在BankObject类中定义了一些private属性和对应的public型setter和getter方法用于对成员变量赋值和引用

在主类中定义的mothod1方法用于对错误卡号报错并重新输入

Mothod2方法用于对错误密码报错并重新输入

卡号为键,对象为值。用keySet方法得到键的set集合,用增强for循环,并在循环中对输入的卡号进行判断,如果错误就一直调用mothod1方法,从而实现卡号报错并重新输入;

密码判断与卡号判断大致相同mothod2方法

1.存款 2.取款 3.余额查询 4.修改密码 0.退出

该业务使用switch开关语句,在语句中使用while语句检验输入的金额是否合法,并实现重新输入。

特点:在switch语句外面使用while语句来实现0.退出功能

使用方法循环调用的形式对错误内容报错并重新输入

逻辑性较强环环相扣

 

 

 

 

package com.ggc;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

public class BankDemo {
	private static int ID;
	public static void main(String[] args) {
		BankDemo bd=new BankDemo();
		//bd.objectInputStream();
		HashMap<Integer,BankObject> map=new HashMap<Integer,BankObject>();
		BankObject B1=(BankObject)bd.objectInputStream();
		BankObject B2=(BankObject)bd.objectInputStream1();
		//BankObject B1=new BankObject("刘德华", "男",123456,1000);
		//BankObject B2=new BankObject("赵瑞娜","女",654321,2000);
		map.put(666666, B1);
		map.put(888888, B2);
		Scanner scanner=new Scanner(System.in);
		
		int n=0;
		int k=1,deposit;//开关条件,存款金额
		int withdrawals;//取款金额
		int password;
		int Id,Code;
		boolean bl ;//返回值
		Set<Integer> keySet=map.keySet();
		//for(Integer key :keySet) {
			//BankObject value=map.get(keySet);
		System.out.println("----------欢迎使用G式银行服务系统-----------");
			System.out.println("请输入银行卡号:");
			Id=scanner.nextInt();
			
			//BankDemo bd=new BankDemo();
			
			//bd.mothod1();
			for(Integer key : keySet) {
				//if(n>=1) System.out.println("银行卡号输入错误,请重新输入!");
				if((int)key!=Id) {
			    	 n++;
			    	 if(n==2) {
			    		 System.out.println("银行卡号输入错误,请重新输入!");
			    		 do {
			    			  Id=scanner.nextInt();
			    		 bl=bd.mothod1(keySet, Id);
			    		 //bl=bd.mothod1(keySet);
			    		 }while(bl);
			    		 //System.out.println("银行卡号正确!");
			    		 System.out.println("请输入密码!");
			    	 }
			    	
			     }else {
			    	System.out.println("请输入密码:");
			    	ID=Id;
			    	/*Code=scanner.nextInt();
			    	if(map.get(key).getCode()==Code) {
			    		System.out.println("登陆成功!欢迎"+map.get(key).getName());
			    	}else {
			    		System.out.println("密码错误,请重新输入!");
			    	}*/
			     }
			}
			//BankObject value=map.get(Id);
			Id=ID;
			 Code=scanner.nextInt();
			 do {
				 if(Code!=map.get(Id).getCode()) {
					 System.out.println("密码输入错误,请重新输入!");
					 bl=bd.mothod2(map.get(Id));
				 }else {
					 bl=false;
				 }
				 }while(bl);
			 System.out.println("登陆成功!欢迎"+map.get(Id).getName()+map.get(Id).getSex()+"士"+"!");
			 System.out.println("请选择您需要办理的业务:"
						+ "1.存款 2.取款 3.余额查询 4.修改密码 0.退出");
			 while(k!=0) {
				k=scanner.nextInt();
				switch(k) {
				case 1:{
					System.out.println("请输入存款金额:");
					deposit=scanner.nextInt();
					while(deposit<0) {
						System.out.println("输入金额非法!请重新输入");
						deposit=scanner.nextInt();
					}
					map.get(Id).setBalance(map.get(Id).getBalance()+deposit);
					System.out.println("存款成功!您当前的余额为:"+map.get(Id).getBalance());
					map.get(Id).setBalance(map.get(Id).getBalance());
					System.out.println("请选择您需要办理的业务:"
							+ "1.存款 2.取款 3.余额查询 4.修改密码 0.退出");
					break;
				}
				case 2:{
					System.out.println("请输入取款金额:");
					withdrawals=scanner.nextInt();
					while(withdrawals<0||withdrawals>map.get(Id).getBalance()) {
						System.out.println("输入金额非法!请重新输入");
						withdrawals=scanner.nextInt();
					}
					map.get(Id).setBalance(map.get(Id).getBalance()-withdrawals);
					System.out.println("取款成功!您当前的余额为:"+map.get(Id).getBalance());
					map.get(Id).setBalance(map.get(Id).getBalance());
					System.out.println("请选择您需要办理的业务:"
							+ "1.存款 2.取款 3.余额查询 4.修改密码 0.退出");
					break;
				}
				case 3:{
					System.out.println("您当前的余额为:"+map.get(Id).getBalance());
					System.out.println("请选择您需要办理的业务:"
							+ "1.存款 2.取款 3.余额查询 4.修改密码 0.退出");
					break;
				}
				case 4:{
					System.out.println("请输入旧密码:");
					password=scanner.nextInt();
					while(password!=map.get(Id).getCode()) {
						System.out.println("旧密码输入错误!请重新输入");
						password=scanner.nextInt();
					}
					System.out.println("请输入新密码:");
					password=scanner.nextInt();
					map.get(Id).setCode(password);
					System.out.println("密码修改成功!");
					System.out.println("请选择您需要办理的业务:"
							+ "1.存款 2.取款 3.余额查询 4.修改密码 0.退出");
					break;
				}
			
				}
			 }
			 bd.objectOutputStream(B1);
			 bd.objectOutputStream1(B2);
			 System.out.println("银行系统已退出!欢迎您再次使用!");
		}
	public void objectOutputStream1(BankObject B) {
		ObjectOutputStream oos=null;
		try {
			oos=new ObjectOutputStream(new FileOutputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos1.txt"));
		    
			oos.writeObject(B);
		
		
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				oos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public void objectOutputStream(BankObject B) {
		ObjectOutputStream oos=null;
		try {
			oos=new ObjectOutputStream(new FileOutputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos.txt"));
		    
			oos.writeObject(B);
		
		
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				oos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public Object objectInputStream() {
		BankObject b=null;
		ObjectInputStream ois=null;
		try {
			ois=new ObjectInputStream(new FileInputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos.txt"));
		
			Object obj=ois.readObject();
		     b=(BankObject) obj;
		    System.out.println(b.getName()+","+b.getSex()+","+b.getBalance());
		    
		    ois.close();
		
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			  try {
				ois.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return b;
	}

	public Object objectInputStream1() {
		BankObject b=null;
		ObjectInputStream ois=null;
		try {
			ois=new ObjectInputStream(new FileInputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos1.txt"));
		
			Object obj=ois.readObject();
		     b=(BankObject) obj;
		    System.out.println(b.getName()+","+b.getSex()+","+b.getBalance());
		    
		    ois.close();
		
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			  try {
				ois.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return b;
	}
	

	
	 public boolean mothod1(Set keySet,int Id) {
		 //Scanner scanner=new Scanner(System.in);
		 //int c=scanner.nextInt();
		 int m=0;
		 for(Object key : keySet) {
	 				
				     if((int)key!=Id) {
				    	 m++;
				    	 
				     }
				    	 
		 }
		    if(m>=2) {
					 System.out.println("银行卡号输入错误,请重新输入!");
				    	 }
				     
	  	   
		 if( m>=2) {
			 return true;
		 }else {
			 ID=Id;
			 return false;
		 }
	 }
		 
		 public boolean mothod2(BankObject value) {
			 Scanner scanner=new Scanner(System.in);
			 int c=scanner.nextInt();
			 int m=0;
			// for( m=0;m<=2;) {
		 				
					     if((int)value.getCode()!=c) {
					    	 m++;
					    	 
					    }
					    	 
			 //}
			    if(m>=2) {
						 System.out.println("密码输入错误,请重新输入!");
					    	 }
					     
		  	   
			 if( m>=1) {
				 return true;
			 }else {
				 return false;
			 }
	 }	    	 
}

 

 

五、结果分析与总结

 

----------欢迎使用G式银行服务系统-----------

请输入银行卡号:

111111

银行卡号输入错误,请重新输入!

1111111

银行卡号输入错误,请重新输入!

888888

请输入密码!

444444

密码输入错误,请重新输入!

555555

密码输入错误,请重新输入!

654321

登陆成功!欢迎xxx女士!

请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出

1

请输入存款金额:

-10

输入金额非法!请重新输入

100

存款成功!您当前的余额为:2100

请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出

2

请输入取款金额:

200000

输入金额非法!请重新输入

500

取款成功!您当前的余额为:1600

请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出

1

请输入存款金额:

200

存款成功!您当前的余额为:1800

请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出

3

您当前的余额为:1800

请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出

4

请输入旧密码:

654444

旧密码输入错误!请重新输入

654321

请输入新密码:

123456

密码修改成功!

请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出

0

银行系统已退出!欢迎您再次使用!

 

总结:功能较为完善,有较好的封装,对输入数据进行合法判断

 

 

 

 

 

 

 

 

 

 



这篇关于Java模拟银行存取款系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程