• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prośba o ocene kodu.

Object Storage Arubacloud
0 głosów
134 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)

Witam, moglibyście ocenić mój pierwszy program taki funkcjonalny. Macie jakieś pomysły jak zrobić sortowanie?

#include <iostream>
#include <vector>
#include <windows.h>
#include <string>
#include <fstream>
using namespace std;
    fstream plik;
class Event
{
    int hour, minute;
    string name;
    int value;
public:

     bool wrong=false;
    Event(string n="", int h=0, int m=0)
    {
        minute=m;
        hour =h;
        name = n;
    }
    void add()
    {
        string name1;
        int hour1, minute1;
        cout <<endl << "Event name: " ;
        cin >> name1;
        cout <<endl << "Event hour: " ;
        cin >> hour1;
        cout <<endl << "Event minute: ";
        cin>> minute1;
        if (name1!="" && hour1>=0 && hour1<=24 && minute1>=0 && minute1<=60)
        {
            if (hour1==24)
                hour1=0;
            if (minute1==60)
            {
                minute1=0;
                hour1=hour1+1;
            }

            name = name1;
            hour=hour1;
            minute=minute1;
            value=hour*60+minute;
            wrong=false;

plik.open("Data.txt", ios::out | ios::app) ;
        plik << " " << name << " at ";
        if (hour<10)
            plik <<"0"<<hour;
        else
            plik << hour;
        plik << ":";
        if(minute<10)
            plik <<"0"<<minute;
        else
            plik <<minute;
        plik<<endl;
        }
        else
        {

            wrong=true;

        }
    }
    void display()
    {
        cout << " " << name << " at ";
        if (hour<10)
            cout <<"0"<<hour;
        else
            cout << hour;
        cout << ":";
        if(minute<10)
            cout <<"0"<<minute;
        else
            cout <<minute;
        cout<<endl;
    }
    int getValue()
    {
        return value;
    }
    void edit()
    {
        int select; string name2; int hour2,minute2;
        cout << "Editing an element" << endl << "1. Edit name" << endl << "2.Edit time" << endl << "Select: ";
        cin >> select;
        if (select==1)
        {
            cout << "Current name: " << name << endl << "New name: ";
            cin >> name2;
            if (name2!="") name=name2;
            else cout << "Wrong name! Try again!" << endl;
        }
        if (select==2)
        {
            cout<<endl << "Current hour: " << hour << endl << "New hour: ";
            cin>> hour2;
            cout<<endl << "Current minute: " << minute << endl << "New minute: ";
            cin >> minute2;
             if (hour2>=0 && hour2<=24 && minute2>=0 && minute2<=60)
             {
                 hour=hour2;
                 minute=minute2;
             }
              else cout << "Wrong time! Try again!" << endl;
        } // if select 2
    }// edit
};

int main()
{
    bool created=false;
    vector<Event> evs;
    char choice, cho;
    int createdItem;
    do
    {
        cout<<"---------------------------"<<endl;
        for (int i=0; i<evs.size() ;)
        {
            if (created==true)
            {
                createdItem=i;
                evs[i].display() ;
                i++;

            }
            else if (created==false)
                break;
            else
                cout << "Something got wrong!";
        }
        cout<<"---------------------------"<<endl<<endl ;
        cout <<  "Main Menu" << endl<<endl;
        cout << "1. Add an event" << endl;
        cout << "2. Pop an event" << endl;
        cout << "3. Edit an event" << endl;
        cout << "4. Clear all events" << endl;
        cout << "5. End the program" << endl;
        cout << "Your choice: ";
        cin >> choice;
        switch (choice)
        {
        case '1':
        {
            do
            {
                Event ev1;
                ev1.add();
                if (ev1.wrong==false)
                {
                evs.push_back(ev1);
                created=true;
                system ("cls");
                cout << "1.Continue adding events " << endl;
                cout << "2.Back to main menu" << endl;
                cout << "Your choice: ";
                cin >> cho;
                }
                else
                {
                    cout << "Error! Wrong values! Try again!" << endl;
                    Sleep(1000);
                    system("cls");
                    break;
                }
            }
            while (cho=='1');
        }
        break;
        case '2':
            evs.pop_back();
            break;
        case '3':
            {
                int elem;
                system("cls");
                cout << "Which element: ";
                cin >> elem;
                if (elem-1<=createdItem)
                evs[elem-1].edit();
                else cout << "This element doesn't exist." << endl;


            }
            break;
            case '4':
                {
                evs.clear();
                created=false;
                createdItem=0;
                }
                break;
            case '5':
                {
                   plik.close() ;
                    plik.clear() ;
                     return 0;

                }


            }
            system("cls");
        }
        while (choice!=5);


        return 0;
    }

 

1 odpowiedź

+1 głos
odpowiedź 27 grudnia 2018 przez RafalS VIP (122,820 p.)
wybrane 28 grudnia 2018 przez XezolPL
 
Najlepsza
  1. fstream plik;

    czemu globalny plik? To powinno byc prywatne pole klasy.

  2. class Event. Jaki event, do czego?
  3. int hour, minute;

    do przechowywania czasu są specjalne klasy.

  4. 			if (hour1 == 24)
    				hour1 = 0;
    			if (minute1 == 60)
    			{
    				minute1 = 0;
    				hour1 = hour1 + 1;
    			}

    wynajdywanie kola od nowa. Jest std::time_t i std::chrono::time_point. Można z nich wyciągać dowolne wartosci(godziny, minuty, sekundy...): https://stackoverflow.com/questions/15957805/extract-year-month-day-etc-from-stdchronotime-point-in-c

  5. int value;

    co znaczy value eventu? Nietrafiona nazwa.

  6. bool wrong = false;

    nietrafiona nazwa. Co to znaczy, że Event jest wrong albo nie wrong? I czemu jest to pole publiczne? value jest prywatne i ma getter, czemu wrong nie ma?

  7. void add()
    	{
    		string name1;
    		int hour1, minute1;
    		cout << endl << "Event name: ";
    		cin >> name1;
    
  8. add nie tylko dodaje ale tez wczytuje z klawiatury. Rozdziel te dwie rzeczy bo uzależniasz się od konsoli. Nie da sie dodac eventu inaczej niż przez zatrzymanie programu i wczytywanie z konsoli.
     

  9. 		if (name1 != "" && hour1 >= 0 && hour1 <= 24 && minute1 >= 0 && minute1 <= 60)
    		{
    			if (hour1 == 24)
    				hour1 = 0;
    			if (minute1 == 60)
    			{
    				minute1 = 0;
    				hour1 = hour1 + 1;
    			}

    walidacja i obrabianie w jednej metodzie razem z wczytywaniem. Rozdziel to

  10. 			if (hour < 10)
    				plik << "0" << hour;
    			else
    				plik << hour;
    			plik << ":";
    

    Od formania daty sa specjalne klasy.

  11. int createdItem;

    nie mówi od czego jest ta zmienna. Brzmi jak flaga a to int.

komentarz 28 grudnia 2018 przez XezolPL Obywatel (1,530 p.)
Oooo, dużo tego :D to widać też, że jeszcze dużo pracy przede mną, dziękuję, kod poprawię, masz może pomysł jak zrobić to sortowanie vectora? bo z funkcją sort coś nie działało, do niej był value który mnożył godziny razy 60 i dodawał minuty i to była wartość czasowa wydarzenia do posortowania ich chronologicznie, bool wrong miał sprawdzać czy user nie wpisał nieprawidłowych - wrong danych, a createdItem ile zostało stworzonych już wydarzeń, jako validacja by user nie mógł wpisać numeru wydarzenia którego jeszcze nie ma do editu.

Podobne pytania

0 głosów
3 odpowiedzi 2,984 wizyt
pytanie zadane 20 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
+1 głos
0 odpowiedzi 236 wizyt
pytanie zadane 26 maja 2021 w Nasze projekty przez Bartek030 Obywatel (1,460 p.)
0 głosów
0 odpowiedzi 138 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...