Zywiol Opublikowano 6 Czerwca 2005 Zgłoś Opublikowano 6 Czerwca 2005 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; } ******************************************************************* Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...