因为项目要连接数据库,所以需要在数据库中创建表格来存储用户信息。如下为我创建的表格
这里我建了四个数据.user为用户名,password为密码,name为姓名,money则为金钱余额
使用了以下命令建表
create table Bank_account(
user varchar(128),
password varchar(128) not null,
name varchar(32) not null,
money int(20) default 0,
constraint Bank_account_userrules primary key(user)
);
因为用户名不可以重复且不能为空,所以使用了主键
密码可以重复但是不能为空,所以加了not null;
姓名也可以重名,但是不能为空,也加了not null;
定义主类,这里我只留了一个while循环来让菜单不停止
package BankSystem;
import java.util.Scanner;
public class BankSystem {
static Welcome welcome = new Welcome();
static Scanner shuru = new Scanner(System.in);
public static void main(String[] args) {
while(true) {
welcome.first();
}
}
}
定义欢迎及选择界面,我将菜单分为开户及登录菜单以及登录后个人账户菜单
表格的话因为java和博客上效果不同,所以简略调整了一下
因为在选择选项时,scanner输入的类型是int,而如果不慎输入字符串会报异常,所以我用了一个while循环和trycatch解决
个人账户查询时,我先使用了查询命令,然后使用查询类返回的余额数进行增删,解决了遇到的存钱完后再接着取钱金额不对问题。
package BankSystem;
import java.util.Scanner;
public class Welcome {
static Scanner shuru3 = new Scanner(System.in);
static openaccount op = new openaccount();
static loginaccount lo = new loginaccount();
static Checkmoney um = new Checkmoney();
static Updatemoney ud = new Updatemoney();
static String login_user = null;
static int money;
public void first() {
if(login_user==null) {
System.out.println("-----------欢迎来到本银行-----------");
System.out.println("***********************************");
System.out.println("| 银行管理系统 |");
System.out.println("| ************* |");
System.out.println("|1.开户 |");
System.out.println("|2.登录 |");
System.out.println("|3.退出 |");
System.out.println("***********************************");
System.out.println("请输入你要进行的选项");
while(true) {
try {
loginpd(shuru3.nextInt());
break;
} catch (Exception e) {
System.out.println("输入选项错误,请重新输入");
shuru3 = new Scanner(System.in);
}
}
}else {
second();
}
}
public static void second() {
System.out.println("-----------欢迎来到本银行-----------");
System.out.println("***********************************");
System.out.println("| 银行管理系统 |");
System.out.println("| ************* |");
System.out.println("|1.存钱 |");
System.out.println("|2.取钱 |");
System.out.println("|3.查询 |");
System.out.println("|4.退出 |");
System.out.println("***********************************");
System.out.println("请输入你要进行的选项");
while(true) {
try {
accountcz(shuru3.nextInt());
break;
} catch (Exception e) {
System.out.println("输入选项错误,请重新输入");
shuru3 = new Scanner(System.in);
}
}
}
public static void loginpd(int number) {
switch (number) {
case 1:
op.openaccounts();
break;
case 2:
loginaccount.login();
login_user = loginaccount.login_username;
break;
case 3:
System.out.println("成功退出本系统");
shuru3.close();
System.exit(0);
break;
default:
System.out.println("输入的数字有误,请重新输入");
}
}
public static void accountcz(int number) {
switch (number) {
case 1:
um.modifymoney(login_user);
ud.savemoney(login_user,um.returnmoney());
break;
case 2:
um.modifymoney(login_user);
ud.takemoney(login_user,um.returnmoney());
break;
case 3:
um.modifymoney(login_user);
money = um.returnmoney();
System.out.println("账户余额为"+money+"元");
break;
case 4:
System.out.println("成功退出本系统");
login_user = null;
break;
default:
System.out.println("输入的数字有误,请重新输入");
}
}
}
下面是开户类
package BankSystem;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class openaccount {
public void openaccounts() {
Scanner shuru1 = new Scanner(System.in);
Connection conn = null;
PreparedStatement ps = null;
int count = 0;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/BankSystem?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
String name = null;
conn = DriverManager.getConnection(url,user,password);
String sql_ins = "insert into bank_account(user,password,name,money) values(?,?,?,?)";
ps = conn.prepareStatement(sql_ins);
System.out.println("请输入账号名");
ps.setString(1,shuru1.nextLine());
System.out.println("请输入密码");
ps.setString(2,shuru1.nextLine());
System.out.println("请输入开户者姓名");
name = shuru1.nextLine();
ps.setString(3,name);
System.out.println("请输入存取金额");
int openmoney = shuru1.nextInt();
int temp;
if(openmoney >=10) {
temp = openmoney - 10;
}else {
temp = 10- openmoney;
while(true) {
System.out.println("开户最低需要10元金额,您支付了"+openmoney+"元,还需要支付"+temp+"元,请继续支付");
openmoney = shuru1.nextInt()+openmoney;
if(openmoney >=10) {
temp = openmoney - 10;
break;
}else {
temp = 10-openmoney;
}
}
}
ps.setInt(4,temp);
count = ps.executeUpdate();
System.out.println(name+"开户成功,账户余额为"+temp+"元");
} catch (Exception e) {
e.printStackTrace();
}finally {
if(ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
登录类,我以登录账户名为判断是否成功登录的标准,如果为Null,则说明此处没有登录成功,如果不是Null则说明登录成功
package BankSystem;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
public class loginaccount {
static String login_username = null;
public static void login(){
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
boolean flag =false;
boolean empty = false;
Scanner shuru2 = new Scanner(System.in);
System.out.println("请输入用户名");
login_username = shuru2.nextLine();
System.out.println("请输入密码");
String login_password = shuru2.nextLine();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BankSystem?useSSL=false&serverTimezone=UTC","root","123456");
String sql = "select user from bank_account where user = ? and password = ?";
ps = conn.prepareStatement(sql);
ps.setString(1,login_username);
ps.setString(2,login_password);
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(ps != null) {
try {
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
if(flag==true) {
System.out.println("登陆成功");
}else {
System.out.println("账户和密码错误或者账户不存在,请重新输入");
login_username = null;
}
}
public loginaccount(String login_username) {
this.login_username = login_username;
}
public loginaccount() {
}
}
查询金额类,这里添加了返回当前余额类,便于存钱与取钱
package BankSystem;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Checkmoney {
static String login_user;
static int money;
static String sql;
static Scanner shuru4 = new Scanner(System.in);
public static int returnmoney() {
return money;
}
public static void modifymoney(String login_user) {
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BankSystem?useSSL=false&serverTimezone=UTC","root","123456");
sql = "select money from bank_account where user = ?";
ps = conn.prepareStatement(sql);
ps.setString(1,login_user);
rs = ps.executeQuery();
while(rs.next()) {
money = rs.getInt("money");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(rs != null) {
try {
rs.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
存钱、取钱类
这里我加入了synchronized
package BankSystem;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Updatemoney {
static int changemoney;
static int money;
static Scanner shuru5 = new Scanner(System.in);
static String login_user;
public static void updatemoney(String login_user,int money) {
Connection conn = null;
PreparedStatement ps = null;
int count = 0;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BankSystem?useSSL=false&serverTimezone=UTC","root","123456");
String sql = "update bank_account set money = ? where user = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1,money);
ps.setString(2,login_user);
count = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
if(ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static synchronized void savemoney(String login_user,int money) {
System.out.println("请输入要存入账户的金额");
changemoney = shuru5.nextInt();
if(changemoney>=0) {
money = money + changemoney;
updatemoney(login_user,money);
System.out.println("成功存入"+changemoney+"元,账户余额为"+money+"元");
}else {
System.out.println("存入金额不正确,请重新输入");
}
}
public static synchronized void takemoney(String login_user,int money) {
System.out.println("请输入要取出的金额数");
changemoney = shuru5.nextInt();
if(money-changemoney>=0&&changemoney>=0) {
money = money - changemoney;
updatemoney(login_user,money);
System.out.println("成功取出"+changemoney+"元,账户余额为"+money+"元");
}else {
int temp = changemoney -money;
System.out.println("账户余额为"+money+"元,无法取出"+changemoney+"元,请重新输入");
}
}
public Updatemoney() {
}
}
最后附上代码实现图
1.
2.
3.
4.
5.
以上就是个人写的银行管理系统,有许多bug以及不妥之处,欢迎大佬帮我指出,不喜勿喷,谢谢!