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

Bazy danych

Ostatnio zmodyfikowano 2020-12-06 20:38
Autor Wiadomość
Student_2020
Temat założony przez niniejszego użytkownika
Bazy danych
» 2020-12-06 20:06:27
Dzień dobry. Mam napisaną bazę danych lecz nie potrafię dodać opcji usuwania studenta na zasadzie: podaj indeks studenta, którego chcesz usunąć.
C/C++
#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[ i ].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[ i ].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[ i ];
       
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[ i ];
               
else imie = imie + " " + v1[ i ];
               
           
}
           
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[ i ].imie << " " << tab[ i ].nazwisko << " " << tab[ i ].indeks << " " << tab[ i ].obecnosci << " (" << tab[ i ].spr_01 << ", " << tab[ i ].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[ i ] == 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[ i ], '+' );
       
if( nb < 0.2 ) niekwalifikowani.push_back( t[ i ] );
       
   
}
   
return niekwalifikowani;
   
}

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

vector < student > stypendium_oceny( vector < student > t )
{
   
float suma;
   
vector < student > stypendium;
   
for( int i = 0; i < t.size(); i++ )
   
{
       
suma = t[ i ].spr_01 + t[ i ].spr_02;
       
if( suma > 20 && statystyka_obecnosci( t[ i ], '+' ) >= 0.8 )
           
 stypendium.push_back( t[ i ] );
       
   
}
   
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[ i ] ); 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[ i ] );
           
           
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[ i ] );
           
           
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[ i ] );
           
           
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;
}
P-177795
pekfos
» 2020-12-06 20:38:55
P-177796
« 1 »
  Strona 1 z 1