Strukturen & Klassen (Aufgabe)
-
Ich brauche dringend Hilfe. Die Aufgabe muss ich haben um das Testat mitschreiben zu können. Bis jetzt hat es bei allen Aufgaben geklappt aber bei diesem komm ich irgendwie nicht mehr weiter.
Die aufgabe mache ich mit Viusla Studio 2010 ...
Aufgabe lautet so:
Aufgabe: ( Strukturen & Klassen )
Schreiben Sie ein Programm, das einen einfachen Terminkalender implementiert. Der Benutzer kann dabei folgende Werte für einen Termin in den Terminkalender setzen: Titel, Beginn (Datum und Zeit), Dauer und Ort. Der Terminkalender soll außerdem folgende Daten abrufen können: Titel, Datum, Anfangs- und Endzeit eines Termins.
Gehen Sie dabei wie folgt vor:
• Legen Sie ein neues leeres Projekt mit dem Namen exercise4a an. Fügen Sie eine leere Quelldatei namens main.cpp dem Projekt hinzu.
• Definieren Sie eine Struktur (struct) Date, die aus drei integer Werten für Tag, Monat und Jahr besteht.
• Definieren Sie eine Struktur (struct) Time, die aus zwei integer Werten für Stunden und Minuten, besteht.
• Implementieren Sie eine Klasse namens Termin, die die private-Eigenschaften Titel, Beginn (Datum und Uhrzeit) und Dauer enthält.
Klassenfunktionen:
• Implementieren Sie Zugriffsfunktionen zum Setzen (set) und Auslesen (get) der Klasseneigenschaften. Stellen Sie sich sicher, dass nur gültige Werte gesetzt werden ( 0 < Stunden < 23, 0 < Minuten < 60 usw., nehmen Sie an, dass jeder Monat 31 Tage hat).
• Implementieren Sie einen Konstruktor, der als Parameter den Titel und das Datum eines Termins entgegen nimmt. Benutzen Sie dazu die Zugriffsfunktionen (set).
• Implementieren Sie einen zweiten Konstruktor, der als Parameter den Titel, das Datum und die Uhrzeit eines Termins entgegen nimmt. Benutzen Sie auch dazu die Zugriffsfunktionen (set).
• Implementieren Sie eine Funktion, die als Parameter die Anfangszeit und die Dauer entgegen nimmt, und die Endzeit berechnet. Stellen Sie sicher, dass die Zeitberechnung nur gültige Werte als Ergebnis zurückgibt.
Hauptprogramm:
• Erzeugen Sie in Ihrem Hauptprogramm (main) die folgenden Termine:
- Zahnarzt: 13.12.2010 um 15:45 Uhr, Dauer 45 Minuten.
- Silvesterparty: 31.12.2010 um 20:30 Uhr.
- Johns Geburtstag: 06.01.2011.• Lesen Sie die obige Werte ein. Beachten Sie dabei, dass nur gültige Werte eingelesen werden dürfen. Speichern Sie die Werte in den oben erzeugten Objekten.
• Geben Sie die oben eingegebenen Termine mit der Endzeit (Zahnarzttermin) und geeigneten Kommentaren auf dem Bildschirm aus.
Soweit bin ich grade..
#include <iostream> using namespace std; struct date { int tag, monat, jahr; }; struct time { int minuten, stunden; }; class termin { int titel; int beginn; int dauer; public: termin (); termin ( int, int); // titel, datum termin ( int, int, int); // titel, datum, uhrzeit int get_stunden(); // Zugriffsfunktion int get_minuten(); int get_monat(); int get_tag(); int get_jahr(); int get_titel(); int get_dauer(); void set_stunden (int stunden); void set_minuten (int minuten); void set_monat (int monat); void set_tag (int tag); void set_jahr (int jahr); void set_titel (int titel); void set_dauer (int dauer); };/edit pumuckl: cpp-Tags korrigiert
-
Weit bist du ja noch nicht gekommen. Was ist denn nun deine Frage eigentlich?
Bermerkung zu deinem code:
class termin { int titel; int beginn; int dauer; public: termin (); termin ( int, int); // titel, datum termin ( int, int, int); // titel, datum, uhrzeitWarum sind titel, beginn und dauer alle vom Typ int?
Zumal da noch das Datum fehlt.
Wäre nicht string, time, time, date (<- für Datum) wesentlich sinnvoller. Warum sonst solltest du wohl die structs anlegen?
Entsprechend sollten auch die Konstruktoren, getter und setter geändert werden.
-
[erledigt]
-
jana90 schrieb:
Klassenfunktionen:
• Implementieren Sie Zugriffsfunktionen zum Setzen (set) und Auslesen (get) der Klasseneigenschaften. ...
Hallo Jana 90,
willkommen im C++-Forum.
Du kannst nichts dafür, aber die obige Aussage ist ein Trauerspiel. Wozu macht man die Attribute einer Klasse denn private, wenn man anschließend - fast schon reflexartig - für jedes Attribut Getter- und Setter-Methoden implementiert?
Und sowas anscheinend in einer Ausbildung zum Programmieren
jana90 schrieb:
• Implementieren Sie einen Konstruktor, der als Parameter den Titel und das Datum eines Termins entgegen nimmt. Benutzen Sie dazu die Zugriffsfunktionen (set).
Hier spricht einiges dafür, dass der/die Dozent/in, keine Ahnung vom Codierung im Allgemeinen und C++ inklusive seiner Initialisierungslisten im besonderen hat.
Ein Aufruf eines 'set-Attribute' in einem Konstruktor ist wie ein Schuß in's Knie. Ein Attribute gehört in der Initialisierungsliste inititialisiert... ach - tue Dir selber mal einen Gefallen und stelle konkrete Fragen. Sonst ist es nur eine Frage der Zeit, bis sich der erste meldet, der Dir sagt, dass wir hier keine Hausaufgaben machen (machen wir aber manchmal doch
)
Wo ist denn geanu Dein Problem?Gruß
Werner
-
Werner Salomon schrieb:
Wozu macht man die Attribute einer Klasse denn private, wenn man anschließend - fast schon reflexartig - für jedes Attribut Getter- und Setter-Methoden implementiert?
Das liest sich fast, als würdest du dafür plädieren, Attribute, die sowohl gesetzt als auch gelesen werden können, public zu machen und die Getter und Setter wegzulassen. Das wäre natürlich Blödsinn.
Das einzige, was daran zu kritisieren wäre, ist das mechanische Anlegen von Gettern und Settern für alle Attribute.
-
Dankeschön für die Antworten.
Ich weiß, dass man hier keine hausuafgaben macht :-).
Wollte nur hilfestellung zu den teilaufhaben...
Ich wusste nicht wie ich überhaupt anfangen soll mit den klassenfuntionen und dem hauptprogramm.
Morgen werde ich konkrete fragen stellen.
-
Hab jetzt mal mein Programm ein bisschen geändert..
- Mit dem Hauptprogramm kann ich gar nicht anfangen... Ich weiß es einfach nicht...Ich kann irgendwie keine konkrete Fragen stellen , da ich nicht weiß ob der anfang stimmt...
ich komme mit der aufgabe nicht zurecht.. hab vielleicht bis jetzt zehn bücher durchgemacht.. es geht nicht
#include <iostream> using namespace std; struct date { string tag; string monat; string jahr; }; struct time { int minuten; int stunden; }; class termin { string titel; string beginn; int dauer; public: termin() ; termin( string titel, int date); termin(string datum, int date, int time); ~termin(); void set_titel(string titel); void set_date(int date); void set_time(int time); void print(); }; void endzeit ( int anfangszeit, int dauer);
-
#include <iostream> #include <string> using namespace std; struct Date {int tag, monat, jahr;}; struct Time {int stunden, minuten;}; typedef unsigned int uint; class Termin { string m_titel; Date m_date; Time m_time; uint m_dauer; bool setdate, setdauer, settime; public: Termin(string titel, Date date): settime(false), setdauer(false) {SetTitel(titel); SetDate(date);} Termin(string titel, Date date, Time time): setdauer(false) {SetTitel(titel); SetDate(date); SetTime(time);} Time ErstelleTermin(Time time, uint dauer) {SetTime(time); SetDauer(dauer); Time endtime = {0}; if(settime) {endtime = time; endtime.minuten += dauer; while(endtime.minuten > 60) {endtime.minuten -= 60; ++endtime.stunden;}} return endtime;} void SetTitel(string titel) {m_titel = titel;} void SetDate(Date date) {if(date.tag > 0 && date.tag < 32 && date.monat > 0 && date.monat < 13) {m_date = date; setdate = true;} else {setdate = false;}} void SetTime(Time time) {if(time.minuten >=0 && time.minuten < 60 && time.stunden >= 0 && time.stunden < 24) {m_time = time; settime = true;} else {settime = false;}} void SetDauer(uint dauer) {m_dauer = dauer; setdauer = true;} string GetTitel() {return m_titel;} Date GetDate() {return m_date;} Time GetTime() {return m_time;} uint GetDauer() {return m_dauer;} void Print() {cout << endl << m_titel << ": "; if(setdate) cout << m_date.tag << "." << m_date.monat << "." << m_date.jahr; if(settime) cout << " um " << m_time.stunden << ":" << m_time.minuten << " Uhr"; if(setdauer) cout << ", Dauer " << m_dauer << " Minuten"; cout << "." << endl;} }; int main() { bool quit = false; do { char quitsign; cout << "Moechten Sie einen Termin eingeben (j/n): "; cin >> quitsign; if(quitsign == 'j') { string titel; cout << "Geben Sie einen Titel an: "; cin >> titel; Date date; cout << endl << "Geben Sie nun das Datum an! " << endl; cout << "Tag: "; cin >> date.tag; cout << "Monat: "; cin >> date.monat; cout << "Jahr: "; cin >> date.jahr; char timesign; cout << endl << "Moechten Sie eine Uhrzeit angeben (j/n): "; cin >> timesign; Time time = {0}; if(timesign == 'j') { cout << "Stunde: "; cin >> time.stunden; cout << "Minute: "; cin >> time.minuten; } char dauersign; cout << endl << "Moechten Sie eine Dauer angeben (j/n): "; cin >> dauersign; Termin termin(titel, date); if(dauersign == 'j') { uint dauer; cout << "Dauer: "; cin >> dauer; /*Time endtime =*/ termin.ErstelleTermin(time, dauer); //endzeit? //cout << endl << "Termin endet um: " << endtime.stunde << ":" << endtime.minuten << " Uhr" << endl; } else { termin.SetTime(time); } termin.Print(); } else { quit = true; } cout << endl; }while (quit == false); return 0; }
-
jana90 schrieb:
Hab jetzt mal mein Programm ein bisschen geändert..
- Mit dem Hauptprogramm kann ich gar nicht anfangen... Ich weiß es einfach nicht...Hallo jana90,
wenn Du zehn Bücher gelesen hast, so wird doch irgendwie ein Beispiel für ein Hauptprogramm drin gewesen sein. Das sogenannte 'Hello World' solltest Du kennen. In C++:
#include <iostream> int main() { using namespace std; cout << "Hallo Welt" << endl; return 0; }jana90 schrieb:
• Definieren Sie eine Struktur (struct) Date, die aus drei integer Werten für Tag, Monat und Jahr besteht.
• Definieren Sie eine Struktur (struct) Time, die aus zwei integer Werten für Stunden und Minuten, besteht.
Bleib erst mal dabei, wie Du angefangen hast - ich schreibe hier die Typen groß und die Member als Integer, wie in der Aufgabenstellung gefordert.
struct Date { int jahr, monat, tag; }; struct Time { int stunde, minute; };Diesen ganzen getter/setter-Kram kannst Du vergessen. Den braucht man auch nicht, um die Aufgabe zu lösen. Das Setzen der Werte sollte über den Konstruktor geschehen und wenn man zusätzlich Ausgabefunktionen implementiert, so kann man die Variablen im Programm auch ausgeben. Das geht so
#include <iostream> struct Date { Date( int t, int m, int j ) : jahr( j ) , monat( m ) , tag( t ) {} friend std::ostream& operator<<( std::ostream& out, const Date& d ) // Ausgabe { return out << d.tag << "." << d.monat << "." << d.jahr; } int jahr, monat, tag; }; struct Time { Time( int s, int m ) : stunde( s ) , minute( m ) {} friend std::ostream& operator<<( std::ostream& out, const Time& t ) { return out << t.stunde << ":" << t.minute; } int stunde, minute; }; int main() { using namespace std; Date silvesterDatum(31,12,2010); Time silvesterZeit(20,30); cout << "Die Fete startet am " << silvesterDatum << " um " << silvesterZeit << endl; return 0; }Als Ausgabe erhälst Du:
Die Fete startet am 31.12.2010 um 20:30.. das soll erst mal reichen
Gruß
Werner