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

Howdy, Stranger!

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

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

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

rockzrockz Posts: 1Member
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

  • Crono84Crono84 Posts: 6Member
    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]


  • Actor21Actor21 Posts: 35Member
    [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.