ATM自动取款机需求 一.登陆 1.界面要求:服务选择 1.老用户登陆:进入后输入卡号密码登陆 2.新用户开户:开户需要输入身份证号,记录姓名,开户时间。然后机器给出卡号,原始密码:111111。 卡号:当前系统时间的毫秒数:new Date().getTime(); 卡号=“ICBC”+毫秒数; 二.服务选择 用户登陆后显示服务选择菜单:存款,取款,汇款,修改密码,查看余额。 将五个功能写成五个方法,在菜单选项中去调用 三.存款 此操作是已登录用户,输入存款金额,直接打到用户的账户上 //可以在登陆或者新建用户时将卡号设置为全局变量保存,随时可以调用 四.取款 此操作是已登录用户,输入取款金额,判断是否有足够余额,直接从用户的账户取出(要求:每次不大于3000,每天不超过5w) 1.查询余额。 2.判断当次金额3000以内 3.查询操作记录表:查询当天取款总金额 4.把查询出的总金额+当前要取款金额>1w 5.取款成功后记录本次操作: 五.汇款 此操作是已登录用户,输入汇款人账号,显示汇款人信息,确认后再输入金额,判断余额是否足够,然后打款。(要求单笔金额上限5000,每天不超过10w) 1.查询汇款人信息: 2.确认后,再查询当前用户余额是否足够: 3.判断当次金额5000以内 4.查询操作记录表:查询当天汇款总金额 5.把查询出的总金额+当前要取款金额>1w 6.汇款成功后记录本次操作: 六.修改密码(密码必须是6位) 此操作是已登录用户,进入修改密码服务,提示输入原始密码,提示输入新密码,提示再次确认,然后修改成功 七.查看余额 此操作是已登录用户,查看当前账户的余额。 八.退卡操作:此操作后需要重新登录或者回到最起始界面。其他功能操作完后都回到服务选择菜单。 附加功能:1.对账单 2.用户数据备份 3.用户数据恢复 1.对账单:用户能够查询自己的交易记录,并生成txt文档保存 要求:用户输入起止日期,得到txt对账单 对账单格式如下: 卡号:123902939928989182 日期:2015-09-15-----2015-09-30 操作时间 操作类型 交易金额 2015-09-15 12:12:12 存款 +10000 2015-09-30 11:11:11 汇款 -5000 ………………… 汇总: 存款:+25423 取款:-22221 汇款:-12233 2.用户数据备份 要求:将所有用户信息写入到xml文档保存 Xml格式如下: <users> <user id="1"> <cardid>87348719283389382983cardid> <sfzid>430909203920901233sfzid> <createtime>2011-09-09 23:12:12createtime> <balance>20933.22balance> <password>998822password> user> <users> 3.用户数据恢复 将保存的xml文档里面的数据还原到数据库中
设计表
建表
drop table user_info drop table operate_info select * from user_info; select * from user_infobak; select * from type_info; select * from operate_info; delete from user_infobak; --创建用户表 create table user_info( user_id number primary key, user_cardnum varchar2(30) not null unique, user_name varchar2(30), user_idcard varchar2(30) not null, user_password char(6) default '111111', user_opentime date, user_money number(18,2) check(user_money>0 or user_money=0) not null, user_status char(1) ) --创建操作类型表 create table type_info( type_id number primary key, type_name varchar2(30) not null ) --创建操作记录表 create table operate_info( operate_id number primary key, operate_time date not null, operate_money number(15) not null, user_cardnum varchar2(30), second_cardnum varchar2(30), type_id number, foreign key (user_cardnum) references user_info (user_cardnum), foreign key (type_id) references type_info (type_id) ) --分别创建操作类型表、操作记录表序列 create sequence sq_user nocache; create sequence sq_type nocache; create sequence sq_operate nocache; --在码表中加入数据 insert into type_info values(sq_type.nextval,'存款'); insert into type_info values(sq_type.nextval,'取款'); insert into type_info values(sq_type.nextval,'汇款'); --1.1新用户开户(开户时就会自动存款10元) insert into user_info values ('ICBC'||to_char((sysdate-to_date('1970-01-01','yyyy-mm-dd'))*86400000),'宋江','430124201701017925',123456,sysdate,10); --1.1老用户登录 select * from user_info where user_cardno='ICBC1512573295000' and user_password='123456'; --2.1存款
开发后的文件目录
dao层、service、pojo类代码就不贴出了,这里仅贴出view层代码。。。。
Menu.java
1 /* 2 * 主菜单 3 * 1.负责展示数据 4 * 2.负责收集用户数据 5 * 3.负责与用户交互 6 */ 7 package com.view; 8 9 import java.util.Scanner; 10 11 public class Menu { 12 LoginIn loginin;//登录类对象 13 Function function;//服务类对象 14 AddFuction addfuction;//附加功能对象 15 16 public static void main(String[] args) { 17 Menu menu=new Menu(); 18 Scanner sc=new Scanner(System.in); 19 while(true){ 20 System.out.println("请选择:"); 21 System.out.println("1.用户服务"); 22 System.out.println("2.附加功能"); 23 switch(sc.nextInt()){ 24 case 1: 25 menu.loginin(); 26 menu.function(); 27 break; 28 case 2: 29 menu.addfuction(); 30 break; 31 default: 32 System.out.println("输入有误,请重新输入!"); 33 break; 34 } 35 System.out.println("是否继续:y/n"); 36 if(!"y".equals(sc.next())){ 37 break; 38 } 39 } 40 System.out.println("操作结束,欢迎您再次使用"); 41 42 43 } 44 45 public Menu(){ 46 System.out.println("====欢迎使用ATM自动取款机===="); 47 } 48 49 //1.登录选择 50 public void loginin(){ 51 loginin=new LoginIn(); 52 boolean b1=true; 53 while(b1){ 54 int i=loginin.start(); 55 switch(i){ 56 case 1: 57 loginin.login(); 58 if(loginin.user==null){ 59 System.out.println("对不起,登录失败,请重试!"); 60 }else{ 61 System.out.println("恭喜您,登录成功!"); 62 b1=false; 63 } 64 break; 65 case 2: 66 loginin.register(); 67 if(loginin.user==null){ 68 System.out.println("对不起,开户失败,请重试!"); 69 }else{ 70 System.out.println("恭喜您,开户成功!"); 71 b1=false; 72 } 73 break; 74 default: 75 System.out.println("输入有误,请重新输入!"); 76 break; 77 } 78 } 79 } 80 81 //2.功能选择 82 public void function(){ 83 function=new Function(loginin.user,loginin.userSer); 84 boolean b2=true; 85 while(b2){ 86 int j=function.start(); 87 switch(j){ 88 case 1: 89 if(function.deposit()){ 90 System.out.println("存款成功!"); 91 }else{ 92 System.out.println("操作失败,请重试!"); 93 } 94 break; 95 case 2: 96 if(loginin.user.getUser_status()==1){ 97 System.out.println("卡已冻结,无法取款!"); 98 break; 99 } 100 if(function.withdrawal()){ 101 System.out.println("取款成功!"); 102 } 103 break; 104 case 3: 105 if(loginin.user.getUser_status()==1){ 106 System.out.println("卡已冻结,无法汇款!"); 107 break; 108 } 109 if(function.remit()){ 110 System.out.println("汇款成功!"); 111 } 112 break; 113 case 4: 114 if(loginin.user.getUser_status()==1){ 115 System.out.println("卡已冻结,无法修改密码!"); 116 break; 117 } 118 if(function.changepw()){ 119 System.out.println("密码修改成功!"); 120 } 121 break; 122 case 5: 123 function.showmoney(); 124 break; 125 case 6: 126 function.quit(); 127 System.out.println("您已退出!"); 128 b2=false; 129 break; 130 case 7: 131 if(loginin.user.getUser_status()==1){ 132 System.out.println("卡已冻结,无法查询账单!"); 133 break; 134 } 135 function.statement(); 136 break; 137 default: 138 System.out.println("输入有误,请重新输入!"); 139 break; 140 } 141 } 142 } 143 144 //3.附加功能选择 145 public void addfuction(){ 146 addfuction=new AddFuction(); 147 int t = addfuction.start(); 148 switch (t) { 149 case 1: 150 try { 151 if (addfuction.backup()) { 152 System.out.println("数据备份成功!"); 153 } else { 154 System.out.println("数据备份失败!"); 155 } 156 } catch (Exception e) { 157 // TODO Auto-generated catch block 158 e.printStackTrace(); 159 } 160 break; 161 case 2: 162 try { 163 if (addfuction.recover()) { 164 System.out.println("数据恢复成功!"); 165 } else { 166 System.out.println("数据恢复失败!"); 167 } 168 } catch (Exception e) { 169 // TODO Auto-generated catch block 170 e.printStackTrace(); 171 } 172 break; 173 default: 174 System.out.println("输入有误,请重新输入!"); 175 break; 176 } 177 } 178 }
LoginIn.java
1 /* 2 * 用户登录或注册类 3 */ 4 package com.view; 5 6 import java.util.Scanner; 7 8 import com.pojo.*; 9 import com.service.*; 10 11 public class LoginIn { 12 Scanner sc=new Scanner(System.in); 13 IUserService userSer = new UserService(); 14 User_info user; 15 16 //登录选择界面 17 public int start(){ 18 System.out.println("请选择服务:"); 19 System.out.println("1.老用户登录"); 20 System.out.println("2.新用户开户"); 21 int i=sc.nextInt(); 22 return i; 23 } 24 25 //1.老用户登录 26 public void login(){ 27 System.out.println("您当前选择的是:登录操作"); 28 System.out.println("请输入卡号:"); 29 String cardnum=sc.next(); 30 System.out.println("请输入密码:"); 31 String password=sc.next(); 32 user=userSer.userlogin(cardnum, password); 33 } 34 35 //2.新用户开户 36 public void register(){ 37 System.out.println("您当前选择的是:开户操作"); 38 System.out.println("请输入身份证号码:"); 39 String idcard=sc.next(); 40 System.out.println("请输入您的姓名:"); 41 String name=sc.next(); 42 user=userSer.userOpenAccount(idcard, name); 43 } 44 }
Function.java
1 /* 2 * 用户选择的服务功能类 3 */ 4 package com.view; 5 6 import java.io.BufferedReader; 7 import java.io.BufferedWriter; 8 import java.io.File; 9 import java.io.FileWriter; 10 import java.io.IOException; 11 import java.sql.Timestamp; 12 import java.text.ParseException; 13 import java.text.SimpleDateFormat; 14 import java.util.ArrayList; 15 import java.util.Date; 16 import java.util.List; 17 import java.util.Scanner; 18 19 import com.pojo.*; 20 import com.service.*; 21 22 public class Function { 23 Scanner sc=new Scanner(System.in); 24 IUserService userSer; 25 IOperateService operateSer=new OperateService(); 26 ITypeService typeSer=new TypeService(); 27 User_info user; 28 29 public Function(User_info user,IUserService userSer){ 30 this.user=user; 31 this.userSer=userSer; 32 } 33 34 //选择界面 35 public int start(){ 36 System.out.println("请选择相关服务类型:"); 37 System.out.println("1.存款"); 38 System.out.println("2.取款"); 39 System.out.println("3.汇款"); 40 System.out.println("4.修改密码"); 41 System.out.println("5.查看余额"); 42 System.out.println("6.退卡"); 43 System.out.println("7.对账单"); 44 int i=sc.nextInt(); 45 return i; 46 } 47 48 //1.存款方法 49 public boolean deposit(){ 50 System.out.println("您当前选择的是:存款操作"); 51 System.out.println("请输入金额:"); 52 int money=sc.nextInt(); 53 System.out.println("正在处理,请稍后。。。"); 54 try { 55 Thread.sleep(2000); 56 } catch (InterruptedException e) { 57 // TODO Auto-generated catch block 58 e.printStackTrace(); 59 } 60 //存款 61 if(userSer.userDeposit(money)){ 62 //保存操作信息 63 if(operateSer.saveOperatemessage(money, user.getUser_cardnum(), null,1)){ 64 return true; 65 } 66 } 67 return false; 68 } 69 70 //2.取款方法 71 public boolean withdrawal(){ 72 System.out.println("您当前选择的是:取款操作"); 73 System.out.println("请输入金额:"); 74 int money=sc.nextInt(); 75 System.out.println("正在处理,请稍后。。。"); 76 try { 77 Thread.sleep(2000); 78 } catch (InterruptedException e) { 79 // TODO Auto-generated catch block 80 e.printStackTrace(); 81 } 82 //查看余额 83 if(userSer.userCheckBalance()<money){ 84 System.out.println("余额不足,取款失败!"); 85 return false; 86 } 87 //每次取款在3000以内 88 if(money>3000){ 89 System.out.println("取款失败,当次取款金额不能大于3000!"); 90 return false; 91 } 92 //查询当天已取款总金额 93 if(operateSer.todayAllwithdrawal(user.getUser_cardnum())+money>50000){ 94 System.out.println("取款失败,每天取款金额不能超过50000!"); 95 return false; 96 } 97 //取款 98 if(userSer.userWithdrawal(money)){ 99 //保存操作信息 100 if(operateSer.saveOperatemessage(money, user.getUser_cardnum(), null,2)){ 101 return true; 102 } 103 } 104 System.out.println("取款失败,请重试!"); 105 return false; 106 } 107 108 //3.汇款 109 public boolean remit(){ 110 System.out.println("您当前选择的是:汇款操作"); 111 System.out.println("请输入对方卡号:"); 112 String secardnum=sc.next(); 113 System.out.println("您要汇款的卡号为:"+secardnum+",请确认:y/n"); 114 String s=sc.next(); 115 if(!"y".equals(s)){ 116 System.out.println("交易结束!"); 117 return false; 118 } 119 System.out.println("请输入金额:"); 120 int money=sc.nextInt(); 121 System.out.println("正在处理,请稍后。。。"); 122 try { 123 Thread.sleep(2000); 124 } catch (InterruptedException e) { 125 // TODO Auto-generated catch block 126 e.printStackTrace(); 127 } 128 //查看余额 129 if(userSer.userCheckBalance()<money){ 130 System.out.println("余额不足,汇款失败!"); 131 return false; 132 } 133 //每次汇款在3000以内 134 if(money>5000){ 135 System.out.println("汇款失败,当次汇款金额不能大于5000!"); 136 return false; 137 } 138 //查询当天已汇款总金额 139 if(operateSer.todayAllremit(user.getUser_cardnum())+money>100000){ 140 System.out.println("汇款失败,每天汇款金额不能超过100000!"); 141 return false; 142 } 143 //汇款 144 if(userSer.userRemit(secardnum,money)){ 145 //保存操作信息 146 if(operateSer.saveOperatemessage(money, user.getUser_cardnum(),secardnum,3)){ 147 return true; 148 } 149 } 150 System.out.println("汇款失败,请重试!"); 151 return false; 152 } 153 154 //4.修改密码 155 public boolean changepw(){ 156 System.out.println("您当前选择的是:修改密码操作!"); 157 System.out.println("请输入旧密码:"); 158 String oldpassword=sc.next(); 159 if(!user.getUser_password().equals(oldpassword)){ 160 System.out.println("您输入的密码有误,操作结束!"); 161 return false; 162 } 163 System.out.println("请输入新密码:"); 164 String newpassword1=sc.next(); 165 System.out.println("请确认新密码:"); 166 String newpassword2=sc.next(); 167 if(!newpassword1.equals(newpassword2)){ 168 System.out.println("您两次输入的密码不一致,密码修改失败!"); 169 return false; 170 } 171 System.out.println("正在处理,请稍后。。。"); 172 try { 173 Thread.sleep(2000); 174 } catch (InterruptedException e) { 175 // TODO Auto-generated catch block 176 e.printStackTrace(); 177 } 178 //修改 179 if(userSer.userChangePasswd(oldpassword, newpassword2)){ 180 return true; 181 } 182 System.out.println("密码修改失败!"); 183 return false; 184 } 185 186 //5.查看余额 187 public void showmoney(){ 188 System.out.println("正在处理,请稍后。。。"); 189 try { 190 Thread.sleep(2000); 191 } catch (InterruptedException e) { 192 // TODO Auto-generated catch block 193 e.printStackTrace(); 194 } 195 System.out.println("您当前余额为"+userSer.userCheckBalance()+"元");; 196 } 197 198 //6.退卡 199 public void quit(){ 200 user=null; 201 userSer.userQuit(); 202 } 203 204 //7.对账单 205 public void statement(){ 206 Listoperlist=new ArrayList<>(); 207 System.out.println("请输入起始日期:yyyy-MM-dd"); 208 String startdate=sc.next(); 209 System.out.println("请输入终止日期:yyyy-MM-dd"); 210 String enddate=sc.next(); 211 System.out.println("正在处理,请稍后。。。"); 212 try { 213 Thread.sleep(2000); 214 } catch (InterruptedException e) { 215 // TODO Auto-generated catch block 216 e.printStackTrace(); 217 } 218 operlist=operateSer.queryRecord(user.getUser_cardnum(), startdate, enddate); 219 String path="src/com/view/"+user.getUser_name()+".txt"; 220 //调用写文件方法 221 if(writef(path,operlist)){ 222 System.out.println("交易记录查询成功!"); 223 }else{ 224 System.out.println("找不到相应记录!"); 225 } 226 227 } 228 229 //8.写账单到文件中 230 public boolean writef(String path,List operlist){ 231 SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd"); 232 SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 233 File file=new File(path); 234 BufferedWriter bw=null; 235 StringBuilder sb=new StringBuilder(); 236 try { 237 //如果文件不存在,就创建一个新文件 238 if(!file.exists()){ 239 file.createNewFile(); 240 } 241 } catch (IOException e) { 242 // TODO Auto-generated catch block 243 e.printStackTrace(); 244 } 245 //将记录添加到sb中 246 if(operlist!=null){ 247 String s1="卡号:"+operlist.get(0).getUser_cardnum(); 248 String s2="日期:"+sdf1.format(operlist.get(0).getOperate_time())+ 249 "------"+sdf1.format(operlist.get(operlist.size()-1).getOperate_time()); 250 String s3="操作时间\t"+"操作类型\t"+"操作金额"; 251 //将卡号日期添加到sb中 252 sb.append(s1+"\r\n"+s2+"\r\n"+s3+"\r\n"); 253 int all1=0; 254 int all2=0; 255 int all3=0; 256 //将交易记录添加到sb中 257 for(Operate_info oper:operlist){ 258 String ss=""; 259 String oo=""; 260 switch(oper.getType_id()){ 261 case 1: 262 ss="存款"; 263 oo="+"; 264 all1+=oper.getOperate_money(); 265 break; 266 case 2: 267 ss="取款"; 268 oo="-"; 269 all2+=oper.getOperate_money(); 270 break; 271 case 3: 272 ss="汇款"; 273 oo="-"; 274 all3+=oper.getOperate_money(); 275 break; 276 } 277 String s4=sdf2.format(oper.getOperate_time())+"\t"+ss+"\t"+oo+oper.getOperate_money(); 278 sb.append(s4+"\r\n"); 279 } 280 //汇总 281 String s4="存款:+"+all1; 282 String s5="取款:-"+all2; 283 String s6="汇款:-"+all3; 284 sb.append("---------------"+"\r\n"+"汇总:"+"\r\n"); 285 sb.append(s4+"\r\n"+s5+"\r\n"+s6); 286 } 287 //将sb写到文件中 288 if(sb.length()!=0){ 289 try { 290 bw=new BufferedWriter(new FileWriter(file)); 291 bw.write(sb.toString()); 292 bw.flush(); 293 return true; 294 } catch (IOException e) { 295 // TODO Auto-generated catch block 296 e.printStackTrace(); 297 }finally{ 298 try { 299 bw.close(); 300 } catch (IOException e) { 301 // TODO Auto-generated catch block 302 e.printStackTrace(); 303 } 304 } 305 } 306 return false; 307 } 308 }
AddFunction.java
1 /* 2 * 附加功能类 3 */ 4 package com.view; 5 6 import java.io.FileWriter; 7 import java.io.Writer; 8 import java.text.SimpleDateFormat; 9 import java.util.ArrayList; 10 import java.util.Date; 11 import java.util.List; 12 import java.util.Scanner; 13 14 import javax.xml.parsers.DocumentBuilder; 15 import javax.xml.parsers.DocumentBuilderFactory; 16 17 import org.w3c.dom.Comment; 18 import org.w3c.dom.Document; 19 import org.w3c.dom.Element; 20 import org.w3c.dom.NodeList; 21 22 import com.pojo.User_info; 23 import com.service.*; 24 import com.sun.org.apache.xml.internal.serialize.OutputFormat; 25 import com.sun.org.apache.xml.internal.serialize.XMLSerializer; 26 27 28 public class AddFuction { 29 Scanner sc=new Scanner(System.in); 30 IUserService userSer=new UserService(); 31 IOperateService operateSer=new OperateService(); 32 ITypeService typeSer=new TypeService(); 33 34 public int start(){ 35 System.out.println("请选择功能:"); 36 System.out.println("1.备份数据"); 37 System.out.println("2.数据恢复"); 38 int i=sc.nextInt(); 39 return i; 40 } 41 42 //1.备份数据 43 public boolean backup() throws Exception{ 44 System.out.println("正在处理,请稍后。。。"); 45 try { 46 Thread.sleep(2000); 47 } catch (InterruptedException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 } 51 Listuserlist=userSer.queryUserMessage(); 52 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 53 DocumentBuilder db=dbf.newDocumentBuilder();//构建文档对象 54 Document d=db.newDocument();//创建新的document对象 55 Element e=d.createElement("users");//创建根节点 56 if(userlist!=null){ 57 for(User_info user:userlist){ 58 Element ee=d.createElement("user");//创建第一层子节点 59 ee.setAttribute("id", String.valueOf(user.getUser_id()));//设置属性 60 61 Comment ccc1=d.createComment("卡号"); 62 Element eee1=d.createElement("cardnum");//创建第二层第一个子节点 63 eee1.setTextContent(user.getUser_cardnum()); 64 Comment ccc2=d.createComment("姓名"); 65 Element eee2=d.createElement("name");//创建第二层第二个子节点 66 eee2.setTextContent(user.getUser_name()); 67 Comment ccc3=d.createComment("身份证"); 68 Element eee3=d.createElement("idcard");//创建第二层第三个子节点 69 eee3.setTextContent(user.getUser_idcard()); 70 Comment ccc4=d.createComment("密码"); 71 Element eee4=d.createElement("password");//创建第二层第四个子节点 72 eee4.setTextContent(user.getUser_password()); 73 Comment ccc5=d.createComment("开户时间"); 74 Element eee5=d.createElement("opentime");//创建第二层第五个子节点 75 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 76 eee5.setTextContent(sdf.format(user.getUser_opentime())); 77 Comment ccc6=d.createComment("余额"); 78 Element eee6=d.createElement("money");//创建第二层第六个子节点 79 eee6.setTextContent(String.valueOf(user.getUser_money())); 80 Comment ccc7=d.createComment("状态"); 81 Element eee7=d.createElement("status");//创建第二层第七个子节点 82 String status=""; 83 switch(user.getUser_status()){ 84 case 0: 85 status="正常"; 86 break; 87 case 1: 88 status="冻结"; 89 break; 90 } 91 eee7.setTextContent(status); 92 93 //第二层追加 94 ee.appendChild(ccc1); 95 ee.appendChild(eee1); 96 ee.appendChild(ccc2); 97 ee.appendChild(eee2); 98 ee.appendChild(ccc3); 99 ee.appendChild(eee3); 100 ee.appendChild(ccc4); 101 ee.appendChild(eee4); 102 ee.appendChild(ccc5); 103 ee.appendChild(eee5); 104 ee.appendChild(ccc6); 105 ee.appendChild(eee6); 106 ee.appendChild(ccc7); 107 ee.appendChild(eee7); 108 109 //第一层追加 110 e.appendChild(ee); 111 } 112 d.appendChild(e);//将根节点追加到文档对象中 113 //将document写入文件中,将构建好的document输出到xml文档 114 OutputFormat of=new OutputFormat(d); 115 of.setEncoding("GBK"); 116 Writer w=new FileWriter("src/com/view/ATM.xml"); 117 XMLSerializer xs= new XMLSerializer(w,of); 118 xs.asDOMSerializer();//作为dom方式序列化文档 119 xs.serialize(d.getDocumentElement());//输出根元素 120 w.close();//关闭字符输出流 121 return true; 122 } 123 return false; 124 } 125 126 //2.数据恢复 127 public boolean recover() throws Exception{ 128 System.out.println("正在处理,请稍后。。。"); 129 try { 130 Thread.sleep(2000); 131 } catch (InterruptedException e) { 132 // TODO Auto-generated catch block 133 e.printStackTrace(); 134 } 135 List userlist=new ArrayList(); 136 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 137 DocumentBuilder db=dbf.newDocumentBuilder();//构建文档对象 138 Document d=db.parse("src/com/view/ATM.xml");//解析文档 139 Element e=d.getDocumentElement();//获取根节点 140 NodeList nl=e.getChildNodes();//获取根节点下所有子节点 141 for(int i=0;i ){ 142 if(nl.item(i).getNodeType()==1){ 143 User_info user=new User_info(); 144 Element ee=(Element)nl.item(i);//获得每一个子节点 145 String ees=ee.getAttribute("id");//获取每一个子节点的属性 146 user.setUser_id(Integer.valueOf(ees));//赋值 147 NodeList nlnl=ee.getChildNodes();//继续获得每一个子节点集 148 for(int j=0;j ){ 149 if(nlnl.item(j).getNodeType()==1){ 150 Element eee=(Element)nlnl.item(j);//继续获得每一个子节点 151 String eeen=eee.getNodeName();//获取每一个子节点的元素名 152 String eeet=eee.getTextContent();//获取每一个子节点的text内容 153 //给user对象赋值 154 switch(eeen){ 155 case "cardnum": 156 user.setUser_cardnum(eeet); 157 break; 158 case "name": 159 user.setUser_name(eeet); 160 break; 161 case "idcard": 162 user.setUser_idcard(eeet); 163 break; 164 case "password": 165 user.setUser_password(eeet); 166 break; 167 case "opentime": 168 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 169 Date date=sdf.parse(eeet); 170 user.setUser_opentime(date); 171 break; 172 case "money": 173 user.setUser_money(Double.valueOf(eeet)); 174 break; 175 case "status": 176 if("正常".equals(eeet)){ 177 user.setUser_status(0); 178 }else{ 179 user.setUser_status(1); 180 } 181 break; 182 } 183 } 184 } 185 userlist.add(user); 186 } 187 } 188 //调用 189 if(userSer.resumeUserMessage(userlist)){ 190 return true; 191 } 192 return false; 193 } 194 195 196 }
对账单生成的e.txt文件
卡号:ICBC1513155154759
日期:2017-12-14------2017-12-14
操作时间 操作类型 操作金额
2017-12-14 17:03:52 存款 +60000
2017-12-14 17:04:00 取款 -999
2017-12-14 17:04:08 取款 -798
2017-12-14 17:04:16 取款 -134
2017-12-14 17:04:29 汇款 -1234
2017-12-14 17:04:35 存款 +200
2017-12-14 17:04:44 存款 +300
2017-12-14 17:04:51 取款 -880
2017-12-14 17:04:59 取款 -1000
2017-12-14 17:05:07 取款 -890
2017-12-14 17:05:15 取款 -1600
2017-12-14 17:05:22 取款 -890
2017-12-14 17:05:42 取款 -2500
---------------
汇总:
存款:+60500
取款:-9691
汇款:-1234
用户数据备份生成的xml文件:
xml version="1.0" encoding="GBK"?> <users> <user id="4"> <cardnum>ICBC1513240108811cardnum> <name>贾雨村name> <idcard>777888200003039999idcard> <password>123456password> <opentime>2017-12-14 16:28:28opentime> <money>84000.0money> <status>正常status> user> <user id="1"> <cardnum>ICBC1513134738163cardnum> <name>萧十一郎name> <idcard>459847199508248971idcard> <password>111111password> <opentime>2017-12-13 11:12:18opentime> <money>6566.0money> <status>正常status> user> <user id="2"> <cardnum>ICBC1513154052221cardnum> <name>卜世仁name> <idcard>678498200511028764idcard> <password>111111password> <opentime>2017-12-13 16:34:12opentime> <money>993.0money> <status>正常status> user> <user id="3"> <cardnum>ICBC1513155154759cardnum> <name>ename> <idcard>eidcard> <password>111111password > <opentime>2017-12-13 16:52:34opentime> <money>49575.0money> <status>正常status> user> users>