2、变量介绍93.1.3 方法介绍103.2.1 代码103.4 dataAccess类1834.1 方法及成员变量介绍183.4.2 代码183.5 moneyMachine类193.5.1 方法及成员变量介绍193.5.2 代码193.6 readCard类203.6.1 方法介绍203.6.2 代码204代码调试20总 结22参考文献231设计内容本系统主要实现ATM提款机的主要功能,包括系统自动识别卡号,验证用户信息(如果输入的密码三次错误时,系统自动扣留本信用卡),查询当前用户信用卡的余额,修改用户密码,打印清单,取款等功能。2总体设计本系统包含六大类:Account类、Atm类、ATM。
3、Screen类、dataAccess类、moneyMachine类、readCard类,用于实现ATM提款机日常操作功能。类之间的组合关系如图2.1所示:dataAccessAtmATMScreenAccountmoneyMachinereadCard图2.1类之间的组合关系2.1 Account类Account(用户账户)类:主要包含用户信息的验证、余额查询和扣除取款数等方法,实现修改用户密码、验证用户信息、查询余额和自动扣除取款钱数等操作。2.2 Atm类Atm(系统)类:是系统主方法的开始,负责调用其他类。2.2 ATMScreen类ATMScreen(ATM屏幕)类:主要创建各操作窗体。
4、和相应按钮事件,通过创建不同的方法来实现ATM提款机的取款、查询余额、修改用户密码、退出操作界面等功能。2.4 dataAccess类dataAccess(数据操作)类:包含用于数据库的相关操作,是JAVA语言与数据库进行交互的关键。2.4 moneyMachine类moneyMachine(取钱机)类:只用于帮助用户打印清单操作。2.4 readCard类readCard(读卡机)类:包含读取用户卡号和退卡(退出系统)操作。3详细设计3.1 Account类3.1.1 成员变量介绍在Account类中实例化了dataAccess类,创建changePwd()方法,用于修改密码;创建返回值类型。
5、为布尔型的checkAccount()和checkPwd()方法,用于验证用户信息;创建srting类型的ssql,用于和数据库中的信息进行交互,从而保证验证的准确性;创建浮点型的queryBalance()和布尔型的reduceMoney()方法,实现及时更新信用卡中的余额,避免系统出现余额数据的错误。3.1.2 方法介绍Account类中创建了5个方法,分别为changePwd()、checkAccount()、 checkPwd()、 queryBalance()和reduceMoney(),实现ATM提款机的修改用户密码、验证用户ID和密码、查询余额和扣除取款数的功能。3.1.4 代码。
6、import java.sql.*;import java.io.*;public class Account dataAccess das=new dataAccess();public int changePwd(String gid,String pwd,String oldPwd,String newPwd,String newPwd2) if(newPwd.length()=0 | newPwd.trim().equals() return -3; else if(oldPwd.equals(pwd) if(newPwd.equals(newPwd2)das.exeSql(updat。
7、e guest set pwd=+newPwd+ wheregid=+gid+);return 1; elsereturn -2; elsereturn -1; public boolean checkAccount(String tid) String ssql; ssql=select * from guest where gid=+tid+; if(das.getRowcount(ssql)0) return true; else return false; public boolean checkPwd(String tid,String tpwd) String ssql;ssql=。
8、select * from guest where pwd=+tpwd+ and gid=+tid+;if(das.getRowcount(ssql)0) return true;elsereturn false;public float queryBalance(String gid) ResultSet rs;String ssql=select * from guest where gid=+gid+;float balance=0;try rs=das.getData(ssql);rs.next();balance=rs.getFloat(gmoney);catch(Exception。
9、 e) System.out.println(e.toString();finally return balance; public boolean reduceMoney(String tgid,float money) String ssql;if(this.queryBalance(tgid)0)/用户ID验证 if(!act.checkAccount(rcd.getCardID(ta.getText() msghint.setText(非法用户ID,请重新输入!);ta.setText();dac.sleep(2);msghint.setText();else ta.setEchoCh。
10、ar(*);msgstr.setText(请输入密码:);this.gid=ta.getText(); ta.setText();return;if(msgstr.getText().indexOf(密码)0)/密码验证操作if(!act.checkPwd(gid,ta.getText() msghint.setText(密码错误,请重新输入!);ta.setText();dac.sleep(2);msghint.setText();else ta.setEchoChar(0);clt.show(fram,Menu);this.pwd=ta.getText(); return;if(msgst。
11、r.getText().indexOf(金额)0)/手动输入金额操作 trygmoney=Float.parseFloat(ta.getText();if(act.reduceMoney(gid,gmoney) lblMsg.setText(mce.printBill(gmoney,gid,act.queryBalance(gid);nstate=3;else lblMsg.setText(余额不足!);nstate=3;catch(NumberFormatException e2)/输入非法的金额 lblMsg.setText(您输入的金额错误!);nstate=2;finallyclt.s。
12、how(fram,Msg);return;if(e.getSource()=a4 | e.getSource()=b8 | e.getSource()=c2 | e.getSource()=d2 |e.getSource()=x1 | e.getSource()=y1 e.getSource()=quit) this.gid=; this.pwd=;act.finalize(); dac.finalize(); rcd.exitCard();if(e.getSource()=a1)/进入取款界面clt.show(fram,Getmoney);return;if(e.getSource()=a2。
13、)/进入余额查看界面 float mleft=act.queryBalance(gid);lbleft.setText(帐号余额为:$ +mleft);clt.show(fram,Queryleft);return;if(e.getSource()=a3)/进入密码修改界面 clt.show(fram,Chgpwd);return;if(e.getSource()=b1)/执行取款100操作 if(!act.reduceMoney(gid,100) lblMsg.setText(余额不足!);elselblMsg.setText(mce.printBill(100,gid,act.queryB。
14、alance(gid);nstate=3;clt.show(fram,Msg);return;if(e.getSource()=b2)/执行取款300操作 if(!act.reduceMoney(gid,300) lblMsg.setText(余额不足!);else lblMsg.setText(mce.printBill(300,gid,act.queryBalance(gid);nstate=3;clt.show(fram,Msg);return;if(e.getSource()=b3)/执行取款500操作 if(!act.reduceMoney(gid,500) lblMsg.setTe。
15、xt(余额不足!);elselblMsg.setText(mce.printBill(500,gid,act.queryBalance(gid);nstate=3;clt.show(fram,Msg);return;if(e.getSource()=b4)/执行取款800操作 if(!act.reduceMoney(gid,800) lblMsg.setText(余额不足!);elselblMsg.setText(mce.printBill(800,gid,act.queryBalance(gid);nstate=3;clt.show(fram,Msg);return;if(e.getSour。
16、ce()=b5)/执行取款1000操作 if(!act.reduceMoney(gid,1000) lblMsg.setText(余额不足!);elselblMsg.setText(mce.printBill(1000,gid,act.queryBalance(gid);nstate=3;clt.show(fram,Msg);return;if(e.getSource()=b6)/进入手动输入金额取款界面 y2.setVisible(true);msgstr.setText(请输入金额);ta.setText();msghint.setText();clt.show(fram,input);r。
17、eturn;if(e.getSource()=dok)/执行修改密码操作 int t=act.changePwd(gid,pwd,oldpwd.getText(),newpwd1.getText(),newpwd2.getText();if(t=-1)lblMsg.setText(原密码输入错误!); nstate=1;else if(t=-2)lblMsg.setText(两次密码输入不同!); nstate=1;else if(t=-3)lblMsg.setText(新密码不能为空!); nstate=1;if(t=1) lblMsg.setText(密码修改成功!); nstate=3;。
18、 this.pwd=newpwd1.getText();oldpwd.setText();newpwd1.setText(); newpwd2.setText();clt.show(fram,Msg);return;if(e.getSource()=back) if(nstate=1) clt.show(fram,Chgpwd); else if(nstate=2) clt.show(fram,input);ta.setText(); else if(nstate=3) clt.show(fram,Menu);if(e.getSource()=b7 | e.getSource()=c1 | e。
19、.getSource()=d1) clt.show(fram,Menu);if(e.getSource()=y2) clt.show(fram,Getmoney);3.4 dataAccess类34.1 方法及成员变量介绍dataAccess类主要是实现Java与数据库的交互,类中创建了构造函数dataAccess用于连接数据库,创建getData()方法,以数据集的形式返回数据。3.4.2 代码import java.sql.*;import java.io.*;public class dataAccess private Connection conn;private Statement。
20、 stmt; public dataAccess() /构造函数设置连接数据库 tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);String dburl =jdbc:odbc:driver=Microsoft Access Driver (*.mdb);DBQ=Dataatm.mdb;conn=DriverManager.getConnection(dburl);stmt=conn.createStatement(); catch(Exception e1) System.out.println(e1.toString(); public Resu。
21、ltSet getData(String sqlstr) try ResultSet rs=this.stmt.executeQuery(sqlstr);return rs;catch(Exception e) System.out.println(e.toString();return null;public int getRowcount(String sqlstr) int i=0;try ResultSet rs=this.getData(sqlstr); while(rs.next() i+;catch(Exception e) System.out.println(e.toStri。
22、ng();finallyreturn i; public boolean exeSql(String sqlstr)try stmt.execute(sqlstr);return true; catch(Exception e) System.out.println(e.toString();return false; public void sleep(int second)try Thread th=new Thread(); th.sleep(second*1000);catch(Exception e) System.out.println(e.toString();protected。
23、 void finalize()/析构函数 tryif(stmt!=null) stmt.close();if(conn!=null) conn.close();catch(Exception e) 3.5 moneyMachine类3.5.1 方法及成员变量介绍本类中创建了一个printBill()方法,用于打印清单。定义了一个字符串型的变量msg,把参数值赋值给msg,并输出,完成打印订单的操作。3.5.2 代码public class moneyMachine public String printBill(float money,String gid,float leftmoney) 。
24、String msg;msg=帐号: +gid+ ;msg+=操作类型: 取款+ ;msg+=操作金额: +money+ ;msg+=帐号余额: +leftmoney+ ;return msg;3.6 readCard类3.6.1 方法介绍在readCard类中,创建getCardID()和exitCard()方法,分别用于读卡号和退出本系统操作。3.6.2 代码public class readCard public void exitCard()/ System.exit(0); public String getCardID(String carID)/ return carID; 4代。
25、码调试在对ATM提款机进行开发的时候,曾出现无法与数据库进行连接的状况,下面是解决连接输错的具体步骤:1. 软件安装和帐户设定1-1、安装“MS Sql Server 2005(SP2)”(内置帐户选择本地账户,登陆模式选Windows与SQL混合模式,密码可任设;如果没有设置内置帐户sa的话,请直接使用WinNT登录“SQL Server Management Studio”,选择安全性 登录名 sa 登录属性,然后设置密码,关闭“SQL Server Management Studio”)1-2、安装“MyEclipse 6.6.1 GA”(或其它版本)1-3、下载连接驱动包“sqljdb。
26、c.jar”2. 设置SQL Server服务器:2-1,“开始” “程序” “Microsoft SQL Server 2005” “配置工具” “SQL Server Configuration Manager”(确认“SQL Server Management Studio”已关闭)2-2、“SQL Server 2005 服务”中停止服务“SQL Server (SQLEXPRESS)”(默认是启动状态)2-3、“SQL Server 2005 网络配置” “MSSQLSERVER 的协议”,启动“TCP/IP”(默认是禁用状态),然后双击“TCP/IP”进入属性设置,在“IP 地址”。
27、里,确认“IPAll”中的“TCP 端口”为14332-4、“SQL Server 2005 服务”中启动服务“SQL Server (MSSQLSERVER )”(默认是停止状态)2-5、关闭“SQL Server Configuration Manager”(此时可以启动“SQL Server Management Studio”,并用帐户sa、密 码登录,SQL Server服务器设置正确的话应该能登录成功)3. 创建测试数据库和表:启动“SQL Server Management Studio”,并用帐户sa、密码登录(SQL Server服务器设置正确的话应该能登录成功),创建一个数。
28、据库JSPTest,内建一个表register4、创建测试的Java工程和代码4(1)启动“MyEclipse” “File” “New” “Project” “Java Project”,命名为Test(2)打开Test的“Properties” “Java Build Path” “Libraries” “Add External JARs” ,选择下载好的连接驱动包“sqljdbc.jar”,然后点击“OK”确定(3)创建一个测试类,编写如下代码:import java.sql.*;public class Test public static void main(String args。
29、) Connection con=null;Statement stmt=null;ResultSet rs=null;try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); con=DriverManager.getConnection(jdbc:sqlserver:/localhost:1433;DatabaseName=JSPTest,sa,sa);/ Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); con= DriverManager.getConnection(jdbc。
30、:odbc:JDBCSQLDemo_JSPTest);stmt = con.createStatement();rs = stmt.executeQuery(select userName,passWord,email from regist);while(rs.next()String strUserName = rs.getString(1);String strPassWord = rs.getString(2);String strEmail = rs.getString(email); System.out.println(strUserName+t+strPassWord+t+st。
31、rEmail+t);if(rs!=null)rs.close();if(stmt!=null)stmt.close();if(con!=null)con.close();catch (Exception e) e.printStackTrace();FinallySystem.out.println(演示完毕!); (4)执行代码,应该显示register表的数据(5)代码中注释的部分为ODBC桥连接代码,可以选用(6)如果你以前用JDBC连接SQL Server 2000的话就要注意了:在SQL Server2000 中加载驱动和URL路径的语句是“com.microsoft.jdbc.sqlserver.SQLServerDriver”“jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=JSPTest”而SQL Server 2005 中加载驱动和URL的语句则为“com.microsoft.sqlserver.jd。