模拟银行系统 java,mysql实现

模拟电子银行,开户,存钱,取钱,查询用户信息,修改用户信息,查询余额,查询明细,注销,退出,等等 

基本实现了相关功能。但是规定每次需要重新登录,还是很麻烦的。

另外用户注销时候,没有规定删除operator表中信息,此处会有问题。但想了半天觉得现实中这部分信息需要保留一段时间,不应该删除。orz

数据库设计:

bank.java:

package mybank;

import org.apache.commons.dbutils.QueryRunner;

//import java.sql.Date;
import java.util.*;
import java.util.Date;
import java.sql.*;
import java.text.DecimalFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
public class bank {
	
//	public static Connection getConnection() throws Exception
//	{
		Class.forName("com.mysql.cj.jdbc.Driver");
		Properties info=new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "wenmiao11");
		
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/scsxbank?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false", info);
		
//		
//		
//		return conn;
//	}

	public static int writeoperator(String type,double num,int fromid,int toid) throws Exception
	{
		Connection conn=JdbcUtil.getConn();
		PreparedStatement pstmt = conn.prepareStatement("insert into operator "
				+ "values(0,?,?,?,?,?,?)");
		pstmt.setString(1,type);
		pstmt.setDouble(2,num);
		pstmt.setInt(3,fromid);
		pstmt.setInt(4,toid);
		//Date d=new Date();
		java.sql.Date timePara = new java.sql.Date(new Date().getTime());
		pstmt.setDate(5,timePara);
		Calendar cal = Calendar.getInstance();//日期类
        java.sql.Timestamp timestampnow = new java.sql.Timestamp(cal.getTimeInMillis());//转换成正常的日期格式
        java.util.Date current =new java.util.Date();
        timestampnow = new java.sql.Timestamp(current.getTime());
		pstmt.setTimestamp(6, timestampnow);
		int k=pstmt.executeUpdate();
		return k;
	}
	public static int testmoneyenough(int idnum,double awaymoney) throws Exception
	{
		double balance=getbalance(idnum);
		if(balance>awaymoney)
		{
			return 1;
		}
		else
		{
			System.out.println("money is not enough!");
			return 0;
		}
	}
	public static double getbalance(int idnum) throws Exception
	{
		Connection conn=JdbcUtil.getConn();
		String sql="select * from balance where id=?;";
		Object[] params2 = {idnum};
		QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
		Object[] obj = qr.query(conn, sql, new ArrayHandler(),params2);

		if(obj.length>0)
		{
			System.out.println(obj[1]);
			return ((double)obj[1]);
		}
		else
		{
			System.out.println("error");
			return -1;
		}
	}
	
	public static int updatebalance(double num,int idnum) throws Exception
	{
		Connection conn=JdbcUtil.getConn();
		PreparedStatement pstmt ;
		pstmt = conn.prepareStatement("update balance set balance=balance+? where id=?;");
		pstmt.setDouble(1, num);
		pstmt.setInt(2, idnum);
		int k=pstmt.executeUpdate();
		return k;
	}
	public static int testpassword() throws Exception
	{
		System.out.println("input your id number:");
		Scanner cin=new Scanner(System.in); 
		int idnum=cin.nextInt();
		System.out.println("input your password:");
		String password = cin.next();
		Connection conn=JdbcUtil.getConn();
		String sql="select * from user where id=? and password=?";
		
		Object[] params = {idnum,password,};
		
		QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
		Object[] obj = qr.query(conn, sql, new ArrayHandler(),params);
		
		if(obj.length>0)
		{
			return idnum;
		}
		else
		{
			System.out.println("wrong message!");
			return -1;
		}
		
	}
	
	public static void openAnAccount() throws Exception
	{
		Scanner cin=new Scanner(System.in); 
		
		System.out.println("input your name:");
		String name=cin.next();
		String password;
		String passwordagain;
		
		while(true)
		{
			System.out.println("input your password:");
			password=cin.next();
			
			System.out.println("input your password again:");
			passwordagain=cin.next();
	
			if(password.equals(passwordagain))
			{
				break;
			}
			else
			{
				System.out.println("different password, please input again!");
			}
		}
		Connection conn=JdbcUtil.getConn();
		
		PreparedStatement pstmt = conn.prepareStatement("select * from maxid");
		//String sql="select max(id) from user";
		ResultSet rs=pstmt.executeQuery();
		
		rs.next();
		
		//rs.getObject(1);
		int id=rs.getInt(1)+1;
		pstmt = conn.prepareStatement("update maxid set id=id+1");
		pstmt.executeUpdate();
		//String strmaxid=rs.getString(1);
		//System.out.println(id);
		
		//sql="insert into user values(%d,%s,%s)";
		pstmt = conn.prepareStatement("insert into user values(?,?,?)");
		
		pstmt.setInt(1, id);
		pstmt.setString(2, name);//System.out.println("again!");
		pstmt.setString(3, password);
		
		int k = pstmt.executeUpdate();
		pstmt = conn.prepareStatement("insert into balance values(?,?)");
		
		pstmt.setInt(1, id);
		pstmt.setDouble(2, 0);
		
		int l = pstmt.executeUpdate();
		
		//System.out.println("dif");
		DecimalFormat df=new DecimalFormat("0000000000");
		if(k!=0&&l!=0)
			System.out.println("create the account successfully,your id is "+df.format(id));
		//15246785055
		k=writeoperator("enroll",-1,id,0);
//		pstmt = conn.prepareStatement("insert into operator values(?,?,?,?,?)");
//		pstmt.setInt(1, 0);
//		pstmt.setString(2, "enroll");//System.out.println("again!");
//		pstmt.setInt(3, 0);
//		pstmt.setString(4, String.valueOf(id));//System.out.println("again!");
//		pstmt.setString(5, "");//System.out.println("again!");
//		k=pstmt.executeUpdate();
		if(k==1)
			System.out.println("success again");
		else
			System.out.println("TAT");
	}
	
	
	public static void showbalance() throws Exception
	{
		System.out.println("input your id number:");
		Scanner cin=new Scanner(System.in); 
		int idnum=cin.nextInt();
		//System.out.println(idnum);
		System.out.println("input your password:");
		String password = cin.next();
		
		Connection conn=JdbcUtil.getConn();
		String sql="select * from user where id=? and password=?";
		
		Object[] params = {idnum,password,};
		
		QueryRunner qr = new QueryRunner(JdbcUtil2.getDataSource());
		
		
		Object[] obj = qr.query(conn, sql, new ArrayHandler(),params);
		//System.out.println("2w2w");
		//String id=obj[0].toString();
		if(obj.length>0)
		{
			//System.out.println("-----");
			System.out.println(obj[1]+" : 你好!");
		}
		else
		{
			System.out.println("wrong message!");
			return;
		}
		int k=writeoperator("login",-1,idnum,0);
//		PreparedStatement pstmt ;
//		pstmt = conn.prepareStatement("insert into operator values(?,?,?,?,?)");
//		pstmt.setInt(1, 0);
//		pstmt.setString(2, "login");//System.out.println("again!");
//		pstmt.setInt(3, 0);
//		pstmt.setString(4, String.valueOf(id));//System.out.println("again!");
//		pstmt.setString(5, "");//System.out.println("again!");
//		int k=pstmt.executeUpdate();
		if(k==1)
			System.out.println("success again");
		else
			System.out.println("TAT");
		
		getbalance(idnum);
		
//		sql="select * from balance where id=?;";
//		Object[] params2 = {idnum};
//		qr = new QueryRunner(JdbcUtil2.getDataSource());
//		obj = qr.query(conn, sql, new ArrayHandler(),params2);
//
//		if(obj.length>0)
//			System.out.println(obj[1]);
//		else
//			System.out.println("error");
		
	}
	
	public static void saving() throws Exception
	{
		Scanner cin=new Scanner(System.in); 
		int idnum=testpassword();
		if(idnum==-1)
		{
			System.out.println("wrong message!");
			return;
		}
		else
		{
			System.out.println("input saving number:");
			double accountnum=cin.nextDouble();
			System.out.println("before saving, your balance is "+getbalance(idnum)+"¥");
			updatebalance(accountnum,idnum);
			writeoperator("saving",accountnum,idnum,0);
			System.out.println("after saving, your balance is "+getbalance(idnum)+"¥");
		}	
	}
	
	public static void withdrawal() throws Exception
	{
		Scanner cin=new Scanner(System.in); 
		int idnum=testpassword();
		if(idnum==-1)
		{
			System.out.println("wrong message!");
			return;
		}
		else
		{
			System.out.println("input withdrawal number:");
			double accountnum=cin.nextDouble();
			int flag=testmoneyenough(idnum,accountnum);
			if(flag>0)
			{
				System.out.println("before withdrawal, your balance is "+getbalance(idnum)+"¥");
				updatebalance(accountnum*(-1),idnum);
				writeoperator("withdrawal",accountnum,idnum,0);
				System.out.println("after withdrawal, your balance is "+getbalance(idnum)+"¥");
			}
			else
				return;
		}
	}
	
	public static void transfer() throws Exception
	{
		Scanner cin=new Scanner(System.in);
		int idnum=testpassword();
		if(idnum>0)
		{
			System.out.println("which evil will deprive your little money?");
			int toidnum=cin.nextInt();
			System.out.println("And how much?");
			double accountnum=cin.nextInt();
			int flag=testmoneyenough(idnum,accountnum);
			if(flag>0)
			{
				System.out.println("before transfer, your balance is "+getbalance(idnum)+"¥");
				Connection conn=JdbcUtil.getConn();
				conn.setAutoCommit(false);
				String sql1 = "update balance set balance=balance-? where id=?";
				String sql2 = "update balance set balance=balance+? where id=?";
				PreparedStatement pstmt = conn.prepareStatement(sql1);
				pstmt.setDouble(1,accountnum);
				pstmt.setInt(2,idnum);
				pstmt.executeUpdate();
				pstmt = conn.prepareStatement(sql2);
				pstmt.setDouble(1,accountnum);
				pstmt.setInt(2,toidnum);
				pstmt.executeUpdate();
				conn.commit();
				writeoperator("transfer",accountnum,idnum,toidnum);
				
				System.out.println("after transfer, your balance is "+getbalance(idnum)+"¥");
			}
			else
				return;
		}
		else
			return;
	}
	
	public static void seekdetails() throws Exception
	{
		int idnum=testpassword();
		writeoperator("seek",0,idnum,0);
		if(idnum>0)
		{
			Connection conn=JdbcUtil.getConn();
			
			String sql = "select * from operator where fromid=?;";
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1,idnum);
			ResultSet rs = pstmt.executeQuery();
			while(rs.next())
			{
				System.out.println(rs.getInt(1)+" "+rs.getString(2));
			}
		}
		else
		{
			return;
		}
	}
	
	public static void logoff() throws Exception
	{
		int idnum=testpassword();
		if(idnum>0)
		{
			System.out.println("are you sure?(Y/N)");
			Scanner cin=new Scanner(System.in);
			String s=cin.next();
			if(s.equals("Y"))
			{
				Connection conn=JdbcUtil.getConn();
				
				String sql = "delete  from user where id=?;";
				PreparedStatement pstmt = conn.prepareStatement(sql);
				pstmt.setInt(1,idnum);
				int k=pstmt.executeUpdate();
				
				sql = "delete  from balance where id=?;";
				pstmt = conn.prepareStatement(sql);
				pstmt.setInt(1,idnum);
				int l=pstmt.executeUpdate();
				if(k>0&&l>0)
				{
					writeoperator("delete",0,idnum,0);
					System.out.println("delete successfully!");
				}
				else
				{
					System.out.println("there must be something wrong!");
				}
			}
			else
			{
				return;
			}
		}
		else
		{
			return;
		}
	}
	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		int flag=0;
		while(true)
		{
			System.out.println("--欢迎使用并没有钱的银行系统!--\n"
					+ "(1):开户\n"
					+ "(2):显示余额\n"
					+ "(3):存钱\n"
					+ "(4):取钱\n"
					+ "(5):转账\n"
					+ "(6):明细查询\n"
					+ "(7):注销\n"
					+ "(0):退出\n"
					+ "请输入你的操作:\n");
			 
			int i=cin.nextInt();
			switch(i)
			{
				case 1 :
				{
					openAnAccount();
					break;
				}
				case 2 :
				{
					showbalance();
					break;
				}
				case 3 :
				{
					saving();
					break;
				}
				case 4 :
				{
					withdrawal();
					break;
				}
				case 5 :
				{
					transfer();
					break;
				}
				case 6 :
				{
					seekdetails();
					break;
				}
				case 7 :
				{
					logoff();
					break;
				}
				case 0:
				{
					System.out.println("欢迎下次使用!");
					flag=1;
					break;
				}
				default:
				{
					System.out.println("输入错误,请重试!");
				}
			}
			if(flag==1)
				break;
			
		}
		cin.close();
	}

}

JdbcUtil.java:

package mybank;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;

/*
 * 为了提高代码复用性,进行简单的封装
 * */
public class JdbcUtil {
	/*public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
	public static final String URL = "jdbc:mysql:///test";
	public static final String USER = "root";
	public static final String PASSWORD = "123456";*/
	
/*	public static String driver;
	public static String url;
	public static String user;
	public static String password;
	*/
	//加载配置文件
	public static Properties ps = null;
	static{
		ps = new Properties();
		Reader r = null;
		try {
			r = new FileReader("src/db.properties");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			ps.load(r);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//driver = ps.getProperty(driver);
	}
	
	static{
		try {
			Class.forName(ps.getProperty("driver"));
		} catch (ClassNotFoundException e) {
			System.out.println("注册驱动失败。。");
			e.printStackTrace();
		}
	}
	/*static{
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {
			System.out.println("注册驱动失败。。");
			e.printStackTrace();
		}
	}*/
	
	//提供获取连接对象的方法
	public static Connection getConn(){
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(ps.getProperty("url"), ps.getProperty("user"), ps.getProperty("password"));
		} catch (SQLException e) {
			System.out.println("获取连接失败。");
			e.printStackTrace();
		}
		return conn;
	}
	
	//提供一个专门执行dml语句的方法
	public static int executeUDI(String sql,Object[] params) throws Exception{
		Connection conn = getConn();
		PreparedStatement pstmt = conn.prepareStatement(sql);
		for(int i=0;params!=null&&i<params.length;i++){
			pstmt.setObject(i+1, params[i]);
		}
		return pstmt.executeUpdate();
	}
	
	//提供一个转么执行select语句的方法,返回对象集合
	public static ArrayList executeQuery(String sql,Object[] params){
		//....
		return null;
	}
}

JdbcUtil2.java:

package mybank;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;



public class JdbcUtil2 {
	//加载配置文件
	public static Properties ps = null;
	static{
		ps = new Properties();
		Reader r = null;
		try {
			r = new FileReader("src/db.properties");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			ps.load(r);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//driver = ps.getProperty(driver);
	}
	
	/*
	 * 创建连接池
	 * */
	public static BasicDataSource dataSource = new BasicDataSource();
	/*
	 * 对连接池进行配置,基本配置
	 * */
	static{
		dataSource.setDriverClassName(ps.getProperty("driver"));
		dataSource.setUrl(ps.getProperty("url"));
		dataSource.setUsername(ps.getProperty("user"));
		dataSource.setPassword(ps.getProperty("password"));
	}
	
	/*
	 * 返回连接对象
	 * */
	public static DataSource getDataSource(){
		return dataSource;
	}
}

db.properties:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/scsxbank?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
user=root
password=xxx

 

  • 4
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Java MySQL模拟ATM机系统是一个使用Java编程语言和MySQL数据库技术来模拟实现ATM机功能的项目。 首先,我们可以通过Java编写一个ATM机类,该类包含账号管理、余额查询、取款、存款、转账、修改密码等功能。利用MySQL数据库存储相关数据。 在MySQL数据库中,我们可以设计一个"users"表来存储用户信息,包括账号、密码、姓名和余额等字段。 我们可以在Java程序中使用JDBC连接MySQL数据库,并通过SQL语句来实现以下功能: 1. 账号管理:在"users"表中插入一条新的用户记录,包括账号、密码、姓名和初始余额等信息。 2. 余额查询:通过输入账号,执行查询语句,从"users"表中获取对应账号的余额字段,并输出显示给用户。 3. 取款:通过输入账号和取款金额,执行更新语句,从"users"表中扣除对应账号的余额字段,并更新数据库中的余额记录。 4. 存款:通过输入账号和存款金额,执行更新语句,向"users"表中添加对应账号的余额字段,并更新数据库中的余额记录。 5. 转账:通过输入转出账号、转入账号和转账金额,执行更新语句,从转出账号扣除对应金额,向转入账号添加对应金额,并更新数据库中的余额记录。 6. 修改密码:通过输入账号和新密码,执行更新语句,将"users"表中对应账号的密码字段更新为新密码。 以上是简单的实现思路,具体实现还需考虑异常处理、用户界面设计等因素。同时,为了保障系统的安全性,我们可以加入数字密码验证、事务处理、账号锁定等机制。 通过以上的实现,我们可以模拟ATM机系统的基本功能,增加额外的功能补充完善项目。 ### 回答2: Java MySQL模拟ATM机系统是一个基于JavaMySQL的项目,旨在模拟和实现ATM机的基本功能。该系统具有如下特点和功能: 1. 用户登录:用户可以通过输入银行卡号和密码来登录系统。 2. 查询余额:登录后,用户可以查询自己的账户余额,系统将从数据库中查询并显示对应的余额信息。 3. 存款:用户可以选择将现金存入ATM机中。在存款过程中,系统会检查输入金额的有效性,并将相应的金额更新到数据库中。 4. 取款:用户可以选择从ATM机中取款。在取款过程中,系统会检查用户账户余额是否充足,并更新数据库中的账户余额。 5. 转账:用户可以选择将一定金额从自己的账户转到其他账户。在转账过程中,系统会进行双重验证和更新数据库信息。 6. 交易记录:系统可以记录每一笔交易的详细信息,包括交易类型、交易时间、交易金额等,并存储在数据库中。 7. 密码修改:用户可以选择修改自己的登录密码。系统将对用户输入的新密码进行验证,并更新数据库中的密码信息。 8. 退出系统:用户可以选择安全退出ATM机系统。 为了实现系统,我们将使用Java编写程序,并借助MySQL数据库管理用户和交易信息。在MySQL中,我们将创建用户表和交易记录表,用于存储对应的数据。我们将使用Java JDBC来连接和操作MySQL数据库,通过执行SQL语句来实现对数据的增删改查。 通过以上的功能和技术实现,我们可以构建一个模拟ATM机系统,具备基本的账户管理、交易操作和查询功能。这个系统可以帮助用户在虚拟环境中进行安全、方便的账户管理和交易操作,并通过MySQL数据库保证数据的可靠性和持久性。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值