java小项目---------银行新用户现金业务办理(运用数据库)

银行新用户现金业务办理

1.任务描述

    编写一个银行新用户现金业务办理程序,使其模拟新用户到银行办理现金存取业务时的场景。

    要求此场景中,要模拟出银行对用户到来的欢迎动作、对用户离开的提醒动作,以及用户的开户、存款和取款动作,在完成开户、存款和取款操作后,要提示用户的账户余额。例如,一个新用户来到招商银行,首先银行要表示欢迎,然后银行工作人员会为用户办理开户手续;开户后,用户先进行存款操作,之后又进行了取款操作,取款操作时需要用户输入正确的密码和取款金额需小于当前账户金额,如果条件不满足,系统产生异常。当业务办理完,用户离开银行,银行提醒用户携带好随身财物。至此银行新用户现金业务办理结束。

2. 任务目标
(1)学会分析“银行新用户现金业务办理”程序任务实现的逻辑思路。
(2)能够独立完成“银行新用户现金业务办理”的建模。
(3)能够独立完成“银行新用户现金业务办理”程序的源代码编写、编译及运行。

3. 实现思路

(1)通过任务描述可知,此需求需要定义一个银行类BankSystem。当用户去银行办理业务时,相当于办理了此银行的账户,所以这个类中要有此银行以及此银行的账户信息,比如:银行的名称、用户的名称、密码、账户余额和交易金额等数据

(2)新用户到达银行之后,银行会表示欢迎。

(3)银行表示欢迎之后,会为用户办理开户手续,开户时需扣除10元卡费。

(4)开户后,可以为用户办理存款和取款业务,这两种业务都会改变账户的余额。但是当用户密码输入错误,或取款金额大于余额时,产生异常,取款业务不能办理,并提示用户。

(5)用户离开时,银行会提醒用户携带好随身财物。

4. 实现效果

首先进入系统进入的是登录/开户界面

输入2 进入开户界面,并且提示开户注意事项

输入开户名,密码以及充值金额,完成开户操作,返回登录主界面

 若充值金额小于10元,则提示金额不足,继续支付,支付成功后,返回登录主界面

 若第二次充值金额还是不足,则退出开户系统,返回登录主界面

 输入1,进入登录界面,输入用户名和密码

若登录失败,则提示用户名或密码错误,返回登录界面

登录成功之后,跳转到操作主界面

 

输入1之后,跳转到取钱操作界面,操作成功之后,返回操作主界面

若取款金额大于卡内余额,则进行提示,并且返回操作主界面

输入2,跳转到存钱操作界面,操作成功返回操作主界面

输入3,进入查询界面,查询完成后返回操作主界面

输入4,,退出银行操作系统


下面详细介绍实现思路以及源代码完成思路

因为本项目要连接数据库,所有要在数据库中创建自己的表格来存储一些用户信息。下面是我创建的表格,username表示用户名,password表示密码,balance表示账户余额。

 首先完成开户类(openAcount),因为要涉及开户,所以需要定义username、password、money成员变量,welcome方法是进入开户界面的欢迎操作,register方法对成员变量赋值,在系统主界面将会对输入的money判断,若金额不足,则调用agian方法,继续支付。open方法就是进行开户的主要方法,连接了数据库对象,对数据库表格进行赋值。

package BankSystem;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class openAccount {
	private String username;   
	private String passWord;
	Scanner s=new Scanner(System.in);
	public int  money;
	boolean BOA= false;
	public openAccount() {

	}
	
	public int open () {
		if(money-10<0) {
			System.out.println("支付金额不足,退出开户系统!!将返回主界面");
			return -1;
		}
		Connection con=null;   	//数据库连接对象
		Statement sta =null;	//数据库操作对象
		int res =-1;	//查询结果集
		try {
			//注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//获取数据库连接
			String url ="jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=UTC";
			String user = "root";
			String pass ="123456";
			con =DriverManager.getConnection(url,user,pass);
			//获取数据库操作对象
			sta =con.createStatement();
			//执行sql语句
			String sql="insert into t_bank (username,password,balance) values ('"+username+"','"+passWord+"','"+(money-10)+"')";
			res =sta.executeUpdate(sql);
			if(res!=-1) {
				BOA =true;
			}
			if(BOA) {
				System.out.println("恭喜"+username+"注册成功!!!!,卡内余额"+(money-10)+"元");
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(sta!=null) {
				try {
					sta.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(con!=null) {
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return 0;
	}
	public void welcome() {
		System.out.println("*******************************");
		System.out.println("欢迎注册本银行账户");
		System.out.println("注意:本银行开户需要用户输入开户名、密码以及充值金额。开户需要扣除10元卡费,若充值金额小于10元则不能开通。");
		System.out.println("请输入开户名、密码、充值金额");
	}
	public void register () {
		System.out.println("请输入开户名:");
		 username =s.next();
		System.out.println("请输入开户密码:");
		passWord =s.next();
		System.out.println("请输入充值金额");
		 money =s.nextInt();
	}
	public void agian () {
		System.out.println("开户金额不足,请继续支付:");
		int money1 =s.nextInt();
		money =money+money1;
	}
}

 接着定义welcome类,该类主要完成的是各种界面的欢迎和提示语。wc方法是登录\开户界面的提示语,find方法主要获取用户输入选项并且返回,welcome方法是对操作主界面的提示语,并且获取用户输入,当然这里也可以调用find方法进行获取。剩下的三个方法分别是取钱、存钱和退出系统的提示语。

package BankSystem;

import java.util.Scanner;

public class Welcome {
	Scanner s=new Scanner(System.in);
	public Welcome() {
	}
	public void wc () {
		System.out.println("**************************************");
		System.out.println("\t欢迎使用本银行管理系统");
		System.out.println("\t***************");
		System.out.println("          请先登录,若没有开通本银行账户请注册");
		System.out.println("\t1.登录\t    2.开户");
	}
	public int find() {
		System.out.println("请输入选项:");
		Scanner s=new Scanner (System.in);
		int a= s.nextInt();
		return a ;
	}
	public int welcome () {
		System.out.println("**************************************");
		System.out.println("\t登录成功,欢迎使用本银行管理系统");
		System.out.println("\t*********************");
		System.out.println("\t1.取钱\t  2.存钱");
		System.out.println("\t3.查询\t  4.退出");
		System.out.println("请输入选项:");
		int welcome =s.nextInt();
		return welcome;
	}
	public int updatemoney() {
		System.out.println("请输入取款金额:");
		int a =s.nextInt();
		return a; 
	}
	public int addmoney() {
		System.out.println("请输入存款金额:");
		int a =s.nextInt();
		return a; 
	}
	public void bye () {
		System.out.println("成功退出本银行操作系统,欢迎下次使用!!!!!");
	}
}

定义enter类,来完成用户的登录。因为要与数据库表格进行匹配,所以定义user和pass来表示 用户名和密码,flag是判断是否登录成功。这里的welcome是登录界面的提示语,并获取用户的输入,enter查询数据库表格中是否匹配用户输入的用户名和密码,返回布尔变量。

package BankSystem;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class enter {
	public String user;
	public String pass;
	private boolean flag =false;
	Scanner s =new Scanner(System.in);
	public enter() {
	}
	public boolean enter() {
		Connection con =null;//数据库连接对象
		Statement sta =null; //数据库操作对象
		ResultSet rs =null;		//查询结果集
		PreparedStatement ps =null; 	//sql语句预编译
	try {
		//1.获取数据库驱动对象
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2.获取数据库连接
		String url ="jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=UTC";
		String username = "root";
		String password ="123456";
		con =DriverManager.getConnection(url, username, password);
		
		//定义SQl语句框架
		String sql ="select username from t_bank where username = ? and password = ?";
		//对sql语句进行预编译
		ps =con.prepareStatement(sql);
		//赋值
		ps.setString(1, user);
		ps.setString(2, pass);
		//执行
		rs= ps.executeQuery();
		if(rs.next()) {
			flag =true;
		}
		
	}catch(Exception e ) {
		e.printStackTrace();
	}finally {
		if(rs!=null) {
		try {
			rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		}
		if(sta!=null) {
			try {
				sta.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
		if(con!=null) {
			try {
				con.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
}
			if(flag) {
				System.out.println("登陆成功!!");
			}else {
				System.out.println("用户名或密码错误");
			}
			return flag;
	}
	
	}

	public void welcome () {
		System.out.println("*************************");
		System.out.println("\t欢迎使用本银行登录系统");
		System.out.println("请输入用户名和密码");
		System.out.println("请输入用户名:");
		user =s.nextLine();
		System.out.println("请输入密码:");
		pass =s.nextLine();
	}
}

update类,完成用户的取钱、存钱操作,因为涉及数据库表格中的数据改变,所以创建对象是需要传入当前用户名、密码及账户余额,存钱时调用addmoney方法,取钱时调用updatemoney方法,若金额不足进行提示,并且返回-1,update对数据进行修改。

package BankSystem;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class update {
	private String username ;
	private String password;
	private int money2;
	
	public update (String username,String password,String money2) {
		this.username =username;
		this.password =password;
		this.money2 =Integer.parseInt(money2);
	}
	
	public int Update() {
		Connection con =null;
		int  rs =-1;
		Statement sta =null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			String url ="jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=UTC";
			String user ="root";
			String pass ="123456";
			con =DriverManager.getConnection(url, user, pass);
			sta =con.createStatement();
			
			String sql ="update t_bank set balance ='"+money2+"' where username ='"+username+"' and password ='"+password+"'";
			rs =sta.executeUpdate(sql);
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(sta!=null) {
				try {
					sta.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(con!=null) {
				try {
					con.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(rs!=-1) {
				System.out.println("恭喜您操作成功!");
				System.out.println(username+"账户余额:"+money2+"元");
			}
			return rs;
		}
	}
	
	
	public void addmoney(int money3) {
		money2 =money2+money3;
	}
	public int downmoney(int money3) {
		int  a= -1;
		if(money2<money3) {
			System.out.println("**************************************");
			System.out.println("\t对不起,账户余额不足!!!");
			return -1;
		}
		money2 =money2 -money3;
		return 0;
	}
	
	
}

Other3类完成查询操作,对当前用户名和密码进行匹配,查找账户余额

package BankSystem;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Other3 {
	private String username;
	private String password;
	private String balance;
	
	public Other3(String username,String password) {
		this.username =username;
		this.password =password;
	}
	
	public String query () {
		Connection con =null;
		Statement sta= null;
		ResultSet rs =null;
		
		try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url ="jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=UTC";
		String user ="root";
		String pass ="123456";
		con =DriverManager.getConnection(url, user, pass);
		sta =con.createStatement();
		String sql ="select balance from t_bank where username ='"+username+"'and password ='"+password+"'";
		rs =sta.executeQuery(sql);
		while(rs.next()) {
			balance =rs.getString("balance");
		}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
		
			if(rs!=null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(sta!=null) {
				try {
					sta.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(con!=null) {
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			return balance;
		}
	}

public void welcome() {
	System.out.println(username+"账户余额为:"+balance+"元");
}
}

接下来定义银行系统的主操作界面,first方法为登录\开户界面的调用,inenter方法为主操作的界面的调用。

package BankSystem;

import java.util.Scanner;

public class BankFrame {
	static Welcome wel =new Welcome();
	static enter ent =new enter();
	static openAccount oa =new openAccount ();
	static Other3  oth3;
	public static void main(String[] args) {   //登录开户界面
	  first();
		}
	public static void first() {
		Scanner s=new Scanner(System.in);
		boolean boo =true;
			wel.wc();
			int a =wel.find();
	while(boo) {
		if(a!=1&&a!=2) {
			System.out.println("对不起输入有误,请重新输入!");
			 a =wel.find();
		}
		if(a==1) {
			ent.welcome();
			boolean ent1=ent.enter();
			if(ent1) {
				inenter();
				boo =false;
			}
		}
		if(a==2) {
			oa.welcome();
			oa.register();
			if(oa.money<10) {
				System.out.println("开户金额为10元,您支付的钱币为"+oa.money+"元,还差"+(10-oa.money)+"元");
				oa.agian();
			}
			int open=oa.open();
			if(open!=-1) {
				first();
				boo =false;
			}
			else {
				wel.wc();
				a =wel.find();
			}
		}
		}
	}
	public static void inenter () {   //登录之后的界面
		int s1 =wel.welcome();
		boolean boo1 =true;
		while(boo1) {
			if(s1<=0||s1>4) {
				System.out.println("输入有误,请重新输入:");
				s1 =wel.find();
			}
		if(s1==1) {
			 oth3 =new Other3(ent.user,ent.pass);
			update up =new update(ent.user,ent.pass,oth3.query());
			int aa =up.downmoney(wel.updatemoney());
			if(aa==-1) {
				s1 =wel.welcome();
			}
			else {
				up.Update();
				s1 =wel.welcome();
			}
		}
		if(s1==2) {		
			oth3 =new Other3(ent.user,ent.pass);
			update up =new update(ent.user,ent.pass,oth3.query());
			up.addmoney(wel.addmoney());
			up.Update();
			s1 =wel.welcome();
		}
		if(s1==3) {
			 oth3 =new Other3(ent.user,ent.pass);
			oth3.query();
			oth3.welcome();
			s1 =wel.welcome();
		}
		if(s1==4) {
			wel.bye();
			boo1 =false;
		}
		}
	}
}

以上就是该项目的全部代码,该代码有很多bug,实现思路比较乱,但是也完成了要求的操作。如果发现代码bug请留言,不喜勿喷!!

  • 18
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值