zoukankan      html  css  js  c++  java
  • 1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库

    1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库

    一、控制显示多少位小数位

    有些时候小数位数太多了,想保留多少位小数,这里介绍一种利用四舍五入保留想要的小数位数
    Math.round四舍五入到整数位,所以把小数乘以整10或整百,在除以整10或整百,就得到想要的位数了

    double a = 3.14159265359;
    double weishu = 5;
    double b = Math.pow(10,weishu);
    a = Math.round(a*b)/b;


    二、读txt和写txt模拟ATM数据库
    在模拟ATM存取钱的时候,第二次运行就没有上一次的数据了,没有把信息储存到本地。在网上查了些txt
    的读写。

    经过理解之后,发现主要是以下步骤:
    ①载入txt的文件,主要代码是: File filename = new File("d:/bankinfo.txt")
    ②然后把文件放入文件输入流,再放入读取缓存,再用一行一行读取的方法,主要代码如下
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String tempString = reader.readLine();
    得到每一行的数据可以打印输出,也可以把这一行的数据用正则表达式拆分出自己想要的信息。
    比如我这里就是把账户名,密码和余额放一起的。


    写入的时候,是先全部读在缓存中,一行一行的读取,并一行一行的写入,到最后一行为空的时候,写入
    新的数据。
    主要代码如下:
    String temp = br.readLine()
    StringBuffer buf = buf.append(temp)


    以上的代码都不是很懂,不会灵活运用,但是不妨碍根据自己的需求修改。
    需求分析:
    1、需要n组银行的账号,密码,余额。
    2、输入账号和密码的时候匹配每一行txt的账户,密码,并得到余额。
    3、存取钱的时候余额需要修改

    设计思路:
    1、账号用随机数生成银行卡后八位,随机生成6位数密码,随机生成10万以内的余额,并且保存到txt的
    一行。
    2、输入账号和密码后,读取txt的每一行,每一行取出后,根据正则表达式拆分成数组,存着账户余额密
    码。依次遍历看是否匹配账户,如果匹配在看是否匹配密码。登录成功返回true,并且取出余额,还有此
    行的行数,用于写数据
    3、余额修改时,在写txt的时候,写到账户那一行,就把账户,密码,余额重写一次,其他行也重写一次
    ,其他不变

    缺点:
    此小程序只作于模仿,和真正的数据库差很多,txt也只作于存写数据。只是算txt读写的练习
    源代码如下:

      1 package com.ATM;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileReader;
      6 import java.io.IOException;
      7 import java.util.Scanner;
      8 import java.io.FileNotFoundException;
      9 /**
     10  * 
     11  * @author YuanqiuChen
     12  * date 1.20-23
     13  *模拟一个简易ATM机
     14  *
     15  *
     16 要求:
     17 先做只有一个用户的:
     18 1、ATM运行之前,准备好一个账户名、账户对应的密码和账户对应的余额,
     19    并且规定,ATM机初始化时默认的剩余金额是15万,最大金额容量为20万,最大取款限额为10万。
     20 2、有一个欢迎界面
     21 3、用户输入账号和密码,并进行验证
     22    如果三次输入错误,则给出提示并退出系统
     23    如果输入正确则显示以下菜单
     24    1.查询余额  2.取款  3.存款  4.退出
     25    提示用户选择菜单
     26    如果用户输入1,则显示余额;
     27    如果用户输入2,则提示输入要取出的金额,
     28        如果金额等于0,相应提示;
     29        如果金额不是100的倍数,则给出相应提示;
     30        如果金额为负数,也提示;
     31        如果金额输入不合法(比如输入了特殊符号或者字母),也提示;
     32        如果输入的金额大于该用户的余额,也要提示,
     33        如果输入的金额超过ATM机中的剩余金额,也要提示。
     34    如果选择3,则显示存款界面,提示用户放入现金:
     35        如果输入的金额加上ATM机中剩余的金额超过了ATM机最大金额容量,则提示用户。
     36    如果选择4.则直接退出系统。
     37  *
     38  */
     39 public class ATM {
     40 
     41     public static void main(String[] args){
     42         
     43         ATMRunning people = new ATMRunning();
     44         people.welcome("中国银行");
     45         
     46         Card card1 = new Card();
     47         if(people.load(card1)){
     48             people.accountOperation(card1);
     49         }
     50         
     51                 
     52     }
     53 }
     54 
     55 class ATMRunning{
     56     
     57     private int localMoney = 150000;    //提款机本地现有钱数量
     58     private int get_Money_Already = 0;    //用户今天已经取钱数
     59     private final int MAX_LOCAL_MONEY = 200000;    //提款机本地最多存200000
     60     private final int MAX_GET_MONEY = 20000;    //这次取钱最多一共取10000元
     61     private final int MAX_GET_SIGLE_MONEY = 5000;//单次最多取5000
     62     
     63     ATMRunning(){
     64         
     65     }
     66     public double getLocalMoney() {
     67         return localMoney;
     68     }
     69 
     70     public void setLocalMoney(int localMoney) {
     71         this.localMoney = localMoney;
     72         
     73     }
     74     
     75     int lineNum = 0;                    //定义查到的账户的在文本数据
     76 
     77 库里边的行数
     78     
     79     public void welcome(String bankName){
     80         System.out.println("*************************************
    
    ");
     81         System.out.println("********欢  迎  使  用   " + bankName + " ATM 机
     82 
     83 ********
    
    ");
     84         System.out.println("*************************************
    ");
     85         System.out.println("ATM机正在运行");
     86     }
     87     
     88     
     89     public boolean accountCheck(Card card1){
     90         Card[] data = new Card[10];
     91         for(int i = 0; i < 4; i++){
     92             data[i] = new Card();
     93         }        
     94         
     95         data[0].setAccount(1234);
     96         data[0].setPassword(123456);
     97         data[0].setMoney(31689.4);
     98         
     99         data[1].setAccount(1111);
    100         data[1].setPassword(111111);
    101         data[1].setMoney(310000);
    102 
    103         
    104         File file = new File("d:/bankinfo.txt");
    105         BufferedReader reader = null;
    106         String str1 = null;
    107         String[] str2 = new String[3];
    108 
    109         try {//以行为单位读取文件内容,一次读一整行
    110             reader = new BufferedReader(new FileReader(file));
    111             int i = 0;
    112             while ((str1 = reader.readLine()) != null) {
    113                 lineNum = i++;
    114                 str2 = splitt(str1);
    115                 if(card1.getAccount() == Double.parseDouble(str2[0])){
    116                     if(card1.getPassword() == Double.parseDouble(str2
    117 
    118 [1])){
    119                         card1.setMoney(Double.parseDouble(str2[2]));    
    120 
    121     //问题,card1变了,data还没有变
    122                         return true;
    123                     }
    124                 }
    125             }
    126             reader.close();
    127         } catch (FileNotFoundException e) {
    128             e.printStackTrace();
    129         } catch (IOException e) {
    130             e.printStackTrace();
    131         } finally {
    132             if (reader != null) {
    133                 try {
    134                     reader.close();
    135                 } catch (IOException e) {
    136                     e.printStackTrace();
    137                 }
    138             }
    139         }
    140 
    141         return false;
    142     }
    143 
    144     
    145     public String[] splitt(String str) {
    146         String strr = str.trim();
    147         String[] strnew = strr.split("[\p{Space}]+");
    148         return strnew;
    149     }
    150     
    151     
    152     public boolean load(Card card1) { //传进来一个新的空的card类型,用户输入对其赋值,然
    153 
    154 后和数据库进行比较,检测是否登录成功
    155         
    156         
    157         long account_input , password_input;  
    158         for(int i = 0; i < 3 ; i++){
    159             Scanner scan = new Scanner(System.in);    //问题 这个放前边会(输入错
    160 
    161 误时)出错
    162             System.out.println("请输入卡号:");
    163             if(scan.hasNextLong()){                 //检测账号是
    164 
    165 否为int型,否则跳出当次
    166                 account_input = scan.nextLong();
    167                 card1.setAccount(account_input);
    168             }else{
    169                 if(i == 2 ){
    170                     System.out.println("输入错误三次,已吞卡,请联系我行
    171 
    172 客服!");
    173                     return false;
    174                 }
    175                 System.out.println("无效账号,请重输:");
    176                 continue;
    177             }
    178             
    179             System.out.println("请输入密码:");    //检测密码是否为int型,否则
    180 
    181 跳出当次
    182             if(scan.hasNextInt()){
    183                 password_input = scan.nextInt();
    184                 card1.setPassword(password_input);
    185             }else{
    186                 if(i == 2 ){
    187                     System.out.println("输入错误三次,已吞卡,请联系我行
    188 
    189 客服!");
    190                     return false;
    191                 }
    192                 System.out.println("无效密码,请重输:");
    193                 continue;
    194             }
    195             if(accountCheck(card1)){            //把用户输入的这个账
    196 
    197 号放入数据库进行比较,返回true或者false
    198                 System.out.println("登录成功!
    ");
    199                 return true;
    200             }else if(i == 2 ){
    201                 System.out.println("输入错误三次,已吞卡,请联系我行客
    202 
    203 服!");
    204                 return false;
    205             }else{                
    206                 System.out.println("账号或密码错误,请重输:");
    207             }
    208     
    209         }
    210         
    211         return false;
    212     }    
    213     
    214     public void accountOperation(Card card1){
    215         Scanner scan = new Scanner(System.in);
    216         while(true){
    217             System.out.println("1、查询余额
    2、取款
    3、存款
    4、退出
    ");
    218             String input = scan.next();
    219             if(input.equals("1")){
    220                 balanceCheck(card1);
    221                 continue;
    222             }else if(input.equals("2")){
    223                 getMoney(card1);
    224                 balanceCheck(card1);
    225             }else if(input.equals("3")){
    226                 saveMoney(card1);
    227             }else if(input.equals("4")){
    228                 System.out.println("卡已退出");
    229                 System.exit(0);
    230             }else{
    231                 continue;
    232             }
    233             
    234         }        
    235     }
    236 
    237     public void balanceCheck(Card card1){
    238         System.out.println("余额为:"+ card1.getMoney() + "
    ");
    239     }
    240     
    241     public void getMoney(Card card1){
    242         int get_Money = 0;        //用户取钱数
    243         
    244         Scanner scan = new Scanner(System.in);
    245         System.out.println("请输入取款金额
    1、100元
    2、300元
    3、500元
    4、1000元
    246 
    247 
    5、2000元
    6、输入金额
    ");
    248         String input = scan.next();
    249         
    250         if(input.equals("1") || input.equals("2") || input.equals("3") || 
    251 
    252 input.equals("4") || input.equals("5") ){
    253             double num = Double.parseDouble(input);
    254             int num1 = (int)num;
    255             switch(num1){
    256             case 1 : get_Money = 100;break;
    257             case 2 : get_Money = 300;break;
    258             case 3 : get_Money = 500;break;
    259             case 4 : get_Money = 1000;break;
    260             case 5 : get_Money = 2000;break;
    261             }
    262 
    263             if(card1.getMoney() < get_Money){
    264                 System.out.println("余额不足");
    265             }else if(get_Money_Already + get_Money > MAX_GET_MONEY){
    266                 System.out.println("本机每天最多取" + MAX_GET_MONEY);
    267             }else if(localMoney < get_Money){
    268                 System.out.println("本机已无那么多钱");
    269             }else{
    270                 card1.setMoney((card1.getMoney()-get_Money));    //改变余额
    271                 
    272                 
    273                 //在文本信息里写入余额变化
    274                 WriteInfo write = new WriteInfo();
    275                 try {
    276                     write.creatTxtFile();
    277                     write.writeTxtFile(lineNum,card1);   
    278                 } catch (IOException e) {
    279                     e.printStackTrace();
    280                 }
    281                 
    282                 localMoney = (int)(localMoney - get_Money);        //
    283 
    284 变本机金额
    285                 get_Money_Already += get_Money;
    286                 System.out.println(get_Money + "元已出,请在规定时间取钱");
    287                 System.out.println(get_Money_Already);
    288             }
    289 
    290             
    291             
    292         }else if(input.equals("6") ){
    293             System.out.println("请取钱输入金额:");
    294             if(scan.hasNextDouble()){
    295                 input = scan.next();
    296                 get_Money = (int)(Double.parseDouble(input));
    297 
    298                 if(get_Money < 0){
    299                     System.out.println("输入错误,请输入整百数");    //
    300 
    301 入的是负数等    
    302                 }else if(get_Money_Already + get_Money > MAX_GET_MONEY){
    303                     System.out.println("本机每天最多取" + 
    304 
    305 MAX_GET_MONEY);
    306                 }else if(get_Money % 100 != 0){
    307                     System.out.println("输入的不是整百数");    
    308                 }else if(card1.getMoney() < get_Money){
    309                     System.out.println("余额不足");
    310                 }else if(get_Money > MAX_GET_SIGLE_MONEY){
    311                     System.out.println("每次最多取" + 
    312 
    313 MAX_GET_SIGLE_MONEY);
    314                 }else if(get_Money > localMoney){
    315                     System.out.println("本机金额余量不足,请重新输入");
    316                 }else{
    317                     card1.setMoney((card1.getMoney()-get_Money));
    318                     
    319                     //把余额信息写入文本信息
    320                     WriteInfo write = new WriteInfo();
    321                     try {
    322                         write.creatTxtFile();
    323                         write.writeTxtFile(lineNum,card1);   
    324                     } catch (IOException e) {
    325                         e.printStackTrace();
    326                     }
    327                     
    328                     localMoney = (int)(localMoney - get_Money);
    329                     get_Money_Already += get_Money;
    330                     System.out.println(get_Money_Already);
    331                     System.out.println(get_Money + "元已出,请在规定时间
    332 
    333 取钱");
    334                 }
    335                 
    336             }else{
    337                 System.out.println("输入错误,请输入整百数");//输入的是字母
    338 
    339 或者其他字符
    340             }    
    341         }
    342     }
    343     
    344     public void saveMoney(Card card1){
    345         Scanner scan = new Scanner(System.in);
    346         String input;
    347         double save_Money = 0;
    348         
    349         System.out.println("请输入存钱金额:");
    350         if(scan.hasNextDouble()){
    351             input = scan.next();
    352             save_Money = Double.parseDouble(input);
    353             if(save_Money > 0){
    354                 if(save_Money % 100 == 0){
    355                     if(save_Money + localMoney <= MAX_LOCAL_MONEY){
    356                         System.out.println("请将纸币整齐的放入存钱口
    357 
    358 ");
    359                         //等待存钱,并且检测真假币
    360                         card1.setMoney(card1.getMoney() + 
    361 
    362 save_Money);
    363                         
    364                         
    365                         //把余额信息写入文本信息
    366                         WriteInfo write = new WriteInfo();
    367                         try {
    368                             write.creatTxtFile();
    369                             write.writeTxtFile(lineNum,card1);   
    370                         } catch (IOException e) {
    371                             e.printStackTrace();
    372                         }
    373                         
    374                         
    375                         localMoney = (int)(localMoney + save_Money);
    376                         System.out.println("...   ...   ...");
    377                         System.out.println("钱已存入!
    ");
    378                     }else{
    379                         System.out.println("大于本机最大可收取存钱数
    380 
    381 ,请减小存钱数");
    382                     }
    383                 }else{
    384                     System.out.println("本机只能存整百数");
    385                 }
    386             }else{
    387                 System.out.println("存钱金额错误,请输入整百数");    //
    388 
    389 入的是负数等
    390             }
    391         }else{
    392             System.out.println("输入错误,请输入整百数");//输入的是字母或者其他
    393 
    394 字符
    395         }    
    396     }
    397 }
    ATMmain
     1 package com.ATM;
     2 
     3 public class Card{
     4     private long account ;
     5     private long password ;
     6     private double money ;
     7     
     8     public Card(){
     9         
    10     }
    11     
    12     
    13     public long getAccount() {
    14         return account;
    15     }
    16     public void setAccount(long account) {
    17         this.account = account;
    18     }
    19     public long getPassword() {
    20         return password;
    21     }
    22     public void setPassword(long password) {
    23         this.password = password;
    24     }
    25     public double getMoney() {
    26         return money;
    27     }
    28     public void setMoney(double money) {
    29         this.money = money;
    30     }
    31     
    32 }
    class Card
      1 package com.ATM;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileNotFoundException;
      7 import java.io.FileOutputStream;
      8 import java.io.FileReader;
      9 import java.io.IOException;
     10 import java.io.InputStreamReader;
     11 import java.io.PrintWriter;
     12 
     13 public class WriteInfo {
     14     private static String filenameTemp = "d:/bankinfo.txt";
     15     
     16     public WriteInfo(){
     17         
     18     }
     19     
     20 //    public static void main(String[] args) {
     21 //        Card card1 = new Card();
     22 //        card1.setAccount(1234);
     23 //        card1.setPassword(123456);
     24 //        card1.setMoney(31689.4);
     25 //        
     26 //        WriteInfo write = new WriteInfo();
     27 //        try {
     28 //            write.creatTxtFile();
     29 //            write.writeTxtFile(3,card1);
     30 //            
     31 //        } catch (IOException e) {
     32 //            e.printStackTrace();
     33 //        }
     34 //    }
     35 
     36     
     37     //创建文件
     38     
     39     public static boolean creatTxtFile() throws IOException {
     40         boolean flag = false;
     41         File filename = new File(filenameTemp);
     42         if (!filename.exists()) {
     43             filename.createNewFile();
     44             flag = true;
     45         }
     46         return flag;
     47     }
     48 
     49     public static boolean writeTxtFile(int num,Card card1) throws IOException {
     50         // 先读取原有文件内容,然后进行写入操作
     51         boolean flag = false;
     52         String filein = card1.getAccount() + "	" + card1.getPassword() + "	" + 
     53 
     54 card1.getMoney();
     55 //        filein = "111111    111111    1000000";
     56         String temp = "";
     57 
     58         FileInputStream fis = null;
     59         InputStreamReader isr = null;
     60         BufferedReader br = null;
     61 
     62         FileOutputStream fos = null;
     63         PrintWriter pw = null;
     64         try {
     65             // 文件路径
     66             File file = new File(filenameTemp);
     67             // 将文件读入输入流
     68             fis = new FileInputStream(file);
     69             isr = new InputStreamReader(fis);
     70             br = new BufferedReader(isr);
     71             StringBuffer buf = new StringBuffer();
     72 
     73             // 保存该文件原有的内容
     74             for (int j = 0; (temp = br.readLine()) != null; j++) {
     75                 
     76                 
     77                 if(j != num){
     78                     buf = buf.append(temp);
     79                     buf = buf.append(System.getProperty("line.separator"));
     80                 }else{
     81                     temp = filein;
     82                     buf = buf.append(temp);
     83                     buf = buf.append(System.getProperty("line.separator"));
     84                 }
     85                 
     86                 // System.getProperty("line.separator")
     87                 // 行与行之间的分隔符 相当于“
    ”
     88             }
     89 //            buf.append(filein);//写入
     90 
     91             fos = new FileOutputStream(file);
     92             pw = new PrintWriter(fos);
     93             pw.write(buf.toString().toCharArray());
     94             pw.flush();
     95             flag = true;
     96         } catch (IOException e1) {
     97             // TODO 自动生成 catch 块
     98             throw e1;
     99         } finally {
    100             if (pw != null) {
    101                 pw.close();
    102             }
    103             if (fos != null) {
    104                 fos.close();
    105             }
    106             if (br != null) {
    107                 br.close();
    108             }
    109             if (isr != null) {
    110                 isr.close();
    111             }
    112             if (fis != null) {
    113                 fis.close();
    114             }
    115         }
    116         return flag;
    117     }
    118 
    119 }
    class WriteInfo
  • 相关阅读:
    CSS笔记
    WebStorm快捷键
    单例模式详解
    JS正则表达式
    Java NIO 详解(二)
    Java NIO 详解(一)
    【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)
    Go 普通LOG输出
    Go TCP网路程序编写
    Go 语言官方包函数中文翻译
  • 原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5172239.html
Copyright © 2011-2022 走看看