[C++] Ein erstes Projekt.

  • Themenstarter Themenstarter Bgag
  • Beginndatum Beginndatum
B

Bgag

Guten Abend,

Wie der Titel dieses Threads bereits verrät beschäftige ich mich erst seit kurzem mit C++. Ich habe zwar etwas in C programmiert und natürlich auch einige kleinere Programme in C++ verfasst, jedoch habe ich noch kein richtiges Projekt in C++ umgesetzt. Ich habe zwar Programmiererfahrungen in PHP, Java, Matlab, C# und C gesammelt, aber C++ ist etwas ganz neues für mich. Daher benötige ich noch etwas Hilfe.

Ich möchte ein kleines Verwaltungstool schreiben, dass es mir erlaubt Konten, Projekte, Iterationen, Tasks und TimeTabs zu administrieren. Es sollen Konten für verschiedene Benutzer angelegt werden können. Nun soll es möglich sein verschiedene Projekte anzulegen, die einem oder mehreren Benutzern zugewiesen werden können. Einem Projekt sollen Iterationen, also Aufgabenbereiche zugeordnet werden können, denen die Eigentlichen Aufgaben (Tasks) zugewiesen werden können, die wiederum an Mitglieder des Projekts delegiert sein können. Jedem Nutzer sollen TimeTabs zugeordnet sein, die er sich für jeden Monat anlegen kann. Dort werden dann seine Arbeitszeiten festgehalten.

Da ich keinen großen Wert auf grafische Oberflächen lege und ich es außerdem als nicht sehr förderlich für den Lernprozess empfinde, soll es sich um ein Programm handeln, dass ich später auf der Linux Shell nutzen möchte.

Das ganze klingt sehr umfangreich und ist es auch, aber ich möchte ja etwas lernen. Um es jedoch gleich richtig anzugehen und mir später die Arbeit zu vereinfachen möchte ich zuerst ein paar Basisklassen schreiben.

Das Filtern und Validieren von Daten soll in kleinen Klassen Bibliotheken zusammenfassen werden, die teilweise Regex verwenden wenden. Kennt jemand ein gutes Tutorial dafür oder kann mir ein einfaches Beispiel für die Verwendung von RegEx in C++ geben?

Des weiteren wird es erforderlich sein einige einfache Datenhaltende Klassen zu schreiben, die zum Beispiel eine Person repräsentieren. Es wäre aber eigentlich schöner, wenn man nur mit einem Domain Objekt arbeiten könnte, dass die Daten hält und CRUD-Operationen bereitstellt. Ist das möglich?

Außerdem denke ich, dass es recht ermüdent ist "Formulare" und Menüs jedes mal neu zu implementieren. Ich denke auch das könnten Klassen übernehmen. Ich habe jedoch keine Ahnung, wie ich das in C++ fassen soll. Jemand eine Idee?

Zuletzt würde es mich noch interessieren, wie Ihr Datensätze "großer" Anzahl speichert und ob ihr mir Bibliotheken für die Verwendung von XML, access, CSV und regex empfehlen könnt?

Freue mich auf eure Rückmeldung.

Liebe Grüße,

Andy
 
Als erstes empfehle ich dir, den Gnu-C++-Compiler zu verwenden. Am besten ist es, wenn du als Ergänzung auch wxWidgets dazu nimmst. Das bietet dir nicht nur die Möglichkeit, eine GUI zu verwenden (oder auch nicht;), sondern hat auch Datenbankunterstützung. Von Access rate ich dir ab. Wenn du keine 'richtige' Datenbank hast, kannst du die Daten durchaus in XML oder csv speichern. Es gibt aber auch die Möglichkeit, die Daten in einer Tabellenkalkulationsdatei zu speichern. Die liest du dann nicht direkt ein, sondern greifst mit ODBC darauf zu. Dann kannst du nämlich auch Datenbankklassen verwenden, um sie zu verarbeiten.
In C# gibt es die Möglichkeit, XML-Dateien mit einem DataSet zu lesen oder zu speichern. In C++ wird das wahrscheinlich nicht so einfach sein, aber da solltest du die jeweilige Doku mal durchstöbern.
 
Guten Morgen!

Danke erstmal für eure Antworten. Kam leider die letzten Tage nicht dazu hier mal rein zu schauen.

Den GNU C++ Compiler verwende ich bereits. wxWidgets werde ich mir in den kommenden Tagen mal anschauen.

Das Speichern von Daten betreffend werde ich sowohl auf xml als auch auf csv setzen, da es so möglich ist, die Daten auch in Excel zu importieren bzw. exportieren. Leider habe ich weder für das eine noch das andere eine ansprechende Bibliothek gefunden. Im Standard ist dies scheinbar nicht vorgesehen und die meisten externen Bibliotheken sind mir im Handling zu umständlich. Eine Lib für den Einsatz von xml hab ich jedoch gefunden. Nun würde mich interessieren, was ihr davon haltet.

Meine zweite Frage bezieht sich auf den Einsatz von Domain-Objekten. Ist eine allgemeine Implementierung eines Domain-Objekts, also eines Objekts, das lediglich einen Daten-Vektor, sowie Zugriffsfunktionen für diese Daten bereitstellt sinnvoll? Zum besseren Verständnis hier ein kurzes Beispiel.

Code:
class DomainObject
{
        public:
                std::string getField(std::string key) const;
                void setField(std::string& key, std::string& value);
        private:
                map<std::string,std::string> record;
};

Alternativ und vielleicht auch etwas reizvoller wäre die Implementierung eines ActiveRecords, dass die Speicherung in einer XML- bzw. CSV-Datei ermöglicht. DIe Frage ist, wie man soetwas in C++ angehen kann und ob es vielleicht bessere Möglichkeiten bzw. Bibliotheken gibt, die einem diese Arbeit abnehmen.

Freue mich auf eure Antworten.

Liebe Grüsse,

Andreas
 
Hi.

Der kommende C++ Standard wird reg. Ausdrücke beinhalten (abgeleitet von Boost.Regex). Der GCC enthält bereits eine Implementierung dafür seit Version 4.3.0. Siehe http://www.codeproject.com/KB/string/TR1Regex.aspx

Der XML Parser den du gefunden hast sieht soweit gut aus. Du könntest auch TinyXML verwenden, das unterstützt auch noch XPath - unterstützt aber nicht so viele Zeichensätze.

Ich glaube du bringst auch irgendwas durcheinander mit deinem Domain Objekt. Ein Domänen-Objekt (Business Object) ist eine bestimmte Entität aus der Domäne um die es geht (z.B. ein Student), dieses enthält für das Objekt übliche Operationen und Attribute. Zusätzlich könnte man ein Datenzugriffsobjekt (DAO) erstellen um den Zugriff auf die Datenhaltung zu realisieren. Dein Code-Beispiel hat mit beidem wenig zu tun.

Ansonsten hat die Boost Bibliothek eine Unmenge an Funktionen (zur Serialisierung, zum Parsen (CSV mit Boost => http://stackoverflow.com/questions/1120140/csv-parser-in-c) die einem das Leben leichter machen. Du könntest dir auch mal Poco (http://pocoproject.org/) oder dlib anschauen.

Zuletzt: Warum willst du das in C++ machen? Ich würde eine andere Sprache wählen.

Gruß
 
wxWidgets beinhaltet auch eine Library für XML-Programmierung. Die Zugriffsmethoden sind allerdings nicht so komfortabel wie in der Library, die du gefunden hast; man kann die Kindknoten nur sequentiell durchlaufen, aber nicht per Namen abrufen. Aber natürlich werden auch hier die Knoten baumförmig verwaltet..
Was du (seltsamerweise) DomainObject genannt hast, gleicht dem wxWidgets-Datentyp wxHashMap. Du brauchst das Rad also nicht neu zu erfinden. Allerdings wäre es für dich wahrscheinlich sinnvoller, die Daten einfach in einer wxDbTable zu verwalten, dann was du haben zu wollen scheinst ist die allgemeine Repräsentation einer Datenzeile.
Für den Zugriff auf Access-Datenbanken (und auch andere) kannst du die wxDb-Klassen verwenden. Die Verbindung zu einer Datenbank funktioniert per ODBC.
 
Zuletzt bearbeitet:
Zurück