Wednesday, December 31, 2008

DELPHI: Example Class question

Source: http://www.teachitza.com/delphi/exampleclass.htm

Create a program using object oriented programming that displays and makes calculations with test marks. The data is saved in a file called Marks.txt. Follow the steps below to complete this program.

1) Create an object class (another unit) named clsTMarks.
2) Define a class named TMarks in this unit. This class must contain the following private fields:
- Surname : String;
- Test1 : Integer;
- Test2 : Integer;
- Test3 : Integer;
3) Also create the following public methods:
- constructor Create; overload;
- constructor Create(pSurname : String; pTest1, pTest2, pTest3 : Integer); overload;
- function getAverage : String;
- function showMarks : String;
4) Create a parameterised constructor named create that will pass values for the fields in the class. These parameters should be used to initialise the fields of the class.
5) Write a method getAverage that takes the three test marks and calculates the average of the three (keep answer integer) and display them all in the RichEdit on the main form.
6) Also write a method showMarks that only shows the surname and three test marks of every student.
7) Create an array named arrMarks that keeps objects of TMarks. Write code in the OnActivate Eventhandler of the form to read information from the text file Marks.txt. Every field is separated with a hash (#).
8) Set up the tabs so that five different columns of information can be displayed neatly (see below)
9) Button1 (Show marks) calls the method showMarks method and displays the surnames and only the three marks of every student.
10) Button2 (Calculate Average) calls the method getAverage and it calculates the average and then displays the surnames, three marks and averages of every student.


OWN CREATED UNIT (clsTMarks.pas)

unit clsTMarks;

interface

uses Sysutils; //Added because IntToStr is used in this unit

type
TMarks = class //Defining class TMarks
private
Surname : String;
Test1 : Integer;
Test2 : Integer;
Test3 : Integer;
public
constructor Create; overload;
constructor Create(pSurname : String; pTest1, pTest2, pTest3 : Integer); overload;
function getAverage : String;
function showMarks : String;
end;

var
iAverage : Integer; //Variable used in this unit

implementation

constructor TMarks.Create;
begin
Surname := '';
Test1 := 0;
Test2 := 0;
Test3 := 0;
end;

constructor TMarks.Create(pSurname : String; pTest1, pTest2, pTest3 : Integer);
begin
Surname := pSurname; //Puts values into this class
Test1 := pTest1;
Test2 := pTest2;
Test3 := pTest3;
end;

function TMarks.getAverage: String;
begin
iAverage := (Test1 + Test2 + Test3) DIV 3; //Calculates average
getAverage := Surname + #9 + IntToStr(Test1) + #9 + IntToStr(Test2) + #9 +
IntToStr(Test3) + #9 + IntToStr(iAverage);
end;

function TMarks.showMarks: String;
begin
showMarks := Surname + #9 + IntToStr(Test1) + #9 + IntToStr(Test2) + #9 +
IntToStr(Test3); //Display marks note the tabs (#9)
end;

end.


MAIN UNIT (unit1.pas)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Buttons;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
Button1: TButton;
Button2: TButton;
BitBtn1: TBitBtn;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses clsTMarks; //Indicating that own created unit is used

var
arrMarks : array[1..42] of TMarks; //Array that keeps objects of class TMarks
iCount : Integer; //Counter keeping track of number of entries

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
fFile : TextFile;
sTemp, sSurname : String;
iC, iTest1, iTest2, iTest3, iH : Integer;
begin
Richedit1.Paragraph.TabCount := 5; //Adds tabs for neat layout in RichEdit
Richedit1.Paragraph.Tab[1] := 100;
Richedit1.Paragraph.Tab[2] := 200;
Richedit1.Paragraph.Tab[3] := 300;
Richedit1.Paragraph.Tab[4] := 400;
Richedit1.Paragraph.Tab[5] := 500;
iCount := 0; //Initial value for counter
AssignFile(fFile, 'Marks.txt'); //Assign text file
Reset(fFile); //Open text file
While NOT eof(fFile) do //Reads text file from beginning to end
begin
inc(iCount);
Readln(fFile,sTemp);
iH := pos('#',sTemp); //This and next 12 lines separate fields
sSurname := copy(sTemp, 1, iH-1);
Delete(sTemp,1,iH);
iH := pos('#',sTemp);
iTest1 := StrToInt(copy(sTemp, 1, iH-1));
Delete(sTemp,1,iH);
iH := pos('#',sTemp);
iTest2 := StrToInt(copy(sTemp, 1, iH-1));
Delete(sTemp,1,iH);
iH := pos('#',sTemp);
iTest3 := StrToInt(copy(sTemp, 1, iH-1));
Delete(sTemp,1,iH);
arrMarks[iCount] := TMarks.Create(sSurname,iTest1,iTest2,iTest3); //Into array
end;
CloseFile(fFile); //Remember to close file!
end;

procedure TForm1.Button1Click(Sender: TObject);
var
iK : Integer;
begin
Richedit1.Clear; //Clear RichEdit and add heading (next line)
RichEdit1.Lines.Add('SURNAME' + #9 + 'TEST 1' + #9 + 'TEST 2' + #9 + 'TEST 3');
For iK := 1 to iCount do
begin
RichEdit1.Lines.Add(arrMarks[iK].showMarks); //Call method showMarks
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
iK : Integer;
begin
Richedit1.Clear; //Clear RichEdit and add heading (next line)
RichEdit1.Lines.Add('SURNAME' + #9 + 'TEST 1' + #9 + 'TEST 2' + #9 + 'TEST 3' +
#9 + 'AVERAGE');
For iK := 1 to iCount do
begin
RichEdit1.Lines.Add(arrMarks[iK].getAverage); //Call method getAverage
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Application.Terminate; //Close application
end;

end.

Download source files
Class.zip


Coba Yahoo! Messenger 9.0 baru Akhirnya datang juga!

0 Comments: