You are on page 1of 81

 

ICT499 CAPSTONE PROJECT COURSE 
 

SALES AND INVENTORY SYSTEM FOR CHAIN STORES 
(AMUSEMENT CENTER) 
FINAL REPORT 

JANUARY 2008 

 
NAME: LEE CHANGJIN 
PI: K0604033 
PROJECT CODE: JAN08/BHICT/03 
TUTOR: MS NORSHIDA SELAMAT 
SUBMISSION DATE: 24th OCTOBER 2008 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

ABSTRACT 
 

Methods of data storing and data processing are crucial to every business. Usually, 
companies overlooked the process of deriving the data. As long the data is obtained, how it 
is obtained really does not matter anymore.  Some companies are still using papers with 
some usage of office related programs like Microsoft Words or Excel to store or process 
data. Using papers to process data can be time consuming and inefficient. 

This project is to demonstrate the how database system can be used to better manage and 
process data using stored procedures and triggers. The strategy adopted to achieve the 
objectives includes project management to better monitor and plan for the project progress, 
adopting of the database application lifecycle to develop the database system, reference 
and review of literatures to improve on completing this project.   

MySQL is used as the DBMS for this project. This project provides details on the EAR Model 
of the database system. Triggers and stored procedures are written and tested to fulfill the 
system objectives and any enterprise constraints.  

This project only covers the designing and testing of the database system. To be able to 
implement into usable system still need integration to GUI application. Businesses using 
database system the right way, should help to automate tedious manual tasks, making 
processing data more efficient and with great chance, minimize any human errors in the 
manual tasks. Areas such as security issue and distributed system deployment can be looked 
into in the future to improve on this project. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 2 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

ACKNOWLEDGEMENTS 
 

I would like to take this opportunity to express my deepest gratitude to the following 
individuals who have given me tremendous support and help in completing my Final Year 
Project.  

‘Thank you, Ms Norishida Selamat.’  

 It is a pleasure to have Ms Norishida as my project supervisor, a great tutor with patience 
and thoughtfulness.  With her worthy advice and invaluable guidance, she has guided me on 
this journey to complete my Final Year Project.  

I would like to thank Aidan Wee who used to be the business manager of Valibel 
Technologies Pte Ltd. He had shared with me the limitation of the amusement center 
operation and provided useful information to aid me in my project. Through him, I have 
gotten my project title and system objectives. 

I would like to thank my business partner for his extended understanding and abundant 
patience he has had given me, allowing me to have a balanced commitment between my 
Final Year Project and my startup business. 

Finally, I must thank my Mom and Dad for their loving care and inestimable morale support 
throughout this bumpy year.  

‘Love ya, Mum & Dad!’ 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 3 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

CD­ROM REPORT 
 

This report includes a CD with the following contents. 

1) Final Year Report – ICT499_K0604033.doc 

2) Gantt Chart – gantt_chart_K0604033.xls or gantt_chart_K0604033.pdf 

3) The full schema – full_schema.sql 

4) Test script to populate the database – test_script.sql 

5) Backup database – k0604033_backup.sql 

6) Acrobat Reader 9.0 Installer 

7) MySQL Community Server 5.0 Installer 

8) MySQL GUI Tools 5.0 Installer 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 4 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

 
TABLE OF CONTENTS 

ABSTRACT .................................................................................................................................. 2 

ACKNOWLEDGEMENTS ............................................................................................................. 3 

CD‐ROM REPORT ....................................................................................................................... 4 

TABLE OF CONTENTS ................................................................................................................. 5 

1.  INTRODUCTION ................................................................................................................. 8 

1.1.  PROJECT TITLE ........................................................................................................... 8 

1.2.  PROJECT AIMS ........................................................................................................... 8 

1.3.  CONTEXT BACKGROUND ........................................................................................... 9 

1.4.  SYSTEM DEFINITION ................................................................................................ 10 

1.5.  SYSTEM OBJECTIVES ................................................................................................ 11 

1.6.  METHODOLOGY ADOPTED ...................................................................................... 13 

1.7.  RESOURCES USED .................................................................................................... 15 

1.8.  LITERATURE REVIEW................................................................................................ 16 

1.9.  PROJECT MANAGEMENT ......................................................................................... 18 

2.  CONCEPTUAL DESIGNING................................................................................................ 21 

2.1.  ER DIAGRAM............................................................................................................ 21 

2.2.  ENTITY DEFINITION & DESCRIPTION ....................................................................... 23 

2.3.  RELATIONSHIP DESCRIPTION................................................................................... 24 

2.4.  ATTRIBUTE DESCRIPTION ........................................................................................ 26 

2.5.  CHANGES TO EAR MODEL ....................................................................................... 32 

3.  LOGICAL DESIGNING........................................................................................................ 33 

3.1.  RELATIONAL HEADINGS........................................................................................... 33 

4.  PHYSICAL DESIGNING ...................................................................................................... 35 


ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 5 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

4.1.  CREATE TABLE STATEMENTS ................................................................................... 35 

4.2.  TRIGGER STATEMENTS ............................................................................................ 36 

4.3.  STORED PROCEDURE STATEMENTS ........................................................................ 38 

4.4.  FUNCTION STATEMENTS ......................................................................................... 40 

4.5.  VIEW STATEMENTS.................................................................................................. 42 

5.  DATABASE TESTING ......................................................................................................... 43 

5.1.  ENTITY TESTING ....................................................................................................... 43 

5.2.  REFERENTIAL INTEGRITY TESTING........................................................................... 44 

5.3.  DATA DOMAIN TESTING .......................................................................................... 45 

5.4.  CARDINALITY TESTING............................................................................................. 45 

5.5.  SYSTEM OBJECTIVE CHECKLIST................................................................................ 46 

5.6.  SYSTEM OBJECTIVE TESTING ................................................................................... 48 

6.  CONCLUSION ................................................................................................................... 58 

6.1.  CRITICAL REVIEW & REFLECTIONS........................................................................... 58 

6.2.  RECOMMENDATIONS .............................................................................................. 60 

6.3.  CONCLUSION ........................................................................................................... 60 

7.  APPENDICES..................................................................................................................... 61 

7.1.  APPENDIX A: SQL SCHEMA ...................................................................................... 61 

7.2.  APPENDIX B: SQL TABLE POPULATION .................................................................... 72 

7.3.  APPENDIX C: GANTT CHART .................................................................................... 75 

7.4.  APPENDIX D: OTHERS .............................................................................................. 77 

8.  REFERENCES .................................................................................................................... 80 

9.  GLOSSARY ........................................................................................................................ 81 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 6 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

LISTS OF FIGURES AND TABLES 
 

FIGURE 1.1 THE DATABASE DEVELOPMENT LIFECYCLE FOR THE PROJECT.  13 
FIGURE 1.2 THE NETWORK DIAGRAM USED DURING THE PROJECT  19 
FIGURE 1.3 CRITICAL PATH  20 
FIGURE 2.1 ER DIAGRAM  21 
FIGURE 4.1 CREATE TABLE STATEMENT FOR FACILITY  35 
FIGURE 4.2 TRIGGER STATEMENT FOR BEFORE_FACILITY_UPDATE  37 
FIGURE 4.3 STORED PROCEDURE STATEMENT FOR ADDSALES  40 
FIGURE 4.4 FUNCTION STATEMENT FOR CALCULATEPAYABLE  41 
FIGURE 4.5 VIEW CREATE STATEMENT FOR FACILITYCENTERPROMOVIEW  42 
FIGURE 5.1 SUCCESSFUL INSERT INTO TABLE FACILITY BY OMITTING THE PRIMARY KEY.  43 
FIGURE 5.2 SUCCESSFUL INSERT INTO TABLE FACILITY USING NULL FOR PRIMARY KEY.  43 
FIGURE 5.3 UNSUCCESSFUL INSERTING OF DATA INTO TABLE FACILITY.  44 
FIGURE 5.4 UNSUCCESSFUL INSERT INTO TABLE FACILITY USING INVALID FOREIGN KEY.  44 
FIGURE 5.5 UNSUCCESSFUL INSERT INTO TABLE FACILITY USING WRONG DATA TYPE.  45 
FIGURE 5.6 UNSUCCESSFUL INSERT WITH REFERENTIAL INTEGRITY ERROR FOR CARDINALITY 
CHECKING.  46 
 

TABLE 1.1 WORK BREAKDOWN STRUCTURE  18 
TABLE 2.1 ENTITY DEFINITION & DESCRIPTION  24 
TABLE 2.2 RELATIONSHIP DESCRIPTION  25 
TABLE 2.3 ATTRIBUTE DESCRIPTON FOR FACILITY  26 
TABLE 2.4 ATTRIBUTE DESCRIPTION FOR ARCADE  26 
TABLE 2.5 ATTRIBUTE DESCRIPTION OF GAME  27 
TABLE 2.6 ATTRIBUTE DESCRIPTION FOR INVENTORY  27 
TABLE 2.7 ATTRIBUTE DESCRIPTION FOR INVENTORYLOG  27 
TABLE 2.8 ATTRIBUTE DESCRIPTION FOR CENTER  27 
TABLE 2.9 ATTRIBUTE DESCRIPTION FOR PROMOTION  28 
TABLE 2.10 ATTRIBUTE DESCRIPTION FOR CENTERPROMOTION  28 
TABLE 2.11 ATTRIBUTE DESCRIPTION FOR SALES  29 
TABLE 2.12 ATTRIBUTE DESCRIPTION FOR LANBILLIARDSALES  29 
TABLE 2.13 ATTRIBUTE DESCRIPTION FOR ARCADECARDSALES  29 
TABLE 2.14 ATTRIBUTE DESCRIPTION FOR ARCADECARD  30 
TABLE 2.15 ATTRIBUTE DESCRIPTION FOR MEMBER  31 
TABLE 2.16 ATTRIBUTE DESCRIPTION FOR REDEEMITEM  31 
TABLE 2.17 ATTRIBUTE DESCRIPTION FOR REDEMPTION  32 
TABLE 4.1 TRIGGERS DESCRIPTION AND SCOPE  37 
TABLE 4.2 STORED PROCEDURE DESCRIPTION AND SCOPE  39 
TABLE 5.1 CODES THAT FULFILL INVENTORY SYSTEM OBJECTIVES  47 
TABLE 5.2 CODES THAT FULFILL SALES SYSTEM OBJECTIVE  47 
TABLE 5.3 CODES THAT FULFILL MEMBER SYSTEM OBJECTIVES  48 
 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 7 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1. INTRODUCTION 
 

1.1. PROJECT TITLE 
 

I had chosen ‘Design and Implementation of a Database’ as my project track. This is due to 
my interest in data management and I want to learn how I can manage data with a database 
to provide useful yet relevant data for a specific need from a user.  It is interesting to 
discover how a database system can store such gigantic amount of data and yet still able to 
sort out relevant data within seconds with just a few lines of query scripting.  

The project title that I will be working on is as titled: Sales and Inventory System for Chain 
Stores (Amusement Center). 

1.2. PROJECT AIMS 
 

In general, by undergoing this project, it allows me to access my standards in planning and 
managing a project and apply what I have had learnt in UniSIM. Setting my criteria and 
schedule to develop this project and fulfilling them is a challenging experience for me. 
During the process of this project, I am able to identify my weaknesses in the various stages 
of project management. By knowing these weaknesses, improvement plans were made and 
scheduled by me to improve on my weak areas. Thus, the experience and knowledge gained 
by doing this project definitely helps me be better in my project management skill in further 
projects. 

A database system is widely used to provide a central control of data where the data is 
accessed and used by multiple users for different purposes. Different users might need the 
same data for different purposes. Hence, by developing a database solution, it should solve 
and enhance the operational limitation faced by the company. The company should be able 
to manage its data more efficiently with the database system.   

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 8 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1.3. CONTEXT BACKGROUND 
 

Introduction 

Valibel Technologies Ptd Ltd is one of the pioneers in the family entertainment business. 
Incorporate in 1983, Valibel aims to excel in family entertainment and to achieve top 
standards in service and products to meet its business goals. Currently, Valibel manages a 
chain of 6 amusement centers.  

The facilities 

These amusement centers can provide up to 3 different types of facilities namely, Arcade 
machines, LAN stations and billiard tables. The arcade machines are categories into different 
genres such as shooting, racing and sport. Each arcade machines will have its game title and 
its credit price for one game play. For LAN stations and billiard tables, customer pays for the 
usage by hourly rate. 

Inventory 

There is an inventory warehouse to hold the facilities. When a facility requires servicing, it is 
send to the inventory. After servicing is done, it will be send back to the former center if 
required. New facility is send to the inventory before deploying to any centers. The facilities 
are either in a center or in the inventory. If a facility needs to be relocated to other center, it 
has to be sent back to the inventory first before deploying to the center.  

Arcade cards 

Arcard cards are sold in all centers. Customers are required to buy arcade cards to play the 
arcade machines. Arcade cards are available in different total credit value which cost 
differently. For example, a customer pays S$5 for a 6 dollars credit value card. 

Promotions 

A center can only have one promotion at any one time. The promotion can be for a 
particular facility or for the entire center. The promotion will have a start date and end date 
as promotion period. A promotion will give a discount off the total bill either by an amount 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 9 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

or by a certain percentage with minimum spending. Promotions are strictly not applicable to 
member. 

Sales  

Sales record is generated when customers buy arcade cards or pay for LAN/billiard usages. If 
the customer is a member, the customer will enjoy member pricing if any. The sales of the 
arcade cards are recorded down on a piece of sales report form by the respective counter 
staff of each center. The forms are collected from each center and send to the main office 
for accounting at the end of the day. The sales of the LAN stations and billiard tables are 
managed by a Marco32 system where the respective counter staff prints the sales receipt of 
each center at the end of the day. The sales receipts are also collected and send to the main 
office for accounting at the end of the day. 

The sales records from these forms and receipts are then keyed into Excel sheet for better 
management of the sales data and accounting purpose. 

Membership 

A customer can become a member by filling up the membership form. Information to be 
captured includes member number, name, identity number (i.e. NRIC or passport number), 
gender, date of birth, address, contact, email and occupation. For every facility a member 
has spent on, the member will earn member points. Member can use to points to redeem 
for gift items and other prizes. Member points will be reset back to zero when the member 
expiry point date has past. 

1.4. SYSTEM DEFINITION 
 

A centralize system 

 Valibel has plan for a centralize system to quicken its operations. 

 An inventory system that can keep records on which facility has been send back for 
servicing and where a particular facility is previously allocated and when is that action 
executed. A logging feature to log every event in the inventory for tracking purposes. 

 A sale system that is used to manage the sales records of the arcade cards, as well as 
sales records of LAN station and billiard table usage. The sales system will be able to 
facilitate any member rates or promotions. 

 A member system used to manage the member points and redemption of items. 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 10 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1.5. SYSTEM OBJECTIVES 
 

The system objectives are represented in the brackets as the respective modules alias which 
will be use in this report to represent a particular system objective. For example, the system 
objective of Inventory System point 1 will be represented as ‘IS: Point 1’. 

Inventory System (IS) 

1. The system will be able to add new facility records into the inventory. The system will 
log this event. 

2. The system will be able to change where the facility is to be deployed. If facility is 
currently in a center, changing the center will move the facility to the inventory to be 
redeployed. The system will log this event. 

3. The system will be able to move facility records from centers that require maintenance 
servicing back to the inventory. The system will log this event. 

4. The system will be able to move facility record back to the center it should be deployed 
to when the maintenance servicing is done. The system will log this event. 

Sales (SA) 

1. The system will be able to register one particular promotion to a center. 

2. The system will be able to ensure that a center can only have one promotion at any one 
time. 

3. The system will be able to generate sales record on  

a. A normal basis when there is no promotion and the customer is not a member. 

b. A promotion basis if the center is having a promotion. 

c. A membership basis if the customer is a member. 

4. The system will be able to ensure that the promotion privilege will not be applicable if 
the sale is from a member. 

Member (ME) 

1. The system will be able to accumulate the member points for any sales generated by 
member where for every S$0.10 spent, 1 point will be accumulated. 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 11 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

2. The system will be able to ensure that the member has sufficient member points for 
deduction before registering any redemption made by the member.  

3. The system will be able to reset the member points back to zero when the member 
point expiry date has past. A new member point expiry date will be extended by 1 year. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 12 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1.6. METHODOLOGY ADOPTED 
 

Every project adopts a certain SDLC as it adheres the important phases that are essential for 
developers namely planning, analysis, design, implementation and testing. In figure 1.1 
shows a similar to SDLC structure which I am be adopting for my project. This is a database 
development lifecycle which I referenced from the book ‘Database System’ on page 272. I 
have tailored the development lifecycle to use it as a guideline for my project. In figure 1.1 
shows my database development lifecycle. 

Gathering of User
Requirements

Database Design

Analysis of
Requirements

Database System
Definition

Conceptual Design

Logical Design

Physical Design

Database Testing

 
Figure 1.1 The database development lifecycle for the project. 

During the requirement gathering phase, I conducted an interview with the business 
development manager. I brainstormed some questions to ask which I have appended in the 
Appendix D: OTHERS, and shortlist the critical ones for the interview. Through the interview 
and some chatting I have a better understand of the company background and operation 
flow. I have obtained 2 forms related to the company operation namely the membership 
registration form and the sales tracking form. Refer to appendix for the form. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 13 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

With the requirements then defining the system definition and objectives, I begin on 
conceptual designing of the database system. I had done revision and reference to have a 
better idea on how to do the E‐A‐R (Entity‐Attribute‐Relationship) model. It involved 
defining the entities, each entry’s attributes, the relationship between the entities and their 
description. I had iterated at this stage a few time due to changes on the E‐A‐R model. 
Logical design stage is where I done the relationship headings and finalizing the details to 
begin on designing and creating the schema. 

As I am not very good with triggers and stored procedures, I did research and referencing on 
books to websites. I was lucky to found a good book, ‘Pro MySQL’, which gives excellent 
example of creating triggers and stored procedures. Well doing the codes, small testing is 
done to see if the code works. I did not complete all the codes and script before moving to 
testing stage. What I did was that after finish the inventory system, I jumped into testing the 
inventory system and went back to debug if bugs were found. This process iterates for a few 
times before I move on to the next module, sales system and so on. I used the same method, 
for the next two parts of the database system. Once I done all of them, I did a whole system 
check again to see if there is any loopholes or bugs that I had missed. Indeed, bugs were 
found and I had to go back to the concerns area to solve the bugs. 

In a way, a lot of iteration from various stages to precedent stage occurred where changes 
were made and fine tuning was done to the database system. Until all the system objectives 
are fulfilled and test, that is when I worked on my report. From there I did research and 
referencing on how to write a good report. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 14 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1.7. RESOURCES USED 
 

I have had visited National Libraries and SIM’s library for research and revision. Some of the 
books that I had borrowed were used for literature research, while some others were used 
to gain more knowledge and revise on my relevant experiences to do this project. National 
Libraries provide a wider range of books for reference which some which I required cannot 
be found in SIM library.  

However, SIM Library does provide other materials which National Libraries do not have. 
SIM Library has provided a collection of past Capstone Project Reports which I have 
referenced for the content structure and how past project students did their report. These 
reports that I have referenced gave me an insight of the standard of the report and how I 
can improvise when doing mine.  

Other then libraries, I have use the internet to search for relevant information for further 
research. Surfing on internet is like a treasure hunt. With Google’s powerful search engine, I 
am able to find worthy websites for reference. 

A computer with the necessary software installed is crucial for this project too. Luckily, I 
have a laptop with Microsoft Office installed. Hence, I can work on my report even at night. 
Though SIM does provide work station for students to use, it is definitely more flexible and 
easier with one that I own it. Towards the end of the project, I will prepare my presentation 
on my laptop.  

As I am using MySQL as my DBMS, I would need to download and install MySQL Community 
Server. I have chosen MySQL as this DBMS is an open source database and is proclaimed to 
be the world’s most popular open source database by the global community. Other then it is 
free, I have some experience using it since my polytechnic days. I have also installed MySQL 
GUI Tools to assist me in managing my database for this project.  It provides GUI features for 
me to interact with the DBMS with much ease.  

Meeting room or study area is also one of the resources required. I have had monthly 
meeting with my tutor to follow up the project status and enquire for my tutor’s advice. Our 
tutor will book a meeting room in SIM for the monthly meeting. Once in a while, I would 
meet up with other students doing the 499 capstone project to share and help each other. 
We usually meet up in SIM and grab any available study area or use the open lab session 
available. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 15 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1.8. LITERATURE REVIEW 
 

For more information regarding the materials that I have referenced, refer to ‘Reference’ 
section at the end of this report. 

Database Systems (Book) 

I found this book in the UniSIM library when looking for database related information for my 
project. This book provides a lot of information which I used it to guide me in doing the 
project. 

First, my SDLC is derived from this book, Chapter 9, section 9.2, The Database Application 
Lifecycle. I reference the diagram on page 272 and used it as a guidance to structure my 
SDLC.  In the end, I used its term Database Application Lifecycle instead of SDLC. The 
Database Application Lifecycle is similar to of a SDLC which consist the requirement 
gathering, designing and testing of the system. 

I also reference chapter 11, Entity‐Relationship Modeling to get some guideline to work on 
my ER diagram. Particularly on Section 11.3, Attributes, to familiarize with the different type 
of attributes namely single, composite, multi‐valued, derived and keys. 

However, this book is useful for my conceptual design where it help me plan and set my ER 
model. It does not provide much help in trigger and stored procedure which I will need to 
get familiarizes to work on my physical design stage of the database system. It is not a 
wonder book but it did help me get started. 

Pro MySQL (Book) 

During my ICT 315 course in school, trigger and stored procedure is taught only on the 
surface, we were taught to know the pseudo code for the trigger but not really go in depth 
to try it. Hence, trigger and stored procedure is one area I must research on. This book is 
introduced to me by my friend, as I was asking around if there are any good books which 
teach trigger and stored procedure on MySQL. I managed to find it in West Mall National 
Library.  

On the cover, it quotes ‘The Expert’s Voice In Open Source’. Indeed, it gives me great details 
on creating triggers, stored procedure and more. All my codes would not be possible without 
this book. I had tried out their example trigger and stored procedure before working on 
mine. Chapter 9, Stored Procedures, Building Stored Procedure on Page 354, teaches the 
creating of stored procedure in a step by step explanation which I followed closely. Same for 
Chapter 10 on Functions and Chapter 11 on Triggers, it guided me on creating my SQL 
schema. 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 16 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

If someone is learning how to use trigger, stored procedure and functions on MySQL, I will 
surely recommend this book to him/her. It is a book that covers a very specific area; people 
with specialized need on MySQL will find it very useful. This book has given my great 
assistance in completing my physical design and SQL schema. From there, I was able to move 
on to testing the schema. 

MySQL 5.0 Reference Manual 

This manual is one material I cannot miss out as I want to know more about MySQL. It covers 
most of the general information about MySQL. As it is available easily online, I just need an 
internet connection browse it or I can even download it to my computer. 

 I referenced chapter 10, Data Type, which give a general description, enough for understand 
and application, of all the data type used in MySQL. There is where I found the usage of 
string data type ENUM will only give a value from a list of values. 

Chapter 12 SQL Statement syntax, 12.1.9 Create Table syntax, is a section I used to check my 
CREATE statement and for explanation in my report. I also reference other section on 
CREATE trigger syntax, stored procedure and functions. Anyway in my opinion, it is just a 
reference manual without good example and explanations. 

It is a good source to get to know MySQL and provide some general information to the area I 
am looking for. However, if I want to know more in depth information on a specific area, I 
will need to source for better materials. 

A Guide to the Project Management Body of Knowledge (Book) 

I got to know this book from my ICT 317 course. It is given to me on the last day of course. 
Though the publication is four years ago, it is still a very good book on project management.  

I referenced on the chapter, Project Scope Management on page 103 to page 118 on the 
guidelines to plan my project scope and derive my work breakdown structure (WBS). Some 
reference on page 131 to know more about network diagram.  

Though the book does give good knowledge of project management but it serves more like 
guidelines to me. As this project is a one man show instead of a team, the book is good for 
theories reading, not for trying them out. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 17 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

1.9. PROJECT MANAGEMENT 
Work Breakdown Structure 

This is the work breakdown structure after the completion of the project without the potion 
on the initial report and presentation.  

Task  Preceding  Estimated 


Activity  Time 
3. Gather Requirements  2  9hrs 
3.1. Literature study  ‐  4hrs 
3.2. Interview with key personnel  3.1  5hrs 
3.2.1.Prepare interview questions  ‐  4hrs 
3.2.2.Conduct interview  3.2.1  1hr 
4. Database Design  ‐  104hrs 
4.1. Conceptual design  3  38hrs 
4.1.1.Literature study  ‐  10hrs 
4.1.2.Requirement Analysis  ‐  4hrs 
4.1.3.Identify entity and relationship types  ‐  6hrs 
4.1.4.Identify attributes for entity and relationship  ‐  8hrs 
4.1.5.Determine attribute domains  ‐  4hrs 
4.1.6.Determine candidate and primary key attributes  ‐  6hrs 
4.2. Logical design  4.1  16hrs 
4.2.1.Literature study    6hrs 
4.2.2.Define the relationship Headings  ‐  10hrs 
4.3. Physical design  4.2  50hrs 
4.3.1.Literature study  ‐  10hrs 
4.3.2.Create Table Statements  ‐  8hrs 
4.3.3.Trigger Statements  ‐  8hrs 
4.3.4.Stored Procedures Statements  ‐  8hrs 
4.3.5.Function Statements  ‐  8hrs 
4.3.6.View Statements  ‐  8hrs 
5. Database Testing  4.3  80hrs 
5.1. Literature study  ‐  10hrs 
5.2. Implementing of tables  ‐  10hrs 
5.3. Populate data  ‐  10hrs 
5.4. Testing of schemas  ‐  50hrs 
6. Final Report   4, 5, 6  70hrs 
6.1. Literature study  ‐  10hrs 
6.2. Doing of final report  ‐  60hrs 
Table 1.1 Work Breakdown Structure 

 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 18 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Network Diagram 

  Conceptual  Logical Design
Design 
 

  Physical Design  Database Testing
Create Table  Test Create 
 
Statements  Table & 
  populate data

 
Triggers  Test Triggers 
  Statements  Statements 

 
Stored  Test Stored 
  procedure  procedure 
Statements Statements
 

  Function  Test Function 
Statements  Statements 
 

  View  Test View 
Report 
Statements  Statements 
 

Figure 1.2 The network diagram used during the project 

I did not follow the tasks in order as shown in the WBS when doing the tasks. Instead, I 
broke up Task 3 Physical Design and Task 4 Database Testing into smaller specific tasks as 
shown in the network diagram. Upon completing the sub task of Physical Design, I moved to 
test the sub task. For example, after Task ‘Create Table Statements’ was done, I move to the 
Task ‘Test Create Table & Populate Data’. 

I chose to do it this way because it is more feasible to complete one component and test it 
before moving to the next component. Completing all the sub tasks in Physical Design then 
move on to testing might take me more time to test. Imagine, when there is a bug, I need to 
check all the sub tasks if I do not know where the bug is from.  

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 19 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Completing a sub task and then test it gives me the option to trial and error the sub task and 
perfect it before moving to the next one. Instead of completing task by task listed in the 
WBS, I completed by fulfilling system objective by system objective. The pattern of doing it 
can be seen on the Gantt chart. Please refer to Appendix C: Gantt chart. 

Critical Path 

 
Physical 
  Design 
Conceptual  Logical Design Report writing
 
Design 
  Database 
Testing 
 

Figure 1.3 Critical Path 

By doing the Physical Design and Database Testing concurrently, this is my critical path. From 
the Gantt chart, I took much more time to complete the testing from the estimated as I 
spent some time debugging my code. Partly is due to me not familiar with trigger and stored 
procedure.  

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 20 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

2. CONCEPTUAL DESIGNING 
 

2.1. ER DIAGRAM 

Inventory
InventoryLog facilityNo{PK}
facilityNo{PK} toDeployAt
invLogDatetime{PK} 1..N
invDescription 1..1
stores
willHave 1..N Arcade
1..1 Facility facilityNo{PK}
facilityNo{PK}
1..N facilityType {Optional} 1..N
has facilityStatus plays
normalPrice 1..1
memberPrice Game
gameNo{PK}
1..1 gameTitle
creates
1..1 genre
Center ArcadeCardSales
1..1 1..N salesNo{PK} 1..N
centerNo {PK}
name LanBilliardSales
make 1..N salesNo{PK}
1..1 startTime
endTime
relatesTo
hosts
{Mandatory, Or}
1..1
ArcadeCard Sales
1..N arcadeCardNo{PK} salesNo{PK}
CenterPromotion normalCardPrice salesType
centerNo{PK} memberCardPrice salesDatetime
promotionNo{PK} cardValue amtPayable
startdate{PK}
1..N
enddate{PK}
1..N generates
1..1
Redemption Member
appliesTo
memberNo{PK memberNo {PK}
1..1 redeemItemNo{PK} name
1..N 1..1
redeemDatetime{PK} identityNo
Promotion makes
promotionNo{PK} gender
1..N
description dob
rateType belongsTo address
rate email
1..1
minSpent contact
RedeemItem occupation
promoType redeemItemNo{PK}
memberCardNo
redeemDesc
joinedDate
pointsCost
points
pointsExpiry
 
 

Figure 2.1 ER Diagram 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 21 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Constraints: 

1. A new facility must be deployed to the inventory first. 

2. A facility must be sent back to the inventory first before deploying to other center. 

3. If the value of  toDeployAt of  table Inventory is not null, the value must exist as a value 
of CenterNo of table Center. 

4. A center can only have one active promotion at any one time. 

5. Member points will be reset to ‘0’ when the point expiry date is past. 

6. Member point expiry date is extended for a year upon expiry. 

7. Member points cannot be negative. 

8. Redemption is not applicable if the member does not have sufficient points for 
deduction. 

Assumption: 

1. A facility not allocated to any center must be in the inventory.  

2. Member rate is used instead of the promotion rate when a member pays in a center 
which is having a promotion. 

3. For every $0.10 spent by a member, 1 point is award to the member. 

The constraints and assumptions are mostly derived from the system objectives. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 22 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

2.2. ENTITY DEFINITION & DESCRIPTION 
 

Entity Definition/Description

Facility (facilityNo, facilityType, facilityStatus, normalPrice,


memberPrice)

Each instance of Facility holds details of a facility which can


be a LAN-station, a billiard table or an arcade machine.

Arcade (facilityNo)

Each instance of Arcade is a sub-type of instance Facility.

Game (gameNo, gameTitle, genre)

Each instance of Game holds the details of the game played


on an arcade machine.

Inventory (facilityNo, toDeployAt)

There is only an instance of Inventory which record the


facilities that are under-servicing and newly purchased.

InventoryLog (facilityNo, invLogDatetime, invDescription)

Each instance of InventoryLog records the logging details of a


particular facility in the inventory.

Center (centerNo, name)

Each instance of Center holds the details of an amusement


center.

Promotion (promotionNo, promoDescription, rateType, rate, minSpent,


promoType)

Each instance of Promotion holds the details of a promotion.

CenterPromotion (centerNo, promotionNo, startDate, endDate)

Each instance of CenterPromotion records an amusement


center having a particular promotion.

Sales (salesNo, salesType, salesDateTime, amtPayable,


memberNo)

Each instance of Sales records the sales details.

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 23 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

LanBilliardSales (salesNo, startTime, endTime, facilityNo)

Each instance of LanBilliardSales records the sales details of


a particular facility.

ArcadeCard (arcadeCardNo, normalCardPrice, memberCardPrice,


cardValue)

Each instance of ArcadeCard holds the details of an arcade


card type.

ArcadeCardSales (salesNo, arcadeCardNo, centerNo)

Each instance of ArcadeCardSales records the sales details


of a particular arcade card.

Member (memberNo, name, identityNo, gender, dob, address, email,


contact, occupation, memberCardNo, joinedDate, points,
pointsExpiry)

Each instance of Member holds details of an individual


member.

RedeemItem (redeemItemNo, redeemDesc, pointCost)

Each RedeemItem holds the details of a redeemable item.

Redemption (memberNo, redeemItemNo, redeemDateTime)

Each Redemption records the details of a redeemable item


redeemed by a particular member.

Table 2.1 Entity Definition & Description 

2.3. RELATIONSHIP DESCRIPTION 
 

Relationship Description/Justification

stores An Inventory stores Facilities.

An Inventory can be empty, but a Facility must be either in an


Inventory or Center.

willHave A Facility will have InventoryLogs.

A Facility has InventoryLogs, but an InventoryLog must belong to a


Facility.

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 24 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

has A Center has Facilities.

A Center must have at least one Facilities but Facility must be either
in an Inventory or Center.

plays An Arcade plays a game.

An Arcade plays one game, but a game can be played on many


Arcades.

creates A Facility creates LanBilliardSales.

A Facility can creates many LanBilliardSales, but a LanBilliardSales


must be from a Facility.

hosts A Center hosts a CenterPromotion.

A Center can hosts one CenterPromotion at any one time, but a


CenterPromotion must belong to a Center.

appliesTo A promotion is applied to CenterPromotions.

A promotion can be applied to many CenterPromotions, but a


CenterPromotion must have a Promotion

makes A Center makes ArcadeCardSales.

A Center can makes many ArcadeCardSales, but an


ArcadeCardSales must be from a Center.

relatesTo An ArcadeCard is related to each ArcadeCardSales.

An ArcadeCard can be related to many ArcadeCardSales, but an


ArcadeCardSales must have an ArcadeCard.

generates A Member generates Sales.

A Member can generates many Sales, but a Sales need not be from
a Member.

makes A Member makes a Redemption.

A Member can makes many Redemptions, but a Redemption must


be applied from a Member.

belongsTo A RedeemItem belongs to each Redemption.

A RedeemItem can belongs to many Redemption, but a Redemption


must have a RedeemItem.

Table 2.2 Relationship Description 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 25 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

2.4. ATTRIBUTE DESCRIPTION 
 

Facility

Attribute Description Data type Null

facilityNo
Primary key of each facility Int(10) No

Either:
‘lan’ for LAN station,
facilityType Enum(‘lan’,’bill’,’arc’) No
‘bill’ for Billiard table,
‘arc’ for Arcade machine

Either:
facilityStatus ‘0’ for Maintance, Enum(‘0’,’1’) No
‘1’ for Operational

For LAN station and billiard table


will be hourly rate. For arcade
normalPrice Decimal(5,2) No
machine will be the credit price for
one play. E.g. 7.50

memberPrice Same as above, only the price is of


member rate for the facilities. E.g. Decimal(5,2) Yes
7.50

Table 2.3 Attribute Descripton for Facility

Arcade

Attribute Description Data type Null

facilityNo
Primary key of the facility Int(10) No

Table 2.4 Attribute Description for Arcade

Game

Attribute Description Data type Null

GameNo
Primary key of the game Int(10) No

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 26 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

gameTitle Arcade machine’s game title.


Text No
E.g. Time Crisis 4

genre Arcade machine’s game genre.


Text No
E.g. Shooting

Table 2.5 Attribute Description of Game

Inventory

Attribute Description Data type Null

facilityNo
Foreign key of FACILITY Int(10) No

The center number the facility is going


toDeployAt Int(10) Yes
to be deployed at.

Table 2.6 Attribute Description for Inventory

InventoryLog

Attribute Description Data type Null

facilityNo
Foreign key of FACILITY Int(10) No

Datetime of this action from inventory.


invLogDatetime Datetime No
E.g. 2008-10-01 18:20:00

invDescription Description of the action from inventory Text No

Table 2.7 Attribute Description for InventoryLog

Center

Attribute Description Data type Null

centerNo
Primary key of the center Int(10) No

name Name of the center.


Text No
E.g. Funland Sembawang

Table 2.8 Attribute Description for Center

Promotion

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 27 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Attribute Description Data type Null

promotionNo
Primary key of promotion Int(10) No

promoDescription
Promotion details Text No

Either:
rateType ‘amt’ which means amount. Enum(‘amt’,’per’) No
‘per’ which means percentage.

The rate for the discount.


E.g. rate is ‘5’ and rateType is
rate percentage. It will be a 5% Int(3) No
discount. Else it will be an S$5
discount.

Minimum spending of a
minSpent customer in order to enjoy this Int(2) No
promotion

Either:
‘lan’ for LAN station,
promoType Enum(‘lan’,’bill’,’arc’,’all’) No
‘bill’ for Billiard table,
‘arc’ for Arcade machine

Table 2.9 Attribute Description for Promotion

CenterPromotion

Attribute Description Data type Null

centerNo
Composite Primary Key Int(10) No

promotionNo
Composite Primary Key Int(10) No

Composite Primary Key; start date of


startDate Datetime No
this promotion for this center

Composite Primary Key; end date of


endDate Datetime No
this promotion for this center

Table 2.10 Attribute Description for CenterPromotion

Sales
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 28 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Attribute Description Data type Null

salesNo
Primary key of a sales record Int(10) No

Either:
‘lan’ for LAN station,
salesType Enum(‘lan’,’bill’,’arc’) No
‘bill’ for Billiard table,
‘arc’ for Arcade machine

salesDatetime Datetime of this sales record


Datetime No
E.g. 2008-10-01 18:20:56

Computered attribute; amount to


amtPayable be paid by customer Decimal(10,2) No
E.g. 39.70

Table 2.11 Attribute Description for Sales

LanBilliardSales

Attribute Description Data type Null

salesNo
Primary key of the sales record Int(10) No

Start time when customer used the


startTime LAN station or Billiard table Time No
E.g. 18:20:56

End time when customer used the LAN


endTime station or Billiard table Time No
E.g. 18:20:56

Table 2.12 Attribute Description for LanBIlliardSales

ArcardCardSales

Attribute Description Data type Null

salesNo
Primary key of the sales record Int(10) No

Table 2.13 Attribute Description for ArcadeCardSales

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 29 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

ArcadeCard

Attribute Description Data type Null

arcadeCardNo
Primary key for the arcade card Int(10) No

normalCardPrice Cost price of arcade card


Decimal(5,2) No
E.g. 5.00

memberCardPrice Member cost price of arcade card


Decimal(5,2) No
E.g. 4.00

cardValue The credit value in the card


Decimal(5,2) No
E.g. 6.00

Table 2.14 Attribute Description for ArcadeCard

Member

Attribute Description Data type Null

memberNo
Primary key for member Int(10) No

name
Name of member text No

identityNo
NRIC or passport number text No

gender Gender. Either:


‘M’ for Male, Enum(‘M’,’F’) No
‘F’ for Female

dob Date of birth


Date No
E.g. 1980-10-01

address
Address Text No

email
Email address Text No

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 30 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

contact
Contact number Int(10) No

occupation
Occupation Text No

Member card number allocated to the


memberCardNo Int(10) No
member

Date of customer becomes a member


joinedDate Date No
E.g. 2000-10-01

Computered attribute; points member


Points Int(10) No
has for redemption

pointsExpiry Date of expiry for the points


Date No
E.g. 2009-10-01

Table 2.15 Attribute Description for Member

RedeemItem

Attribute Description Data type Null

redeemItemNo
Primary key for redeem item Int(10) No

redeemDesc
Redeem item description Text No

pointsCost Points required to redeem the item


Int(10) No
E.g. 5000

Table 2.16 Attribute Description for RedeemItem

Redemption

Attribute Description Data type Null

memberNo
Composite Primary Key Int(10) No

redeemItemNo
Composite Primary Key Int(10) No

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 31 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Composite Primary Key; Datetime of


redeemDatetime Datetime No
the redemption

Table 2.17 Attribute Description for Redemption 

2.5. CHANGES TO EAR MODEL 
 

All the generalization has been removed as I am not familiar or taught to design the 
database with generalization. I have combined the child entity to the parent entity. This will 
give me new constraints to take care of. For example, game number is mandatory attribute 
for facility that is an Arcade but is not needed for facility that is a LAN station or Billiard 
table. 

This change will be reflected from the relational heading onwards. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 32 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

3. LOGICAL DESIGNING  
 

3.1. RELATIONAL HEADINGS 

Facility (facilityNo, CenterNo, facilityType, facilityStatus, normalPrice, memberPrice,


gameNo)

Changes:
Arcade entity is being merged to Facility entity. This is done to remove generalization
of the entity. The supertype will hold the attributes of the subtype.

Game (gameNo, gameTitle, genre)

Inventory (facilityNo, toDeployAt)

InventoryLog (facilityNo, invLogDatetime, invDescription)

Center (centerNo, name)

Promotion (promotionNo, promoDescription, rateType, rate, minSpent,promoType)

CenterPromotion (centerNo, promotionNo, startDate, endDate)

Sales (salesNo, salesType, salesDateTime, amtPayable, memberNo, startTime,


endTime, facilityNo, arcadeCardNo, centerNo)

Changes:
LanBilliardSales entity and ArcadeCardSales entity are merged to Sales entity.

ArcadeCard (arcadeCardNo, normalCardPrice, memberCardPrice, cardValue)

Member (memberNo, name, identityNo, gender, dob, address, email, contact,


occupation, memberCardNo, joinedDate, points, pointsExpiry)
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 33 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

RedeemItem (redeemItemNo, redeemDesc, pointCost)

Redemption (memberNo, redeemItemNo, redeemDateTime)

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 34 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

4. PHYSICAL DESIGNING 
 

4.1. CREATE TABLE STATEMENTS 
 

In my ER Diagram, there are a total of 15 entities. After combining the generalised child 
entity to its parent, I have 12 entities. Hence, there are a total of 12 CREATE TABLE 
statements in my SQL schema. I have picked the CREATE TABLE statements for Facility which 
has the most complex code. The rest of the CREATE TABLE statements are more or less 
having the same format and structure. For the full SQL schema for this project, please refer 
to Appendix A: SQL Schema. 

1. CREATE TABLE `facility` (


2. `facilityNo` int(10) unsigned NOT NULL auto_increment,
3. `centerNo` int(10) unsigned default NULL,
4. `facilityType` enum('lan','bill','arc') NOT NULL,
5. `facilityStatus` enum('0','1') NOT NULL default '0',
6. `normalPrice` decimal(5,2) NOT NULL default '0.00',
7. `MemberPrice` decimal(5,2) default '0.00',
8. `gameNo` int(10) unsigned default NULL,
9. PRIMARY KEY (`facilityNo`),
10. KEY `Facility_Index1` USING BTREE (`centerNo`),
11. KEY `Facility_Index2` USING BTREE(`gameNo`),
12. CONSTRAINT `FK_facility_1` FOREIGN KEY (`centerNo`)
13. REFERENCES `center` (`centerNo`)
14. ON DELETE NO ACTION
15. ON UPDATE CASCADE,
16. CONSTRAINT `FK_facility_2` FOREIGN KEY (`gameNo`)
17. REFERENCES `game` (`gameNo`)
18. ON DELETE NO ACTION
19. ON UPDATE CASCADE
20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Figure 4.1 CREATE TABLE statement for Facility 

The syntax for CREATE TABLE statements can be easily obtained from MySQL documentation 
in MySQL homepage. 

Line 1 starts the CREATE TABLE statement for creating the table named ‘facility’.  

Line 2 to line 8 defines the column name of the table. Each column name will need to define 
the column definitions. Usually the data type, length of data type if any, if it can be NULL or 
NOT NULL and if it has a DEFAULT value. UNSIGNED is used to define a numeric data type 
that cannot have negative value. AUTO_INCREMENT is used to generate a unique identifier 
for new rows, usually used on a primary key column. ENUM is an enumeration string object 
data type by MySQL which can only have one value from a list of values.   

Line 9 defines the PRIMARY KEY of the table.  

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 35 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Line 10 and line 11 defines the KEY that need to be indexed for faster retrieval of row. 
BTREE, a tree data structure, is the index type used for indexing.  

Line 12 and line 13 defines the foreign key constraint for the table.   

Line 14 and line 15 defines the referential actions for the foreign key. ON DELETE NO 
ACTION defines that no action is to be taken when DELETE statement is executed on the 
referenced row that exist in the child row. ON UPDATE CASCADE defines that when UPDATE 
statement is executed on the referenced row, the respective child rows matching the foreign 
key will be updated as well.  

Line 20 defines the DBMS engine for the table. InnoDB is used as it is the engine that obeys 
the referential integrity protocol. DEFAULT CHARSET defines the default character set for the 
table which uses the UTF8 unicode character set. 

4.2. TRIGGER STATEMENTS 
 

The table below defines the triggers used for the system with a brief description of the 
trigger usage and its scope. 

Trigger Name  Description/Scope of trigger 

before_facility_insert  The trigger to be executed before a record is inserted into 
facility table. 

1. To erase any center number when creating facility. 
2. To erase any game number when facility is not an Arcade. 
3. To check if game number is provide when facility is an 
Arcade.  
 
after_facility_insert  The trigger to be executed after a record is inserted into 
facility table. 

1. To set the new facility in the inventory (IS: Point 1) 
2. Do the logging of this event. (IS: Point 1) 
 
before_facility_update  The trigger to be executed before a record is updated in the 
facility table. 

1. If facility needs maintenance, move the facility to 
inventory and log this event.  (IS: Point 3) 
2. If facility is operational, move the facility back to the 
center and log this event. (IS: Point 4) 
3. If facility needs to redeploy to another center, send it back 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 36 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

to the inventory first. (IS: Point 2) 
 
after_sales_insert  The trigger to be executed before a record is inserted in the 
sales table. 

1. Add the points from the sales to the member. (ME: Point 
1) 
 
Table 4.1 Triggers description and scope 

I have picked the trigger before_facility_update which has the most complex code 
to explain. The other triggers more or less have the same format and structure.  

1. DELIMITER //
2. CREATE TRIGGER `before_facility_update` BEFORE UPDATE ON facility
3. FOR EACH ROW
4. BEGIN
5. SET @facilityStatus = NEW.facilityStatus;
6. SET @facilityStatusOld = OLD.facilityStatus;
7. SET @facilityNo = NEW.facilityNo;
8. SET @centerNo = NEW.centerNo;
9. SET @centerNoOld = OLD.centerNo;
10.
11. IF @facilityStatus = 0 THEN
12. INSERT INTO inventory (facilityNo, toDeployAt)
13. VALUES (@facilityNo, @centerNo);
14. CALL LogInventory(@FacilityNo,@centerNo,2);
15. SET NEW.centerNo = NULL;
16. END IF;
17.
18. IF @facilityStatus = 1 AND @facilityStatus != @facilityStatusOld
THEN
19. SET NEW.centerNo = (SELECT toDeployAt FROM inventory WHERE
facilityNo = @facilityNo);
20.
21. DELETE FROM inventory WHERE facilityNo = @facilityNo;
22. CALL LogInventory(@facilityNo,NEW.centerNo,3);
23. END IF;
24.
25. IF @centerNoOld <> @centerNo AND @facilityStatus = '1' THEN
26. INSERT INTO inventory (facilityNo, toDeployAt)
27. VALUES (@facilityNo, @centerNo);
28. CALL LogInventory(@facilityNo,@centerNo,4);
29. SET NEW.centerNo = NULL;
30. SET NEW.facilityStatus = '0';
31. END IF;
32.
33. END
34. //
35. DELIMITER;
Figure 4.2 Trigger statement for before_facility_update 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 37 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Line 2 starts the create statement for the trigger.  BEFORE UPDATE ON defines that the 
trigger is to be executed before update is done to the facility table. 

Line 3 defines that the scope of the trigger is executed for each row inserted. 

Line 4 defines the start of the trigger. 

Line 5 to line 9 defines the user defined variables used in the trigger. 

Line 10 to line 16 defines the scope of Point 1 mentioned above:  If facility needs 
maintenance, move the facility to inventory and log this event. 

Line 18 to line 23 defines the scope of Point 2 mentioned above:  If facility is operational, 
move the facility back to the center and log this event. 

Line 25 to line 31 defines the scope of Point 3 mentioned above: If facility needs to redeploy 
to another center, send it back to the inventory first. 

Line 33 defines the end of the trigger. 

4.3. STORED PROCEDURE STATEMENTS 
 

The table below defines the stored procedure used for the system with a brief description of 
the stored procedure usage and its scope. 

Stored procedure Name  Description/Scope of stored  System Objectives 


procedure 

AddFacility  Add a Facility   IS: Point1 

InvToInventory  Move Facility to Inventory  IS: Point 3 

InvToCenter  Move Facility to Center  IS: Point 4 

InvChangeCenter  Change the Center of Facility  IS: Point 2 

LogInventory  Logging of event in the inventory  IS: Point 1 to 4 

AddSales  Add a Sales record for LAN station and  SA: Point 3 to 4 


billiard facility type.  
AddSalesArcadeCard  Add a Sales record for an arcade card  SA: Point 3 to 4 
sales 
AddPromotionToCenter  Add Promotion to a Center  SA: Point 1 to 2 

AddPoints  Add points to the Member  ME: Point 1 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 38 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

RedeemItem  Redemption of item by Member   ME: Point 2 

MemberPointChecking  Check for Member point expiry date  ME: Point 3 

Table 4.2 Stored procedure description and scope 

I have picked the stored procedure AddSales to explain, which has the most complex 
code.  

1. DELIMITER //
2. CREATE PROCEDURE `AddSales`
3. (
4. facNo INTEGER,
5. startTime TIME,
6. endTime TIME,
7. memNo INTEGER
8. )
9. proc:BEGIN
10. SET @price = 0.0;
11. SET @facilityNo = facNo;
12. #Check IF member number is valid. IF not valid, leave procedure.
Only NULL or valid member number is accepted.
13. IF memNo IS NOT NULL THEN
14. IF isMember(memNo) IS NOT NULL THEN
15. SET @memberNo = memNo;
16. SET @Price = getMemberPrice(@facilityNo);
17. ELSE
18. SELECT 'Procedure call ends. Member does not exist. ' AS
Error;
19. LEAVE proc;
20. END IF;
21. ELSE
22. SET @memberNo = NULL;
23. SET @price = getNormalPrice(@facilityNo);
24. END IF;
25.
26. SET @centerNo = getFacilityCenter(@facilityNo);
27. IF @centerNo IS NOT NULL THEN
28. SET @facilityType = getFacilityType(@facilityNo);
29. IF @facilityType != 'arc' THEN
30. SET @amtpayable =
calculatePayable(startTime,endTime,@price,@centerNo,@facilityType,
@memberNo);
31. INSERT INTO sales VALUES
(NULL,@facilityType,NOW(),@amtpayable,@memberNo,startTime,endTime,
@facilityNo,NULL,@centerNo);
32. ELSE
33. SELECT 'Facility type is Arcade. Not Applicable for this
procedure call.' AS Error;
34. END IF;
35. ELSE
36. SELECT 'Facility is in Inventory or invalid.' AS Error;
37. END IF;
38. END proc;
39. //

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 39 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

40. DELIMITER ; 
Figure 4.3 Stored procedure statement for Addsales 

Line 2 starts the create statement for the stored procedure. 

Line 3 to line 8 defines the parameters needed for the stored procedure. 

Line 9 defines the start of the stored procedure with proc as the label for the block code. 

Line 10 and Line 11 initializes some user defined variables. 

Line 13 to Line 24 will set the price for a member or non member and the member number 
if any. The codes check if the member number is valid. If member number is not valid, 
LEAVE proc statement will exit the block code. Only NULL value or valid member number 
is accepted.  

Line 26 is used to get the center number of the facility. 

Line 27 check if the facility is in a center, then goes to line 28. If not in a center, goes to line 
36. 

Line 28 gets the facility type of the facility. 

Line 29 to line34 checks if the facility type is not an Arcade, then calculate the payable using 
function calculatePayable and add the sales record. If it is an Arcade, then shows an 
error that this transaction is not applicable for arcade facility. 

Line 36 check if facility is not in a center, shows an error that this facility is in inventory. 

Line 38 defines the end of this stored procedure. 

4.4. FUNCTION STATEMENTS 
 

Functions more or less works the same like stored procedure but function is used to return 
one specific value when called. Most of the functions I have are small function call which 
returns a value. I have picked the most complex function to explain. 

1. DELIMITER //
2. CREATE FUNCTION `calculatePayable` (startTime TIME, endTime TIME,
price DECIMAL(10,2), cenNo INTEGER, facType TEXT, memNo INTEGER)
3. RETURNS DECIMAL(10,2)
4. code: BEGIN
5. SET @centerNo = cenNo;
6. SET @memberNo = memNo;
7. SET @facilityType = facType;
8. SET @promoType = getPromotionType(@centerNo);

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 40 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

9. SET @minspent = getPromotionMinimumSpent(@centerNo);


10. SET @amtPayable = TIME_TO_SEC(TIMEDIFF(endTime,startTime))/3600 *
price;

11. IF @memberNo IS NULL AND @promoType != 'arc' AND @promoType =


@facilityType AND @amtPayable >= @minspent THEN

12. SET @rateType = getPromotionRateType(@centerNo);


13. SET @rate = getPromotionRate(@centerNo);
14. IF @rateType = 'per' THEN
15. SET @amtPayable = @amtPayable - (@amtPayable*@rate/100);
16. ELSE
17. SET @amtPayable = @amtPayable - @rate;
18. END IF;
19. END IF;
20. SET @result = CAST(@amtPayable AS DECIMAL(10,2));
21. RETURN @result;
22. END code;
23. //
24. DELIMITER;
Figure 4.4 Function statement for calculatePayable 

Line 2 starts the create statement for the function with the parameters needed for the 
function. 

Line 3 defines the return data type for this function 

Line 4 defines the start of the function with code as the label for the block of codes. 

Line 5 to 7 defines some user defined values required in the function 

Line 8 calls a function to obtain the promotion type. 

Line 9 calls a function to obtain the minimum expenditure to qualify for the promotion. 

Line 10 calculates the normal payable or member payable for the facility usage. 

 Line 11 does a few checks to validate if the payable quality for the promotion discount. The 
criteria includes that the payable is not from a member,  the promotion type is not for an 
Arcade, the promotion type matches the facility type and the minimum payable is at least 
met. 

Line 12 and line 13 gets the promotion rate type and rate respectively. 

Line 14 to line 18 calculates the discount to be given. 

Line 20 sets the value to be returned 

Line 21 returns the value to the caller. 

Line 22 defines the end of the function. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 41 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

4.5. VIEW STATEMENTS 
 

Views are used to simplify complex queries. What’s more is that normal SELECT statement 
can be executed on the complex query if it is in a View. This make it very handy for coding 
functions which I shared by experience in the Critical Review and Reflections section of 
Chapter 6 Conclusion.  I have created 2 Views. 

CREATE VIEW `facilitycenterpromoview` AS


SELECT
facilityNo AS facilityNo,
centerNo AS centerNo,
promotionNo AS promotionNo,
facilityType AS facilityType,
normalPrice AS normalPrice,
memberPrice AS memberPrice,
gameTitle AS arcadeGameTitle,
genre AS arcadeGenre,
name AS centerName,
startDate AS promoStartDate,
endDate AS promoEndDate,
description AS promoDesc,
rateType AS promoRateType,
rate AS promoRate,
minspent AS promoMinSpent,
promoType as promoType
FROM facility LEFT JOIN center USING (centerNo) LEFT JOIN
centerpromotion USING (centerNo) LEFT JOIN promotion USING
(promotionNo) LEFT JOIN game USING (gameNo) WHERE endDate >=
CURDATE() OR endDate IS NULL;
//
Figure 4.5 View create statement for facilitycenterpromoview 

This View shows the centers which has or does not has a promotion and the details on the 
current promotion. Only the current promotion for each center is retrieved. From this view, I 
can easily know which facility is in which center or in inventory and what promotion the 
center is having for the facility in that center.  

I have created functions based on this View. With the facility number, facilityNo, I can 
straight away obtain the promotion details if any without the need to know which center the 
facility is in or the promotion number. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 42 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

5. DATABASE TESTING 
 

5.1. ENTITY TESTING 
 

For my tables, I have used auto increment for my primary keys. Hence at inserting, I either 
omit the primary key column (Figure 5.1) or set value to NULL if I did put it in (Figure 5.2). 
Both ways are successful when inserting.  

 
Figure 5.1 Successful insert into table Facility by omitting the primary key. 

Figure 5.2 Successful insert into table Facility using NULL for primary key. 

When creating the tables, codes are used to define those columns that are primary key. This 
allows the DBMS to perform entity integrity checking. The DBMS will capture the error as 
shown in Figure 5.3 if there is a duplicate of primary key in the table when inserting data. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 43 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

 
Figure 5.3 Unsuccessful inserting of data into table Facility. 
 

5.2. REFERENTIAL INTEGRITY TESTING 
 

Likewise, the DBMS will handle the referential integrity checking. To demonstrate, I have 
attempted to insert an invalid gameNo foreign key. The result of inserting is unsuccessful as 
shown in Figure 5.4. This is possible when the foreign key constraint is defined during 
creating of tables. 

 
Figure 5.4 Unsuccessful insert into table Facility using invalid foreign key. 
 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 44 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

5.3. DATA DOMAIN TESTING 
 

Data domain constraint checking can be done by the DBMS when the data type is defined in 
the schema when creating the tables. For demonstration, I have attempted to insert a text 
value on a decimal data domain. The outcome shown in Figure 5.5 demonstrates that the 
inserting is unsuccessful. 

 
Figure 5.5 Unsuccessful insert into table Facility using wrong data type. 
 

5.4. CARDINALITY TESTING 
 

In my ER diagram, it is optional for a Facility to be an Arcade. If a Facility is an Arcade, it must 
have a Game. I have combined the Facility entity and Arcade entity into one table. Meaning 
when inserting a Facility as an Arcade, it must provide the value for gameNo.  Refer to the 
schema for table Facility, value gameNo is an optional value as it can be NULL. Normal insert 
query is not able to perform cardinality testing. Hence, I have used trigger, 
before_facility_insert, to capture this constraint and manipulate it into a 
referential integrity error to prevent the inserting.  As MySQL does not support INSTEAD OF 
functionality like MSSQL for trigger, I have used the following code manipulation in my 
trigger for capturing this constraint which give an error shown in figure 5.6 when inserting.  

CREATE TRIGGER `before_facility_insert` BEFORE INSERT ON


facility
FOR EACH ROW
BEGIN
……

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 45 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 
IF NEW.facilityType = 'arc' AND NEW.gameNo IS NULL THEN
SET NEW.gameNo = 'gameNo_not_defined';
END IF;
……

 
Figure 5.6 Unsuccessful insert with referential integrity error for cardinality checking. 
 

On the other hand, Figure 5.2 demonstrates a successful insert query when insert a non 
Arcade facility (LAN Station) with gameNo value as NULL. 
 

5.5. SYSTEM OBJECTIVE CHECKLIST 
 

This checklist is an overview of which triggers and stored procedures are used to fulfill the 
system objective. There are a couple of common functions which are not listed as those 
functions are called within the trigger or stored procedures. Please refer to the Appendix A: 
SQL Schema for more information on the functions.  

Inventory System 

System Objective  Trigger/Stored procedure Used 

1. The system will be able to add new  Store: AddFacility 
facility records into the inventory. The  Trigger: before_facility_insert 
system will log this event.  Trigger: after_facility_insert 
Store: LogInventory 
 
2. The system will be able to change where  Store: InvChangeCenter 
the facility is to be deployed. If facility is  Trigger: before_facility_update 
currently in a center, changing the  Store: LogInventory 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 46 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

center will move the facility to the 
inventory to be redeployed. The system 
will log this event.  

3. The system will be able to move facility  Store: InvToInventory 
records from centers that require  Trigger: before_facility_update 
maintenance servicing back to the  Store: LogInventory 
inventory. The system will log this event.   

4. The system will be able to move facility  Store: InvToCenter 
record back to the center it should be  Trigger: before_facility_update 
deployed to when the maintenance  Store: LogInventory 
servicing is done. The system will log this   
event. 

Table 5.1 Codes that fulfill Inventory system objectives 

Sales 

System Objective  Trigger/ Stored procedure Used 

1. The system will be able to register one  Store: AddPromotionToCenter 
particular promotion to a center. 

2. The system will be able to ensure that a  Store: AddPromotionToCenter 
center can only have one promotion at 
any one time. 

3. The system will be able to generate sales  Store: AddSales  
record on   OR 
Store: AddSalesArcadeCard 
a. A normal basis when there is no   
promotion and the customer is 
not a member. 

b. A membership basis if the 
customer is a member. 

c. A promotion basis if the center is 
having a promotion. 

4. The system will be able to ensure that  Store: AddSales 
the promotion privilege will not be  OR 
applicable if the sale is from a member.  Store: AddSalesArcadeCard 

Table 5.2 Codes that fulfill Sales system objective 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 47 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Member 

System Objective  Trigger/ Stored procedure Used 

1. The system will be able to accumulate  Trigger: after_sales_insert 
the member points for any sales  Store: AddPoints 
generated by member where for every 
S$1 spent, 10 points will be 
accumulated. 

2. The system will be able to ensure that  Store: RedeemItem 
the member has sufficient member  Store: AddPoints 
points for deduction before registering 
any redemption made by the member.  

3. The system will be able to reset the  Store: MemberPointChecking 
member points back to zero when the 
member point expiry date has past. A 
new member point expiry date will be 
given by the system. 

Table 5.3 Codes that fulfill member system objectives 

5.6. SYSTEM OBJECTIVE TESTING 
 

With the checklist in the previous section, I have conducted testing for each of the objectives 
to demonstrate that the objectives are met. I have combined some of the objectives as they 
are linked or is of similar functionality. 

Inventory System, SI: Point 1 

The system will be able to add new facility records into the inventory. The system will log 
this event. 

Statement for execution: 

A. CALL AddFacility(‘lan’, 3, 2.5, NULL); 

Result: 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 48 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

As shown in the screen captures below, the facility is successfully inserted and is in the 
inventory. Logging of this event is also successfully.  This demonstrates that the system 
fulfills Point 1. 

Figure 5.7a ‐ Successful executing of statement. 

Figure 5.7b ‐ Facility1 is inserted. 

Figure 5.7c ‐ Facility1 is in the inventory. 

Figure 5.7d ‐ This event is logged. 

Inventory System, SI: Point 2 

The system will be able to change where the facility is to be deployed. If facility is currently 
in a center, changing the center will move the facility to the inventory to be redeployed. The 
system will log this event. 

Statement for execution: 

A. CALL InvChangeCenter (1,1); 
B. CALL InvChangeCenter (2,2); 
 
Result: 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 49 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Currently, there are 2 facilities. Facility1 is in inventory and Facility2 is in Center 1. Facility1 
does not have any Center appointed to it. 

 
Figure 5.8a ‐ Facility1 has not allocated a center and Facility2 is in a center. 

 
Figure 5.8b ‐ Facility1 is in inventory with no center allocated yet. 

Executing the statements demonstrated that the objective is met. Facility1 now is in 
inventory and to be deployed to Center1. Facility2 is moved back to inventory and to be 
deployed to Center 2 which is shown in the inventory log as well. This demonstrates that the 
system fulfills Point 2. 

 
Figure 5.8c ‐ Facility2 is sent back to inventory upon changing center. 

 
Figure 5.8d ‐ Facility2 is in the inventory. Both facilities are allocated a center each. 

 
Figure 5.8e ‐ This event is logged. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 50 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Inventory System, SI: Point 3 & Point 4 

3) The system will be able to move facility records from centers that require maintenance 
servicing back to the inventory. The system will log this event. 

4) The system will be able to move facility record back to the center it should be deployed to 
when the maintenance servicing is done. The system will log this event. 

Statement for execution: 

A. CALL InvToCenter(1); 
 
Result: 

I have used Point 4 to do the testing as both serve similar functionality. Currently both 
facilities are in the inventory.  Executing the statement shows that Facility1 is sent to 
Center1 and this event is logged. This demonstrates that the system fulfills Point 4 as well as 
Point 3. 

 
Figure 5.9a ‐ Facility1 is in Center1 after executing the statement. 

 
Figure 5.9b ‐ Facility1 is not in the inventory after executing the statement. 

 
Figure 5.9c ‐ This event is logged. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 51 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Sales System, SA: Point 1 & Point 2 

1) The system will be able to register one particular promotion to a center. 

2) The system will be able to ensure that a center can only have one promotion at any one 
time. 

Statement for execution: 

A. CALL AddPromotionToCenter(1, 7, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 
WEEK)); 

Result: 

Executing the statement adds Promotion7 to Center1 for 1 week starting from the current 
date as shown below. From the View centerpromoview, it shows that Center1 is currently 
having Promotion7. This demonstrates that the system fulfills Point 1. 

 
Figure 5.10a ‐ Center1 is having a promotion. 

Executing the statement, adding other promotion to the current center causes an error 
message stating that Center1 is currently having a promotion as shown below.  The 
attempted adding of the promotion is ignored. This demonstrates that the system fulfills 
Point 2. 

 
Figure 5.10b ‐ Center1 cannot have another promotion. 

Sales System, SA: Point 3 & Point 4 

3) The system will be able to generate sales record on  

a) A normal basis when there is no promotion and the customer is not a member. 

b) A promotion basis if the center is having a promotion. 

c) A membership basis if the customer is a member. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 52 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

4) The system will be able to ensure that the promotion privilege will not be applicable if the 
sale is from a member. 

Statement for execution: 

A. CALL AddSales(3, '11:00:00', '15:00:00', NULL); 
B. CALL AddSales(1, '11:00:00', '15:00:00', NULL); 
C. CALL AddSales(1, '11:00:00', '18:00:00', NULL); 
D. CALL AddSales(1, '11:00:00', '15:00:00', 1); 
E. CALL AddSales(1, '11:00:00', '18:00:00', 1); 
 
Result: 

Currently, Center1 is having Promotion7 which states that any LAN station usage of $15 and 
more will have a 10% deduction. Executing Statement (A) generates sales record for 
Facility3, a Billiard Table. 4 hours of billiard at $7 per hours cost $28 and the center is having 
promotion for LAN station. This demonstrate the system fulfill the objective of Point 3(a). 

 
Figure 5.11a ‐ Sales record generated from executing Statement (A). 

Executing Statement (B) generates sales record for Facility1, a LAN station. 4 hours of LAN at 
$3 per hours cost $12 but it is not given a 10% discount as the sales did not have a minimum 
expenditure of $15. Executing Statement (C) shows a 10% discount otherwise for a 7hours 
LAN. This demonstrate the system fulfill the objective of Point 3(b). 

 
Figure 5.11b ‐ New sales record generated from executing Statement (B) & (C). 

Executing Statement (D) generates sales record for Facility1, a LAN station. 4 hours of LAN at 
$2.50 per hours cost $10 for member.  This demonstrate the system fulfill the objective of 
Point 3(c). 

Executing Statement (E) generates sales record for Facility1, a LAN station. 7 hours of LAN at 
$2.50 per hours cost $17.50 for member.  Even though the center is having promotion for 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 53 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

LAN, the promotion privilege is not applicable for a sales record from a member. This 
demonstrate the system fulfill the objective of Point 4. 

 
Figure 5.11c ‐ New sales record generated from executing Statement (D) & (E). 

Member System, ME: Point 1 

The system will be able to accumulate the member points for any sales generated by 
member where for every S$0.10 spent, 1 point will be accumulated. 

Statement for execution: 

A. CALL AddSales(3, '11:00:00', '15:00:00', 1); 
 
Result: 

As shown in the screen capture below, Member1 currently has 2275 points. 

  
Figure 5.12a ‐ Member1 currently has 2275 points. 

Executing Statement (A) will generate a sales record of $24.80 for Member1. Hence, a total 
of 248 points is added to Member1’s points. Before, Member1 has total points of 2275 
adding 248 from the Billiard usage to give 2523. This demonstrate the system fulfill the 
objective of Point 1. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 54 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

 
Figure 5.12b ‐ Generate a sales record of $24.80 for Member1. 

 
Figure 5.12c ‐ Member1 now has 2523 points after paying for the Billiard usage. 

Member System, ME: Point 2 

The system will be able to ensure that the member has sufficient member points for 
deduction before registering any redemption made by the member. 

Statement for execution: 

A. CALL RedeemItem(1,14); 
B. CALL RedeemItem(1,15); 
 
Result: 

As shown in the screen capture below, Item14 cost 1000 points and Item15 cost 5000 
points.  

 
Figure 5.13a ‐ Points cost for Item14 and Item15 

In Figure 5.12c shows that Member1 currently has 2523 points. After executing Statement 
(A), 1000 points is deducted from Member1 and the redemption is registered. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 55 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

 
Figure 5.13b ‐ Member1 now has 1523 after redeeming Item14. 

 
Figure 5.13c ‐ The redemption is recorded. 

Next, executing Statement (B) shows that Member1 does not have enough points to redeem 
Item15 and the redemption is ignored. This demonstrate the system fulfill the objective of 
Point 2. 

 
Figure 5.13d ‐ Member1 does not have enough points to redeem Item15.  

Member System, ME: Point 3 

The system will be able to reset the member points back to zero when the member point 
expiry date has past. A new member point expiry date will be extended by 1 year.  

Statement for execution: 

A. CALL MemberPointChecking(); 
 
Result: 

Member3’s points expiry date is expired. After executing Statement (A), Member3 points is 
reset to 0 and the points expiry date is extended by 1 year. This demonstrate the system 
fulfill the objective of Point 3. 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 56 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

 
Figure 5.14a ‐ Member3 points and expiry date before executing Statement (A).  

 
Figure 5.14b ‐ Member3 points and expiry date after executing Statement (A).  

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 57 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

6. CONCLUSION 
 

6.1. CRITICAL REVIEW & REFLECTIONS 
 

Creating Functions based on Views 

While I was creating the functions for my system, I realized that if I need to make any 
changes to the table structure, I will need to tediously modify all the functions which are 
based on that table e.g. table name. Moreover, in some logic, I need to call 2 functions in 
order to get the data. For example, a center can have promotion. Hence, to get the 
promotion data of that center, I will to use the center number to calls a function to obtain 
the promotion number, with it calls another function to obtain data relating to that 
promotion.  

I was thinking aloud, hey this is rather not efficient. How can I make the coding friendlier in 
the long run? That is when Views come into my mind.  

I have recoded my functions to query from the Views. When there are any changes to the 
individual table structure used to create that View, I just need to modify the View instead of 
all the functions rely on that table. Modifying one time than many, it really makes code 
modification easier. By making complex query into View, I can do simply SELECT query on 
the View to obtain the data I want. From the example mentioned earlier, I have created 
View centerpromoview which left join center and promotion data.  Hence with the 
center number, I can call one function to obtain promotion data if the center has one. Refer 
to the View centerpromoview in Appendix A: SQL Schema.  

Project Management Vs. Time Management 

Even though I have taken up Project Management course in UniSIM, I still need tremendous 
practice and hands on to be good in it. Single project management is still manageable for 
me. However, I am in a situation where I need to manage multiple projects other than my 
academic project. At time when time is a constraint, I need to prioritize and jeopardize the 
time allocated for my academic project. I still need to improve on my planning and time 
management to better control my situation. How I can improve on this is to learn and 
practice risk management. 

Conducting Interviews 

Before going for the interview with the business manager of Valibel Technologies Pte Ltd for 
requirement gathering, I have planned some interview questions to be asked. I thought I am 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 58 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

well prepared with the list of questions and I can ask systematically. However, I was wrong. 
Even though I had the questions orderly listed to be asked, the tendency of hopping 
between questions is still high. This is due to interviewee sometime talks about information 
related to another question instead of the one being asked. Then I got out of hand with the 
questions I want to ask. I should have made the questions into a checklist which is better to 
manage. How I can improve is the make a template for interview questions, and improves on 
it as I conduct more requirement gathering. With the template, it can be more efficiency in 
future interviews. 

Using MySQL as the DBMS 

I have chosen MySQL over other DBMS is because I am some prior knowledge in MySQL then 
other DBMS. Learning to create triggers and stored procedure in MySQL will be an asset to 
me. However, doing this project in MySQL gave me an insight of the limitation of this DBMS. 
For the DBMS to have referential integrity, I have to use InnoDB storage engine. Some 
limitation is that MySQL does not support CHECK constraints on domain data and the trigger 
does not support INSTEAD OF functionality like MSSQL. As MySQL is an open source 
database and is very widely used, users will want improvements and all this common 
functionality among the different databases might be in the MySQL development pipeline. 
Nevertheless, it is better to measure the scope and objectives of the system and to evaluate 
before deciding on which DBMS to use for the project. 

Database coding and syntax 

Though I love programming, but I have never really gone in depth for database 
programming. For my practice, I usually would program a web application to interact with 
the database, and the database is just mainly for querying (SELECT, UPDATE and DELETE). 
Most of the checking will be done by the web server before interacting with the database to 
execute the query. From this project, I have learnt much on database programming using 
trigger and stored procedure which will be an asset to me when I take on future web 
application projects.   

Writing a good report 

English language is one of my worst subjects. Hence when doing this report, I do not have 
the confidence to produce a good report. Even though, I have read up on materials on how 
to write a good report, language flow and structure still play a major part in the reporting. 
What is the point of doing the report if the reader gets the wrong meaning? This is one area 
I am weak in and need great practices to improve. 

 
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 59 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

6.2. RECOMMENDATIONS 
 

Before the birth of this project idea, I am thinking of a general database system which can 
accommodate any general chain stores. The system will be able to give trend analysis. 
However, this project is focus on database design, creating triggers and stored procedures. 
Showing trend analysis becomes rather inapplicable for this project as trend analysis 
requires complex join of normal querying. Trend analysis module with GUI can be an add‐on 
project to this database system. 

Other areas which this project can look into include the security issue of using MySQL and 
deployment of the database system in a distributed environment. 

6.3. CONCLUSION 
 

The database system I have done for this project has met its system objectives. All this is 
possible with triggers and stored procedures call to check on the constraints of the system 
objectives. It is a challenge to me as this project is purely on database scripting which I am 
not good in it and the ICT315 course which I took is a very general introduction into 
database which did not really go in depth on triggers and stored procedures. Although I am 
familiar with web server scripting like PHP, I cannot use it for this project. Nevertheless, it is 
a good experience to explore into database scripting. 

In my report, section 1.6 Methodology Adopted, I shared how I did my project. In my general 
view, what was planned before effects what I was doing later. If there does not have a 
development lifecycle to serve me as a guideline, I would have been in a mess, not knowing 
where to carry on. A good planning definitely leads to better and efficient work. 

From this project, I have developed a learning process for myself. For area where I am new 
or need improvement on, I will need to conduct research on the related area, understand 
the information I am researching on, practices with hands on, evaluate what I have hands on 
and done, then research on area I am weak in or unsure of. So this learning process iterates 
at every stage in the development lifecycle, and I should improve on the process with other 
small sub processes that I have learnt. In this way or another way, putting what I have learnt 
into practice is the best way to strengthen my areas.   

(About 7500 words for content without include the header, caption, figures and tables.) 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 60 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

7. APPENDICES 
 

7.1. APPENDIX A: SQL SCHEMA 
 

CREATE TABLE SCHEMA  

Table: game 
DROP TABLE IF EXISTS `game`;
CREATE TABLE `game` (
`gameNo` int(10) unsigned NOT NULL auto_increment,
`gameTitle` text NOT NULL,
`genre` text NOT NULL,
PRIMARY KEY (`gameNo`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: center 
DROP TABLE IF EXISTS `center`;
CREATE TABLE `center` (
`centerNo` int(10) unsigned NOT NULL auto_increment,
`name` text NOT NULL,
PRIMARY KEY (`centerNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: promotion 
DROP TABLE IF EXISTS `promotion`;
CREATE TABLE `promotion` (
`promotionNo` int(10) unsigned NOT NULL auto_increment,
`description` text NOT NULL,
`ratetype` enum('amt','per') NOT NULL,
`rate` int(3) unsigned NOT NULL,
`minspent` int(2) NOT NULL default '0',
`promoType` enum('lan','bill','arc','all') NOT NULL,
PRIMARY KEY (`promotionNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: member 
DROP TABLE IF EXISTS `member`;
CREATE TABLE `member` (
`memberNo` int(10) unsigned NOT NULL auto_increment,
`name` text NOT NULL,
`identityNo` text NOT NULL,
`gender` enum('M','F') NOT NULL,
`dob` date NOT NULL,
`address` text NOT NULL,
`email` text NOT NULL,
`contact` int(10) unsigned NOT NULL,
`occupation` text NOT NULL,
`memberCardNo` int(10) unsigned NOT NULL,
`joinedDate` date NOT NULL,
`points` int(10) unsigned NOT NULL,
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 61 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

`pointsExpiry` date NOT NULL,


PRIMARY KEY (`memberNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: arcadecard 
DROP TABLE IF EXISTS `arcadecard`;
CREATE TABLE `arcadecard` (
`arcadeCardNo` int(10) unsigned NOT NULL auto_increment,
`normalCardPrice` decimal(5,2) NOT NULL,
`memberCardPrice` decimal(5,2) NOT NULL,
`cardValue` decimal(5,2) NOT NULL,
PRIMARY KEY (`arcadeCardNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: redeemitem 
DROP TABLE IF EXISTS `redeemitem`;
CREATE TABLE `redeemitem` (
`redeemItemNo` int(10) unsigned NOT NULL auto_increment,
`redeemDesc` text NOT NULL,
`pointsCost` int(10) unsigned NOT NULL,
PRIMARY KEY (`redeemItemNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: facility 
DROP TABLE IF EXISTS `facility`;
CREATE TABLE `facility` (
`facilityNo` int(10) unsigned NOT NULL auto_increment,
`centerNo` int(10) unsigned default NULL,
`facilityType` enum('lan','bill','arc') NOT NULL,
`facilityStatus` enum('0','1') NOT NULL default '0',
`normalPrice` decimal(5,2) NOT NULL default '0.00',
`MemberPrice` decimal(5,2) default '0.00',
`gameNo` int(10) unsigned default NULL,
PRIMARY KEY (`facilityNo`),
KEY `Facility_Index1` USING BTREE (`centerNo`),
KEY `Facility_Index2` USING BTREE(`gameNo`),
CONSTRAINT `FK_facility_1` FOREIGN KEY (`centerNo`)
REFERENCES `center` (`centerNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT `FK_facility_2` FOREIGN KEY (`gameNo`)
REFERENCES `game` (`gameNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: inventory 
DROP TABLE IF EXISTS `inventory`;
CREATE TABLE `inventory` (
`facilityNo` int(10) unsigned NOT NULL,
`toDeployAt` int(10) unsigned default NULL,
PRIMARY KEY (`facilityNo`),
KEY `Inventory_Index1` USING BTREE (`facilityNo`),
CONSTRAINT `FK_inventory_1` FOREIGN KEY (`facilityNo`)
REFERENCES `facility` (`facilityNo`)
ON DELETE CASCADE
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 62 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: inventorylog 
DROP TABLE IF EXISTS `inventorylog`;
CREATE TABLE `inventorylog` (
`facilityNo` int(10) unsigned NOT NULL,
`invLogDatetime` datetime NOT NULL,
`invDescription` text NOT NULL,
PRIMARY KEY (`facilityNo`,`invLogDatetime`),
KEY `InventoryLog_Index1` USING BTREE (`facilityNo`),
CONSTRAINT `FK_inventorylog_1` FOREIGN KEY (`facilityNo`)
REFERENCES `facility` (`facilityNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: centerpromotion 
DROP TABLE IF EXISTS `centerpromotion`;
CREATE TABLE `centerpromotion` (
`centerNo` int(10) unsigned NOT NULL,
`promotionNo` int(10) unsigned NOT NULL,
`startDate` datetime NOT NULL,
`endDate` datetime NOT NULL,
PRIMARY KEY (`centerNo`,`promotionNo`,`startDate`,`endDate`),
KEY `CenterPromotion_Index1` USING BTREE (`centerNo`),
KEY `CenterPromotion_Index2` USING BTREE (`promotionNo`),
CONSTRAINT `FK_centerpromotion_1` FOREIGN KEY (`centerNo`)
REFERENCES `center` (`centerNo`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `FK_centerpromotion_2` FOREIGN KEY (`promotionNo`)
REFERENCES `promotion` (`promotionNo`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: sales 
DROP TABLE IF EXISTS `sales`;
CREATE TABLE `sales` (
`salesNo` int(10) unsigned NOT NULL auto_increment,
`salesType` enum('lan','bill','arc') NOT NULL,
`salesDatetime` datetime NOT NULL,
`amtPayable` decimal(10,2) NOT NULL,
`memberNo` int(10) unsigned default NULL,
`startTime` time NULL,
`endTime` time NULL,
`facilityNo` int(10) unsigned default NULL,
`arcadeCardNo` int(10) unsigned NULL,
`centerNo` int(10) unsigned default NULL,
PRIMARY KEY (`salesNo`),
KEY `Sales_Index1` USING BTREE (`memberNo`),
KEY `Sales_Index2` USING BTREE (`facilityNo`),
KEY `Sales_Index3` USING BTREE (`arcadeCardNo`),
KEY `Sales_Index4` USING BTREE (`centerNo`),
CONSTRAINT `FK_sales_1` FOREIGN KEY (`memberNo`)
REFERENCES `member` (`memberNo`)
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 63 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

ON DELETE SET NULL


ON UPDATE CASCADE,
CONSTRAINT `FK_sales_2` FOREIGN KEY (`facilityNo`)
REFERENCES `facility` (`facilityNo`)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT `FK_sales_3` FOREIGN KEY (`arcadeCardNo`)
REFERENCES `arcadecard` (`arcadeCardNo`)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT `FK_sales_4` FOREIGN KEY (`centerNo`)
REFERENCES `center` (`centerNo`)
ON DELETE SET NULL
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Table: redemption 
DROP TABLE IF EXISTS `redemption`;
CREATE TABLE `redemption` (
`redeemDatetime` datetime NOT NULL,
`redeemItemNo` int(10) unsigned NOT NULL,
`memberNo` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`redeemDatetime`,`redeemItemNo`,`memberNo`),
KEY `Redemption_Index1` USING BTREE (`redeemItemNo`),
KEY `Redemption_Index2` USING BTREE (`memberNo`),
CONSTRAINT `FK_redemption_1` FOREIGN KEY (`memberNo`)
REFERENCES `member` (`memberNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT `FK_redemption_2` FOREIGN KEY (`redeemItemNo`)
REFERENCES `redeemitem` (`redeemItemNo`)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

CREATE VIEWS SCHEMA  

View: centerpromoview 
DELIMITER //
DROP VIEW IF EXISTS `centerpromoview` //
#Showing the centers which has or does not has a promotion and the
details on the current promotion. Only the current promotion for each
center is retrieved.
CREATE VIEW `centerpromoview` AS
SELECT
centerNo AS centerNo,
promotionNo AS promotionNo,
name AS centerName,
startDate AS promoStartDate,
endDate AS promoEndDate,
description AS promoDesc,
rateType AS promoRateType,
rate AS promoRate,
minspent AS promoMinSpent,
promoType as promoType
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 64 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

FROM center LEFT JOIN centerpromotion USING (centerNo) LEFT JOIN


promotion using (promotionNo) WHERE endDate >= CURDATE() OR endDate
IS NULL;
//
DELIMITER ;

View: facilitycenterpromoview 
DELIMITER //
DROP VIEW IF EXISTS `facilitycenterpromoview` //
#Showing the facility which has or does not has a promotion and the
details on the current promotion and the center which the facility is
in. Only the current promotion for each center is retrieved.
CREATE VIEW `facilitycenterpromoview` AS
SELECT
facilityNo AS facilityNo,
centerNo AS centerNo,
promotionNo AS promotionNo,
facilityType AS facilityType,
normalPrice AS normalPrice,
memberPrice AS memberPrice,
gameTitle AS arcadeGameTitle,
genre AS arcadeGenre,
name AS centerName,
startDate AS promoStartDate,
endDate AS promoEndDate,
description AS promoDesc,
rateType AS promoRateType,
rate AS promoRate,
minspent AS promoMinSpent,
promoType as promoType
FROM facility LEFT JOIN center USING (centerNo) LEFT JOIN
centerpromotion USING (centerNo) LEFT JOIN promotion USING
(promotionNo) LEFT JOIN game USING (gameNo) WHERE endDate >=
CURDATE() OR endDate IS NULL;
//
DELIMITER ;
 

CREATE TRIGGER SCHEMA  

Trigger: before_facility_insert 
DELIMITER //
DROP TRIGGER IF EXISTS `before_facility_insert` //
CREATE TRIGGER `before_facility_insert` BEFORE INSERT ON facility
FOR EACH ROW
BEGIN
SET @center = NEW.centerNo;
SET NEW.centerNo = NULL;
IF NEW.facilityStatus <> 0 THEN
SET NEW.facilityStatus = '0';
END IF;
IF NEW.facilityType <> 'arc' THEN
SET NEW.gameNo = NULL;
END IF;
IF NEW.facilityType = 'arc' AND NEW.gameNo IS NULL THEN
SET NEW.gameNo = 'gameNo_not_defined';
END IF;
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 65 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

END
//
DELIMITER;

Trigger: after_facility_insert 
DELIMITER //
DROP TRIGGER IF EXISTS `after_facility_insert` //
CREATE TRIGGER `after_facility_insert` AFTER INSERT ON facility
FOR EACH ROW
BEGIN
SET @newFacility = NEW.facilityNo;
INSERT INTO inventory (facilityNo, toDeployAt)
VALUES (@newFacility,@center);
CALL LogInventory(@newFacility,@center,1);
END
//
DELIMITER;

Trigger: before_facility_update 
DELIMITER //
DROP TRIGGER IF EXISTS `before_facility_update` //
CREATE TRIGGER `before_facility_update` BEFORE UPDATE ON facility
FOR EACH ROW
BEGIN
SET @facilityStatus = NEW.facilityStatus;
SET @facilityStatusOld = OLD.facilityStatus;
SET @facilityNo = NEW.facilityNo;
SET @centerNo = NEW.centerNo;
SET @centerNoOld = OLD.centerNo;
IF @facilityStatus = 0 THEN
INSERT INTO inventory (facilityNo, toDeployAt)
VALUES (@facilityNo, @centerNo);
CALL LogInventory(@FacilityNo,@centerNo,2);
SET NEW.centerNo = NULL;
END IF;

IF @facilityStatus = 1 AND @facilityStatus != @facilityStatusOld THEN


SET NEW.centerNo = (SELECT toDeployAt FROM inventory WHERE
facilityNo = @facilityNo);
DELETE FROM inventory WHERE facilityNo = @facilityNo;
CALL LogInventory(@facilityNo,NEW.centerNo,3);
END IF;
IF @centerNoOld <> @centerNo AND @facilityStatus = '1' THEN
INSERT INTO inventory (facilityNo, toDeployAt)
VALUES (@facilityNo, @centerNo);
CALL LogInventory(@facilityNo,@centerNo,4);
SET NEW.centerNo = NULL;
SET NEW.facilityStatus = '0';
END IF;
END
//
DELIMITER;

Trigger: after_sales_insert 
DELIMITER //
DROP TRIGGER IF EXISTS `after_sales_insert` //
CREATE TRIGGER `after_sales_insert` AFTER INSERT ON sales
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 66 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

FOR EACH ROW


BEGIN
CALL AddPoints(NEW.memberNo,FLOOR(NEW.amtpayable*10));
END
//
DELIMITER;
 

CREATE STORED PROCEDURE SCHEMA  

Stored procedure: AddFacility 
DELIMITER //
DROP PROCEDURE IF EXISTS `AddFacility` //
CREATE PROCEDURE `AddFacility`
(
facilityType CHAR(4),
normalPrice DECIMAL(5,2),
memberPrice DECIMAL(5,2),
gameNo INTEGER
)
BEGIN
IF facilityType NOT IN ('lan','bill','arc') THEN
SELECT 'Facility Type is invalid. Use \'lan\', \'bill\' or \'arc\''
AS Error;
ELSEIF facilityType = 'arc' AND gameNo IS NULL THEN
SELECT 'Please provide game number for the arcade facility.' AS
Error;
ELSE
INSERT INTO `facility` (
`facilityType`,
`normalPrice`,
`MemberPrice`,
`gameNo`
)
VALUES (facilityType, normalPrice, memberPrice, gameNo);
END IF;
END//
DELIMITER ;

Stored procedure: InvToInventory 
DELIMITER //
DROP PROCEDURE IF EXISTS `InvToInventory` //
CREATE PROCEDURE `InvToInventory`
(
facNo INTEGER
)
BEGIN
SET @facilityNo = facNo;
If getFacilityCenter(@facilityNo) IS NOT NULL THEN
UPDATE facility SET facilityStatus = '0' WHERE facilityNo =
@facilityNo;
ELSE
SELECT 'Facility is already in inventory.' AS Error;
END IF;
END//
DELIMITER ;

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 67 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Stored procedure: InvToCenter 
DELIMITER //
DROP PROCEDURE IF EXISTS `InvToCenter` //
CREATE PROCEDURE `InvToCenter`
(
facNo INTEGER
)
proc:BEGIN
SET @facilityNo = facNo;
IF getDeployAt(@facilityNo) IS NULL THEN
SELECT 'Facility has not set which center to deploy to.' AS Error;
LEAVE proc;
END IF;
If getFacilityCenter(@facilityNo) IS NULL THEN
UPDATE facility SET facilityStatus = '1' WHERE facilityNo =
@facilityNo;
ELSE
SELECT 'Facility is already in a center.' AS Error;
END IF;
END proc;
//
DELIMITER ;

Stored procedure: InvChangeCenter 
DELIMITER //
DROP PROCEDURE IF EXISTS `InvChangeCenter` //
CREATE PROCEDURE `InvChangeCenter`
(
facNo INTEGER,
cenNo INTEGER
)
BEGIN
SET @facilityNo = facNo;
SET @changeCenter = cenNo;
If getFacilityCenter(@facilityNo) IS NULL THEN
UPDATE inventory SET toDeployAt = @changeCenter WHERE facilityNo =
@facilityNo;
ELSE
UPDATE facility SET centerNo = @changeCenter WHERE facilityNo =
@facilityNo;
END IF;
END//
DELIMITER ;

Stored procedure: LogInventory 
DELIMITER //
DROP PROCEDURE IF EXISTS `LogInventory` //
CREATE PROCEDURE `LogInventory`
(
facilityNo INTEGER,
centerNo INTEGER,
logType INTEGER
)
BEGIN
DECLARE description TEXT;
IF logType != '' THEN
SET @facilityType = (SELECT getFacilityName(facilityNo));
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 68 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

SET @centerName = (SELECT getCenterName(centerNo));


CASE logType
WHEN 1 THEN SET description = CONCAT('Facility ',facilityNo,' (',
@facilityType,') is added to inventory.');
WHEN 2 THEN SET description = CONCAT('Facility ',facilityNo,' (',
@facilityType,') is sent to inventory for maintainance.');
WHEN 3 THEN SET description = CONCAT('Facility ',facilityNo,' (',
@facilityType,') is sent back to Center ', centerNo, '
(',@centerName,').');
WHEN 4 THEN SET description = CONCAT('Facility ',facilityNo,' (',
@facilityType,') is sent back to inventory to be sent to Center ',
centerNo, ' (',@centerName,').');
END CASE;
INSERT INTO inventorylog VALUES (facilityNo, NOW(), description);
END IF;
END
//
DELIMITER;

Stored procedure: AddPoints 
DELIMITER //
DROP PROCEDURE IF EXISTS `AddPoints` //
CREATE PROCEDURE `AddPoints`
(
memNo INTEGER,
pts INTEGER
)
proc:BEGIN
SET @memberNo = memNo;
SET @points = pts;
UPDATE member SET points = points + @points WHERE memberNo =
@memberNo;
END proc;
//
DELIMITER ;

Stored procedure: RedeemItem 
DELIMITER //
DROP PROCEDURE IF EXISTS `RedeemItem` //
CREATE PROCEDURE `RedeemItem`
(
memNo INTEGER,
reItem INTEGER
)
proc:BEGIN
SET @memberNo = memNo;
SET @redeemItemNo = reItem;
#Get the points to redeem the redeem item and check if redeem item is
exist.
SET @pointsRedeemed = (SELECT getRedeemItemPoints(@redeemItemNo));
IF @pointsRedeemed IS NULL THEN
SELECT 'Procedure call ends. Redeem Item does not exist. ' AS
Error;
LEAVE proc;
END IF;
#Get the points of the member and check if member is exist.
SET @pointsLeft = (SELECT getMemberPoints(@memberNo));

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 69 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

IF @pointsLeft IS NULL THEN


SELECT 'Procedure call ends. Member does not exist. ' AS Error;
LEAVE proc;
END IF;
IF @pointsLeft > @pointsRedeemed THEN
INSERT INTO redemption VALUES (NOW(),@redeemItemNo,@memberNo);
CALL AddPoints(@memberNo,-@pointsRedeemed);
ELSE
SELECT 'Member does not have enough points to redeem the item.' AS
Error;
END IF;
END proc;
//
DELIMITER ;

Stored procedure: MemberPointChecking 
DELIMITER //
DROP PROCEDURE IF EXISTS `MemberPointChecking` //
CREATE PROCEDURE `MemberPointChecking`
(
)
proc:BEGIN
UPDATE member SET points = 0, pointsExpiry =
DATE_ADD(pointsExpiry,INTERVAL 1 YEAR) WHERE pointsExpiry <=
CURDATE();
END proc;
//
DELIMITER ;

Stored procedure: AddSales 
DELIMITER //
DROP PROCEDURE IF EXISTS `AddSales` //
CREATE PROCEDURE `AddSales`
(
facNo INTEGER,
startTime TIME,
endTime TIME,
memNo INTEGER
)
proc:BEGIN
SET @price = 0.0;
SET @facilityNo = facNo;
#Check IF member number is valid. IF not valid, leave procedure. Only
NULL or valid member number is accepted.
IF memNo IS NOT NULL THEN
IF isMember(memNo) IS NOT NULL THEN
SET @memberNo = memNo;
SET @Price = getMemberPrice(@facilityNo);
ELSE
SELECT 'Procedure call ends. Member does not exist. ' AS Error;
LEAVE proc;
END IF;
ELSE
SET @memberNo = NULL;
SET @price = getNormalPrice(@facilityNo);
END IF;
SET @centerNo = getFacilityCenter(@facilityNo);

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 70 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

IF @centerNo IS NOT NULL THEN


SET @facilityType = getFacilityType(@facilityNo);
IF @facilityType != 'arc' THEN
SET @amtpayable =
calculatePayable(startTime,endTime,@price,@centerNo,@facilityType,@me
mberNo);
INSERT INTO sales VALUES
(NULL,@facilityType,NOW(),@amtpayable,@memberNo,startTime,endTime,@fa
cilityNo,NULL,@centerNo);
ELSE
SELECT 'Facility type is Arcade. Not Applicable for this
procedure call.' AS Error;
END IF;
ELSE
SELECT 'Facility is in Inventory or invalid.' AS Error;
END IF;
END proc;
//
DELIMITER ;

Stored procedure: AddSalesArcadeCard 
DELIMITER //
DROP PROCEDURE IF EXISTS `AddSalesArcadeCard` //
CREATE PROCEDURE `AddSalesArcadeCard`
(
cenNo INTEGER,
arCardNo INTEGER,
memNo INTEGER
)
proc:BEGIN
SET @price = 0.0;
SET @centerNo = cenNo;
SET @arcadeCardNo = arCardNo;
IF isCenterExist(@centerNo) IS NOT NULL THEN
#Check IF member number is valid. IF not valid, leave procedure.
Only NULL or valid member number is accepted.
IF memNo IS NOT NULL THEN
IF isMember(memNo) IS NOT NULL THEN
SET @memberNo = memNo;
SET @Price = getMemberPriceArcadeCard(@arcadeCardNo);
ELSE
SELECT 'Procedure call ends. Member does not exist. ' AS Error;
LEAVE proc;
END IF;
ELSE
SET @memberNo = NULL;
SET @price = getNormalPriceArcadeCard(@arcadeCardNo);
SET @promoType = getPromotionType(@centerNo);
SET @minspent = getPromotionMinimumSpent(@centerNo);
IF (@promoType = 'arc' OR @promoType = 'all') AND @price >=
@minspent THEN
SET @rateType = getPromotionRateType(@centerNo);
SET @rate = getPromotionRate(@centerNo);
IF @rateType = 'per' THEN
SET @price = @price - (@price*@rate/100);
ELSE
SET @price = @price - @rate;
END IF;

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 71 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

END IF;
END IF;
INSERT INTO sales VALUES
(NULL,'arc',NOW(),@price,@memberNo,NULL,NULL,NULL,@arcadeCardNo,@cent
erNo);
ELSE
SELECT 'Arcade Center does not exist.' AS Error;
END IF;
END proc;
//
DELIMITER ;

Stored procedure: AddPromotionToCenter 
DELIMITER //
DROP PROCEDURE IF EXISTS `AddPromotionToCenter` //
CREATE PROCEDURE `AddPromotionToCenter`
(
cenNo INTEGER,
promoNo INTEGER,
startDate DATE,
endDate DATE
)
proc:BEGIN
SET @centerNo = cenNo;
SET @promotionNo = promoNo;

IF getCenterPromotion(@centerNo) IS NULL THEN


INSERT INTO centerpromotion VALUES
(@centerNo,@promotionNo,startDate,endDate);
ELSE
SELECT CONCAT('Center ', @centerNo, ' is currently having
promotion.') AS Error;
END IF;
END proc;
//
DELIMITER ;

7.2. APPENDIX B: SQL TABLE POPULATION 
 

DEFAULT DATA POPULATION 

Default Data Population: arcadecard 
INSERT INTO arcadecard (arcadeCardNo, normalCardPrice,
memberCardPrice, cardValue) VALUES
(1, 2, 2, 2),
(2, 5, 4, 5),
(3, 10, 8, 10),
(4, 15, 10, 15),
(5, 25, 18, 25),
(6, 50, 30, 50);

Default Data Population: center 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 72 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

INSERT INTO center (centerNo, name) VALUES


(1, 'Funland Bedok'),
(2, 'Funland Bishan'),
(3, 'Funland East Coast'),
(4, 'Funland Educare Centre'),
(5, 'Funland Sembawang'),
(6, 'Funland Yishun 10'),
(7, 'Cyberbyte Bugis'),
(8, 'Cyberbyte Snookerium Clementi'),
(9, 'Cyberbyte Snookerium Paradiz'),
(10, 'Ang Mo Kio Snookerium');

Default Data Population: game 
INSERT INTO game (gameNo, gameTitle, genre) VALUES
(1, 'Time Crisis 2', 'Shooting'),
(2, 'Time Crisis 3', 'Shooting'),
(3, 'Time Crisis 4', 'Shooting'),
(4, 'House Of The Dead 3', 'Shooting'),
(5, 'House Of The Dead 4', 'Shooting'),
(6, 'Initial D 3', 'Racing'),
(7, 'Initial D 4', 'Racing'),
(8, 'Midnight Tune 3', 'Racing'),
(9, 'Pinball Fire', 'Pinball Machine '),
(10, 'Raw Thrills', 'Racing'),
(11, 'Stacker', 'Prize Merchandiser'),
(12, 'Grab A Doll', 'Claw & Skill Crane Machine'),
(13, 'Lollipop Lucky', 'Claw & Skill Crane Machine'),
(14, 'The Three Kingdoms', 'Platform'),
(15, 'Football Championship', 'Sports');

Default Data Population: member 
INSERT INTO member (memberNo, name, identityNo, gender, dob, address,
email, contact, occupation, memberCardNo, joinedDate, points,
pointsExpiry) VALUES
(1, 'Andrew Wee Kim Soo', 'S8020938A', 'M', '1980-05-24', '218
Orchard Road (S)238851', 'andrewee80@hotmail.com', 92373629,
'Banker', 928349495, '2002-01-11', 2000, '2010-08-31'),
(2, 'Lim Jingyin', 'S8406273B', 'F', '1984-07-02', '795 Ang Mo Kio
Avenue 1 (S)569976', 'ljy88@hotmail.com', 86738293, 'Student',
983920311, '2008-02-15', 2000, '2010-02-15'),
(3, 'Gan Kee Sim', 'S8588432J', 'M', '1985-03-07', '248 Choa Chu Kang
Avenue 2 (S)680248', 'keesim99@yahoo.com', 81239123, 'Student',
928347771, '2007-07-31', 2000, '2008-07-31'),
(4, 'Betty Su Kim Ling', 'S8947384C', 'F', '1989-09-22', '720
Woodlands Avenue 6 (S)730720', 'susubetty@yahoo.com.sg', 97382937,
'Student', 912348372, '2007-12-23', 2000, '2008-12-23'),
(5, 'Gary Tan Seng', 'S8321138D', 'M', '1983-06-21', '55 Chua Chun
Kang Road (S)345643', 'garygary55@hotmail.com', 94532349, 'Student',
912381239, '2007-01-11', 2000, '2009-08-15');

Default Data Population: promotion 
INSERT INTO promotion (promotionNo, description, ratetype, rate,
minspent, promoType) VALUES
(1, '5% off for LAN usage', 'per', 5, 0, 'lan'),
(2, '5% off for billiard usage', 'per', 5, 0, 'bill'),
(3, '5% off for purchase of arcade card', 'per', 5, 0, 'arc'),
(4, '5% off spending at this center', 'per', 5, 0, 'all'),
ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 73 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

(5, '$2 off LAN usage with a minimum spending of $10', 'amt', 2, 10,
'lan'),
(6, '$2 off billiard usage with a minimum spending of $10', 'amt', 2,
10, 'bill'),
(7, '10% off LAN usage with minimum spending of $15', 'per', 10, 15,
'lan'),
(8, '10% off billiard usage with minimum spending of $15', 'per', 10,
15, 'bill'),
(9, '$1 off with $5 and above arcade card purchased', 'amt', 1, 5,
'arc'),
(10, '$3 off with $10 and above arcade card purchased', 'amt', 3, 10,
'arc'),
(11, '$10 off with $25 and above arcade card purchased', 'amt', 10,
25, 'arc');

Default Data Population: redeemitem 
INSERT INTO redeemitem (redeemItemNo, redeemDesc, pointsCost) VALUES
(1, 'Beautiful Sticker', 50),
(2, 'Pencil Box', 150),
(3, 'Candy Sweets', 150),
(4, 'Small Teddy Bear', 150),
(5, 'Medium Teddy Bear', 250),
(6, 'Big Teddy Bear', 450),
(7, 'Gaint Teddy Bear', 1500),
(8, 'Stylish Watch', 200),
(9, 'Baseball Cap', 120),
(10, 'Funland T-shirt', 220),
(11, 'Handheld Game', 350),
(12, 'Cool Sunglasses', 300),
(13, 'Can Drink', 80),
(14, 'Mobile Phone', 1000),
(15, '32" LCD TV', 5000),
(16, 'Mini Home Threatre System', 2000),
(17, 'MP3 Player 1GB', 500),
(18, 'MP3 Player 2GB', 1100),
(19, 'MP3 Player 4GB', 2500),
(20, 'Thumb Drive 2GB', 900),
(21, 'Basketball', 350),
(22, 'Soccerball', 350);
 

*Other data can be populate by calling the Stored Procedures.

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 74 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

7.3. APPENDIX C: GANTT CHART 
 

Starting of the Project till the submission of initial report 

Second part of the Project from requirement gathering till the submission of this Final 
Report.

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 75 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Schedule Meeting with Tutor 

Task Day Date Allocated Attendants


7. Meeting With Tutor - 25hrs
7.1. Meeting 01 Mon 02 Feb 2.5hrs Attended
7.2. Meeting 02 Wed 20 Feb 2.5hrs Attended
7.3. Meeting 03 Wed 26 Mar 2.5hrs Attended
7.4. Meeting 04 Wed 16 Apr 2.5hrs Attended
7.5. Meeting 05 Sat 31 May 2.5hrs Attended
7.6. Meeting 06 Sat 28 Jun 2.5hrs Attended
7.7. Meeting 07 Sat 26 Jul 2.5hrs Attended
7.8. Meeting 08 Sat 23 Aug 2.5hrs Unavailable
7.9. Meeting 09 Sat 13 Sep 2.5hrs Attended
7.10. Meeting 10 Mon 13 Oct 2.5hrs Oversea
8. Workshop - 8.5hrs
8.1. Workshop 01 Sat 16 Feb 2.5hrs Attended
8.2. Workshop 02 Sat 23 Feb 3hrs Attended
8.3. Workshop 06 Sat 16 Aug 3hrs Oversea
 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 76 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

7.4. APPENDIX D: OTHERS 
 

Interview form 

User Requirements Interview Questions 
Project Title: Sales and Inventory System for Chain Stores (Amusement Center)

1) Company background.
a. How many centers?
b. How does each center operate in general?
2) Company’s operation workflow
a. Is company using any system?
b. What is the company sales operation?
c. What is the company logistic operation?
d. Any repeating tasks?
e. Any exceptional cases?
3) Information that is of importance to the user. (Content Identification)
a. What are the data that need to be store?
b. What information user currently uses?
c. Any forms?
d. How is the data currently stored?
4) Open questions.
a. What are the problems the user encounter?
b. What concerns the user has on the current system?
c. What the user wants the system to be capable of?
d. What are the expectations?
5) User to prioritize the information importance. (Prioritization)
a. What user wants to do with the information?
b. How user wants to see the information?
6) Defining the major user requirements if any.
7) Anything the user wants to point out?

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 77 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Membership Form 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 78 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

Sales Tracking Form 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 79 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

8. REFERENCES 

[ 1 ] Chen, Peter P. (1976) The Entity-Relationship Model - Toward a Unified View of

Data. ACM Transactions on Database Systems, Vol 1. Issue 1. pp.9-36

[ 2 ] Powell, Gavin. (c2006) Beginning database design. Indianapolis: Wiley

Publishing. 0764574906

[ 3 ] Lans, Rick F. van der. (c2007) SQL for MySQL Developers: A Comprehensive

Tutorial and Reference. Upper Saddle River, NJ : Addison-Wesley. 0131497359

[ 4 ] Peltier, Jon Gantt Charts in Microsoft Excel.

http://pubs.logicalexpressions.com/pub0009/LPMArticle.asp?ID=343 [viewed

14/02/2008]

[ 5 ] Holohan, Ron 6 Steps to Successful Schedules.

http://www.projectsmart.co.uk/6-steps-to-successful-schedules.html [viewed

13/02/2008]

[ 6 ] Christina, Low and Daphne, Pan (2007) The Write Right Guide.

http://www.cdtl.nus.edu.sg/wrg/ [viewed 14/02/2008]

[ 7 ] Connolly, Thomas M. and Begg, Carolyn E. (2002) Database Systems – A

Practical Approach to Design, Implementation, and Management. 3rd Ed.

Harlow: Addison-Wesley/Pearson. 0201708574

[ 8 ] Project Management Institute. (2004) A Guide to the Project Management Body

of Knowledge (PMBOK Guides). Third Edition. Newtown Square, Pa.: Project

Management Institute. 193069945X

[ 9 ] Kruckenberg, Michael. and Pipes, Jay. (c2005) Pro MySQL. Berkeley, CA : New

York : Apress. 159059505X

[ 10 ] MySQL AB, 2008 Sun Microsystems, Inc., MySQL 5.0 Reference Manual.

http://dev.mysql.com/doc/refman/5.0/en/index.html [viewed 16/05/2008]

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 80 of 81 
LEE CHANGJIN (K0604033)  JAN08/BHICT/03
 

9. GLOSSARY 
 

SDLC  Systems Development Life Cycle relates to models or methodologies that 
people use to develop systems 
DBMS  A DataBase Management System is computer software designed for the 
purpose of managing databases based on a variety of data models. 
GUI   A Graphical User Interface is a type of user interface which allows people to 
interact with electronic devices such as computers. It offers graphical icons, 
and visual indicators as opposed to text‐based interfaces, typed command 
labels or text navigation to fully represent the information and actions 
available to a user. 
WBS  Work Breakdown Structure is a tree structure listing of tasks commonly used 
in project management. 
E‐A‐R Model  Entity – Attribute – Relationship Model used in database design. 
 

ICT499 CAPSTONE PROJECT COURSE FINAL REPORT JANUARY 2008 
   
 81 of 81 

You might also like