diff --git a/project/bin/Debug/project.exe b/project/bin/Debug/project.exe index bce9039..a4df791 100644 Binary files a/project/bin/Debug/project.exe and b/project/bin/Debug/project.exe differ diff --git a/project/dbclient.cpp b/project/dbclient.cpp index 62fd719..4563c4c 100644 --- a/project/dbclient.cpp +++ b/project/dbclient.cpp @@ -12,9 +12,23 @@ using namespace std; void initdb(); -void insertCategory(); void menuInsert(); -void select(); +void menuSelect(); +void menuUpdate(); +void menuDelete(); + +void insertCategory(); +void insertQuestion(); + +void selectCategory(); +void selectQuestion(); + +void updateCategory(); +void updateQuestion(); + +void deleteCategory(); +void deleteQuestion(); + void cinClear(); int main() @@ -28,15 +42,22 @@ int main() cout << endl << endl << endl << "Was wollen Sie tun?:" << endl; cout << "(e): Daten eingeben" << endl; cout << "(a): Daten anzeigen" << endl; - cout << "" << endl; + cout << "(n): Daten aendern" << endl; + cout << "(l): Daten loeschen" << endl; cout << "(s): schliessen" << endl; cin >> choice; switch(choice){ case 'e': - insertCategory(); + menuInsert(); break; case 'a': - select(); + menuSelect(); + break; + case 'n': + menuUpdate(); + break; + case 'l': + menuDelete(); break; case 's': exit = 1; @@ -47,69 +68,199 @@ int main() void initdb(){ { ECPGconnect(__LINE__, 0, "CSDB@lamp.wlan.hwr-berlin.de" , "gr2" , "2Au-R2n-cQN-uuG" , NULL, 0); } -#line 41 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 62 "F:\\postgrachelor\\project\\dbclient.pgc" cout << "state: " << sqlca.sqlstate << endl; { ECPGtrans(__LINE__, NULL, "commit");} -#line 43 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 64 "F:\\postgrachelor\\project\\dbclient.pgc" } void menuInsert(){ - insertCategory(); + char choice = 0; + cout << "Welche Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + insertCategory(); + break; + case 'f': + insertQuestion(); + break; + } +} + +void menuSelect(){ + char choice = 0; + cout << "Welche Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + selectCategory(); + break; + case 'f': + selectQuestion(); + break; + } +} + +void menuUpdate(){ + char choice = 0; + cout << "In welcher Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + updateCategory(); + break; + case 'f': + updateQuestion(); + break; + } +} + +void menuDelete(){ + char choice = 0; + cout << "Aus welcher Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + deleteCategory(); + break; + case 'f': + deleteQuestion(); + break; + } } void insertCategory(){ /* exec sql begin declare section */ -#line 52 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 133 "F:\\postgrachelor\\project\\dbclient.pgc" char eingna [ 51 ] ; /* exec sql end declare section */ -#line 53 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 134 "F:\\postgrachelor\\project\\dbclient.pgc" + string h = ""; cout << "Eingabe Name: "; - cin >> eingna; - if (!cin) cinClear(); + getline(cin, h); + getline(cin, h); - if (eingna) + //cout << h << endl; + if (!(h.empty()||!strcmp(h.c_str(),"\n"))) { + strcpy(eingna, h.c_str()); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into gr2 . test ( name ) values ( $1 )", ECPGt_char,(eingna),(long)51,(long)1,(51)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} -#line 61 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 145 "F:\\postgrachelor\\project\\dbclient.pgc" if (!strcmp(sqlca.sqlstate, "23505")) cout << "GIBT'S SCHON" << endl; cout << "state: " << sqlca.sqlstate << endl; { ECPGtrans(__LINE__, NULL, "commit");} -#line 64 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 148 "F:\\postgrachelor\\project\\dbclient.pgc" } } -void select(){ +void insertQuestion(){ + /* exec sql begin declare section */ + + + + + + + +#line 154 "F:\\postgrachelor\\project\\dbclient.pgc" + char question [ 181 ] ; + +#line 155 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans0 [ 181 ] ; + +#line 156 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans1 [ 181 ] ; + +#line 157 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans2 [ 181 ] ; + +#line 158 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans3 [ 181 ] ; + +#line 159 "F:\\postgrachelor\\project\\dbclient.pgc" + int category ; +/* exec sql end declare section */ +#line 160 "F:\\postgrachelor\\project\\dbclient.pgc" + + + cout << "Frage: "; + cin >> question; + cout << "Richtige Antwort: "; + cin >> ans0; + cout << "1. Falsche Antwort: "; + cin >> ans1; + cout << "2. Falsche Antwort: "; + cin >> ans2; + cout << "3. Falsche Antwort: "; + cin >> ans3; + cout << "ID der Kategorie:" << endl << "moegliche "; + selectCategory(); + cin >> category; + if(category){ + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into gr2 . testquestions ( question , answer0 , answer1 , answer2 , answer3 , category ) values ( $1 , $2 , $3 , $4 , $5 , $6 )", + ECPGt_char,(question),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans0),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans1),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans2),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans3),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(category),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 176 "F:\\postgrachelor\\project\\dbclient.pgc" + + if(!strcmp(sqlca.sqlstate, "23503")) cout << "Das ist keine gueltige Kategorie!" << endl; + cout << "state: " << sqlca.sqlstate << endl; + { ECPGtrans(__LINE__, NULL, "commit");} +#line 179 "F:\\postgrachelor\\project\\dbclient.pgc" + + } +} + +void selectCategory(){ //Die Ausgabe funktioniert nur dann korrekt, wenn die ids eindeutig sind!!! /* exec sql begin declare section */ -#line 71 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 186 "F:\\postgrachelor\\project\\dbclient.pgc" int id ; -#line 72 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 187 "F:\\postgrachelor\\project\\dbclient.pgc" char name [ 51 ] ; /* exec sql end declare section */ -#line 73 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 188 "F:\\postgrachelor\\project\\dbclient.pgc" - cout << endl << "Ausgabe Tabelle: " << endl; + cout << "Kategorien:" << endl; /* declare xxx cursor for select \"ID\" , name from gr2 . test order by \"ID\" */ -#line 77 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 192 "F:\\postgrachelor\\project\\dbclient.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare xxx cursor for select \"ID\" , name from gr2 . test order by \"ID\"", ECPGt_EOIT, ECPGt_EORT);} -#line 78 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 193 "F:\\postgrachelor\\project\\dbclient.pgc" int residl; @@ -120,7 +271,7 @@ void select(){ ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(name),(long)51,(long)1,(51)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} -#line 83 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 198 "F:\\postgrachelor\\project\\dbclient.pgc" if(!strcmp(sqlca.sqlstate, "00000")) cout << id << " " << name << endl; else if(!strcmp(sqlca.sqlstate, "02000")) cout << "Die Tabelle ist leer!"; @@ -133,12 +284,301 @@ void select(){ ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(name),(long)51,(long)1,(51)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} -#line 90 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 205 "F:\\postgrachelor\\project\\dbclient.pgc" if(!strcmp(sqlca.sqlstate, "00000")) cout << id << " " << name << endl; } { ECPGtrans(__LINE__, NULL, "commit");} -#line 93 "F:\\postgrachelor\\project\\dbclient.pgc" +#line 208 "F:\\postgrachelor\\project\\dbclient.pgc" + +} + +void selectQuestion(){ + //Die Ausgabe funktioniert nur dann korrekt, wenn die ids eindeutig sind!!! + /* exec sql begin declare section */ + + + + + + + + +#line 214 "F:\\postgrachelor\\project\\dbclient.pgc" + int id ; + +#line 215 "F:\\postgrachelor\\project\\dbclient.pgc" + char question [ 181 ] ; + +#line 216 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans0 [ 181 ] ; + +#line 217 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans1 [ 181 ] ; + +#line 218 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans2 [ 181 ] ; + +#line 219 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans3 [ 181 ] ; + +#line 220 "F:\\postgrachelor\\project\\dbclient.pgc" + char cat [ 51 ] ; +/* exec sql end declare section */ +#line 221 "F:\\postgrachelor\\project\\dbclient.pgc" + + + string hQuestion = "", hAns0 = "", hAns1 = "", hAns2 = "", hAns3 = "", hCat = ""; + + cout << "Fragen:" << endl << endl; + + /* declare yyy cursor for select q . \"ID\" , q . question , q . answer0 , q . answer1 , q . answer2 , q . answer3 , c . name from gr2 . testquestions q join gr2 . test c on q . \"ID\" = c . \"ID\" order by c . \"ID\" */ +#line 227 "F:\\postgrachelor\\project\\dbclient.pgc" + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare yyy cursor for select q . \"ID\" , q . question , q . answer0 , q . answer1 , q . answer2 , q . answer3 , c . name from gr2 . testquestions q join gr2 . test c on q . \"ID\" = c . \"ID\" order by c . \"ID\"", ECPGt_EOIT, ECPGt_EORT);} +#line 228 "F:\\postgrachelor\\project\\dbclient.pgc" + + + int residl; + residl = id; + + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch first from yyy", ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(question),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans0),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans1),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans2),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans3),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(cat),(long)51,(long)1,(51)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} +#line 233 "F:\\postgrachelor\\project\\dbclient.pgc" + + if(!strcmp(sqlca.sqlstate, "00000")){ + hQuestion = question; + hAns0 = ans0; + hAns1 = ans1; + hAns2 = ans2; + hAns3 = ans3; + hCat = cat; + hQuestion.erase(hQuestion.find_last_not_of(" \n\r\t")+1); + hAns0.erase(hAns0.find_last_not_of(" \n\r\t")+1); + hAns1.erase(hAns1.find_last_not_of(" \n\r\t")+1); + hAns2.erase(hAns2.find_last_not_of(" \n\r\t")+1); + hAns3.erase(hAns3.find_last_not_of(" \n\r\t")+1); + hCat.erase(hCat.find_last_not_of(" \n\r\t")+1); + cout << "Schema:" << endl; + cout << "Frage: Kategorie" << endl << "\tRichtige Antwort" << endl << "\tFalsche Antwort 1" << endl << "\tFalsche Antwort 2" << endl << "\tFalsche Antwort 3" << endl << endl << endl; + cout << hQuestion << ": " << hCat << endl; + cout << "\t" << hAns0 << endl; + cout << "\t" << hAns1 << endl; + cout << "\t" << hAns2 << endl; + cout << "\t" << hAns3 << endl; + } + else if(!strcmp(sqlca.sqlstate, "02000")) cout << "Die Tabelle ist leer!"; + + while(id != residl) + { + residl = id; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch next from yyy", ECPGt_EOIT, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(question),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans0),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans1),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans2),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(ans3),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_char,(cat),(long)51,(long)1,(51)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} +#line 260 "F:\\postgrachelor\\project\\dbclient.pgc" + + if(!strcmp(sqlca.sqlstate, "00000")){ + hQuestion = question; + hAns0 = ans0; + hAns1 = ans1; + hAns2 = ans2; + hAns3 = ans3; + hCat = cat; + hQuestion.erase(hQuestion.find_last_not_of(" \n\r\t")+1); + hAns0.erase(hAns0.find_last_not_of(" \n\r\t")+1); + hAns1.erase(hAns1.find_last_not_of(" \n\r\t")+1); + hAns2.erase(hAns2.find_last_not_of(" \n\r\t")+1); + hAns3.erase(hAns3.find_last_not_of(" \n\r\t")+1); + hCat.erase(hCat.find_last_not_of(" \n\r\t")+1); + cout << hQuestion << ": " << hCat << endl; + cout << "\t" << hAns0 << endl; + cout << "\t" << hAns1 << endl; + cout << "\t" << hAns2 << endl; + cout << "\t" << hAns3 << endl; + } + } + { ECPGtrans(__LINE__, NULL, "commit");} +#line 281 "F:\\postgrachelor\\project\\dbclient.pgc" + +} + +void updateCategory(){ + /* exec sql begin declare section */ + + + +#line 286 "F:\\postgrachelor\\project\\dbclient.pgc" + int id ; + +#line 287 "F:\\postgrachelor\\project\\dbclient.pgc" + char name [ 51 ] ; +/* exec sql end declare section */ +#line 288 "F:\\postgrachelor\\project\\dbclient.pgc" + + cout << "Welche Kategorie soll bearbeitet werden? (ID eingeben):" << endl; + selectCategory(); + cin >> id; + cout << "Welchen neuen Namen soll die Kategorie bekommen?" << endl; + cin >> name; + if(id){ + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . test set name = $1 where \"ID\" = $2 ", + ECPGt_char,(name),(long)51,(long)1,(51)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 295 "F:\\postgrachelor\\project\\dbclient.pgc" + + if(!strcmp(sqlca.sqlstate, "02000")) cout << "Kein derartiger Datensatz gefunden!"; + { ECPGtrans(__LINE__, NULL, "commit");} +#line 297 "F:\\postgrachelor\\project\\dbclient.pgc" + + } +} + +void updateQuestion(){ + /* exec sql begin declare section */ + + + + + + + + +#line 303 "F:\\postgrachelor\\project\\dbclient.pgc" + int id ; + +#line 304 "F:\\postgrachelor\\project\\dbclient.pgc" + char question [ 181 ] ; + +#line 305 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans0 [ 181 ] ; + +#line 306 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans1 [ 181 ] ; + +#line 307 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans2 [ 181 ] ; + +#line 308 "F:\\postgrachelor\\project\\dbclient.pgc" + char ans3 [ 181 ] ; + +#line 309 "F:\\postgrachelor\\project\\dbclient.pgc" + int cat ; +/* exec sql end declare section */ +#line 310 "F:\\postgrachelor\\project\\dbclient.pgc" + + char choice = 0; + cout << "Welche Frage soll bearbeitet werden? (ID eingeben):" << endl; + cin >> id; + if(id){ + cout << "Was soll an der Frage geaendert werden?" << endl << "(f): Die Fragenstellung" << endl << "(0): Die richtige Antwort" << endl << "(1)-(3): Eine der falschen Antworten" << endl << "(k): Die Kategorie" << endl; + cin >> choice; + switch(choice){ + case 'f': + cout << "Neue Fragenstellung: "; + cin >> question; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . testquestions set question = $1 where \"ID\" = $2 ", + ECPGt_char,(question),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 321 "F:\\postgrachelor\\project\\dbclient.pgc" + + break; + case '0': + cout << "Neue richtige Antwort: "; + cin >> ans0; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . testquestions set answer0 = $1 where \"ID\" = $2 ", + ECPGt_char,(ans0),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 326 "F:\\postgrachelor\\project\\dbclient.pgc" + + break; + case '1': + cout << "Neue falsche Antwort: "; + cin >> ans1; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . testquestions set answer1 = $1 where \"ID\" = $2 ", + ECPGt_char,(ans1),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 331 "F:\\postgrachelor\\project\\dbclient.pgc" + + break; + case '2': + cout << "Neue falsche Antwort: "; + cin >> ans2; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . testquestions set answer2 = $1 where \"ID\" = $2 ", + ECPGt_char,(ans2),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 336 "F:\\postgrachelor\\project\\dbclient.pgc" + + break; + case '3': + cout << "Neue falsche Antwort: "; + cin >> ans3; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . testquestions set answer3 = $1 where \"ID\" = $2 ", + ECPGt_char,(ans3),(long)181,(long)1,(181)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 341 "F:\\postgrachelor\\project\\dbclient.pgc" + + break; + case 'k': + cout << "Neue Kategorie (ID):" << endl; + selectCategory(); + cin >> cat; + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "update gr2 . testquestions set category = $1 where \"ID\" = $2 ", + ECPGt_int,&(cat),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_int,&(id),(long)1,(long)1,sizeof(int), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} +#line 347 "F:\\postgrachelor\\project\\dbclient.pgc" + + break; + } + { ECPGtrans(__LINE__, NULL, "commit");} +#line 350 "F:\\postgrachelor\\project\\dbclient.pgc" + + } +} + +void deleteCategory(){ + +} + +void deleteQuestion(){ } diff --git a/project/dbclient.pgc b/project/dbclient.pgc index 31e9064..4df3575 100644 --- a/project/dbclient.pgc +++ b/project/dbclient.pgc @@ -4,9 +4,23 @@ using namespace std; void initdb(); -void insertCategory(); void menuInsert(); -void select(); +void menuSelect(); +void menuUpdate(); +void menuDelete(); + +void insertCategory(); +void insertQuestion(); + +void selectCategory(); +void selectQuestion(); + +void updateCategory(); +void updateQuestion(); + +void deleteCategory(); +void deleteQuestion(); + void cinClear(); int main() @@ -20,15 +34,22 @@ int main() cout << endl << endl << endl << "Was wollen Sie tun?:" << endl; cout << "(e): Daten eingeben" << endl; cout << "(a): Daten anzeigen" << endl; - cout << "" << endl; + cout << "(n): Daten aendern" << endl; + cout << "(l): Daten loeschen" << endl; cout << "(s): schliessen" << endl; cin >> choice; switch(choice){ case 'e': - insertCategory(); + menuInsert(); break; case 'a': - select(); + menuSelect(); + break; + case 'n': + menuUpdate(); + break; + case 'l': + menuDelete(); break; case 's': exit = 1; @@ -44,7 +65,67 @@ void initdb(){ } void menuInsert(){ - insertCategory(); + char choice = 0; + cout << "Welche Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + insertCategory(); + break; + case 'f': + insertQuestion(); + break; + } +} + +void menuSelect(){ + char choice = 0; + cout << "Welche Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + selectCategory(); + break; + case 'f': + selectQuestion(); + break; + } +} + +void menuUpdate(){ + char choice = 0; + cout << "In welcher Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + updateCategory(); + break; + case 'f': + updateQuestion(); + break; + } +} + +void menuDelete(){ + char choice = 0; + cout << "Aus welcher Tabelle?:" << endl; + cout << "(k): Kategorien" << endl; + cout << "(f): Fragen" << endl; + cin >> choice; + switch(choice){ + case 'k': + deleteCategory(); + break; + case 'f': + deleteQuestion(); + break; + } } void insertCategory(){ @@ -52,12 +133,15 @@ void insertCategory(){ char eingna[51]; EXEC SQL END DECLARE SECTION; + string h = ""; cout << "Eingabe Name: "; - cin >> eingna; - if (!cin) cinClear(); + getline(cin, h); + getline(cin, h); - if (eingna) + //cout << h << endl; + if (!(h.empty()||!strcmp(h.c_str(),"\n"))) { + strcpy(eingna, h.c_str()); EXEC SQL INSERT INTO gr2.test(name) VALUES (:eingna); if (!strcmp(sqlca.sqlstate, "23505")) cout << "GIBT'S SCHON" << endl; cout << "state: " << sqlca.sqlstate << endl; @@ -65,14 +149,45 @@ void insertCategory(){ } } -void select(){ +void insertQuestion(){ + EXEC SQL BEGIN DECLARE SECTION; + char question[181]; + char ans0[181]; + char ans1[181]; + char ans2[181]; + char ans3[181]; + int category; + EXEC SQL END DECLARE SECTION; + + cout << "Frage: "; + cin >> question; + cout << "Richtige Antwort: "; + cin >> ans0; + cout << "1. Falsche Antwort: "; + cin >> ans1; + cout << "2. Falsche Antwort: "; + cin >> ans2; + cout << "3. Falsche Antwort: "; + cin >> ans3; + cout << "ID der Kategorie:" << endl << "moegliche "; + selectCategory(); + cin >> category; + if(category){ + EXEC SQL INSERT INTO gr2.testquestions(question,answer0,answer1,answer2,answer3,category) VALUES (:question,:ans0,:ans1,:ans2,:ans3,:category); + if(!strcmp(sqlca.sqlstate, "23503")) cout << "Das ist keine gueltige Kategorie!" << endl; + cout << "state: " << sqlca.sqlstate << endl; + EXEC SQL COMMIT; + } +} + +void selectCategory(){ //Die Ausgabe funktioniert nur dann korrekt, wenn die ids eindeutig sind!!! EXEC SQL BEGIN DECLARE SECTION; int id; char name[51]; EXEC SQL END DECLARE SECTION; - cout << endl << "Ausgabe Tabelle: " << endl; + cout << "Kategorien:" << endl; EXEC SQL DECLARE xxx CURSOR FOR SELECT "ID",name FROM gr2.test ORDER BY "ID"; EXEC SQL OPEN xxx; @@ -93,6 +208,157 @@ void select(){ EXEC SQL COMMIT; } +void selectQuestion(){ + //Die Ausgabe funktioniert nur dann korrekt, wenn die ids eindeutig sind!!! + EXEC SQL BEGIN DECLARE SECTION; + int id; + char question[181]; + char ans0[181]; + char ans1[181]; + char ans2[181]; + char ans3[181]; + char cat[51]; + EXEC SQL END DECLARE SECTION; + + string hQuestion = "", hAns0 = "", hAns1 = "", hAns2 = "", hAns3 = "", hCat = ""; + + cout << "Fragen:" << endl << endl; + + EXEC SQL DECLARE yyy CURSOR FOR SELECT q."ID",q.question,q.answer0,q.answer1,q.answer2,q.answer3,c.name FROM gr2.testquestions q JOIN gr2.test c ON q."ID" = c."ID" ORDER BY c."ID"; + EXEC SQL OPEN yyy; + + int residl; + residl = id; + + EXEC SQL FETCH FIRST FROM yyy INTO :id,:question, :ans0, :ans1, :ans2, :ans3, :cat; + if(!strcmp(sqlca.sqlstate, "00000")){ + hQuestion = question; + hAns0 = ans0; + hAns1 = ans1; + hAns2 = ans2; + hAns3 = ans3; + hCat = cat; + hQuestion.erase(hQuestion.find_last_not_of(" \n\r\t")+1); + hAns0.erase(hAns0.find_last_not_of(" \n\r\t")+1); + hAns1.erase(hAns1.find_last_not_of(" \n\r\t")+1); + hAns2.erase(hAns2.find_last_not_of(" \n\r\t")+1); + hAns3.erase(hAns3.find_last_not_of(" \n\r\t")+1); + hCat.erase(hCat.find_last_not_of(" \n\r\t")+1); + cout << "Schema:" << endl; + cout << "Frage: Kategorie" << endl << "\tRichtige Antwort" << endl << "\tFalsche Antwort 1" << endl << "\tFalsche Antwort 2" << endl << "\tFalsche Antwort 3" << endl << endl << endl; + cout << hQuestion << ": " << hCat << endl; + cout << "\t" << hAns0 << endl; + cout << "\t" << hAns1 << endl; + cout << "\t" << hAns2 << endl; + cout << "\t" << hAns3 << endl; + } + else if(!strcmp(sqlca.sqlstate, "02000")) cout << "Die Tabelle ist leer!"; + + while(id != residl) + { + residl = id; + EXEC SQL FETCH NEXT FROM yyy INTO :id,:question, :ans0, :ans1, :ans2, :ans3, :cat; + if(!strcmp(sqlca.sqlstate, "00000")){ + hQuestion = question; + hAns0 = ans0; + hAns1 = ans1; + hAns2 = ans2; + hAns3 = ans3; + hCat = cat; + hQuestion.erase(hQuestion.find_last_not_of(" \n\r\t")+1); + hAns0.erase(hAns0.find_last_not_of(" \n\r\t")+1); + hAns1.erase(hAns1.find_last_not_of(" \n\r\t")+1); + hAns2.erase(hAns2.find_last_not_of(" \n\r\t")+1); + hAns3.erase(hAns3.find_last_not_of(" \n\r\t")+1); + hCat.erase(hCat.find_last_not_of(" \n\r\t")+1); + cout << hQuestion << ": " << hCat << endl; + cout << "\t" << hAns0 << endl; + cout << "\t" << hAns1 << endl; + cout << "\t" << hAns2 << endl; + cout << "\t" << hAns3 << endl; + } + } + EXEC SQL COMMIT; +} + +void updateCategory(){ + EXEC SQL BEGIN DECLARE SECTION; + int id; + char name[51]; + EXEC SQL END DECLARE SECTION; + cout << "Welche Kategorie soll bearbeitet werden? (ID eingeben):" << endl; + selectCategory(); + cin >> id; + cout << "Welchen neuen Namen soll die Kategorie bekommen?" << endl; + cin >> name; + if(id){ + EXEC SQL UPDATE gr2.test SET name = :name WHERE "ID" = :id; + if(!strcmp(sqlca.sqlstate, "02000")) cout << "Kein derartiger Datensatz gefunden!"; + EXEC SQL COMMIT; + } +} + +void updateQuestion(){ + EXEC SQL BEGIN DECLARE SECTION; + int id; + char question[181]; + char ans0[181]; + char ans1[181]; + char ans2[181]; + char ans3[181]; + int cat; + EXEC SQL END DECLARE SECTION; + char choice = 0; + cout << "Welche Frage soll bearbeitet werden? (ID eingeben):" << endl; + cin >> id; + if(id){ + cout << "Was soll an der Frage geaendert werden?" << endl << "(f): Die Fragenstellung" << endl << "(0): Die richtige Antwort" << endl << "(1)-(3): Eine der falschen Antworten" << endl << "(k): Die Kategorie" << endl; + cin >> choice; + switch(choice){ + case 'f': + cout << "Neue Fragenstellung: "; + cin >> question; + EXEC SQL UPDATE gr2.testquestions SET question = :question WHERE "ID" = :id; + break; + case '0': + cout << "Neue richtige Antwort: "; + cin >> ans0; + EXEC SQL UPDATE gr2.testquestions SET answer0 = :ans0 WHERE "ID" = :id; + break; + case '1': + cout << "Neue falsche Antwort: "; + cin >> ans1; + EXEC SQL UPDATE gr2.testquestions SET answer1 = :ans1 WHERE "ID" = :id; + break; + case '2': + cout << "Neue falsche Antwort: "; + cin >> ans2; + EXEC SQL UPDATE gr2.testquestions SET answer2 = :ans2 WHERE "ID" = :id; + break; + case '3': + cout << "Neue falsche Antwort: "; + cin >> ans3; + EXEC SQL UPDATE gr2.testquestions SET answer3 = :ans3 WHERE "ID" = :id; + break; + case 'k': + cout << "Neue Kategorie (ID):" << endl; + selectCategory(); + cin >> cat; + EXEC SQL UPDATE gr2.testquestions SET category = :cat WHERE "ID" = :id; + break; + } + EXEC SQL COMMIT; + } +} + +void deleteCategory(){ + +} + +void deleteQuestion(){ + +} + void cinClear() { char Muell; cin.clear(); diff --git a/project/obj/Debug/dbclient.o b/project/obj/Debug/dbclient.o index a65eb7c..3be44f7 100644 Binary files a/project/obj/Debug/dbclient.o and b/project/obj/Debug/dbclient.o differ diff --git a/project/project.depend b/project/project.depend index 917aae7..19a236d 100644 --- a/project/project.depend +++ b/project/project.depend @@ -3,7 +3,7 @@ -1489771116 source:f:\postgrachelor\project\dbclient.pgc +1489959780 source:f:\postgrachelor\project\dbclient.pgc diff --git a/project/project.layout b/project/project.layout index 5e835ab..86bfd0c 100644 --- a/project/project.layout +++ b/project/project.layout @@ -2,14 +2,14 @@ + + + + + - - - - -