1 package per.sww.page; 2 3 import java.util.ArrayList; 4 5 import per.sww.dao.UserDao; 6 import per.sww.entity.User; 7 import per.sww.tools.ScannerChoice; 8 9 public class MainPage { 10 11 public static void main(String[] args) { 12 MainPage.mainpage(); 13 } 14 15 16 public static void mainpage(){ 17 System.out.println("▂▂▂▂▂▂▂▂▂▂欢迎使用自助银行系统▂▂▂▂▂▂▂▂▂▂"); 18 System.out.println("1.账号登录"); 19 System.out.println("0.退出系统"); 20 System.out.println("▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂"); 21 22 do { 23 String choice=ScannerChoice.ScannerinfoString(); 24 String regex="[0-1]"; 25 if(choice.matches(regex)){ 26 int info=Integer.parseInt(choice); 27 switch (info) { 28 case 0: 29 System.out.println("谢谢使用,再见!"); 30 System.exit(1); 31 break; 32 case 1: 33 int Loginfrequency=3; 34 while (Loginfrequency!=0) { 35 System.out.println("\t\t请输入账号:"); 36 String useName=ScannerChoice.ScannerinfoString(); 37 System.out.println("\t\t请输入密码:"); 38 String usePwd=ScannerChoice.ScannerinfoString(); 39 ArrayList<User> usersList=new UserDao().checkLogin(useName); 40 if(usersList == null || usersList.size()==0){ 41 System.err.println("\t!!用户名输入有误!!\n"); 42 System.out.println("\n剩余登陆次数:" + Loginfrequency); 43 }else { 44 User user=usersList.get(0); 45 if(usePwd.equals(user.getUserPassword())){ 46 System.out.println("\t ■ ■ ■ ■ ■ ■ ■ ■ 账户成功登陆 ■ ■ ■ ■ ■ ■ ■ ■ "); 47 LoginPage(user.getUserId()); 48 }else { 49 System.err.println("\t!!密码错误!!\n"); 50 System.out.println("\n剩余登陆次数:" + Loginfrequency); 51 } 52 } 53 } 54 System.out.println("■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■"); 55 System.err.println("\t!!您已被开除!"); 56 System.exit(1); 57 break; 58 case 2: 59 System.out.println("■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■"); 60 System.err.println("\t\t您已经退出系统!"); 61 System.exit(-1); 62 break; 63 default: 64 break; 65 } 66 } 67 } while (true); 68 } 69 70 71 /** 72 * 登录成功 73 * @param userId 74 */ 75 public static void LoginPage(int userId) { 76 System.out.println("▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂"); 77 System.out.println("\t\t1.查询余额"); 78 System.out.println("\t\t2.存款"); 79 System.out.println("\t\t2.取款"); 80 System.out.println("\t\t3.删除记录"); 81 System.out.println("\t\t0.返回上级"); 82 System.out.println("▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂"); 83 do { 84 String choice=ScannerChoice.ScannerinfoString(); 85 String regex="[0-4]"; 86 if(choice.matches(regex)){ 87 int info=Integer.parseInt(choice); 88 switch (info) { 89 case 0: 90 mainpage(); 91 break; 92 case 1: 93 UserDao.QueryBalance(); 94 break; 95 case 2: 96 UserDao.Deposit(); 97 break; 98 case 3: 99 UserDao.withdrawMoney(); 100 break; 101 case 4: 102 UserDao.DeleteRecord(); 103 break; 104 default: 105 break; 106 } 107 } 108 System.err.println("\t\t输入有误!"); 109 } while (true); 110 } 111 }
1 package per.sww.dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 9 import per.sww.db.DbClose; 10 import per.sww.db.DbConn; 11 import per.sww.entity.User; 12 import per.sww.page.MainPage; 13 import per.sww.tools.ScannerChoice; 14 15 public class UserDao { 16 Connection conn=null; 17 PreparedStatement ps=null; 18 ResultSet rs=null; 19 20 public ArrayList<User> checkLogin(String useName) { 21 ArrayList<User> users=new ArrayList<User>(); 22 conn=DbConn.getConn(); 23 String sql="SELECT USERID,USERPASSWORD,USERMONEY FROM USERS WHERE USERNAME=?"; 24 try { 25 ps=conn.prepareStatement(sql); 26 ps.setString(1, useName); 27 rs=ps.executeQuery(); 28 while (rs.next()) { 29 int userId=rs.getInt("userId"); 30 String userPassword=rs.getString("userPassword"); 31 double userMoney=rs.getDouble("userMoney"); 32 33 User user=new User(userId, userPassword, userMoney); 34 users.add(user); 35 } 36 } catch (SQLException e) { 37 e.printStackTrace(); 38 }finally { 39 DbClose.whole(ps, conn, rs); 40 } 41 return users; 42 } 43 44 /** 45 * 查询余额 46 */ 47 public static void QueryBalance() { 48 49 } 50 51 /** 52 * 存款 53 */ 54 public static void Deposit() { 55 System.out.println("存款"); 56 do { 57 System.out.println("请放入你要存取的金额!"); 58 double Money=ScannerChoice.ScannerInfo(); 59 if("0".equals(Money)){ 60 MainPage.mainpage(); 61 }else if(Money<100){ 62 System.out.println("存款金额最少为100!"); 63 Deposit(); 64 65 }else { 66 //这里需要实现用户存入的金额跟他本来的金额累加,不会了- - 67 } 68 } while (true); 69 } 70 71 /** 72 * 取款 73 */ 74 public static void withdrawMoney() { 75 76 } 77 78 /** 79 * 删除记录 80 */ 81 public static void DeleteRecord() { 82 83 } 84 85 86 }
1 package per.sww.tools; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 9 import per.sww.db.DbClose; 10 import per.sww.db.DbConn; 11 import per.sww.entity.User; 12 13 public class QueryPrint { 14 15 Connection conn=null; 16 PreparedStatement ps=null; 17 ResultSet rs=null; 18 19 public ArrayList<User> queryMoney(int userId, String userName) { 20 ArrayList<User> users=new ArrayList<User>(); 21 conn=DbConn.getConn(); 22 String sql="SELECT * FROM USERS WHERE USERID=? OR USERNAME=?"; 23 try { 24 ps=conn.prepareStatement(sql); 25 ps.setInt(1, userId); 26 ps.setString(2, userName); 27 rs=ps.executeQuery(); 28 while (rs.next()) { 29 int UserId=rs.getInt("userId"); 30 String UserName=rs.getString(2); 31 String userPassword=rs.getString(3); 32 double userMoney=rs.getDouble(4); 33 34 User user=new User(UserId, UserName, userPassword, userMoney); 35 users.add(user); 36 } 37 } catch (SQLException e) { 38 e.printStackTrace(); 39 }finally { 40 DbClose.whole(ps, conn, rs); 41 } 42 return users; 43 } 44 45 }
1 package per.sww.entity; 2 3 public final class User { 4 5 private int userId; 6 private String userName; 7 private String userPassword; 8 private double userMoney; 9 10 11 public User(int userId,String userName) { 12 this.userId=userId; 13 this.userName=userName; 14 } 15 public User(int userId,double userMoney) { 16 this.userId=userId; 17 this.userMoney=userMoney; 18 } 19 public User(String userName,String userPassword) { 20 this.userName=userName; 21 this.userPassword=userPassword; 22 } 23 public User(int userId,String userPassword,double userMoney) { 24 this.userId=userId; 25 this.userPassword=userPassword; 26 this.userMoney=userMoney; 27 } 28 29 public User(int userId,String userName,String userPassword,double userMoney) { 30 this.userId=userId; 31 this.userName=userName; 32 this.userPassword=userPassword; 33 this.userMoney=userMoney; 34 } 35 36 37 public int getUserId() { 38 return userId; 39 } 40 public void setUserId(int userId) { 41 this.userId = userId; 42 } 43 public String getUserName() { 44 return userName; 45 } 46 public void setUserName(String userName) { 47 this.userName = userName; 48 } 49 public String getUserPassword() { 50 return userPassword; 51 } 52 public void setUserPassword(String userPassword) { 53 this.userPassword = userPassword; 54 } 55 public double getUserMoney() { 56 return userMoney; 57 } 58 public void setUserMoney(double userMoney) { 59 this.userMoney = userMoney; 60 } 61 }
如题,想半天实在没绕过来= =
现在有什么问题?
没思路了,不知道怎么做
@眉间剪水泛千愁: 不清楚你要做啥,但是
double userMoney=rs.getDouble(4); 这里需要注意,如果select * 查询出来的字段索引发生变化就出问题了。
@waiter: 现在不知道怎么才能把userMoney取出来
@眉间剪水泛千愁:
//这里需要实现用户存入的金额跟他本来的金额累加,不会了- -
可以直接update USERS Set USERMONEY=USERMONEY+金额数 WHERE USERNAME=?
@waiter: 现在离那一步还很远很远
你可以在MainPage中定義一個User變量:如
public User session_user = null; //暫時存放已登錄成功的用戶信息
假如登錄成功之後,你就將查詢出來的user資料賦值給MainPage的session_user,你要什麼,就可以直接session_user點出來了。
假如出現了如@waiter 說的 double userMoney=rs.getDouble(4); 会報錯,你可以像UserDao下的checkLogin方法中的sql一樣,指定查詢的字段
没有session
@眉间剪水泛千愁: 清楚,我是說暫時用一個變量來存放你查詢出來的用戶資料...。哪里用User比较频繁些,你就把它定义在哪里。
@wakasann: 我现在有它的ID了,但是需要查它的money,public static void LoginPage(int userId) {
@眉间剪水泛千愁: 当然,为了显示的userMoney是最新的数据,可以根据用户ID查询数据库中指定用户的money。不太建议你UserDao中的方法都定义为static方式的。
@wakasann: 我头乱了,无所谓了,反正天天被骂
@wakasann: 骂也骂过了.
@眉间剪水泛千愁: 怎么了...?思绪乱,可能是太急了。获取userMoney,根据用户ID查询用户资料就可以获取到的。
@wakasann: userID获取到了,接下来也不会做,天天挨骂的命,快习惯了
@眉间剪水泛千愁: 你是否有LoginPage(int UserId)方法,这里应该是根据UserId查询user,返回User,在调用的地方接收这个结果,System.otu.println(user.userMoney);出应该就可以了
@眉间剪水泛千愁:
比如:
/** * 根据用户Id获取用户的money * @param int userId * @return double monty */ public double getMoneyById(int userId) { double money = 0; conn=DbConn.getConn(); String sql="SELECT USERMONEY FROM USERS WHERE USERID=? "; try { ps=conn.prepareStatement(sql); ps.setInt(1, userId); rs=ps.executeQuery(); while (rs.next()) { money =rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); }finally { DbClose.whole(ps, conn, rs); } return money; }
调用示例
GoodsDao dao2 = new GoodsDao(); double money = dao2.getMoneyById(1); System.out.println(money);
在复制你的代码,才发现你关闭连接方法名定义不是很恰当....
DbClose.whole(ps, conn, rs); 应该是DbClose.close(ps, conn, rs);
建议你的方法名定义可以根据用途进行命名,假如方法名不清楚如何定义,可以用词典翻译用途名称嘛。
骂你自然是为了让你进步了...做不好自然会被骂...
@wakasann: 谢谢
@眉间剪水泛千愁:
/** * 存款 * @param int UserId */ public void Deposit(int UserId) { System.out.println("存款"); do { System.out.println("请放入你要存取的金额!"); double Money=ScannerChoice.ScannerInfo(); if("0".equals(Money)){ MainPage.mainpage(); }else if(Money<100){ System.out.println("存款金额最少为100!"); Deposit(UserId); }else { //这里需要实现用户存入的金额跟他本来的金额累加,不会了- - //这里可以直接使用sql语句进行累积金额 conn = DbConn.getconn(); String sql = "UPDATE USERS set USERMONEY+=? where USERID=?"; try { ps = conn.prepareStatement(sql); ps.setDouble(1,Money); ps.setInt(2,UserId); int result = ps.executeUpdate(); //后面可以用result判断更新成功或者失败的代码... } catch (SQLException e) { e.printStackTrace(); }finally { //需要多谢一个关闭连接方法,只需传ps,conn两个参数的 //DbClose.whole(ps, conn, rs); //DbClose.close2(ps,conn); } } } while (true); }
存款的基本思路
@wakasann: 现在做成这样子,
1 package per.sww.page; 2 3 import java.util.ArrayList; 4 5 import per.sww.dao.UserDao; 6 import per.sww.entity.User; 7 import per.sww.tools.ScannerChoice; 8 9 public class MainPage { 10 11 public static void main(String[] args) { 12 MainPage.mainpage(); 13 } 14 15 /** 16 * 主界面 17 */ 18 public static void mainpage(){ 19 System.out.println("▂▂▂▂▂▂▂▂▂▂欢迎使用自助银行系统▂▂▂▂▂▂▂▂▂▂"); 20 System.out.println("1.账号登录"); 21 System.out.println("0.退出系统"); 22 System.out.println("▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂"); 23 24 do { 25 String choice=ScannerChoice.ScannerinfoString(); 26 String regex="[0-1]"; 27 if(choice.matches(regex)){ 28 int info=Integer.parseInt(choice); 29 switch (info) { 30 case 0: 31 System.out.println("谢谢使用,再见!"); 32 System.exit(1); 33 break; 34 case 1: 35 int Loginfrequency=3; 36 while (Loginfrequency!=0) { 37 System.out.println("\t\t请输入账号:"); 38 String useName=ScannerChoice.ScannerinfoString(); 39 System.out.println("\t\t请输入密码:"); 40 String usePwd=ScannerChoice.ScannerinfoString(); 41 ArrayList<User> usersList=new UserDao().checkLogin(useName); 42 if(usersList == null || usersList.size()==0){ 43 System.err.println("\t!!用户名输入有误!!\n"); 44 System.out.println("\n剩余登陆次数:" + Loginfrequency); 45 }else { 46 User user=usersList.get(0); 47 if(usePwd.equals(user.getUserPassword())){ 48 System.out.println("\t ■ ■ ■ ■ ■ ■ ■ ■ 账户成功登陆 ■ ■ ■ ■ ■ ■ ■ ■ "); 49 LoginPage(user.getUserId()); 50 }else { 51 System.err.println("\t!!密码错误!!\n"); 52 System.out.println("\n剩余登陆次数:" + Loginfrequency); 53 } 54 } 55 } 56 System.out.println("■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■"); 57 System.err.println("\t!!您已被开除!"); 58 System.exit(1); 59 break; 60 case 2: 61 System.out.println("■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■"); 62 System.err.println("\t\t您已经退出系统!"); 63 System.exit(-1); 64 break; 65 default: 66 break; 67 } 68 } 69 } while (true); 70 } 71 72 73 /** 74 * 登录成功 75 * @param userId 76 */ 77 public static void LoginPage(int userId) { 78 System.out.println("▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂"); 79 System.out.println("\t\t1.查询余额"); 80 System.out.println("\t\t2.存取款"); 81 System.out.println("\t\t3.删除记录"); 82 System.out.println("\t\t0.返回上级"); 83 System.out.println("▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂"); 84 do { 85 String choice=ScannerChoice.ScannerinfoString(); 86 String regex="[0-4]"; 87 if(choice.matches(regex)){ 88 int info=Integer.parseInt(choice); 89 switch (info) { 90 case 0: 91 mainpage(); 92 break; 93 case 1: 94 95 break; 96 case 2: 97 UserPage.CreatMoney(); 98 break; 99 case 3: 100 101 break; 102 default: 103 break; 104 } 105 } 106 System.err.println("\t\t输入有误!"); 107 } while (true); 108 } 109 }
1 package per.sww.page; 2 3 import per.sww.entity.User; 4 import per.sww.tools.ScannerChoice; 5 6 public class UserPage { 7 8 public static void CreatMoney() { 9 System.out.println("存款金额:"); 10 double money=ScannerChoice.ScannerInfo(); 11 User userMoney=new User(); 12 } 13 }
1 package per.sww.dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 9 10 import per.sww.db.DbClose; 11 import per.sww.db.DbConn; 12 import per.sww.entity.User; 13 14 public class UserDao { 15 Connection conn=null; 16 PreparedStatement ps=null; 17 ResultSet rs=null; 18 19 public ArrayList<User> checkLogin(String useName) { 20 ArrayList<User> users=new ArrayList<User>(); 21 conn=DbConn.getConn(); 22 String sql="SELECT USERID,USERPASSWORD,USERMONEY FROM USERS WHERE USERNAME=?"; 23 try { 24 ps=conn.prepareStatement(sql); 25 ps.setString(1, useName); 26 rs=ps.executeQuery(); 27 while (rs.next()) { 28 int userId=rs.getInt("userId"); 29 String userPassword=rs.getString("userPassword"); 30 double userMoney=rs.getDouble("userMoney"); 31 32 User user=new User(userId, userPassword, userMoney); 33 users.add(user); 34 } 35 } catch (SQLException e) { 36 e.printStackTrace(); 37 }finally { 38 DbClose.whole(ps, conn, rs); 39 } 40 return users; 41 } 42 43 /** 44 * 存取款 45 */ 46 public boolean CreatMoney(User user,double money) { 47 double onemoney=0.00; 48 double twomoney=0.00; 49 conn=DbConn.getConn(); 50 String sql="SELECT USERMONEY FROM USERS WHERE GID=?"; 51 try { 52 ps=conn.prepareStatement(sql); 53 ps.setInt(1, user.getUserId()); 54 rs=ps.executeQuery(); 55 while (rs.next()) { 56 onemoney=rs.getDouble("userMoney"); 57 } 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 }finally { 61 DbClose.whole(ps, conn, rs); 62 } 63 twomoney=onemoney+money; 64 65 if (twomoney < 0) { 66 System.out.println("余额不足 "); 67 return false; 68 } 69 70 conn = DbConn.getConn(); 71 String msql = "UPDATE SET uMoney = ? FROM users WHERE uName = ?;"; 72 try { 73 ps = conn.prepareStatement(msql); 74 } catch (Exception e) { 75 e.printStackTrace(); 76 }finally { 77 DbClose.whole(ps, conn, rs); 78 } 79 return false; 80 } 81 }
都是抄的,= =还是不对,到最后一步存钱的时候提示输入有误
1 ▂▂▂▂▂▂▂▂▂▂欢迎使用自助银行系统▂▂▂▂▂▂▂▂▂▂ 2 1.账号登录 3 0.退出系统 4 ▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂ 5 请输入: 6 1 7 请输入账号: 8 请输入: 9 admin 10 请输入密码: 11 请输入: 12 123456 13 ■ ■ ■ ■ ■ ■ ■ ■ 账户成功登陆 ■ ■ ■ ■ ■ ■ ■ ■ 14 ▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂ 15 1.查询余额 16 2.存取款 17 3.删除记录 18 0.返回上级 19 ▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂ 20 请输入: 21 2 22 存款金额: 23 请输入: 24 200.00 25 输入有误! 26 请输入:
@眉间剪水泛千愁:
hmmm,发现下面几个问题
@wakasann: 但是按你那样改了报错
@眉间剪水泛千愁: 是哪一步?
@眉间剪水泛千愁: 看完代碼之後,想哭了....
@wakasann: 肿么了?我发了新的,30豆豆的
@wakasann: UserPage.CreatMoney(User user),参数会报错