-1

私はJavaの初心者コースに参加しています...そして、私の最新の割り当ては、何らかの理由で非常に難しいようです。割り当てはファイルI/Oに焦点を合わせています。それは多くの部分を含みます、しかしこの部分は私を本当に混乱させるものです。これには以下が含まれます。

  1. 各行に最初に部門(N、S、E、またはW)があり、次に次の行に四半期(1-4)があり、次に3行目に売上高があり、それから繰り返される販売ファイルを読み取ります。(これは大丈夫です)
  2. 各行に許容されるオプション/ファイルタイプの1つがあることを検証する必要があります(これは問題なく実行できます)
  3. 次に、エラーをエラーファイルにダンプし、別のファイルを指定して、入力ファイルが正しい形式になるまで繰り返すようにユーザーに依頼します。 (これを機能させます)
  4. 正しい形式になったら、以下の形式で販売レポートを生成できるようにする必要があります(これをどのように収集できるかわかりません...)

セールスレポート

部門別の総売上高:
北$合計
南$合計
東$合計
西$合計

四半期ごと
の総売上高:1月から3月までの合計
4月から6月までの合計
7月から9月までの合計
10月から12月までの合計

年末合計:$ total

1つのメニューオプションは、ファイルが正しい形式であることを検証することである必要があります。その後、別のメニューオプションが表示され、販売レポートが生成されます。

注:配列を使用することはまだ期待されていません(これが次の割り当てです)。

 import java.io.*;
 import java.util.Scanner;

 public class SalesReporting {
    public static void main(String[] args) throws Exception {
    String inputData;
    String divisionRead;
    int qtrRead;
    double salesRead;
    String filePath;
    String menuChoice;
    File fileName;
    PrintWriter outputErrorLog;
    PrintWriter outputSalesReport;
    Scanner keyboard = new Scanner(System.in);
    Scanner inputFile;
    String overwriteFile;
    Boolean isDataFileError;
    Boolean isValidSalesFile = false;
    Boolean isValidMenuChoice;
    Boolean isToOverwrite = false;

    System.out.println("\tHarmway Corporation" +
            "\nQuarterly Sales Report Generator");

    do { 
        do {
            isValidMenuChoice = true;

            // display main menu options to user & prompt for choice
            System.out.print("\n\tMain Menu" +
                "\n" +
                "\n[V]alidate Sales Data");
            // only display generate sales report option if a sales report has been validated
            if (isValidSalesFile) {
                System.out.print("\n[G]enerate Sales Report");
            }
            System.out.print("\nE[x]it program" +
                "\n");

            System.out.print("\nEnter choice: ");

            menuChoice = keyboard.next();

            if (!menuChoice.equalsIgnoreCase("v") &&
                !menuChoice.equalsIgnoreCase("g") &&
                !menuChoice.equalsIgnoreCase("x")) {
                isValidMenuChoice = false;
                System.out.print("\n\t**Error** - Invalid menu item");
            }
        } while (isValidMenuChoice == false);

        if (menuChoice.equalsIgnoreCase("v")) {
            do {
                // prompt user for the sales data file path
                System.out.print("\nSales data file path: ");
                filePath = keyboard.next();

                fileName = new File(filePath);

                // if the file path doesn't exist, error displayed
                if (!fileName.exists()) {
                    System.out.println("\n" + fileName + " not found");
                }
            } while (!fileName.exists());

            // create a scanner for the input file
            inputFile = new Scanner(fileName);

            // create an error log to dump invalid sales data errors to
            fileName = new File("errorlog.txt");
            outputErrorLog = new PrintWriter(fileName);

            // resets boolean to allow for error free data file check
            isDataFileError = false;

            // validate and store the sales data
            while (inputFile.hasNext())
            {
                // first line must be division N, S, E or W to be valid
                inputData = inputFile.next();
                try 
                {
                    divisionRead = inputData;

                    if (isValidDivision(divisionRead)) {
                        System.out.println("ok division");
                    }

                    else 
                    {
                        isDataFileError = true;
                        outputErrorLog.println(divisionRead + ",Invalid division value");
                    }
                } 
                catch (Exception e) 
                {
                    isDataFileError = true;
                    outputErrorLog.println(inputData + ",Invalid division value");
                }

                // if second line is a valid quarter
                inputData = inputFile.next();
                try 
                {
                    qtrRead = Integer.parseInt(inputData);

                    if (isValidQuarter(qtrRead)) {
                        System.out.println("ok quarter");
                    }

                    else
                    {
                        isDataFileError = true;
                        outputErrorLog.println(qtrRead + ",Invalid quarter value");
                    }
                } 
                catch (Exception e) 
                {
                    isDataFileError = true;
                    outputErrorLog.println(inputData + ",Invalid quarter value");
                }

                inputData = inputFile.next();
                try 
                {
                    salesRead = Double.parseDouble(inputData);  

                    if (isValidSales(salesRead)) {
                        System.out.println("ok sales");
                    }

                    else
                    {
                        isDataFileError = true;
                        outputErrorLog.println(salesRead + ",Invalid sales amount value");
                    }
                } 
                catch (Exception e) 
                {
                    isDataFileError = true;
                    outputErrorLog.println(inputData + ",Invalid sales amount value");
                }


            }


            // close the input sales data file
            inputFile.close();

            // close the error log file to write
            outputErrorLog.close();

            if (isDataFileError)
            {
                // there was an error in the sales file; not a valid sales data file
                isValidSalesFile = false;
                System.out.print("\nThe data file contains data errors"
                    + " (See error log for details)");
            }
            else
            {
                // there were no errors; valid sales data file
                isValidSalesFile = true;
                System.out.print("\nThe data file is validated");
            }
        }

        if (menuChoice.equalsIgnoreCase("g")) {
            System.out.println("\ntemp g");

            do {
                // prompt user for file path to save sales report
                System.out.print("\nSave report as: ");
                filePath = keyboard.next();

                // identify file to be used
                fileName = new File(filePath);


                // file already exists; ask whether to overwrite file or not
                if (fileName.exists())
                {
                    do 
                    {
                        System.out.print("\nOverwrite (y/n): ");
                        overwriteFile = keyboard.next();

                        if (overwriteFile.equalsIgnoreCase("y"))
                        {
                            isToOverwrite = true;

                            // create printwriter for the sales data file
                            outputSalesReport = new PrintWriter(filePath);

                            System.out.println("\nGenerating sales report...");



                            // add code to write to the results to the file





                            // close sales report
                            outputSalesReport.close();

                            System.out.println("\nReport generated successfully!"); 
                        }

                    } while (!overwriteFile.equalsIgnoreCase("n") &&
                            !overwriteFile.equalsIgnoreCase("y"));
                }
                // file doesn't already exist; save the file
                else if (!fileName.exists())
                {
                    // create printwriter for the sales data file
                    outputSalesReport = new PrintWriter(filePath);

                    System.out.println("\nGenerating sales report...");



                    // add code to write to the results to the file





                    // close sales report
                    outputSalesReport.close();

                    System.out.println("\nReport generated successfully!");
                }   
            } while (!isToOverwrite);


        }

        if (menuChoice.equalsIgnoreCase("x")) {
            System.out.println("\nProgram has been terminated.");
            System.exit(0);
        }

    } while (!menuChoice.equalsIgnoreCase("x"));

}



public static boolean isValidDivision(String divisionRead) {
    if (divisionRead.equalsIgnoreCase("N") ||
            divisionRead.equalsIgnoreCase("S") ||
            divisionRead.equalsIgnoreCase("E") ||
            divisionRead.equalsIgnoreCase("W")) {
        return true;
    }

    else {
        return false;
    }
}

public static boolean isValidQuarter(int qtrRead) {
    if (qtrRead >= 1 && qtrRead <= 4) {
        return true;
    }

    else {
        return false;
    }
}

public static boolean isValidSales(double salesRead) {
    if (salesRead >= 0) {
        return true;
    }

    else {
        return false;
    }
}
}

私は特定のコードを求めているのではなく、どのように進めるべきかについてのガイダンスを求めています。何かアドバイスをいただければ幸いです。私はこの任務に1か月以上立ち往生しています!

有効な形式の場合の販売データファイルの例(それぞれが独自の行にあります...フォーラムは休憩を無視しています):

N
1
35.50
N
2
26.99
N
3
77.45
N
4
58.30
S
1
132.15
S
2
81.19
S
3
159.06
S
4
83.55
E
1
99.40
E
2
25.39
E
3
50.25
E
4
43.21
W
1
120.89
W
2
392.11
W
3
105.76
W
4
299.95
N
2
66.15
N
3
38.22
N
4
27.66
E
2
135.32
E
3
37.50
E
4
9.10

4

2 に答える 2

0

保存する必要がある情報を含むクラスを自分で作成します (SalesDataたとえば)。ファイルの各セクションを検証し、新しいSalesDataオブジェクトを作成して、読み取った値をシードします。そこからjava.util.List、のように実装に追加しますArrayList

これにより、ファイルが読み取られてレポートが生成されると、リストをループできます。

他の選択肢は、各部門と四半期の集計を維持することです。これは少し単純でメモリ消費が少ないですが、レポートの内容が変更された場合の柔軟性は低くなります。

于 2013-01-28T04:11:28.897 に答える
0

配列またはコレクションを扱っていない ( を扱いたくない) ため、North、South、East、West、年末の合計の変数を作成することを検討できます。ファイルを反復処理すると、4 つの四半期がこれらの変数の値を更新します。

コレクションを使用すると、このタスクは少し合理化されますが、作業量はほぼ同じになります。

実際のレポートを生成するには、次のような連結に String クラスを使用できます。

String.format("%s:%s",strDivision, doubleAmount);

これにより、必要な形式で情報が得られます。これを拡張して、レポートの残りの部分に対処することができます。

ファイルを検証できると言っているので、ファイルの解析に支援が必要だとは思いません。

于 2013-01-28T04:11:48.037 に答える