import javax.swing.*;
public class Program6Student {
public static final String YOUR_NAME = "Roshan Patel";
/** It makes sure a non-negative value was inserted */
public static int getNonNegativeIntOrQuit(String inputString) {
int inputtedInteger = 0;
String input = "";
int count = 1;
do {
if(count > 1) {
JOptionPane.showMessageDialog(null, "Your input cannot be " +
"negative.", "Negative Input Error", JOptionPane.ERROR_MESSAGE);
input = JOptionPane.showInputDialog(null, inputString,
"Input", JOptionPane.INFORMATION_MESSAGE);
}
else {
input = JOptionPane.showInputDialog(null, inputString,
"Input", JOptionPane.INFORMATION_MESSAGE);
count++;
}
getStringOrQuit(input);
inputtedInteger = Integer.parseInt(input);
} while (inputtedInteger < 0);
return inputtedInteger;
}
/** Checks to see if cancel was hit. If it was not, returns string.
* If it was, a message is posted to the user saying cancel was hit.
*/
public static String getStringOrQuit(String inputString) {
if (inputString == null) {
JOptionPane.showMessageDialog(null,
"Cancel was selected. Program will exit",
"Program 6 (Roshan Patel)", JOptionPane.WARNING_MESSAGE);
System.exit(0);
}
return inputString;
}
/** Fills in the array with the entries the user entered. */
public static void fillArray(String[] databaseOfSoftware) {
for (int i = 0; i < databaseOfSoftware.length; i++) {
databaseOfSoftware[i] = getStringOrQuit(JOptionPane
.showInputDialog(
null,
"Enter the software title and cost(eg \"Windows Vista, $135.00\")",
"Input", JOptionPane.QUESTION_MESSAGE));
}
}
/** Use bubble sort to move the invalid values to the back. */
public static void sortArrayByValidInvalid(String[] databaseOfSoftware) {
for (int i = 1; i < databaseOfSoftware.length; i++) {
for (int j = 0; j < databaseOfSoftware.length - i; j++) {
if (!(databaseOfSoftware[j].contains("$") && databaseOfSoftware[j]
.contains(","))) {
String tempInt = databaseOfSoftware[j + 1];
databaseOfSoftware[j + 1] = databaseOfSoftware[j];
databaseOfSoftware[j] = tempInt;
}
}
}
}
/** Makes all the invalid entries null. */
public static int removeInvalidItems(String[] databaseOfSoftware) {
int lastIndex;
for (int i = 0; i < databaseOfSoftware.length; i++) {
if (!(databaseOfSoftware[i].contains("$") && databaseOfSoftware[i]
.contains(","))) {
lastIndex = i - 1;
for (int k = i; k < databaseOfSoftware.length; k++) {
databaseOfSoftware[k] = null;
}
return lastIndex;
}
}
return databaseOfSoftware.length - 1;
}
/** Sorts the array in alphabetical order. */
public static void sortArrayByName(String[] databaseOfSoftware,
int lastIndex) {
/* Note it is not lastIndex - 1 because
the final index is also one that we
would like to include. */
for (int i = 0; i < lastIndex; i++) {
for (int j = 0; j < lastIndex - i; j++) {
String title = databaseOfSoftware[j].substring(0,
databaseOfSoftware[j].indexOf(","));
if ((title.compareToIgnoreCase(databaseOfSoftware[j + 1]
.substring(0, databaseOfSoftware[j + 1].indexOf(",")))) < 0) {
String tempInt = databaseOfSoftware[j];
databaseOfSoftware[j] = databaseOfSoftware[j + 1];
databaseOfSoftware[j + 1] = tempInt;
}
}
}
}
/** Displays the valid entries to the user. */
public static void displayArray(String[] databaseOfSoftware, int lastIndex) {
String output = "";
for (int i = lastIndex; i >= 0; i--) {
output += databaseOfSoftware[i] + "\n";
}
JOptionPane.showMessageDialog(null, output, "Program 6 (Roshan Patel)",
JOptionPane.INFORMATION_MESSAGE);
}
/** Adds up the total to all the software. */
public static double sumTotal(String[] databaseOfSoftware, int lastIndex) {
double sum = 0;
for (int i = lastIndex; i >= 0; i--) {
sum += Double.parseDouble(databaseOfSoftware[i].substring(
databaseOfSoftware[i].indexOf("$") + 1,
databaseOfSoftware[i].length()));
}
return sum;
}
/** Searches the database for the software title. */
public static int searchArray(String[] databaseOfSoftware, String title,
int lastIndex) {
String searchString = JOptionPane.showInputDialog(null, title, "Roshan Patel (CIS 120)",
JOptionPane.QUESTION_MESSAGE);
searchString = getStringOrQuit(searchString);
for (int i = lastIndex; i >= 0; i--) {
if (searchString.equalsIgnoreCase(databaseOfSoftware[i].substring(
0, databaseOfSoftware[i].indexOf(","))) == true) {
return i;
}
}
return -1;
}
// You should have no reason to alter the main method below, except perhaps
// to comment out portions of the code as you implement one method at a
// time.
public static void main(String[] args) {
int size;
int lastInUse;
int response;
size = getNonNegativeIntOrQuit("How many software titles would you like to"
+ " enter into\n the price list system? (must be non-negative)");
if (size == 0) {
JOptionPane.showMessageDialog(null,
"You entered 0. The program will exit.", "Program 6 ("
+ YOUR_NAME + ")", JOptionPane.WARNING_MESSAGE);
System.exit(0);
}
lastInUse = size - 1;
String[] itemsArray = new String[size];
fillArray(itemsArray);
sortArrayByValidInvalid(itemsArray);
lastInUse = removeInvalidItems(itemsArray);
sortArrayByName(itemsArray, lastInUse);
displayArray(itemsArray, lastInUse);
JOptionPane.showMessageDialog(null, "The total cost is $"
+ String.format("%.2f", sumTotal(itemsArray, lastInUse)));
do {
int index = searchArray(itemsArray,
getStringOrQuit("Enter the name of "
+ "an item you would like to search for"),
lastInUse);
if (index != -1) {
JOptionPane.showMessageDialog(null, "Item listing found:\n"
+ itemsArray[index], "Program 6 (" + YOUR_NAME + ")",
JOptionPane.PLAIN_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Item listing not found.",
"Program 6 (" + YOUR_NAME + ")",
JOptionPane.WARNING_MESSAGE);
}
response = JOptionPane.showConfirmDialog(null,
"Would you like to perform another search?", "Program 6 ("
+ YOUR_NAME + ")", JOptionPane.YES_NO_OPTION);
} while (response == JOptionPane.YES_OPTION);
System.exit(0);
} // main
} // Program 6