000
27.03.2010, 12:28 Uhr
~conspectumortis
Gast
|
Hallo,
meine Gruppe und ich sind grad dabei eine Aufgabe für das Vorlesungsfach SoftwareEngineering zu lösen (QT). Wir haben dabei ein Problem:
Mit dem Programm kann man Name,Nachname und mehrere Telefonnummer eingeben die dann auf unserer Datenbank gespeichert werden. Das Problem liegt dabei bei der Durchwahl die leer sein kann. Wenn für die Durchwahl nichts eingegeben wird ,wird kurioserweise der vorherige Wert an die Datenbank übermittelt.
Meine Idee war nun irgendwie die Länge des Integer Wertes (für Durchwahl) herauszufinden und mit einer if-Abfrage der Datenbank einen "null" wert zurückzugeben falls eben keine Durchwahlnummer eingetippt wurde.
Die Frage: wie kann ich explizit die Länge (ob irgendwas drin steht) bei einem int-Wert herausfinden und dann der Datenbank über QT einen "null"-Wert zurückgeben (also leeres Feld)
Hier im folgenden der Code. Im Hauptprogramm findet man den Platzhalter für Durchwahl in einer Schleife für die Eingabe mehrerer Telefonnummer für eine Person.
Code: |
// qtdb.cpp
// Zugriff auf die Tabelle "X_Person"
// Zugrundeliegende Tabellendefinition: // CREATE TABLE X_Person ( // nummer SERIAL PRIMARY KEY, // vorname VARCHAR(30) NOT NULL, // nachname VARCHAR(30) NOT NULL, // gebjahr INTEGER // );
// �bersetzen und Ausf�hren mittels: // g++ -I /usr/include/qt4 -I /usr/include/qt4/Qt qtdb.cpp -lQtSql -lQtCore // ./a.out
#include <iostream> using std::cin; // Standardeingabestrom. using std::cout; // Standardausgabestrom. using std::endl; // Zeilentrenner.
#include <cctype>
#include <QtCore> #include <QtSql>
// Eingabezeile lesen und als QString liefern. // Zwischenraum am Anfang wird �berlesen. QString readstr () { char c; QString s; while (cin.get(c) && (c == ' ' || c == '\t')) ; while (cin && c != '\r' && c != '\n') { s += c; cin.get(c); } return s; }
// Eingabezeile als nichtnegative ganze Zahl lesen. // Zwischenraum am Anfang wird �berlesen. // Wenn etwas anderes als eine Folge von Ziffern eingegeben wird, // ist der Resultatwert -1. int readint () { char c; int i = 0; while (cin.get(c) && c == ' ' || c == '\t') ; while (cin && isdigit(c)) { i = i * 10 + c - '0'; cin.get(c); } if (c == '\r' || c == '\n') return i; while (cin && c != '\r' && c != '\n') cin.get(c); return -1; }
// Hauptprogramm. int main (int argc, char* argv []) { // Jede Qt-Anwendung muss genau ein Objekt der Klasse // QApplication oder QCoreApplication erzeugen. // Wenn das Programm keine GUI verwendet, gen�gt QCoreApplication. // Der Konstruktor des Objekts wird mit den Parametern argc und argv // von main aufgerufen.
QString vorname, nachname, temp; int prio =1, personid, landesvorwahl, vorwahl, rufnummer, durchwahl;
do { cout << "PersonId: "; personid = readint(); } while (personid == -1); do { cout << "Vorname: "; vorname = readstr(); } while (vorname == ""); do { cout << "Nachname: "; nachname = readstr(); } while (nachname == "");
query.prepare("INSERT INTO b_person (personid, vorname, nachname) " "VALUES (:personid, :vorname, :nachname);"); query.bindValue(":personid", personid); query.bindValue(":vorname", vorname); query.bindValue(":nachname", nachname); if (!query.exec()) { cout << "Cannot insert!" << endl; exit(3); }
do{ cout << prio<<"."<< "Telefonnummer" << endl; prio=++prio; do { cout << "Landesvorwahl: "; landesvorwahl = readint(); } while (landesvorwahl == -1); if(!landesvorwahl.IntToString.length()) break; do { cout << "Vorwahl: "; vorwahl = readint(); } while (vorwahl == -1); if(!vorwahl.IntToString.length()) break; do { cout << "Rufnummer: "; rufnummer = readint(); } while (rufnummer == -1); if(!rufnummer.IntToString.length())break; do { cout << "Durchwahl: "; durchwahl = readint(); }while(durchwahl == -1);
query.prepare("INSERT INTO b_telnr (landesvorwahl,vorwahl,rufnummer,durchwahl,prio,personid) " "VALUES (:landesvorwahl, :vorwahl, :rufnummer, :durchwahl, :prio , :personid);"); query.bindValue(":landesvorwahl", landesvorwahl); query.bindValue(":vorwahl", vorwahl); query.bindValue(":rufnummer", rufnummer); query.bindValue(":durchwahl", durchwahl); query.bindValue(":prio", prio); query.bindValue(":personid", personid); if (!query.exec()) { cout << "Cannot insert!" << endl; exit(3); } }while(1);
// Anfrage ausf�hren und Ergebnismenge ausgeben. // query.next geht zum ersten bzw. n�chsten Datensatz. // query.value(i) liefert den Wert der i-ten Spalte // (numeriert ab 0) des aktuellen Datensatzes. // toString, toInt etc. wandeln diesen Wert in den passenden Typ um // (z. B. QString oder int). // toStdString wandelt einen QString in einen std::string um, // der mittels << ausgegeben werden kann. if (!query.exec("SELECT * FROM b_person left join b_telnr ON b_person.personid = b_telnr.personid;")) { cout << "Cannot select!" << endl; exit(4); } cout << "PersonID | Vorname | Nachname | TelefonnummerID | Landesvorwahl| Vorwahl | Rufnummer | Durchwahl " << endl; while (query.next()) { cout << query.value(0).toInt() << " | " << query.value(1).toString().toStdString() << " | " << query.value(2).toString().toStdString() << " | " << query.value(3).toInt() << " | " << query.value(4).toInt() << " | " << query.value(5).toInt() << " | " << query.value(6).toInt() << " | " << query.value(7).toInt() << " | " << endl;
} }
|
|