Description
Developing a simple mini online shopping application
1 INTRODUCTION
Object-oriented programming (OOP) is more than just adding a few new features to programming languages. It is rather
a new way of thinking about decomposing and modeling problems with less complexity and more code reuse when
developing programming solutions. In OOP, a program is viewed as a collection of loosely connected objects, each of
which is responsible for specific tasks. It is through the interaction of these objects that computation proceeds and the
model works as a whole.
1 Covered subjects: OOP Basics, Abstraction, Encapsulation, Inheritance, Polymorphism, UML class diagrams, Javadoc
BBM 104 – PA2 Page 2 of 18
In this assignment, you will work with the concepts of OOP in order to practice them and observe their advantages. By
the end of this assignment, you will learn the concepts of relationships among classes, encapsulation, abstraction,
inheritance and polymorphism, as well as how to and why use Javadoc in your Java projects.
LEARNING OBJECTIVES
The learning objective of this programming assignment is to let students practice the following concepts of Java
programming language in particular (and OOP in general):
Object-oriented programming
Abstraction
Encapsulation
Inheritance
Polymorphism
UML class diagrams
Javadoc
MARKING SCHEME
The marking scheme is shown below. Carefully review each mark component.
Component Mark %
Creation of Base Classes with the requested hierarchical structure (the main class of
your application must be named Main.java)
30%
Successful instantiation of all user and item objects from the input files 15%
Correct execution of events and actions as requested in the input file with commands 40%
Drawing of UML class diagrams saved as uml.jpg 5%
Javadoc that gives a detailed description of the classes in javadoc folder 10%
Total 100%
Note: In your solutions, your algorithm and code should be as simple as possible.
2 USEFUL INFORMATION
In this section you can find some useful beginner’s level information that you will need for this project. For more
information on each subject you need to do additional research and consult other resources (e.g. lecture notes, textbook,
Internet resources, etc.).
ABSTRACTION
Abstraction is a general concept that denotes the progress of modeling “real things” into programming language. For
example, when you write a class named Person, you abstract a real person into a type (class). In OOP, abstraction is a
process of hiding the implementation details from the user, and only providing the functionality. In other words, the
user will have the information on what the object does instead of how it does it.
In Java, the process of abstraction is done using interfaces, classes, abstract classes, fields, methods and variables. It is
the fundamental concept on which other things rely on such as encapsulation, inheritance and polymorphism.
ENCAPSULATION
Encapsulation is one of the fundamental OOP concepts. It is a technique of wrapping (packaging) the related data
(attributes) and behavior (code – methods) together into a single unit. It also provides a way to hide and control data by
protecting it from misuse by the outside world. This is achieved by making data members private, and using public
BBM 104 – PA2 Page 3 of 18
helper methods through which we can decide the level of access we want to provide (e.g. read-only, write-only). A fully
encapsulated Java class is a class whose all variables are private.
The advantages of encapsulation include: flexibility in modifying code in case requirements change, reusability of
encapsulated code throughout multiple applications if necessary, and reducing the time of maintenance (update)
process.
2.2.1 Visibility Modifiers
In Java, there are four access modifiers which provide various access levels: private (visible inside of the class only),
default/package (visible inside of the package), protected (visible inside the package and to all subclasses) and public
(visible to everyone).
INHERITANCE
Inheritance can be defined as the process where one class acquires the properties (methods and fields) of another class.
It is achieved with the keyword extends. The class which inherits the properties of another class is known as subclass
(derived class, child class), and the class whose properties are inherited is known as superclass (base class, parent class).
Inheritance enables managing information in a hierarchical order, code reuse, extending a class by adding new features
instead of writing a new class from scratch, and maintainability of the code (e.g. updating the code in one place –
superclass, instead of updating every single class).
POLYMORPHISM
Polymorphism is the ability of an object to take on many forms. In OOP, polymorphism means a type can point to
different object at different time. In other words, the actual object to which a reference type refers, can be determined at
runtime. Any Java object that can pass more than one IS-A test is considered to be polymorphic. Thus, all Java objects
are polymorphic since any object will pass the IS-A test for their own type and for the class Object.
The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class
object. A reference variable can refer to any object of its declared type or any subtype of its declared type.
Polymorphism increases code reuse, allows for flexibility in running code and code extensibility.
In Java, polymorphism is based on inheritance and overriding.
2.4.1 Method Overriding
When a class extends another class, it can use its super class’s methods. However, sometimes the subclass may need a
different behavior of a method provided by its superclass. The method implementation in the subclass overrides
(replaces) the method implementation in the superclass. In this case, the subclass method and superclass method have
the same name, parameters and return type, but different implementation. This is called method overriding.
METHOD OVERLOADING
Method overloading should not be confused with method overriding. When we need to have more than one method
with the same functionality within the same class, we don’t have to declare new methods with different names for each
one. Method overloading feature allows us to declare multiple methods with the same name, but different signatures
(e.g. different argument list, types or order). System.out.println() is an example of method overloading in Java.
It takes float, int, double or String types as arguments.
UML CLASS DIAGRAMS
The Unified Modeling Language (UML) is a general-purpose, developmental, modeling language in the field of
software engineering, that is intended to provide a standard way to visualize the design of a system. A UML class
diagram is a type of static structure diagram that describes the structure of a system by showing the system’s classes,
BBM 104 – PA2 Page 4 of 18
their attributes, operations (or methods), and the relationships among objects. The class diagram is the main building
block of object-oriented modelling.
In a UML diagram, classes are represented with boxes that contain three compartments:
The top compartment contains the name of the class in bold and centered, and the first letter is capitalized.
The middle compartment contains the attributes of the class. They are left-aligned and the first letter is
lowercase.
The bottom compartment contains the operations the class can execute. They are also left-aligned and the first
letter is lowercase.
To specify the visibility of a class member (i.e. any attribute or method), these notations must be placed before the
member’s name:
+ Public
– Private
# Protected
/ Derived (can be combined with one of the others)
~ Package
A relationship is a general term covering the specific types of logical connections found on class and object diagrams.
UML defines several relationships. In this assignment, you are expected to show only inheritance relationships (or
“IS-A” relationship) between your classes. Example:
For this assignment, you are expected to draw a basic UML diagram for your classes, which will include class names,
all attributes and methods with the specified visibility, and show inheritance relationships among the classes. You may
use any tool for this task. For example, you can look up available UML generator tools for eclipse at
https://marketplace.eclipse.org/.
JAVADOC
Javadoc is a documentation generator for Java, which Generates HTML pages of API documentation from Java source
files. The basic structure of writing document comments is to embed them inside /** … */. You need to submit
Javadoc for your code as well. For details refer to:
http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html
3 AN OVERVIEW OF THE APPLICATION
In this programming assignment, you will develop a very simplified version of an online shopping site. We will call it
HUBBM Bazaar.
PROBLEM DEFINITION
First, we need to review the requirements (specifications) of the system we want to develop. The basic components of
an online shopping application include:
BBM 104 – PA2 Page 5 of 18
users (service providers and customers),
items for sale (classified according to a certain specification, such as product type),
shopping-related concepts (product pricing, sale campaigns, etc.) and events/actions (viewing product
information, adding items to the shopping cart, viewing discounts, managing personal information, placing
orders, etc.).
Your program will need to be able to handle simple requirements of an online shopping application. You will be given
input files that contain information necessary for instantiating the users of the system, and items for sale. Furthermore,
another input file containing commands for various transactions and actions will be provided, which you will use to
test your application.
The necessary components of the system are explained in detail in the following sections.
3.1.1 Users
Our online shopping application will comprise three different types of users: Administrative and technical staff who
are employees (service providers), and costumers who are clients. You are expected to design your user classes in a
hierarchical structure. User information is as follows:
Every Person in the system has a name, an e-mail, and a date of birth.
Every Employee has a salary.
An employee can either be an Admin or a Technician.
An admin has a password.
A technician can be senior or not.
A Customer has a customerID, a password, a balance (money in their shopping account), status (which can be
CLASSIC, SILVER or GOLDEN), shopping cart, and order history.
customerID is assigned in order (starting from 1) to each added customer.
Customer status is calculated as follows: every new customer is automatically assigned the CLASSIC status. A
customer who spends at least 1000 $ is awarded the SILVER status. A customer who spends at least 5000 $ is
awarded permanent GOLDEN status and counts as a VIP customer.
A customer with a SILVER status gets a discount rate of 10% for all orders (even ones that include items with
discount campaigns).
A customer with a GOLDEN status gets a discount rate of 15% for all orders (even ones that include items
with discount campaigns).
Customer status limits and discount rates must be stored as constant static variables.
Users should be able to perform the following actions:
All users should be able to:
Display personal data: name, e-mail, and date-of-birth.
Customers should be able to:
Change their password own by providing the old password and a new one,
Update their balance (deposit money into their shopping account),
View active campaigns,
Add items to their shopping cart, if the item is available (if it exists and is in stock),
Clear their shopping cart,
Place orders for items in their shopping carts by providing their password,
Orders will be successful only if all of the following conditions are satisfied: the shopping cart is not empty,
the customer has enough money in the shopping account, and the password provided matches the
customer’s password.
After each order, customer’s status should be updated if necessary. Also, the stock amount of the bought
items should be updated accordingly.
Customer class should also override toString() method to print the customer’s data: ID, e-mail, date of
birth and status.
All employees should be able to:
Display stock amount and item types,
List all available items with their types,
BBM 104 – PA2 Page 6 of 18
Display VIP customers.
Admins should be able to:
Add new customers to the system by providing the customer name, e-mail, date-of-birth, and initial
customer balance and password,
Add other admins and technicians to the system,
Display all available data about a particular customer,
Display all customers,
Override the display personal data method to add the keyword “Admin” before their name, e-mail, and
date-of-birth,
Launch a campaign.
Technicians should be able to:
Display all orders made by all customers only if they are senior technicians,
Display info about a particular item,
Add a new item.
3.1.2 Items
Items represent all products that are available for sale. They are categorized as either Cosmetic, Electronic, or Office
Supplies items. You are expected to design your item classes in a hierarchical structure. The necessary information
about the items is as follows:
Subcategories of Cosmetic items are: Perfume, Hair care, and Skin care.
Subcategories of Electronic items are: Computer, TV, and Smart phone.
Subcategories of Office Supplies items are: Book, and CD-DVD.
Subcategories of Computer items are: Desktop, Laptop, and Tablet.
All items have an ID and a price.
Cosmetic and Electronic items possess manufacturer and brand information.
ID is assigned in order (starting from 1) to each added item.
Cosmetic items have an expiration date, a weight, and can be either organic or not.
Perfumes have lasting duration.
Hair care items may be medicated or not.
Skin care items may be baby sensitive or not.
Electronic items have a maximum allowed input voltage and a maximum power consumption in Watts.
Computer items have an operating system, a CPU Type, a RAM Capacity, and an HDD Capacity in gigabytes.
Desktop computer items have a box color.
Laptop computer items may have HDMI support or not.
Tablet computer items have dimensions.
TVs have a screen size -in inches.
Smart phone items have a screen type.
Office Supplies items have a release date, and a cover title.
Book items have a publisher, author(s), and a number of pages.
CD-DVD items have a composer, and song(s).
Apart from the above, all item types (Laptop, Book etc.) have a related stock (inventory) information whose
values should be initially obtained from the input file named item.txt.
3.1.3 Shopping
The main shopping concepts in our application are shopping Orders and discount Campaigns.
Orders have an orderDate, a totalCost, list of purchased items, and customerID of the buyer.
When order data is displayed; order date, customerID, total cost, and a number of bought items should be
shown.
Campaigns have a startDate, an endDate, itemType, and a discountRate.
The maximum discount rate of any campaign is 50%.
3.1.4 Events/Actions
i. Add a new customer: A service provider with admin role is the only one authorized to add a new customer.
The program should add a new customer if the syntax of the command is as provided below:
BBM 104 – PA2 Page 7 of 18
ADDCUSTOMERadminNamecustomerNamecustomerMailcustomerDateofBir
thinitialBalancepassword
Note: The first argument indicates the name of the admin who initiates the request and the program you
implement has to check the records before perform this request. If no record is found with adminName then it
should display an error message. For such cases or details, read Constraints section carefully.
Usage Illustration:
ADDCUSTOMERCemileKeremkerem@yahoo.com21.02.1993100000
kerem1111
No admin person named Cemile exists!
ii. Show customer information: An admin person can also show the customers which are recorded so far. The
displayed customer records should include: name, ID, e-mail, date of birth, and status. The syntax to display
customer info should be as follows:
SHOWCUSTOMERadminNamecustomerID
Usage Illustration:
SHOWCUSTOMERLeyla3
Possible
outputs
No admin person named Leyla exists! (or)
Customer name: Hamza ID: 3 e-mail: hamza@hacettepe.edu Date of Birth:
Tue Sep 08 00:00:00 EEST 1987 Status: CLASSIC
iii. List customers: Similar to the previous event, an admin is also authorized to list all customer info for customers
who are recorded in the system. To do that the command syntax should be:
SHOWCUSTOMERSadminName
Usage Illustration:
SHOWCUSTOMERDemet
Possible
outputs
No admin person named Demet exists!
Customer name: Emre ID: 1 e-mail: emre@hacettepe.edu Date of Birth: Mon Oct 02
00:00:00 EEST 2000 Status: CLASSIC
Customer name: Meltem ID: 2 e-mail: meltem@hacettepe.edu Date of
Birth: Fri Mar 30 00:00:00 EEST 1990 Status: CLASSIC
iv. Show admin information: Admin staff can also display their information. Note that they cannot display others’
personal information.
SHOWADMININFOadminName
Usage Illustration:
SHOWADMININFOCan
Possible
outputs
No admin person named Leyla exists! (or)
———– Admin info ———–
Admin name: Can
Admin e-mail: can@hacettepe.edu
Admin date of birth: 21.05.1980
BBM 104 – PA2 Page 8 of 18
v. Launch a campaign: In the system, only admins are allowed to launch a new campaign.
CREATECAMPAIGNadminNamestartDateendDateitemTyperate
Note: There are a couple of constraints for launching a campaign. Please refer to Constraints section.
Usage Illustration:
CREATECAMPAIGNAlper23.03.201701.06.2017BOOK25
Possible
outputs
No admin person named Alper exists! (or)
Campaign was not created. Discount rate exceeds maximum rate of 50%.
vi. Add a new employee: An existing user with admin role can add a new employee (another admin or a
technician). To do that the command should be provided to the system as given below:
ADDADMINadminNamenewAdminNamenewAdminMailnewAdminDateofBirth
newAdminSalarynewAdminPassword
ADDTECHadminNamenewTechNamenewTechMailnewTechDateofBirth
newTechSalaryisSenior
Usage Illustration:
ADDADMIN Demet Yavuz yavuz@gmail.com16.07.1984
1000 yavuz1
ADDTECHYavuz Kubilay kubilay@outlook.com19.04.2001
5001
Possible
outputs
No admin person named Demet exists! (or)
No technician person named Yavuz exists!
vii. List existing items: Service providers – or employees (admins and technicians) can list the existing items with
their information in detail.
LISTITEM[adminName|technicianName]
Usage Illustration:
LISTITEMKubilay //assume Kubilay is an employee (admin or tech.)
Possible outputs
No admin or technician person named Kubilay exists! (or)
Type: SmartPhone
Item ID: 28
Price: 1100.0 $
Manufacturer: Apple Inc.
Brand: APPLE
Max Volt: 200 V.
Max Watt: 240 W.
Screen Type: IPS LCD
———————–
Type: TV
Item ID: 25
BBM 104 – PA2 Page 9 of 18
Price: 12000.0 $
Manufacturer: Royal Philips Electronics of the Netherlands
Brand: PHILIPS
Max Volt: 200 V.
Max Watt: 240 W.
Screen size: 74″
.
.
.
viii. Show items types with low stock: In this system, one of the missions of service providers (admins or
technicians) is to monitor the stock status of every item type. Thus, they should often display the remaining
stock amount of items. The system response to a stock status request differs depending on the syntax. In the
first case, the system considers the provided stock value and displays only those items whose stock amount is
below this limit value if provided in the command line; otherwise, the system displays stock information of all
items.
SHOWITEMSLOWONSTOCK[adminName|technicianName]{maxStockAmount}
Usage Illustration:
SHOWITEMSLOWONSTOCKEnes14
SHOWITEMSLOWONSTOCKEnes
Possible outputs
No admin or technician person named Enes exists! (or)
Book : 16
CDDVD : 5
Desktop : 11
Laptop : 42
Tablet : 11
TV : 13
SmartPhone : 9
HairCare : 4
Perfume : 1
SkinCare : 8
CDDVD : 5
Desktop : 11
Tablet : 11
TV : 13
SmartPhone : 9
HairCare : 4
Perfume : 1
SkinCare : 8
ix. Show VIP customers: Service providers can display VIP customers. VIP customers are those whose status is
GOLDEN.
SHOWVIP[adminName|technicianName]
Usage Illustration:
SHOWVIPAlper
Possible
outputs
No admin or technician person named Alper exists!
Customer name: Emre ID: 1 e-mail: emre@hacettepe.edu Date of Birth: Mon Oct 02
00:00:00 EEST 2000 Status: GOLDEN
BBM 104 – PA2 Page 10 of 18
x. Display items under specific types: A technician can display sub-items. To do that he/she should provide item
types each of which is separated by a colon mark.
DISPITEMSOFtechnicianNametype1<:>type2<:>…<:>typeN
Usage Illustration:
DISPITEMSOFKubilayBOOK:HAIRCARE
Possible outputs
No technician person named Kubilay exists! (or)
Type: Book
Item ID: 4
Price: 4.0 $
Release Date: 1960
Title: To Kill a Mockingbird
Publisher: J. B. Lippincott & Co.
Author: Harper Lee
Page: 281 pages
———————–
Type: HairCare
Item ID: 30
Price: 26.0 $
Manufacturer: Goldwell Manufacturing Services
Brand: GOLDWELL
Organic: Yes
Expiration Date: 2021
Weight: 750 g.
Medicated: Yes
xi. Add a new item: Only technicians are authorized to add new items to the system. To add a new item, they
should take argument length and order of the item (See Items Input File Section) into consideration. Colon
marks separate the arguments.
ADDITEMtechnicianNameitemType<:>argument1<:>argument2<:>…<:>argumentN
Usage Illustration:
ADDITEMKubilay LAPTOP:1250:Dell Inc.:DELL:220:250:Windows 10
Home:Intel Core i7:8:250:1
Possible
outputs
No technician person named Kubilay exists!
No item type Laptop found
xii. Show orders: Another and the last mission of the tech. team is to display the orders requested so far. As
mentioned, not all technicians can visualize orders, but only the ones who are senior technicians.
SHOWORDERStechnicianName
Usage Illustration:
SHOWORDERSEmir
Possible
outputs
No technician person named Emir exists!
Emir is not authorized to display orders!
Order History:
BBM 104 – PA2 Page 11 of 18
Order date: Mon Mar 20 12:18:39 EET 2017 Customer ID: 1 Total Cost:
12000.0 Number of purchased items: 0
xiii. Change password: Customers use their passwords when placing a new order request, which is designed to
avoid transactions on behalf of someone else. Passwords are initially determined by admins who are authorized
to add new customers, then customers can change their passwords using this command:
CHPASScustomerIDoldPasswordnewPassword
Usage Illustration:
CHPASS1emre12341234emre
Possible
outputs
No customer with ID number 1 exists!
The given password does not match the current password. Please try again.
The password has been successfully changed.
xiv. Load money: Customers can place a new order only if their balances are sufficient. Before placing a new order
they can deposit money into their accounts if it does not have sufficient amount for purchase.
DEPOSITMONEYcustomerIDloadAmount
Usage Illustration:
DEPOSITMONEYcustomerIDloadAmount
Possible
outputs
No customer with ID number 1 exists!
xv. Display campaigns: Customers may prefer to buy items that have a sale campaign. To display campaigns, the
command will be as given below:
SHOWCAMPAIGNScustomerID
Usage Illustration:
SHOWCAMPAIGNS1
Possible
outputs
No customer with ID number 1 exists!
No campaign has been created so far!
Active campaigns:
20% sale of PERFUME until 01/09/2017
xvi. Add to cart: To enable a customer to buy more than one item within one order, almost all online shopping
system provide a cart mechanism. This system also employs this mechanism, and customers should first add
some items to their carts before placing a purchase order. To do that, the command line below should be
provided to the system:
ADDTOCARTcustomerIDitemID
BBM 104 – PA2 Page 12 of 18
Usage Illustration:
ADDTOCART111
Possible
outputs
No customer with ID number 1 exists!
Invalid item ID
We are sorry. The item is temporarily unavailable.
The item Book has been successfully added to your cart.
xvii. Empty cart: In a shopping system, customers may want to empty their carts and start shopping from scratch.
The command syntax below enables customer to do that:
EMPTYCARTcustomerID
Usage Illustration:
EMPTYCART1
Possible
outputs
No customer with ID number 1 exists!
The cart has been emptied.
xviii. Place a new purchase order: The process of shopping activity of customers ends with a purchase order if they
want to buy the items in their shopping carts. To direct customer to the payment phase, the system should first
consider the customer’s password and check if it matches the password of the customer whose ID is given. If it
does, the system should calculate the total price of the items in the customers’ carts considering customers’
status (GOLDEN, SILVER, or CLASSIC) and active campaigns. As mentioned, if the status of the customer is
other than CLASSIC then the system should lower the total price depending on their status. Similarly, if a
campaign has already been launched for an item that is in a customer’s cart, the system should also lower the
price only for that item. To successfully place an order, the customer should have enough money, which means
the system should also check the balance of the customer who initiated the order process. After a successful
order operation, the system should give a feedback to the customer informing him/her about how much more
money they need to spend until their customer status can be upgraded (to SILVER or GOLDEN when
applicable).
ORDERcustomerIDcustomerPassword
Usage Illustration:
ORDER1emre1234
Possible outputs
No customer with ID number 1 exists!
The cart has been emptied.
Order could not be placed. Insufficient funds.
You should add some items to your cart before order request!
Order could not be placed. Invalid password.
Done! Your order will be delivered as soon as possible. Thank you!
Congratulations! You have been upgraded to a XXX MEMBER! You have earned a
discount of X% on all purchases.
You need to spend XXX more TL to become a XXX MEMBER.
BBM 104 – PA2 Page 13 of 18
4 INPUT FILES
You will be provided with three (tab-separated) text input files:
Users in the system,
Items that are sold,
Commands that you need to execute.
USERS INPUT FILE
List of all users in the system (admins, technicians and customers) will be given in the (tab-separated) users.txt file:
a line containing information about an admin will start with a keyword ADMIN,
a line containing information about a technician will start with a keyword TECH,
a line containing information about a customer will start with a keyword CUSTOMER.
The format of each person’s data will be given as follows:
ADMINnameemailbirthDatesalarypassword
TECHnameemailbirthDatesalaryisSeniorTechnician
CUSTOMERnameemailbirthDatebalancepassword
A sample users.txt input file is given below:
ADMIN Demet demet@hacettepe.edu 11.12.1989 3500 demet1234
CUSTOMER Emre emre@hacettepe.edu 02.10.2000 0 emre1234
TECH Fatih fatih@hacettepe.edu 17.03.1992 2100 0
CUSTOMER Meltem meltem@hacettepe.edu 30.03.1990 500.40 meltem1234
CUSTOMER Hamza hamza@hacettepe.edu 08.09.1987 10321.5 hamza1234
ADMIN Alper alper@hacettepe.edu 19.12.1991 3500 alper1234
TECH Emir emir@hacettepe.edu 28.02.1983 2700 1
ADMIN Can can@hacettepe.edu 21.05.1980 3450 can1234
ADMIN Leyla leyla@hacettepe.edu 01.11.1975 3600 leyla1234
ADMIN Cemil cemil@hacettepe.edu 06.07.1985 3750 cemil1234
TECH Handan handan@hacettepe.edu 29.10.1989 2700 1
CUSTOMER Taha taha@hacettepe.edu 29.04.1969 7505.43 taha1234
CUSTOMER Furkan furkan@hacettepe.edu 30.09.1974 153.85 furkan1234
TECH Enes enes@hacettepe.edu 02.02.1996 2100 0
You are expected to create an instance for each user in this file.
ITEMS INPUT FILE
List of all items for sale will be given in the (tab-separated) item.txt file.
a line containing information about a desktop computer item will start with a keyword DESKTOP,
a line containing information about a notebook computer item will start with a keyword LAPTOP,
a line containing information about a tablet item will start with a keyword TABLET,
a line containing information about a television item will start with a keyword TV,
a line containing information about a smart phone item will start with a keyword SMARTPHONE,
a line containing information about a book item will start with a keyword BOOK,
a line containing information about a CD-DVD item will start with a keyword CDDVD,
a line containing information about a hair care item will start with a keyword HAIRCARE,
a line containing information about a skin care item will start with a keyword SKINCARE,
a line containing information about a perfume item will start with a keyword PERFUME.
The format of each item data will be given as follows:
DESKTOPcostmanufacturerbrandmaxVoltmaxWattoperatingSystem
CPUTyperamCapacityHDDCapacityboxColor
LAPTOPcostmanufacturerbrandmaxVoltmaxWattoperatingSystem
CPUTyperamCapacityHDDCapacityHDMISupport
BBM 104 – PA2 Page 14 of 18
TABLETcostmanufacturerbrandmaxVoltmaxWattoperatingSystem
CPUTyperamCapacityHDDCapacitydimension
TVcostmanufacturerbrandmaxVoltmaxWattscreenSize
SMARTPHONEcostmanufacturerbrandmaxVoltmaxWattscreenType
BOOKcostreleaseDatecoverTitlepublisherNameauthor1<,>
author2<,>…<,>authorNpageNumber
CDDVDcostreleaseDatecoverTitlecomposerNamesong1<,>song2<,>…
<,>songN
HAIRCAREcostmanufacturerbrandisOrganicexpirationYear
weightisMedicated
SKINCAREcostmanufacturerbrandisOrganicexpirationYear
weightbabySensitive
PERFUMEcostmanufacturerbrandisOrganicexpirationYear
weightlastingDuration
A sample item.txt input file is given below:
BOOK 2 2016 Everything We Keep Lake Union Kerry Lonsdale 306
BOOK 25 1992 Ulysses Modern Library James Joyce 844
BOOK 3 2006 Nick and Norah’s Infinite Playlist Alfred Knopf Books Rachel Cohn,David Levithan 183
BOOK 4 1960 To Kill a Mockingbird J. B. Lippincott & Co. Harper Lee 281
BOOK 7 2004 Sorcery and Cecelia or The Enchanted Chocolate Pot HMH Books Patricia C. Wrede,Caroline Steverme,Ayn Rand 336
CDDVD 10 2016 Live North America Gary Clark Jr. Grinder,Our Love,When My Train Pulls In,Church
CDDVD 5 2008 One of the Boys Katy Perry One Of The Boys,I Kissed A Girl,Thinking Of You,If You Can Afford Me
CDDVD 13 2012 Red Taylor Swift State Of Grace,Red,I Almost Do
CDDVD 21 1959 Kind of Blue Miles Davis So What,Freddy Freeloader
CDDVD 18 1957 The Great Ray Charles Ray Charles The Ray,The Man I Love,Hornful Soul
DESKTOP 1250 Micro-Star International MSI 220 250 Free-Dos Intel Core i5 8 750 black
DESKTOP 1430 AsusTek Computer Inc. ASUS 220 250 Windows 10 Home Intel Core i7 16 1000 white
DESKTOP 1000 AsusTek Computer Inc. ASUS 220 250 Free-Dos Intel Core i3 8 500 red
DESKTOP 2100 Dell Inc. DELL 220 250 Windows 10 Home Intel Core i7 16 2000 black
DESKTOP 2400 Apple Inc. APPLE 220 250 MAC OS X Yosemite Intel Core i5 8 500 white
LAPTOP 3100 AsusTek Computer Inc. ASUS 220 250 Windows 10 Home Intel Core i7 16 750 1
LAPTOP 3400 Apple Inc. APPLE 220 250 MAC OS Intel Core i5 8 1000 0
LAPTOP 1800 Hewlett-Packard Company HP 220 250 Free-Dos Intel Core i7 16 300 1
LAPTOP 1700 AsusTek Computer Inc. ASUS 220 250 Windows 10 Home Intel Core i3 8 500 0
LAPTOP 2050 Dell Inc. DELL 220 250 Free-Dos Intel Core i7 16 400 1
TABLET 90 AsusTek Computer Inc. ASUS 220 100 Android 4.4 (KitKat) Qualcomm Quad-core 1 8 9
TABLET 135 Samsung Electronics SAMSUNG 220 100 Android 5.0.2 (Lollipop) Samsung Exynos 3 32 11
TV 900 Royal Philips Electronics of the Netherlands PHILIPS 200 240 43
TV 1500 Samsung Electronics SAMSUNG 200 240 40
TV 12000 Royal Philips Electronics of the Netherlands PHILIPS 200 240 74
SMARTPHONE 700 Samsung Electronics SAMSUNG 200 240 Quad HD Super AMOLED
SMARTPHONE 600 Sony Electronics Manufacturing SONY 200 240 Super AMOLED
SMARTPHONE 1100 Apple Inc. APPLE 200 240 IPS LCD
HAIRCARE 22 Henkel AG & Company SCHWARZKOPH 1 2019 1000 0
HAIRCARE 26 Goldwell Manufacturing Services GOLDWELL 1 2021 750 1
PERFUME 13 Calvin Klein Inc. CALVIN KLEIN 0 2025 250 75
PERFUME 17 Hugo Boss Group HUGO BOSS 0 2021 330 110
PERFUME 11 Calvin Klein Inc. CALVIN KLEIN 0 2019 500 30
SKINCARE 19 Beiersdorf Global AG. NIVEA 1 2017 150 1
SKINCARE 13 Clinique Laboratories CLINIQUE 0 2025 750 1
SKINCARE 9 Beiersdorf Global AG. NIVEA 0 2022 400 0
You are expected to create an instance for each item in this file.
COMMANDS INPUT FILE
List of all commands, which will be given to test your program and which you are expected to execute correctly and in
order, will be given in the (tab-separated) commands.txt file. A detailed explanation, format and expected output for
each command is given in the Events/Actions section (Section 3.1.4) of this document.
BBM 104 – PA2 Page 15 of 18
A sample commands.txt input file is given below:
ADDCUSTOMER Cemil Kerem kerem@yahoo.com 21.02.1993 100000 kerem1111
SHOWCUSTOMER Leyla 3
SHOWCUSTOMERS Demet
SHOWCUSTOMERS Ferit
ADDCUSTOMER Musa Ayten ayten@yahoo.com 05.10.1981 1000 ayten0000
ADDTOCART 7 37
ORDER 7 ayten0000
SHOWCUSTOMER Can 4
SHOWADMININFO Can
SHOWADMININFO Enes
CREATECAMPAIGN Alper 23.03.2017 01.06.2017 BOOK 25
CREATECAMPAIGN Leyla 21.03.2017 01.09.2017 DEKSTOP 90
CREATECAMPAIGN Leyla 21.03.2017 01.09.2017 PERFUME 20
SHOWCAMPAIGNS 2
ADDTOCART 3 10
ADDTOCART 3 3
ADDTOCART 3 5
ADDTOCART 3 15
ADDTOCART 5 10
ORDER 3 hamza1234
DEPOSITMONEY 6 210.6
CHPASS 1 emre1234 emre12345678
EMPTYCART 3
ORDER 3 hamza1234
ADDTOCART 1 15
ADDTOCART 1 2
ADDTOCART 1 11
ORDER 1 emre12
ORDER 1 emre1234
ORDER 1 emre12345678
SHOWORDERS Emir
SHOWITEMSLOWONSTOCK Enes 14
SHOWVIP Alper
ADDADMIN Demet Yavuz yavuz@gmail.com 16.07.1984 1000 yavuz1
SHOWADMINONFO Yavuz
ADDTECH Yavuz Kubilay kubilay@outlook.com 19.04.2001 500 1
ADDITEM Kubilay LAPTOP:1250:Dell Inc.:DELL:220:250:Windows 10 Home:Intel Core
i7:8:250:1
ADDTOCART 6 37
ADDTOCART 6 25
ORDER 6 kerem1111
SHOWORDERS Emir
SHOWCUSTOMERS Demet
LISTITEM Kubilay
DISPITEMSOF Kubilay BOOK:HAIRCARE:PERFUME
5 JAVADOC
Javadoc is the JDK tool that generates API documentation from documentation comments. You are expected to
document every method and class using Javadoc. Documentation comments (doc comments) are special comments in
the Java source code that are delimited by the /** … */ delimiters. These comments are processed by the Javadoc tool to
generate the API docs.
The Javadoc tool can generate output originating from four different types of “source” files. In this assignment, the
source code files we are interested in are your Java classes (.java) – these contain class, interface, field, constructor and
method comments.
BBM 104 – PA2 Page 16 of 18
A format of a doc comment is as follows:
A doc comment is written in HTML and must precede a class, field, constructor or method declaration. It is
made up of two parts — a description followed by block tags. In this example, the block tags are @param,
@return, and @see.
The first sentence of each doc comment should be a summary sentence, containing a concise but complete
description of the API item. This means the first sentence of each member, class, interface or package
description. The Javadoc tool copies this first sentence to the appropriate member, class/interface or package
summary. This makes it important to write informative initial sentences that can stand on their own. E.g.
Tag conventions:
Order of tags should be:
o @author (classes and interfaces only, required)
o @version (classes and interfaces only, required)
o @param (methods and constructors only)
o @return (methods only)
o @exception (@throws is a synonym added in Javadoc 1.2)
o @see
Required tags:
o An @param tag is “required” (by convention) for every parameter, even when the description is
obvious.
o The @return tag is required for every method that returns something other than void, even if it is
redundant with the method description. (Whenever possible, find something non-redundant (ideally,
more specific) to use for the tag comment.)
/**
* Returns an Image object that can then be painted on the screen.
* The url argument must specify an absolute {@link URL}. The name
* argument is a specifier that is relative to the url argument.
*
* This method always returns immediately, whether or not the
* image exists. When this applet attempts to draw the image on
* the screen, the data will be loaded. The graphics primitives
* that draw the image will incrementally paint on the screen.
*
* @param url an absolute URL giving the base location of the image
* @param name the location of the image, relative to the url argument
* @return the image at the specified URL
* @see Image
*/
public Image getImage(URL url, String name) {
try {
return getImage(new URL(url, name));
} catch (MalformedURLException e) {
return null;
}
}
/**
* Class constructor.
*/
foo() {
…
/**
* Class constructor specifying number of objects to create.
*/
foo(int n) {
…
BBM 104 – PA2 Page 17 of 18
For more information on Javadoc and examples of doc comments, visit:
http://www.oracle.com/technetwork/articles/java/index-137868.html
Important note: DO NOT use Turkish characters in your code (anywhere, not even comments)!
6 CONSTRAINTS
Person Existence: As you may have realized, every command has its operator who may be an admin, a
technician, or a customer. The command’s operator name or ID (for customers) is provided as the second
argument of the command line. The system should output an error message if such person does not exist in the
system.
Stock Update: As new items are added to the system or ordered by the customers, stock amount of the item
type to which item belongs should be updated accordingly.
Add New Item: The arguments of an item to be added to the system should be separated by colon marks (:).
Before processing an Add New Item request, the system should first check if the item type has already been
defined before.
Change Password: Customers can update their password, but the system should check if the provided
password matches the current password.
Show Campaigns: The system allows a customer to visualize existing campaigns. However, there might be no
campaigns launched so far. In such case, the system should output a message whose content is given in the
Action/Event section.
Launch New Campaign: To launch a new campaign successfully, the discount rate should not exceed the
maximum rate allowed in the system. An admin launches a campaign not for a particular item but for all items
under a specified type. If a campaign already exists for that type, the system should not allow the admin to
create another one.
Show Orders: To visualize the orders made so far, system should consider the senior status of technician who
initiates display request.
Add to Cart: In this request, the system should check if there actually is such item whose ID number is provided
by a customer. If no item with itemID exists in the system, an error message should be displayed (the content of
this message is also provided in Action/Event section). Moreover, the system should also take stock
information of the item into consideration. If the stock is depleted, the system should prevent customers from
adding that item to their carts.
Make Order: When processing this request, the system should first consider the password of the customer who
initiates the order request. The system should also check if the customer’s cart is empty. If everything goes well
up to this stage, the system should now calculate the total price of the order. The customer should have enough
money to purchase all items in his/her cart. The system should also check the active campaigns for each item
in the customer’s cart, and if a campaign exists, the price for that item should be lowered depending on the
discount rate defined in the campaign. For the total price calculation, the system should also consider the
customer’s present status. If his/her status is other than CLASSIC, the price should also be lowered by the
system. After the process of placing order is over, the system should update the stock amount of each purchased
item, update the customer’s status if necessary, and calculate and display the amount of money that the
customer should spend in order to pass to the higher status (if applicable).
General constraints:
i. All outputs should be printed to the console and should match output formats provided in the Section
Events/Actions.
ii. Use comments as much as possible throughout your code, even for each method in a class.
iii. Do not use Turkish characters (not even in your comments!) as they causes compilation errors.
iv. Do not submit your project without first compiling it on dev machine.
v. Make sure your implementation works without runtime or compile errors.
vi. Ignore the cases which are not stated in this assignment and do not ask questions on Piazza for such
extreme cases.
vii. In general, if something is not specifically forbidden by this document, you may assume that it is
allowed.
BBM 104 – PA2 Page 18 of 18
7 SUBMISSION
Submissions will be accepted only electronically via submit.cs.hacettepe.edu.tr.
The deadline for submission is 12.04.2017 until 23:59 (late submissions will not be accepted!).
The minimum submission format is (minimum meaning that your zipped folders may contain other
files/folders):
b.zip
javadoc
src
uml.jpg
Your main class must be named Main.java! All of your classes should be in the src folder (they may, however,
be further classified into other subfolders in case you decide to make packages). You may zip your whole eclipse
project folder, but don’t forget to include your drawing of UML class diagrams saved as uml.jpg. Note that
only zipped folders can be submitted.
All work must be individual! Plagiarism check will be performed! Duplicate submissions will be graded with
0 and disciplinary action will be taken.
8 COMPILE & RUN
javac Main.java
java Main users.txt item.txt commands.txt