A disadvantage of using batch processing is that you cannot see up to data information. Therefore this type of processing will not be suitable for my program because the user will require to see the data as soon as it has been inserted into the system.
Real time processing
This sort of processing means the computer has to keep up with data input from an external operation. It has to process data instantly and produce results that can be output immediately. Real-time processing can be further broken down into two subcategories.
Interactive – This is where more than one user need to make queries and update information for processing.
Process control – This involves the controlling of machinery through a computer system. The machinery will act instantly. Judgements can be made by the software on how to operate the machinery through a variety of different sensors located on the machine.
Information storage and retrieval – This is when information on a file needs to be located by a user and use it to perform some sort of process and then store it.
On-line processing
This is when something is connected to the computer in order for the computer to process information from it. Whatever is connected to the computer updates the file and therefore this is known as ‘on-line’. The hardware connected to the computer has the ability to edit/add data to the files available, but it does not alter the master file. Results are processed using the available files but not the master file. This process is the most simple to create and implement. All the processing is done locally on the computer where the program is installed. There is no need for a network connection. This suits my client because they will be the only one who uses the program and this improves security and prevents unauthorised access. The program also generates fairly quick results and the user does not have to wait for along time to see the output of this results.
I will be using Online Processing. My program will need to generate outputs fairly quickly but my user will be prepared to wait for a small amount of time to see the results on screen. My files in the program do not have to be edited or added to all the time but they will need to be accessed however not always re-written. It is the cheapest method to implement.
Hardware and Software Requirements
The minimum requirements for my system will be fairly low as the program will not have a huge demand on hardware or processing power. Obviously the better the system specification the more efficiently the software will run. If there is more processing power available then outputs will be produced relatively quicker, though this is quite limited because my program will not be processing large amounts of data often. It is essential that the computer has a copy of Microsoft Windows 98 or higher on it otherwise the program will not be able to run properly. Delphi the program I am using to create the program is a Windows based language. To enable my program to work on other operating systems translation of the code would have to be used, I do not have enough time to do this or learn how to do it.
The program I intend to create will be able to run properly on the following specification of machine,
-
Minimum available hard drive space should be no less than 50mb – this is for the installation of the program and for the storage of files, however it will be possible to save the files to other storage mediums.
-
Minimum processor speed – I recommend my client to use an Intel based system with processing power of at least 233MHz. It would be possible to use an AMD system, but Delphi specifically supports Intel systems. It is also favourable to have more processing power.
-
Minimum ram – This is set to 32mb having more ram though means the software will run a lot faster.
- Microsoft Windows 98, Microsoft Windows 2000, Microsoft Windows XP
-
Peripheral / Interface Devices – Mouse or compatible device, CD-ROM, SVGA monitor
I also request that the system has a printer. This will allow them to take advantage of the features in my system. They will be able to produce printed outputs. A top quality printer is not essential as I will not be producing high quality images within my reports.
A magnetic disc back up device will not be necessary because they are used to back up large amounts of data, my program will not save large amounts of data. There are more portable and efficient backup systems that I could advise. For example, a USB memory stick – a memory stick is portable, small and can hold large amounts of data, the minimum external storage my system will require would be a 64mb version of a memory stick which can cost under £10. Therefore this solution is cost effective and prevents loss of data.
User and/or operator interface
The interface is going to have to be friendly for the user. This involves considering many factors,
- Colours used must be suitable – they should not stand out too much and perhaps where there is something important the text colour could be formatted to be red.
- The fonts used should give a good impression by looking professional and being a size which is clear and easy to read. Enlarged fonts will not be needed because their will be no users using the program who have bad eye sight.
- The layout of the interface will have to be logical so it is easy for the user to navigate around the system.
When the user first opens up my program they will be prompted with a login screen. The login screen will look like below,
The next form the user is taken too is the main menu form, which will look like below.
This is the customer management form, where new customers are added, existing customers are edited or deleted.
This is the form to manage bookings.
The design of the availability form will be like below.
Files content, structure and access
My system will contain three files. A file for the username and password used to access the program. A file to store information on customers and another file to record availability both of these files will also be records. All files are separate to the program.
Password file
The password file will hold just 2 usernames and passwords which will allow the users of the program to logon. To deter and prevent hackers the file will have to use a filename which has will not attract attention to it. It will also be possible encrypt the text located in the file. The data will be in a record format as follows;
Contact details file
The contact details file will hold several more fields than any other file. This file will become the largest file size as it will contain a list of customers and their details. This file does not pose a security risk like the password file. However, it will be extremely important to keep a backup copy of this file because without it the system will not be able to function correctly. It is also important for my client to be able to request a paper copy of this file for further backup purposes.
Availability file
This file holds the information on the apartment’s availability. It will be separate to the contact file because having bother files together will make matters confusing and difficult to code the program. The system must have the ability to be able backup this file because losing this file would put my client in a bad situation as they would lose all their booking information. It may also be suitable to allow this file to be printed.
The structure of this file will be a record and in the following format;
The lastname fields in the availability and contact file are the same length which will allow me to declare all of these strings as just one string. Doing this will enable me to use the string to find a persons information when required, like a link between the two record files.
Processing stages
JSP (Jackson Structured Programming) diagram
System diagram
Testing strategy
Testing is an extremely important part of introducing a new computer system. The system is tested thoroughly to make sure it weeks correctly without fault, if fault is found it can then be corrected at this stage. Testing also ensures the client is happy with their new system and it meets requirements. If the system did not work correctly or it did not do what it was intended to do people would be unhappy.
There are several forms of Program testing, by using these methods I must ensure that all parts of the program work correctly. Complete testing is not possible, however, sufficient tests can be performed to give a reasonable measure of confidence in the program. This is what I will be doing.
Methods of testing,
- Dry Run – test every part of the program by working through it manually
- Unit Test – individual testing of units
- Integration Test – put every part together test the system
The first test my program has to go through is the debugger in Delphi, this will help to prevent errors before the program is compiled which saves a lot of time and hassle because it picks out errors line by line for easy referencing. I will test the individual programs and then put them together to test the complete system.
Testing includes making sure the system faultlessly without errors and also testing with lots of data including extreme values, to see if the system can function correctly with data that is beyond limits.
Testing must be carried out to prevent program errors including crashes, incompatibility with existing system and calculation errors.
Testing strategies
Bottom up testing – where modules are tested individually, and then where they are combined together into larger program and finally into a system. Tests are carried out along this process.
Top-down testing – where skeleton of a complete system is tested, rather than run each procedure message can just be to displayed to say that they run correctly.
Functional Testing
This involves creating some data that can be used to test the system, it covers inputs and outputs. This is also called black box testing. Inserting this data into the program covers the systems problems and limitations quite well. I organise lots of data to be processed by my system and will record and print screen the outputs.
Logical testing
Also known as white box testing, this type of testing tests the code, it involves testing each part of the program and its paths at least once. This involves the testing of;
- Buttons - making sure they work correctly and execute the right procedures.
- Manipulating files – making sure files work correctly and are writeable
- Records – checking whether records work as planned and hold data required.
- Labels – make sure labels display the correct text and they are position correctly.
- Error messages – make sure error messages work and in the way they are supposed to do.
- Combo boxes and check boxes
Performance testing
This makes sure the system can cope with large amounts of data, this is an effective type of testing as my program will have to deal with large amounts of data this testing seems appropriate to carry out. I will test with minimum and maximum data values.
I will use all types of testing.
Time Plan
Time Plan (2 marks)
Overall time plan
This gant chart illustrates the intended time period it will take to complete the different sections of my project. By following a gant chart it is easier to plan how long each section should take and it should help me to use the correct amount of time on each section so I can finish my project on time.
Implementation
Implementation (12 marks)
The following marks are awarded for the implementation of the prototype solution.
Program Documentation
Program documentation (8 marks)
This assessment is of the overall quality of the program documentation.
Annotated Listing
This table provides a description of all the units/modules involved in the program.
Program Apartment;
uses
Forms,
Ulogon in 'Ulogon.pas' {FormLogon},
Uadmin in 'Uadmin.pas' {FormAdmin},
Ucustomers in 'Ucustomers.pas' {FormCustomers},
Ubooking in 'Ubooking.pas' {FormBooking},
Uavailability in 'Uavailability.pas' {FormAvailability},
Upassword in 'Upassword.pas' {FormPassword},
Ubookings in 'Ubookings.pas' {Frame3: TFrame},
Unit3 in 'Unit3.pas' {Form3},
Ufirst in 'Ufirst.pas' {FormStart},
USearch in 'USearch.pas' {FormSearch},
Ustart in 'Ustart.pas' {FormFirst},
Uabout in 'Uabout.pas' {FormAbout},
Ucp6 in 'Ucp6.pas' {FormCP6};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Apartment Administration';
Application.CreateForm(TFormFirst, FormFirst);
Application.CreateForm(TFormLogon, FormLogon);
Application.CreateForm(TFormStart, FormStart);
Application.CreateForm(TFormAdmin, FormAdmin);
Application.CreateForm(TFormCustomers, FormCustomers);
Application.CreateForm(TFormBooking, FormBooking);
Application.CreateForm(TFormAvailability, FormAvailability);
Application.CreateForm(TFormPassword, FormPassword);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TFormSearch, FormSearch);
Application.CreateForm(TFormAbout, FormAbout);
Application.CreateForm(TFormCP6, FormCP6);
Application.Run;
end.
Unit Ustart
unit Ustart;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TFormFirst = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormFirst: TFormFirst;
implementation
uses Ulogon, Uavailability;
{$R *.dfm}
procedure TFormFirst.FormCreate(Sender: TObject);
begin
// Start the program in full screen
BorderStyle := bsNone;
WindowState := wsMaximized;
end;
procedure TFormFirst.FormActivate(Sender: TObject);
begin
FormLogon.Show; // Open and show the logon form so the user can access the administration
end;
end.
Unit Ulogon;
unit Ulogon;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
userrec = RECORD
username: STRING[8];
password: STRING[6];
fullname: STRING[30];
end;
userlist = ARRAY[1..1] of userrec;
TFormLogon = class(TForm)
EDuser: TEdit;
EDpass: TEdit;
BTclear: TButton;
BTlogon: TButton;
Label4: TLabel;
Label3: TLabel;
Label1: TLabel;
MainMenu1: TMainMenu;
File1: TMenuItem;
Closewindow1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure BTlogonClick(Sender: TObject);
procedure BTclearClick(Sender: TObject);
procedure ExitApplication(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormLogon : TFormLogon;
firstrun, logonrec : userrec;
logonlist : userlist;
logonfile : FILE of userrec;
count : INTEGER;
numberofrecs : INTEGER;
implementation
uses Uadmin, Upassword, Ufirst, Uavailability;
{$R *.dfm}
procedure TFormLogon.FormCreate(Sender: TObject);
BEGIN
assignfile(logonfile, 'userpass.pwd');
IF NOT FILEEXISTS ('userpass.pwd') THEN // If logon file dosnt exist then create it
BEGIN
REWRITE (logonfile); // Creates external file which will store logon data
firstrun.username:='admin'; // Assign username to temp variable
firstrun.password:='change'; // Assign password to temp variable
firstrun.fullname:='administrator'; // Assign full name to temp variable
WRITE (logonfile, firstrun); // Write the temp logon data to the logonfile
CLOSEFILE(logonfile); // Terminate the use of the logonfile
END;
RESET(logonfile); // Opens the logonfile
count:=0; // Set variable count to 0
WHILE NOT EOF (logonfile) DO // Check the file position
BEGIN
inc(count);
Read(logonfile, logonlist[count]); // Count the records in the logon array from logonfile
END;
CLOSEFILE(logonfile); // Terminate the use of the logonfile
numberofrecs:=count; // Number of records in the array equals the amount counted
END;
procedure TFormLogon.BTlogonClick(Sender: TObject);
var
position : integer;
userfound: boolean;
begin
position:=0; // Set position to 0 in array as only 1 record
userfound:=false; // User has not been found
REPEAT
inc(position); // Add one to variable position
IF logonlist[position].username = EDuser.Text THEN
userfound:=true; // If the username is the same as entered then the user has been found in the array
UNTIL (userfound=true) or (position=numberofrecs); // Continue process until user is found
IF userfound <> true THEN
BEGIN
FormLogon.Color:=clRed; // Background colour becomes red indicates user not found
showmessage ('Username does not exist, try again') // Tell the user to try again
END
ELSE
IF logonlist[position].password <> EDpass.Text THEN // Check if the password entered by the user is incorrect
BEGIN
FormLogon.Color:=clRed; // Background colour becomes red indicates wrong password entered
showmessage ('Password entered is incorrect, try again') // Tell the user to try again
END
ELSE
BEGIN
FormAvailability.Show; // Password is correct, show main admin form
FormLogon.Close; // Close the logon form
END;
EDuser.Text:=''; // Reset the user field to become blank
EDpass.Text:=''; // Reset the pass field to become blank
FormLogon.Color:=clInactiveCaptionText; // Reset background colour
end;
procedure TFormLogon.BTclearClick(Sender: TObject);
begin
EDuser.Text:=''; // Clear the user edit box of data
EDpass.Text:=''; // Clear the pass edit box of data
end;
procedure TFormLogon.ExitApplication(Sender: TObject);
begin
Application.Terminate; // Terminate the program
end;
end.
Unit Uavailability;
unit Uavailability;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Menus, ExtCtrls, ComCtrls;
type
TFormAvailability = class(TForm)
Label11: TLabel;
MainMenu1: TMainMenu;
Main1: TMenuItem;
Logoff1: TMenuItem;
Exitprogram1: TMenuItem;
Help1: TMenuItem;
Search1: TMenuItem;
Availabilitysearch1: TMenuItem;
Customersearch1: TMenuItem;
Customers1: TMenuItem;
Bookings1: TMenuItem;
Options1: TMenuItem;
Backup1: TMenuItem;
Backupall1: TMenuItem;
Backupbookingsfile1: TMenuItem;
Backupcustomersfile1: TMenuItem;
Reports1: TMenuItem;
PrintReport1: TMenuItem;
ChangeAccountPassword1: TMenuItem;
Helpfiles1: TMenuItem;
About1: TMenuItem;
SGone: TStringGrid;
FeaturesforCP61: TMenuItem;
procedure Availabilitysearch1Click(Sender: TObject);
procedure Bookings1Click(Sender: TObject);
procedure Logoff1Click(Sender: TObject);
procedure Exitprogram1Click(Sender: TObject);
procedure Customers1Click(Sender: TObject);
procedure ChangeAccountPassword1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure Helpfiles1Click(Sender: TObject);
procedure PrintReport1Click(Sender: TObject);
procedure Backupall1Click(Sender: TObject);
procedure Backupbookingsfile1Click(Sender: TObject);
procedure Backupcustomersfile1Click(Sender: TObject);
procedure Customersearch1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FeaturesforCP61Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormAvailability: TFormAvailability;
implementation
uses Upassword, Uabout, Ubooking, Ucustomers, Uadmin, Usearch, Ustart, Ufirst,
Ucp6;
{$R *.dfm}
procedure Grid;
var
x : integer;
available : string;
depstring : string;
paidstring : string;
commstring : string;
begin
with FormAvailability do
begin
pos:=0; // Set array position to 0
FOR x:=1 TO size do // Repeat process for each record in array
BEGIN
available:='available'; // Define variable
pos:=pos+1; // Change to the next record in the array ready to insert data from
SGone.Cells[0,x]:=inttostr(bookinglist[pos].weekno); // Insert the week number in grid
SGone.Cells[1,x]:=bookinglist[pos].weekbegin; // Insert the weeks begin data in grid
SGone.Cells[3,x]:=inttostr(bookinglist[pos].price); // Insert the price of week in grid
IF bookinglist[pos].lastname <> '' THEN // If booking has been made
BEGIN
available:='unavailable'; // Define availability as unavailable
SGone.Cells[2,x]:='booked '+'(' +bookinglist[pos].lastname +')'; // Insert who week is booked by in grid
SGone.Cells[4,x]:=inttostr(bookinglist[pos].occupants); // Insert into grid the amount of people who will occupy the appartment this week
IF bookinglist[pos].deposit = true THEN // If the deposit is paid..
depstring:='Paid' // ..Define the booking deposit has been paid
ELSE
depstring:='Not Paid'; // If not, define as unpaid
SGone.Cells[5,x]:=depstring; // Insert into grid wether deposit has been paid
IF bookinglist[pos].paid = true THEN // If payment has been made..
paidstring:='Paid' // ..Define variable as paid
ELSE
paidstring:='Not Paid'; // If not, define as unpaid
SGone.Cells[6,x]:=paidstring ; // Insert into grid wether payment has been made
IF bookinglist[pos].comments <> '' THEN
commstring:='Y' // If there are extra comments/info for the booking display as Y
ELSE
commstring:='N'; // If no comments are made display as N
SGone.Cells[7,x]:=commstring; // Show in grid
END
ELSE // If no booking has been made show the week as available on grid and clear fields
BEGIN
SGone.Cells[2,x]:='available';
SGone.Cells[3,x]:='';
SGone.Cells[4,x]:='';
SGone.Cells[5,x]:='';
SGone.Cells[6,x]:='';
SGone.Cells[7,x]:='';
END;
END;
end;
end;
procedure TFormAvailability.FormCreate(Sender: TObject);
begin
SGone.RowCount:=size; // Rows in grid = 52 weeks
SGone.Cells[0,0]:='Week No'; // Assign appropriate names to header cells...
SGone.Cells[1,0]:='Date';
SGone.Cells[2,0]:='Availability';
SGone.Cells[3,0]:='Week Price (£)';
SGone.Cells[4,0]:='Occupants';
SGone.Cells[5,0]:='Deposit paid?';
SGone.Cells[6,0]:='Full amount paid?';
SGone.Cells[7,0]:='AI?';
end;
procedure TFormAvailability.FormActivate(Sender: TObject);
begin
grid;
end;
// Main menu buttons
procedure TFormAvailability.Availabilitysearch1Click(Sender: TObject);
begin
FormSearch.show;
end;
procedure TFormAvailability.Bookings1Click(Sender: TObject);
begin
FormBooking.Show;
end;
procedure TFormAvailability.Logoff1Click(Sender: TObject);
begin
FormAvailability.Close;
end;
procedure TFormAvailability.Exitprogram1Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TFormAvailability.Customers1Click(Sender: TObject);
begin
Formcustomers.Show;
end;
procedure TFormAvailability.ChangeAccountPassword1Click(Sender: TObject);
begin
FormPassword.show;
end;
procedure TFormAvailability.About1Click(Sender: TObject);
begin
FormAbout.show;
end;
procedure TFormAvailability.Helpfiles1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormAvailability.PrintReport1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormAvailability.Backupall1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormAvailability.Backupbookingsfile1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormAvailability.Backupcustomersfile1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormAvailability.Customersearch1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormAvailability.FeaturesforCP61Click(Sender: TObject);
begin
FormCP6.show;
end;
end.
Unit Ucustomers;
unit Ucustomers;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, Menus;
const
arrsize=250;
type
customerrecord = RECORD
// PERSONAL DETAILS
firstname : STRING[30];
lastname : STRING[20];
contactprefer: STRING[20];
// CONTACT DETAILS
email : STRING[30];
telephone: STRING[12];
// ADDRESS DETAILS
address1 : STRING[30];
address2 : STRING[30];
towncity : STRING[20];
county : STRING[20];
country : STRING[20];
postcode : STRING[7];
deleted : BOOLEAN;
end;
clist = ARRAY[0..arrsize] of customerrecord;
TFormCustomers = class(TForm)
groupaddress: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
EDtowncity: TEdit;
EDaddress1: TEdit;
EDaddress2: TEdit;
EDcounty: TEdit;
EDcountry: TEdit;
EDpostcode: TEdit;
grouppersonnal: TGroupBox;
Label7: TLabel;
EDfirstname: TEdit;
EDlastname: TEdit;
Label8: TLabel;
SBleft: TSpeedButton;
SBright: TSpeedButton;
groupcontact: TGroupBox;
Label9: TLabel;
Label10: TLabel;
EDtelephone: TEdit;
EDemail: TEdit;
Label11: TLabel;
customeradd: TButton;
BTdel: TButton;
LBno: TLabel;
Label14: TLabel;
MainMenu1: TMainMenu;
File1: TMenuItem;
CloseWindow1: TMenuItem;
Options1: TMenuItem;
Backup1: TMenuItem;
Customerfile1: TMenuItem;
Print1: TMenuItem;
hiscustomersdetails1: TMenuItem;
Allcustomerdetails1: TMenuItem;
Email1: TMenuItem;
Letter1: TMenuItem;
othiscustomer1: TMenuItem;
Addresstoallcustomers1: TMenuItem;
CBcontact: TComboBox;
BTlast: TButton;
BTfirst: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BTcloseClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SBleftClick(Sender: TObject);
procedure SBrightClick(Sender: TObject);
procedure BTdelClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure customeraddClick(Sender: TObject);
procedure CloseWindow1Click(Sender: TObject);
procedure Customerfile1Click(Sender: TObject);
procedure hiscustomersdetails1Click(Sender: TObject);
procedure Allcustomerdetails1Click(Sender: TObject);
procedure othiscustomer1Click(Sender: TObject);
procedure Addresstoallcustomers1Click(Sender: TObject);
procedure Letter1Click(Sender: TObject);
procedure BTfirstClick(Sender: TObject);
procedure BTlastClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormCustomers : TFormCustomers;
firstrun, customerrec : customerrecord;
customerlist : clist;
customerfile : FILE of customerrecord;
position : integer;
pos, noofrec:integer;
newrec:boolean;
implementation
uses Upassword, Ulogon, Uadmin, Ubooking;
{$R *.dfm}
Procedure CreateCustomerFile;
Begin
Assignfile(customerfile, 'customers.ini'); // Associate customerfile with customers.ini
REWRITE(customerfile); // Create file and open for editing
with firstrun do
begin
firstname:='First record created';
lastname:='you should edit this';
email:='customers@email';
deleted:=false;
// Assign text to fields in the record
end;
WRITE(customerfile, firstrun); // Create the first record in the customerfile
CLOSEFILE(customerfile); // End use of the file
end;
Procedure ClearArray;
var
count:integer;
Begin
For count:=1 to arrsize do // Repeat for every record in array
BEGIN
WITH customerlist[count] do // Clear all the fields and set them to default values
BEGIN
firstname:='';
lastname:='';
email:='';
deleted:=false;
END;
END;
End;
Procedure LoadFromFile;
begin
noofrec:=0; // Set number of records to 0
cleararray; // Clear existing
Assignfile(customerfile, 'customers.ini'); // Associate customerfile with customers.ini
RESET(customerfile); // Open the file
WHILE NOT EOF(customerfile) do // Read all records
BEGIN
inc(noofrec); // Include the amount of records in array
READ(customerfile, customerlist[noofrec]); // Read the number of records in the array
END;
CLOSEFILE(customerfile); // End the use of the file
end;
Procedure savetofile;
var
count:integer;
BEGIN
Assignfile(customerfile, 'customers.ini'); // Associate customerfile with customers.ini file
If (noofrec > 0) then // Number of records greater than 0 then
BEGIN
Rewrite(customerfile); // Begin editing of the file
FOR count:=1 to noofrec do
Begin
If customerlist[count].deleted <> true THEN // Select only the records not chosen for deletion
Write(customerfile,customerlist[count]); // Write all these records into the customer file
end;
closefile(customerfile); // End the use of the file
END;
Loadfromfile;
END;
procedure Saverecord;
begin
IF FormCustomers.EDfirstname.text <> '' THEN // Only save record if there is data in the firstname field
with FormCustomers do // Associate the procedure with the form
with customerlist[pos] do // Select the record from the bookings array using the position variable
begin
firstname:=EDfirstname.text;
lastname:=EDlastname.text;
contactprefer:=CBcontact.Text;
telephone:=EDtelephone.text;
email:=EDemail.text;
address1:=EDaddress1.Text;
address2:=EDaddress2.Text;
towncity:=EDtowncity.Text;
county:=EDcounty.Text;
country:=EDcountry.Text;
postcode:=EDpostcode.Text;
// Fields in the record becomes equal to the data in the form
IF (noofrec=0) OR (newrec) Then inc(noofrec); // Add one to counter if a new record has been created
end;
newrec:=false;
end;
procedure ReturnColour;
begin
FormLogon.Color:=clBtnFace;
end;
procedure Showrecord;
begin
with FormCustomers do // Associate the procedure with the form
with customerlist[pos] do // Select the record from the bookings array using the position variable
begin
EDfirstname.Text:=firstname;
EDlastname.Text:=lastname;
CBcontact.Text:=contactprefer;
EDtelephone.Text:=telephone;
EDemail.Text:=email;
EDaddress1.Text:=address1;
EDaddress2.Text:=address2;
EDtowncity.Text:=towncity;
EDcounty.Text:=county;
EDcountry.Text:=country;
EDpostcode.Text:=postcode;
LBno.caption:=INTTOSTR(pos)+' of '+INTTOSTR(noofrec);
// The objects in the form equal the data from the record
IF (deleted) THEN
BEGIN
ShowMessage ('This record will be deleted when the window is closed!');
END
end;
end;
procedure TFormCustomers.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
saverecord;
savetofile;
// Data in the objects becomes equal to the record and then saved to external file
end;
procedure TFormCustomers.BTcloseClick(Sender: TObject);
begin
saverecord;
FormCustomers.Close;
end;
procedure TFormCustomers.FormShow(Sender: TObject);
begin
Pos:=1;
showrecord;
// Set position in array to 1, and show this record
end;
procedure TFormCustomers.SBleftClick(Sender: TObject);
begin
saverecord; // Save any changes made before changing record
dec(pos); // substitute 1 from variable
If pos < 1 then pos:=noofrec; // If record position is less than one then pos = number of records
If pos < 1 then pos:=1; // If position is less than one then display first record in array
showrecord; // show the previous record
end;
procedure TFormCustomers.SBrightClick(Sender: TObject);
begin
saverecord; // Save any changes made before changing record
inc(pos); // Add one to current array positio
If pos > noofrec then pos:=1; // If new position is greater than the amount of records in array then positon = 1
showrecord; // Show this record
end;
procedure TFormCustomers.BTdelClick(Sender: TObject);
begin
If pos <> 1 THEN // Only allow records other than 1 in the array to be deleted
customerlist[pos].deleted:=true; // Mark record as deleted
showrecord; // Show record
end;
procedure TFormCustomers.FormCreate(Sender: TObject);
begin
IF not FILEEXISTS('customers.ini') THEN
CreateCustomerFile;
// If the customer file does not exist execute the procedure to create it
Loadfromfile; // Load data from file
end;
procedure TFormCustomers.customeraddClick(Sender: TObject);
begin
saverecord; // Save new record
newrec:=true; // Set new record to be true
pos:=noofrec+1; // Add record to end of array
showrecord; // Show this record
end;
procedure TFormCustomers.BTfirstClick(Sender: TObject);
begin
pos:=1;
showrecord;
// show first record in array
end;
procedure TFormCustomers.BTlastClick(Sender: TObject);
begin
pos:=noofrec;
showrecord;
// display last record in array
end;
procedure TFormCustomers.CloseWindow1Click(Sender: TObject);
begin
FormCustomers.Close;
end;
procedure TFormCustomers.Customerfile1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormCustomers.hiscustomersdetails1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormCustomers.Allcustomerdetails1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormCustomers.othiscustomer1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormCustomers.Addresstoallcustomers1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormCustomers.Letter1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormCustomers.Button1Click(Sender: TObject);
begin
saverecord;
savetofile;
end;
end.
Unit Ubookings;
unit Ubooking;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Buttons, Menus;
const
size=52;
type
bookingrecord = RECORD
weekno : INTEGER;
weekbegin : STRING[20];
lastname : STRING[20];
occupants : INTEGER;
deposit : BOOLEAN;
paid : BOOLEAN;
comments : STRING[200];
erased : BOOLEAN;
price : INTEGER;
end;
blist = ARRAY[1..size] of bookingrecord;
TFormBooking = class(TForm)
Label11: TLabel;
GroupBox1: TGroupBox;
Label1: TLabel;
CBbookedfor: TComboBox;
Label3: TLabel;
Label4: TLabel;
CBdeposit: TCheckBox;
CBpaid: TCheckBox;
BTsave: TButton;
BTdelbooking: TButton;
Mcomments: TMemo;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
EDprice: TEdit;
Label8: TLabel;
CBocc: TComboBox;
CBweek: TComboBox;
Label2: TLabel;
EDweekbegin: TEdit;
MainMenu1: TMainMenu;
Main1: TMenuItem;
CloseWindow1: TMenuItem;
Options1: TMenuItem;
CreateInvoice1: TMenuItem;
Invoicefordeposit1: TMenuItem;
Invoiceforpayment1: TMenuItem;
Print1: TMenuItem;
Printthisbooking1: TMenuItem;
Printallbookings1: TMenuItem;
Label9: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BTsaveClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BTdelbookingClick(Sender: TObject);
procedure Label12Click(Sender: TObject);
procedure CBweekChange(Sender: TObject);
procedure Printthisbooking1Click(Sender: TObject);
procedure Printallbookings1Click(Sender: TObject);
procedure Invoicefordeposit1Click(Sender: TObject);
procedure Invoiceforpayment1Click(Sender: TObject);
procedure CloseWindow1Click(Sender: TObject);
procedure Label9Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormBooking: TFormBooking;
temp : bookingrecord;
bookinglist : blist;
bookingfile : FILE of bookingrecord;
noofrec : INTEGER;
newrec : BOOLEAN;
pos : integer;
implementation
uses Ucustomers, Uavailability;
{$R *.dfm}
procedure CreateBookingsFile;
var
x: integer;
begin
Assignfile(bookingfile, 'bookings.txt'); // Associate bookingfile with boookings.txt file
Rewrite(bookingfile); // Create the file and open for editing
FOR x:=1 TO size do // Repeat for every record in the array
BEGIN
with temp do
BEGIN // define all fields in record to default settings
weekno:=x;
weekbegin:='';
occupants:=0;
deposit:=false;
paid:=false;
comments:='';
END;
write(bookingfile,temp); // Write the variables into the file
END;
Closefile(bookingfile); // End the use of the file
end;
procedure ShowRecord;
begin
with FormBooking do
with bookinglist[pos] do // Select the record from the bookings array using the position variable
begin
CBbookedfor.Text:=lastname;
CBocc.Text:=inttostr(occupants);
CBdeposit.Checked:=deposit;
Mcomments.Text:=comments;
CBpaid.Checked:=paid;
CBweek.Text:=INTTOSTR(pos);
EDprice.Text:=INTTOSTR(price);
EDweekbegin.Text:=weekbegin;
// Data in the form become equal to the fields in the record
IF (erased) THEN // If the booking has been selected to be erased then show a message when the record is selected
BEGIN
ShowMessage ('This customers booking will be erased when the form is closed!');
END
end;
end;
procedure SaveRecord;
begin
IF FormBooking.EDprice.text <> '' THEN
with FormBooking do
with bookinglist[pos] do // Select the record from the bookings array using the position variable
begin
weekbegin:=EDweekbegin.Text;
lastname:=CBbookedfor.Text;
occupants:=strtoint(CBocc.text);
deposit:=CBdeposit.Checked;
paid:=CBpaid.Checked;
comments:=Mcomments.Text;
price:=strtoint(EDprice.text);
// Data in the record becomes equal to the fields in the form
IF (noofrec=0) OR (newrec) Then inc(noofrec);
end;
newrec:=false;
end;
Procedure ClearArray;
var
count:integer;
Begin
For count:=1 to size do // Repeat for every record in the array
BEGIN
WITH FormBooking do
WITH bookinglist[count] do // With all counted records
BEGIN
weekbegin:='';
lastname:='';
occupants:=0;
deposit:=false;
paid:=false;
erased:=false;
// Clear all the fields and set them to default values as assigned above
END;
END;
End;
Procedure LoadFromFile;
begin
noofrec:=0; // Set number of records to 0
ClearArray; // Clear existing
Assignfile(bookingfile, 'bookings.txt'); // Associate bookingfile with boookings.txt file
RESET(bookingfile); // Open the file
WHILE NOT EOF(bookingfile) do // Read all records
BEGIN
inc(noofrec); // Add one to the amount of records in array
READ(bookingfile, bookinglist[noofrec]); // Read the number of records in the array
END;
CLOSEFILE(bookingfile); // End the use of the file
end;
procedure SaveToFile;
var
count: integer;
begin
Assignfile(bookingfile, 'bookings.txt'); // Associate bookingfile with boookings.txt file
If noofrec>0 THEN // Number of records greater than 0 then
Begin
Rewrite(bookingfile); // Begin editing of the file
For count:=1 to noofrec do // With all the records
Begin
Write(bookingfile, bookinglist[count]); // Write all these records into the bookings file
End;
Closefile(bookingfile); // End the use of the file
End;
LoadFromFile;
end;
procedure TFormBooking.FormCreate(Sender: TObject);
var
x: integer;
weekno : TStringList;
begin
IF not FILEEXISTS('bookings.txt') THEN // If the file does not already exist then create it
CreateBookingsFile;
Loadfromfile; // Load records from the bookings file
begin
BEGIN
Weekno:=TStringList.Create; // Create the string list for the combo box that will display the weeks
For x:=1 to 52 do // With 52 records in the array
begin
pos:=pos+1; // Switch to the next record in the array
Weekno.Add(inttostr(bookinglist[pos].weekno)); // Add the weeknumber to the string list
end;
FormBooking.CBweek.Items:=weekno; // Add the weeks from the string list to items in the combo box
END;
end;
end;
procedure TFormBooking.FormShow(Sender: TObject);
var
x:integer;
availability:string;
begin
pos:=1; // Begin from first record
showrecord; // Show this record
end;
procedure TFormBooking.BTsaveClick(Sender: TObject);
begin
saverecord;
savetofile;
ShowMessage('The booking has been updated'); // Notify user
end;
procedure TFormBooking.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
saverecord;
savetofile;
end;
procedure TFormBooking.BTdelbookingClick(Sender: TObject);
begin
with FormBooking do
with bookinglist[pos] do
begin
CBbookedfor.Text:='';
CBocc.Text:=inttostr(0);
EDprice.Text:=inttostr(0);
CBdeposit.Checked:=false;
Mcomments.Text:='';
EDweekbegin.Text:='';
CBpaid.Checked:=false;
// Remove all data in the records fields and reset to default values
end;
ShowMessage('Existing booking deleted and week reset'); // Notify user
end;
procedure TFormBooking.Label12Click(Sender: TObject);
begin
FormCustomers.Show;
end;
procedure TFormBooking.CBweekChange(Sender: TObject);
begin
inc(pos); // Add one to position variable
pos:=strtoint(CBweek.Text); // Position becomes equal to the week selected in combo box
showrecord; // Show the week selected
end;
procedure TFormBooking.FormActivate(Sender: TObject);
var
x: integer;
customers : TStringList;
begin
begin
Customers:=TStringList.Create; // Create a string list for the customers
pos:=0; // Set position in the array to first record
For x:=1 to arrsize do // Use all the records in the array
begin
pos:=pos+1; // Change to the next record
IF customerlist[pos].lastname <> '' THEN // Choose only records which have data in them
Customers.Add(customerlist[pos].lastname); // Add the customers lastname to the string list
end;
CBbookedfor.Items:=customers // Add the customers from the string list to the customer combo box
end;
end;
// Main menu buttons
procedure TFormBooking.Printthisbooking1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormBooking.Printallbookings1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormBooking.Invoicefordeposit1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormBooking.Invoiceforpayment1Click(Sender: TObject);
begin
ShowMessage('To be developed in CP6');
end;
procedure TFormBooking.CloseWindow1Click(Sender: TObject);
begin
FormBooking.Close;
end;
procedure TFormBooking.Label9Click(Sender: TObject);
begin
FormBooking.Close;
FormCustomers.Show;
end;
end.
Unit Upassword;
unit Upassword;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Ulogon, StdCtrls;
type
TFormPassword = class(TForm)
EDpw: TEdit;
EDnewpw: TEdit;
BTsave: TButton;
BTclear: TButton;
EDnewpw1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
BTclose: TButton;
procedure BTsaveClick(Sender: TObject);
procedure BTclearClick(Sender: TObject);
procedure BTcloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormPassword: TFormPassword;
implementation
{$R *.dfm}
procedure TFormPassword.BTsaveClick(Sender: TObject);
var
position : integer;
begin
position:=1; // position is equal to 1
ASSIGNFILE(logonfile, 'userpass.pwd'); // Associate logonfile with userpass.pwd
IF EDpw.Text <> logonlist[position].password THEN // If password inserted in form is different to that in the record
BEGIN
FormPassword.Color:=clRed; // Form background becomes red
ShowMessage('Existing password must be correct before continuing'); // User is notifyed their password is incorrect
END
ELSE
BEGIN
IF EDnewpw.Text = EDnewpw1.Text THEN // If the new password entered is the same as the confirmation password field
BEGIN
logonlist[position].password:=EDnewpw.Text; // Password field in record becomes equal to the edit box
FormPassword.Color:=clGreen; // Change background colour to green
ShowMessage('Password successfully changed'); // Notify user that password has been changed
FormPassword.Close; // Close the form
Assignfile(logonfile, 'userpass.pwd'); // Associate logonfile with userpass.pwd
BEGIN
Rewrite(logonfile); // Open file
Write(logonfile, logonlist[position]); // Writes the new password to correct position in file
Closefile(logonfile); // Terminates the use of the file
END;
END
ELSE
BEGIN
FormPassword.Color:=clRed; // Change background colour to red
ShowMessage('New password must be the same'); // If new passwords do not match then notify user
END;
END;
EDpw.Text:='';
EDnewpw.Text:='';
EDnewpw1.Text:='';
FormPassword.Color:=clBtnFace;
// Clear edit boxes and reset background colour
end;
procedure TFormPassword.BTclearClick(Sender: TObject);
begin
EDpw.Text:='';
EDnewpw.Text:='';
EDnewpw1.Text:='';
// Clear edit boxes of text
end;
procedure TFormPassword.BTcloseClick(Sender: TObject);
begin
FormPassword.Close;
end;
end.
Unit Usearch;
unit Usearch;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Ubooking, Ucustomers, Menus;
type
TFormSearch = class(TForm)
EDsearch: TEdit;
BTgo: TButton;
CBsearch: TComboBox;
Label1: TLabel;
LBhelp: TLabel;
MainMenu1: TMainMenu;
File1: TMenuItem;
Closewindow1: TMenuItem;
procedure BTgoClick(Sender: TObject);
procedure Closewindow1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormSearch: TFormSearch;
implementation
{$R *.dfm}
procedure searchweek;
var
counter: integer;
found : boolean;
begin
with formsearch do
BEGIN
IF EDsearch.Text <> '' THEN
// Check for text in edit box
BEGIN
counter:=0; // Set counter to 0
found:=false; // Found is false
REPEAT
inc(counter); // Add one to counter
IF bookinglist[counter].weekno=strtoint(EDsearch.Text) THEN
found:=true
// If the week number in record is equal to that searched found becomes true
UNTIL (found)
OR (counter=size);
// Search until found or counter is equal to the array size
IF bookinglist[counter].lastname <> '' THEN // If the week has a lastname entered in the record then it has been booked
Showmessage('Week '+ EDsearch.Text +' unvailable for bookings') // Notify the user week is unavailble
ELSE Showmessage('Week '+ EDsearch.Text +' available for bookings') // If there is no last name notify user week is available
END
ELSE
ShowMessage('You must enter a week!') // If nothing has been entered in the search field then notify user that they must enter a week
END
end;
procedure searchcustomer;
var
c_counter : integer;
c_found : boolean;
begin
with formsearch do
BEGIN
IF EDsearch.Text <> '' THEN
// Check for text in edit box
BEGIN
c_counter:=0;
c_found:=false;
// set counter variable to 0 and found variable to false
REPEAT
inc(c_counter); // add one to counter
IF bookinglist[c_counter].lastname=(EDsearch.Text) THEN
c_found:=true;
// Search until lastname is located in record if located found becomes true
UNTIL (c_found)
OR (c_counter=size);
// Search until found or counter is equal to the array size
IF bookinglist[c_counter].lastname <> '' THEN
// If lastname has been found in a booking record then notify user
ShowMessage('Booking for '+ EDsearch.Text +' has been located for week number '+ inttostr(bookinglist[c_counter].weekno))
ELSE ShowMessage(EDsearch.Text +' has not made any bookings')
// Otherwise this customer has made no bookings
END
ELSE
ShowMessage('A name must be entered!') // If no text in edit box then notify user to enter a name
END
end;
procedure TFormSearch.BTgoClick(Sender: TObject);
begin
IF CBsearch.Text = 'Week availability' THEN
searchweek // If Availability search has been selected execute searchweek procedure
ELSE
IF CBsearch.Text = 'Customer booking' THEN
searchcustomer // If Customer booking search has been selected execute searchcustomer procedure
ELSE
Showmessage('Please select a search first!'); // If no search has been selected notify user
end;
procedure TFormSearch.Closewindow1Click(Sender: TObject);
begin
FormSearch.Close;
end;
end.
Unit UCP6;
unit Ucp6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TFormCP6 = class(TForm)
BTclose: TButton;
Label1: TLabel;
Mfeaturelist: TMemo;
Label2: TLabel;
procedure BTcloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormCP6: TFormCP6;
implementation
{$R *.dfm}
procedure TFormCP6.BTcloseClick(Sender: TObject);
begin
FormCP6.Close;
end;
end.
Procedures/ subroutine details
I used several procedures in my program some of which I created, and some which were created by Delphi.
Unit Ustart
Unit Ulogon
Unit Uavailability
Unit Ubookings
Unit Ucustomers
Unit Upassword
Unit Usearch
Cross-referenced list of variables used
Global variables
Local variables
Testing
Testing (8 marks)
Test data/expected results
Actual test runs
Evaluation
Evaluation (2 marks)
Evaluation of the implemented system
In general I believe I have met many of the essential objectives set at the beginning of the project. Some objectives however remain incomplete or partially complete, many features such as validation and printable reports will not be completed until the CP6 stage. Within the program there are room for improvements and if I had allocated more time to the implementation then these may have been achieved.
However, the program does what it is supposed to do effectively and I think the client would prefer it over their current system. As required, it eliminates the use of paper completely and is therefore far more efficient. It requires little skill or existing knowledge which suits the users well. Tasks can be performed quicker and the information is far easier to find than the existing system. Unlike the paper based system the new system is completely computer reliant so there is no organisation of paper – everything is done by the computer and therefore in CP6 it will be made possible to add the backup features and printable reports that I mentioned in the objectives.
The program is visually sound. An advantage is that the program runs in fall screen so the user is not distracted by anything running outside of the program - from the full-screen perspective the program is fairly impressive and it gives a good initial impression. Access to the program is through a logon system which is not completely secure, however, only a more experienced user would be able to undermine it. If time allows I plan to add encryption at the CP6 stage as security is not essential. Once logged in all the forms link together through a simple main menu so they are easy to access. Although the forms perform the correct functions they could have been designed slightly better and be made more attractive, this could have been done by including more panels and using different colours rather than blue throughout. It would have also been possible to reduce the amount of forms that open up in new windows. Instead I could have used tabs to open up different parts of the program in the same window which would have made it far more cleaner and perhaps clutter free, though this is not really such a major issue when the program is running in full screen. My customer, booking and logon forms all have similar interfaces to those that I designed in section 3.4. The only form that was changed very dramatically was the Availability form because it was not practical, the initial design using a combo box to select a week would take too long to find the required date instead I used a string grid to display the availability of the apartment and other booking features, again this area would have benefited from use of colour perhaps green and red to illustrate the statuses of available and unavailable. The availability form is the ‘calendar’ part of my program and is the main form opened after logon which includes the main menu. From here the user can view the availability information quickly and simply which is essential when taking bookings through phone.
I used the most basic objects at my disposal in Delphi and am confident that I used them to the best of their abilities. The only improvement I could suggests is that I should have considered the possibility of using a listbox (or similar) to provide easier access to customers on the customer form instead of scrolling through records before arriving at the right customer which could sometimes be a bit frustrating if the user has a large number of customers stored. A search option would also have be a good idea to provide even faster access to a customer, but I lacked time to create this. I am sure if I had been working with Delphi for longer I could have improved the overall program in some way using the more advanced objects, procedures and functions, however, I am happy with what I have achieved for the amount of time I have had to learn Delphi.
After reviewing and commenting my coding I have realised that it would have been possible to probably code a bit more efficiently. For example, where I have used local variables it would have been possible to use global to save some time. In my change password form there are also two procedures that are not even used and these I forgot to remove, however this does not effect the ability of the program. I would probably be more concerned if someone else hade to maintain it because they would not understand the purpose of these procedures and it could confuse them. I looked at an example project to learn techniques and the use of files, I think this vastly improved my coding as I saw the same function could be performed with less effort.
If I were to review my time plan I would definitely have allowed more time for the implementation and coding. I think I spent too long on the analysis and design and could have achieved the same amount of work in a shorter amount of time. I used my flow charts when coding my program as the allowed me to graphically see what procedures I needed to create and how to link my program. I would recommend the back-up of the programs files to another storage medium is possible just encase one of the files were to become corrupted or deleted by accident. If there was corruption the file can easily be recreated by running the program again. If the files were backed up then it would be possible to replace the corrupted or lost files and the program would read from these. I ran out of time on my testing because when I found errors these had to be fixed and then retested.
Overall I am please with the program. It has fulfilled all the relevant first year objectives and operates as intended.
User Documentation
User documentation (3 marks)
This assessment is for the overall quality of the user documentation.
Installation
See separate user guide.
Use
See separate user guide.
Bibliography
1.
Heathcote P.M. (1996)
A Level Computing 3rd edition
Letts
2.
http://www.infoplease.com/ce6/sci/A0860536.html
Information about high and low level programming languages
Accessed on 30th March 2006