简介
网上有很多类似的atm模拟设计,但是实在是和我们老师要求不太一样,所以我还是自己写了一份,不是特别完美,没有工厂模式和事务处理,但是也是相对而言比较不错了,当时评分是90,也属于A 。φ(>ω<*)
现在来看看效果图吧
代码实现
BookDAO接口
package instance.atm.dao;
import java.util.List;
public interface BookDAO {
public int update(double money,String name);
public int update1(String word,String name);
public double select(String name);
public double select1(String name,String password);
}
BookDAOImpl类
package instance.atm.dao;
import instance.atm.JDBCUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BookDAOImpl implements BookDAO {
private Connection con;
private PreparedStatement pstmt = null;
ResultSet resultSet=null;
public BookDAOImpl(){
con = JDBCUtil.getConnection();
}
@Override
public int update(double money, String name) {
int num = 0;
try {
pstmt = con.prepareStatement("update car set money = ? where name = ?");
pstmt.setDouble(1,money);
pstmt.setString(2,name);
num = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
@Override
public int update1(String word,String name) {
int num = 0;
try {
pstmt = con.prepareStatement("update car set password = ? where name = ?");
pstmt.setString(1,word);
pstmt.setString(2,name);
num = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
@Override
public double select(String name) {
double num1=0;
try {
pstmt=con.prepareStatement("select money from car where name='"+name+"';");
resultSet=pstmt.executeQuery();
while (resultSet.next()){
num1 = resultSet.getDouble("money");
}
} catch (SQLException e) {
e.printStackTrace();
}
return num1;
}
public double select1(String name,String word) {
double num1=0;
try {
pstmt=con.prepareStatement("select money from car where name='"+name+"' and password= '"+word+"'");
resultSet=pstmt.executeQuery();
while (resultSet.next()){
num1 = resultSet.getDouble("money");
}
} catch (SQLException e) {
e.printStackTrace();
}
return num1;
}
}
BookService接口
package instance.atm.service;
public interface BookService {
public int updateword(double money,String name);
public int updateword(String word,String name);
public double selectword1(String name);
public double selectword(String name,String word);
}
BookServicelmpl类
package instance.atm.service;
import instance.atm.dao.BookDAO;
public class BookServiceImpl implements BookService {
private BookDAO bookDAO;
public BookServiceImpl(BookDAO bookDAO){
this.bookDAO = bookDAO;
}
@Override
public int updateword(double money, String name) {
return bookDAO.update(money,name);
}
@Override
public int updateword(String word, String name) {
return bookDAO.update1(word,name);
}
public double selectword1(String name) {
return bookDAO.select(name);
}
@Override
public double selectword(String name, String word) {
return bookDAO.select1(name,word);
}
}
AtmTest类
package instance.atm;
import instance.atm.dao.BookDAO;
import instance.atm.dao.BookDAOImpl;
import instance.atm.service.BookService;
import instance.atm.service.BookServiceImpl;
import java.util.Scanner;
public class AtmTest{//银行
private Dl dl;
private Bank bank;
private String name;
private String password;
private double money;
private int sum;
BookDAO bookDAO = new BookDAOImpl();
BookService bookService = new BookServiceImpl(bookDAO);
public AtmTest(){
this.sum=1;
dl=new Dl();
bank=new Bank();
}
public AtmTest(String name, String password, double money){
this.name=name;
this.money=money;
this.password=password;
}
public void Test(){
dl.dl();
Scanner scanner=new Scanner(System.in);
String name=scanner.next();//nextLine
String word=scanner.next();
money=bookService.selectword(name,word);
if(money>0){
Car car=new Car(name,word,money);
dl.xs();
while(true) {
dl.xz();
sum++;
if (sum > 10) break;
switch (scanner.nextInt()) {
case 1: //1.取款
bank.drawMoney(car);
break;
case 2: //2.存款
bank.savemoney(car);
break;
case 3: //3.转账
bank.transfer(car);
break;
case 4: //4.查询
bank.query(car);
break;
case 5: //5.修改密码
bank.setpassword(car);
break;
case 6: //6.结束
dl.js();
System.exit(0);//退出
break;
default:
dl.zc();
break;
}}}else{
sum++;
if (sum > 5) {
dl.tc();
System.exit(0);
}
dl.sb();
Test();
}
}
}
Bank类
package instance.atm;
import instance.atm.dao.BookDAO;
import instance.atm.dao.BookDAOImpl;
import instance.atm.service.BookService;
import instance.atm.service.BookServiceImpl;
import java.util.Scanner;
public class Bank {
Scanner scanner = new Scanner(System.in);
Dl dl = new Dl();
private double money;
private int num ;
BookDAO bookDAO = new BookDAOImpl();
BookService bookService = new BookServiceImpl(bookDAO);
public Bank(){
this.money=0;
this.num=1;
}
public void drawMoney(Car car) {
dl.qk();
double s = scanner.nextDouble();
if (s > car.getMoney()) {
dl.mq();
} else {
s = car.getMoney() - s;
int num = bookService.updateword(s, car.getUsername());
if (num > 0) {
car.setMoney(s);
dl.qq();
}
}
}
public void setpassword(Car car) { //修改密码
dl.s1();
String paword = scanner.next();
if (paword.equals(car.getPassword())) {
dl.s2();
String newpassword1 = scanner.next();
dl.s3();
String newpassword2 = scanner.next();
if (newpassword1.equals(newpassword2)) {
int i=bookService.updateword(newpassword1,car.getUsername());
if (i > 0) {
dl.s4();
car.setPassword(newpassword1);
System.exit(0);
}
} else {
dl.s5();
setpassword(car);
}
} else {
num++;
if (num >= 5) {
dl.tc();
System.exit(0);
}
dl.s6();
setpassword(car);
}
}
public void savemoney(Car car) {
Scanner scanner = new Scanner(System.in);
dl.cq();
double s = scanner.nextDouble();
s = car.getMoney() + s;
int num = bookService.updateword(s, car.getUsername());
car.setMoney(s);
if (num > 0) {
dl.ck();
}
}
public void transfer(Car car) { //3.转账
dl.zz1();
String zh = scanner.next();
double s = scanner.nextDouble();
money = (int) bookService.selectword1(zh);
if (money > 0) {
if (s > car.getMoney()) {
dl.mq();
} else {
double a = s + money;
s = car.getMoney() - s;
int i = bookService.updateword(s, car.getUsername());
if (i > 0) {
bookService.updateword(a, zh);
car.setMoney(s);
dl.cz();
}
}
} else {
dl.zb();
}
}
public void query(Car car) { //4.查询
dl.cx1();
System.out.println("| " + car.getMoney() + " |");
dl.cx2();
}
}
Car类
package instance.atm;
public class Car {//卡个人信息
//账号,密码,余额
private String username;//账号
private String password;//密码
private double money;//余额
public Car() {
}
public Car(String username, String password, double money) {
this.username = username;
this.password = password;
this.money = money;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String toString() {
return "账号是:" + username + "\n密码是:" + password + "\n余额:" + money;
}
}
JDBCUtil类
package instance.atm;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
//resources
//properties
public class JDBCUtil {
private static String driver=null;
private static String url=null;
private static String username = null;
private static String password = null;
private static Connection con = null;
private static Statement stmt = null;
private static ResultSet rs = null;
static{
try{
InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
Properties prop = new Properties();
prop.load(in);
driver = prop.getProperty("driver");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
}catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
con = DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public static void release(Connection con,Statement stmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main类
package instance.atm;
public class Main {
public static void main(String[] args) {
AtmTest atmTest = new AtmTest();
atmTest.Test();
}
}
要加载mavan,还有定义资源文件
db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/atm?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
username=root
password=dengning
Dl类
package instance.atm;
public class Dl {
public void dl(){
System.out.println(
" =========欢迎使用本ATM机======== " +'\n'+
"| |" +'\n'+
"| 请输入账号: |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"| 请输入密码: |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void xs(){
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您已成功登陆 |" +'\n'+
"| 祝您使用愉快! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void xz(){
System.out.println(
"==========欢迎使用本ATM机==========" +'\n'+
"| |" +'\n'+
"| 请选择你需要的服务: |" +'\n'+
"| |" +'\n'+
"| 1.取款 2.存款 |" +'\n'+
"| |" +'\n'+
"| 3.转账 4.查询 |" +'\n'+
"| |" +'\n'+
"| 5.修改密码 6.结束 |" +'\n'+
"| |" +'\n'+
"|_______________________________|");
}
public void sb(){
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您的账号或密码错误 |" +'\n'+
"| 请您重新登陆! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void tc(){
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您的账号或密码 |" +'\n'+
"| 错误次数过多! |" +'\n'+
"| 如果需要继续操作 |" +'\n'+
"| 请联系前台工作人员 |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void qk(){//取款
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| |" +'\n'+
"| 请输入您要取款的金额: |" +'\n'+
"| |" +'\n'+
"| 1 2 3 |" +'\n'+
"| 4 5 6 |" +'\n'+
"| 7 8 9 |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void mq(){//金额不够
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您的账号余额不足 |" +'\n'+
"| 请您重新操作! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void qq(){//取钱
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您的现金即将放出 |" +'\n'+
"| 请您及时收取! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void cq(){//存钱
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| |" +'\n'+
"| 请输入您要存款的金额: |" +'\n'+
"| |" +'\n'+
"| 1 2 3 |" +'\n'+
"| 4 5 6 |" +'\n'+
"| 7 8 9 |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void ck(){//存款成功
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您已成功存款 |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void cx1(){//查询
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您的余额还有: |" );
}
public void cx2(){
System.out.println(
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void zz1(){//转账
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 请输入你要转的账号: |" +'\n'+
"| 请输入你要转的金额: |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void cz(){//转账成功
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您已成功转账 |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void zb(){//转账失败
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您输入的账号不存在 |" +'\n'+
"| 请您重新输入! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void s1(){//修改密码
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 请输入原密码: |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void s2(){//修改密码
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 请输入新密码: |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void s3(){//修改密码
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 请再次输入新密码: |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void s4(){
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 你已成功修改密码 |" +'\n'+
"| 请您重新操作! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void s5(){//金额不够
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您两次输入的密码不同 |" +'\n'+
"| 请您重新操作! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void s6(){//修改密码
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您输入的密码与原密码不相同 |" +'\n'+
"| 请重新输入: |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void js(){
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 感谢您的使用 |" +'\n'+
"| 期待您的再次使用! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
public void zc(){
System.out.println(
"=========欢迎使用本ATM机=========="+'\n'+
"| |" +'\n'+
"| 尊敬的用户: |" +'\n'+
"| 您好! |" +'\n'+
"| 您的输入有误 |" +'\n'+
"| 请您的重新输入! |" +'\n'+
"| |" +'\n'+
"| |" +'\n'+
"|______________________________|");
}
}