编写一个银行新用户现金业务办理程序,使其模拟新用户到银行办理现金存取业务时的场景。
要求此场景中,要模拟出银行对用户到来的欢迎动作、对用户离开的提醒动作,以及用户的开户、存款和取款动作,在完成开户、存款和取款操作后,要提示用户的账户余额。例如,一个新用户来到招商银行,首先银行要表示欢迎,然后银行工作人员会为用户办理开户手续;开户后,用户先进行存款操作,之后又进行了取款操作,取款操作时需要用户输入正确的密码和取款金额需小于当前账户金额,如果条件不满足,系统产生异常。当业务办理完,用户离开银行,银行提醒用户携带好随身财物。至此银行新用户现金业务办理结束。
1.我们不管怎么样都要有主菜单,主菜单也就是需要列出功能然后用户进行选择对应的功能来进行操作,最终实现,总得来说主菜单还是简单的,我们首先要有欢迎界面,进来系统便会提示出来,然后将主菜单那些工能封装在一个print方法中,主菜单只用进行while循环进行操作就可以了,然后对应的功能封装成为方法,就可以实习我们的主菜单了。具体的实现代码如下:
public class Means {
static Scanner sc = new Scanner(System.in);
static Means m = new Means();
static Register z = new Register();
static Take q = new Take();
static Save c = new Save();
static Login d = new Login();
static Balance b = new Balance();
static Open k = new Open();
public static void main(String[] args) throws Exception {
System.out.println("-----------欢迎来到银行管理系统-------------------");
m.print();
m.Mean();
}
public void Mean() throws Exception {
while (true) {
int choose = sc.nextInt();
if (choose == 1) {
System.out.println("欢迎来到开户界面,开户费用为10元,余额不足,可以按 2 进行存钱");
k.open();
} else if (choose == 2) {
System.out.println("欢迎来到存钱界面");
c.save();
} else if (choose == 3) {
if (d.is) {
System.out.println("欢迎来到取钱界面");
q.take();
} else {
System.out.println("请你先按 5 进行登录");
}
} else if (choose == 4) {
System.out.println("感谢你的使用,欢迎下次光临");
break;
} else if (choose == 0) {
m.print();
} else if (choose == 5) {
if (k.is) {
System.out.println("欢迎来到登录界面");
d.login();
m.print();
} else {
System.out.println("请你先按 1 进行开户,如果没有账号请按 6 进行注册");
}
} else if (choose == 6) {
z.register();
m.print();
} else {
System.out.println("你输入有误,请重新输入");
}
}
}
public void print() {
System.out.println("*******************");
System.out.println("主要功能如下 : ");
System.out.println("\t1.开户\t2.存钱");
System.out.println("\t3.取钱\t4.退出");
System.out.println("\t5.登录\t6.注册");
System.out.println("\t0.返回主界面");
System.out.println("*******************");
}
}
无论什么系统都会有账号密码,我们刚开始是没有账号和密码的,那么便要进行注册,注册无非就是用jdbc往数据库中存储数据(也就是账号密码),我们要注册那么就要先要创建一个数据表,这里我们要注意,主键约束和自动递增等等,最重要的是我们要设置名字那个设置唯一约束(因为众所周知,我们密码可以重复,账号只能有一个)这是我的数据库实现代码:
CREATE TABLE bank(
bid INT(20) PRIMARY KEY AUTO_INCREMENT,
bname VARCHAR(32) UNIQUE,
bpassword VARCHAR(32),
bmoney INT
);
接下来就是利用jdbc连接数据库,然后利用SQL语句往数据库中写入数据,然后我们写入数据时我们要进行输入,也就是把增加的值变成我们写入的值,如果不符和这个情况那么我们就提示一个错误,并且在下面利用递归,让他重新注册,这里还有就是利用excuteUpdate方法 返回为int 然后利用这个就可以判断是否注册成功,到这里我们的注册功能就可以了,具体的实现代码如下:
public class Register {
static Register z = new Register();
static Scanner sc = new Scanner(System.in);
public int register() throws Exception {
System.out.println("欢迎注册!!!");
System.out.println("你好请输入你的账号");
String name = sc.next();
System.out.println("你好请输入你的密码");
String pass = sc.next();
System.out.println("你好请输入你的支付密码");
String word = sc.next();
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接对象
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "123123";
Connection con = DriverManager.getConnection(url, username, password);
Statement st = con.createStatement();
String sql = "insert into bank (bname,bpassword,bword) values('"+name+"','"+ pass +",'"+ word+"')";
int result = st.executeUpdate(sql);
if(result == 1) {
System.out.println("恭喜你注册成功,请保存好你的账号和密码");
}else {
System.out.println("对不起,你输入有误请从新开户");
z.register();
}
st.close();
con.close();
return result;
}
}
我们实现了注册功能,那么我们现在就来实现登陆功能,因为我们现在也能看出来好多软件都是注册登录才能使用各种功能然后我们登陆功能无非就是使用sql语句在数据库中进行查找,是不是有这个账号和密码,然后有了在进行登录成功,同样我们需要使用一个成员变变量,设置为boolean型 ,初始值为false,然后在进行判断利用 excuteQuery()方法进行判断是否登陆成功
成功了之后is的值赋值给true,然后其他的功能利用if条件语句判断是否登陆成功,登录成功了才能进行其他功能,具体的实现代码如下:
public class Login {
static Login d = new Login();
static Scanner sc = new Scanner(System.in);
boolean is = false;
public void login() throws Exception {
System.out.println("欢迎登陆!!!");
System.out.println("你好请输入你的账号");
String name = sc.next();
System.out.println("你好请输入你的密码");
String pass = sc.next();
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接对象
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "123123";
Connection con = DriverManager.getConnection(url, username, password);
String sql = "select * from bank where bname = ? and bpassword = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1,name);
pst.setObject(2,pass);
ResultSet res = pst.executeQuery();
if(res.next()) {
is = true;
System.out.println("恭喜你登陆成功!!!");
}else {
System.out.println("对不起,你的输入有误,请重新登录");
d.login();
}
res.close();
pst.close();
con.close();
}
}
我们实现了登录功能,那么我们就要开始实现主要功能了,也就是存钱和取钱功能,在存钱取钱时我们先要考虑我们的卡里面的余额,我们要想知道余额那么我们便需要连接数据库然后进行查询,并且把余额返回回来,这样我们就要利用SQL查询语句查找数据表中的数据,然后利用账号进行判断,是谁的账号,查询谁的余额(因为我们提前设置了账号唯一,所以这里就不用密码了),然后利用resultSet集合的next方法判断,然后利用get方法来获得余额并返回回来,这样我们就知道余额,存钱,取钱操作在数据上进行增减就好了,具体的实现代码如下:
public class Balance {
static Scanner sc = new Scanner(System.in);
public int find() throws Exception{
int moneys = 0;
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接对象
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "123123";
Connection con = DriverManager.getConnection(url, username, password);
System.out.println("请输入你的账号");
String name = sc.next();
String sql = "select * from bank where bname = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, name);
ResultSet res = pst.executeQuery();
while(res.next()) {
moneys = res.getInt("money");
}
return moneys;
}
}
我们上面已经实现了获取余额这样的方法,那么我们的存钱操作就变得非常简单,我们利用SQL修改语句,让我们存钱的金额加上余额,这样我们便可以实现存钱操作,我们这里要SQL语句同样需要判断条件,我们只用判断账号和支付密码,如果执行成功那么我们我们便可以实现存钱功能,最后我们把存钱后的余额展现给用户那样我们便实现了存钱功能,具体的实现代码如下:
public class Save {
static Save c = new Save();
static Scanner sc = new Scanner(System.in);
static Balance b = new Balance();
public void save() throws Exception{
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接对象
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "123123";
Connection con = DriverManager.getConnection(url, username, password);
System.out.println("请输入你的存钱金额");
int money = sc.nextInt();
System.out.println("请输入你的账号");
String name = sc.next();
System.out.println("你好请输入你的支付密码");
String word = sc.next();
String sql = "update bank set money = ? where bname = ? and bword = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, (money + b.find()));
pst.setObject(2, name);
pst.setObject(3, word);
int res = pst.executeUpdate();
if(res == 1) {
System.out.println("恭喜你存钱成功" + "余额为" + (b.find()) + "元");
return;
}else {
System.out.println("对不起,你输入有误,存钱失败,请重新存钱");
c.save();
}
con.close();
pst.close();
}
}
我们上面已经实现了获取余额这样的方法,那么我们的取钱操作就变得非常简单,我们利用SQL修改语句,让我们用余额减去取钱的金额,这样我们便可以实现取钱操作,我们这里要SQL语句同样需要判断条件,我们只用判断账号和支付密码,如果执行成功,我们这里要注意我们需要利用if条件语句来进行判断余额和取钱金额的大小,如果取钱金额大于余额那么我们边直接提示余额不足反之执行下面的功能进行取钱,最后我们把存钱后的余额展现给用户那样我们便实现了取钱功能,具体的实现代码如下:
public class Take {
static Take q = new Take();
static Scanner sc = new Scanner(System.in);
static Balance b = new Balance();
public void take() throws Exception{
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接对象
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "123123";
Connection con = DriverManager.getConnection(url, username, password);
System.out.println("请输入你的取钱金额");
int money = sc.nextInt();
System.out.println("请输入你的账号");
String name = sc.next();
System.out.println("你好请输入你的支付密码");
String word = sc.next();
if(money <= b.find()) {
String sql = "update bank set money = ? where bname = ? and bword = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, (b.find() - money));
pst.setObject(2, name);
pst.setObject(3, word);
int res = pst.executeUpdate();
if (res == 1) {
System.out.println("恭喜你取钱成功" + "余额为" + (b.find()) + "元");
return;
} else {
System.out.println("对不起,你输入有误,取钱失败,请重新取钱");
q.take();
}
con.close();
pst.close();
}else {
System.out.println("对不起,你的余额不足");
}
}
}
这个功能我们取钱功能类似,也就是判断一下余额和开户金额的大小,如果金额不足,便提示他余额不足,如果余额充足,那么就想取钱操作相同 在余额上减去开户的10元钱,这样我们便实现了开户功能,利用boolean 成员变量 来判断是否开户具体的实现代码如下:
public class Open {
static Open q = new Open();
static Scanner sc = new Scanner(System.in);
static Balance b = new Balance();
boolean flag = false;
public void open() throws Exception{
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接对象
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "123123";
Connection con = DriverManager.getConnection(url, username, password);
int money = 10;
System.out.println("请输入你的账号");
String name = sc.next();
System.out.println("你好请输入你的支付密码");
String word = sc.next();
if(money <= b.find()) {
String sql = "update bank set money = ? where bname = ? and bword = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setObject(1, (b.find() - money));
pst.setObject(2, name);
pst.setObject(3, word);
int res = pst.executeUpdate();
if (res == 1) {
flag = true;
System.out.println("恭喜你开户成功" + "余额为" + (b.find()) + "元");
return;
} else {
System.out.println("对不起,你输入有误,开户失败");
}
con.close();
pst.close();
}else {
System.out.println("对不起,你的余额不足");
}
}
}
我们吧所有的功能都实现完成了,接下来便是顺序,逻辑问题,我们首先来到菜单,会有许多功能,但是这些功能我们现在是不能用的,因为用户没有注册,开户,所以我们利用那些成员变量条件语句判断,我们注册了,然后接下来便可以实现存钱,开户功能,开户了我们才能登陆,也就是能可以实现取钱功能,最后利用break来结束循环实现最后的退出功能。
以上就是我的银行管理系统,当然有许多bug,欢迎大佬帮我指出,不喜勿喷,谢谢!