import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
import java.util.Scanner;
public class Notebook {
private Reading[] reading;
private int nextIndex = 0;
/** Maximum number of readings. */
private static final int SIZE = 100;
public Notebook(){
reading = new Reading[SIZE];
}
/**
* Creates a notebook by reading its contents from the given file.
* @param filename
* @throws IOException
*/
public Notebook(String filename) throws IOException {
try {
ObjectInputStream input = new ObjectInputStream (new FileInputStream(filename));
nextIndex = input.readInt();
reading = (Reading[])input.readObject();
input.close();
} catch (ClassNotFoundException e) {
System.out.println("ERROR: File corrupted.");
e.printStackTrace();
}
}
/**
* Adds a reading to the notebook
* @param species name of the species
* @param count how many you saw
* @param comment
* @throws Exception if the notebook gets too big
*/
public void addReading(String species, int count, String comment) throws Exception{
//The right thing to do is use a data structure that expands as needed, but that's CSCE 146
// so we just crash.
try {
if (nextIndex >= SIZE)
throw new Exception("Too many readings!");
reading[nextIndex] = new Reading(new Date(), species, count, comment);
nextIndex++;
}
catch (NegativeCountException e) {
System.out.println("Sorry, no negative animals allowed.");
}
}
public String toString(){
String result = "";
for(int i=0; i< nextIndex; i++){
result += reading[i].toString() + "\n";
}
return result;
}
/**
* Write this notebook out to a file. It can be read back using the constructor.
* @param filename name of the file
*
*/
public void writeToFile(String filename) {
try {
ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(filename));
out.writeInt(nextIndex);
out.writeObject(reading);
out.close();
} catch (FileNotFoundException e) {
System.out.println("ERROR: No such file. Did not write.");
} catch (IOException e) {
System.out.println("ERROR: IO. Did not write to file.");
}
}
public static void main(String[] args) throws Exception {
Scanner keyboard = new Scanner(System.in);
Notebook notebook = new Notebook();
while (true){
System.out.println("Command list: \n");
System.out.println("r - enter new Reading");
System.out.println("l - List all readings");
System.out.println("o - Open file with readings");
System.out.println("w - Write readings to a file");
System.out.println("q - Quit");
System.out.print("\nEnter command:");
String command = keyboard.nextLine();
if (command.equalsIgnoreCase("r")) {
System.out.print("Species name:");
String species = keyboard.nextLine();
System.out.print("Count:");
int count = Integer.parseInt(keyboard.nextLine());
System.out.print("Comment:");
String comment = keyboard.nextLine();
notebook.addReading(species, count, comment);
}
else if (command.equalsIgnoreCase("l")) {
System.out.println(notebook);
}
else if (command.equalsIgnoreCase("o")) {
System.out.print("Enter name of file to read:");
String filename = keyboard.nextLine();
try {
notebook = new Notebook(filename);
}
catch (FileNotFoundException e) {
System.out.println("ERROR: File " + filename + " does not exists.");
}
}
else if (command.equalsIgnoreCase("w")) {
System.out.print("Enter name of file to write to:");
String filename = keyboard.nextLine();
notebook.writeToFile(filename);
}
else if (command.equalsIgnoreCase("q")) {
System.out.println("Bye bye.");
System.exit(0);
}
}
}
}
import java.io.Serializable;
import java.util.Date;
public class Reading implements Serializable {
private Date date;
private String species;
private int count;
private String comment;
public Reading(Date date, String species, int count, String comment) throws NegativeCountException {
super();
if (count < 0)
throw new NegativeCountException("There are no negative animals you dummy.");
this.date = date;
this.species = species;
this.count = count;
this.comment = comment;
}
public String toString() {
return date + "\t" + species + "\t" + count + "\t" + comment;
}
}
public class NegativeCountException extends Exception {
public NegativeCountException(String m) {
super(m);
}
}
Tuesday, November 10, 2009
Homework 7 Solution
Below is my solution for the Field Notebook homework:
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment