Final Report Csc248
Final Report Csc248
FINAL REPORT
OF
KERETA API TANAH MELAYU BERHAD DATA MANIPULATION
GROUP: JCS1103B
1
TABLE OF CONTENTS
____________________________________________________
Introduction of Project…………………………………………………………………………..3
Distribution of works…………………………………………………………………………….4
Sample input……………………………………………………………………………………28
Sample output………………………………………………………………………………….29
KTM……………………………………………………………………………………..29
Search Name…………………………………………………………………..29
Update Destination…………………………………………………………….30
KTMQ…………………………………………………………………………………...30
2
INTRODUCTION OF PROJECT
The purpose of this project is to design a system for Keretapi Tanah Melayu
Berhad (KTMB) for managing the process of ticket payment and customer information.
The customers just have to insert their information first and choose any destination
available they want to go. The system will calculate the amount of payments and display
the customers information after the payment is settled. This system is also able to
count the specific type, highest payment, search , remove and update the customer’s
destination.
3
INTRODUCTION OF GROUP MEMBERS / DISTRIBUTION OF WORKS
4
COMPLETE CODING OF ALL CLASSES
a) Class Node
Node (Passenger p)
{
this (p,null);
}
Passenger getData()
{
return data;
}
Node getNext()
{
return next;
}
5
b) Class LinkedList
public Linkedlist()
{
firstNode = lastNode =currNode = null;
}
6
firstNode = firstNode.next;
return removeItem;
}
7
return null;
else
{
currNode = firstNode;
return currNode.data;
}
}
8
}
}
else
{
previous = currNode;
currNode = currNode.next;
}
}
return val;
}
return size;
}
}
9
c) Class Queue
import java.util.*;
//the Queue class with a LinkedList field
//the element at the front of the queue object has been returned
public Object front()
{
return list.getFirst();
} //method front
10
//the element at the end of the queue object has been returned
public Object rear()
{
return list.getLast();
} //method rear
} // Queue class
d) Class EmptyListException
e) Class Passenger
11
this.ticketType=ticketType;
this.ticketPrice=ticketPrice;
this.destination=destination;
}
/**mutator method**/
public String getPName() {return pName;}
/**accessor method**/
public void setPName(String newPName) {pName=newPName;}
/**processor method**/
public Double calcTotal()
{
12
double total = 0.0;
if (pStatus.equalsIgnoreCase ("Citizen"))
{
double updatedPrice = getTicketPrice() * 0.05;
total= getTicketPrice() - updatedPrice;
setTicketPrice(total);
}
else if (pStatus.equalsIgnoreCase("Non-Citizen"))
{
//double updatedPrice = getTicketPrice();
total = getTicketPrice();// - updatedPrice;
setTicketPrice(total);
}
return total;
}
/**printer method**/
public String toString()
{
return
(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s%-20s", ktmId,
pName,pStatus,category,numOfTicket,ticketType,ticketPrice,destination));
//getKtmId()+ getPName() + getPStatus() + getCategory() +
getNumOfTicket() +getTicketType() + getTicketPrice() + getDestination();
13
f) Class testKTM
import java.io.*;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class testKTM
{
public static void main (String[]args)
{
try
{
Scanner sc= new Scanner (System.in);
sc.useDelimiter("\n");
name=st.nextToken();
status=st.nextToken();
id=st.nextToken();
category=st.nextToken().charAt(0);
tktNum=Integer.parseInt(st.nextToken());
ticketType=st.nextToken();
price=Double.parseDouble(st.nextToken());
destination=st.nextToken();
14
}
br.close();
System.out.println("\n\n--------------------------------------------------------------------------
----------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION ALL ");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while (p!=null)
{
System.out.println (p.toString());
p=(Passenger)passList.getNext();
}
int size = passList.size();
System.out.println("\n\t\t\tThe Size Of The List is : " + size);
System.out.print("\n-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
15
p.getCategory() == 'B')
{
bcList.insertAtFront(p);
}
else
{
temp.insertAtFront(p);
}
}
//restore
while (!temp.isEmpty())
{
passList.insertAtFront(temp.removeFromBack());
}
p=(Passenger)bcList.getFirst();
System.out.println("\n\n--------------------------------------------------------------------------
----------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION BC_LIST
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while (p != null)
{
System.out.println (p.toString());
p=(Passenger)bcList.getNext();
}
System.out.print("\n-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
16
int amc = 0;
int abc = 0;
p=(Passenger)passList.getFirst();
while (p!=null)
{
if (p.getTicketType().equalsIgnoreCase ("First Class"))
{
afc+=p.getNumOfTicket();
//afc++;
}
else if (p.getTicketType().equalsIgnoreCase("Middle Class"))
{
amc+=p.getNumOfTicket();
//amc++;
}
else if (p.getTicketType().equalsIgnoreCase("Business Class"))
{
abc+=p.getNumOfTicket();
//abc++;
}
p=(Passenger)passList.getNext();
}
int totalT=afc+amc+abc;
System.out.print("\n\n---------------------------------------------------------");
System.out.print("\n NUM OF TICKET/TYPE |");
System.out.print("\n---------------------------------------------------------");
System.out.print("\nFirst Class Passenger : " + afc);
System.out.print("\nMiddle Class Passenger : " + amc);
System.out.print("\nBusiness Class Passenger: " + abc);
System.out.print("\n---------------------------------------------------------");
System.out.print("\nTotal ticket sold>> " + totalT);
17
p = (Passenger)passList.getFirst();
while (p!=null)
{
String newId = p.getKtmId().substring(4,5);
if (p.getTicketType().equalsIgnoreCase ("First Class"))
{
if (newId.equalsIgnoreCase ("F"))
{
cntffc++;
}
else
cntmfc++;
}
else if ((p.getTicketType().equalsIgnoreCase ("Middle Class")))
{
if (newId.equalsIgnoreCase ("F"))
{
cntfmc++;;
}
else
cntmmc++;
}
else if ((p.getTicketType().equalsIgnoreCase ("Business Class")))
{
if (newId.equalsIgnoreCase ("F"))
{
cntfbc++;
}
else
cntmbc++;
}
p = (Passenger)passList.getNext();
}
System.out.print("\n\n---------------------------------------------------------");
System.out.print("\n CURRENT PASSENGER COUNT
|");
System.out.print("\n---------------------------------------------------------");
System.out.print("\nFirst Class Passenger : Female " + "[" + cntffc + "]"
+ " Male" + "[" +cntmfc+ "]");
System.out.print("\nMiddle Class Passenger : Female " + "[" + cntfmc +
"]" + " Male" + "[" +cntmmc+ "]");
System.out.print("\nBusiness Class Passenger: Female " + "[" + cntfbc
+ "]" + " Male" + "[" +cntmbc+ "]");
18
/**2nd process
/**Determine passenger who pays highest price
* display passenger's name and KTM id
*/
Passenger hPass = null;
p = (Passenger)passList.getFirst();
double hPrice=0.00;
double highest=p.getTicketPrice()*p.getNumOfTicket();
while(p!=null)
{
if(p.getTicketPrice() > hPrice)
{
hPrice = p.getTicketPrice() * p.getNumOfTicket();
hPass = p;
}
p=(Passenger)passList.getNext();
}
System.out.println("\n\nHighest amount paid by: " + hPass.getPName()
+ "\nKTM ID : " + hPass.getKtmId());
19
}
//System.out.println("Updated KTM ID : " + getKtmId());
}
else
{
System.out.println("Not found");
}
while (! temp.isEmpty())
{
passList.insertAtFront(temp.removeFromBack());
}
p=(Passenger)nonList.getFirst();
System.out.println("\n\n--------------------------------------------------------------------------
----------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION NON_LIST
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
20
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while (p!=null)
{
System.out.println (p.toString());
p=(Passenger)nonList.getNext();
}
System.out.println("-------------------------------------------------------------------------------
-------------------------------------------------------------------------------");
while (! hold.isEmpty())
{
passList.insertAtFront(hold.removeFromBack());
}
p=(Passenger)citiList.getFirst();
System.out.println("\n\n--------------------------------------------------------------------------
----------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION CITI_LIST
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
21
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while (p!=null)
{
System.out.println (p.toString());
p=(Passenger)citiList.getNext();
}
System.out.println("-------------------------------------------------------------------------------
-------------------------------------------------------------------------------");
////////
}
catch(FileNotFoundException fnfe)
{
System.out.println(fnfe.getMessage());
}
catch(IOException io)
{
System.out.println(io.getMessage());
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
22
g) Class testKTMQ
import java.util.Scanner;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;
name=st.nextToken();
status=st.nextToken();
id=st.nextToken();
category=st.nextToken().charAt(0);
tktNum=Integer.parseInt(st.nextToken());
ticketType=st.nextToken();
price=Double.parseDouble(st.nextToken());
destination=st.nextToken();
23
Queue temp = new Queue();
Queue alist = new Queue();
Passenger pq;
System.out.println("\n----------------------------------------------------------------------------
--------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION ");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while (!ktmq.isEmpty())
{
pq=(Passenger)ktmq.dequeue();
System.out.println(pq.toString());
temp.enqueue(pq);
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
24
System.out.println("\n----------------------------------------------------------------------------
--------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION(KUALA LUMPUR)
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while(!klQ.isEmpty())
{
pq = (Passenger)klQ.dequeue();
System.out.println(pq.toString());
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
/**
* update the price of each ticket of citizen to a new price by 5%
discount of the original price for new year promo
*/
while (!ktmq.isEmpty())
{
pq = (Passenger)ktmq.dequeue();
//pq.calcTotal();
temp.enqueue(pq);
}
while (!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
System.out.println("\n----------------------------------------------------------------------------
--------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION (NEW PRICE)
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
25
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while(!ktmq.isEmpty())
{
pq = (Passenger)ktmq.dequeue();
System.out.println(pq.toString() + pq.calcTotal());
temp.enqueue(pq);
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
/**
* remove all passenger in Business Class and moved to a new queue
object called businessQ
*/
Queue businessQ = new Queue();
Queue middleQ = new Queue();
Queue firstQ = new Queue();
while(!ktmq.isEmpty())
{
pq = (Passenger)ktmq.dequeue();
if(pq.getTicketType().equalsIgnoreCase("Business Class"))
{
businessQ.enqueue(pq);
}
else if(pq.getTicketType().equalsIgnoreCase("Middle Class"))
{
middleQ.enqueue(pq);
}
else if(pq.getTicketType().equalsIgnoreCase("First Class"))
{
firstQ.enqueue(pq);
}
else
{
temp.enqueue(pq);
}
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
26
}
System.out.println("\n----------------------------------------------------------------------------
--------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION (BUSINESS CLASS)
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
System.out.println(String.format("%-15s%-32s%-15s%-20s%-20s%-20s%-15s
%-20s", "KTM ID", "NAME", "STATUS", "CATEGORY","TICKETS
BOOK","TICKET TYPE","PRICE/TICKET","DESTINATION"));
while(!businessQ.isEmpty())
{
pq = (Passenger)businessQ.dequeue();
System.out.println(pq.toString());
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
System.out.println("\n----------------------------------------------------------------------------
--------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION (MIDDLE CLASS)
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
while(!middleQ.isEmpty())
{
pq = (Passenger)middleQ.dequeue();
System.out.println(pq.toString());
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
System.out.println("\n----------------------------------------------------------------------------
--------------------------------------------------------------------------------");
System.out.println("
PASSENGER INFORMATION (FIRST CLASS)
27
");
System.out.println("-------------------------------------------------------------------------------
-----------------------------------------------------------------------------");
while(!firstQ.isEmpty())
{
pq = (Passenger)firstQ.dequeue();
System.out.println(pq.toString());
}
while(!temp.isEmpty())
{
ktmq.enqueue(temp.dequeue());
}
catch(FileNotFoundException fnfe)
{
System.out.println(fnfe.getMessage());
}
catch(IOException io)
{
System.out.println(io.getMessage());
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
28
SAMPLE INPUT
SAMPLE OUTPUT
– KTM –
29
>> SEARCH
30
>> UPDATE DESTINATION
31
– KTMQ –
32
33
CONCLUSION OF OUR FINDING
Our aim in this project is to create a system for the smoothness and
effectiveness for Keretapi Tanah Melayu Berhad(KTMB) to sort the
customers information in order easily.
The best data structure that was applied in this project would be to
remove all passengers to their own new queue object which means
Business Class to businessQ, Middle Class to middleQ and First Class to
firstQ. The reason this is the best data structure is because it is the longest
and kind of complicated to get it done. But, the results are satisfying. It is
important because it sorts the data according to these three types of class.
It is more effective to search and update destinations after they are sorted
out.
34
Name : 1) NURUL ELIZWANI BINTI KAMSANI Group Class : JCS1103B
2) ALIANAJWA MAISARAH BINTI MOHD AZAR
3) NURUL FAQIHAH BINTI ABDUL KARIM
ID : 1) 2021616054
2) 2021815376
3) 2021882416
35
Name : 1) NURUL ELIZWANI BINTI KAMSANI Group Class : JCS1103B
2) ALIANAJWA MAISARAH BINTI MOHD AZAR
3) NURUL FAQIHAH BINTI ABDUL KARIM
ID : 1) 2021616054
2) 2021815376
3) 2021882416
36
Name : 1) NURUL ELIZWANI BINTI KAMSANI Group Class : JCS1103B
2) ALIANAJWA MAISARAH BINTI MOHD AZAR
3) NURUL FAQIHAH BINTI ABDUL KARIM
ID : 1) 2021616054
2) 2021815376
3) 2021882416
37
Name : 1) NURUL ELIZWANI BINTI KAMSANI Group Class : JCS1103B
2) ALIANAJWA MAISARAH BINTI MOHD AZAR
3) NURUL FAQIHAH BINTI ABDUL KARIM
ID : 1) 2021616054
2) 2021815376
3) 2021882416
38