Skocz do zawartości
Zywiol

Poprawa

Rekomendowane odpowiedzi

Witam mam tu programik nad ktorym siedziałe wiele nocy no i gdy go oddałem usłyszałem że jest strasznie poplątany no i nie powiem bo tak jest. Chciałbym aby ktoś pomógł mi zmienić go troche dodać tam gdzie trzeba destruktory i konstruktory które ułatwiłybyb niektóre zadania bo właśnie z tym mam problemy . Błagam o pomoc pleaseeeeeee:):):)

*******************************************************************

 

#include <iostream>

#include <iomanip>

#include <conio.h>

#include <fstream>

#include <string.h>

#include <cstdlib>

#include <stdio.h>

 

 

 

using namespace std;

 

class obecnosc;

class wezel;

 

ofstream lista_txt("Lista studentow.txt");

int o;

const int maks = 20;

 

 

class obecnosc{

/******************************************************************************/

private:

 

char imie[20], nazwisko[20], nr_indeksu[6];

/******************************************************************************/

 

public:

 

obecnosc () {};

 

obecnosc (char *imie,char *nazwisko, char *nr_indeksu);

 

~obecnosc ()

{

if(imie) delete imie;

else if(nazwisko) delete nazwisko;

else if(nr_indeksu) delete nr_indeksu;

}

int z;

 

void wypisanie();

void przepisz(char *imie,char *nazwisko, char *nr_indeksu);

void wypisz();

void klasa_do_pliku();

/********************Zaprzyjaźnienia funckji***********************************/

friend void dodaj_studenta(wezel*&pierwszy,wezel*&ostatni,int o);

friend void znajdz_studenta(wezel *&pierwszy, wezel *&ostatni,int o);

friend void usun_studenta (wezel *&pierwszy, wezel *&ostatni,int o);

friend void drukuj(wezel *&pierwszy, wezel *&ostatni,int o);

friend void do_pliku(wezel*&pierwszy, wezel*&ostatni,int o);

//friend void klasa_do_pliku();

 

 

 

};

 

class wezel{

 

friend class obecnosc;

public:

 

wezel *nastepny, *poprzedni;

obecnosc *dane; //definicja należącej do klasy obecnosc zmiennej dane

};

 

 

 

/**********************---------Deklaracje funkcji---------********************/

 

void dodaj_studenta(wezel*&pierwszy,wezel*&ostatni,int o)

{

 

obecnosc *nowy_student; //tworzymy wskaźnik zmiennej należącej do klasy obecność

nowy_student = new obecnosc; //przydzielenie pamięci w klasie obecność dla zmiennej

 

if (nowy_student == NULL) //jeśli nie ma wolnej pamięci

{

cerr << "Nie ma pamieci na nowego studenta";return;

}

 

cout << "Podaj nazwisko :";

cin.getline(nowy_student->nazwisko,maks);

 

cout << "Podaj imie :";

cin.getline(nowy_student->imie,maks);

 

//nazwisko**********************************************************************

 

int i, dlugosc = strlen(nowy_student->nazwisko);

nowy_student->nazwisko[0] = toupper(nowy_student->nazwisko[0]); //pierwsza duza

 

for(i = 1; i < dlugosc; i++)

{

nowy_student->nazwisko = tolower(nowy_student->nazwisko);

}

 

//imie**************************************************************************

 

dlugosc = strlen(nowy_student->imie);

nowy_student->imie[0] = toupper(nowy_student->imie[0]); //pierwsza duza

 

for(i = 1; i < dlugosc; i++)

{

nowy_student->imie = tolower(nowy_student->imie);

}

 

//numer indeksu*****************************************************************

cout << "Podaj numer indeksu :";

cin >> nowy_student->nr_indeksu;

 

 

if(o==5)

{

 

char status[maks], bufor[maks];

cout << "Czy student jest obecny ??\n";

cout << "(wpisz t lub T dla potwierdzenia obecnosci w przeciwnym razie n lub N : ";

cin >> status;

 

if (!strcmp(status,"t") || !strcmp(status,"T"))

{

strcpy(status,"OBECNY");

}

 

 

else if (!strcmp(status,"n") || !strcmp(status,"N"))

{

strcpy(status,"NIEOBECNY");

}

else

{

cout << "bledne dane !!";

}

 

strcpy(bufor,nowy_student->nazwisko);

lista_txt << bufor << setw(15);

 

strcpy(bufor,nowy_student->imie);

lista_txt << bufor << setw(15);

 

strcpy(bufor,nowy_student->nr_indeksu);

lista_txt << bufor << "\t" ;

 

lista_txt << "\t\t\t " << status << endl ;

 

 

 

}

 

wezel *nowy; //stworznie zmiennej nowy należącej do klasy węzeł

nowy = new wezel; //przydzielenie pamięci zmiennej nowy

 

if (nowy == NULL) //jeśli nie ma wolnej pamięci

{

cerr << "Nie ma pamieci na nowy wezel ";return;

}

 

nowy->dane = nowy_student; //wskazanie na dane dla węzła (do zmiennej dane zostaje wpisany początek

//łańcucha danych czyli imienia i nazwiska studenta)

//wybór miejsca na wszczepeieni nowego węzła dla listy

if (pierwszy == NULL) //jeśli lista jest pusta

{

pierwszy = nowy;

ostatni = nowy;

 

nowy->poprzedni = NULL;

nowy->nastepny = NULL;

}

 

else //czy nowy jest np. przed pierwszym

{

if(strcmp(nowy->dane->nazwisko,pierwszy->dane->nazwisko)<=0)

{

pierwszy->poprzedni = nowy;/************************************************/

nowy->nastepny = pierwszy;

pierwszy = nowy;

pierwszy->poprzedni = NULL;

}

else //czy nowy jest równy lub zxa ostatnim

{

if(strcmp(nowy->dane->nazwisko,ostatni->dane->nazwisko)>=0)

{

ostatni->nastepny = nowy;

nowy->nastepny = NULL;

nowy->poprzedni = ostatni;

ostatni = nowy;

}

 

 

else //nowy powinien byc gdzies w srodku

{

wezel *buf = pierwszy->nastepny;

while(strcmp(buf->dane->nazwisko,nowy->dane->nazwisko)<0)

buf = buf->nastepny; //jak wyjdzie

nowy->nastepny = buf;

nowy->poprzedni = buf->poprzedni;

buf->poprzedni = nowy;

nowy->poprzedni->nastepny = nowy;

}

 

}

 

 

}

system("cls");

}

 

/******************************************************************************/

 

 

 

void znajdz_studenta(wezel *&pierwszy, wezel *&ostatni,int o)

{

wezel *buf = pierwszy;

 

if(buf == NULL)

{

cerr << "Lista jest pusta"<< endl;

return;

}

 

char szukaj[maks], bufor[maks];

cout <<"Podaj szukane nazwisko: ";

cin.getline(szukaj,maks);

 

int dlugosc = strlen(szukaj);

szukaj[0] = toupper(szukaj[0]);

 

 

while(buf!= NULL)

{

if(strncmp(buf->dane->nazwisko, szukaj, dlugosc)== 0)

{

cout << setw(95) << setfill('*')<< endl;

 

cout <<"Nazwisko : \t" << buf->dane->nazwisko<< endl ;

cout <<"Imie :\t\t"<< buf->dane->imie << endl;

cout <<"Nr.albumu :\t"<< buf->dane->nr_indeksu << endl<< endl;

 

 

buf = buf->nastepny;

 

}

else {

buf = buf->nastepny;

cout << "\n\nNie znaleziono studenta :(\n\n" ;

}

 

}

 

}

 

/******************************************************************************/

 

void usun_studenta (wezel *&pierwszy, wezel *&ostatni,int o)

{

wezel *buf = pierwszy;

 

if(buf == NULL)

{

cerr <<"Lista jest pusta" << endl;

return;

}

 

char szukaj[maks], bufor[maks];

cout << "Podaj nazwisko do usuniecia: ";

cin.getline(szukaj,maks);

 

int i, dlugosc = strlen(szukaj);

szukaj[0] = toupper(szukaj[0]);

 

for (i = 1; i < dlugosc; i++)

{

szukaj = tolower(szukaj);

}

 

 

 

while (buf!=NULL)

{

if(strcmp(buf->dane->nazwisko, szukaj) == 0)

{

cout << "\n\nStudent "<<buf->dane->nazwisko << " zostal usuniety z listy\n\n";

 

 

if(buf->poprzedni!=NULL)

{

buf->poprzedni->nastepny = buf->nastepny;

}

else

{

pierwszy = buf->nastepny;

}

 

if(buf->nastepny!=NULL)

{

buf->nastepny->poprzedni = buf->poprzedni;

}

else

{

ostatni = buf->poprzedni;

}

 

delete buf->dane;

delete buf;

}

 

buf = buf->nastepny;

}

}

 

/******************************************************************************/

 

void drukuj(wezel *&pierwszy, wezel *&ostatni,int o)

{

wezel *buf=pierwszy;

 

if(buf==NULL)

{

cerr << "Lista jest pusta" << endl;

return;

}

 

 

 

 

int z = 1;

 

while(buf!=NULL)

{

cout << setw(95) << setfill('*')<< endl;

cout <<"Numer wpisu :\t" << z << endl;

cout <<"Nazwisko : \t" << buf->dane->nazwisko<< endl ;

cout <<"Imie :\t\t"<< buf->dane->imie << endl;

cout <<"Nr.albumu :\t"<< buf->dane->nr_indeksu << endl<< endl;

 

buf = buf->nastepny;

z++;

}

 

// cout << endl << endl << "**************Koniec listy*******************" << endl;

 

return;

}

 

/******************************************************************************/

 

void do_pliku(wezel*&pierwszy, wezel*&ostatni,int o)

{

obecnosc *nowy_student;

 

nowy_student = new obecnosc;

 

if (nowy_student == NULL) //jeśli nie ma wolnej pamięci

{

cerr << "Nie ma pamieci na nowego studenta";return;

}

 

 

ofstream lista_txt("Lista studentow.txt");

cout << "\n\nWpisz tutaj imiona i nazwiska studentow : \n\nAle najpierw podaj ilosc studentow : ";

int rozmiar;

cin >> rozmiar;

 

cout << endl;

 

wezel *nowy;

nowy = new wezel;

 

if (nowy == NULL) //jeśli nie ma wolnej pamięci

{

cerr << "Nie ma pamieci na nowy wezel ";return;

}

 

 

nowy->dane = nowy_student;

 

for (int i = 0; i < rozmiar; i++)

{

cout << "";

cin.getline(nowy_student->nazwisko,maks);

int j =5;

 

dodaj_studenta(pierwszy, ostatni,j);

 

}

 

 

cout << endl;

 

 

}

 

/******************************************************************************/

 

void drukuj_zpliku(wezel*&pierwszy, wezel*&ostatni,int o)

{

ifstream lista_txt("Lista studentow.txt");

 

if(!lista_txt)

{

cout << "\n\nBlad otwarcia pliku";

return;

}

 

char c;

cout << "\n\n\n\nZawartosc pliku :\n******************************************\n\n";

while(lista_txt.get©)

{

 

cout.put©;

 

}

cout << "\n\n******************************************\n\n";

}

 

/*******************************************************************************

*******************************************************************************/

 

 

 

void obecnosc::przepisz(char *imie,char *nazwisko, char *nr_indeksu)

{

strcpy(this->nazwisko,nazwisko);

strcpy(this->imie,imie);

strcpy(this->nr_indeksu,nr_indeksu);

 

};

 

 

void obecnosc::wypisanie()

{

 

obecnosc a;

 

obecnosc b(a); //konstruktor kopiujacy

 

 

char nazwisko[15];

char imie[15];

char indeks[15];

 

cout<<"Podaj nazwisko studenta: ";

cin>>nazwisko;

cout<<endl;

cout<<"Podaj imie studenta: ";

cin>>imie;

cout<<"\nPodaj imie 2 studenta: ";

cin >> b.imie;

cout<<endl;

cout<<"Podaj numer indeksu studenta: ";

cin>>nr_indeksu;

cout<<endl;

 

a.przepisz(imie,nazwisko,nr_indeksu);

b.przepisz(b.imie,nazwisko,nr_indeksu);

 

a.wypisz();

b.wypisz();

 

 

};

 

void obecnosc::wypisz()

{

 

cout<<"Nazwisko : \t"<<nazwisko<<endl;

cout<<"Imie:\t\t"<<imie<<endl;

cout<<"indeks : \t"<<nr_indeksu<<endl;

cout << "***********************************" << endl;

 

};

obecnosc::~obecnosc(); //destruktor

 

 

 

 

int main()

{

obecnosc a;

void obecnosc::wypisanie();

 

char znak;

wezel *pierwszy = NULL, *ostatni = NULL, *nowy;

 

char *imie;

char *nazwisko;

char *nr_indeksu;

 

 

 

while(1)

{

cout << "******************--Program do sprawdzania obecnosci studentow--****************";

cout << endl << " MENU :" << endl;

cout << "1 - Dodaj studenta" << endl;

cout << "2 - Znajdz studenta" << endl;

cout << "3 - Drukuj liste" << endl;

cout << "4 - Usun studenta" << endl;

cout << "5 - Stworz liste studentow w formacie /""txt""/" << endl;

cout << "6 - Drukuj liste studentow z pliku" << endl;

cout << "7 - Wpisz dane studenta przy pomocy klasy" << endl;

cout << "Q - Wyjscie" << endl;

 

cout << "Wybierz opcje: ";

cin >> znak;

system("cls");

cin.ignore(255,'\n');

 

switch(znak)

{

case'1':

dodaj_studenta(pierwszy,ostatni,o);

break;

 

case'2':

znajdz_studenta(pierwszy,ostatni,o);

break;

case'3':

drukuj(pierwszy,ostatni,o);

break;

case'4':

usun_studenta(pierwszy,ostatni,o);

break;

case'5':

do_pliku(pierwszy,ostatni,o);

break;

case'6':

drukuj_zpliku(pierwszy,ostatni,o);

break;

 

case'7':

a.wypisanie();

break;

 

 

 

break;

 

case 'Q':

case 'q': return 0;

 

default:

cerr << "\t\t\tZla opcja: " << znak;

break;

}

}

 

getch();

return 0;

}

*******************************************************************

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...