LU-LSP-b11:MD2
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
Uzdevumu var izstrādāt uz MD1 bāzes.
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 (uz abiem pieprasījumiem):
md2 -h md2 --help
- 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 otrais vārds uzvārds".
md2 -i 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:
md2 -n
- Izdrukā datu bāzes saturu pēc vecuma:
md2 -y
Šoreiz nav obligāta prasība, ka vecāki būtu jādrukā vispirms! 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.
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.
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
- Fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LKP MD2 vards uzvards
Vērtējums
Uzdevums tiks vērtēts sekojoši:
- 10% - Komandrindas parametru apstrāde, -h un -v parametri.
- 30% - Algoritms datu ielasei datubāzē - vai nesatur kļūdas, vai apstrādā visus gadījumus, realizācijas efektivitāte (subjektīvs koda novērtējums!)
- 20% - Datu izvads alfabētiskā secībā
- 20% - Datu izvads vecuma secībā
- 20% - Nekorektu ievaddatu atpazīšana, un kļūdas paziņojuma izdruka.
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.
Piemēri
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 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: Uzdevums pārāk grūts, vai var pagarināt termiņu?
A: 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.