Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeitenrechner

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.08.2008, 20:59 Uhr
~KeKe
Gast


Also erstmal: Ich bin noch en ziemlicher Noobie in C++ und hab jetz mal en Programm geschrieben, mit dem man Zeiten eingeben, addieren, subtrahieren usw. kann.

Wäre froh über Feedbacks und Verbesserungsvorschläge!



Header (Zeit.h)

C++:
#include <iostream>

class Zeit
{
public:
    Zeit(float Stunde,float Minute);
    ~Zeit();
    void getStunde();
    void getMinute();
    void getStundeDezimal();
    void setTime(float Stunde,float Minute);
    void addTime(float Stunde,float Minute);
    void remTime(float Stunde,float Minute);
private:
    float stunden;
    float minuten;
};

Zeit::Zeit(float Stunde,float Minute)
{
    if(Minute >= 60)
    {
        while(Minute >= 60)
        {
        ++Stunde;
        Minute-=60;
        }
        std::cout << Stunde << ":" << Minute << "\n\n\n";
    }
    stunden = Stunde;
    minuten = Minute;
}

Zeit::~Zeit()
{}

void Zeit::getStunde()
{
    std::cout << "Anzahl Stunden: " << stunden << "\n\n\n" << std::endl;
}

void Zeit::getMinute()
{
    std::cout << "Anzahl Minuten: " << minuten << "\n\n\n" << std::endl;
}

void Zeit::getStundeDezimal()
{
    float temp = minuten/60 + stunden;
    std::cout << "Zeit (dezimal): " << temp << "\n\n\n" << std::endl;
}

void Zeit::setTime(float Stunde, float Minute)
{
    if(Minute >= 60)
    {
        std::cout << "\nwurden umgewandelt zu \n\n";
    }
    while(Minute >= 60)
    {
        ++Stunde;
        Minute-=60;
    }
    std::cout << Stunde << " Stunden und " << Minute << " Minuten \n\n\n";
    stunden = Stunde;
    minuten = Minute;
}

void Zeit::addTime(float Stunde, float Minute)
{

    if(Minute >= 60)
    {
        std::cout << "\nwurden umgewandelt zu \n\n";
    }
    while(Minute >= 60)
    {
        ++Stunde;
        Minute-=60;
    }
    stunden = stunden + Stunde;
    minuten = minuten + Minute;
    while(minuten >= 60)
    {
        ++stunden;
        minuten-=60;
    }
    std::cout << "\nDie neue Zeit betr\x84gt: " << stunden << " Stunden und " << minuten << " Minuten\n\n\n";
}

void Zeit::remTime(float Stunde,float Minute)
{
    if(Minute >= 60)
    {
        std::cout << "\nwurden umgewandelt zu \n\n";
        while(Minute >= 60)
        {
            ++Stunde;
            Minute-=60;
        }
        std::cout << Stunde << " Stunden und " << Minute << " Minuten\n\n\n";
    }
    stunden = stunden - Stunde;
    minuten = minuten - Minute;
    if (stunden < 0 || minuten < 0)
    {
        std::cout << "Eingabe ung\x81ltig!\n\n\n";
    }
    else
    {
        std::cout << "\nDie neue Zeit betr\x84gt: " << stunden << " Stunden und " << minuten << " Minuten\n\n\n";
    }
}



Quelldatei (zeit.cpp)

C++:
/*
    Ich habe hier ein kleines Programm zur Addition
    und Subtraktion von Zeiten geschrieben! Bei Fragen
    oder Anregungen könnt ihr mich gerne kontaktieren!

    E-Mail:    kevin.winzeler@gmx.net
    MSN:    kevin.winzeler@hotmail.com
    ICQ:    406423878

    Version 1.0
*/


#include <iostream>
#include <string>
#include <conio.h>
#include "Zeit.h"
using namespace std;

int main()
{
    cout << "*************************************\n";
    cout << "*      Dieses Programm ist zur      *\n";
    cout << "*      Addition und Subtraktion     *\n";
    cout << "*           von Zeiten              *\n";
    cout << "*                                   *\n";
    cout << "*       coded by .:]{e]{e:.         *\n";
    cout << "*                                   *\n";
    cout << "*   E-Mail: kevin.winzeler@gmx.net  *\n";
    cout << "*   MSN: kevin.winzeler@hotmail.com *\n";
    cout << "*          ICQ: 406423878           *\n";
    cout << "*************************************\n\n\n\n";

    //Startzeit setzen
    Zeit eineZeit(0,0);
    
    //Benötigte Variablen
    int auswahl;

    float stunden,minuten;
    float *pStunden = &stunden;
    float *pMinuten = &minuten;
    char trennzeichen;
    bool weiter = true;

    while(weiter != false)
    {
        //Menu erzeugen
        cout << "(1) Neue Startzeit setzen (Standard 0:00)\n";
        cout << "(2) Zeit hinzuaddieren\n";
        cout << "(3) Zeit subtrahieren\n";
        cout << "(4) Stunden ausgeben\n";
        cout << "(5) Minuten ausgeben\n";
        cout << "(6) Zeit Dezimal ausgeben\n";
        cout << "(7) Programm beenden\n\n\n";

        cin >> auswahl;
        cout << "\n\n\n";

        //Auswahl ausführen
        switch(auswahl)
        {
        case 1:
            {
                cout << "Geben Sie die Anfangszeit ein: \t";
                cin >> *pStunden >> trennzeichen >> *pMinuten;
                eineZeit.setTime(*pStunden,*pMinuten);
                break;
            }
        case 2:
            {
                cout << "Geben Sie die Zeit ein die Sie hinzuaddieren moechten: \t";
                cin >> *pStunden >> trennzeichen >> *pMinuten;
                eineZeit.addTime(*pStunden,*pMinuten);
                break;
            }
        case 3:
            {
                cout << "Geben Sie die Zeit ein die Sie subtrahieren moechten: \t";
                cin >> *pStunden >> trennzeichen >> *pMinuten;
                eineZeit.remTime(*pStunden,*pMinuten);
                break;
            }
        case 4:
            {
                eineZeit.getStunde();
                break;
            }
        case 5:
            {
                eineZeit.getMinute();
                break;
            }
        case 6:
            {
                eineZeit.getStundeDezimal();
                break;
            }
        case 7:
            {
                weiter = false;
                break;
            }
        //Falsche Eingabe verhindern
        default:
            {
                cout << "Eingabe ung\x81ltig!\n\n\n";
                break;
            }
        }
    }
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.08.2008, 21:18 Uhr
xXx
Devil


Hmm. Wenn du zwischen Stunden und Minuten differenziert, darf Stunde nur eine Ganzzahl sein, d.h. sind Fließkomma Datentypen unangebracht. Am ehesten würde man einfach intern alles auf Sekunden oder mSekunden runterrechnen. So ist das vollkommen unkomfortabel.

Dann solltest du dir mal das Thema const-correctness und Referenzen angucken.

Das per\x811 usw. erziehlen von Umlauten, ist nja unschön. Setz einfach das global local auf german

Misch nicht zwischen Englisch und Deutsch im Quelltext. No-Go!

Nimm conio.h raus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.08.2008, 21:23 Uhr
0xdeadbeef
Gott
(Operator)


Du solltest die Zeit.h in Deklaration und Implementierung aufteilen. Die Implementierung der Methoden hat im Header nichts zu suchen; sobald du da mal mehr als eine Übersetzungseinheit hast, hagelt sowas Linkerfehler.

Richtig wäre:

Zeit.h

C++:
#ifndef INCLUDED_ZEIT_H
#define INCLUDED_ZEIT_H

class Zeit {
  // ...
};

#endif



Zeit.cpp

C++:
#include "Zeit.h"

#include <iostream>
// ...und andere benötigte Header

Zeit::Zeit(float Stunde,float Minute)
{
  // ...
}

Zeit::~Zeit()
{}

void Zeit::getStunde()
{
    // ...
}

// usw.



und dann eine Quelldatei für die main-Funktion, beispielsweise main.cpp

C++:
#include "Zeit.h"

#include <iostream>
// und andere benötigte Header

int main() {
  // ...
}



Dann Zeit.cpp und main.cpp getrennt übersetzen und zusammenlinken (aber das macht im Zweifel deine IDE für dich).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.08.2008, 22:27 Uhr
xXx
Devil



C++:
#if !defined (TIME_HPP__INCLUDED)
#define TIME_HPP__INCLUDED

#pragma once

#include <iofwd>

class Time
{
public:
    typedef unsigned char hour_t;
    typedef unsigned char minute_t;
    typedef unsigned char second_t;
    typedef unsigned char milisecond_t;
    unsigned long m_data;

public:
    explicit Time(const hour_t hours = 0, const minute_t minuts, const second_t seconds, const miliseconc_t mseconds);
    ~Time();

public:
    // operator+, operator-
    // ...

public:
    const hour_t get_hours() const { return m_data * 0.0001f / 3600; }
    const minute_t get_minutes() const { return static_cast<unsigned char>(m_data * 0.0001) % 60U; }
    // ...

public:
    friend std::ostream& operator<<(std::ostream& out, Time const& data);
};

#endif // TIME_HPP__INCLUDED
:P so würde ichs machen

Dieser Post wurde am 03.08.2008 um 22:43 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.08.2008, 23:34 Uhr
~KeKe
Gast


ok danke für die tipps, wie gesagt bin noch ein newbie und daher froh um jeden tipp!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.08.2008, 00:05 Uhr
~KeKe
Gast


Wie meinst du das mit den Umlauten

[quote="xXx"]Das per\x811 usw. erziehlen von Umlauten, ist nja unschön. Setz einfach das global local auf german[/quote]

wie kann ich das machen?
hab schon gegooglet aber auch nix gescheites gefunden?

Das mit Deutsch-Englisch hab ich auch gemerkt das wollt ich noch fixen ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.08.2008, 09:35 Uhr
xXx
Devil



C++:
#include <locale>
#include <iostream>
#include <string>
#include "Zeit.hpp"

int main()
{
    std::locale::global(std::locale("German_Germany"));

    std::cout << "*************************************\n"
                 << "*      Dieses Programm ist zur      *\n"
                 << "*      Addition und Subtraktion     *\n"
                 << "*           von Zeiten              *\n"
                 << "*                                   *\n"
                 << "*       coded by .:]{e]{e:.         *\n"
                 << "*                                   *\n"    
                 << "*   E-Mail: kevin.winzeler@gmx.net  *\n";
                 << "*   MSN: kevin.winzeler@hotmail.com *\n";
                 << "*          ICQ: 406423878           *\n";
                 << "*************************************\n\n\n\n";

    // ...
}

Dieser Post wurde am 04.08.2008 um 09:36 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.08.2008, 12:48 Uhr
KeKe



OK Danke hat funktioniert ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: