In: Computer Science
Write a Java program for a restaurant with the
following features:
◦ Customer: Name, Surname, ID (incremental ID by 1 for each new
customer),
Email, Phone, Address.
◦ Service: ID (incremental ID by1 for each group),CustomerID,
Priority (High,
Medium, Low, Other), ResolutionTimeFrame (Measured in Man
hours),
AssignedUser, Status(resolved or not), Fee.
◦ User (simple user of system): ID, Name, Surname, Username and
Password
(insert from code five fixed users), Address , PhoneNumber
◦ Manager: Name, Surname, Username and Password (insert from code
one fixed
manager).
The program must:
◦ Present a Menu for the simple user after he has logged in with
username and
password.
Menu:
New Service
New customer
Assign a service request to a specific user; Remove
Service.
Resolve Service
Print information for customer with a certain ID
Apply offers to the different type of customers.(Apply offer to
the
Loyal Customer with 10% discount on the fee)
Overall number of Services requested by customers assigned to
a
user with a certain username. (requires manager password)
◦ Total amount of all fees of resolved Services processed by
the user with a certain username (requires manager
password).
◦ Total amount of all fees of resolved Services on the
current
day (requires manager password).
Change user from one to another (Each user should manage
its
own portfolio of customers)
◦ Change from User to Manager
◦ Change from Manager to User
Exit
After implementation of the first phase start to include the
following specifications: For the
classes Customer and Services make sure you use a static integer
field for the incremental ID of
the objects of these classes.
Introduce inheritance in the project design with the
following:
a. Add a new class
Person class: with the following attributes;
Name Surname
ID
Username
Password
Address
PhoneNumber
Classes inheriting from Person:
i. Manager: has two additional features more than the Person called
InternalPhoneNumber and
PIN to start the software at the beginning of the day.
ii. User: has these fields more than Person: InternalPhoneNumber,
baseSalary.
b) Classes inheriting from Customer class
The following types of Customer exists.
i. SimpleCustomer
ii. Class LoyalCustomer which has additional features: IndividualID
and Discount.
The manager inserts the discount amount periodically. (It may be
also 0 )
iii. Class BusinessCustomer, which has additional features more
than Customer,
called Business ID(NIPT) and has an additional feature more
than
LoyalCustomer called BusinessDiscount. The manager will define the
amount of
BusinessDiscount. The overall discount is calculated as Discount
+
BusinessDiscount.
Define the following methods in all classes:
calculateTotalFee( ) : Calculate the Total fee with the discount
for each of these classes
PrintInfo( ): Print all the information of the Service
Complete the following extensions to the current project:
1. Start the program with a login window where you request username
and password for the
user.
2. Once the user is logged in show the following window with this
menu:
File
Help (show a simple window with few instructions on how to use
the program)
Exit (close the program)
Suggestion: Use JDesktopPane within JFrame
Put in the File menu the following voices:
New Customer (suggestion: open a new JInternalFrame for a new
customer)
Overall number of customers for some user (show a pop-up with the
number of
customers served or on hold)
Total amount of all Customer services for the User (show a pop-up
with the
amount of Services served )
Within the internal frame implement the following:
New Service for a specific customer
o Choose Service type
o Choose Service to be added.
o Print Customer services info
o Remove A service
Suggestion: use JMenu for first level (New Service), JMenu for
second level (Example: Choose
Service Type)
public class Customer
{
public String Name;
public String Surname;
int ID;
public Customer(String Name,String Surname)
{
this.Name=Name;
this.Surname=Surname;
}
}
CustomerProcessing.java
import java.util.*;
public class CustomerProcessing {
private static List<Customer> Customers=new
ArrayList<Customer>();
//New customer
public void AddCustomer(Customer objCustomer)
{
objCustomer.ID=Customers.size()+1;
Customers.add(objCustomer);
}
//Print information for customer with a certain
ID
public Customer GetCustomerInfo(int CustomerId)
{
Customer
objCustomer=Customers.get(CustomerId-1);
return objCustomer;
}
}
Manager.java
public class Manager {
String Name;
String Surname;
String Password;
public Manager(String Name,String Surname,String
Password)
{
this.Name=Name;
this.Surname=Surname;
this.Password=Password;
}
}
ManagerProcessing.java
import java.util.ArrayList;
import java.util.List;
public class ManagerProcessing {
private static List<Manager> Managers=new
ArrayList<Manager>();
public void AddManager(Manager objManager)
{
Managers.add(objManager);
}
}
Service.java
public class Service {
int Id;
int CustomerId;
String Priority;
int ResolutionTimeFrame;
int AssignedUser;
String Status;
float Fee;
Service(int CustomerId,String Priority,int
ResolutionTimeFrame,float Fee,int AssignedUser)
{
this.CustomerId=CustomerId;
this.Priority=Priority;
this.ResolutionTimeFrame=ResolutionTimeFrame;
this.Fee=Fee;
this.AssignedUser=AssignedUser;
this.Status="No";
}
}
ServiceProcessing.java
import java.util.ArrayList;
import java.util.List;
public class ServiceProcessing {
private static List<Service> Services=new
ArrayList<Service>();
public void AddnServiceRequest(Service
objService)
{
Services.add(objService);
}
public void AssignServiceToUser(int ServiceId,int
UserId)
{
Service
objCustomer=Services.get(ServiceId-1);
objCustomer.AssignedUser=UserId;
}
public void RemoveService(int ServiceId)
{
if(Services.size()<=ServiceId)
{
Services.remove(ServiceId-1);
}
}
//Changes service state to Solved
public void ResolveService(int ServiceId)
{
Service
objService=Services.get(ServiceId-1);
objService.Status="Solved";
}
private static List<Service>
getServicesByUserId(int UserId) {
List<Service> result = new
ArrayList<Service>();
for (Service serviceObj : Services) {
if (serviceObj.AssignedUser==UserId) { // we dont like mkyong
result.add(serviceObj);
}
}
return result;
}
// Overall number of Services requested by customers
assigned to a
//user with a certain username.
public List<Service>
NumberOfServicesRequestedByUser(String Username)
{
UserProcessing objUP=new
UserProcessing();
int
UserId=objUP.GetUserIdByUserName(Username);
return
getServicesByUserId(UserId);
}
}