辅导案例-CSCI 2110-Assignment 2

欢迎使用51辅导,51作业君孵化低价透明的学长辅导平台,服务保持优质,平均费用压低50%以上! 51fudao.top
CSCI 2110 Data Structures and Algorithms
Assignment 2
Release Date: Sept 29th
Due Date: Oct 11th Oct 15th
23h55 (five minutes to midnight)

Generics and Unordered Lists
Introduction

This assignment will help you develop an understanding of multiple generics and the application of
unordered lists. There are two exercises to complete.

Marking Scheme
Exercise 1 /25

• Working code, Outputs included, Efficient, Good basic comments included: 25/25
• No comments or poor commenting: subtract up to 3 points
• Unnecessarily inefficient: subtract up to 4 points
• No outputs and/or not all test cases covered: subtract up to 2 points
• Code not working: subtract up to 14 points depending upon how many classes and methods are
incorrect.
• Assignment submission and test case text files are not well labeled and organized: subtract up to
2 points.

Exercise 2 /22

• Working code, Outputs included, Efficient, Good basic comments included: 22/22
• No comments or poor commenting: subtract up to 3 points
• Unnecessarily inefficient: subtract up to 4 points
• No outputs and/or not all test cases covered: subtract up to 2 points
• Code not working: subtract up to 11 points depending upon how many classes and methods are
incorrect.
• Assignment submission and test case text files are not well labeled and organized: subtract up to
2 points.



Error checking: Unless otherwise specified, you may assume that the user enters the correct data types
and the correct number of input entries, that is, you need not check for errors on input.

Submission: All submissions are through Brightspace. Log on dal.ca/brightspace using your Dal NetId.

What to submit:
Submit one ZIP file containing all source code (files with .java suffixes) and a text documents containing
sample outputs. For each exercise you will minimally have to submit a demo Class with a main method to
be tested and your test code, sample outputs.

Your final submission should include the following files: StorageBin.java, StorageBinTester.java,
Tool.java, Hammer.java, Saw.java,Level.java, Exercise1out.txt, Node.java, LinkedList.java,
GradeAnalyzer.java, GradeAnalyzerTester.java, Record.java, Grades.txt, Exercise2out.txt

You MUST SUBMIT .java files that are readable by your TAs. If you submit files that are unreadable
such as .class, you will lose points. Please additionally comment out package specifiers. Your code must
compile. Failure to compile may result in a mark of 0.


Exercise 1

In this exercise you will use multiple generics to develop a StorageBin class. The StorageBin class will
store a generic item and a generic unique identifier for that item. For example, the StorageBin may store
hardware tools and a unique ID for each tool.

You are provided with the following starter code files: StorageBinTester.java, StorageBin.java, Tool.java

Create or complete the following classes:

The StorageBin.java class should have the following methods and functionality:
• Two generic ArrayLists to store generic items
• A constructor to set up the ArrayLists
• sizeofBin():int method which returns the number of items stored
• addItem(T item, U id):void method which adds an item and its unique ID to the arrays.
o This method prints an error if an item is added with an already existing ID
• removeItem(U id): T method remove the item with the given ID from the bin and returns it to the
caller.
• displayItems(): void method prints the contents of the storage bin in the format Name, function,
and ID (see test cases below)

Create a Tool.java class with the following properties:
• String to store the name of the tool
• Tool(String name) constructor to set up the name of the tool
• getName():String method to return the name
• toString(): String method which returns the name of the tool.

Create a Hammer.java, Saw.java, and Level.java class by extending the Tool class. Each class should
have the following properties:
• A String to store the function of the tool
• Hammer(String name): constructor to set the name by calling super()
• setFunction(String function):void method to set the function of the tool
o Hammer function: “I hammer stuff”
o Saw function: “I saw stuff”
o Level function: “I make sure everything is even”
• toString():String override the parent’s toString() method to return the tool’s name + function

Create a StorageBinTester.java class with a main method which tests the functions of the StorageBin by
adding tools to a bin, removing them from the bin, and adding them to a workbelt implemented as an
ArrayList:
• *Note: in the StorageBinTester.java code, the workbelt ArrayList is erroneously called workbag.
You can change this to workbelt.
• Create a StorageBin object which holds tools and a unique ID assigned as an
integer
• Create an ArrayList of Tools called workbelt, which will store tools which are removed from the
storage bin.
• The main method should ask the user to enter an undetermined amount of tools to the storage bin
in the format: ToolType ToolID
o Saw, Hammer, or Level
o Entering “quit” ends the list
• After entering the tools, print the items in storage in the following format:
o Name Function ID
• Prompt the user to retrieve tools from the bin and add them to the workbelt
o The user will enter the unique tool ID to search the storage bin
o If the tool is in the bin, add it to the workbelt, otherwise print an error
o Entering “no” stops adding tools to the workbelt.
• Print the contents of the storage bin and the workbelt
o See sample output below




Input/output
Your program should accept input in the following format:
• Adding tools to the storage bin: ToolName ToolID
• Enter “quit” to stop adding tools to the storage bin
• Adding tools to the workbelt: ToolID
• Enter “no” to stop adding tools

Your program should provide output in the following format:
• See sample output below

Sample inputs and outputs:

Enter tools to be stored in the format ItemName ID
Enter quit to end the list of tools
Hammer 1
Saw 2
Level 3
Level 3
Error, ID already used
Level 4
Saw 5
quit
Items in storage:
Item:Hammer I hammer stuff ID: 1

Item:Saw I saw stuff ID: 2

Item:Level I make sure everything is even ID: 3

Item:Level I make sure everything is even ID: 4

Item:Saw I saw stuff ID: 5

Would you like to retrieve a tool and add it to the workbelt? yes/no
yes
Enter item ID
5
Adding tool to workbelt
Would you like to retrieve a tool and add it to the workbelt? yes/no
yes
Enter item ID
1
Adding tool to workbelt
Would you like to retrieve a tool and add it to the workbelt? yes/no
no
Okay, have a nice day!
Tools left in bin:Item:Saw I saw stuff ID: 2

Item:Level I make sure everything is even ID: 3

Item:Level I make sure everything is even ID: 4

Tools in workbelt:
Saw I saw stuff
Hammer I hammer stuff


Student Generated Test Cases:
Demonstrate the following functionality of your program:
• Create 6 tools of the type Hammer, Level, or Saw
• Show that your storage bin will only accept unique IDs
• Demonstrate removing tools from the storage bin and adding them to the workbelt
• Print the final contents of the storage bin and the workbelt

Save your output in a text filed named Exercise1out.txt

What to submit:
Submit the following java files in a zipped folder (.zip only): StorageBin.java, StorageBinTester.java,
Tool.java, Hammer.java, Saw.java, Level.java, Exercise1out.txt


Exercise 2

In this exercise, you will use unordered lists to store student records and generate a histogram from an
input text file.

You are provided with the following starter code files: List.java,
Node.java,LinkedList.java,GradeAnalyzer.java,GradeAnalyzerTester.java.

Do not alter the code of List.java, Node.java, LinkedList.java

Create or complete the following classes:

Create Record.java class to store basic student info:
• String to store the name of the student
• int to store the grade of the student
• Basic getters and setters

Complete the GradeAnalyzer.java class
• addRecord(Record r): void method to add a record to the list
• removeRecord(Record r): void to remove a record from the list
• clearAllRecords(): void clears the record list
• printAllRecords(): void prints the records (see format below)
• printHistogram():void prints a histogram of the grade data with interval size 9
o ex) [0-10), [10-20),…
o See example data below

Create a GradeAnalyzerTester.java class
• Sets up a new GradeAnalyzer
• Reads from the input file Grades.txt
o Each letter in the file corresponds to a name, each int a grade.
• Prints the grade list
• Prints the histogram
o See sample outputs below



Input/output
Your program should accept input in the following format:
• Prompt the user to enter the filename to read from
• Read the input text file Grades.txt

Your program should provide output in the following format:
• Print the contents of Grades.txt
• Print a histogram
• See sample output below

Sample inputs and outputs:

Enter the filename to read from: [your file path here]
Z1,49
Y1,93
X1,80
W1,81
V1,83
U1,81
T1,55
S1,62
R1,81
Q1,78
P1,73
O1,72
N1,73
M1,75
L1,67
K1,100
J1,44
I1,94
H1,72
G1,67
F1,67
E1,66
D1,65
C1,77
B1,67
A1,55
Z,100
Y,99
X,80
W,88
V,85
U,85
T,82
S,81
R,81
Q,78
P,92
O,91
N,90
M,89
L,88
K,66
J,67
I,88
H,90
G,56
F,55
E,15
D,11
C,10
B,5
A,1
_______________________________________________
0-10|**
10-20|***
20-30|
30-40|
40-50|**
50-60|****
60-70|*********
70-80|********
80-90|***************
90-100|*********

Student Generated Test Cases:
Demonstrate the following functionality of your program:
• Read in the given text file
• Print the grade list
• Print the histogram
• Save the output in a file Exercise2out.txt


What to submit:
Submit the following java files in a zipped folder (.zip only): Node.java, LinkedList.java, List.java,
GradeAnalyzer.java, GradeAnalyzerTester.java, Record.java, Grades.txt, Exercise2out.txt






欢迎咨询51作业君
51作业君

Email:51zuoyejun

@gmail.com

添加客服微信: abby12468