私はJavaの初心者コースに参加しています...そして、私の最新の割り当ては、何らかの理由で非常に難しいようです。割り当てはファイルI/Oに焦点を合わせています。それは多くの部分を含みます、しかしこの部分は私を本当に混乱させるものです。これには以下が含まれます。
- 各行に最初に部門(N、S、E、またはW)があり、次に次の行に四半期(1-4)があり、次に3行目に売上高があり、それから繰り返される販売ファイルを読み取ります。(これは大丈夫です)
- 各行に許容されるオプション/ファイルタイプの1つがあることを検証する必要があります(これは問題なく実行できます)
- 次に、エラーをエラーファイルにダンプし、別のファイルを指定して、入力ファイルが正しい形式になるまで繰り返すようにユーザーに依頼します。 (これを機能させます)
- 正しい形式になったら、以下の形式で販売レポートを生成できるようにする必要があります(これをどのように収集できるかわかりません...)
セールスレポート
部門別の総売上高:
北$合計
南$合計
東$合計
西$合計四半期ごと
の総売上高: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