All pastes #715851 Raw Edit

Anonymous

public text v1 · immutable
#715851 ·published 2007-09-26 14:57 UTC
rendered paste body
//johnaby g-6 o-2 k-inf1000/h07.
/* John Alexander Bye

 Obligatorisk Innlevering #2
 INF1000
		   
12. September 07
MNM5-INFPS 2007-HØST DSN
Gruppe 6

 johnaby@ifi.uio.no
*/

class Oilfield
{
	//Coders conduct (private)
	private String owner = "";
	private int refined;
	
	public Oilfield(String sOwner, int iRefined)
	{
		//Initialize
		owner = sOwner;
		refined = iRefined;	//Initialize to zero
	}
	
	//Return private members
	String getOwner()
	{
		return owner;
	}
	
	int getRefined()
	{
		return refined;
	}
	
	void setOwner(String sOwner)
	{
		owner = sOwner;
	}
	
	void setRefined(int iRefined)
	{
		refined = iRefined;
	}
}





//-- OILSYS.JAVA --//




//johnaby g-6 o-2 k-inf1000/h07.
/* John Alexander Bye

 Obligatorisk Innlevering #2
 INF1000
		   
12. September 07
MNM5-INFPS 2007-HØST DSN
Gruppe 6

 johnaby@ifi.uio.no
 
 TODO:
 
List over oilcompanies .. Find out how many fields each company owns
*/

import easyIO.*;	//In
import java.util.*;	//HashSet

class Oilsys
{
	//For printError
	static final int ERROR_NORMAL = 0, ERROR_CRITICAL = 1;
	
	//Global declaration of the Oilfield-classarray & In
	static Oilfield database[][] = new Oilfield[16][22];
	static In input = new In();
	
	static public void totalRefined()
	{
		System.out.printf("\n-- Total Refined From All Oilfields --\n");
		
		int totalRefined = 0, numFields = 0;
		
		for(int row = 0; row < 16; row++)
		{
			for(int col = 0; col < 22; col++)
			{
				if(database[row][col] != null)
				{
					//Occupied so they're refining... No money-back guarantee!
					totalRefined += database[row][col].getRefined();
					numFields++;
				}
			}
		}
		
		System.out.printf("\nTotal Refined:\t" + totalRefined + " (Total Oilfields: " + numFields + ")");
	}
	
	static public void largestRefined()
	{
		int fieldX = 0, fieldY = 0, maxRefined = 0;
		String sStatus;
		
		System.out.printf("\n-- Largest Refined Value --\n");
		//Loop through the array to find the largest refined and it's position for extra data
		
		for(int row = 0; row < 16; row++)
		{
			for(int col = 0; col < 22; col++)
			{
				if(database[row][col] != null)
				{
					if(database[row][col].getRefined() > maxRefined)
					{
						maxRefined = database[row][col].getRefined();
						fieldX = row;
						fieldY = col;
					}
				}
			}
		}
		if(maxRefined != 0)
		{
			if(database[fieldX][fieldY].getOwner() == null)
				sStatus = "(Available)";
			else
				sStatus = "(Occupied by " + database[fieldX][fieldY].getOwner() + ")";
			System.out.printf("Largest Refined Value:\t" + maxRefined + " at " + fieldX + "," + fieldY + ". STATUS: " + sStatus);
		}
		else
		{
			printError("The oilfields have not refined any oil yet!", ERROR_NORMAL);
		}
	}
	
	static public void updateRefined()
	{
		int fieldX, fieldY;
		System.out.printf("\n-- Updated Refined Values --\nField F(row,column):\t");
		
		fieldX = input.inInt(" \n\rF(,)");	//Filter out chars
		fieldY = input.inInt(" \n\rF(,)");
		input.inChar();	//Read it all
		
		if(!checkBounds(fieldX, fieldY))
			printMenu();	//Jump to menu
		
		if(!checkField(fieldX, fieldY))
		{
			//Occupied, so we can update its values
			System.out.printf("\nCurrent Refined Value:\t" + database[fieldX][fieldY].getRefined());
			
			System.out.printf("\nUpdate Refined with:\t");
			
			int newRefined;
			//Get user input
			newRefined = input.inInt();
			
			database[fieldX][fieldY].setRefined( database[fieldX][fieldY].getRefined() + newRefined );
		
			System.out.printf("\nNew Refined Value:\t" + database[fieldX][fieldY].getRefined());
		}
		else
		{
			printError("Field is vacant. Unable to update!", ERROR_NORMAL);
		}
	}
	
	static public void printRegistrants()
	{
		System.out.printf("\n-- List of Registrants --\n");
		
		HashSet<String> hashSet = new HashSet<String>();
		
		final int iTotalFields = 352; //16*22
		int iOccupiedFields = 0;
		
		for(int row = 0; row < 16; row++)
		{
			for(int col = 0; col < 22; col++)
			{
				if(!checkField(row, col))	//Field is occupied
				{
					hashSet.add( database[row][col].getOwner() ); //Add owner to our HashSet
					iOccupiedFields++;
				}
			}
		}
		
		System.out.printf("\nRegistrants:\t");
		
		String sFormattedRList = "", sTempRegistrant;
		int iOccurences = 0;
		
		Iterator hashIterator = hashSet.iterator();
		
		while(hashIterator.hasNext())
		{
			sTempRegistrant = (String)hashIterator.next();
			
			//Check occurences (Cheap Code-Hack) This could have been done differently -- Though this works so it's good enough for this cause ;)
			
			for(int row = 0; row < 16; row++)
			{
				for(int col = 0; col < 22; col ++)
				{
					if(!checkField(row, col))	//Field is occupied, check for equals
					{
						if(sTempRegistrant.toLowerCase().equals(database[row][col].getOwner().toLowerCase()))
						{
							iOccurences++;
						}
					}
				}
			}
			sFormattedRList += sTempRegistrant + " (" + iOccurences + "), ";
			iOccurences = 0;
		}
		
		System.out.printf(sFormattedRList + "(Occupied\\Available: " + iOccupiedFields + "\\" + iTotalFields + ").\n");
	}
	
	static public void printMap()
	{
		System.out.printf("\n-- Map over Ruritania --\n");
		
		//Print the header
		System.out.printf("    0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21");
		
		//For-loop to check for fields and generate row numbers
		for(int row = 0; row < 16; row++)
		{
			if(row < 10) //Cosmetic hack ;) It's all about looks
				System.out.printf("\n" + row + "   ");
			else
				System.out.printf("\n" + row + "  ");
				
			for(int col = 0; col < 22; col++)	//Check for vacancies
			{
				if(checkField(row, col))
					System.out.printf(".  ");
				else
					System.out.printf("x  ");
			}
		}
	}
	
	static public void purgeField()
	{
		int fieldX, fieldY;
		String sRegistrant;
		
		System.out.printf("\n-- Purge Oilfield --\nField F(row,column):\t");
		
		//Read user input
		fieldX = input.inInt(" \n\rF(,)"); //Filter out chars
		fieldY = input.inInt(" \n\rF(,)");
		input.inChar();	//Read it all
		
		if(!checkBounds(fieldX, fieldY))
			printMenu();	//Jump to menu
			
		if(checkField(fieldX, fieldY))
		{
			//Available -- Can't purge an empty field
			printError("Field is vacant. Unable to purge!", ERROR_NORMAL);
			printMenu();
		}
		
		System.out.printf("\nRegistrant:\t");
		
		//Check that it it's the actual owner of the field who wants to have it purged
		sRegistrant = input.inLine();
		
		if(sRegistrant.toLowerCase().equals(database[fieldX][fieldY].getOwner().toLowerCase()))
		{
			System.out.printf("\nRegistrant verified! Processing request...");
		}
		else
		{
			printError("Registrant could not be verified! Check spelling!", ERROR_NORMAL);
			printMenu();
		}		
		
		//We know its occupied. Lets set the owner-string to NULL
		System.out.printf("\nPurging field " + fieldX + "," + fieldY + " registered to " + database[fieldX][fieldY].getOwner() + ".");
		database[fieldX][fieldY].setOwner(null);
	}
	
	static public void buyField()
	{
		int fieldX, fieldY;
		boolean fieldsAvailable = false;
		System.out.printf("\n-- Buy Oilfield --\nField F(row,column):\t");
		
		//Check if there are any fields available
		for(int row = 0; row < 16; row++)
		{
			for(int col = 0; col < 22; col++)
			{
				if(checkField(row, col))
				{
					fieldsAvailable = true;
					break;
				}
			}
		}
		if(!fieldsAvailable)
		{
			printError("No fields available. All are currently occupied!", ERROR_NORMAL);
			printMenu();
		}
		
		//Read user input
		fieldX = input.inInt(" \n\rF(,)");	//Filter out chars
		fieldY = input.inInt(" \n\rF(,)");
		input.inChar();	//Read it all
		
		if(!checkBounds(fieldX, fieldY))
			printMenu();	//Jump to menu
		
		if(!checkField(fieldX, fieldY))
		{
			//Occupied
			printError("Field is already occupied!", ERROR_NORMAL);
		}
		else
		{
			//Available -- CaChing!
			System.out.printf("\nRegistrant:\t");
			String sRegistrant;
			int	iOldRefined = 0; //Initialize to zero, passing to constructor later on
			
			//Check if it has been constructed, then see if they have refined any oil
			if(database[fieldX][fieldY] != null)
			{
				if(database[fieldX][fieldY].getRefined() > 0)
					iOldRefined = database[fieldX][fieldY].getRefined();
			}
			
			sRegistrant = input.inLine();	//Allow whitespaces
			database[fieldX][fieldY] = new Oilfield(sRegistrant, iOldRefined);
			
			System.out.printf("\nField " + fieldX + "," + fieldY + " sold to " + sRegistrant + ".");
		}
	}
	
	static public boolean checkBounds(int fieldX, int fieldY)
	{
		if((fieldX > 15) || (fieldY > 21))
		{
			printError("Field was out of bounds. Check that the field you specified does not exceed F(15,21)!\n",ERROR_CRITICAL);
			return false;	//Out of bounds -- Let the user pick again
		}
		
		return true;	//In bounds
	}
	
	static public boolean checkField(int fieldX, int fieldY)
	{
		if((database[fieldX][fieldY] == null) || (database[fieldX][fieldY].getOwner() == null))
			return true;	//Available
			
		return false;	//Field is Occupied
	}
	
	static public void printError(String sErrorMessage, int type)
	{
		switch(type)
		{
			case ERROR_NORMAL:
				System.out.printf("\n** ERROR:\t" + sErrorMessage);
				break;
			case ERROR_CRITICAL:
				System.out.printf("\n** CRITICAL ERROR:\t" + sErrorMessage);
		}
	}
	
	static public void printMenu()
	{
		System.out.printf("\n\n\n-- OilSystem by John A Bye --\n"
					+	"1. Buy Oilfield\n"
					+	"2. Purge Oilfield\n"
					+	"3. Map Oilfields\n"
					+	"4. List Owners\n"
					+	"5. Update Refined Values\n"
					+	"6. Largest Refined Value\n"
					+	"7. Total Refined (All Oilfields)\n"
					+	"8. Exit\n"
					+	"Choice:\t");
			
		//Get user input
		int iChoice;
		iChoice = input.inInt();
	
		//Execute input
		switch(iChoice)
		{
		case 1:
			buyField();
			break;
		case 2:
			purgeField();
			break;
		case 3:
			printMap();
			break;
		case 4:
			printRegistrants();
			break;
		case 5:
			updateRefined();
			break;
		case 6:
			largestRefined();
			break;
		case 7:
			totalRefined();
			break;
		case 8:
			System.exit(1);	//Exit 
		default:
			printError("Invalid choice!", ERROR_NORMAL);
		}
		printMenu();
	}
	
	static public void main(String[] args)
	{
		printMenu();
	}
}