how to update record in array in file? please check my existed code

hi, im currently making a program where it records student's points, and teachers can update the points if they want. so now im on the procedure of update upon the existed points, but i've got this problem where after i updated one student's points, if i check back ,all my other student's records are gone! only left the one who updated correctly...i think i know what's the problem, because i used rewrite in the end of the procedure, but i just cant find another way of where i can successfully update one's data but keep others as well, please someone help!

it also be great if you can give me extra tips of how to improve my code, thanks!

[code]Procedure AddPoints;

var newPoints, Sum, i, count: Integer;
TempStudent: TStudent;

begin
Clrscr;
Reset (StudentFile);

{Put all the persons in an array.}
NumStudents:=0;
while not eof(Studentfile) do
begin
inc(NumStudents); // make NumStudents =1;
read(Studentfile,Students[NumStudents]) // so it reads every stuents in 1 array;
end;

write('Enter the Student ID: ');
readln(id);
i:=1;
while (i<=NumStudents) and (Students[i].id<>id) do
inc(i);
{Display that person's detail from the array.}

if id = Students[i].id then
Writeln (' Please enter the new points');
Readln (newPoints);

Sum:= Students[i].points + newPoints;
tempStudent.points := Sum;

Students[i].points := TempStudent.points;

assign(StudentFile,'Student.dat');
rewrite(StudentFile);

Write (StudentFile, Students[i]);
Closefile(StudentFile); [/code]

Comments

  • Well you first read the file recursive record by record witch tells me that the file is a file of type TStudent
    and on the end You try to put the whole array by one time to it
    try this
    [code]
    assign(StudentFile,'Student.dat');
    rewrite(StudentFile);

    [b]i:=0;
    repeat [/b]
    Write (StudentFile, Students[i]);
    [b]inc(i);
    until i>NumStudents;[/b]
    Closefile(StudentFile);
    [/code]
    or You can try this two
    [code]
    Write (StudentFile, Students);
    {without the [i]}
    [/code]
    and if needed the count of TStudent records to write
    [code]
    Write (StudentFile, Students,[b]NumStudents[/b]);
    [/code]


  • [code]
    Procedure AddPoints;

    type
    TStudent = record
    id : string ;
    points : integer
    end ;

    var
    id : string ;
    newPoints : Integer ;
    TempStudent : TStudent ;
    StudentFile : file of TStudent ;
    i, n : longint ;

    begin
    Clrscr ;

    write('Enter the Student ID: ') ;
    readln(id) ;

    assign (StudentFile, 'Student.dat') ;
    Reset (StudentFile) ;
    n := filesize(StudentFile) - 1 ; { index of last record in file }
    for i := 0 to n do begin
    seek(StudentFile, i) ;
    read(StudentFile, Tempstudent) ;
    if TempStudent.id = id then begin
    Writeln (' Please enter the new points') ;
    Readln (newPoints) ;
    with tempstudent do
    points := points + newPoints ;
    seek(StudentFile, i) ;
    write(StudentFile, TempStudent) ;
    close(StudentFile) ;
    exit
    end
    end ;
    Close (StudentFile) ;
    {
    if we reach this point then the record was not found
    }
    writeln ('Student id ', id, ' not found.') ;
    writeln ('Hit ENTER to continue') ;
    readln
    end ;
    [/code]
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories