
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.