problem_s
En struct som ska hålla reda på två stycken heltal. Heltalen ska representera ett multiplikationsproblem, t.ex.
7•3.
answered_problem_s
En struct som ”är en” problem_s med ett heltal för avgivet svar och ett heltal för den tid det tog att avge svaret.
answers_log_c
Klass som ska hålla ordning på tio stycken answered_problem_s. Ska hantera data för facitfönstret.
details_answer_s
Struct som ska hålla reda på detaljer om ett enda problem för detaljstatistiken. I praktiken en problem_s och
en vektor med alla elevens svar, dock högst 30 stycken. Att det ska vara högst 30 stycken ges av detaljkraven för MultiPC.
detailed_answers_log_c
Klass som ska hantera detaljstatistik för samtliga 100 multiplikationstal som är möjliga.
statistics_problem_s
En struct som ”är en” problem_s förstärkt med två heltal för antalet försök och antalet rätt.
statistics_log_c
Klass som ska hantera statistik för samtliga 100 multiplikationstal som är möjliga.
problem_generator_c
Klass som ska slumpa fram nya multiplikationstal. Den får aldrig slumpa samma två tal i rad, det ges av kravställningen för MultiPC.
multidb_c
Klass som ska fungera som gränssnitt mot filhantering av elevnamn. Eftersom den troligen ska byggas ut till ett generellt databasgränssnitt i framtida utgåvor får den namnet multidb_c.
multipc_logic_c
Ska ge GUI-klasserna ett snällt gränssnitt via vilket de kan manipulera logiken.
6.3.2 Krävda gränssnitt
En C++ kompilator.
6.3.3 Erbjudet gränssnitt
En fasadklass multipc_logic_c med följande gränssnitt:
// Konstanter för felhantering vid läsning och skrivning // av elevnamn
// 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 //
// 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 efternamnnamn, minst 40 tecken // item_found: sätts till 1 om elev fanns, 0 annars
//
// Retur:
// item_found = 1 indikerar att det fanns ytterligare en elev // item_found = 0 ==> Ingen elev, övriga param oförändrade //
// Felhantering: INGEN
// void get_first_pupil(
char first_name[], char last_name[], int &item_found );
void get_next_pupil(
char first_name[], char last_name[], int &item_found );
// 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 first_name[], 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 first_name[], 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 //
// 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 first_name[], char last_name[],
db_status_t &db_status );
// För inställning av tabell
// 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:
// Felhantering: INGEN
// void get_next_problem(
answered_problem_s &problem );
// 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:
// answer: svarsdata som ska lagras
//
// Retur: INGEN //
// Felhantering: INGEN
// void store_answer(
answered_problem_s &answer );
// För att loopa över de givna svaren i ett prov
// item_found = 1 indikerar att det fanns ytterligare ett svar // item_found = 0 ==> Inget svar, övriga param oförändrade //
// Felhantering: INGEN
// void get_first_answer(
answered_problem_s &answer, int &correct_answer,
int &item_found );
void get_next_answer(
answered_problem_s &answer, int &correct_answer,
int &item_found );
// För att loopa över statistiken i vald tabell // Parametrar:
// answer_statistics: får statistik om ett tal // item_found: sätts till 1 om svar fanns, 0 annars //
// Retur:
// item_found = 1 indikerar att det fanns ytterligare statistik // item_found = 0 ==> Ingen statistik, övriga param oförändrade //
// Felhantering: INGEN
// void get_first_stats(
statistics_problem_s &answer_statistics, int &item_found );
void get_next_stats(
statistics_problem_s &answer_statistics, int &item_found );
// 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 number );
// 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_details: data 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 param oförändrade //
// Felhantering: INGEN
// void get_first_detail(
int &answer,
int &item_found );
void get_next_detail(
int &answer,
int &item_found );
6.3.4 Funktion
Subsystemet ska tillhandahålla ett lätthanterligt skal ovanpå MultiPC logikklasser.
6.3.5 Övrigt
Inga för utvecklingsverktyget specifika datatyper ska utnyttjas av multipc_logic_c eller dess stödklasser.
multipc_logic_c fungerar som en fasadklass och den uppfyller designmönstret Singleton.