Stian Søiland, IT 111, øvingsgruppe 15 (stud.ass. Kari Alvheim)
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.