StartprogrammingusingObjectPascal:CarsDatabaseProgram

From 흡혈양파의 번역工房
Jump to: navigation, search

자동차 데이터베이스 프로그램

Program CarRecords;

{$mode objfpc}{$H+}

uses
    {$IFDEF UNIX}{$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}{$ENDIF}
    Classes, SysUtils
    { you can add units after this };

type
    TCar = record
        ModelName: string[20];
        Engine: Single;
        ModelYear: Integer;
    end;
var
    F: file of TCar;
    Car: TCar;
begin
    AssignFile(F, 'cars.dat');

    if FileExists('cars.dat') then
    begin
        FileMode:= 2; // Open file for read/write

        Reset(F); // open file

        Writeln('File already exist, opened for append');

        // Display file records
        while not Eof(F) do
        begin
            Read(F, Car);
            Writeln;
            Writeln('Car # ', FilePos(F), ' --------------------------');
            Writeln('Model : ', Car.ModelName);
            Writeln('Year : ', Car.ModelYear);
            Writeln('Engine: ', Car.Engine);
        end
    end
    else // File not found, create it
    begin
        Rewrite(F);
        Writeln('File does not exist, created');
    end;

    Writeln('Please input car informaion, ',
        'write x in model name to exit');
    Writeln('File pointer position at record # ', FilePos(f));
    repeat
        Writeln('--------------------------');
        Write('Input car Model Name : ');
        Readln(car.ModelName);
        if Car.ModelName <> 'x' then
        begin
            Write('Input car Model Year : ');
            Readln(car.ModelYear);
            Write('Input car Engine size: ');
            Readln(car.Engine);
            Write(F, Car);
        end;
    until Car.ModelName = 'x';
    CloseFile(F);

    Write('Press enter key to close..');
    Readln;
end.

앞의 예제에서는 자동차 정보를 정의하기 위해 TCar 형을 선언했습니다. 첫번째 필드(ModelName)는 문자열 변수지만, 최대 길이[20]를 제한했습니다.

ModelName: string[20];

파일에서 사용하기 전에 선언한 문자열 변수를 사용할텐데, 기본 ANSI 문자열 변수는 메모리에서 제각각의 제한이 없는 저장 형태를 지니고 있지만, 형식적 파일에 대해서는 모든 데이터 형의 폭을 정하는 것이 좋기 때문입니다.