Bazy danych. Jak dodać usuwanie czegoś z bazy danych?

0

Dzień dobry. Mam napisaną bazę danych lecz nie potrafię dodać opcji usuwania studenta na zasadzie: podaj indeks studenta, którego chcesz usunąć.

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <vector>
#include <algorithm>
#include <fstream>
#include <string>

#define N 100
#define OB 5
int n=0; //ilosc elementow w aktualnej tablicy
//proba
using namespace std;

struct student{
string imie;
string nazwisko;
string indeks;
string obecnosci;
string wydzial;
string kierunek;
float spr_01;
float spr_02;
};

//student tab[N];
vector <student> tab;
vector <student> tab2;
vector <student> tab3;//studenci niekwalifikowani
vector <student> tab4;//studenci kwalifikowani
vector <student> tab5;//stypendium

string pobierz_tekst(string pytanie){
string napis;
do{
cout<<pytanie;
cin>>napis;
}while(napis=="");

return napis;

}

string pobierz_indeks(string pytanie, vector <student> t){
string napis;
int ret; //czy indeks jest w bazie
do{
cout<<pytanie;
cin>>napis;
ret = 1;
for (int i=0;i<tab.size();i++)
if(t.indeks==napis)
{
ret=0;
cout<<"Podany indeks jest w bazie. Podaj jeszcze raz!!!"<<endl;
break;
}

}while(napis==""||ret==0);

return napis;

}

string pobierz_obecnosci(string pytanie)
{
string napis, tmp;
int ret;

do{
    ret = 1;
    napis = pobierz_tekst(pytanie);
    if (napis.length()!=OB)
    {
        cout<<"Podaj poprawna ilosc obecnosci!!!"<<endl;
        ret = 0;
        continue;
    }
    for (int i=0;i<napis.length();i++)
    {
        tmp = napis.substr(i,1);
        if (!(tmp=="+"||tmp=="-"))
        {
            cout<<"Zanleziono niepoprawny znak. Wpisz jeszcze raz!!!"<<endl;
            ret = 0;
            break;
        }
    }

}while (ret==0);


return napis;

}

float pobierz_punkty(string pytanie)
{
string napis;
float liczba = 0.0;
while(1){
cout<<pytanie;
cin>>napis;
if(napis.compare("0")==0) return 0.0;
liczba = atof(napis.c_str());
if (liczba==0) continue;
if (liczba<=12) return liczba;
}

return liczba;

}

student dodaj(void)
{
student st;
st.imie = pobierz_tekst("Imie: ");
st.nazwisko = pobierz_tekst("Nazwisko: ");
st.wydzial = pobierz_tekst("Wydzial: ");
st.kierunek = pobierz_tekst("Kierunek: ");
st.indeks = pobierz_indeks("Indeks: ", tab);
st.obecnosci = pobierz_obecnosci("Obecnosci: ");
st.spr_01 = pobierz_punkty("Punkty spr1: ");
st.spr_02 = pobierz_punkty("Punkty spr2: ");

return st;

}

void wyswietl(student st)
{
cout<<"Imie: "<<st.imie<<" Nazwisko: "<<st.nazwisko<<"Wydzial: "<<st.wydzial<<"Kierunek: "<<st.kierunek<<" Indeks: "<<st.indeks<<" Obecnosci: "<<st.obecnosci<<" Spr1: "<<st.spr_01<<" Spr2: "<<st.spr_02<<endl;
}

bool porownaj_nazwiska(student s1, student s2)
{
if (s1.nazwisko < s2.nazwisko) return true;
if (s1.nazwisko > s2.nazwisko) return false;
if (s1.imie < s2.imie) return true;
if (s1.imie > s2.imie) return false;
if (s1.indeks < s2.indeks) return true;
if (s1.indeks > s2.indeks) return false;
}

int wyszukaj(vector <student> t, string indeks, int &ret)
{
ret = 0;
for (int i=0;i<tab.size();i++)
if (t.indeks==indeks){
ret = 1;
return i;
}
return NULL;
}

vector <string> split(string linia, string sep)
{
vector <string> result;
string wyraz = "";
string znak;
linia = linia+sep;
for(int i=0;i<linia.length();i++)
{
znak = linia;
if(znak==sep)
{
result.push_back(wyraz);
wyraz = "";
continue;
}
wyraz = wyraz+znak;
}
return result;
}

vector <student> odczyt_pliku(string nazwa)
{
fstream plik;
vector <student> tab;
student st;
string linia, imie, nazwisko, indeks, obecnosci, spr1, spr2, tmp1, tmp2;
vector <string> v1,v2;

plik.open(nazwa.c_str(), ios::in);
if (plik.good()==true)
{
    while (getline(plik, linia))
    {
        //oceny
        v1 = split(linia,")");
        linia = v1[0];
        v1 = split(linia,"(");
        if (v1.size()!=2)continue;
        tmp1 = v1[0];//reszte linijki do ocen
        tmp2 = v1[1];//oceny
        v1 = split(tmp2,",");
        if (v1.size()!=2) continue;
        spr1 = v1[0];
        spr2 = v1[1];
        v1 = split(tmp1," ");
        int dl=v1.size();
        if (dl<4) continue;
        obecnosci = v1[dl-2];
        indeks = v1[dl-3];
        nazwisko = v1[dl-4];
        imie = "";
        for (int i=0;i<dl-4;i++)
        {
            if (i==0) imie=v1;
            else imie=imie+" "+v1;
        }
        st.imie=imie;
        st.nazwisko=nazwisko;
        st.indeks=indeks;
        st.obecnosci=obecnosci;
        st.spr_01 = atof(spr1.c_str());
        st.spr_02 = atof(spr2.c_str());
        tab.push_back(st);
    }

    plik.close();
}
else cout<<"Brak dostepu do pliku!!!"<<endl;

return tab;

}

void zapis_pliku(vector <student> tab, string nazwa)
{
fstream plik;
plik.open(nazwa.c_str(), ios::out);
if (plik.good()==true)
{
for (int i=0;i<tab.size();i++)
{
plik<<tab.imie<<" "<<tab.nazwisko<<" "<<tab.indeks<<" "<<tab.obecnosci<<" ("<<tab.spr_01<<", "<<tab.spr_02<<")"<<endl;
}
plik.close();
}
else cout<<"Brak dostepu do pliku!!!"<<endl;
}

float statystyka_obecnosci(student st, char symbol)
{
int suma = 0;
for (int i=0;i<st.obecnosci.length();i++)
{
if (st.obecnosci==symbol) suma+=1;
}
return (1.0*suma/st.obecnosci.length());
}

vector <student> niekwalifikowani_obecnosci(vector <student> t)
{
float nb;
vector <student> niekwalifikowani;
for (int i=0;i<t.size();i++)
{
nb = statystyka_obecnosci(t,'+');
if (nb<0.2) niekwalifikowani.push_back(t);

}
return niekwalifikowani;

}

vector <student> kwalifikowani_oceny(vector <student> t)
{
float suma;
vector <student> kwalifikowani;
for (int i=0;i<t.size();i++)
{
suma = t.spr_01+t.spr_02;
if (suma>12 && statystyka_obecnosci(t,'+')>=0.8)
kwalifikowani.push_back(t);
}
return kwalifikowani;

}

vector <student> stypendium_oceny(vector <student> t)
{
float suma;
vector <student> stypendium;
for (int i=0;i<t.size();i++)
{
suma = t.spr_01+t.spr_02;
if (suma>20&& statystyka_obecnosci(t,'+')>=0.8)
stypendium.push_back(t);
}
return stypendium;
}

void menu(void){
int klawisz, ind, ret = 0;
student st;
string indeks;

do{
    system("cls");
    cout<<"!!!!!MENU!!!!!"<<endl;
    cout<<"*****************************"<<endl;
    cout<<"Wybierz klawisz: "<<endl;
    cout<<"1. Dodaj studenta: "<<endl;
    cout<<"2. Wyswietl studenta: "<<endl;
    cout<<"3. Wyszukaj studenta: "<<endl;
    cout<<"4. Usun studenta: "<<endl;
    cout<<"5. Studenci niekwalifikowani/absencja: "<<endl;
    cout<<"6. Studenci, ktorzy zaliczyli: "<<endl;
    cout<<"7. Studencji posiadajacy stypendium: "<<endl;
    cout<<"9. Wyjscie: "<<endl;
    cout<<"Wybrales: ";
    cin>>klawisz;
    switch(klawisz){
        case 1: cout<<"Dodawanie studenta"<<endl;
                st=dodaj();
                tab.push_back(st);
                cout<<"Dodano studenta do bazy. Nacisnij dowolny klawisz!!!"<<endl;
                //dorobic zapis do pliku nowo wprowadzonego studenta
                getch();
                break;
        case 2: tab2 = tab;
                cout<<"Lista studentow"<<endl;
                sort(tab2.begin(), tab2.end(), porownaj_nazwiska);
                for (int i=0;i<tab2.size();i++) wyswietl(tab2);getch(); break;
        case 3: cout<<"Wyszukanie studenta"<<endl;
                cout<<"Podaj indeks do wyszukania studenta: ";
                cin>>indeks;
                ind = wyszukaj(tab,indeks, ret);
                if (ret == 0) cout<<"Brak studenta o danym indeksie w bazie."<<endl;
                else wyswietl(tab[ind]);
                cout<<"Nacisnij dowolny klawisz!!!"<<endl;
                getch();
                break;
        case 4: cout<<"Usun studenta"<<endl;

                break;
        case 5: cout<<"Studenci niekwalifikowani z powodu absencji."<<endl;
                tab3 = niekwalifikowani_obecnosci(tab);
                if (tab3.size()==0) cout<<"Wszyscy studenci kwalifikowani."<<endl;
                else
                    for (int i=0;i<tab3.size();i++)
                    wyswietl(tab3);
                cout<<"Wcisnij dowolny klawisz!!!"<<endl;
                getch();
                break;
        case 6: cout<<"Studenci, ktorzy zaliczyli: "<<endl;
                tab4 = kwalifikowani_oceny(tab);
                if (tab4.size()==0) cout<<"Wszyscy studenci powtorka."<<endl;
                else
                    for (int i=0;i<tab4.size();i++)
                    wyswietl(tab4);
                cout<<"Wcisnij dowolny klawisz!!!"<<endl;
                getch();
                break;
        case 7: cout<<"Studenci posiadajacy stypendium"<<endl;
                tab5 = stypendium_oceny(tab);
                if (tab5.size()==0) cout<<"Nikt nie posiada stypendium."<<endl;
                else
                    for (int i=0;i<tab5.size();i++)
                    wyswietl(tab5);
                getch();
                break;
        case 9: zapis_pliku(tab,"d2000z_n.txt");
                break;
        default: break;
    }

}while (klawisz!=5);

}

int main()
{
tab = odczyt_pliku("d2000z.txt");
menu();
return 0;
}

1

Straszne.

Nic tu nie gra, od formatowania, przez banalne wyłuskiwanie literki ze stringa, proceduralny kod w najgorszym stylu, brak przemyśleń nt struktur danych, nazwy zmiennych, złe używanie typów np boolowskiego / nie używanie ich wcale ...
i wiecej, ale mówię ufff...

0

Pomijając niesformatowany kod, to bazy danych w C++ to naprawdę zły pomysł.

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