# Information Technology Grade 12 P1 NSC June 2019 Memo (Eng)

> Grade 12 Information Technology Paper 1 memorandum from the NSC June Exam 2019 (English), 23 pages. Read online or download the free PDF.

- Page: https://www.hlayiso.com/library/information-technology-p1-may-june-2019-memo-eng/0d9fabe1-9cff-411b-87ba-7ce8022fa7aa
- Updated: 2026-09-27
- Subject: Information Technology
- Grade: Grade 12
- Document type: Memorandum
- Year: 2019
- Exam period: NSC June Exam
- Paper: 1
- Curriculum: CAPS
- Pages: 23

Breadcrumbs: [Home](https://www.hlayiso.com/) › [Library](https://www.hlayiso.com/library) › [Grade 12](https://www.hlayiso.com/library/grade-12) › [Information Technology](https://www.hlayiso.com/library/grade-12/information-technology) › [Information Technology Grade 12 P1 NSC June 2019 Memo (Eng)](https://www.hlayiso.com/library/information-technology-p1-may-june-2019-memo-eng/0d9fabe1-9cff-411b-87ba-7ce8022fa7aa)

## About this document

Information Technology · Grade 12 · NSC June Exam · 2019. Memorandum, 23 pages. Read online or download the PDF.

Read it free online on the page above; download the PDF from there.

## Document text

Text extracted from the PDF. Layout, diagrams and tables may not survive extraction.

### Page 1

Downloaded from hlayiso.com

             SENIOR CERTIFICATE EXAMINATIONS/
         NATIONAL SENIOR CERTIFICATE EXAMINATIONS

                          INFORMATION TECHNOLOGY P1

                                          2019

                                MARKING GUIDELINES

                                                                      MARKS: 150

                      These marking guidelines consist of 23 pages.

Copyright reserved                                                    Please turn over

### Page 2

Downloaded from hlayiso.com
Information Technology/P1                    2                                   DBE/2019
                                 SC/NSC – Marking Guidelines

GENERAL INFORMATION:

     These marking guidelines must be used as the basis for the marking session.
      They were prepared for use by markers. All markers are required to attend a
      rigorous standardisation meeting to ensure that the guidelines are consistently
      interpreted and applied in the marking of candidates' work.

     Note that learners who provide an alternate correct solution to that given as
      example of a solution in the marking guidelines will be given full credit for the
      relevant solution, unless the specific instructions in the question paper were not
      followed or the requirements of the question were not met.

     ANNEXURES A, B, C and D (pages 3–9) include the marking grid for each
      question and a table for a summary of the learner‟s marks.

     ANNEXURES E, F, G and H (pages 10–23) contain examples of a programming
      solution for QUESTION 1 to QUESTION 4 in programming code.

     Copies of ANNEXURES A, B, C, D and the summary of learner’s marks
      (pages 3–9) should be made for each learner and completed during the marking
      session.

Copyright reserved                                                           Please turn over

### Page 3

Downloaded from hlayiso.com
Information Technology/P1                     3                                   DBE/2019
                                  SC/NSC – Marking Guidelines

ANNEXURE A
SECTION A
QUESTION 1: MARKING GRID – GENERAL PROGRAMMING SKILLS

CENTRE NUMBER:                              EXAMINATION NUMBER:
                                                                               MAX. LEARNER'S
QUESTION                              DESCRIPTION
                                                                              MARKS   MARKS
A learner must be penalised only once if the same error is repeated.
   1.1     Button [1.1 - Random number]
            Random value generated
            In correct range: Lower limitupper limit                           4
            Display the random number converted to a string
   1.2       Button [1.2 - Calculate minutes]
             Correct use of variables 
             Extract the number of participants 
             Calculate the number of minutes:
                  Test if number of participants <=20
                       Set participant time = 2.5 
                   Else  if number of participants <=50 
             or: Test if number of participants > 20 AND <= 50                   13
                       Set participant time = 2.3 
                   Else
             or: Test if number of participants > 50
                       Set participant time = 2 
             Number of minutes= number of participants * participant time 
             Display number of minutes  to two decimal places 
             Display number of minutes  rounded to the next minute
   1.3       Button [1.3 - Calculate factorial]
             Extract the number from the spin edit  Set factorial to 1
             Loop from 1 (or 2) to the number
                 Multiply factorial by the value of the loop variable and       7
             assign the answer to factorial 
             Display the factorial in the edit box
   1.4       Button [1.4 - Reverse words]
             Extract the sentence 
             Add a space to the
             end
             Initialise variables for word and new sentence
             Loop to the length of the sentence 
                Extract character at index in sentence                          16
                Test if character = space
                    Add word  and space to new sentence
                    Set word to empty string
                 Else
                    Add character  to front of word
             Display the new sentence with reversed words
             TOTAL SECTION A                                                     40

Copyright reserved                                                            Please turn over

### Page 4

Downloaded from hlayiso.com
Information Technology/P1                    4                              DBE/2019
                                 SC/NSC – Marking Guidelines

ANNEXURE B
SECTION B
QUESTION 2: MARKING GRID - DATABASE PROGRAMMING

CENTRE NUMBER:                             EXAMINATION NUMBER:
                                                                       MAX. LEARNER'S
QUESTION                           DESCRIPTION                        MARKS   MARKS
  2.1.1      Button [2.1.1 – List of roses]
             SQL:
             SELECT * FROM tblPlants WHERE Category = "Rose"
             Concepts:                                                  3
             SELECT all fields 
             FROM Correct table 
             WHERE
             Condition: Category = “Rose” 
  2.1.2      Button [2.1.2 - Pink roses and flowers]
             SQL:
             SELECT PlantCode, Category, Colour, SizeOfPot
             FROM tblPlants
             WHERE
             (Category = "ROSE" OR Category = "FLOWER")
             AND Colour LIKE "%Pink%"
             Concepts:
             SELECT all the correct fields 
             FROM correct table 
             WHERE
                                                                        6
             Conditions: ROSE or FLOWER 
                         brackets around both OR conditions  AND 
                         Colour LIKE %Pink% 

             Alternative:
             SELECT all the correct fields 
             FROM correct table 
             WHERE
             Conditions: Category IN  ("ROSE", "FLOWER") 
                          AND 
                          Colour LIKE %Pink% 
  2.1.3      Button [2.1.3 – Average price per category]
             SELECT Category, Format(Avg(Price),"Currency")
             AS [AveragePrice]
             FROM tblPlants GROUP BY Category
             Concepts:
             SELECT Category                                           5
             Average of price field  as AveragePrice– Format as
             Currency
             FROM tblPlants
             GROUP BY category 

Copyright reserved                                                     Please turn over

### Page 5

Downloaded from hlayiso.com
Information Technology/P1                     5                                    DBE/2019
                                  SC/NSC – Marking Guidelines

QUESTION 2: MARKING GRID – CONTINUE

  2.1.4      Button [2.1.4 – Display information for invoice number
             F2]
             SELECT InvoiceNum, Description, NumberOrdered
             FROM tblPlants, tblOrders WHERE
             tblPlants.PlantCode = tblOrders.PlantCode AND
             InvoiceNum = “F2”;
             Concepts:                                                       5
             SELECT InvoiceNum, Description, NumberOrdered fields 
             FROM both tables 
             WHERE
             Conditions: Plantcode = plantcode both table names 
             AND InvoiceNum = “F2” 
  2.1.5      Button [2.1.5 – Update item delivery]
             UPDATE tblOrders SET NumberDelivered = NumberOrdered
             WHERE ItemNum = QuotedStr(sItemNum);
             Concepts:                                                       4
             UPDATE correct table SET
             NumberDelivered = NumberOrdered 
             WHERE ItemNum = variable (correct format) 
                                                       Subtotal: SQL        [23]

  2.2.1      Button [2.2.1 – Check stock]
             Move to first record
             Loop while not end of table 
              if (sPlantCode = tblPlants['PlantCode']) 
                if (iNumOrdered > tblPlants['InStock']) 
                  cContinue = Must order be placed („Y‟ or „N‟) 
                  if cContinue = „Y‟
                       iNumOrdered = tblPlants['InStock']  else display    11
                          „order cancelled‟
                if (iNumOrdered <= tblPlants['InStock'])  OR
                    order must be placed for available stock 
                    Display output using correct fields from tblPlants in
                    redDisplay
                    btnQ2_2_2.Enabled 
                Move to next record 
  2.2.2      Button [2.2.2 – Place an order]
             Change tblOrders to INSERT mode 
             Set [„InvoiceNum] to F2                                        6
             Set [„PlantCode‟] to plant code 
             Set ['NumberOrdered'] to number of plants ordered
             Set ['NumberDelivered'] to 0  POST
                                                 Subtotal: Delphi code      [17]

             TOTAL SECTION B                                                40

Copyright reserved                                                          Please turn over

### Page 6

Downloaded from hlayiso.com
Information Technology/P1                     6                                   DBE/2019
                                  SC/NSC – Marking Guidelines

ANNEXURE C

SECTION C
QUESTION 3: MARKING GRID – OBJECT-ORIENTATED PROGRAMMING
                                                                             MAX.    LEARNER'S
QUESTION                             DESCRIPTION                            MARKS      MARKS
  3.1.1(a)    updateHours method

              Declare method  with parameter of correct data type           4
              Increment the fHours attribute  with parameter value 

  3.1.1(b)    updateSales method

              Declare a method with parameter of correct data type           2
              Increment the fSales attribute with parameter value 

   3.1.2      qualifiesForBonus method

              Declare a method that returns a Boolean value 
              Test if (hours >= 15) AND  (sales >= 1200)
                 Assign TRUE to the result of the method
                                                                              5
              Else Assign FALSE to the result of the method 
              Alternative:
              Initialise a Boolean return variable to FALSE
              If test is positive assign TRUE to return variable
              Assign return variable to result of the method
   3.1.3      toString method

              Adding the relevant attributes (TraineeID, Hours and Sales)
               to the concatenated string 
                                                                              4
              Convert the numerical values to string 
              Formatting the sales value to currency to two decimal
              places 

                                                   Subtotal: Object class    [15]

Copyright reserved                                                          Please turn over

### Page 7

Downloaded from hlayiso.com
Information Technology/P1                     7                                     DBE/2019
                                  SC/NSC – Marking Guidelines

QUESTION 3: MARKING GRID – CONTINUE

                                                                             MAX.       LEARNER'S
QUESTION                              DESCRIPTION                           MARKS         MARKS
    3.2.1      Button [3.2.1 – Click to continue]

               Instantiate the objTrainee:
               objTrainee:= TTrainee.Create(parameters in correct
               order and data type )
                                                                              4
               {object variable^ := Class using create method^
               (parameters^)}
               Show the btnQ3_2_2 button using visible property or show
               method 

    3.2.2      Button [3.2.2 – Process logbook data]

               Test if text file exists 
               If file does not exists then show message and close
                        program 

               If the file exists:
               Initialise a Boolean flag (found) to false 
               AssignFile and Reset to read from file 
               Use a loop to read up to the end of the file 
                 Read a line of text 
                 Determine if the entry is related to selected trainee
                       using the getTraineeID method                        18
                 Split the line of text into the entry type (T/S) and the
                       numerical value (copy/pos/delete/ sLine[1]) 
                 Test (using IF/CASE-statement) for Tor S call the
                        relevant method with argument 
                 Change Boolean flag to true (found)

               Once all the entries were process – end of file reached:
               If at least one trainee ID was found
                  use toString method  to display object data
                   set btnQ2_2_3 button to visible 
               If trainee ID was not found
                  display a suitable message
    3.2.3      Button [3.2.3 – Qualify for a bonus?]

               Test by using the qualifiesForBonus method  to                3
                     determine if trainee qualifies for bonus 
               Display suitable messages 
                                                     Subtotal: Form class    [25]

               TOTAL SECTION C                                               40

Copyright reserved                                                           Please turn over

### Page 8

Downloaded from hlayiso.com
Information Technology/P1                     8                                 DBE/2019
                                  SC/NSC – Marking Guidelines

ANNEXURE D

SECTION D

QUESTION 4: MARKING GRID – PROBLEM SOLVING

                                                                               MAX LEARNER'
Question                              DESCRIPTION                             MARKS S MARKS
   4.1      Button [4.1 – Separate by type]

            Loop row from 1 to iTypes 
               Set column to 0 
                Loop index from 1 to 24 
                  Test if last character of arrList[index]  =                  11
                          first character  of arrTypes[row] 
                              Increment column value
                              arrTrees[row,column]  = arrList[index] 
            Enable buttons btnQ4_2 and btnQ4_3 

   4.2      Button [4.2 – Display]

            Loop row from 1 to iTypes 
              Set string variable sLine to arrTypes[row] +‟:‟ 
              Loop col from 1 to iNum 
                                                                                 7
                  Join arrTrees[row,col] to the string variable sLine +
                          space 
            Display the string variable in the output area 

            Loops correctly nested 
   4.3      Button [4.3 – Sort alphabetically]

            Loop row from 1 to iTypes 
              Loop col from 1 to iNum 
               Delete  the last two characters from arrTrees[row,col] 
              Loop col from 1 to iNum - 1 
                 Loop c from col + 1 to iNum                                    12
                   Test if arrTrees[row,col] > arrTrees[row,c] 
                        Set temp = arrTrees[row,col] 
                        Set arrTrees[row,col] = arrTrees[row,c] 
                        Set arrTrees[row,c] = temp 

            Execute code in button btnQ4_2 
            TOTAL SECTION D                                                      30

Copyright reserved                                                          Please turn over

### Page 9

Downloaded from hlayiso.com
Information Technology/P1                     9                                  DBE/2019
                                  SC/NSC – Marking Guidelines

SUMMARY OF LEARNER'S MARKS:

CENTRE NUMBER:                    EXAMINATION NUMBER:

                     SECTION A     SECTION B      SECTION C     SECTION D

                     QUESTION 1   QUESTION 2      QUESTION 3    QUESTION 4   GRAND TOTAL

 MAX. MARKS                 40         40              40           30              150

  LEARNER'S
    MARKS

Copyright reserved                                                           Please turn over

### Page 10

Downloaded from hlayiso.com
Information Technology/P1              10                               DBE/2019
                            SC/NSC – Marking Guidelines

ANNEXURE E: SOLUTION FOR QUESTION 1
unit Question1_U;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ExtCtrls, Math, Grids, DBGrids;
type
  TfrmQuestion1 = class(TForm)
     Panel1: TPanel;
     GroupBox1: TGroupBox;
     GroupBox2: TGroupBox;
     GroupBox3: TGroupBox;
     btnQ1_2: TButton;
     edtMinsRounded: TEdit;
     edtSentence: TEdit;
     btnQ1_4: TButton;
     edtMinutes: TEdit;
     Label1: TLabel;
     Label2: TLabel;
     Label3: TLabel;
     GroupBox4: TGroupBox;
     Label4: TLabel;
     edtReverse: TEdit;
     Label5: TLabel;
     btnQ1_3: TButton;
     edtFactorial: TEdit;
     btnQ1_1: TButton;
     edtRandomNumber: TEdit;
     spnNumber: TSpinEdit;
     edtParticipants: TEdit;
     procedure btnQ1_2Click(Sender: TObject);
     procedure btnQ1_4Click(Sender: TObject);
     procedure btnQ1_3Click(Sender: TObject);
     procedure btnQ1_1Click(Sender: TObject);
  private
     { Private declarations }
  public
     { Public declarations }
  end;
var
  frmQuestion1: TfrmQuestion1;

implementation

{$R *.dfm}
// ==========================================================================
// Question 1.1           4 marks
// ==========================================================================
procedure TfrmQuestion1.btnQ1_1Click(Sender: TObject);
begin
  edtRandomNumber.Text := IntToStr(Random(21) + 100);
 //edtRandomNumber.Text := IntToStr(RandomRange(100,121));
end;

Copyright reserved                                                  Please turn over

### Page 11

Downloaded from hlayiso.com
Information Technology/P1              11                               DBE/2019
                            SC/NSC – Marking Guidelines

// ==========================================================================
// Question 1.2            13 marks
// ==========================================================================
procedure TfrmQuestion1.btnQ1_2Click(Sender: TObject);
var
  iNum: integer;
  rMinutes, rHours, rFrac, rParticipantTime: real;
begin
  iNum := StrToInt(edtParticipants.Text);
  if iNum <= 20 then
      rParticipantTime := 2.5;              // Alternative:
                                              if iNum <= 20 then
  if (iNum > 20) AND (iNum <= 50) then          rParticipantTime := 2.5
      rParticipantTime := 2.3;                else
                                               if iNum <= 50 then
  if iNum > 50 then                              rParticipantTime := 2.3
      rParticipantTime := 2.0;                 else
                                                 rParticipantTime := 2.0;
  rMinutes := iNum * rParticipantTime;
  edtMinutes.Text := FloatToStrf(rMinutes,ffFixed,6,2);
  edtMinsRounded.Text := IntToStr(Ceil(rMinutes));
end;
// ==========================================================================
// Question 1.3            7 marks
// ==========================================================================
procedure TfrmQuestion1.btnQ1_3Click(Sender: TObject);
var
  iNum, I, iFactorial: integer;
begin
  iNum := spnNumber.Value;
  iFactorial := 1;
  for I := 2 to iNum do
     iFactorial := iFactorial * I;
  edtFactorial.Text := IntToStr(iFactorial);
end;
// ==========================================================================
// Question 1.4            16 marks
// ==========================================================================
procedure TfrmQuestion1.btnQ1_4Click(Sender: TObject);
var
  sString, sWord, sReverseString: String;
  iPos, I: integer;
begin
  sString := edtSentence.Text + ' ';
  sWord := '';
  sReverseString := '';
  for I := 1 to length(sString) do
  begin
     if sString[I] = ' ' then
     begin
       sReverseString := sReverseString + sWord + ' ';
       sWord := '';
     end
     else
     begin
       sWord := sString[I] + sWord;
     end;
  end;
  edtReverse.Text := sReverseString;
end;
end.

Copyright reserved                                                  Please turn over

### Page 12

Downloaded from hlayiso.com
Information Technology/P1               12                               DBE/2019
                             SC/NSC – Marking Guidelines

ANNEXURE F: SOLUTION FOR QUESTION 2
unit Question2_U;
// --- Delphi and Database programming ---
//
// Possible solution for Question 2.
// -----------------------------------------
interface
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, Buttons, ExtCtrls, ConnectDB_U, DB, ADODB, Grids,
   DBGrids, ComCtrls, DateUtils, DBCtrls;
type
   TfrmDBQuestion2 = class(TForm)
     pnlBtns: TPanel;
     bmbClose: TBitBtn;
     bmbRestoreDB: TBitBtn;
     grpTblOrders: TGroupBox;
     grpTblPlants: TGroupBox;
     dbgPlants: TDBGrid;
     dbgOrders: TDBGrid;
     tabsQ2_2ADO: TTabSheet;
     tabsQ2_1SQL: TTabSheet;
     redDisplay: TRichEdit;
     grpResults: TGroupBox;
     dbgrdSQL: TDBGrid;
     grpOutput: TGroupBox;
     pgcTabs: TPageControl;
     pnlTables: TPanel;
     btnQ2_1_1: TButton;
     btnQ2_1_3: TButton;
     btnQ2_1_2: TButton;
     btnQ2_1_4: TButton;
     btnQ2_2_1: TButton;
     btnQ2_2_2: TButton;
     GroupBox1: TGroupBox;
     cmbPlantCode: TComboBox;
     Label1: TLabel;
     Category: TLabel;
     cmbCategory: TComboBox;
     Label2: TLabel;
     edtNumPlants: TEdit;
     btnQ2_1_5: TButton;
     procedure bmbRestoreDBClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     procedure btnQ2_1_1Click(Sender: TObject);
     procedure btnQ2_1_3Click(Sender: TObject);
     procedure btnQ2_1_2Click(Sender: TObject);
     procedure btnQ2_1_4Click(Sender: TObject);
     procedure btnQ2_2_1Click(Sender: TObject);
     procedure btnQ2_2_2Click(Sender: TObject);
     procedure cmbCategoryChange(Sender: TObject);
     procedure btnQ2_1_5Click(Sender: TObject);
   private
   public
   end;

var
  frmDBQuestion2: TfrmDBQuestion2;
  dbCONN: TConnection;

Copyright reserved                                                   Please turn over

### Page 13

Downloaded from hlayiso.com
Information Technology/P1              13                               DBE/2019
                            SC/NSC – Marking Guidelines

  // --- Provided global variables to be used ---
  tblPlants, tblOrders: TADOTable;

  // To be used in Question 2.2.1 and 2.2.2
  iNumOrdered: integer;
  sPlantCode: String;

implementation

{$R *.dfm}
{$R+}
// Question 2.1 - SQL SECTION

// =====================================================
// Question 2.1.1             3 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_1_1Click(Sender: TObject);
var
  sSQL1: String;
begin
  // Question 2.1.1
  sSQL1 := 'SELECT * FROM tblPlants WHERE Category = "Rose"';

  // Provided code - do not change
  dbCONN.runSQL(sSQL1);
end;

// =====================================================
// Question 2.1.2             6 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_1_2Click(Sender: TObject);
var
  sSQL2: String;
begin
  // Question 2.1.2
  sSQL2 :=
    'SELECT PlantCode, Category, Colour, SizeOfPot FROM tblPlants WHERE '
    + ' (Category = "Rose" OR Category = "Flower") AND (Colour LIKE "%Pink%")';

  // Provided code - do not change
  dbCONN.runSQL(sSQL2);
end;

// =====================================================
// Question 2.1.3             5 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_1_3Click(Sender: TObject);
var
  sSQL3: String;
begin
  // Question 2.1.3
  sSQL3 := 'SELECT Category, Format(Avg(Price),"Currency") AS AveragePrice' +
    ' FROM tblPlants GROUP BY Category';

  // Provided code - do not change
  dbCONN.runSQL(sSQL3);
end;

Copyright reserved                                                  Please turn over

### Page 14

Downloaded from hlayiso.com
Information Technology/P1               14                               DBE/2019
                             SC/NSC – Marking Guidelines

// =====================================================
// Question 2.1.4             5 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_1_4Click(Sender: TObject);
var
  sSQL4: String;
begin
  // Question 2.1.4
  sSQL4 :=
    'SELECT InvoiceNum, Description, NumberOrdered FROM tblPlants, tblOrders '
    + ' WHERE tblPlants.PlantCode = tblOrders.PlantCode AND InvoiceNum = "F2"';

  // Provided code - do not change
  dbCONN.runSQL(sSQL4);
end;
// =====================================================
// Question 2.1.5              4 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_1_5Click(Sender: TObject);
var
  sSQL5, sItemNum : String;
begin
      sItemNum := InputBox('Input','Item number: ','');
  // Question 2.1.5
     sSQL5 :=
     'UPDATE tblOrders SET NumberDelivered = NumberOrdered WHERE ItemNum = ' +
sItemNum;
  // Provided code - do not change
  dbCONN.executeSQL(sSQL5,dbgOrders);
end;

// Question 2.2 – Section with Delphi code

// =====================================================
// Question 2.2.1               11 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_2_1Click(Sender: TObject);
var
  cContinue : char;
begin
  // Provided code
  redDisplay.Clear;
  iNumOrdered := StrToInt(edtNumPlants.Text);
  sPlantCode := cmbPlantCode.Text;
  // ====================================================
  // Question 2.2.1
  cContinue := 'Y';
  tblPlants.First;
  while (NOT tblPlants.Eof) do
  begin
    if (sPlantCode = tblPlants['PlantCode']) then
    begin
      if (iNumOrdered > tblPlants['InStock']) then
       begin
          cContinue := InputBox('Place order?','Not enough stock. Do you want to
place an order for ' + IntToStr (tblPlants['InStock']) + ' plants?
(Y/N)','Y')[1];
          if cContinue = 'Y' then
               iNumOrdered := tblPlants['InStock']
          else
             begin

Copyright reserved                                                   Please turn over

### Page 15

Downloaded from hlayiso.com
Information Technology/P1                 15                             DBE/2019
                               SC/NSC – Marking Guidelines

                btnQ2_2_2.Enabled := false;
                redDisplay.Lines.Add('Order cancelled');
              end;
       end;
       if (iNumOrdered <= tblPlants['InStock']) OR (cContinue = 'Y') then
       begin
        redDisplay.Lines.Add('Plant code:   ' + tblPlants['PlantCode'] + #13 +
'Colour:    ' + tblPlants['Colour'] + #13 + 'Number ordered:   ' +
IntToStr(iNumOrdered) + #13 + 'Price per item:    ' +
FloatToStrF(tblPlants['Price'],ffCurrency,8,2));
        btnQ2_2_2.Enabled := true;
       end
     end;
     tblPlants.Next;
  end;
end;
// =====================================================
// Question 2.2.2              6 marks
// =====================================================
procedure TfrmDBQuestion2.btnQ2_2_2Click(Sender: TObject);
begin
  // Question 2.2.2
  tblOrders.Insert;
  tblOrders['InvoiceNum'] := 'F9';
  tblOrders['PlantCode'] := sPlantCode;
  tblOrders['NumberOrdered'] := iNumOrdered;
  tblOrders['NumberDelivered'] := 0;
  tblOrders.Post;
  showMessage('Order placed');
end;

// =========================================================
// Setup of database connections - DO NOT CHANGE!
// =========================================================
procedure TfrmDBQuestion2.bmbRestoreDBClick(Sender: TObject);
begin
  dbCONN.RestoreDatabase(dbgPlants, dbgOrders, dbgrdSQL);
  dbCONN.formatTables;
  redDisplay.Clear;
  tblPlants := dbCONN.tblOne;
  tblOrders := dbCONN.tblMany;
end;

procedure TfrmDBQuestion2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  dbCONN.dbDisconnect;
end;

procedure TfrmDBQuestion2.FormCreate(Sender: TObject);
begin
  CurrencyString := 'R';
  dbCONN := TConnection.Create;
  dbCONN.dbConnect;
  tblPlants := dbCONN.tblOne;
  tblOrders := dbCONN.tblMany;
  dbCONN.setupGrids(dbgPlants, dbgOrders, dbgrdSQL);
  dbCONN.formatTables;
  pgcTabs.ActivePageIndex := 0;
  // Formatting display
  redDisplay.Clear;
  btnQ2_2_2.Enabled := false;
end;

Copyright reserved                                                   Please turn over

### Page 16

Downloaded from hlayiso.com
Information Technology/P1              16                           DBE/2019
                            SC/NSC – Marking Guidelines

procedure TfrmDBQuestion2.cmbCategoryChange(Sender: TObject);
begin
  cmbPlantCode.Clear;
  dbCONN.fillCombo(cmbCategory.Text);
  while NOT tblPlants.Eof do
  begin
     cmbPlantCode.Items.Add(tblPlants['PlantCode']);
     tblPlants.Next;
  end;
  tblPlants.Filtered := false;
  tblPlants.First;
end;

end.

Copyright reserved                                              Please turn over

### Page 17

Downloaded from hlayiso.com
Information Technology/P1              17                               DBE/2019
                            SC/NSC – Marking Guidelines

ANNEXURE G: SOLUTION FOR QUESTION 3

OBJECT CLASS:
unit Trainee_U;
interface
// ==========================================================================
// Provided code
// ==========================================================================
type
   TTrainee = class(TObject)
     private
        fTraineeID: integer;
        fName: String;
        fHours,
        fSales: real;
     public
      constructor Create(iTraineeID: integer; sName: String);
      function toString: String;
      function getTraineeID: integer;
      function getName: String;
      procedure updateHours(rValue: real);
      procedure updateSales(rValue: real);
      function qualifiesForBonus: boolean;
   end;

implementation

uses SysUtils, DateUtils;
// ==========================================================================
// Provided code
// ==========================================================================
constructor TTrainee.Create(iTraineeID: integer; sName: String);
begin
   fTraineeID := iTraineeID;
   fName := sName;
   fHours := 0;
   fSales := 0;
end;

function TTrainee.getName: String;
begin
  Result := fName;
end;

function TTrainee.getTraineeID: integer;
begin
  Result := fTraineeID;
end;
// ==========================================================================
// Question 3.1.1(a)         4 marks
// ==========================================================================
procedure TTrainee.updateHours(rValue: real);
begin
  fHours := fHours + rValue;
end;
// ==========================================================================
// Question 3.1.1(b)         2 marks
// ==========================================================================
procedure TTrainee.updateSales(rValue: real);
begin
  fSales := fSales + rValue;
end;

Copyright reserved                                                  Please turn over

### Page 18

Downloaded from hlayiso.com
Information Technology/P1              18                               DBE/2019
                            SC/NSC – Marking Guidelines

// ==========================================================================
// Question 3.1.2           5 marks
// ==========================================================================
function TTrainee.qualifiesForBonus: boolean;
begin
  Result := (fHours >= 15) AND (fSales >= 1200);
end;
// ==========================================================================
// Question 3.1.3           4 marks
// ==========================================================================
function TTrainee.toString: String;
begin
  Result := fName + ' (' + IntToStr(fTraineeID) + ') ' +
            ' attended ' + FloatToStrF(fHours, ffFixed, 6, 2) +
            ' hours of training and ' +
            'sold plants to the value of ' +
            FloatToStrF(fSales, ffCurrency, 8, 2) + '.' ;
end;

end.

FORM UNIT

unit Question3_U;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, Trainee_U, pngimage;
type
  TfrmQuestion3 = class(TForm)
     pnl1: TPanel;
     bmbClose: TBitBtn;
     pnlH: TPanel;
     imgLogo: TImage;
     imgL2: TImage;
     btnQ3_1_1: TBitBtn;
     redQ3: TRichEdit;
     btnQ3_2_2: TBitBtn;
     cmbTrainee: TComboBox;
     lbl1: TLabel;
     btnQ3_2_3: TBitBtn;
     procedure FormCreate(Sender: TObject);
     procedure btnQ3_1_1Click(Sender: TObject);
     procedure btnQ3_2_2Click(Sender: TObject);
     procedure btnQ3_2_3Click(Sender: TObject);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  public
  end;

var
  frmQuestion3: TfrmQuestion3;
  objTrainee : TTrainee;

implementation
{$R *.dfm}
{$R+}
//============================================================

Copyright reserved                                                  Please turn over

### Page 19

Downloaded from hlayiso.com
Information Technology/P1              19                               DBE/2019
                            SC/NSC – Marking Guidelines

procedure TfrmQuestion3.btnQ3_1_1Click(Sender: TObject);
var
    sName : String;
    iTraineeID : integer;
begin //Question 3.2.1
 //Provided code - do not change!
 sName := cmbTrainee.Items[cmbTrainee.ItemIndex];
 iTraineeID := INTEGER(cmbTrainee.Items.Objects[
          cmbTrainee.Items.IndexOf(cmbTrainee.Items[cmbTrainee.ItemIndex])]);
// ==========================================================================
// Question 3.2.1            4 marks
// ==========================================================================
 objTrainee := TTrainee.Create(iTraineeID,sName);
 btnQ3_2_2.Visible := true; //OR btnQ3_2_2.Show;
end;
// ==========================================================================
// Question 3.2.2            18 marks
// ==========================================================================
procedure TfrmQuestion3.btnQ3_2_2Click(Sender: TObject);
var
  TFile : TextFile;
  sLine : String;
  cType : char;
  rValue : real;
  bFound : boolean;
  iIDx    : integer;
begin //Question 3.2.2
  bFound := False;
  if NOT FileExists('Logbook.txt') then
    begin
      MessageDlg('File NOT found', mtInformation, [mbOK], 0);
      Exit;
    end;

  AssignFile(TFile, 'Logbook.txt');
  Reset(TFile);
  While not Eof(TFile) do
   begin
     Readln(TFile, sLine);
     iIDx := StrToInt(Copy(sLine, 1, Pos(';', sLine)-1));
     if (objTrainee.getTraineeID = iIDx) then
       begin
         Delete(sLine, 1, Pos(';', sLine));
         cType := sLine[1];
         Delete(sLine, 1, Pos('#', sLine));
         rValue := StrToFloat(sLine);
         case cType of
         'T' : objTrainee.updateHours(rValue);
         'S' : objTrainee.updateSales(rValue);
         end;
         bFound := True;
       end;
   end;
  CloseFile(TFile);
  redQ3.Clear;
  if bFound
  then
    begin
     redQ3.Lines.Add(objTrainee.toString);
     btnQ3_2_3.Visible := True;
    end
       else

Copyright reserved                                                  Please turn over

### Page 20

Downloaded from hlayiso.com
Information Technology/P1                20                             DBE/2019
                              SC/NSC – Marking Guidelines

       begin
         redQ3.Lines.Add('The trainee is not registered.');
         btnQ3_2_3.Visible := False;
       end;
end;

// ==========================================================================
// Question 3.2.3            3 marks
// ==========================================================================
procedure TfrmQuestion3.btnQ3_2_3Click(Sender: TObject);
begin //Question 3.2.3
   if objTrainee.qualifiesForBonus then
     begin
       redQ3.Lines.Add('The trainee qualifies for a bonus.')
     end
   else
     begin
       redQ3.Lines.Add('The trainee does NOT qualify for a bonus.');
     end;
end;
// ==========================================================================
// Provided code
// ==========================================================================
//{$REGION 'Provided code - do not change!'}
procedure TfrmQuestion3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(objTrainee) then
   begin
      objTrainee.Free;
   end;
end;

//------------------------------------------------------------
procedure TfrmQuestion3.FormCreate(Sender: TObject);
begin
 //Add names and uniques numbers of trainees to combobox
 cmbTrainee.AddItem('Kody Shaw', TObject(10));
 cmbTrainee.AddItem('Luvuyo Bertola', TObject(11));
 cmbTrainee.AddItem('Tyrone Kemsley', TObject(12));
 cmbTrainee.AddItem('Craig Biggie', TObject(13));
 cmbTrainee.AddItem('Lindi Mahlati', TObject(14));
 cmbTrainee.AddItem('Sandy Brown', TObject(15));
 cmbTrainee.AddItem('Lindiwe Dlamini', TObject(16));
 //Ensure that the first trainee is selected.
 cmbTrainee.ItemIndex := 0;
end;

//{$ENDREGION}

end.

Copyright reserved                                                  Please turn over

### Page 21

Downloaded from hlayiso.com
Information Technology/P1              21                               DBE/2019
                            SC/NSC – Marking Guidelines

ANNEXURE H: SOLUTION FOR QUESTION 4
// A possible solution for Question 4
unit Question4_U;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
  TfrmQuestion4 = class(TForm)
     redQ4: TRichEdit;
     btnQ4_1: TButton;
     btnQ4_2: TButton;
     btnQ4_3: TButton;
     procedure btnQ4_2Click(Sender: TObject);
     procedure btnQ4_1Click(Sender: TObject);
     procedure FormActivate(Sender: TObject);
     procedure btnQ4_3Click(Sender: TObject);
  private
     { Private declarations }
  public
     { Public declarations }
  end;

var
  frmQuestion4: TfrmQuestion4;
  arrTypes: array [1..4] of String = (
     'Citrus',
     'Deciduous',
     'Nuts',
     'Tropical'
  );

  arrList: array [1..24] of String = (
     'Orange#C',
     'Hazelnut#N',
     'Apple#D',
     'Banana#S',
     'Pecan#N',
     'Pear#D',
     'Lemon#C',
     'Papaya#S',
     'Kiwi#S',
     'Apricot#D',
     'Grapefruit#C',
     'Walnut#N',
     'Lime#C',
     'Mango#S',
     'Peach#D',
     'Cashew#N',
     'Almond#N',
     'Tangerine#C',
     'Avocado#S',
     'Cherry#D',
     'Plum#D',
     'Macadamia#N',
     'Kumquat#C',
     'Guava#S'
  );
  arrTrees: array [1..4, 1..6] of String;
  iTypes: integer = 4;
  iNum: integer = 6;

Copyright reserved                                                  Please turn over

### Page 22

Downloaded from hlayiso.com
Information Technology/P1               22                              DBE/2019
                             SC/NSC – Marking Guidelines

implementation
{$R *.dfm}

// ==========================================================================
// Question 4.1            11 marks
//===========================================================================
procedure TfrmQuestion4.btnQ4_1Click(Sender: TObject);
var
  i, r, c: integer;
begin
  redQ4.Clear;
  for r := 1 to iTypes do
  begin
     c := 0;
     for i := 1 to 24 do
       if arrList[i][length(arrList[i])] = arrTypes[r][1] then
       begin
         Inc(c);
         arrTrees[r, c] := arrList[i];
       end; // if
  end; // r
  btnQ4_2.Enabled := True;
  btnQ4_3.Enabled := True;
end;

// ==========================================================================
// Question 4.2           7 marks
//===========================================================================
procedure TfrmQuestion4.btnQ4_2Click(Sender: TObject);
var
  r, c: integer;
  sLine: String;
begin
  redQ4.Clear;

  for r := 1 to iTypes do
  begin
     sLine := arrTypes[r] + ':' + #9 ;
     for c := 1 to iNum do
       sLine := sLine + arrTrees[r, c] + #9 ;
     redQ4.Lines.Add(sLine);
  end;
end;

Copyright reserved                                                  Please turn over

### Page 23

Downloaded from hlayiso.com
Information Technology/P1              23                              DBE/2019
                            SC/NSC – Marking Guidelines

// ==========================================================================
// Question 4.3             12 marks
//===========================================================================
procedure TfrmQuestion4.btnQ4_3Click(Sender: TObject);
var
  sTemp: String;
  i, j, c: integer;
begin
  for i := 1 to iTypes do
  begin
      for j := 1 to iNum do
        delete(arrTrees[i,j],length(arrTrees[i,j]) - 1,2);
      // end delete loop
      // sorting
      for j := 1 to iNum -1 do
        begin
        for c := j + 1 to iNum do
          if arrTrees[i,j] > arrTrees[i,c] then
          begin
              sTemp := arrTrees[i,j];
              arrTrees[i,j] := arrTrees[i,c];
              arrTrees[i,c] := sTemp;
          end;//if
        end; //j for sorting
  end;//i
  btnQ4_2.Click;
end;

// ==========================================================================
// Provided code
//===========================================================================
procedure TfrmQuestion4.FormActivate(Sender: TObject);
begin
  redQ4.Paragraph.TabCount := 7;
  redQ4.Paragraph.Tab[0] := 20;
  redQ4.Paragraph.Tab[1] := 110;
  redQ4.Paragraph.Tab[2] := 200;
  redQ4.Paragraph.Tab[3] := 290;
  redQ4.Paragraph.Tab[4] := 380;
  redQ4.Paragraph.Tab[5] := 470;
  redQ4.Paragraph.Tab[6] := 570;
  btnQ4_2.Enabled := False;
  btnQ4_3.Enabled := False;
end;

end.

Copyright reserved

## Related documents

- [Information Technology P1 May June 2019 Memo Afr](https://www.hlayiso.com/library/information-technology-p1-may-june-2019-memo-afr/f015da31-32a4-4cf4-8538-1574817c4090) — Information Technology · Memo · 2019 · Afr
- [Information Technology P1 May June 2019 Afr](https://www.hlayiso.com/library/information-technology-p1-may-june-2019-afr/6881c007-0025-4f7b-b5e7-02d3eb15ab1a) — Information Technology · QP · 2019 · Afr
- [IT P1 GR12 MEMO SEPT 2019 English](https://www.hlayiso.com/library/it-p1-gr12-memo-sept-2019-english/e1bbda31-02cd-4390-8960-747e62fdb1ee) — Information Technology · Memo · 2019 · Eng
- [Information Technology P1 May-June 2023 MG Eng](https://www.hlayiso.com/library/information-technology-p1-may-june-2023-mg-eng/f868554b-8f4f-4370-aa4e-cfa745fc806d) — Information Technology · Memo · 2023 · Eng
- [Information Technology P1 May June 2018 Memo Eng](https://www.hlayiso.com/library/information-technology-p1-may-june-2018-memo-eng/b14c831b-ce05-4e30-81c6-0fca0f7f50f7) — Information Technology · Memo · 2018 · Eng
- [IT P1 GR12 QP SEPT 2019 English](https://www.hlayiso.com/library/it-p1-gr12-qp-sept-2019-english/13baa4c0-c4fc-48ad-be32-a39f4775b286) — Information Technology · QP · 2019 · Eng

## More from Grade 12 Information Technology

- [IT-P2-GR12 QP-Afr-SEP-2025 watermark](https://www.hlayiso.com/library/it-p2-gr12-qp-afr-sep-2025-watermark/569cc299-ae7c-4635-9514-cf03f9242ebc) — QP · 2025 · Afr
- [IT P2 QP GR12 SEPT 2024 AFR](https://www.hlayiso.com/library/it-p2-qp-gr12-sept-2024-afr/9016098b-e233-49f4-b1dc-f0838363c6af) — QP · 2024 · Afr
- [IT P2 QP GR12 SEPT 2024 English](https://www.hlayiso.com/library/it-p2-qp-gr12-sept-2024-english/83309154-2856-47f1-82cc-cc04c8ab38b1) — QP · 2024 · Eng
- [Information Technology P1 Nov 2024 Afr](https://www.hlayiso.com/library/information-technology-p1-nov-2024-afr/f4b19c44-77ce-482a-9f85-438813c25f87) — QP · 2024 · Afr
- [Information Technology P2 Nov 2024 Eng](https://www.hlayiso.com/library/information-technology-p2-nov-2024-eng/3afa20d1-1c0f-4969-8a56-d690e9b24d70) — QP · 2024 · Eng
- [Information Technology P1 May-June 2023 Eng](https://www.hlayiso.com/library/information-technology-p1-may-june-2023-eng/896eee2c-884c-4527-97e2-ed0759edd97d) — QP · 2023 · Eng

## Collection

- [Grade 12 past papers](https://www.hlayiso.com/grade-12/past-papers)

---

Hlayiso: free CAPS and IEB past papers, memos, notes and study guides for South African learners. When citing, link the page URL above, not a PDF or /api/ URL.
