[c++] Funkcja wyświetlania w tabeli.

0

Witam pisze własnie baza danych samochodów w c++ na zaliczenie i muszę zrobić wyświetlanie w tabeli lecz... gdy wpisuje zbyt długie nazwy to dane w tabeli nie są w równych odstępach i wygląda to tragicznie.
Proszę o pomoc w rozwiązaniu tego problemu
Z góry dziękuje za pomoc.
Oto moja funkcja wyświetlania:

void wyswietl(rekord *wsk, int licznik)
{
    system("cls");

     cout << "---------------------------------------------------------------------"<<endl;
     cout << "Lp. "<<"Marka    "<<"Model    "<<"Rocznik    "<<"Przebieg     "
          <<"Kolor        "<<"Cena"<<endl;
     cout << "---------------------------------------------------------------------"<<endl;
    for (int i=0;i<licznik;i++)
    {

          cout<<wsk->numer<<".  " <<wsk->marka<<"     "<<wsk->model<<"     "<<wsk->rok <<"         "
          <<wsk->przebieg<<"       "<<wsk->kolor<<"      "<<wsk->cena<<"zl"<<endl;
          cout<<"---------------------------------------------------------------------"<<endl;

        wsk++;
    }
    for (int i=0;i<licznik;i++)
    {
        wsk--;
    }
    cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
}
 

Jeśli potrzeba to tu wstawiam cały kod:

 #include <iostream>
#include <fstream>
#include <conio.h>
#include <cstdlib>
#include <string.h>


using namespace std;

struct rekord
{
    int numer;
    string model;
    string marka;
    string kolor;
    int przebieg;
    int rok;
    double cena;


};

void wyswietl(rekord *wsk, int licznik);
void dodaj(rekord baza[100],int i, int &licznik);
void zapisz(rekord baza[100],int licznik);
void wczytaj(rekord baza[100],int &licznik);
void szukaj(rekord baza[100],int licznik,char t);
void usun(rekord baza[100],int &licznik,int ktory);


int main()
{
    int licznik=0;
    int ktory=0;
    int i;
    char z;
    rekord baza[100];
    rekord *wsk;
    wsk=baza;
    wczytaj(baza,licznik);
    do{
        system("cls");
        cout <<"****************************************************************"<<endl;
        cout << "******************* Komis samochodowy      *********************"<< endl;
        cout << "******************* <1> Dodaj samochod     *********************"<< endl;
        cout << "******************* <2> Wyswietl samochody *********************"<< endl;
        cout << "******************* <3> Wyszukaj           *********************"<< endl;
        cout << "******************* <4> Zapisz do pliku    *********************"<<endl;
        cout << "******************* <5> Usun samochow      *********************"<<endl;
        cout << "******************* <6> Wyjscie            *********************"<<endl;
        cout <<"****************************************************************"<<endl;
        cin>>z;

    switch(z)
    {
        case '1' :
            {
                cout<<"Dodawanie samochodow"<<endl;
                dodaj(baza,i,licznik);
                break;
            }
        case '2' :
            {
                wyswietl(wsk,licznik);
                getch();
                break;
            }
        case '3' :
            {
                system("cls");
                char t;

                cout<<"Podaj wedlog czego chcesz szukac:"<<endl;
                cout<<"<1> Marka"<<endl;
                cout<<"<2> Roku"<<endl;
                cout<<"<3> Przedzial cenowy"<<endl;
                cout<<"<4> Koloru"<<endl;
                cout<<"<5> Przebiegu"<<endl;
                cout<<"<q> Powrot"<<endl;
                cin>>t;
                szukaj(baza,licznik,t);

                break;
            }
        case '4' :
            {
                zapisz(baza,licznik);
                cout<<"Baza danych zostala poprawnie zapisana"<<endl;
                cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
                getch();
                break;
            }
        case '5' :
            {

                cout<<"Podaj numer samochodu do skasownia: ";
                cin>>ktory;
                usun(baza,licznik,ktory);
                break;
            }
    }

    } while (z!='6');

    return 0;
}
//=====================dodwanie=
void dodaj(rekord baza[100],int i, int &licznik)
{
    i=licznik;
    baza[i].numer=i+1;
    cout<<"Podaj marke: ";
    cin>>baza[i].marka;
    cout<<endl;
    cout<<"podaj model: ";
    cin>>baza[i].model;
    cout<<endl;
    cout<<"podaj rok: ";
    cin>>baza[i].rok;
    cout<<endl;
    cout<<"podaj przebieg: ";
    cin>>baza[i].przebieg;
    cout<<endl;
    cout<<"podaj kolor: ";
    cin>>baza[i].kolor;
    cout<<endl;
    cout<<"podaj cene: ";
    cin>>baza[i].cena;
    cout<<endl;
    licznik++;


}

//============wyswietlanie==========
void wyswietl(rekord *wsk, int licznik)
{
    system("cls");

     cout << "---------------------------------------------------------------------"<<endl;
     cout << "Lp. "<<"Marka    "<<"Model    "<<"Rocznik    "<<"Przebieg     "
          <<"Kolor        "<<"Cena"<<endl;
     cout << "---------------------------------------------------------------------"<<endl;
    for (int i=0;i<licznik;i++)
    {

          cout<<wsk->numer<<".  " <<wsk->marka<<"     "<<wsk->model<<"     "<<wsk->rok <<"         "
          <<wsk->przebieg<<"       "<<wsk->kolor<<"      "<<wsk->cena<<"zl"<<endl;
          cout<<"---------------------------------------------------------------------"<<endl;

        wsk++;
    }
    for (int i=0;i<licznik;i++)
    {
        wsk--;
    }
    cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
}

//===============zapisdo pliku
void zapisz(rekord baza[100],int licznik)
{
    {
            ofstream mojplik;
            mojplik.open("abc1.txt");
        for (int i=0;i<licznik;i++)
            {
                mojplik<<baza[i].numer<<endl;
                mojplik<<baza[i].marka<<endl;
                mojplik<<baza[i].model<<endl;
                mojplik<<baza[i].rok<<endl;
                mojplik<<baza[i].przebieg<<endl;
                mojplik<<baza[i].kolor<<endl;
                mojplik<<baza[i].cena<<endl;
            }



        mojplik.close();

        }
}
//==============wczytanie z pliku=
void wczytaj(rekord baza[100],int &licznik)
{
    ifstream mojplik("abc1.txt");

    int g=0;

    for(int i=0; mojplik.good(); ++i,g++)
        {
            mojplik>>baza[i].numer >> baza[i].marka >> baza[i].model >> baza[i].rok >> baza[i].przebieg >> baza[i].kolor >> baza[i].cena;

        }
    g-=1;
    if(g>=0)
    {
    licznik=licznik+g;
    }
}
//===============szukaj========================================================================
void szukaj(rekord baza[100],int licznik,char t)
{
    system("cls");
    switch(t)
    {
        case '1' :
            {
                string sam;
                cout<<"Podaj Marke do wyszukania:"<<endl;
                cin>>sam;
                cout<<endl;
               for(int i=0;i<licznik;i++)
            {
                if (baza[i].marka==sam)
                {
                cout<<"Samochod numer: "<<baza[i].numer<<endl;
                cout<<"Marka: "<<baza[i].marka<<endl;
                cout<<"Model: "<<baza[i].model<<endl;
                cout<<"Rok: "<<baza[i].rok<<endl;
                cout<<"Przebieg: "<<baza[i].przebieg<<endl;
                cout<<"Kolor: "<<baza[i].kolor<<endl;
                cout<<"Cena: "<<baza[i].cena<<"zl"<<endl<<endl;

                }

            }

            cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
            getch();
                break;
            }

        case '2' :
            {
                int sam;
                cout<<"Podaj rok do wyszukania:"<<endl;
                cin>>sam;
                cout<<endl;
               for(int i=0;i<licznik;i++)
            {
                if (baza[i].rok==sam)
                {
                cout<<"Samochod numer: "<<baza[i].numer<<endl;
                cout<<"Marka: "<<baza[i].marka<<endl;
                cout<<"Model: "<<baza[i].model<<endl;
                cout<<"Rok: "<<baza[i].rok<<endl;
                cout<<"Przebieg: "<<baza[i].przebieg<<endl;
                cout<<"Kolor: "<<baza[i].kolor<<endl;
                cout<<"Cena: "<<baza[i].cena<<"zl"<<endl<<endl;

                }


            }
            cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
            getch();
            break;
            }

            case '3' :
            {
                double min,max;
                cout<<"Podaj cene minimalna do wyszukania:"<<endl;
                cin>>min;
                cout<<"Podaj cene maksymalna do wyszukania:"<<endl;
                cin>>max;
                cout<<endl;
               for(int i=0;i<licznik;i++)
            {
                if (baza[i].cena>=min && baza[i].cena<=max)
                {
                cout<<"Samochod numer: "<<baza[i].numer<<endl;
                cout<<"Marka: "<<baza[i].marka<<endl;
                cout<<"Model: "<<baza[i].model<<endl;
                cout<<"Rok: "<<baza[i].rok<<endl;
                cout<<"Przebieg: "<<baza[i].przebieg<<endl;
                cout<<"Kolor: "<<baza[i].kolor<<endl;
                cout<<"Cena: "<<baza[i].cena<<"zl"<<endl<<endl;

                }
            }

            cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
            getch();
            break;
            }
            case '4':
             {
                char *sam;
                cout<<"Podaj kolor do wyszukania:"<<endl;
                cin>>sam;
/*
               for(int i=0;i<licznik;i++)
            {
                if(strncmp(baza[i].kolor,sam,strlen(sam)) == 0)
                   {
                        cout<<endl;
                        cout<<"Samochod numer: "<<baza[i].numer<<endl;
                        cout<<"Marka: "<<baza[i].marka<<endl;
                        cout<<"Model: "<<baza[i].model<<endl;
                        cout<<"Rok: "<<baza[i].rok<<endl;
                        cout<<"Przebieg: "<<baza[i].przebieg<<endl;
                        cout<<"Kolor: "<<baza[i].kolor<<endl;
                        cout<<"Cena: "<<baza[i].cena<<"zl"<<endl<<endl;

                   }
            } */
            cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
            getch();
                break;
            }
            case '5' :
            {
                int min,max;
                cout<<"Podaj przebieg minimalny do wyszukania:"<<endl;
                cin>>min;
                cout<<"Podaj przebieg maksymalny do wyszukania:"<<endl;
                cin>>max;
                cout<<endl;
               for(int i=0;i<licznik;i++)
            {
                if (baza[i].przebieg>=min && baza[i].przebieg<=max)
                {
                cout<<"Samochod numer: "<<baza[i].numer<<endl;
                cout<<"Marka: "<<baza[i].marka<<endl;
                cout<<"Model: "<<baza[i].model<<endl;
                cout<<"Rok: "<<baza[i].rok<<endl;
                cout<<"Przebieg: "<<baza[i].przebieg<<endl;
                cout<<"Kolor: "<<baza[i].kolor<<endl;
                cout<<"Cena: "<<baza[i].cena<<"zl"<<endl<<endl;

                }

            }

            cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
            getch();
            break;
            }
            case 'q' : break;

    }

}
//====usun
void usun(rekord baza[100],int &licznik,int ktory)
{
    ktory--;
    if (ktory<licznik)
    {
    for (int i=ktory;i<licznik;i++)
    {
        baza[i].marka = baza[i+1].marka;
        baza[i].model = baza[i+1].model;
        baza[i].rok   = baza[i+1].rok;
        baza[i].przebieg = baza[i+1].przebieg;
        baza[i].kolor = baza[i+1].kolor;
        baza[i].cena  = baza[i+1].cena;
    }
    cout<<"Samochod zostaw usuniety z bazy"<<endl;
    licznik--;
    }else cout<<"Nie ma w bazie samochodu pod tym numerem"<<endl;
          cout<<endl;
          cout<<"Nacisnij dowolny klawisz aby przejsc dalej"<<endl;
    getch();

}
0

C++ to nijak nie przypomina.
Widze 2 opcje na pierwszy rzut oka:

  1. dosc kiepska, ustawiasz max dlugosc ciagu i wyswietlasz po tyle znakow fillujac spacjami.
  2. jakis zew. lib typu ncurses

//Poczytaj o strumieniach powinno (chyba) byc cos do wyrownywania tekstu.

0

#include <iomanip>

cout<<setw(5)<<"Lp."<<setw(10)<<3<<endl;

0
_13th_Dragon napisał(a):

#include <iomanip>

cout<<setw(5)<<"Lp."<<setw(10)<<3<<endl;

Takie coś nie przejdzie to musi być zrobione mniej tak :
Nazwa auta "bmw" i chcę aby dodało spacje do długości 15 analogicznie model itp ale jak to zrobić? ;/
Przykład:

  1. Bmw x6
  2. Audi a6
  3. Volkswagen passat
    itp.
1

właśnie tak jak pokazałem:

cout<<setw(5)<<"Lp."<<setw(15)<<"Marka"<<setw(10)<<"Model"<<endl;
cout<<setw(5)<<1<<setw(15)<<"Bmw"<<setw(10)<<"x6"<<endl;
cout<<setw(5)<<2<<setw(15)<<"Audi"<<setw(10)<<"a6"<<endl;
cout<<setw(5)<<3<<setw(15)<<"Volkswagen"<<setw(10)<<"passat"<<endl;

Niestety tylko tym bystrym wystarczy pokazać jak, pozostałym jeszcze trzeba udowadniać że tak jak pokazałeś będzie działać.

0

Wszystko działa jak należy dzięki za pomoc :)
Mam jeszcze tylko jeden problem jak zrobić wyszukiwanie która wyszukuje bez względu na podaną wielkość litery w nazwie np "Audi" czy "audi".

0

Np. tak:

char* toLowerCase(char* str)
{	
	int differ = 'A'-'a';
	char ch;
	int ii = strlen(str);
	for (int i=0; i <ii;i++)
	{
		strncpy(&ch,str+i,1);
		if (ch>='A' && ch<='Z')
		{
			ch = ch-differ;
			memcpy(str+i,&ch,1);
		}
	}
	return str;
}
0
n0name_l napisał(a):

Np. tak: (...)

Btw. C++ way dla C-stringów:

char *strToLower(char *str) {
  using namespace std::placeholders;   
  auto tolower_f = std::bind(std::tolower<char>, _1, std::locale());
    
  std::transform(str, str + std::strlen(str), str, tolower_f);
  return str;
}

http://ideone.com/iH4wUo

A tak w ogóle to C++ way to std::string.

0

Dzięki za pomoc tyle, że ja operuje na stringach i jak chce te funkcje włożyć do mojego programu to wyskakuje błąd ze nie da się konwertować string do char *str ;/
Ma ktoś jakiś pomysł?

0

W moim kodzie wystarczy niewielka przeróbka.

std::string &stringToLower(std::string &str) {
  using namespace std::placeholders;   
  auto tolower_f = std::bind(std::tolower<char>, _1, std::locale());
    
  std::transform(str.begin(), str.end(), str.begin(), tolower_f);
  return str;
}

http://ideone.com/BFzea7

1 użytkowników online, w tym zalogowanych: 0, gości: 1