I need help with a program for school. I am a very novice pascal programmer. I need to allow the person using the program to add a record and then search for it and view it. Currently, whenever I add a record via the program and try to search for it and view it, the same record shows up.

This first program is the program I used to create the file.

        PROGRAM SpellingBeeFile;

           USES
              CRT, SYSUTILS;

           TYPE
              TestRec = RECORD
                           TestNo      : LONGINT;
                           Word        : ARRAY[1..10] OF STRING[15];
                           Definition  : ARRAY[1..10] OF STRING[40];
                        END;

              TestFileRqd = FILE OF TestRec;

           VAR
              Test : TestRec;
              TestFile : TestFileRqd;

           PROCEDURE InitialFile;
              BEGIN
                 ASSIGN(TestFile,'C:\TestFile.dta');
                 REWRITE(TestFile);
                    WITH Test DO
                       BEGIN
                          Test.TestNo := 1;

                          Word[1] := 'hectare';
                          Definition[1] := 'unit of area';

                          Word[2] := 'active';
                          Definition[2] := 'being busy';

                          Word[3] := 'amaze';
                          Definition[3] := 'surprise';

                          Word[4] := 'bound';
                          Definition[4] := 'leap and jump';

                          Word[5] := 'cavern';
                          Definition[5] := 'a large cave';

                          Word[6] := 'difficult';
                          Definition[6] := 'hard to do';

                          Word[7] := 'frozen';
                          Definition[7] := 'turned to ice';

                          Word[8] := 'garage';
                          Definition[8] := 'building for a car';

                          Word[9] := 'jaguar';
                          Definition[9] := 'large cat';

                          Word[10] := 'lemonade';
                          Definition[10] := 'fizzy drink'; 
                          WRITE(TestFile, Test);
                       END;
                 CLOSE (TestFile);
              END;

           BEGIN
              InitialFile;
           END.

This is the program used to maintain the file created by the first program.

        PROGRAM SpellingBee;
           USES
              CRT, SYSUTILS;

           TYPE
              TestRec = RECORD
                           TestNo      : LONGINT;
                           Word        : ARRAY[1..10] OF STRING[15];
                           Definition  : ARRAY[1..10] OF STRING[40];
                        END;

              TestFileRqd = FILE OF TestRec;

           VAR
              Test : TestRec;
              TestFile : TestFileRqd;
              MenuChoice, WD, AnotherTest : CHAR;
              Choice : LONGINT;
              pos,pos1 : INTEGER;
              T : LONGINT;

           PROCEDURE DisplayTest;
              BEGIN
                 RESET(TestFile);
                 CLRSCR;
                 READ(TestFile, Test);
                 WRITELN('Test Number: ', Test.TestNo);
                 WRITELN;
                 FOR pos := 1 TO 10 DO
                    BEGIN
                       WITH Test DO
                          BEGIN
                             WRITELN(pos,') Word : ',Word[pos]);
                             WRITELN('   Definition: ',Definition[pos]);
                             WRITELN;
                          END;
                    END;
                 WRITE('Press Enter to continue...');
                 READLN;
              END;     

           **PROCEDURE TestSearch;
              VAR
                 Search : LONGINT;
                 Found  : BOOLEAN;

              BEGIN
                 CLRSCR;
                 RESET(TestFile);
                 WRITELN('Enter Test Number: ');
                 WRITELN;
                 WRITELN('Latest Test Number: ', FILESIZE(TestFile));
                 GOTOXY(20,1);
                 READLN(Search);

                 Found := FALSE;
                 READ(TestFile,Test);
                 IF FILESIZE(TestFile) = 0 THEN
                    BEGIN
                       WRITELN('No tests have been saved');
                    END;

                 SEEK(TestFile, Search - 1);
                 IF Test.TestNo = Search THEN
                    BEGIN
                       Found := TRUE;
                       DisplayTest;
                    END;

                 IF NOT (Found) THEN
                    BEGIN
                       CLRSCR;
                       WRITELN('Error - No tests were found');
                       WRITELN;
                       WRITELN('Press Enter to continue...');
                       READKEY;
                    END;
              END;**

           PROCEDURE WrdOrDef;
              BEGIN
                 CLRSCR;
                    WRITE('Change word or definition? (W/D)');
                    WD := UPCASE(READKEY);

                    CASE WD OF
                       'W' : BEGIN
                                CLRSCR;
                                WRITELN('Old Word: ', Test.Word[Choice]);
                                WRITELN;
                                WRITE('Enter new word: ');
                                READLN(Test.Word[Choice]);
                             END;   
                       'D' : BEGIN
                                CLRSCR;
                                WRITELN('Old Definition: ', Test.Definition[Choice]);
                                WRITELN;
                                WRITE('Enter new definition: ');
                                READLN(Test.Definition[Choice]);
                             END;   
                    ELSE
                       WRITELN('Only enter W or D please..')
                    END;
              END;           

           PROCEDURE AmendTest;
              VAR
                 WD : CHAR;
                 Again : CHAR;

              BEGIN
                 REPEAT
                    TestSearch;
                    WRITELN;
                       GOTOXY(40,4);
                    WRITELN('Enter the number of the');
                       GOTOXY(35,5);
                    WRITELN('word/definition you wish to amend: ');
                       GOTOXY(70,5);
                    READLN(Choice);

                    CASE Choice OF
                       1  : BEGIN
                               WrdOrDef;  
                            END;
                       2  : BEGIN
                               WrdOrDef;
                            END;
                       3  : BEGIN
                               WrdOrDef;
                            END;
                       4  : BEGIN
                               WrdOrDef;
                            END;
                       5  : BEGIN
                               WrdOrDef;
                            END;
                       6  : BEGIN
                               WrdOrDef;
                            END;
                       7  : BEGIN
                               WrdOrDef;
                            END;
                       8  : BEGIN
                               WrdOrDef;
                            END;
                       9  : BEGIN
                               WrdOrDef;
                            END;
                       10 : BEGIN
                               WrdOrDef;
                            END;
                    ELSE
                       WRITELN('Only enter numbers 1 - 10');         
                    END;

                    SEEK(TestFile, FILEPOS(TestFile) - 1);
                    WRITE(TestFile,Test);
                    CLRSCR;
                    DisplayTest;
                    READLN;
                    CLRSCR;
                    WRITELN('Stop Amending Tests?');
                    WRITELN;
                    WRITELN;
                    WRITELN('Y - Yes');
                    WRITELN;
                    WRITELN('Otherwise, press any  other key to add another test');
                    Again := UPCASE(READKEY);       
                 UNTIL Again = 'Y';
              END;  

           **PROCEDURE AddTest;
              BEGIN
                 CLRSCR;
                 RESET(TestFile);
                 SEEK(TestFile,FILESIZE(TestFile));

                 Test.TestNo := 2;
                 FOR pos1 := 1 TO 10 DO
                    BEGIN
                       CLRSCR;
                       WRITELN('Enter Word ',pos1,': ');
                       READLN(Test.Word[pos1]);
                       WRITELN('Enter Definition ',pos1,': ');
                       READLN(Test.Definition[pos1]);
                    END;
                 WRITE(TestFile,Test);        
              END;**       


           BEGIN
              ASSIGN(TestFile,'C:\TestFile.dta');

              WRITELN('Welcome to the test update program');
              WRITELN;
              WRITE('Press any key to continue...');
              READLN;

              REPEAT
                 CLRSCR;
                 WRITELN('A: Search for a test');
                 WRITELN('B: Amend a test');
                 WRITELN('C: Add a test');
                 WRITELN;
                 WRITELN('E: Quit');
                 WRITELN;
                 WRITE('Enter Choice...');
                 MenuChoice := UPCASE(READKEY);

                 CASE MenuChoice OF
                    'A' : TestSearch;
                    'B' : AmendTest;
                    'C' : AddTest;
                 ELSE
                    WRITELN('Error - only enter A-E. Try Again.');
                 END;

              UNTIL MenuChoice = 'E';

              CLOSE(TestFile);
           END.

I have made bold the two procedures that are most likely to be causing this. Thank you in advance for the help

I tried to bold the procedures but it did not work. Procedures 'TestSearch' and 'AddTest' are the procedures in question. They are in the second program

Edited 2 Years Ago by tuisan: Forgot to add info to help my helpers

In the TestSearch procedure you SEEK to the last record in the file but you don't read that record before checking the Test.TestNo

Thanks so much but I figured out what was wrong. In testsearch, I call for display test and in displaytest, there is a READ which moves the file pointer to the next record and so displays a different test.

This article has been dead for over six months. Start a new discussion instead.