Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program a'la baza danych (sprawdzanie stringów, dat, switch w switchu, itp.)

Ostatnio zmodyfikowano 2014-07-03 22:06
Autor Wiadomość
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:

C/C++
#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.

C/C++
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
#include <windows.h> //potrzebne do daty//

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.
P-112918
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.
P-112921
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.
P-112951
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?
P-112966
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

P-113220
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..?
P-113223
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 :/
P-113226
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"


C/C++
#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;
}
P-113233
« 1 » 2
  Strona 1 z 2 Następna strona