LU-LSP-b:MD2

From DiLab
Jump to: navigation, search

MD2

Mērķi

  • Darbs ar komandu rindas argumentiem
  • Sistēmas programmatūras izstrāde, kas atbild uz standarta un specifiskiem parametriem.
  • Darbs ar failu ievadu un izvadu.
  • Vienkāršas datu bāzes izveide


Uzdevums

Izstrādāt sistēmas lietojumprogrammu md2, kas darbināma no komandu rindas ar sekojošiem parametriem un funkcionalitāti:

  • Izdrukā versijas numuru programmatūrai, iekļaujot kompilācijas datumu:
md2 -v
  • Izdrukā lietošanas instrukciju:
md2 -h
  • Pievieno datus ģimenes koka datubāzei. Dati nāk no faila, ja tas norādīts, vai no stdin, ja tāds nav norādīts. Ievaddatu formāts ir tāds pats, kā MD1, vienīgi vārds var būt viena līdz triju vārdu garumā: "vārds", vai "vārds uzvārds", vai "vārds otraisvārds uzvārds".
md2 -i
md2 -i <filename>

vai

md2 -i<filename>

Ja ievaddati ir kļūdaini (piemēram, persona ar vienu vārdu atkārtojas vairākas reizes, kādai personai ir vairāki tēvi vai mātes, kāda persona ir gan tēva, gan mātes lomā), tad jāizdrukā kļūdas paziņojums un programmai jābeidz darbs ar kodu -1. Visos citos gadījumos, kas nav īpaši atrunāti, programmai jābeidz darbs ar kodu 0.

  • Izdrukā datu bāzes saturu alfabētiskā secība pēc vārda alfabētiski (var ņemt vērā tikai ASCII simbolus: testa piemēros netiks pārbaudīta garumzīmju un mīkstinājuma zīmju korekta apstrāde):
md2 -n
  • Izdrukā datu bāzes saturu pēc vecuma:
md2 -y

Ja personu vecumi sakrīt, vai arī, ja tie nav zināmi, tad arī šajā gadījumā personas jāsakārto alfabētiski.

  • Ja norādīti kādi citi, neatpazīti parametri, tad jāizdrukā lietošanas instrukcija un programmai jābeidz darbs ar kodu -1.

Komandrindas parametru ielasei un apstrādei drīkst izmantot getopt() funkciju.


Datu bāzes formāts

Izveidotas datu bāzes (DB) saturs ir teksta fails, kur pirmā rindiņa (galvene) var saturēt jūsu specifisko informāciju vai arī ir tukša ja jums nav nepieciešama, bet visas pārejās rindiņas ir datu bāzes raksti.

Datubāzes teksta faila nosaukumam jābūt "DB.txt".

DB Raksts sastāv no laukiem, kas atdalīti ar DB_FIELD_DELIMITER simbolu. Raksti atdalīti ar DB_REC_DELIMITER simbolu. Ieteicams tos definēt programmas sākumā un lietot kā konstantes:

#define DB_FIELD_DELIMITER  '\t'
#define DB_REC_DELIMITER  '\n'

DB raksta formāts ir sekojošs:

  • Indekss - 5 simboli kā "int" vērtība. Katram rakstam unikāls. Izmantots tēva un mātes laukos.
  • Vārds - simbolu virkne, mainīgs garums
  • Gads - 4 simboli
  • Tēvs - 5 simboli, kas satur indeksu uz tēva rakstu.
  • Māte - 5 simboli, kas satur indeksu uz mātes rakstu.
  • Raksta beigu simbols - DB_REC_DELIMITER

Indeksu un skaitļu vērtībām var būt nedefinētā vērtība, kas nozīmē ka šī vērtība nav zināma. To indicē ar DB_VAL_UNDEF kā pirmo simbolu un parējos kā tukšumus. Tas definēts šādi:

#define DB_VAL_UNDEF '@'


Piezīmes

Nav jārealizē datu bāzes raksta izmešana.

Datu bāzes rakstu vērtības var nākties mainīt, izņemot tos kas ir kā ieraksta indekss un personas vārds. Piemērs ir gadījums, kad vispirms definēts bērns, kam norādīti vecāki, kas nav datu bāzē, un vēlāk vecāki. Vispirms vecākiem tiek radīti raksti ar nedefinētam vērtībām, izņemot indeksu un vārdus. Pēc tam arī pārējie lauki tiek aizpildīti.


Jāiesniedz

  • Jāiesniedz C programmas pirmkods.
  • Iesniedzamais fails jānosauc šādi: LSP_MD2_vards_uzvards.c
  • Nevajag failu arhivēt.
  • Fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LSP MD2 vards uzvards

Vērtējums

Uzdevums tiks vērtēts sekojoši:

  1. 10% - Komandrindas parametru apstrāde, -h un -v parametri.
  2. 30% - Algoritms datu ielasei datubāzē - vai nesatur kļūdas, vai apstrādā visus gadījumus
  3. 20% - Datu izvads alfabētiskā secībā
  4. 20% - Datu izvads vecuma secībā
  5. 20% - Nekorektu ievaddatu atpazīšana, un kļūdas paziņojuma izdruka.

Papildus vērtējumam: realizēt datu ielasei efektīvu algoritmu. Par pietiekoši efektīvu tiek uzskatīts jebkurš risinājums, kuram N personu ielasei datubāzē ir nepieciešams mazāk par O(N2) laika.

Derīga informācija

  • Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi, lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.

J&A (jautājumi un atbildes)

J: Kāds konkrēti ir ievaddatu formāts?

Līdzīgs MD1, tikai:

  • personai var būt vēl viens lauks "GADS" ar dzimšanas gadu
  • personu vārdi var būt viena līdz triju vārdu garumā.

Piemērs:

VARDS Jānis Juris Ozoliņš
TEVS Pēteris Ozoliņš
MATE Maija Kalniņa-Ozoliņa
GADS 1990

Cits korektu ievaddatu piemērs:

VARDS Dēls
TEVS Tēvs
MATE Māte

J: Vai uzdevumos, kur prasīts izvadīt datubāzes saturu, jāizvada viss ieraksts, vai arī pietiek tikai ar vārdu?

Izvadāmo datu formāts nav stingri noteikts, tāpēc maksimālo vērtējumu varēs saņemt arī tad, ja izvadīs tikai vārdu.

J: Jau gatavai datubāzei, kuras ievaddatos persona A bijusi sastopama tikai kā tēvs vai māte (tai nebija pašai sava ieraksta), tiek pievienoti jauni dati, kas satur personas A ierakstu. Vai tie ir korekti ievaddati? Kā atšķirt šādu situāciju no gadījuma, kad personas A ieraksts ievaddatos parādās vairākas reizes, un jāizdod kļūdas paziņojums?

Tie ir korekti ievaddati. Atšķiršanas algoritms paliek programmētāja ziņā.


J: Vai DB.txt failā esošajiem ierakstiem atļauts pievienot vēl citus papildus laukus, kas nav norādīti uzdevuma aprakstā?

Jā.

J: Vai jāspēj ielasīt arī citu studentu vai pasniedzēja ģenerēti DB.txt faili?

Nē, var uzskatīt, ka ar DB.txt failu darbojas tikai un vienīgi jūsu programma.

J: Uzdevums pārāk grūts, vai var pagarināt termiņu?

Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.


Uz LSP kursa sākuma lapu.