Delphi

Stian Søiland, IT 111, øvingsgruppe 15 (stud.ass. Kari Alvheim)

Delphi - Øving 5- Oppgave 2

Oppgave 2
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Registrering: TGroupBox;
    Edit3: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const AntallProdukter=10;
      AntallAnsatte1=6;
      AntallAnsatte2=6;

type matrise = array[1..antallprodukter] of integer;
     produkttype = record
          betegnelse : string[10];
              solgte : integer;
                pris : real;
                  end;

     produktfiltype = file of produkttype;
     selgertype = record
                navn : string[25];
               solgt : matrise;
           provisjon : real;
                  end;
     selgerfiltype = file of selgertype;

var
  Form1: TForm1;
   produktfil : produktfiltype;
      produkt : produkttype;
    selgerfil : selgerfiltype;
       selger : selgertype;


implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
 var i:integer;

begin
// initierer produktfil
 produkt.betegnelse := '';
 produkt.solgte := 0;
 produkt.pris := 0;

 AssignFile(produktfil,edit1.text);
 Rewrite(produktfil);
 // skriver en blank post for hvert produkt
 for i:=0 to (AntallProdukter-1) do
  begin
   write(produktfil,produkt);
  end;

 CloseFile(produktfil);

// initierer selgerfil
 selger.navn := 'Tom Hansen';
 selger.provisjon := 0;
 for i:=1 to AntallProdukter do
  begin
   selger.solgt[i] := 0;
  end;

 AssignFile(selgerfil,edit2.text);
 Rewrite(selgerfil);

 seek(selgerfil,0);
 // skriver en blank post for hvert selger
 for i:=0 to (AntallAnsatte1+AntallAnsatte2-1) do
  begin
   write(selgerfil,selger);
  end;

 CloseFile(selgerfil);

 // Gir beskjed til brukeren om at alt sikkert er iorden

ShowMessage('Nå er begge filene tomme!');

end;

// Registreringsprosedyre uten provisjonsberegning
procedure TForm1.Button2Click(Sender: TObject);

 procedure LeggTilSalg(selgernr,produktnr,antall:integer);
  var post:integer;
  begin
   // Finner korrekt postnummer
   if selgernr > 2001 then post := selgernr-2001
    else post := selgernr-1001;

   // åpner selgerfil
   AssignFile(selgerfil,edit2.text);
   Reset(selgerfil);
   // finner riktig post
   seek(selgerfil,post);
   // leser inn post
   read(selgerfil,selger);

   // oppdaterer og skriver post
   selger.solgt[produktnr] := selger.solgt[produktnr] + antall;
   write(selgerfil,selger);

   // lukker selgerfil
   closefile(selgerfil);

   // åpner produktfil
   AssignFile(produktfil,edit1.text);
   Reset(produktfil);
   // finner riktig post
   seek(produktfil,produktnr-1);
   // leser inn post
   read(produktfil,produkt);

   // oppdaterer og skriver post
   produkt.solgte := produkt.solgte + antall;
   write(produktfil,produkt);

   // lukker produktfil
   closefile(produktfil);

  end;


var temp1,temp2,temp3 : integer;
begin
  temp1 := StrToInt(Edit3.text);
  temp2 := StrToInt(Edit13.text);
  temp3 := StrToInt(Edit12.text);
  // Sjekker om selgernummeret er på villspor
  if (temp1 < 1001) or (temp1 > (2000 + AntallAnsatte2))
      or ((temp1 > (1000 + AntallAnsatte1)) and (temp1 < 2001)) then
   begin
    ShowMessage('Du har tastet et ugyldig selgernummer!');
   end
  else
   begin
    // Sjekker om produktnummeret er på villspor
    if (temp2 < 1) or (temp2 > AntallProdukter) then
     begin
      ShowMessage('Du har tastet et ugyldig produktnummer!');
     end
    else
     begin
        LeggTilSalg(temp1,temp2,temp3);
     end;
   end;
end;

// Registreringsprosedyre som også tar med provisjon
procedure TForm1.Button3Click(Sender: TObject);

type salgsprovtype = array of array[0..3] of integer;

var salgsprov : salgsprovtype;

 // prosedyre for å legge til salg
 procedure LeggTilSalg(selgernr,produktnr,antall:integer);

  // funksjon for å finne provisjon
  function provisjon(salgsprov: salgsprovtype;
                 produktnr,antall: integer;
                      pris: real):real;
   var temp:real;
       i:integer;
   begin
    temp := null;
    for i:=low(salgsprov) to high(salgsprov) do
     begin
      // Gjennomløper hele matrisen. Den siste provisjonssatsen som virker
      // vil bli plassert i temp-variabel
      if salgsprov[i,0] = produktnr then
        if (salgsprov[i,1] <= antall) and (salgsprov[i,2] >= antall) then
         temp := salgsprov[i,3];
     end;
   // Riktig provisjon regnes ut og returneres fra funksjonen
      provisjon := pris * antall * temp  100;
   end;


  var      post:integer;
      temp:real;
  begin
   // Finner korrekt postnummer
   if selgernr > 2001 then post := selgernr-2001
    else post := selgernr-1001;

   // åpner produktfil
   AssignFile(produktfil,edit1.text);
   Reset(produktfil);
   // finner riktig post
   seek(produktfil,produktnr-1);
   // leser inn post
   read(produktfil,produkt);

   // oppdaterer og skriver post
   produkt.solgte := produkt.solgte + antall;
   write(produktfil,produkt);

   // lukker produktfil
   closefile(produktfil);

   // Kaller prosedyre for å finne riktig provisjon
   temp := provisjon(salgsprov,produktnr,antall,produkt.pris);

   // åpner selgerfil
   AssignFile(selgerfil,edit2.text);
   Reset(selgerfil);
   // finner riktig post
   seek(selgerfil,post);
   // leser inn post
   read(selgerfil,selger);

   // oppdaterer og skriver post
   selger.solgt[produktnr] := selger.solgt[produktnr] + antall;
   selger.provisjon := selger.provisjon + temp;
   write(selgerfil,selger);

   // lukker selgerfil
   closefile(selgerfil);
  end;

  // hovedprogram

var temp1,temp2,temp3 : integer;
begin
  temp1 := StrToInt(Edit3.text);
  temp2 := StrToInt(Edit13.text);
  temp3 := StrToInt(Edit12.text);
  // Sjekker om selgernummeret er på villspor
  if (temp1 < 1001) or (temp1 > (2000 + AntallAnsatte2))
      or ((temp1 > (1000 + AntallAnsatte1)) and (temp1 < 2001)) then
   begin
    ShowMessage('Du har tastet et ugyldig selgernummer!');
   end
  else
   begin
    // Sjekker om produktnummeret er på villspor
    if (temp2 < 1) or (temp2 > AntallProdukter) then
     begin
      ShowMessage('Du har tastet et ugyldig produktnummer!');
     end
    else
     begin
        LeggTilSalg(temp1,temp2,temp3);
     end;
   end;
end;

end.

 


© Stian Søiland 1998

Valid HTML 4.0!