3

これまでに、以下に示す 2 つのクラスを作成しました。

私は両方のクラスをテストしましたが、どちらも機能しているようです。

ここで、作成した 2 つのクラスを使用するメニューを作成する必要があります。このメニューは、ユーザーが情報を入力し、次のアカウントに関する情報を検索できるようにします。

  1. 顧客の詳細を追加する
  2. ビジネスアカウントに入金する
  3. ビジネスアカウントに検針を記録する
  4. ビジネスアカウントの現在の残高を表示する
  5. 完全なアカウントの詳細を表示する
  6. ビジネス アカウントの割引額を変更する
  7. すべてのビジネス アカウントの単価を変更する
  8. メニューシステムの使い方

オンラインのリソースを使用してそれを行う方法を見つけるために最善を尽くしましたが、現在迷っています. これまで、メニュー システムを作成しようとするたびに、それを機能させることができませんでした。誰かがそれを行う方法の基本を手伝ってくれれば幸いです。

ありがとう :)


public class GasAccount
{
    private int intAccRefNo;
    private String strName;
    private String strAddress;
    public double dblBalance;
    private double dblUnits;
    public static double dblUnitsCosts = 0.02;

    public GasAccount (int intNewAccRefNo , String strNewName , String strNewAddress)
    {
    }

    public GasAccount (int intNewAccRefNo , String strNewName , String strNewAddress , double dblNewUnits)
    {
        intAccRefNo = intNewAccRefNo;
        strName = strNewName;
        strAddress = strNewAddress;
        dblUnits = dblNewUnits;
        dblBalance = dblUnits * dblUnitsCosts;
    }

    public int getAccRefNo()
    {
        return intAccRefNo;
    }

    public String getName()
    {
        return strName;
    }

    public String getAddress()
    {
        return strAddress;
    }

    public void deposit(double dblDepositAmount)
    {
        dblBalance = dblBalance - dblDepositAmount;
    }

    public double getBalance()
    {
        return dblBalance;
    }

    public double getUnitCost()
    {
        return dblUnitsCosts;
    }

    public void recordUnits (double dblUnitsUsed)
    {
        dblBalance = dblBalance + dblUnitsUsed * dblUnitsCosts;
        dblUnits = dblUnitsUsed + dblUnits;
    }

    public double getUnits()
    {
        return dblUnits;
    }

    public void updateUnitsCosts(double dblNewUnitsCosts)
    {
        this.dblUnitsCosts = dblNewUnitsCosts;
    }
}

そしてそれを拡張する別のもの -

public class BusinessAccount extends GasAccount
{

    private double dblDiscount;

    public BusinessAccount (int intNewAccRefNo, String strNewName, String strNewAddress, double dblNewUnits, double dblNewDiscount)
    {
        super (intNewAccRefNo , strNewName , strNewAddress, dblNewUnits);
        dblDiscount = dblNewDiscount;
    }

    public void setNewDiscount(double dblNewDiscount)
    {
        dblDiscount = dblNewDiscount;
    }

    public double getDiscount()
    {
        return dblDiscount;
    }

    @Override
    public void recordUnits (double dblUnitsUsed)
    {
        double dblNewBalance;
        dblBalance = dblBalance + dblUnitsUsed * dblUnitsCosts;
        dblNewBalance = dblUnitsUsed * dblUnitsCosts * dblDiscount / 100;
        dblBalance = dblBalance - dblNewBalance;
    }

5番目のオプションまで、私が試みたメニューは次のようになります。BuisnessAccount.getMethod が常にエラーとして表示されるため、他のクラスからメソッドを呼び出すと、何かひどく間違ったことをしています。また、変数を再度宣言することは、他のクラスへのリンクがないため、完全に間違っていると確信しています。

誰かが私がこれを解決するのを手伝ってくれるなら、それは大歓迎です

import java.util.Scanner;

public class Menu
{
    public static void main(String [] args)
    {

        Scanner input = new Scanner(System.in);

        int Choice;

        {
            System.out.println("------------------------------");
            System.out.println ( "1. Add the customers details" ) ;
            System.out.println ( "2. Make a deposit to the business account" );
            System.out.println ( "3. Record a meter reading to the business account" ) ;
            System.out.println ( "4. Display current balance of the business account" ) ;
            System.out.println ( "5. Display full account details" ) ;
            System.out.println ( "6. Change the discount value for the business account" ) ;
            System.out.println ( "7. Change the cost per unit for all business accounts ");
            System.out.println ( "8. How to use the menu system ");
            System.out.println ( "Any other number will exit the program");
            System.out.println("------------------------------");
            System.out.println ( "\n\nEnter a number from 1 to 8" );
            Choice = input.nextInt();

            switch (Choice)
            {
             case 1 :
              int intNewAccRefNo;
              String strNewName;
              String strNewAddress;
              Double dblNewUnits;
              Double dblNewDiscount;

              System.out.println("Please enter the account number?");
              intNewAccRefNo  = input.nextInt();

              System.out.println("Please enter the account name?");
              input.nextLine();
              strNewName = input.nextLine();

              System.out.println("Please enter the account address?");
              strNewAddress = input.nextLine();

              System.out.println("Please enter the number of initial number of units used?");
              dblNewUnits = input.nextDouble();

              System.out.println("Please enter the discount?");
              dblNewDiscount = input.nextDouble();

             case 2:

              double dblDeposit;

              System.out.println("Please enter the amount you want to deposit?");
              dblDeposit = input.nextDouble();

              System.out.println ( "The current balance: " + BusinessAccount.getBalance() ) ;

             case 3:

              double dblUnits;

              System.out.println("Enter the number of Units Used");
              dblUnits = input.nextDouble();
              BusinessAccount.recordUnits(dblUnits);

             case 4:

              System.out.println("\n Current Balance: £"+ BusinessAccount.getBalance());

             case 5:

               System.out.println("Account Reference Number: " + BusinessAccount.getAccRefNo());
               System.out.println("Address: " + BusinessAccount.getAddress());
               System.out.println("Name: " + BusinessAccount.getName());
               System.out.println("Balance: " + BusinessAccount.getBalance());
               System.out.println("Discount: " + BusinessAccount.getDiscount());
               System.out.println("Units: " + BusinessAccount.getUnits());

case 1 :  

String strAddress;

System.out.println("Please enter the account address?"); 
strAddress = input.nextLine(); 
System.out.println("Address:" + firstAccount.getAddress());

ユーザーが入力したものと私が呼び出しているメソッドとの間に関係がありません。修正方法がわかりません。

4

2 に答える 2

3

を使用してBusinessAccount.someMethod()、静的コンテキストで上記のメソッドを呼び出そうとしていますが、メソッドは静的ではありません。メソッドを呼び出すには、それらを静的にするか、それらを呼び出すことができるオブジェクトを作成する必要があります。

BusinessAccount ba= new BusinessAccount (4, "name", "address", 3.4, 43.4);
ba.someMethodFromClass();

あなたの場合、それらを静的にしたくありません。静的メソッド/変数の詳細を読んでください (以下を参照)。

役立つドキュメント:
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/ JMenu.html

2 番目の質問に答えるには、変数に値を代入できるメソッド (メインではなくオブジェクトのクラス) が必要です。すなわち:

public void setAddress (String address)
{
    strAddress=address;
}

次に、main から読み込んだアドレスを関数に渡します。そうすることで、ユーザーからの値をクラスに格納されている値に初期化/割り当てています。つまり、次のようになります。

System.out.println("Please enter the account address?"); 
String temp = input.nextLine(); 
ba.setAddress(temp);
System.out.println("Address:" + ba.getAddress());

またはさらに良いことに、

System.out.println("Please enter the account address?"); 
ba.setAddress(input.nextLine());
System.out.println("Address:" + ba.getAddress());
于 2013-05-19T05:28:37.700 に答える
0

SteveP が言ったことから外れて、他のクラスのインスタンスをインスタンス変数として Menu クラスに保存するのは良い考えです。

また、GUI インターフェイスを使用している場合は、次の JMenu クラス API が役立つ場合があります: http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html

JMenuBar、JMenuItem も探します。

于 2013-05-19T05:48:33.590 に答える