• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mam napisaną bazę danych lecz nie potrafię dodać opcji usuwania.

Object Storage Arubacloud
0 głosów
291 wizyt
pytanie zadane 6 grudnia 2020 w C i C++ przez Student.2020 Nowicjusz (140 p.)

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 odpowiedź

0 głosów
odpowiedź 6 grudnia 2020 przez tangarr Mędrzec (154,820 p.)
Do usuwania elementów z kontenerów biblioteki standardowej służy funkcja erase
(dla wektora https://en.cppreference.com/w/cpp/container/vector/erase)
Funkcja przyjmuje iterator do elementu, który chcesz usunąć.

Podobne pytania

0 głosów
1 odpowiedź 2,512 wizyt
pytanie zadane 10 marca 2018 w SQL, bazy danych przez zulux Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 314 wizyt
pytanie zadane 14 maja 2020 w SQL, bazy danych przez Lampards Obywatel (1,130 p.)
0 głosów
0 odpowiedzi 301 wizyt
pytanie zadane 28 kwietnia 2020 w SQL, bazy danych przez manjaro Nałogowiec (37,390 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...