c++ baza danych wyszukiwania, usuwanie, aktualizacja

0

Witam mam do zrobienia w programie a własciwie w prostej bazie danych nastepujace cele:
-wyszukiwanie
-usuwanie
-aktualizacja

W wyszukiwaniu chce wyszukac np. samochod o nr 1, w aktualizacji chce edytowac dane z 1 elementu tabeli np. 2, a w usuwaniu chce zrobic tak jak tutaj
http://edu.i-lo.tarnow.pl/inf/utils/010_2010/0512.php to znaczy przesunac dalsze elementy tablicy na to miejsce gdzie dany element ma byc usuniety. Prosze o w miare mozliwosci pisanie porad na razie jak najprostrzymi metodami poniewaz dopiero zaczynam C++ i chce rozumiec to co mi pomozecie

A oto ten program:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Samochod
{
	int numer;		 //kolejny
	string marka;
	string model;
	int rok;                 
	double cena;
}; 


const int n=200;
Samochod tab [n];

int rozmiar()
{
	string model , marka;
	int rok , numer;
	double cena;
	
	ifstream plik;
	plik.open("baza.txt");
	int rozm = 0;
	
	while(!plik.eof())
	{
		plik>>numer;
		plik>>marka;
		plik>>model;
		plik>>rok;
		plik>>cena;
		
		rozm += 1;
	}
	
	plik.close();
	return rozm-1;
}

void zpliku(int n)
{
	ifstream plik;
	plik.open("baza.txt");
	
	for(int i=0;i<n;i++)
	{
		plik>>tab[i].numer;
		plik>>tab[i].marka;
		plik>>tab[i].model;
		plik>>tab[i].rok;
		plik>>tab[i].cena;
	//	cout<<tab[i].model;
	}
	plik.close();
}

void dopliku(int n)
{
     	ofstream plik;
     	plik.open("baza.txt");
     	for (int i=0;i<n;i++)
     	{
		plik<<tab[i].numer<<endl;
		plik<<tab[i].marka<<endl;
		plik<<tab[i].model<<endl;
		plik<<tab[i].rok<<endl;
		plik<<tab[i].cena<<endl;
		plik<<endl;
    }
        plik.close(); 
 }
 


int main()
{	
    int i=0;
    int znak;
    
    int ile=rozmiar();
   // cout<<ile;
    zpliku(ile);
    
   	do
	{

	cout<<"		Dopisanie nowego somochodu/smochodow 		wcisnij - 1\n";
	cout<<"		Wypisanie wszystkich samochodow  		wcisnij - 2\n";	
	cout<<"		Wyjscie z programu                   		wcisnij - 0\n";	
	cout<<"Co chcesz robic ??\n";	
	cin>>znak;	
	
	switch(znak)
	{
		case 1:
		{
        ile=ile+1;
        i=ile-1;
       // cout<<"ile z dodaj"<<ile;
		tab[i].numer = ile;
		cout<<"Podaj marke :\n";
		cin>>tab[i].marka;
		cout<<"Podaj model:\n";
		cin>>tab[i].model;
		cout<<"Podaj rok produkcji :\n";
		cin>>tab[i].rok;
		cout<<"Podaj cene samochodu :\n";
		cin>>tab[i].cena;
	    
        break;
		}
		case 2:
		{
 	       for (int i=0;i<ile;i++)
     	   {
		    cout<<tab[i].numer<<endl;
		    cout<<tab[i].marka<<endl;
		    cout<<tab[i].model<<endl;
		    cout<<tab[i].rok<<endl;
		    cout<<tab[i].cena<<endl;
		    cout<<endl;
    }
             break;
         }
    	case 0:
		{
			dopliku(ile);
            cout<<"Dziekuje! Dowidzenia ;p ;)\n";
		
			//break;
		}
	}
	}while(znak != 0);
    
    
	
	
	
	
	
	return 0;
}

I to co znajduje sie w pliku
1
fiat
uno
1994
4300

2
fiat
uno
1999
2300

3
seat
leon
1994
3434

4
opel
zafira
1998
7800

0

W jaki sposób ma działać to wyszukiwanie? Chcesz podać nazwę samochodu, markę, czy np. numer? Czy aktualizacja też ma być po numerze porządkowym? Poza tym funkcja rozmiar powinna zwracać wartość rozm, a nie rozm-1. Dzięki temu zapis:

 ile=ile+1;
        i=ile-1;

można zamienić na

 i = ile;

Poza tym funkcja rozmiar() mogła by wyglądać tak: Samochod sm;
ifstream plik;
plik.open("baza.txt",ios::in);
int rozm = 0;

    while(!plik.eof())
    {

            plik>>sm.numer>>sm.marka>>sm.model>>sm.rok>>sm.cena;
            rozm += 1;
    }

    plik.close();
    return rozm;
0

Wyszukiwanie moze byc obojetne moze byc po nazwie samochodu a jak nie po nazwie samochodu to chociaz po numerze
Tak aktualizacja powinna byc po numerze porzadkowym np. nr 2 i wypisywanie danych( troche moze bardziej edycja ale jak zmienia sie rok to z kolei bardziej aktualizacja)
Aha ok dzieki poprawie to sobie.

0

Wyszukiwanie ma dzialac ze jak wpisze np. audi to ma mi wyswietlic wszystkie audi jakie mam w pliku no chyba ze po liczbie bedzie łatwiej to np. numer 2 i co pod nim sie znajduje. Cos podobnego jak mam tam wczesniej wyswietlone wszystkie tylko ze w wyszukiwaniu ma sie wyswietlic 1.

0

Co do funkcji aktualizacji danych oraz wyświetlenia określonego pojazdu to tak na szybko teraz:

 case 3:
            {
                int j = 0;
                cout<<"Podaj numer samochodu do aktualizacji: ";
                cin>>j;
                j--;
                cout<<"Podaj marke :\n";
                cin>>tab[j].marka;
                cout<<"Podaj model:\n";
                cin>>tab[j].model;
                cout<<"Podaj rok produkcji :\n";
                cin>>tab[j].rok;
                cout<<"Podaj cene samochodu :\n";
                cin>>tab[j].cena;
                break;
            }
            case 4:
            {
                int j = 0;
                cout<<"Podaj numer samochodu do wyswietlenia: ";
                cin>>j;
                j--;
                cout<<tab[j].numer<<endl;
                    cout<<tab[j].marka<<endl;
                    cout<<tab[j].model<<endl;
                    cout<<tab[j].rok<<endl;
                    cout<<tab[j].cena<<endl;
                    cout<<endl;
                break;
            }

W tym programie jest kilka błędów jeszcze, ale póki co, wybacz idę spać :P

0

OK dzieki za wyszukiwanie i aktualizacje bo działają dobrze dobrze, ale jeszcze potrzebowałbym usuniecia jednego elementu z tablicy i z pliku na tym przykładzie http://edu.i-lo.tarnow.pl/inf/utils/010_2010/0512.php Tam gdzie jest "Algorytm usuwania z tablicy" (ten element co ma byc usuniety ma byc nadpisany przez te elementy z tyłu). Jakby mógłby mi ktos pomoc to byłbym bardzo wdzięczny. A propos programu to wiem ze ma trochę błędów, ale dopiero się uczę i jak każdy popełniam trochę błędów.

0

Usuwanie mogłoby wyglądać tak:

case 5:
            {
                int j = 0;
                cout<<"Podaj numer samochodu do usuniecia: ";
                cin>>j;
                j--;
                for(int i = j;i<ile-1;i++)
                {
                    tab[i].marka = tab[i+1].marka;
                    tab[i].model = tab[i+1].model;
                    tab[i].rok = tab[i+1].rok;
                    tab[i].cena = tab[i+1].cena;
                }
                ile--;
                break;
            } 

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