Rīgas Tehniskā
Universitāte
Datorzinātnes un informācijas tehnoloģijas fakultāte
Informātikas un programmēšanas katedra
Risinājumu algoritmizācija un programmēšana (2.daļa)
Studiju darbs
Numuru uzskaites sistēma viesnīcai
1
Darba uzdevums
Izveidot numuru uzskaites sistēmu viesnīcai. Failā ir jāglabā visu
nepieciešamo informāciju lai nodrošinātu stabilu viesnīcas darbību, ērtu
ierakstu atlasi, sakārtošanu un visa veida darbības ar ierakstiem.
Ir jāglabā sekojoša informācija:
·
Numurs
·
Istabas
·
Datums līdz kuram ir aizņemts
·
Cena par D/N
·
Viesa vārds un uzvārds
1.1
Anotācija
Tiek piedāvāta
viesnīcas uzskaites sistēma, kas var saturēt informāciju par:
·
Numuru
·
Istabu skaita numurā
·
Datumu līdz kuram numurs ir
aizņemts
·
Viesa vārdu un uzvārdu
·
Cenu par diennakti
·
Vai numur ir brīvs vai aizņemts
Sistēmai ir ļoti stingra kontrole pret datu korektumu un testēšanas
rezultāti apliecināja to stabilu darbību visos apstākļos.
2 Saturs
Numuru
uzskaites sistēma viesnīcai................................................................................................................................ 1
1 Darba uzdevums................................................................................................................................................................................ 2
1.1 Anotācija .................................................................................................................................................................................. 2
2 Saturs.................................................................................................................................................................................................... 3
3 Pasūtītāja prasības............................................................................................................................................................................ 4
4 Realizācijas projekts......................................................................................................................................................................... 4
4.1 Apraksts .................................................................................................................................................................................... 4
5 Programmatūras uzbūve.................................................................................................................................................................. 4
6 Programmatūras specifikācija........................................................................................................................................................ 6
6.1 Makro shema............................................................................................................................................................................ 6
6.2 Blokshemas............................................................................................................................................................................... 6
6.2.1 Izvelne.............................................................................................................................................................................. 6
6.2.2 Fdelete............................................................................................................................................................................... 7
6.2.3 FSortIstSk......................................................................................................................................................................... 8
6.2.4 Ffiltre................................................................................................................................................................................. 9
6.3 Moduļa FMOD
specifikācija............................................................................................................................................. 10
6.3.1 Apraksts......................................................................................................................................................................... 10
6.3.2 Interfeiss......................................................................................................................................................................... 10
6.4 Moduļa UMOD
specifikācija............................................................................................................................................. 11
6.4.1 Apraksts......................................................................................................................................................................... 11
6.4.2 Interfeiss......................................................................................................................................................................... 11
7 Testēšanas metodika ..................................................................................................................................................................... 12
8 Programmu pirmteksti.................................................................................................................................................................... 12
9 Instrukcija lietotājam ................................................................................................................................................................... 27
10 Secinājumi...................................................................................................................................................................................... 28
3
Pasūtītāja prasības
·
Viesu uzskaites sistēmā jāparedz
iespēja reģistrēt līdz 200 numuru, par katru no tiem uzrādot obligātos
parametrus: Vārdu, Uzvārdu, numuru,
istabu skaitu, datumu līdz kuram numurs ir aizņemts, cenu par diennakti, vai
numurs ir aizņemts.
·
Viesnīcas darbinieki var sākt
darbu ar tukšu datubāzi vai kādas citas viesnīcas datubāzi to papildinot,
izslēdzot liekos ierakstus, labojot datus utt.
·
Lietojot programmu tiek dota
iespēja atrast ierakstu (vai ierakstu virkni pēc vienas vai vairākām pazīmes).
4 Realizācijas projekts
4.1
Apraksts
·
Veidosim failu apkalpošanas
sistēmu.
·
Paredzēsim visu datu glabāšanu
vienā failā.
·
Lai darbošanās būtu efektīvāka,
ļausim lietotājam sakārtot ierakstus pēc: istabu numura, istabu skaita, viesu
uzvārdiem.
·
Lai atvieglot programmas
izmantošanu un paātrināt darbības izveidosim atlases sistēmu, kas ļaus ātri
atlasīt visus brīvos numurus, visdārgāko numuru.
·
Papildus tiks izveidota sistēma
kas ļaus atlasīt ierakstus pēc konkrēta parametra.
·
Ierakstiem būs sekojoša
struktūra:
1.
numurs: 0..100;
2.
istabu skaits: 1..9;
3.
datums: 00.00.00 ;
4.
vārds: 20 simboli;
5.
uzvārds: 20 simboli;
6.
cena: 00,00 ;
7.
aizņemts: 1 vai 0;
5
Programmatūras uzbūve
Sistēmas
pamats būs:
-
tiešās pieejas fails – datubāze
ar numuriem;
-
modulis kas satur apakšprogrammas
darbam ar šāda veida failu (FMOD) ;
-
modulis programmas –lietotāja
interfeisam, kas pārbaudīs ievadīto datu atbilstību un padarīs programmu ērtu
lietotājam un veiks arī papildus funkcijas (UMOD).
Faili saturēs šāda tipa ierakstus:
type DBrec = record
numurs:
0..100;
istabusk:
1..9;
datums: data;
vards: str20;
uzvards:
str20;
cena: real;
aiznemts:jn;
Paredzēsim modulī šādas failu apkalpošanas funkcijas
1.
procedure Fget – pēc ieraksta
numura atgriež noteikta ieraksta vērtības
2.
procedure Fopen - faila atvēršana
3.
procedure Fnewrec – ļauj
pievienot failam jaunu ierakstu
4.
procedure Fclose - ļauj slēgt failu
5.
procedure Fcreate – veido jaunu
failu
6.
procedure Fview - attēlot faila saturu
7.
procedure Frewrite – pārrakstīt
visus datus konkrētā ierakstā
8.
procedure Fdelete – izdzēst
konkrēto ierakstu
9.
procedure Frecsk - nosaka ierakstu skaitu failā
10.
procedure FsortIstSk – sakārtot
ierakstus pēc istabu skaita
11.
procedure FSortUzv – sakārtot ierakstus pēc viesu uzvārdiem
12.
procedure Fviewfree – attēlot
visus brīvus numurus
13.
procedure Fexp – parādīt
visdārgāko numuru
14.
procedure FSortNum – sakārtot ierakstus pēc istabu numura
15.
procedure FFiltre - atlasīt ierakstus pēc ievadīta parametra
16.
procedure FReWriteS – Pārrakstīt
viesa datus
6 Programmatūras specifikācija
6.1 Makro shema
6.2
Blokshemas
6.2.1
Izvelne
6.2.2
Fdelete
6.2.3
FSortIstSk
6.2.4
Ffiltre
6.3 Moduļa
FMOD specifikācija
6.3.1
Apraksts
Modulis FMOD nodrošina failu darbības ar tiešās pieejas
failu, kura pieraksti satur DBrec tipa ierakstus, kas glabā visus nepieciešamos
datus.
Modulis satur piecas
apakšprogrammas, kas nodrošina sekojošas faila darbības:
1.
jauna faila izveide;
2.
esoša faila atvēršana;
3.
faila satura izvade uz ekrāna;
4.
viena ieraksta izmaiņa failā;
5.
faila aizvēršana.
Modulis veidots tā, ka tā
apakšprogrammas kontrolē faila stāvokli un gadījumā, ja fails nav atvērts izdod
paziņojumu un turpina darbu, pieprasot veikt citu darbību.
6.3.2 Interfeiss
Elements
|
Apraksts
|
type DBrec = record
numurs: 0..100;
istabusk: 1..9;
datums: data;
vards: str20;
uzvards: str20;
cena: real;
aiznemts:jn;
|
Nosaka faila ieraksta struktūru.
Tips STR20, jn un data deklarēti moduli FMOD
|
type DB = file of DBrec;
|
Apkalpojamā
faila identifikatora tips
|
type data = record
d:1..31;
m:1..12;
g:00..99;
|
Datu
tipa data apraksts. Satur sevi datumu.
|
type str20 = string[20];
|
String
tipa mainīgais vārda un uzvārda glabāšanai.
|
type jn=0..1;
|
Ērtākai
lietošanai boolean variants ar vērtībām 0 un 1.
|
procedure
Fget (var fails:db; var rec:dbrec; ier:integer; var open:integer; var
kluda:integer);
|
Procedūra
atlasa no datubāzes ierakstu ar numuru ier un piešķir to ierakstam rec.
|
procedure
Fopen (var fails:db; filename:string; var open:integer; var kluda:integer);
|
Procedūra
atver failu un piesaista to filename, kā arī maina open parametru uz 1.
|
procedure Fnewrec (var
fails:db; rec:dbrec; var iersk:integer; var open:integer; var kluda:integer);
|
Procedūra
ieraksta datubāzēs beigās jaunu ierakstu ar vērtībām no rec.
|
procedure Fclose (var
fails:db; var open:integer; var kluda:integer);
|
Procedūra
sledz fails failu un nomaina open uz 0.
|
procedure Fcreate (var
fails:db; filename:string; var iersk:integer; var kluda:integer);
|
Procedūra
veido jauno failu ar nosaukumu filename un ieraktu skaitu iersk.
|
procedure Fview
(var fails:db; var iersk:integer; var open:integer; var
kluda:integer);
|
Procedūra
attēlo fails faila saturu.
|
procedure
Frewrite (var fails:db; poz:integer; Rec:dbrec; var open:integer; var
kluda:integer);
|
Procedūra
pārraksta esoša ieraksta ar numuru poz ierakstu ar rec saturu.
|
procedure
Fdelete (var fails:db; i:integer; var iersk:integer; var open:integer; var kluda:integer);
|
Procedūra
dzēš ierakstu ar numuru i un pārvieto ierakstus lai aizpildīt caurumu.
|
procedure
Frecsk (var fails:db; var
iersk:integer; var open:integer; var kluda:integer);
|
Procedūra
nosaka ierakstu skaitu faila fails un iedod to iersk.
|
6.4
Moduļa
UMOD specifikācija
6.4.1 Apraksts
Modulis UMOD nodrošina datu
atbilstības pārbaudi un nodod tos FMOD modulim. Visas datu apmaiņas darbības
tiek veiktas izmantojot procedūras Uievrec, Upoz, Ucreate, Uopenfile, UievrecS.
Modulis satur sekojošas
apakšprogrammas:
1.
dialogs, kas ļauj ievadīt ieraksta pozīciju
2.
dialogs, kas ļauj ievadīt faila nosaukumu
3.
dialogs kas ļauj ievadīt ieraksta datus
4.
dialogs kas ļauj ievadīt atverama faila
nosaukumu
6.4.2
Interfeiss
Elements
|
Apraksts
|
procedure Uievrec (var temprec:dbrec);
|
Procedūra ļauj ievadīt dbrec
datus un nodrošina to vērtību atbilstību tipiem. Dbrec ir nodefīnēts modulī
FMOD.
|
procedure Upoz (var poz:integer; var
iersk:integer);
|
Procedūra
ļauj ievadīt apstradājama ieraksta numuru un nodrošina to atbilstību, t.i.
Neļauj tam pārsniegt ierakstu skaitu failā.
|
Procedure Uopenfile (var filename:string);
|
Procedūra
ļauj ievadīt atverama faila nosaukumu un nodrošina lauku atbilstību.
|
procedure Ucreate (var fails:string; var iersk:integer);
|
Procedūra
ļauj ievadīt veidojama faila nosaukumu un nodrošina lauku atbilstību.
|
procedure UievrecS (var temprec:dbrec);
|
Procedūra
ļauj ievadīt viesa datus izmaiņām konkrēta ierakstā.
|
7
Testēšanas metodika
Lai pārliecinātos par izstrādātā
moduļa programmatūras pareizību un tās pielietojamību failu sistēmās izpildīsim
sekojošas darbības:
1.
Faila radīšana – apskatīšana – modificēšana -
apskatīšana.
2.
Esoša faila atvēršana – apskatīšana –modificēšana –
apskatīšana
3.
Pārbaudīt kļūdu situācijas:
1.
neesoša faila atvēršanas mēģinājumu;
2.
ievadīt faila ieraksta numura vietā burtu.
3.
Ievadīt datuma vieta burtus
4.
Izvēlnē ievadīt cipara vietā burtu
5.
Ievadīt ieraksta numura vietā burtus
4.
Pārbaudīt iespējas viena seansa laikā apskatīt un
modificēt vairākus failus.
5.
Izpildīto darbību rezultāti tiks kontrolēti ar
programmu FAR MANAGER apskatot failu sarakstus un to saturu.
8
Programmu pirmteksti
program main;
uses fmod,umod,crt;
label sakums;
var
op: string;
filename: string;
fileopen: integer;
emptyrec: dbrec;
temprec: dbrec;
parrec: dbrec;
datubaze: db;
poz:integer;
error:integer;
recsk:integer;
par:string;
procedure menu;
begin
writeln('');
writeln('1
- izveidot jaunu failu');
writeln('2
- atvert esosu failu');
writeln('3
- apskatit faila saturu');
writeln('4
- parrakstit ierakstu');
writeln('5
- izmainit viesa datus');
writeln('6
- ielikt jaunu ierakstu');
writeln('7
- dzest ierakstu');
writeln('8
- sakartot ierakstus pec istabu skaita');
writeln('9
- sakartot ierakstus pec viesu uzvardiem');
writeln('10
- sakartot ierakstus pec istabu numuriem');
writeln('11
- atlasit visus brivus numurus');
writeln('12
- atlasit dargako numuru');
writeln('13
- atlasit ierakstus pec parametra');
writeln('14
- aizvert failu');
writeln('15
- beigt darbu');
end;
begin
fileopen:=0;
recsk:=0;
emptyrec.numurs:=0;
clrscr;
sakums:
menu;
readln(op);
if op = '1' then begin
{jauns fails}
Fclose(datubaze,fileopen,error);
Ucreate (filename,recsk);
Fcreate(datubaze,filename,recsk,error);
end;
if op = '2' then begin
{atvert failu}
Uopenfile(filename);
Fopen(datubaze,filename,fileopen,error);
if(fileOpen=1) then writeln('* Fails
',filename,' atverts sekmigi!')
else
begin
writeln('* Failu ',filename,' atvert
neizdevaas!');
end;
Frecsk(datubaze,recsk,fileopen,error);
end;
if op = '3' then begin
{attelot faila saturu}
Fview(datubaze,recsk,fileopen,error);
end;
if op = '4' then begin
{parrakstit ierakstu}
Writeln('*
Ievadiet mainama ieraksta numuru:');
Upoz(poz,recsk);
UIevRec(temprec);
Frewrite(datubaze,poz,temprec,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '5' then begin
{izmainit viesa datus}
Writeln('*
Ievadiet mainama ieraksta numuru:');
Upoz(poz,recsk);
UievrecS(temprec);
FReWriteS
(datubaze,poz,temprec,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '6' then begin
{jauns ieraksts}
Uievrec(temprec);
Fnewrec (datubaze,temprec,recsk,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '7' then begin
{dzest ierakstu}
Writeln('* Ievadiet ieraksta numuru: ');
Upoz(poz,recsk);
Fdelete (datubaze,poz,recsk,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '8' then begin
{sortet pec istabu skaita}
Fsortistsk (datubaze,recsk,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '9' then begin
{sortet pec uzvarda}
FSortUzv(datubaze,recsk,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '10' then begin
{sortet pec uzvarda}
FSortNum(datubaze,recsk,fileopen,error);
Fview(datubaze,recsk,fileopen,error);
end;
if op = '11' then begin
{paradit brivus numurus}
Fviewfree(datubaze,recsk,fileopen,error);
end;
if op = '12' then begin
{paradit dargako numuru}
Fexp(datubaze,recsk,fileopen,error);
end;
if op = '13' then begin
{atlasit pec parametra}
Uievrec(temprec);
FFiltre(datubaze,recsk,temprec,fileopen,error);
end;
if op = '14' then begin
{aizvert failu}
Fclose(datubaze,fileopen,error);
Writeln('* Fails ir aizverts');
end;
if op = '15' then begin
{exit}
exit;
end
else
begin
goto sakums;
end;
goto sakums;
end.
unit Umod;
interface
uses Crt,fmod;
procedure Uievrec (var temprec:dbrec);
procedure Upoz (var poz:integer; var
iersk:integer);
procedure Ucreate (var fails:string; var iersk:integer);
Procedure Uopenfile (var
filename:string);
procedure UievrecS (var temprec:dbrec);
implementation
procedure UievrecS(var
temprec:dbrec);
label s1;
label s2;
label s3;
label s4;
label s5;
label s6;
begin
s1:
writeln('* Vards:');
{$I-}
readln(temprec.vards);
{$I+}
if(IOResult<>0) then
begin
writeln('* Meginiet velreiz!');
goto s1;
end;
s2:
writeln('* Uzvards:');
{$I-}
readln(temprec.uzvards);
{$I+}
if(IOResult<>0) then
begin
writeln('* Meginiet velreiz!');
goto s2;
end;
s3:
writeln('* Diena (1-31):');
{$I-}
readln(temprec.datums.d);
{$I+}
if(IOResult<>0) or
(temprec.datums.d > 31) or (temprec.datums.d <1 o:p="" then="">1>
begin
writeln('* Meginiet velreiz!');
goto s3;
end;
s4:
writeln('* Menesis (1-12):');
{$I-}
readln(temprec.datums.m);
{$I+}
if(IOResult<>0) or
(temprec.datums.m > 12) or (temprec.datums.m <1 nbsp="" o:p="" then="">1>
begin
writeln('* Meginiet velreiz!');
goto s4;
end;
s5:
writeln('* Gads (00-99):');
{$I-}
readln(temprec.datums.g);
{$I+}
if(IOResult<>0) or
(temprec.datums.g > 99) or (temprec.datums.g <00 o:p="" then="">00>
begin
writeln('* Meginiet velreiz!');
goto s5;
end;
s6:
writeln('* Vai ir aiznemts (0/1):');
{$I-}
readln(temprec.aiznemts);
{$I+}
if(IOResult<>0) or
(temprec.aiznemts<0 or="" temprec.aiznemts="">1) then 0>
begin
writeln('* Meginiet velreiz!');
goto s6;
end;
end;
procedure Uievrec(var
temprec:dbrec);
label s1;
label s2;
label s3;
label s4;
label s5;
label s6;
label s7;
label s8;
label s9;
begin
s1:
writeln('* Numurs (1-100):');
{$I-}
readln(temprec.numurs);
{$I+}
if(IOResult<>0) or
(temprec.numurs<1 or="" temprec.numurs="">100) then 1>
begin
writeln('* Meginiet velreiz!');
goto s1;
end;
s2:
writeln('* Istabu skaits (1-9):');
{$I-}
readln(temprec.istabusk);
{$I+}
if(IOResult<>0) or
(temprec.istabusk<1 or="" temprec.istabusk="">9) then 1>
begin
writeln('* Meginiet velreiz!');
goto s2;
end;
s3:
writeln('* Diena (1-31):');
{$I-}
readln(temprec.datums.d);
{$I+}
if(IOResult<>0) or
(temprec.datums.d > 31) or (temprec.datums.d <1 o:p="" then="">1>
begin
writeln('* Meginiet velreiz!');
goto s3;
end;
s4:
writeln('* Menesis (1-12):');
{$I-}
readln(temprec.datums.m);
{$I+}
if(IOResult<>0) or
(temprec.datums.m > 12) or (temprec.datums.m <1 o:p="" then="">1>
begin
writeln('* Meginiet velreiz!');
goto s4;
end;
s5:
writeln('* Gads (00-99):');
{$I-}
readln(temprec.datums.g);
{$I+}
if(IOResult<>0) or
(temprec.datums.g > 99) or (temprec.datums.g <00 o:p="" then="">00>
begin
writeln('* Meginiet velreiz!');
goto s5;
end;
s6:
writeln('* Cena par D/N:');
{$I-}
readln(temprec.cena);
{$I+}
if(IOResult<>0) or
(temprec.cena <0 o:p="" then="">0>
begin
writeln('* Meginiet velreiz!');
goto s6;
end;
s7:
writeln('* Vai ir aiznemts (0/1):');
{$I-}
readln(temprec.aiznemts);
{$I+}
if(IOResult<>0) or
(temprec.aiznemts<0 or="" temprec.aiznemts="">1) then 0>
begin
writeln('* Meginiet velreiz!');
goto s7;
end;
s8:
writeln('* Vards:');
{$I-}
readln(temprec.vards);
{$I+}
if(IOResult<>0) then
begin
writeln('* Meginiet velreiz!');
goto s8;
end;
s9:
writeln('* Uzvards:');
{$I-}
readln(temprec.uzvards);
{$I+}
if(IOResult<>0) then
begin
writeln('* Meginiet velreiz!');
goto s9;
end;
end;
procedure Upoz(var
poz:integer; var iersk:integer);
label sakums;
begin
if iersk=0 then exit;
sakums:
{$I-}
readln(poz);
{$I+}
if(IOResult<>0) or (poz>iersk) or (poz<0 o:p="" then="">0>
begin
writeln('* Meginiet velreiz!');
goto sakums;
end;
end;
procedure Ucreate (var
fails:string; var iersk:integer);
label sakums;
begin
sakums:
write('*
Ievadi faila vaardu: ');
{$I-}
readln(fails);
{$I+}
writeln('*
Ievadi ierakstu skaitu: ');
{$I-}
readln(iersk);
{$I+}
if(IOResult<>0) then
begin
writeln('* Meginiet velreiz!');
goto sakums;
end;
end;
Procedure Uopenfile(var
filename:string);
label sakums;
begin
sakums:
write('*
Ievadi faila vaardu: ');
{$I-}
readln(filename);
{$I+}
if(IOResult<>0) then
begin
writeln('* Meginiet velreiz!');
goto sakums;
end;
end;
end.
unit fmod;
interface
type data = record
d:1..31;
m:1..12;
g:00..99;
end;
type jn=0..1;
type str20 = string[20];
type DBrec = record
numurs: 0..100;
istabusk: 1..9;
datums: data;
vards: str20;
uzvards: str20;
cena: real;
aiznemts:jn;
end;
type DB = file of DBrec;
procedure Fget (var
fails:db; var rec:dbrec; ier:integer; var open:integer; var kluda:integer);
procedure Fopen (var
fails:db; filename:string; var open:integer; var kluda:integer);
procedure Fnewrec (var fails:db; rec:dbrec; var
iersk:integer; var open:integer; var kluda:integer);
procedure Fclose (var
fails:db; var open:integer; var kluda:integer);
procedure Fcreate (var fails:db; filename:string;
var iersk:integer; var kluda:integer);
procedure Fview (var
fails:db; var iersk:integer; var open:integer; var kluda:integer);
procedure Frewrite (var fails:db; poz:integer;
Rec:dbrec; var open:integer; var kluda:integer);
procedure Fdelete (var fails:db; i:integer; var
iersk:integer; var open:integer; var
kluda:integer);
procedure Frecsk (var
fails:db; var iersk:integer; var open:integer; var kluda:integer);
procedure FSortIstSk(var
fails:db; iersk:integer; var open:integer; var kluda:integer);
procedure FSortUzv (var fails:db; iersk:integer; var
open:integer; var kluda:integer);
procedure Fviewfree (var
fails:db; var iersk:integer; var open:integer; var kluda:integer);
procedure Fexp (var fails:db; var
iersk:integer; var open:integer; var kluda:integer);
procedure FSortNum (var fails:db; iersk:integer; var
open:integer; var kluda:integer);
procedure FFiltre (var fails:db; var iersk:integer; var
temprec:dbrec; var open:integer; var kluda:integer);
procedure FReWriteS (var fails:db; poz:integer; Rec:dbrec;
var open:integer; var kluda:integer);
implementation
uses crt;
procedure Ffiltre (var fails:db; var iersk:integer; var
temprec:dbrec; var open:integer; var kluda:integer);
var
i :integer;
j:integer;
rec:dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
clrscr;
i:=0;
seek(fails,i);
writeln('/ N-rs / Ist.sk.
/ Datums / Cena / Aizn. /
Vards / Uzvards
/');
for i:=0 to iersk do
begin
read(fails,rec);
j:=0;
if rec.numurs = temprec.numurs then
begin
j:=j+1;
end;
if rec.istabusk = temprec.istabusk then
begin
j:=j+1;
end;
if (rec.datums.d = temprec.datums.d) or (rec.datums.m = temprec.datums.m) or (rec.datums.g = temprec.datums.g) then
begin
j:=j+1;
end;
if rec.cena = temprec.cena then
begin
j:=j+1;
end;
if rec.aiznemts = temprec.aiznemts then
begin
j:=j+1;
end;
if (Pos(rec.vards,temprec.vards) > 0) or
(rec.vards=temprec.vards) then
begin
j:=j+1;
end;
if (Pos(rec.uzvards,temprec.uzvards) > 0) or
(rec.uzvards=temprec.uzvards) then
begin
j:=j+1;
end;
if j > 0 then
begin
Write('#:', i,'
',rec.numurs,' / ', rec.istabusk);
Write(' /
',rec.datums.d,'.',rec.datums.m,'.',rec.datums.g,'.',' / ');
Write(rec.cena:2:2);
Write(' / ',rec.aiznemts,' / ');
Writeln(' / ',rec.vards,' / ',rec.uzvards,' / ');
end;
end;
seek(fails,0);
end;
procedure Fexp(var
fails:db; var iersk:integer; var open:integer; var kluda:integer);
var
i,num: integer;
cena: real;
rec: dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
clrscr;
i:=0;
cena:=0;
num:=0;
seek(fails,i);
writeln('/ N-rs / Ist.sk.
/ Datums / Cena / Aizn. /
Vards / Uzvards
/');
for i:=0 to iersk do
begin
read(fails,rec);
if rec.cena > cena then
begin
cena:=rec.cena;
num:=i;
end;
end;
seek(fails,num);
read(fails,rec);
Write('#:', num,' ',rec.numurs,' / ', rec.istabusk);
Write(' /
',rec.datums.d,'.',rec.datums.m,'.',rec.datums.g,'.',' / ');
Write(rec.cena:2:2);
Write(' /
',rec.aiznemts,' / ');
Writeln(' / ',rec.vards,'
/ ',rec.uzvards,' / ');
end;
procedure FSortIstsk (var
fails:db; iersk:integer; var open:integer; var kluda:integer);
var
temprec,temprec2:dbrec;
i,j:integer;
begin
if open<>1 then
begin
writeln('* fails nav atverts!');
exit;
end;
for i:=0 to iersk-1 do
begin
Fget (fails, temprec, i, open, kluda);
for j:=i+1 to iersk do
begin
Fget
(fails, temprec2, j, open, kluda);
if
temprec2.istabusk > temprec.istabusk then
begin
Frewrite(fails,
i,temprec2,open,kluda);
Frewrite(fails,
j,temprec,open,kluda);
Fget
(fails, temprec, i, open, kluda);
Fget
(fails, temprec2, j, open, kluda);
end;
end;
end;
end;
procedure FSortNum (var
fails:db; iersk:integer; var open:integer; var kluda:integer);
var
temprec,temprec2:dbrec;
i,j:integer;
begin
if open<>1 then
begin
writeln('* fails nav atverts!');
exit;
end;
for i:=0 to iersk-1 do
begin
Fget (fails, temprec, i, open, kluda);
for j:=i+1 to iersk do
begin
Fget
(fails, temprec2, j, open, kluda);
if
temprec2.numurs < temprec.numurs then
begin
Frewrite(fails,
i,temprec2,open,kluda);
Frewrite(fails,
j,temprec,open,kluda);
Fget
(fails, temprec, i, open, kluda);
Fget
(fails, temprec2, j, open, kluda);
end;
end;
end;
end;
procedure FSortUzv (var
fails:db; iersk:integer; var open:integer; var kluda:integer);
var
temprec,temprec2:dbrec;
i,j:integer;
begin
if open<>1 then
begin
writeln('* fails nav atverts!');
exit;
end;
for i:=0 to iersk-1 do
begin
Fget (fails, temprec, i, open, kluda);
for j:=i+1 to iersk do
begin
Fget
(fails, temprec2, j, open, kluda);
if
Ord(temprec2.uzvards[1]) < Ord(temprec.uzvards[1]) then
begin
Frewrite(fails,
i,temprec2,open,kluda);
Frewrite(fails,
j,temprec,open,kluda);
Fget
(fails, temprec, i, open, kluda);
Fget
(fails, temprec2, j, open, kluda);
end;
end;
end;
end;
procedure Fget (var fails:db; var rec:dbrec; ier:integer;
var open:integer; var kluda:integer);
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
seek(fails,ier);
read(fails,rec);
end;
procedure Fopen (var
fails:db; filename:string; var open:integer; var kluda:integer);
begin
assign(fails, filename);
{$I-}
reset(fails);
{$I+}
if (ioresult=0) and
(filename<>'') then open:=1
else
begin
open:=0;
end;
end;
procedure Fnewrec (var
fails:db; rec:dbrec; var iersk:integer; var open:integer; var kluda:integer);
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
iersk:=iersk+1;
seek(fails,iersk);
write(fails,rec);
end;
procedure Fclose (var fails:db; var open:integer; var
kluda:integer);
begin
if open<>1 then
exit;
close(fails);
open:=0;
end;
procedure Fcreate (var
fails:db; filename:string; var iersk:integer; var kluda:integer);
var i: integer;
rec :DBRec;
begin
{$I-}
assign(fails, filename);
rewrite(fails);
{$I+}
if (ioresult<>0) or (filename='') then
begin
writeln('* Neizdevas izveidot
failu!');
Exit;
end;
for i:=0 to iersk do
begin
rec.numurs:=i+1;
rec.istabusk:=i+1;
rec.datums.d:=i;
rec.datums.m:=i;
rec.datums.g:=i;
Rec.vards:= chr($61 +i);
Rec.uzvards:= chr($61 +i);
Rec.cena:=i;
Rec.aiznemts:=0;
write(fails,Rec);
end;
close(fails);
end;
procedure Fview (var fails:db; var iersk:integer; var
open:integer; var kluda:integer);
var
i :integer;
empty:string;
rec:dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
clrscr;
i:=0;
seek(fails,i);
writeln('/ N-rs / Ist.sk.
/ Datums / Cena / Aizn. /
Vards / Uzvards
/');
for i:=0 to iersk do
begin
read(fails,rec);
Write('#:', i,' ',rec.numurs,' / ', rec.istabusk);
Write(' /
',rec.datums.d,'.',rec.datums.m,'.',rec.datums.g,'.',' / ');
Write(rec.cena:2:2);
Write(' /
',rec.aiznemts,' / ');
Writeln(' / ',rec.vards,'
/ ',rec.uzvards,' / ');
end;
writeln('* Uzspiediet
Enter lai turpinat...');
read(empty);
end;
procedure Fviewfree (var fails:db; var iersk:integer; var
open:integer; var kluda:integer);
var
i :integer;
rec:dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
clrscr;
i:=0;
seek(fails,i);
writeln('/ N-rs / Ist.sk.
/ Datums / Cena / Aizn. /
Vards / Uzvards
/');
for i:=0 to iersk do
begin
read(fails,rec);
if rec.aiznemts = 0 then
begin
Write('#:', i,' ',rec.numurs,' / ', rec.istabusk);
Write(' /
',rec.datums.d,'.',rec.datums.m,'.',rec.datums.g,'.',' / ');
Write(rec.cena:2:2);
Write(' / ',rec.aiznemts,' / ');
Writeln(' / ',rec.vards,' /
',rec.uzvards,' / ');
end;
end;
seek(fails,0);
end;
procedure FReWriteS(var fails:db;
poz:integer; Rec:dbrec; var open:integer; var kluda:integer);
var
temp:dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
seek(fails,poz);
read(fails,temp);
temp.vards:=rec.vards;
temp.uzvards:=rec.uzvards;
temp.datums.d:=rec.datums.d;
temp.datums.m:=rec.datums.m;
temp.datums.g:=rec.datums.g;
seek(fails,poz);
write(fails,temp);
end;
procedure Frewrite(var
fails:db; poz:integer; Rec:dbrec; var open:integer; var kluda:integer);
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
seek(fails,poz);
write(fails,Rec)
end;
procedure Fdelete (var
fails:db; i:integer; var iersk:integer;
var open:integer; var kluda:integer);
var
j:integer;
temprec,emptyrec: dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
Emptyrec.numurs:=0;
Emptyrec.istabusk:=1;
Emptyrec.datums.d:=1;
Emptyrec.datums.m:=1;
Emptyrec.datums.g:=1;
Emptyrec.cena:=0;
Emptyrec.aiznemts:=0;
Emptyrec.vards:='';
Emptyrec.uzvards:='';
if i = iersk then
begin
seek(fails,i);
write(fails,Emptyrec);
seek(fails,0);
end
else
begin
for j:= i+1 to iersk do
begin
seek(fails,j);
read(fails,temprec);
seek(fails,j-1);
write(fails,temprec);
seek(fails,0);
end;
seek(fails,iersk);
write(fails,emptyrec);
end;
iersk:=iersk-1;
end;
procedure Frecsk (var fails:db; var iersk:integer; var
open:integer; var kluda:integer);
var
i:integer;
rec:dbrec;
begin
if open<>1 then
begin
writeln('* fails nav
atverts!');
exit;
end;
i:=0;
seek(fails,i);
while (eof(fails)<>
TRUE) do
begin
read(fails,rec);
if rec.numurs<>0
then
begin
i:=i+1;
end;
end;
iersk:=i-1;
seek(fails,0);
end;
end.
9
Instrukcija lietotājam
1.
Lai sāktu darbu ar programmu ir
jāpalaiž failu db.exe.
2.
Lai izveidot jaunu failu ir
jāizvēlas 1 punktu no izvēlnes un jāievadā faila nosaukumu un ierakstu skaitu.
Lai sāktu darbu ar jaunizveidoto failu to ir jāatver (sk. P 3.).
3.
Lai atvērt esošu failu ir
jāizvēlas 2 punktu no izvēlnes un jāieraksta faila nosaukumu. Failam jāatrodas
vienā mapē ar programmas failu. Pēc faila atvēršanas kļūst pieejamas visas
pārējas funkcijas.
4.
Lai apskatīties faila saturu ir
jāizvēlas 3 punktu. Pirms to darīt, pārliecināties ka fails ir atvērts. Citā
gadījumā jūs ieraudzīsiet paziņojumu par kļūdu.
5.
Lai pilnība pārrakstīt datus par
numuru (visas ailītes) izvēlāties 4 punktu un ievadiet datus katrā no prasītiem
laukiem.
6.
Lai izmainīt tikai viesa datus un
datumu: izvēlaties 5 punktu un aizpildiet visus prasītus laukus.
7.
Lai ielikt datubāzē jaunu
ierakstu izvēlāties 6 punktu, un aizpildiet visus prasītus laukus.
8.
Lai dzēstu esošo ierakstu
izvēlaties 7 punktu un norādiet dzēšama ieraksta numuru.
9.
Lai sakārtot ierakstus pēc istabu
skaita izvēlaties 8 punktu.
10.
Lai sakārtot ierakstus pēc viesu
uzvārdiem izvēlaties 9 punktu.
11.
Lai sakārtot ierakstus pēc istabu
numuriem izvēlaties 10 punktu.
12.
Lai atlasīt visus brīvus numurus
izvēlaties 11 punktu.
13.
Lai atlasīt dārgāko numuru
izvēlaties 12 punktu.
14.
Lai atlasīt ierakstus pēc
konkrēta parametra izvēlaties 13 punktu un aizpildiet laukus ar parametriem pēc
kuriem notiks atlase. Programma atlasīs visus ierakstus kuriem ir vienādi vai
nu līdzīgi lauki.
15.
Lai aizvērtu failu izvēlaties 14
punktu. To ir jādara lai datubāzes fails netiktu bojāts.
16. Lai izietu no programmas izvēlaties 15 punktu. Ja
jūs slēgsiet programmu ar šī punkta palīdzību datubāze tiks slēgta automātiski.
10
Secinājumi
Tieša piekļuve failam atver plašas
iespējas datu glabāšana. Ir iespējams veidot optimālas struktūras datu
glabāšanai. Galvenais trūkums: ļoti daudz laika aizņem beta-testēšana, lai nodrošinātu
visu datu korekto apstrādi un neļaut nekorekto datu ievadi, kā arī nepieļaut
faila bojāšanos nekorekta ieraksta dēļ.
Nav komentāru:
Ierakstīt komentāru