如何在文件中写入的对象之间执行算术运算?

时间:2015-05-01 12:05:23

标签: java file-io arraylist fileinputstream fileoutputstream

在我的程序中,用户输入值并将其存储在arrayList中。 ArryList对象被写入文件。我已经使用file-i / o,object-i / o stream进行写入和readin in file.Now我想在对象之间执行加法和减法(int or double)。即从一个帐户中提取资金应该与另一个帐户一起添加,并且必须减去它们的值并将其与特定帐户的金额相加。最后,我希望必须更新该值,以便打印出来并显示当前状态。我怎么能这样做?

这是主要课程:

public class BankApp_Assignment {

    //static int numOfAcc = 0;
    public static void main(String[] args) {
        System.out.println("WELCOME TO OUR BANK!\n\n");

        List<BankAccount> bankAccounts = new ArrayList<BankAccount>();
        List<BankAccount> bankAccounts2 = new ArrayList<BankAccount>();
        ReaderWriter rw=new ReaderWriter();


        while (true) {
            System.out.println("Choose your option:\n"
                    + "1. Create new account\n"
                    + "2. Deposit/withdraw\n"
                    + "3. View One account\n"
                    + "4. Deleting an account\n"
                    + "5. View all the accounts\n"
                    + "6. Return to menu\n");

            System.out.println("*************\n"
                    + "************");

            option1 = sc.nextInt();
            sc.nextLine();
            //switch-case starts
            switch (option1) {
                case 1:
                    //create account
                    BankAccount bankAcc = new BankAccount();
                    System.out.println("Enter Full Name:");
                    bankAcc.setName(sc.nextLine());
                    System.out.println("Choose an Account Number:");
                    bankAcc.setAccNum(sc.nextInt());
                    System.out.println("Choose the initial amount:");
                    bankAcc.setInitiateAmount(sc.nextDouble());
                    //adding those into the arrayList
                    bankAccounts.add(bankAcc);
                    rw.writeToFile(bankAccounts);

                    System.out.println("-------------\n"
                            + "-------------");
                    break;
                case 2:
                     bankAccounts2=(List<BankAccount>)rw.readFromFile();
                    //First displaying the current accouns info
                    System.out.println("Name \tAccount No \tInitial Amount");
                    for (BankAccount bankAccount : bankAccounts2) {

                        System.out.println(bankAccount);

                    }

                    System.out.println("\t\t.........\n"
                            + "\t\t.........");

                    System.out.println("To transfer money within the bank accounts enter 1\n"
                            + "To deposit/withdraw money in the same account enter 2");
                    option2 = sc.nextInt();
                    sc.nextLine();

                    //inner switch-case starts
                    switch (option2) {
                        case 1:
                            /*
                            BankAccount is the class for setter and getter
                             bankAccounts2 is the arrayList for reading objects from file
                            */
                            bankAccounts2 = (List<BankAccount>) rw.readFromFile();
                            BankAccount fromAcc = null;
                            BankAccount toAcc = null;
                            System.out.println("Enter the account number you want to withdraw from:");

                            withdraw_accNum = sc.nextInt();

                            System.out.println("Enter the amount you want to withdraw:");

                            withdraw_amount = sc.nextDouble();
                            System.out.println("Enter the account number you want to deposit to:");

                            deposit_accNum = sc.nextInt();//the deposit amount is alwyas the same as withdraw_amount

                            //find the matching acc number:withdraw_accNum
                            for (BankAccount listItemsFirst : bankAccounts2) {
                                //if the withdraw acc num matches with the given one
                                if (listItemsFirst.getAccNum() == withdraw_accNum) {
                                    //store it
                                    fromAcc = listItemsFirst;
                                    break;
                                }
                            }
                            //find the matching acc number:  deposit_accNum
                            for (BankAccount listItemsSec : bankAccounts2) {
                                //if the withdraw acc num matches with the given one
                                if (listItemsSec.getAccNum() == deposit_accNum) {
                                    //store it
                                    toAcc = listItemsSec;
                                    break;
                                }
                            }
                            //if the withdraw amount is bigger than the current balance
                            if (withdraw_amount > fromAcc.getInitialAmount()) {
                                System.out.println("Withdrawing Amount was bigger than the Initial amount.\nChoose the menu again. .");
                                break;
                            }
                            //subtracting and adding the withdrawn amount
                            fromAcc.setInitiateAmount(fromAcc.getInitialAmount() - withdraw_amount);
                            toAcc.setInitiateAmount(toAcc.getInitialAmount() + withdraw_amount);
                            System.out.println("DONE!\t print them out to see the current status.");
                            System.out.println("");

                            break;
                        case 2://deposit/withdraw money in the same accounts
                            bankAccounts2=(List<BankAccount>)rw.readFromFile();
                            BankAccount fromAcc_SameAcc = null;
                            BankAccount toAcc_SameAcc = null;
                            System.out.println("Enter the account number you want to deposit or withdraw from:");
                            //read the accNum
                            depOrWithAccountNum = sc.nextInt();
                            System.out.println("Enter the amount (To withdraw enter a negative value)");
                            //read the amount
                            depOrWithAmount = sc.nextDouble();
                            //checking the matching account number in arrayList
                            for (BankAccount listItemsThird : bankAccounts2) {
                                if (listItemsThird.getAccNum() == depOrWithAccountNum) {
                                    fromAcc_SameAcc = listItemsThird;
                                    break;
                                }
                            }

                            if (depOrWithAmount - 1 < fromAcc_SameAcc.getInitialAmount()) {
                                System.out.println("Withdraw amount is bigger than the current amount.\nChoose the menu again. .");
                                break;
                            }

                            if (depOrWithAmount < 0) {//the amount is negative
                                fromAcc_SameAcc.setInitiateAmount(fromAcc_SameAcc.getInitialAmount() + depOrWithAmount);
                            } else {
                                fromAcc_SameAcc.setInitiateAmount(fromAcc_SameAcc.getInitialAmount() + depOrWithAmount);
                            }

                            break;
                    }

                    //inner switch-case ends
                    System.out.println("\n\n");
                    break;

                case 3:
                    //View One account
                    bankAccounts2=(List<BankAccount>)rw.readFromFile();
                    BankAccount viewOneAccountNum = null;

                    System.out.println("Enter the account number you want to see:");
                    viewOneAcc = sc.nextInt();
                    System.out.println("Name\tAccount No\tInitial Amount");
                    for (BankAccount viewOneAccountProperty : bankAccounts2) {

                        if (viewOneAccountProperty.getAccNum() == viewOneAcc) {
                            //viewOneAccountNum=viewOneAccountProperty;
                            viewOneAccountNum = viewOneAccountProperty;

                            System.out.println(viewOneAccountNum);
                        }
                        System.out.println("");

                    }
                    break;
                case 4:
                     bankAccounts2=(List<BankAccount>)rw.readFromFile();
                    //BankAccount AccToDel = null;
                    //Deleting an account
                    Iterator<BankAccount> it = bankAccounts2.iterator();

                    System.out.println("Enter the account you want to delete:");
                    deleteAcc = sc.nextInt();

                    while (it.hasNext()) {
                        BankAccount next = it.next();
                        if (next.getAccNum() == deleteAcc) {
                            it.remove();
                        }
                    }

                    rw.writeToFile(bankAccounts2);


                    break;

                case 5:
                    //View all the accounts/printing them out

                    bankAccounts2=(List<BankAccount>)rw.readFromFile();
                    System.out.println("Name\tAccount No\tInitial Amount");
                    for (BankAccount bankAccount : bankAccounts2) {

                        System.out.println(bankAccount);

                    }

                    System.out.println("\n\n");
                    break;

                case 6:
                    //Quit
                    return;
            }

            //switch-case ends
        }

    }

}

读写器:

public class ReaderWriter{
 public void writeToFile(List<BankAccount> accounts){
   try {
            FileOutputStream fos=new FileOutputStream("C:\\Users\\Documents\\NetBeansProjects\\BankFile_assignment.txt");
            ObjectOutputStream oos=new ObjectOutputStream(fos);
            oos.writeObject(accounts);//take the arrayList 
            oos.flush();
            oos.close();
            fos.close();

        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    public  List<BankAccount> readFromFile(){
        List<BankAccount>readData=null;
        try {



            FileInputStream fis=new FileInputStream("C:\\Users\Documents\\NetBeansProjects\\BankFile_assignment.txt");
            ObjectInputStream ois=new ObjectInputStream(fis);
            //make an arrayList to get those object back
            //arrayList

            readData=(List<BankAccount>)ois.readObject();

         ois.close();
         fis.close();
        } catch (Exception e) {
        e.printStackTrace();
        }
        //return readData;
        return readData;


    }
}

的BankAccount:

    package bankapp_assignment;

import java.io.Serializable;

public class BankAccount implements Serializable{

    private String name;
    private int accNum;
    private double initiateAmount;

    //constructor
    public BankAccount() {

        this.name = null;
        this.accNum = 0;
        this.initiateAmount = 0;

    }

    public void setName(String name) {
        this.name = name;

    }

    public void setAccNum(int accNum) {

        this.accNum = accNum;
    }

    public String getName(String name){
        return name;

    }


    public int getAccNum() {
        return accNum;
    }


    public void setInitiateAmount(double initiateAmount) {
        this.initiateAmount = initiateAmount;
    }

    public double getInitialAmount(){
        return initiateAmount;
    }

    @Override
    public String toString() {
        return name + "\t\t" + accNum + "\t\t" + initiateAmount;
    }

}

0 个答案:

没有答案