added "some" functionality

Now available: insert, select, update for questions and categories. TODO: delete for both, questions and categories
This commit is contained in:
Benjamin Petsch
2017-03-19 23:24:17 +01:00
parent 2ba7cb25ee
commit 069b40dc0f
6 changed files with 748 additions and 42 deletions

Binary file not shown.

View File

@@ -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(){
}

View File

@@ -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();

Binary file not shown.

View File

@@ -3,7 +3,7 @@
<iostream>
<stdlib.h>
1489771116 source:f:\postgrachelor\project\dbclient.pgc
1489959780 source:f:\postgrachelor\project\dbclient.pgc
<iostream>
<stdlib.h>

View File

@@ -2,14 +2,14 @@
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" />
<File name="dbclient.pgc" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5815" topLine="213" />
</Cursor>
</File>
<File name="dbclient.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3617" topLine="112" />
</Cursor>
</File>
<File name="dbclient.pgc" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1253" topLine="46" />
</Cursor>
</File>
</CodeBlocks_layout_file>