ptaq Temat założony przez niniejszego użytkownika |
[C++] Zakład fryzjerski - weryfikacja programu » 2012-01-06 00:23:12 #include<iostream> #include<string> #include<fstream>
void addVisit( std::string name, std::string nazwisko, std::string tel, std::string time, std::string date ) { std::getline( std::cin, name ); std::getline( std::cin, nazwisko ); std::getline( std::cin, tel ); std::getline( std::cin, time ); std::getline( std::cin, date ); std::ofstream fileOutput( "wizyty.txt", std::ios::app ); if( fileOutput.is_open() ) { fileOutput << name << " " << nazwisko << " " << tel << " " << time << " " << date << std::endl; fileOutput.close(); std::cout << " wizyta dodana !" << std::endl; } else { std::cout << " nie zapisano !" << std::endl; } }
void addCustomer( std::string imie, std::string nazwisko, std::string tel, std::string time ) { std::getline( std::cin, imie ); std::getline( std::cin, nazwisko ); std::getline( std::cin, tel ); std::getline( std::cin, time ); std::ofstream fileOutput( "klienci.txt", std::ios::app ); if( fileOutput.is_open() ) { fileOutput << imie << " " << nazwisko << " " << tel << " " << time << std::endl; fileOutput.close(); std::cout << " client dodany !" << std::endl; } else { std::cout << " nie zapisano ! " << std::endl; } }
void findCustomer( std::string imieInazwisko ) { std::getline( std::cin, imieInazwisko ); std::cout << "podaj imie i nazwisko klienta w jednej lini: ## ## " << std::endl; std::cin >> imieInazwisko; std::string line; int czyZnaleziono; std::ifstream fileInput( "klienci.txt" ); if( fileInput.is_open() ) { while( std::getline( fileInput, line ) ) { czyZnaleziono = line.find( imieInazwisko ); if( czyZnaleziono != std::string::npos ) { std::cout << "znaleziono klienta\n"; std::cout << line << std::endl; break; } } if( czyZnaleziono == std::string::npos ) { std::cout << std::endl; std::cout << "klienta nie ma w bazie !"; } } } void addEmployeer( std::string imie, std::string nazwisko, std::string tel, std::string etat, std::string wynagrodzenie ) { std::getline( std::cin, imie ); std::getline( std::cin, nazwisko ); std::getline( std::cin, tel ); std::getline( std::cin, etat ); std::getline( std::cin, wynagrodzenie ); std::ofstream fileOutput( "pracownicy.txt", std::ios::app ); if( fileOutput.is_open() ) { fileOutput << imie << " " << nazwisko << " " << tel << " " << etat << " " << wynagrodzenie << "\n"; fileOutput.close(); std::cout << " pracownik dodany !" << std::endl; } else { std::cout << " pracownik dodany ! " << std::endl; } } void CheckTime( std::string time, std::string date ) { std::cout << "podaj godzine i date wizyty: ##:## dd.mm.rrrr " << std::endl; std::cin >> time >> date; std::string line; int czyZnaleziono, czyZnaleziono2; while( czyZnaleziono != std::string::npos ) { std::ifstream fileInput( "wizyty.txt" ); if( fileInput.is_open() ) { while( std::getline( fileInput, line ) ) { czyZnaleziono = line.find( time ); czyZnaleziono2 = line.find( date ); if( czyZnaleziono && czyZnaleziono2 != std::string::npos ) { std::cout << "termin jest zajety " << std::endl; std::cout << "podaj inna godzine" << std::endl; std::cin >> time; std::cout << std::endl; } } } } std::cout << std::endl; std::cout << "termin jest wolny" << std::endl; std::cin.clear(); std::cin.sync(); return; }
void checkVisits() { std::string line; std::ifstream fileInput( "wizyty.txt" ); if( fileInput.is_open() ) { while( std::getline( fileInput, line ) ) { std::cout << line << std::endl; } } }
void listaUslug() { }
int main() { std::string imie, nazwisko, tel, time, etat, wynagrodzenie, imieInazwisko, date; int num; std::cout << " ======================================================= " << std::endl; std::cout << " ..::: Witaj w systemie zarzadzania zakladem fryzjerskim !!! :::.. " << std::endl; std::cout << " ======================================================= " << std::endl; std::cout << std::endl; std::cout << "Menu:" << std::endl; std::cout << "[1] - dodaj wizyte.\n[2] - nowy klient.\n[3] - nowy pracownik.\n[4] - znajdz klienta.\n[5] - sprawdz wizyty.\n[6] - drukuj liste pracownikow.\n[7] - drukuj liste klientow.\n[8] - zakoncz.\n" << std::endl; std::cin >> num; switch( num ) { case 1: { CheckTime( time, date ); std::cin.clear(); std::cin.sync(); std::cout << "dodaj wizyte: imie, nazwisko, tel, godzine[##:##] i date[dd.mm.rrr] " << std::endl; addVisit( imie, nazwisko, tel, time, date ); std::cin.clear(); std::cin.sync(); break; } case 2: { std::cout << "dodaj klienta: imie, nazwisko, tel, godzine " << std::endl; addCustomer( imie, nazwisko, tel, time ); std::cin.clear(); std::cin.sync(); break; } case 3: { std::cout << "dodaj nowego pracownika: imie, nazwisko, telefon, etat, wynagrodzenie " << std::endl; addEmployeer( imie, nazwisko, tel, etat, wynagrodzenie ); std::cin.clear(); std::cin.sync(); break; } case 4: { findCustomer( imieInazwisko ); std::cin.clear(); std::cin.sync(); break; } case 5: { checkVisits(); std::cin.clear(); std::cin.sync(); break; } default: } return 0; } |
|
akwes |
» 2012-01-06 01:06:48 A może pokuś się o jakieś obiekty ;> ? |
|
ptaq Temat założony przez niniejszego użytkownika |
» 2012-01-06 01:34:48 hmmm myślałem nad tym, tylko jak to najlepiej zrobić ? wszystko w jedną klase ??? ;> |
|
bartelemii |
Na początek » 2012-01-06 01:42:43 Od razu rzuca się w oczy (nawet takiemu początkującemu programiście) pare niedociągnięć: -formatowanie kodu std::getline( std::cin, name ); std::getline( std::cin, nazwisko ); std::getline( std::cin, tel ); std::getline( std::cin, times ); std::getline( std::cin, date );
lepiej wygląda tak std::getline( std::cin, name ); std::getline( std::cin, nazwisko ); std::getline( std::cin, tel ); std::getline( std::cin, times ); std::getline( std::cin, date );
Przez ta oszczednosc miejsca program jest nieczytelny, a co najwazniejsze łatwiej popełnic jakiś bezsensowny błąd:) -nie wiem czy zostanę pochwalony czy zgardzony, ale w C++ raczej stosuje się strukturę std::endl do przejscia do nastepnej linii, zamist wpisaniu w strumieniu wyjścia wyrażenia "\n", wiadmo zależy od stylu programisty, ale std::endl wydaje mi się bardziej przejrzysty -w zwrotnicy sterującej switch jest taka opcja jak default, które zwykle dodaje sie na samym koncu i oznacza one po prostu wartość "domyślną", czyli nieprzewidzianą przez programistę. Moim zdaniem default mogłoby tutaj doskonale zastąpić pętlę do {} while() w funkcji main(). Jest tu jeszcze jeden błąd który koniecznie musisz poprawić, na koniec instrukcji case x: musisz wstawić break, żeby program nie wykonywał instrukcji leżacych ponizej wybranej opcji, az do konca switcha lub napotkania break. Dla "case 1: " użyłeś break, a w reszcie pominąłeś, nie jest to chyba swiadomy zabieg?:D Jak najszybciej popraw ten błąd:) -całą strukturę odpowiedzialna za twoje Menu zastąpiłbym funkcją, zwracającą wartość pobraną przez delikwenta;D dodałoby to przejrzystości, w ogóle wszystkie funkcje można umieścić w innym pliku .cpp, ich prototypy w pliku nagłówkowym .h i byłoby jeszcze lepiej, ale to sie sprawdza przy większych projektach :) -zalecam jeszcze do przechowywania zbiorów danych, jak na przykład masz tutaj dane o osobie, taki wynalazek jak struct. Tworzymy sobie strukture danych w ten sposob: struct Klient { std::string strImie; std::string strNazwisko; std::string strTelefon; std::string strGodzWizyty; std::string strDataWizyty; };
Klient nowy;
nowy.strImie = "Jan"; nowy.strNazwisko = "Kowalski";
std::cout << nowy.strImie << " " << nowy.strNazwisko << std::endl;
i całą strukture mozna oczywiscie przekazac do funkcji jak zwykla zmienna:) To tylko parę uwag, dziwnie jeszcze zapisujesz czas, ale moze ktos bardziej doswiadczony Ci pomoze:) Pozdrawiam :) |
|
ptaq Temat założony przez niniejszego użytkownika |
» 2012-01-06 01:57:03 dzieki za wypowiedz, wiekszość rzeczy o których piszesz to szczegóły na ktore nie zwróciłem uwagi, głównie chodziło mi o to czy z punktu widzenia kogoś doświadczonego trzyma sie to kupy :) pomijajac te elementy o ktorych już wspomniałeś :D |
|
akwes |
» 2012-01-06 02:12:17 -nie wiem czy zostanę pochwalony czy zgardzony, ale w C++ raczej stosuje się strukturę std::endl do przejscia do nastepnej linii, zamist wpisaniu w strumieniu wyjścia wyrażenia "\n", wiadmo zależy od stylu programisty, ale std::endl wydaje mi się bardziej przejrzysty
|
Nie zależy to od stylu programisty. Kwestia czy chcemy wywołać automatycznie flush() czy nie. hmmm myślałem nad tym, tylko jak to najlepiej zrobić ? wszystko w jedną klase ??? ;>
|
C++ jest językiem obiektowym więc warto z tego korzystać. Nie tyle wszystko w jedną klasę co każdej rzeczy zrobić klasę. Czyli Osoba, Wizyta, Salon. Wtedy za pomocą kilku linijek kodu program będzie mógł obsługiwać sieć salonów, przenosić wizyty itd. W klasie Salon można dać obiekt klasy Terminarz na przykład. Program obiektowy łatwiej rozbudować i jest czytelniejszy. |
|
ptaq Temat założony przez niniejszego użytkownika |
» 2012-01-06 03:11:03 poprawilem to co najbardziej razilo, jesli chodzi o menu to w trybie konsolowym chyba lepiej zeby zostało tak jak jest bo inaczej nie bedzie widac opcji wyboru.
Popracuje tez nad tymi obiektami :)
|
|
Drraven |
» 2012-01-06 08:17:24 Nie mam siły by dokładnie analizować ten kod, ale: obiekty zrób! Możesz tak: Klasa klienta i tam: wszystkie dane, i metody na dodawanie, szukanie, usuwanie. Wtedy będzie to +/- tak wyglądać: CKlient jeden; jeden.Set( "imie", "nazwisko", "telefon" );
I metodą set, dodajesz to do jakiegoś wektora, listy, tablicy. |
|
« 1 » 2 3 |