Hausaufgaben Verwaltungs Programm
-
Generell würde ich nicht C und C++ Code mischen.
-
Ist
time_t timestamp; struct tm *dolle_zeit; timestamp = time(0); dolle_zeit = localtime(×tamp); printf("%d.%d.%d", dolle_zeit->tm_mday,dolle_zeit->tm_mon +1,dolle_zeit->tm_year+1900 );etwa c++? Ich habe diesen Code im Internet gefunden
Gruß
ManuhPS: Weil soweit ich weiß ist printf() auch eine c++ Funktion
-
Mein Vorschlag, entwerfe erst mal eine Struktur und eine Klasse , mach dir Gedanken über die Aufgaben die deine Klasse erledigen muss und welche Funktionen sie brauchen wird und stell hier deinen Entwurf für die Klasse vor.
Mal als Beispiel:struct aufgabe_termin { time_t timestamp; string hausaufgabe; }; class hausaufgaben { public: hausaufgaben() { dateneinlesen();} ~hausaufgaben() { datensichern();} void eingabe(); void ausgabe(); private: vector<aufgabe_termin> mycontainer; // dafür brauchste die struct // ... wird Zauberei! void dateneinlesen(); void datensichern(); void sortieren(); void suchen(); };
-
PS: Weil soweit ich weiß ist printf() auch eine c++ Funktion
Hmm ... ganz ehrlich? NEIN!
Hmm ... die Zeitfunktionen sind nun mal alle in C ...
#include <iostream> #include <ctime> int main() { time_t time_current; time(&time_current); std::cout << "-\t\tWillkommen zum Hausaufgaben Verwalter\t\t-" << std::endl; std::cout << ctime(&time_current) << std::endl; return 0; }sollte es aber dennoch heißen ...
-
123 schrieb:
Mein Vorschlag, entwerfe erst mal eine Struktur und eine Klasse , mach dir Gedanken über die Aufgaben die deine Klasse erledigen muss und welche Funktionen sie brauchen wird und stell hier deinen Entwurf für die Klasse vor.
Mal als Beispiel:struct aufgabe_termin { time_t timestamp; string hausaufgabe; }; class hausaufgaben { public: hausaufgaben() { dateneinlesen();} ~hausaufgaben() { datensichern();} void eingabe(); void ausgabe(); private: vector<aufgabe_termin> mycontainer; // dafür brauchste die struct // ... wird Zauberei! void dateneinlesen(); void datensichern(); void sortieren(); void suchen(); };
Danke auch wenn ich mit meinen Kenntnissen noch nicht soweit bin das genau zu kapieren, ich werde es denke mal trotzdem irgendwie benutzen wenn ichs dank Eurer Hilfe shcaffen werde, ich möchte auch nicht unbedingt das der Stundenplan erst im Programm abgefragt wird sondern schon vordefiniert ist, das mit dem Nachträglichen selbst bestimmung des Stundenplans kann ich später noch machen.
Speichern soll er es einfach in einer Lesbaren .txt datei, die nicht per Algorythmus verschlüsselt werden soll.
Die eingabe der neuen Hausaufgabe mache ich doch dann nun am besten mit einem
cin>>eingabe oder? Brauch ich denn nicht für jede Hausaufgabe eine neue Deklaration weil wenn ich dann z.b. die Deutschhausaufgaben in der Eingabe definiere ist dort ja kein Platz mehr für andere Fächer oder sehe ich hier was falsch?
Gruß und vielen Dank
Manuel!
-
Hi,
so leid es mir tut, aber evtl. solltest du erstmal die Grundlagen lernen dein angesprochenes "Problem" lässt sich übrigens mit Array oder der STL ohne Probleme lösen.Gruß
-
hmm`? naja er hat dir da eigentlich mehr so nen pseudocode geliefert ... genau so müssen die Punktionen natürlich nicht aussehen ... aber mal sein Ansatz erklärt:
struct aufgabe_termin // Jede einzellne Hausaufgabe { time_t timestamp; // Der Zeitpunkt der Aufgabe string hausaufgabe; // Und was du machen sollst ... }; class hausaufgaben { public: hausaufgaben() { dateneinlesen();} // Halt beim erstellen der Klasse direkt mal die Daten(also die ganzen Hausaufgaben) einlesen ~hausaufgaben() { datensichern();} // Und beim zerstören auch wieder alles speichern ... void eingabe(); // halt ne neue hausaufgabe eingeben ... void ausgabe(); // alle hausaufgaben ausgeben ... private: std::vector<aufgabe_termin> mycontainer; // Ein Vektor ist sozusagen ein dynamischer Array ... vereinfacht fürs Verständnis ;) ... also da packst du dann mit push_back ne neue Hausaufgabe rein ... void dateneinlesen(); // Die Funktion zum einlesen der Hausaufgaben (siehe kontruktor) void datensichern(); // Zum Speichern(siehe Destruktor) void sortieren(); // Die Hausaufgaben nach irgendwelchen Kriterien sortieren ... void suchen(); // Nach irgendwas suchen ... };
-
Ich hab jetzt den Aufbau so übernommen, jedoch weiß ich nicht wie ich die Funktion einbauen kann, das er die Hausaufgaben einliest, und dann auch am richtigen Wochentag ausgibt, hier mal mein bisheriger Sourcecode:
#include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> using namespace std; struct aufgabe_termin // Jede einzellne Hausaufgabe { time_t timestamp; // Der Zeitpunkt der Aufgabe string hausaufgabe; // Und was du machen sollst ... }; class hausaufgaben { public: hausaufgaben() { dateneinlesen();} // Halt beim erstellen der Klasse direkt mal die Daten(also die ganzen Hausaufgaben) einlesen ~hausaufgaben() { datensichern();} // Und beim zerstören auch wieder alles speichern ... void eingabe(); // halt ne neue hausaufgabe eingeben ... void ausgabe(); // alle hausaufgaben ausgeben ... private: void dateneinlesen(); // Die Funktion zum einlesen der Hausaufgaben (siehe kontruktor) void datensichern(); // Zum Speichern(siehe Destruktor) void sortieren(); // Die Hausaufgaben nach irgendwelchen Kriterien sortieren ... void suchen(); // Nach irgendwas suchen ... }; int main(){ int auswahl; time_t time_current; time(&time_current); std::cout << "-\t\tWillkommen zum Hausaufgaben Verwalter\t\t-" << std::endl<<endl<<endl; std::cout << "Heute ist "; std::cout << ctime(&time_current) << std::endl; cout<<"Was moechtest du tun:"<<endl; cout<<"1. Hausaufgaben eingeben"<<endl; cout<<"2. Hausaufgaben erledigen"<<endl; cin>>auswahl; cout<<"Du hast dich fuer "<<auswahl<<" entschieden"<<endl; cout<<"Viel Spass!"<<endl; getch(); cout<<"Fuer Heute sind folgende Aufgaben zu erledigen: "<<endl; cout<<ausgabe<<endl; if (auswahl==1) { cout<<eingabe<<endl; } if (auswahl==2) { cout<<ausgabe<<endl; } else { cout<<"Falsche Eingabe, bitte Programm erneut ausfueren"<<endl; } system("PAUSE"); }
-
#include <iostream> #include <vector> #include <string> using namespace std; struct aufgabe_termin { int Unterrichtsfach; time_t timestamp; string hausaufgabe; }; class hausaufgaben { public: hausaufgaben() {} //dateneinlesen();} ~hausaufgaben() {} //datensichern();} void eingabe(); void ausgabe(); private: vector<aufgabe_termin> mycontainer; // dafür brauchste die struct aufgabe_termin mystruct ; // ... wird Zauberei! void dateneinlesen(); void datensichern(); void sortieren(); void suchen(); }; void hausaufgaben::eingabe() { char a = 0; cout << "Deutsch = 1, Physik = 2 usw." << endl; do { cout << "Bitte Nummer fuer Unterrichtsfach eingeben: " << endl; cin >> mystruct.Unterrichtsfach; // Hier wär ne Reaktion auf falsche Eingabe angezeigt // Die Eingabefunktion braucht weiterhin Hausaufgabe und timestamp // ... // ... mycontainer.push_back(mystruct); cout << "Weitere Hausaufgaben eingeben? J/N" << endl; cin >> a; }while(a == 'J' || a == 'j'); } int main() { hausaufgaben my; my.eingabe(); }Dann schreib mal die eingabe() Funktion fertig und teste Sie, poste sie, wenn du sie fertig hast. Versuch auch Fehler bei der Eingabe abzufangen.
mfg Mit welchem Compiler und Betriebssystem arbeitest du? Mich wundert das getch(); und system() in deinem Code.
-
Ich benutz den Dev-C++ Compiler und Windows XP,
ich weiß noch nicht genau wie ich die Eingabe Funktion schreiben soll, da ich noch nicht sehr gut in C++ bin, ich probier aber mal das besteGruß
manuhEdit: Soll ich für jedes Fach extra eine "void eingabe" schreiben, oder gibt es eine Möglichkeit alles in eines zu packen, anonsten müsste ich jedes Fach einzeln Definieren, damit man da dann seine Hausaufgaben rein schreibem kann
-
Iksde schrieb:
Ich benutz den Dev-C++ Compiler und Windows XP,
Soll ich für jedes Fach extra eine "void eingabe" schreiben, oder gibt es eine Möglichkeit alles in eines zu packen, anonsten müsste ich jedes Fach einzeln Definieren, damit man da dann seine Hausaufgaben rein schreibem kannNein brauchst Du nicht!
struct aufgabe_termin { int Unterrichtsfach; // = Sortierkriterium time_t timestamp; // = Sortierkriterium string hausaufgabe; };das wird nach jeder Eingabe in den vector gepusht und ist erstmal verstaut.
Schreib die Eingabefunktion so wie du es für richtig hälst.
mfg
-
#include <iostream> #include <vector> #include <string> #include <algorithm> struct work_entry { unsigned short subject; time_t timestamp; std::string work; work_entry() : subject(0), timestamp(0) {} }; class HomeworkManager { public: HomeworkManager() {} //dateneinlesen();} ~HomeworkManager() {} //datensichern();} public: void insert_item(const work_entry&); void show_item(const short); // -1 == all entrys public: void sort(const bool); // ascending public: bool read_file(const std::string&); bool write_file(const std::string&); private: std::vector<work_entry> m_works; }; void HomeworkManager::insert_item(const work_entry& entry) { m_works.push_back(entry); } void HomeworkManager::show_item(const short id) { if (id == -1) { for (size_t item = 0; item < m_works.size(); ++item) std::cout << m_works[item].work << " | " << m_works[item].timestamp << std::endl; } else if (id > 0 && static_cast<unsigned short>(id) < m_works.size()) { std::cout << m_works[id].work << " | " << m_works[id].timestamp << std::endl; } } bool my_sort_asc(const work_entry& l, const work_entry& r) { return l.timestamp < r.timestamp; } bool my_sort_desc(const work_entry& l, const work_entry& r) { return l.timestamp > r.timestamp; } void HomeworkManager::sort(const bool ascending) { std::sort(m_works.begin(), m_works.end(), (ascending == true ? my_sort_asc : my_sort_desc)); } int main() { HomeworkManager manager; char a = '\0'; std::cout << "Deutsch = 1, Physik = 2 usw." << std::endl; do { work_entry entry; std::cout << "Bitte Nummer fuer Unterrichtsfach eingeben: " << std::endl; std::cin >> entry.subject; // usw ... manager.insert_item(entry); std::cout << "Weitere Hausaufgaben eingeben? J/N" << std::endl; std::cin >> a; } while(a == 'J' || a == 'j'); manager.show_item(-1); }... hab jetzt nur die Klasse korrigiert und die daraus folgenden Funktionsänderungen auch in der main geändert ... aber da lässt sich noch einiges rausholen

-
so ..
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <ctime> struct work_entry { unsigned short subject; time_t timestamp; std::string work; work_entry() : subject(0), timestamp(0) {} }; class HomeworkManager { public: HomeworkManager() {} //dateneinlesen();} ~HomeworkManager() {} //datensichern();} public: void insert_item(const work_entry&); void show_item(const short); // -1 == all entrys public: void add_subject(const std::string&); void list_subjects(void); public: void sort(const bool); // ascending public: bool read_file(const std::string&); bool write_file(const std::string&); private: std::vector<work_entry> m_works; std::vector<std::string> m_subjects; }; void HomeworkManager::insert_item(const work_entry& entry) { m_works.push_back(entry); } void HomeworkManager::show_item(const short id) { if (id == -1) { for (size_t item = 0; item < m_works.size(); ++item) std::cout << m_works[item].work << " | " << m_works[item].timestamp << std::endl; } else if (id > 0 && static_cast<unsigned short>(id) < m_works.size()) { std::cout << m_works[id].work << " | " << m_works[id].timestamp << std::endl; } } bool my_sort_asc(const work_entry& l, const work_entry& r) { return l.timestamp < r.timestamp; } bool my_sort_desc(const work_entry& l, const work_entry& r) { return l.timestamp > r.timestamp; } void HomeworkManager::sort(const bool ascending) { std::sort(m_works.begin(), m_works.end(), (ascending == true ? my_sort_asc : my_sort_desc)); } void HomeworkManager::add_subject(const std::string& subject) { m_subjects.push_back(subject); } void HomeworkManager::list_subjects(void) { std::cout << "* Subjects: " << std::endl; for (size_t item = 0; item < m_subjects.size(); ++item) std::cout << "\t" << (item + 1) << ": " << m_subjects[item] << std::endl; } int main() { HomeworkManager manager; manager.add_subject("Deutsch"); manager.add_subject("Physik"); manager.add_subject("Mathematik"); std::cout << "-\t\tHomeworkManager V0.1\t\t-" << std::endl; unsigned short selection = 0; while (selection != 3) { std::cout << "* Menu" << std::endl; std::cout << "\t(1) Add new item" << std::endl; std::cout << "\t(2) Show items" << std::endl; std::cout << "\t(3) Exit" << std::endl; std::istringstream ss; std::string string_input; do { std::getline(std::cin, string_input); ss.clear(); ss.str(string_input); ss >> selection; } while (!ss || selection > 3); switch (selection) { case 1: { std::cout << "* New entry: " << std::endl; manager.list_subjects(); work_entry entry; std::cout << "\n\tUnterrichtsfach: " << std::flush; do { std::getline(std::cin, string_input); ss.clear(); ss.str(string_input); ss >> entry.subject; } while (!ss); std::cout << "\tWork: " << std::flush; std::getline(std::cin, entry.work); entry.timestamp = time(NULL); manager.insert_item(entry); } break; case 2: { manager.show_item(-1); } break; } } }
-
Ich hab das mal kopier und eingefügt aber bekomm bei
std::istringstream ss;Leider immer ein Compiler Error :
103 C:\Dev-Cpp\et+.cpp aggregate `std::istringstream ss' has incomplete type and cannot be defined
-
Nimm <sstream> !

-
nur oben
#include <sstream> zusätzlich einfügen!
-
Dankeschön das Programm funktioniert bis jetzt ganz gut, allerdings ist irgendein Fehler drin, da immer wenn ich die Eingegebenen Hausaufgaben anschauen möchte, nur eine Zahl dortsteht wo eigentlich das Fach stehen sollte,
wenn ich folgenden Code:void HomeworkManager::show_item(const short id) { if (id == -1) { for (size_t item = 0; item < m_works.size(); ++item) std::cout << m_works[item].work << " | " << m_works[item].timestamp << std::endl; } else if (id > 0 && static_cast<unsigned short>(id) < m_works.size()) { std::cout << m_works[id].work << " | " << m_works[id].timestamp << std::endl; } }in
void HomeworkManager::show_item(const short id) { if (id == -1) { for (size_t item = 0; item < m_works.size(); ++item) std::cout << m_works[item].work << " | " << m_works[item].subject << std::endl; } else if (id > 0 && static_cast<unsigned short>(id) < m_works.size()) { std::cout << m_works[id].work << " | " << m_works[id].subject << std::endl; } }änder, steht dort dann auch nur die Zahl die dem Fach zugeordnet wurde!
Vielen Dank schonmal!
Gruß
Manuh
-
(D)Evil wenn du schon kein using namespace std; benutzen tust warum machst du dann nicht einfach using std::cout, wenn du nicht den ganzen namensbereich einbinden willst
-
Ja das ist das Problem ... du sollst den Code nicht übernehmen ... nimm ihn einfach als Beispiel ...
void HomeworkManager::show_item(const short id) { if (id == -1) { for (size_t item = 0; item < m_works.size(); ++item) std::cout << m_works[item].timestamp << " | " << m_works[item].work << " | " << (m_works[item].subject > m_subjects.size() ? "Unknown" : m_subjects[m_works[item].subject - 1]) << std::endl; } else if (id > 0 && static_cast<unsigned short>(id) < m_works.size()) { std::cout << m_works[id].timestamp << " | " << m_works[id].work << " | " << (m_works[id].subject > m_subjects.size() ? "Unknown" : m_subjects[m_works[id].subject - 1]) << std::endl; } }So ... damit du das auch vestehst ...
if (m_works[item].subject > m_subjects.size()) // Er soll gucken, ob die ID, die als Fach vom Benutzer // angegeben wurde, überhaupt als Fach bei uns registriert ist ... std::cout << "Unknown"; // Ist es nicht der Fall soll er "Unknown" ausgeben, d.h. wir wissen es halt // nicht wie das Fach heißt ... else m_subjects[m_works[item].subject - 1] // An sonsten wissen wir halt wie es heißt und wir wollen, // das er uns den Namen ausgibt. Also nehmen wir die ID des Faches und geben die einfach mal aus ;) // Und das -1 kommt da noch hin, weil wir beim ausgeben der Subject-Liste hingegangen sind und // haben einfach eins dazu addiert ... das muss hier wieder wech ;)
-
Danke, solangsam versteh ich den groben Aufbau des Programmes auch!
Nun habe ich das Programm auf meinen Stundenplan abgestimmt, und es wird auch nicht mehr die ID, sondern das Fach angezeigt wenn ich mir meine Hausaufgaben anzeigen lasse, nun brauch ich aber noch eine Funktion womit ich die Hausaufgabe als erledigt markieren kann, damit sie aus dem Speicher verschwindet.So sieht mein Sourcecode bis jetzt aus:
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <ctime> #include <sstream> using namespace std; struct work_entry { unsigned short subject; time_t timestamp; std::string work; work_entry() : subject(0), timestamp(0) {} }; class HomeworkManager { public: HomeworkManager() {} //dateneinlesen();} ~HomeworkManager() {} //datensichern();} public: void insert_item(const work_entry&); void show_item(const short); // -1 == all entrys public: void add_subject(const std::string&); void list_subjects(void); public: void sort(const bool); // ascending public: bool read_file(const std::string&); bool write_file(const std::string&); private: std::vector<work_entry> m_works; std::vector<std::string> m_subjects; }; void HomeworkManager::insert_item(const work_entry& entry) { m_works.push_back(entry); } void HomeworkManager::show_item(const short id) { if (id == -1) { for (size_t item = 0; item < m_works.size(); ++item) std::cout << m_works[item].work << " - " << (m_works[item].subject > m_subjects.size() ? "Unbekannt" : m_subjects[m_works[item].subject - 1]) << std::endl; } else if (id > 0 && static_cast<unsigned short>(id) < m_works.size()) { std::cout << m_works[id].timestamp << " | " << m_works[id].work << " | " << (m_works[id].subject > m_subjects.size() ? "Unbekannt" : m_subjects[m_works[id].subject - 1]) << std::endl; } } bool my_sort_asc(const work_entry& l, const work_entry& r) { return l.timestamp < r.timestamp; } bool my_sort_desc(const work_entry& l, const work_entry& r) { return l.timestamp > r.timestamp; } void HomeworkManager::sort(const bool ascending) { std::sort(m_works.begin(), m_works.end(), (ascending == true ? my_sort_asc : my_sort_desc)); } void HomeworkManager::add_subject(const std::string& subject) { m_subjects.push_back(subject); } void HomeworkManager::list_subjects(void) { std::cout << "* Subjects: " << std::endl; for (size_t item = 0; item < m_subjects.size(); ++item) std::cout << "\t" << (item + 1) << ": " << m_subjects[item] << std::endl; } int main() { HomeworkManager manager; manager.add_subject("Deutsch"); manager.add_subject("Englisch"); manager.add_subject("Mathematik"); manager.add_subject("Technik"); manager.add_subject("Geschichte"); manager.add_subject("Medien"); manager.add_subject("Kunst"); manager.add_subject("Religion"); manager.add_subject("Biologie"); manager.add_subject("Erdkunde"); manager.add_subject("Sport"); manager.add_subject("Politik"); manager.add_subject("Chemie"); std::cout << "-\t\tHomeworkManager V0.1\t\t-" << std::endl; unsigned short selection = 0; while (selection != 3) { std::cout << "* Menu" << std::endl; std::cout << "\t(1) Add new item" << std::endl; std::cout << "\t(2) Show items" << std::endl; std::cout << "\t(3) Exit" << std::endl; std::istringstream ss; std::string string_input; do { std::getline(std::cin, string_input); ss.clear(); ss.str(string_input); ss >> selection; } while (!ss || selection > 3); switch (selection) { case 1: { std::cout << "* New entry: " << std::endl; manager.list_subjects(); work_entry entry; std::cout << "\n\tUnterrichtsfach: " << std::flush; do { std::getline(std::cin, string_input); ss.clear(); ss.str(string_input); ss >> entry.subject; } while (!ss); std::cout << "\tWork: " << std::flush; std::getline(std::cin, entry.work); entry.timestamp = time(NULL); manager.insert_item(entry); } break; case 2: { manager.show_item(-1); } break; } } }Wisst ihr wie ich das machen könnte?
Vielen Dank schonmalGruß
Manuh