Numuru uzskaites sistēma viesnīcai

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="">
                                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="">
                                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="">
                                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
                                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
                                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
                                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="">
                                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="">
                                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="">
                                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="">
                                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
                                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="">
                                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