BILAGA F till Programvaruprojekt BRISTFÄLLIGT GRÄNSSNITT. multipc_logic_c Rev 1.



Relevanta dokument
Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

7 GRUNDERNA I PROGRAMMERING

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Heltal(int) Programmeringsteknik 54

Tillgång till patienter vid annan enhet hantering i BORIS

Hur använder du som elev Fronter?

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

Problemlösarna har fyra konkreta tips på vad som gör ett lyckat studiebesök:

Titel. En kort sammanfattning av arbetet (max 5 meningar) eller en underrubrik skrivs under titeln. Johannes Hedbergsgymnasiet Helsingborg

PROV. 10 Uppräknade datatyper

Introduktion till Planering

Checklista. Hur du enkelt skriver din uppsats

Utvecklingssamtalet Hur går det för ditt barn i skolan?

3. Författare: Ange samtliga författare. Gör så här:

RIKTLINJER & REGLER KRING SOCIALA MEDIER FÖR GISLAVEDS KOMMUN

UTBILDNINGSFÖRVALTNINGEN IKT-FUNKTIONEN

TITEL. Johannes Hedberggymnasiet. Laborantens namn: Medlaboranters namn: Klass: Skola: Påbörjad: Inlämnad:

Ekonomiavdelningen Åtgärda en faktura

Så surfar du säkrare 2 Skydda surfvanor på din dator 2 Skydda det du skickar 4 Skydda din identitet 4

18 Eldorado 4 A Lärarbok Undervisning att skapa förutsättningar för elevers lärande

Word och Excel. - en kort handledning Av Dag Kihlman och Martin Gellerstedt

Rådgivning inom livsmedelskontrollen

EPiServer 7.5 CMS. Användarhandbok för administratörer

TIPS OCH TRIX MED ENTERPRISE GUIDE JESPER ARNFLO NORDIN BI-KONSULT, SAS XPERIENCE

Att arrangera en studiecirkel Läkemedel och äldre

Du startar Jag Vill genom öppna mappen och klicka på programfilen Jag_Vill

Elektronisk personvåg med kroppsanalys

ATT UNDERVISA MULTIPLIKATION OCH DIVISION MED 10, 100 OCH 1000

Transkript:

BRISTFÄLLIGT GRÄNSSNITT 1(6) BILAGA F till Programvaruprojekt BRISTFÄLLIGT GRÄNSSNITT. multipc_logic_c Rev 1. Gränssnittet öppnar för att anropas på fel sätt. Jämför med delkapitlet om gränssnittstest i bokens del 3. Förbättrad variant av gränssnittet visas i bilaga G. Fetstil indikerar funktion som modifieras i Rev 2, bilaga G. #ifndef MULTIPC_LOGIC_C_H #define MULTIPC_LOGIC_C_H ========================================================== Fil : multipc_logic_c.h Författare: Håkan Lindegren MultiPC Historik : 030215 Rev 1 ========================================================== #include "problem_generator_c.h" #include "answers_log_c.h" #include "detailed_answers_log_c.h" #include "statistics_log_c.h" #include "multidb_c.h" Konstanter för felhantering vid läsning och skrivning av elevnamn ----------------------------------------------------- typedef enum { DB_OK, DB_CORRUPT, WRITE_FAILED, DB_FULL } db_status_t; class multipc_logic_c { public: Ska returnera en unik instans av multipc_logic_c Parametrar: INGA Retur: Pekare till unik instans Felhantering: INGEN ---------------------------------------------- static multipc_logic_c *get_instance(); Returnerar status för elev DB För anrop INNAN get_first_pupil/get_next_pupil Parametrar: INGA Retur: Status hos elev DB: DB_OK eller DB_CORRUPT

BRISTFÄLLIGT GRÄNSSNITT 2(6) Felhantering: Via statusvärdet Om status är DB_CORRUPT kommer ny och tom elevfil att skapas. Anroparen kan sedan fortsätta. Jämför med detaljkraven under 120 ----------------------------------------------------- db_status_t get_db_status(); För att loopa över och läsa in elevnamn Parametrar: first_name: för lagring av elevs förnamn, minst 40 tecken last_name: för lagring av elevs efternamn, minst 40 tecken item_found: sätts till 1 om elev fanns, 0 annars Retur: item_found = 1 ==> det fanns en elev, namn lagrade i first_name och last_name item_found = 0 ==> Ingen elev, övriga param oförändrade Felhantering: INGEN ---------------------------------------------- void get_first_pupil( char last_name[], void get_next_pupil( char last_name[], Sätter aktuell elev Parametrar: first_name: elevens förnamn, max 40 tecken last_name: elevens efternamn, max 40 tecken Retur: INGEN Felhantering: INGEN ---------------------------------------------- void set_pupil( char last_name[] ); Ger tillbaka namn på aktuell elev Parametrar: first_name: elevens förnamn, minst 40 tecken last_name: elevens efternamn, minst 40 tecken Retur: Namndata i first_name och last_name Felhantering: INGEN ---------------------------------------------- void get_pupil( char last_name[] ); För lagring av nytt elevnamn Sätter också aktuell elev, d.v.s. anropar set_pupil Parametrar: first_name: elevens förnamn, max 40 tecken last_name: elevens efternamn, max 40 tecken db_status: sätts till DB_OK om det gick bra

BRISTFÄLLIGT GRÄNSSNITT 3(6) Retur: db_status = DB_OK ==> skrivning gick bra db_status = WRITE_FAILED ==> skrivning misslyckades, elev EJ lagrad db_status = DB_FULL ==> redan fullt i elev-db elev EJ lagrad Felhantering: Via db_status ---------------------------------------------------- void store_name( char last_name[], db_status_t &db_status ); För inställning av tabell Parametrar: table: heltal inom [1.. 10] Retur: INGEN Felhantering: INGEN ---------------------------------------------- void set_table( int table ); Returnerar inställd tabell Parametrar: INGA Retur: Vald tabell, ett heltal inom [1.. 10] Felhantering: INGEN ---------------------------------------------- int get_table(); Ska ge nästa framslumpade problem Parametrar: operand_a: får värdet av första operanden operand_b: får värdet av andra operanden Retur: operand_a inom [1.. 10], operand_b = aktuell tabell Felhantering: INGEN ---------------------------------------------- void get_next_problem( int &operand_b ); Rensar den interna svarsloggen För anrop innan ett prov startar Parametrar: INGA Retur: INGEN Felhantering: INGEN ---------------------------------------------- void clear_answers(); För lagring av ett besvarat tal Parametrar: operand_a: värdet av första operanden [1.. 10]

BRISTFÄLLIGT GRÄNSSNITT 4(6) operand_b: värdet av andra operanden [1.. 10] answer: svaret [0.. 999] elapsed_time: förfluten tid innan svaret Retur: INGEN Felhantering: INGEN ---------------------------------------------- void store_answer( int operand_a, int operand_b, int answer, int elapsed_time); För att loopa över de givna svaren i ett prov Parametrar: operand_a: får värdet av första operanden [1.. 10] operand_b: får värdet av andra operanden [1.. 10] answer: får svaret [0.. 999] elapsed_time: får förfluten tid innan svaret correct_answer: får korrekt svar [1.. 100] item_found: sätts till 1 om svar fanns, 0 annars Retur: item_found = 1 ==> svar fanns, data lagrade i övriga param item_found = 0 ==> Inget svar, övriga param oförändrade Felhantering: INGEN ---------------------------------------------- void get_first_answer( int &elapsed_time, void get_next_answer( int &elapsed_time, För att loopa över statistiken i vald tabell Parametrar: operand_a: får värdet av första operanden [1.. 10] operand_b: får värdet av andra operanden [1.. 10] no_of_answers: får antal avgivna svar på talet no_of_correct_answers: får antal korrekta svar [0.. no_of_answers] item_found: sätts till 1 om statistik fanns, 0 annars Retur: item_found = 1 ==> statistik fanns, data i övriga param item_found = 0 ==> Ingen statistik, övriga param oförändrade Felhantering: INGEN ---------------------------------------------- void get_first_stats( int &no_of_answers, int &no_of_correct_answers, void get_next_stats(

BRISTFÄLLIGT GRÄNSSNITT 5(6) int &no_of_answers, int &no_of_correct_answers, För att ställa in aktuellt tal för detaljstatistiken Ska kombineras med set_table() Parametrar: operand_a: värdet av första operanden Retur: INGEN Felhantering: INGEN ---------------------------------------------- void set_details_number( int operand_a ); Returnerar inställt details_number Parametrar: INGA Retur: Inställd detaljoperand, ett heltal inom [1.. 10] Felhantering: INGEN ---------------------------------------------- int get_details_number(); För att loopa över detaljstatistik för vald tabell och valt detaljnummer Parametrar: answer: får svar som avgivits correct_answer: får korrekt svar item_found: sätts till 1 om svar fanns, annars 0 Retur: item_found = 1 indikerar att det fanns ytterligare svar item_found = 0 ==> Inget svar, övriga parametrar oförändrade Felhantering: INGEN ---------------------------------------------- void get_first_detail( void get_next_detail( private: Privat konstruktor, allt enligt Singleton ----------------------------------------- multipc_logic_c(); Den unika instansen. Instansieras av get_instance(), allt enligt Singleton ----------------------------------------- multipc_logic_c *unique_instance; Instansvariabler. Instansieras av konstruktorn ----------------------------------------------

BRISTFÄLLIGT GRÄNSSNITT 6(6) }; problem_generator_c *problem_generator; answers_log_c *answers_log; detailed_answers_log_c *detailed_answers_log; statistics_log_c *statistics_log; multidb_c *multidb; #endif MULTIPC_LOGIC_C_H Kommentar Problemet med det här gränssnittet är att flera av funktionerna tar flera heltalsparametrar efter varandra. Om värdena kastas om vid anrop kommer inte kompilator eller länkare att protestera. Förhoppningsvis ger sådana misstag tydliga fel ut mot användaren. Få av funktionerna kontrollerar indata. Det är också en brist. Behöver man skriva det, att INGEN felhantering förekommer? Om det behövs kan alltid diskuteras. Då man gör det blir bristen tydlig. Samma mall har använts ovanför varje funktionshuvud. Det förenklar arbetet för en granskare som förväntar sig just den mallen.