• 5、原生jdbc链接数据库实例-自动取款机


    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>87348719283389382983</cardid>
            <!-- 身份证 -->
            <sfzid>430909203920901233</sfzid>
            <!-- 开户时间 -->
            <createtime>2011-09-09 23:12:12</createtime>
            <!-- 余额 -->
            <balance>20933.22</balance>
            <!-- 密码 -->
            <password>998822</password>
        </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         List<Operate_info> operlist=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<Operate_info> 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="操作时间	"+"操作类型	"+"操作金额";
    251             //将卡号日期添加到sb中
    252             sb.append(s1+"
    "+s2+"
    "+s3+"
    ");
    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())+"	"+ss+"	"+oo+oper.getOperate_money();
    278                 sb.append(s4+"
    ");
    279             }
    280             //汇总
    281             String s4="存款:+"+all1;
    282             String s5="取款:-"+all2;
    283             String s6="汇款:-"+all3;
    284             sb.append("---------------"+"
    "+"汇总:"+"
    ");
    285             sb.append(s4+"
    "+s5+"
    "+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         List<User_info> userlist=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<User_info> 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<nl.getLength();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<nlnl.getLength();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>ICBC1513240108811</cardnum>
            <!--姓名-->
            <name>贾雨村</name>
            <!--身份证-->
            <idcard>777888200003039999</idcard>
            <!--密码-->
            <password>123456</password>
            <!--开户时间-->
            <opentime>2017-12-14 16:28:28</opentime>
            <!--余额-->
            <money>84000.0</money>
            <!--状态-->
            <status>正常</status>
        </user>
        <user id="1">
            <!--卡号-->
            <cardnum>ICBC1513134738163</cardnum>
            <!--姓名-->
            <name>萧十一郎</name>
            <!--身份证-->
            <idcard>459847199508248971</idcard>
            <!--密码-->
            <password>111111</password>
            <!--开户时间-->
            <opentime>2017-12-13 11:12:18</opentime>
            <!--余额-->
            <money>6566.0</money>
            <!--状态-->
            <status>正常</status>
        </user>
        <user id="2">
            <!--卡号-->
            <cardnum>ICBC1513154052221</cardnum>
            <!--姓名-->
            <name>卜世仁</name>
            <!--身份证-->
            <idcard>678498200511028764</idcard>
            <!--密码-->
            <password>111111</password>
            <!--开户时间-->
            <opentime>2017-12-13 16:34:12</opentime>
            <!--余额-->
            <money>993.0</money>
            <!--状态-->
            <status>正常</status>
        </user>
        <user id="3">
            <!--卡号-->
            <cardnum>ICBC1513155154759</cardnum>
            <!--姓名-->
            <name>e</name>
            <!--身份证-->
            <idcard>e</idcard>
            <!--密码-->
            <password>111111</password
            ><!--开户时间-->
            <opentime>2017-12-13 16:52:34</opentime>
            <!--余额-->
            <money>49575.0</money>
            <!--状态-->
            <status>正常</status>
        </user>
    </users>
  • 相关阅读:
    cookie和session
    memcached安全性 django使用memcached
    spring boot jar包做成linux服务,windows服务开机启动
    sqlserver暂时停用全部外键
    jsonobject 转对象失败。
    spring bean 通过 applicationcontext 获取不到
    java spring 线程中注入bean会失败。
    浏览器预检,后台响应(转载)
    amazon redshift sql 语法 和my sql的区别
    返回视图,页面不跳转,return ModelandView 页面不能正确跳转问题
  • 原文地址:https://www.cnblogs.com/wlxslsb/p/10723058.html
Copyright © 2020-2023  润新知