Upload project.
This commit is contained in:
parent
997cfe4f74
commit
64f60a5f23
73
build.xml
Normal file
73
build.xml
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="ContractManager" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project ContractManager.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
-pre-init: called before initialization of project properties
|
||||
-post-init: called after initialization of project properties
|
||||
-pre-compile: called before javac compilation
|
||||
-post-compile: called after javac compilation
|
||||
-pre-compile-single: called before javac compilation of single file
|
||||
-post-compile-single: called after javac compilation of single file
|
||||
-pre-compile-test: called before javac compilation of JUnit tests
|
||||
-post-compile-test: called after javac compilation of JUnit tests
|
||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
||||
-pre-jar: called before JAR building
|
||||
-post-jar: called after JAR building
|
||||
-post-clean: called after cleaning build products
|
||||
|
||||
(Targets beginning with '-' are not intended to be called on their own.)
|
||||
|
||||
Example of inserting an obfuscator after compilation could look like this:
|
||||
|
||||
<target name="-post-compile">
|
||||
<obfuscate>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</obfuscate>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
|
||||
Another way to customize the build is by overriding existing main targets.
|
||||
The targets of interest are:
|
||||
|
||||
-init-macrodef-javac: defines macro for javac compilation
|
||||
-init-macrodef-junit: defines macro for junit execution
|
||||
-init-macrodef-debug: defines macro for class debugging
|
||||
-init-macrodef-java: defines macro for class execution
|
||||
-do-jar: JAR building
|
||||
run: execution of project
|
||||
-javadoc-build: Javadoc generation
|
||||
test-report: JUnit report generation
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="ContractManager-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
Notice that the overridden target depends on the jar target and not only on
|
||||
the compile target as the regular run target does. Again, for a list of available
|
||||
properties which you can use, check the target you are overriding in the
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
</project>
|
3
manifest.mf
Normal file
3
manifest.mf
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
X-COMMENT: Main-Class will be added automatically by build
|
||||
|
470
src/contractmanager/Contract.java
Normal file
470
src/contractmanager/Contract.java
Normal file
@ -0,0 +1,470 @@
|
||||
package contractmanager;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Calendar;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
public class Contract {
|
||||
//local variables (contract data) for use in the class
|
||||
private String clientName, clientReference;
|
||||
private int clientPackage, clientDataBundle, clientPeriod;
|
||||
private boolean clientInternationalCalls;
|
||||
public int[][] plans;
|
||||
|
||||
//constructor for init values
|
||||
public Contract()
|
||||
{
|
||||
//init variables to null/empty/default values
|
||||
clientName = "";
|
||||
clientPackage = -1;
|
||||
clientDataBundle = -1;
|
||||
clientReference = "";
|
||||
clientPeriod = -1;
|
||||
clientInternationalCalls = false;
|
||||
//init two dimentional array to store the contract costs
|
||||
plans = new int[][]{
|
||||
{500, 700, 900, -1},
|
||||
{650, 850, 1050, -1},
|
||||
{850, 1050, 1250, 2000}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//public getters and setters for vars
|
||||
//returns client name
|
||||
public String getClientName()
|
||||
{
|
||||
return clientName;
|
||||
}
|
||||
|
||||
//sets client's name
|
||||
public boolean setClientName(String n)
|
||||
{
|
||||
//data validation (not null, not empty, most contain a space, muse be longer than 3 and less than 25), returns false
|
||||
if ((n == null) || (n.equals("")) || !n.contains(" ") || n.length() < 3 || n.length() > 25)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
clientName = n;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//returns client's package
|
||||
public int getClientPackage()
|
||||
{
|
||||
return clientPackage;
|
||||
}
|
||||
|
||||
//sets client's package
|
||||
public boolean setClientPackage(String nS)
|
||||
{
|
||||
//checks to make sure input can be converted to an integer, if not returns false (not a valid input)
|
||||
int n;
|
||||
if (isStringInt(nS))
|
||||
{
|
||||
n = Integer.parseInt(nS);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
//data validation (if it's not 1, 2 or 3, return false)
|
||||
if (n != 1 && n != 2 && n != 3)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
clientPackage = n;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//returns client's data bundle
|
||||
public int getClientDataBundle()
|
||||
{
|
||||
return clientDataBundle;
|
||||
}
|
||||
|
||||
//sets cleint's data bundle
|
||||
public boolean setClientDataBundle(String nS)
|
||||
{
|
||||
//checks to make sure input can be converted to an integer, if not returns false (not a valid input)
|
||||
int n;
|
||||
if (isStringInt(nS))
|
||||
{
|
||||
n = Integer.parseInt(nS);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
//data validation (follows data validation rules set by client for the data bundle)
|
||||
if (n != 1 && n != 2 && n != 3 && (n != 4 && (n == 1 || n == 2)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
clientDataBundle = n;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
//returns the client's reference code
|
||||
public String getClientReference()
|
||||
{
|
||||
return clientReference;
|
||||
}
|
||||
|
||||
//sets the client's reference code
|
||||
public boolean setClientReference(String n)
|
||||
{
|
||||
//data validation to make sure the format is 'AA111A' (Letter, Letter, Number, Number, Number, Letter)
|
||||
if (n.length() == 6)
|
||||
{
|
||||
//data validation
|
||||
//OLD VALIDATION USING CHAR VALUES; CHANGED TO CHARACTER CLASS CHECKS
|
||||
//if ((n.charAt(0) >= 'A' && n.charAt(0) <= 'Z') && (n.charAt(1) >= 'A' && n.charAt(1) <= 'Z') && (n.charAt(2) >= '0' && n.charAt(2) <= '9') && (n.charAt(3) >= '0' && n.charAt(3) <= '9') && (n.charAt(4) >= '0' && n.charAt(4) <= '9') && (n.charAt(5) >= 'A' && n.charAt(5) <= 'Z'))
|
||||
if (Character.isLetter(n.charAt(0)) && Character.isLetter(n.charAt(1)) && Character.isDigit(n.charAt(2)) && Character.isDigit(n.charAt(3)) && Character.isDigit(n.charAt(4)) && Character.isLetter(n.charAt(5)))
|
||||
{
|
||||
clientReference = n;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//returns the client's contract period
|
||||
public int getClientPeriod()
|
||||
{
|
||||
return clientPeriod;
|
||||
}
|
||||
|
||||
//sets the client's contract period
|
||||
public boolean setClientPeriod(String nS)
|
||||
{
|
||||
//checks to make sure input can be converted to an integer, if not returns false (not a valid input)
|
||||
int n;
|
||||
if (isStringInt(nS))
|
||||
{
|
||||
n = Integer.parseInt(nS);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
//checks to make sure the contract length is valid (1, 12, 18 and 24) else returns false
|
||||
if (n == 1 || n == 12 || n == 18 || n == 24 )
|
||||
{
|
||||
//returns false since business accounts can't be one month long
|
||||
if ((n == 1 && clientReference.charAt(5) == 'B'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
clientPeriod = n;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//returns the client's selection on international calls
|
||||
public boolean getClientInternationalCalls()
|
||||
{
|
||||
return clientInternationalCalls;
|
||||
}
|
||||
|
||||
//sets the clien't selection on international calls
|
||||
public boolean setClientInternationalCalls(String n)
|
||||
{
|
||||
//data validation, yes or no
|
||||
if (n.equalsIgnoreCase("y"))
|
||||
{
|
||||
clientInternationalCalls = true;
|
||||
return true;
|
||||
}
|
||||
else if (n.equalsIgnoreCase("n"))
|
||||
{
|
||||
clientInternationalCalls = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int getClientMonthlyRate()
|
||||
{
|
||||
//returns the cost in the package grid
|
||||
return plans[clientPackage-1][clientDataBundle-1];
|
||||
}
|
||||
|
||||
public int getPromotionAmmount()
|
||||
{
|
||||
|
||||
boolean businessAccount = false;
|
||||
//creates the default multiplyer (1)
|
||||
double promoMultiplyer = 1;
|
||||
//checks to see if they're a business account
|
||||
if (clientReference.charAt(5) == 'B')
|
||||
{
|
||||
businessAccount = true;
|
||||
}
|
||||
//if they are they get a 10% discount (also does other calculations to see if they apply for a discount in other areas)
|
||||
if (businessAccount)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer - 0.1;
|
||||
}
|
||||
else if (clientPeriod == 18 || clientPeriod == 12)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer - 0.05;
|
||||
}
|
||||
else if (clientPeriod == 24)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer - 0.1;
|
||||
}
|
||||
if (clientInternationalCalls)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer + 0.15;
|
||||
}
|
||||
//returns the complete monthly rate including discounts/or adds
|
||||
return (int)(getClientMonthlyRate() * promoMultiplyer);
|
||||
}
|
||||
|
||||
public int getPromotionPercentage()
|
||||
{
|
||||
//this gets the percentage of the promotion
|
||||
boolean businessAccount = false;
|
||||
int promoMultiplyer = 0;
|
||||
if (clientReference.charAt(5) == 'B')
|
||||
{
|
||||
businessAccount = true;
|
||||
}
|
||||
if (businessAccount)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer + 10;
|
||||
}
|
||||
else if (clientPeriod == 18 || clientPeriod == 12)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer + 5;
|
||||
}
|
||||
else if (clientPeriod == 24)
|
||||
{
|
||||
promoMultiplyer = promoMultiplyer + 10;
|
||||
}
|
||||
|
||||
return promoMultiplyer;
|
||||
}
|
||||
|
||||
public String getPackageString(int i)
|
||||
{
|
||||
//returns the text for the value of package
|
||||
if (i == 1)
|
||||
{
|
||||
return "Small (300)";
|
||||
}
|
||||
if (i == 2)
|
||||
{
|
||||
return "Medium (600)";
|
||||
}
|
||||
if (i == 3)
|
||||
{
|
||||
return "Large (1200)";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getDataString(int i)
|
||||
{
|
||||
//returns the text for the value of the data bundle
|
||||
if (i == 1)
|
||||
{
|
||||
return "Low (1GB)";
|
||||
}
|
||||
if (i == 2)
|
||||
{
|
||||
return "Medium (4GB)";
|
||||
}
|
||||
if (i == 3)
|
||||
{
|
||||
return "High (8GB)";
|
||||
}
|
||||
if (i == 4)
|
||||
{
|
||||
return "Unlimited";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getBusinessStatus(String s)
|
||||
{
|
||||
//returns a string of the business type (Business or Regular)
|
||||
if (s.charAt(5) == 'B')
|
||||
{
|
||||
return "Business";
|
||||
}
|
||||
if (s.charAt(5) == 'N')
|
||||
{
|
||||
return "Regular";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getIntlCallsYesNo(boolean n)
|
||||
{
|
||||
//returns the string of the value of international calls
|
||||
if (n == true)
|
||||
{
|
||||
return "Yes";
|
||||
}
|
||||
return "No";
|
||||
|
||||
}
|
||||
|
||||
|
||||
private String convertBoolToYN(Boolean n)
|
||||
{
|
||||
//converts a boolean to a string of Y or N
|
||||
if (n)
|
||||
{
|
||||
return "Y";
|
||||
}
|
||||
return "N";
|
||||
}
|
||||
|
||||
//checks if a string can be cast to an int
|
||||
private boolean isStringInt(String nS)
|
||||
{
|
||||
try
|
||||
{
|
||||
Integer.parseInt(nS);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//writes the whole contract to a line in a text file
|
||||
public boolean writeToFile()
|
||||
{
|
||||
//declares a new file to be used for the writer
|
||||
File contractFile = new File("contracts.txt");
|
||||
PrintWriter output = null;
|
||||
|
||||
//checks to make sure the file exists, if it doesn't it creates a new one
|
||||
if (!contractFile.exists())
|
||||
{
|
||||
try
|
||||
{
|
||||
contractFile.createNewFile();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//creates a new FileWriter in the file created earlier, also a printWriter
|
||||
try
|
||||
{
|
||||
FileWriter writeToContract = new FileWriter(contractFile, true);
|
||||
output = new PrintWriter(writeToContract);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//get date and create the format for it
|
||||
Calendar cal = Calendar.getInstance();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
|
||||
|
||||
//actual writing to file
|
||||
output.append(sdf.format(cal.getTime()) + "\t" + this.clientPackage + "\t" + this.clientDataBundle + "\t" + this.clientPeriod + "\t" + this.convertBoolToYN(this.clientInternationalCalls) + "\t" + this.clientReference + "\t" + this.getPromotionAmmount() + "\t" + this.clientName + "\n");
|
||||
output.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
//used for writing the contract to the screen
|
||||
public String formatStringLine(int lineNumber, String lineData, String lineData2)
|
||||
{
|
||||
//return data needed for the line referenced
|
||||
if (lineNumber == 3)
|
||||
{
|
||||
String spaceLengthData = "| " + lineData;
|
||||
return spaceLengthData + getSpaces(spaceLengthData.length(), 45) + "|";
|
||||
}
|
||||
if (lineNumber == 4)
|
||||
{
|
||||
return "| Ref: " + lineData + " Date: " + lineData2 + " |";
|
||||
}
|
||||
if (lineNumber == 5)
|
||||
{
|
||||
String spaceLengthData = "| Package: " + lineData;
|
||||
String spaceLengthData2 = "Data: " + lineData2;
|
||||
return spaceLengthData + getSpaces(lineData.length(), 15) + spaceLengthData2 + getSpaces(lineData2.length(), 12) + "|";
|
||||
}
|
||||
if (lineNumber == 6)
|
||||
{
|
||||
String spaceLengthData = "| Period: " + lineData;
|
||||
String spaceLengthData2 = "Type: " + lineData2;
|
||||
return spaceLengthData + getSpaces(lineData.length(), 15) + spaceLengthData2 + getSpaces(lineData2.length(), 12) + "|";
|
||||
}
|
||||
if (lineNumber == 8)
|
||||
{
|
||||
String localPercent = " ";
|
||||
if (this.getPromotionPercentage() > 0)
|
||||
{
|
||||
localPercent = "%";
|
||||
}
|
||||
String spaceLengthData = "| Discount: " + lineData + localPercent;
|
||||
String spaceLengthData2 = "Intl. Calls: " + lineData2;
|
||||
return spaceLengthData + getSpaces(lineData.length() + 1, 8) + spaceLengthData2 + getSpaces(lineData2.length(), 12) + "|";
|
||||
}
|
||||
if (lineNumber == 10)
|
||||
{
|
||||
String tempString = (this.getPromotionPercentage() <= 0 ? "" : "Discounted ").concat("Monthly Charge: £" + String.format("%.2f", (float)(getPromotionAmmount() / 100)));
|
||||
int localOffset = 0;
|
||||
//if the length is odd, an offset is needed for the spaces
|
||||
if (tempString.length() % 2 == 1)
|
||||
{
|
||||
localOffset = 1;
|
||||
}
|
||||
return "|" + getSpaces(0, ((int)Math.round(44 - tempString.length()) / 2)) + tempString + getSpaces(0, ((int)Math.round(44 - tempString.length()) / 2 + localOffset)) + "|";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//used for calculating the needed spaces for each line in the printout
|
||||
private String getSpaces(int lineLength, int lineSpaces)
|
||||
{
|
||||
String tempSpaces = "";
|
||||
while (lineLength < lineSpaces)
|
||||
{
|
||||
tempSpaces = tempSpaces + " ";
|
||||
lineLength++;
|
||||
}
|
||||
return tempSpaces;
|
||||
}
|
||||
|
||||
|
||||
}
|
279
src/contractmanager/ContractFileManager.java
Normal file
279
src/contractmanager/ContractFileManager.java
Normal file
@ -0,0 +1,279 @@
|
||||
package contractmanager;
|
||||
|
||||
import java.util.Scanner;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ContractFileManager {
|
||||
final String archive = "archive.txt";
|
||||
final String contracts = "contracts.txt";
|
||||
String[] monthString;
|
||||
|
||||
void ContractFileManager()
|
||||
{
|
||||
//Constructor, creates array with months for later use
|
||||
monthString = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||
}
|
||||
|
||||
//Method for creating a scanner for a given filename
|
||||
private Scanner createScanner(String fileName)
|
||||
{
|
||||
//Creates a scanner if the file is found (and returns it), if not returns null
|
||||
Scanner fileScanner;
|
||||
try
|
||||
{
|
||||
fileScanner = new Scanner(new File(fileName));
|
||||
}
|
||||
catch(FileNotFoundException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return fileScanner;
|
||||
}
|
||||
|
||||
public int fileLineCount(String fileName, int monthSelected)
|
||||
{
|
||||
//This first section is to detect whether only one month is being searched or not
|
||||
//-1 means all months are searched
|
||||
boolean allMonths = false;
|
||||
if (monthSelected == -1)
|
||||
{
|
||||
allMonths = true;
|
||||
}
|
||||
//declares a new scanner to read text file
|
||||
Scanner fileScanner = createScanner(fileName);
|
||||
if (fileScanner != null)
|
||||
{
|
||||
int counter = 0;
|
||||
boolean isLineNull = false;
|
||||
while (!isLineNull)
|
||||
{
|
||||
try
|
||||
{
|
||||
String nextLine = fileScanner.nextLine();
|
||||
//checks to make sure the line contains text, then checks if a specific month is needed to be searched
|
||||
if (!nextLine.equals("") && (allMonths || getMonthInt(nextLine.substring(3, 6)) == monthSelected))
|
||||
{
|
||||
//counter is increased by 1
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
isLineNull = true;
|
||||
}
|
||||
}
|
||||
fileScanner.close();
|
||||
//return the number of lines detected
|
||||
return counter;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public int getContractsWithHighUnlimited(String fileName, int monthSelected)
|
||||
{
|
||||
//This first section is to detect whether only one month is being searched or not
|
||||
//-1 means all months are searched
|
||||
boolean allMonths = false;
|
||||
if (monthSelected == -1)
|
||||
{
|
||||
allMonths = true;
|
||||
}
|
||||
Scanner fileScanner = createScanner(fileName);
|
||||
if (fileScanner != null)
|
||||
{
|
||||
int counter = 0;
|
||||
boolean isLineNull = false;
|
||||
while (!isLineNull)
|
||||
{
|
||||
try
|
||||
{
|
||||
String nextLine = fileScanner.nextLine();
|
||||
//checks to make sure the line contains text, then checks if a specific month is needed to be searched
|
||||
if (!nextLine.equals("") && (allMonths || getMonthInt(nextLine.substring(3, 6)) == monthSelected))
|
||||
{
|
||||
//check if the 2nd element in the line contains 3 or 4, if it does increase the counter by 1
|
||||
String[] splitNextLine = nextLine.split("\t");
|
||||
if (splitNextLine[2].equals("3") || splitNextLine[2].equals("4"))
|
||||
{
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
isLineNull = true;
|
||||
}
|
||||
}
|
||||
fileScanner.close();
|
||||
return counter;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public int getAverageOfLargePackages(String fileName, int monthSelected)
|
||||
{
|
||||
//This first section is to detect whether only one month is being searched or not
|
||||
//-1 means all months are searched
|
||||
boolean allMonths = false;
|
||||
if (monthSelected == -1)
|
||||
{
|
||||
allMonths = true;
|
||||
}
|
||||
Scanner fileScanner = createScanner(fileName);
|
||||
if (fileScanner != null)
|
||||
{
|
||||
int counter = 0;
|
||||
int totalHigh = 0;
|
||||
boolean isLineNull = false;
|
||||
while (!isLineNull)
|
||||
{
|
||||
try
|
||||
{
|
||||
String nextLine = fileScanner.nextLine();
|
||||
//checks to make sure the line contains text, then checks if a specific month is needed to be searched
|
||||
if (!nextLine.equals("") && (allMonths || getMonthInt(nextLine.substring(3, 6)) == monthSelected))
|
||||
{
|
||||
//
|
||||
String[] splitNextLine = nextLine.split("\t");
|
||||
if (splitNextLine[1].equals("3"))
|
||||
{
|
||||
//get the first element and add it to the totalHigh var
|
||||
totalHigh = Integer.parseInt(splitNextLine[6]) + totalHigh;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
isLineNull = true;
|
||||
}
|
||||
}
|
||||
fileScanner.close();
|
||||
//make sure that there's no division by 0!
|
||||
if (counter == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
//return mean in a currency (/100)
|
||||
return (int)(totalHigh / counter);
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
//USED DURING TESTING
|
||||
/*public String[] testStringSplit(String fileName, int monthSelected)
|
||||
{
|
||||
Scanner fileScanner = createScanner(fileName);
|
||||
fileScanner.close();
|
||||
return fileScanner.nextLine().split("\t");
|
||||
}*/
|
||||
|
||||
public int[] getCountOfContractsPerMonth(String fileName, int monthSelected)
|
||||
{
|
||||
//This first section is to detect whether only one month is being searched or not
|
||||
//-1 means all months are searched
|
||||
boolean allMonths = false;
|
||||
if (monthSelected == -1)
|
||||
{
|
||||
allMonths = true;
|
||||
}
|
||||
Scanner fileScanner = createScanner(fileName);
|
||||
if (fileScanner != null)
|
||||
{
|
||||
//create an array for all months
|
||||
int[] monthCounter = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
boolean isLineNull = false;
|
||||
while (!isLineNull)
|
||||
{
|
||||
try
|
||||
{
|
||||
String nextLine = fileScanner.nextLine();
|
||||
if (!nextLine.equals("") && (allMonths || getMonthInt(nextLine.substring(3, 6)) == monthSelected))
|
||||
{
|
||||
//increases the counter for that month by one
|
||||
monthCounter[getMonthInt(nextLine.substring(3, 6)) - 1]++;
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
isLineNull = true;
|
||||
}
|
||||
}
|
||||
fileScanner.close();
|
||||
return monthCounter;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public List<String[]> getSearchValues(String fileName, String searchValues)
|
||||
{
|
||||
//create an array list for the results from the search, since it can be many
|
||||
List<String[]> totalSearchValues = new ArrayList<String[]>();
|
||||
Scanner fileScanner = createScanner(fileName);
|
||||
if (fileScanner != null)
|
||||
{
|
||||
boolean isLineNull = false;
|
||||
while (!isLineNull)
|
||||
{
|
||||
try
|
||||
{
|
||||
String nextLine = fileScanner.nextLine();
|
||||
if (!nextLine.equals(""))
|
||||
{
|
||||
String[] splitNextLine = nextLine.split("\t");
|
||||
//if the 5th or 7th element contains the serach value, the line is added to the list
|
||||
if (splitNextLine[5].toLowerCase().contains(searchValues.toLowerCase()) || splitNextLine[7].toLowerCase().contains(searchValues.toLowerCase()))
|
||||
{
|
||||
totalSearchValues.add(splitNextLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
isLineNull = true;
|
||||
}
|
||||
}
|
||||
fileScanner.close();
|
||||
}
|
||||
//list is then returned
|
||||
return totalSearchValues;
|
||||
}
|
||||
|
||||
//converts a month 3 length string to an integer
|
||||
private int getMonthInt(String monthString)
|
||||
{
|
||||
switch (monthString)
|
||||
{
|
||||
case "Jan" : return 1;
|
||||
case "Feb" : return 2;
|
||||
case "Mar" : return 3;
|
||||
case "Apr" : return 4;
|
||||
case "May" : return 5;
|
||||
case "Jun" : return 6;
|
||||
case "Jul" : return 7;
|
||||
case "Aug" : return 8;
|
||||
case "Sep" : return 9;
|
||||
case "Oct" : return 10;
|
||||
case "Nov" : return 11;
|
||||
case "Dec" : return 12;
|
||||
default : return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
257
src/contractmanager/ContractManager.java
Normal file
257
src/contractmanager/ContractManager.java
Normal file
@ -0,0 +1,257 @@
|
||||
package contractmanager;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Locale;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class ContractManager {
|
||||
//Public vars
|
||||
/* Moved to Contract Class, private
|
||||
public static String clientName = "";
|
||||
public static int clientPackage = -1;
|
||||
public static int clientDataBundle = -1;
|
||||
public static String clientReference = "";
|
||||
public static int clientPeriod = -1;
|
||||
public static boolean clientInternationalCalls = false;
|
||||
public static double clientMonthlyRate = -1;
|
||||
*/
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
int userInput = -1;
|
||||
String userInputString = "";
|
||||
Scanner userInputScanner = new Scanner(System.in);
|
||||
|
||||
//main menu logic, loop used until the user inputs 0
|
||||
while(userInput != 0)
|
||||
{
|
||||
//displays menu after each option is done
|
||||
displayMenu();
|
||||
//gets the user input
|
||||
|
||||
userInputString = userInputScanner.nextLine();
|
||||
try
|
||||
{
|
||||
userInput = Integer.parseInt(userInputString);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//if statements for branching and selecting the option the user asked for
|
||||
if (userInput == 1)
|
||||
{
|
||||
//creates a new contract
|
||||
enterNewContract();
|
||||
}
|
||||
else if (userInput == 2)
|
||||
{
|
||||
//creates a local scanner for the options of the user
|
||||
Scanner userInputScannerLocal = new Scanner(System.in);
|
||||
//asks for user input into which file to search
|
||||
System.out.println("Please input '1' for contracts.txt, please input '2' for archive.txt: ");
|
||||
String fileName;
|
||||
if (userInputScannerLocal.hasNext("1"))
|
||||
{
|
||||
fileName = "contracts.txt";
|
||||
}
|
||||
else
|
||||
{
|
||||
fileName = "archive.txt";
|
||||
}
|
||||
//prints out the data
|
||||
taskReturnData(fileName, -1, 2);
|
||||
|
||||
}
|
||||
else if (userInput == 3)
|
||||
{
|
||||
//creates a local scanner for the options of the user
|
||||
Scanner userInputScannerLocal = new Scanner(System.in);
|
||||
//asks for user input into which file to search
|
||||
System.out.println("Please input '1' for contracts.txt, please input '2' for archive.txt: ");
|
||||
String fileName;
|
||||
if (userInputScannerLocal.hasNext("1"))
|
||||
{
|
||||
fileName = "contracts.txt";
|
||||
}
|
||||
else
|
||||
{
|
||||
fileName = "archive.txt";
|
||||
}
|
||||
//asks for the month to search, then executes the search
|
||||
System.out.println("Please input the number of the month you wish to search: ");
|
||||
int monthSelected = userInputScanner.nextInt();
|
||||
taskReturnData(fileName, monthSelected, 3);
|
||||
}
|
||||
else if (userInput == 4)
|
||||
{
|
||||
//creates a local scanner for the options of the user
|
||||
Scanner userInputScannerLocal = new Scanner(System.in);
|
||||
//asks for user input into which file to search
|
||||
System.out.println("Please input '1' for contracts.txt, please input '2' for archive.txt: ");
|
||||
String fileName;
|
||||
if (userInputScannerLocal.hasNext("1"))
|
||||
{
|
||||
fileName = "contracts.txt";
|
||||
}
|
||||
else
|
||||
{
|
||||
fileName = "archive.txt";
|
||||
}
|
||||
System.out.println("Please input the search values: ");
|
||||
executeSearch(userInputScanner.next(), fileName);
|
||||
}
|
||||
else if (userInput != 0)
|
||||
{
|
||||
//show error
|
||||
System.out.println("Please enter a valid option.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void displayMenu()
|
||||
{
|
||||
//Displays full menu
|
||||
System.out.println("1. Enter new Contract");
|
||||
System.out.println("2. Display Summary of Contracts");
|
||||
System.out.println("3. Display Summary of Contracts for Selected Month");
|
||||
System.out.println("4. Find and display Contract");
|
||||
System.out.println("0. Exit");
|
||||
}
|
||||
|
||||
static void enterNewContract()
|
||||
{
|
||||
//Create new instance of class
|
||||
Contract localCon = new Contract();
|
||||
|
||||
//Create scanner for user input
|
||||
Scanner userInputScanner = new Scanner(System.in);
|
||||
|
||||
|
||||
System.out.print("Please enter the client's Name: ");
|
||||
while(!localCon.setClientName(userInputScanner.nextLine()))
|
||||
{
|
||||
//Failed to add data
|
||||
System.out.print("Invalid name. Please re-enter the client's name: ");
|
||||
}
|
||||
|
||||
System.out.print("Please enter the Package: ");
|
||||
while (!localCon.setClientPackage(userInputScanner.next()))
|
||||
{
|
||||
//Failed to add data
|
||||
System.out.print("Invalid package. Please re-enter the client's package: ");
|
||||
}
|
||||
|
||||
System.out.print("Please enter the Data Bundle: ");
|
||||
while (!localCon.setClientDataBundle(userInputScanner.next()))
|
||||
{
|
||||
//Failed to add data
|
||||
System.out.print("Invalid Data Bundle. Please re-enter the client's Data Bundle: ");
|
||||
}
|
||||
|
||||
System.out.print("Please enter the Reference Number: ");
|
||||
while(!localCon.setClientReference(userInputScanner.next()))
|
||||
{
|
||||
//Failed to add data
|
||||
System.out.print("Invalid Reference Number. Please re-enter the Reference Number: ");
|
||||
}
|
||||
|
||||
System.out.print("Please enter the Period: ");
|
||||
while(!localCon.setClientPeriod(userInputScanner.next()))
|
||||
{
|
||||
//Failed to add data
|
||||
System.out.print("Invalid contract period. Please re-enter the Contract Period: ");
|
||||
}
|
||||
|
||||
System.out.print("Please enter if the client wants International Calls (Y/N): ");
|
||||
while(!localCon.setClientInternationalCalls(userInputScanner.next()))
|
||||
{
|
||||
//Failed to add data
|
||||
System.out.print("Invalid selection. Please re-enter International Calls (Y/N): ");
|
||||
}
|
||||
printContract(localCon);
|
||||
//write data to file
|
||||
localCon.writeToFile();
|
||||
|
||||
}
|
||||
|
||||
static void printContract(Contract localCon)
|
||||
{
|
||||
//get date in correct format for print
|
||||
Calendar cal = Calendar.getInstance();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
|
||||
|
||||
//print final contract
|
||||
System.out.println("|++++++++++++++++++++++++++++++++++++++++++++|");
|
||||
System.out.println("| |");
|
||||
System.out.println(localCon.formatStringLine(3, "Customer: " + localCon.getClientName(), null));
|
||||
System.out.println(localCon.formatStringLine(4, localCon.getClientReference(), sdf.format(cal.getTime())));
|
||||
System.out.println(localCon.formatStringLine(5, localCon.getPackageString(localCon.getClientPackage()), localCon.getDataString(localCon.getClientDataBundle())));
|
||||
System.out.println(localCon.formatStringLine(6, String.valueOf(localCon.getClientPeriod()).concat(localCon.getClientPeriod() == 1 ? " Month" : " Months"), localCon.getBusinessStatus(localCon.getClientReference())));
|
||||
System.out.println("| |");
|
||||
System.out.println(localCon.formatStringLine(8, String.valueOf(localCon.getPromotionPercentage() <= 0 ? "None" : localCon.getPromotionPercentage()), localCon.getIntlCallsYesNo(localCon.getClientInternationalCalls())));
|
||||
System.out.println("| |");
|
||||
System.out.println(localCon.formatStringLine(10, null, null));
|
||||
System.out.println("|++++++++++++++++++++++++++++++++++++++++++++|");
|
||||
}
|
||||
|
||||
//displays the data needed for option 2 & 3
|
||||
private static void taskReturnData(String fileName, int monthSelected, int userSelection)
|
||||
{
|
||||
//calls methods from ContractFileManager class to handle user options
|
||||
ContractFileManager cfm = new ContractFileManager();
|
||||
int[] monthCounts = cfm.getCountOfContractsPerMonth(fileName, monthSelected);
|
||||
String monthResults = "";
|
||||
int counter = 0;
|
||||
// if the user selection is 2, the month's element needs to be outputted
|
||||
if (userSelection == 2)
|
||||
{
|
||||
//check every month
|
||||
for (int countedNumber : monthCounts)
|
||||
{
|
||||
int numberOfSpacesNeeded = 4 - Integer.toString(countedNumber).length();
|
||||
monthResults = monthResults + Integer.toString(countedNumber);
|
||||
//string creation
|
||||
while (numberOfSpacesNeeded >= 0)
|
||||
{
|
||||
monthResults = monthResults + " ";
|
||||
numberOfSpacesNeeded--;
|
||||
}
|
||||
}
|
||||
}
|
||||
//output data
|
||||
System.out.println("");
|
||||
System.out.println("Total number of contracts: " + cfm.fileLineCount(fileName, monthSelected));
|
||||
System.out.println("Contracts with High or Unlimited Data Bundles: " + cfm.getContractsWithHighUnlimited(fileName, monthSelected));
|
||||
System.out.println("Average charge for large packages: " + String.format("%.2f", (float)(((float)cfm.getAverageOfLargePackages(fileName, monthSelected) / 100))));
|
||||
System.out.println("");
|
||||
//only need to output if the user selects 2
|
||||
if (userSelection == 2)
|
||||
{
|
||||
System.out.println("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec");
|
||||
System.out.println(monthResults);
|
||||
}
|
||||
}
|
||||
|
||||
private static void executeSearch(String searchString, String fileName)
|
||||
{
|
||||
ContractFileManager cfm = new ContractFileManager();
|
||||
//for each of the results found, print them to the screen
|
||||
for (String[] searchResult : cfm.getSearchValues(fileName, searchString))
|
||||
{
|
||||
Contract localCon = new Contract();
|
||||
localCon.setClientName(searchResult[7]);
|
||||
localCon.setClientPackage(searchResult[1]);
|
||||
localCon.setClientDataBundle(searchResult[2]);
|
||||
localCon.setClientReference(searchResult[5]);
|
||||
localCon.setClientPeriod(searchResult[3]);
|
||||
localCon.setClientInternationalCalls(searchResult[4]);
|
||||
printContract(localCon);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user