Hausaufgaben Verwaltungs Programm



  • Hi, ich hatte heute in der Schule eine Idee (nachdem ich mal wieder Mathe Hausaufgaben vergessen hatte :P), und zwar möchte ich eine Anwendung programmieren bei der ich am Anfang des Tages abgefragt werde welche neuen Hausaufgaben hinzugekommen sind, danach soll Angezeigt werden welche noch alle zu erledigen sind für den nächsten tag. Und das soll am besten alles mit der Windows Uhr synchronisiert werden sodass man am Anfang halt immer Stundenplan gerecht genau die Fächer abgefragt wird, die man auch hatte.
    Bin noch ziemlicher c++ Anfänger, aber denke doch das ich die Idee irgendwie Verwirklichen kann,
    hat von euch jemand Tipps wie ich diese Sache am besten angehe?

    Gruß
    Manuh



  • Hallo

    Auch wenn es nerct, aber du solltest dir Tutorials durchlesen und dann konkrete Fragen stellen. Wenn du das ganze nicht nur in der Konsole, sondern in Win-Look machen willst, kommt natürlich noch mehr Arbeit auf dich zu, aber es macht Spass, also ran an die Buletten.

    chrische



  • Ich wollte zunächst erstmal ein Simples Konsolen Programm schreiben, die Zeit hab ich nun mittels:

    #include <iostream>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>
    
    using namespace std;
    
    int main(){
    time_t timestamp;
    struct tm *dolle_zeit;
    timestamp = time(0);
    dolle_zeit = localtime(&timestamp);
    printf("%d.%d.%d", dolle_zeit->tm_mday,dolle_zeit->tm_mon +1,dolle_zeit->tm_year+1900 );
    cout<<"           Willkommen zum Hausaufgaben Verwalter"<<endl;
    
    cout<<""<<endl;
    system("PAUSE");
    }
    

    eingefügt, ich weiß nun nur nich genau wie es verwirklicht werden soll, dass es mittels Datum den Stundenplan scannen kann, und wie ich dann danach abgefragt werden kann.
    Ich schaue mich ja schon viel in Tutorials um, nur ich denke das man durch selbst geschriebene Programme die meiste Erfahrung gewinnt und es auch mehr Spaß macht da die Idee von einem selbst kommt.

    Gruß
    Manuh



  • Generell würde ich nicht C und C++ Code mischen.



  • Ist

    time_t timestamp;
    struct tm *dolle_zeit;
    timestamp = time(0);
    dolle_zeit = localtime(&timestamp);
    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ß
    Manuh

    PS: 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 beste

    Gruß
    manuh

    Edit: 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 kann

    Nein 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


Anmelden zum Antworten