bartekwwa Temat założony przez niniejszego użytkownika |
Program a'la baza danych (sprawdzanie stringów, dat, switch w switchu, itp.) » 2014-06-29 16:48:29 Witajcie ponownie. Dostałem zadanie na zaliczenie sem do zrobienia w domu i męczę się już 2 tydzień. Korzystałem m.in z pomocy kursów cpp0x i qvazar i wszechwiedzącego google ale dalej mi nie wychodzi. Zadanie polega na napisaniu bazy przedmiotów/ urządzeń/ drukarek (jak zwał tak zwał), których wprowadzanie musi spełniać określone warunki. 1. Baza może mieścić max 10 przedmiotów; 2. Każdy przedmiot ma atrybuty: - ID (od 2 do 5 znaków, litery i liczby - ID musi być unikatowe w bazie) - Typ (do wyboru na sztywno 3 typy przedmiotów, np. duży, średni, mały) - Data zakupu MM-RRRR (nie większa niż dzień wprowadzania danych) - Cena przedmiotu (większa niż 0) - ilość użycia danego przedmiotu w roku 2012 i 2013 3. Program daje możliwość wypisania wszystkich dotychczas wprowadzonych danych na ekranie 4. Możemy zapisać wprowadzone dane do pliku txt w dowolnej lokalizacji na kompie Największy problem mam z 2 punktem. Już tyle razy zaczynałem od początku i za każdym razem się gubię :( Najpierw napisałem coś takiego: #include <iostream> #include <conio.h> #include <string> #include <fstream>
using namespace std;
struct sprzet { string id; string typ; string datazakupu; string cenazakupu; string ilerazyuzywany; };
short i; sprzet sprzet[ 10 ];
void Dodaj(); void Zobacz(); void Zapisz();
int main() { char wybor; do { cout << "1. Dodaj Sprzet " << endl; cout << "2. Zobacz wszystkie sprzety " << endl; cout << "3. Zapisz wprowadzone sprzety " << endl; cout << "ESC - Koniec programu " << endl << endl; wybor = getch(); switch( wybor ) { case 49: Dodaj(); break; case 50: Zobacz(); break; case 51: Zapisz(); break; } } while( wybor != 27 ); return 0; } void Dodaj() { cout << "Podaj numer ID sprzetu: \n"; cin >> sprzet[ i ].id; cout << "Podaj typ sprzetu: \n"; cin >> sprzet[ i ].typ; cout << "Podaj date zakupu: \n"; cin >> sprzet[ i ].datazakupu; cout << "Podaj cene: \n"; cin >> sprzet[ i ].cenazakupu; cout << "Podaj rok: \n"; cin >> sprzet[ i ].ilerazyuzywany; cin.ignore(); i++; cout << ". Wcisnij ENTER"; getchar(); } void Zobacz() { if( i != 0 ) { for( short j = 0; j < i; j++ ) { cout << "Sprzet nr " << j + 1 << ": " << endl; cout << "Numer ID: " << sprzet[ j ].id << endl; cout << "Typ sprzetu: " << sprzet[ j ].typ << endl; cout << "Data zakupu: " << sprzet[ j ].datazakupu << endl; cout << "Cena: " << sprzet[ j ].cenazakupu << endl; cout << "Ilosc uzyc: " << sprzet[ j ].ilerazyuzywany << endl; } } else cout << "Nie ma zadnego sprzetu w bazie"; cout << "Nacisnij ENTER"; getchar(); }
void Zapisz() { ofstream plik( "sprzet.txt", ios::out | ios::trunc ); plik << i << "\n"; for( short j = 0; j < i; j++ ) { plik << sprzet[ j ].id << endl; plik << sprzet[ j ].typ << endl; plik << sprzet[ j ].datazakupu << endl; plik << sprzet[ j ].cenazakupu << endl; plik << sprzet[ j ].ilerazyuzywany << endl; } cout << "Dane zostaly zapisane. Wcisnij ENTER"; getchar(); }
Później chciałem wkomponować te warunki z pkt 2 więc znów zacząłem pisać od początku mając na uwadze powyższy kod. W trkacie pisania zrobił się totalny sajgon (jak poniżej) i zwątpiłem. #include <iostream> #include <conio.h> #include <string> #include <fstream> #include <windows.h>
using namespace std;
struct drukarki { string id; string typ; int data; int cena; int ile; };
int main() { drukarki tab[ 4 ]; int licznik = 0; int decyzja; int za; int zb; string id2; string szukaj; cout << "Wybierz numer operacji" << endl << endl; cout << "1. Wprowadz drukarke do bazy" << endl; cout << "2. Odczytaj dane z bazy" << endl; cout << "3. Zapisz dane do pliku" << endl; cout << "4. Zamknij program" << endl << endl; cin >> za; switch( za ) { case 1: zb = 0; while( zb = 0 ) { cout << "Podaj ID (2-5 znakow)" << endl; cin >> id2; if( id2.length > 1 && id2.length < 6 ) if( id2 != id ) id == id2; zb++; else cout << "podaj unikatowe id, 2 do 5 znakow" } cout << "wybierz numer typu drukarki: 1. laser / 2. atrament / 3. igla" << endl; cin >> za; { switch( za ) { case 1: cin >> typ; break; case 2: cin >> typ; break; case 3: cin >> typ; break; default: cout << "nie ma takiej opcji"; }
dochodząc do tego etapu zaczęła mi się mieszać składnia i ogłupiałem... Czy ktoś z Was miał może podobne zadanie do napisania. Mam do wyboru zrobienie tego na listach lub strukturach. Listy to dla mnie już totalne piekło więc próbuje ogarnąć kod na strukturach. |
|
pekfos |
» 2014-06-29 17:11:11 dochodząc do tego etapu zaczęła mi się mieszać składnia i ogłupiałem... |
To wygląda jak braki w znajomości podstaw, a nie przekombinowanie.. Czego ty w zasadzie od nasz oczekujesz? Tu nie ma żadnego konkretnego problemu, ani nawet pytania. Mam do wyboru zrobienie tego na listach lub strukturach. |
Robiąc na listach też byś musiał użyć struktur. |
|
bartekwwa Temat założony przez niniejszego użytkownika |
» 2014-06-29 22:20:27 Tak, zgadza się - są to braki w znajomości podstaw. To mój początek przygody z c++, a za sobą mam semestr zajęć czyli ok 12 godzin tłumaczenia - niestety dla mnie to za mało :/ Moją intencją było zwrócenie się do Was z prośbą o pomoc, wskazówki, dzięki którym uda mi się napisać zadany program z naciskiem na elementy pkt. 2. |
|
pekfos |
» 2014-06-30 09:54:56 - ID (od 2 do 5 znaków, litery i liczby - ID musi być unikatowe w bazie) |
Jeśli masz po ID wyciągać rekordy z bazy, możesz użyć std::map<>. Zapewni unikatowość identyfikatora i nie będziesz musiał tego samemu pisać, chociaż możesz, jak chcesz lub nie możesz mapy użyć. - Typ (do wyboru na sztywno 3 typy przedmiotów, np. duży, średni, mały) |
Wczytujesz do usera, dopóki typ jest jedną z tych trzech wartości.. - Data zakupu MM-RRRR (nie większa niż dzień wprowadzania danych) |
Czas pobierzesz funkcjami z <ctime>. Format masz ściśle określony, więc łatwo wyciągniesz miesiąc i rok. - Cena przedmiotu (większa niż 0) - ilość użycia danego przedmiotu w roku 2012 i 2013 |
Nie lepiej użyć int/ unsigned int, zamiast std::string? |
|
bartekwwa Temat założony przez niniejszego użytkownika |
Nie dałem rady » 2014-07-03 21:04:28 Nie poradziłem sobie z tym programem. Czy jest ktoś z Was chętny do napisania kodu za kasę?
Obawiam się że skoro nie udało mi się w 2 tygodnie napisać tego kodu to już nie zdążę uzupełnić braków przed zaliczeniem.
Z racji, że jestem na poziomie mega początkującym - 12 godzin zajęć, chciałbym aby kod został napisany możliwie najprostszymi poleceniami. Tak żebym sam przy okazji zrozumiał no i zaliczył przedmiot :/ Elementów takich jak map, int/unsigned czy c.time jeszcze nie miałem na zajęciach.
Jeżeli wśród Was jest ktoś kto ma czas żeby to napisać jestem dostępny non stop pod mailem - allegro.wp@gmail.com
|
|
pekfos |
» 2014-07-03 21:14:22 Elementów takich jak [..] int/unsigned [..] jeszcze nie miałem na zajęciach.
|
Nie miałeś typów danych? To co wy robiliście przez te 12 godzin? Regulowaliście siedzenia..? |
|
bartekwwa Temat założony przez niniejszego użytkownika |
» 2014-07-03 21:19:35 Nie no - typy danych było ale np ani razu nie pojawiło się coś takiego jak "unsigned " Można tak to ująć - w semestrze zmieniali się co chwile wykładowcy, a przy zaliczeniu trafiło na najbardziej wymagającego :/ |
|
bartekwwa Temat założony przez niniejszego użytkownika |
» 2014-07-03 21:53:17 Oddam program niezgodny z poleceniem ale na miarę moich możliwości. Jedyne o co Was chciałbym poprosić to rzucenie okiem czemu CodeBlocks wywala mi błąd w 76 linii, kiedy chcę zapisać dane do pliku tekstowego "plik << pracownik[ k ].id << endl;" ... "error: expected primary-expression before '[' token" #include <iostream> #include <windows.h> #include <conio.h> #include <string> #include <fstream> #include <cstdio> #include <cstdlib>
using namespace std;
float akcja;
struct pracownik { int id; char typ[ 30 ]; float cena; int rok; };
int main() { string typ; char next; char quit; int j = 0; pracownik druk[ 3 ]; do { system( "cls" ); cout << "1 - Dodaj drukarke" << endl; cout << "2 - Wyswietl drukarki" << endl; cout << "3 - Zapisz do pliku" << endl; cout << "4 - Quit" << endl; cin >> akcja; if( akcja == 1 ) { if( j > 2 ) { break; } do { system( "cls" ); cout << "Podaj ID " << endl; cin >> druk[ j ].id; cout << "Podaj typ drukarki: igla/laser/atrament " << endl; cin >> druk[ j ].typ; cout << "Podaj cene drukarki: " << endl; cin >> druk[ j ].cena; cout << "Podaj rok zakupu: " << endl; cin >> druk[ j ].rok; cout << "Czy wprowadzic kolejna drukarke?" << endl; cin >> next; j++; } while(( toupper( next ) == 'T' ) &&( j < 11 ) ); } if( akcja == 2 ) { for( int i = 0;; i++ ) { if( i > j ) { break; } if( druk[ i ].id == 0 ) { break; } cout << druk[ i ].id << " : "; cout << druk[ i ].typ << " : "; cout << druk[ i ].cena << " : "; cout << druk[ i ].rok << endl; } } if( akcja == 3 ) { ofstream plik( "sprzet.txt", ios::out | ios::trunc ); plik << j << "\n"; for( short k = 0; k < j; k++ ) { plik << pracownik[ k ].id << endl; plik << pracownik[ k ].typ << endl; plik << pracownik[ k ].cena << endl; plik << pracownik[ k ].rok << endl; } cout << "Dane zostaly zapisane!"; } if( akcja == 4 ) { break; } cout << endl << "Czy chcesz wyjsc? " << endl; cin >> quit; } while( toupper( quit ) != 'T' ); return 0; }
|
|
« 1 » 2 |