#include #include #include using namespace std; struct student { int nr_ID; char nazwisko[40]; char imie[40]; double punkty; struct student *next; struct student *prev; }; struct student* wczytaj_wartosci(FILE *plik); void wypisz_wartosci(student* head); void dodaj_wartosci(student* point); void usun_liste(student* head); struct student* dodaj_nowe_pole(); student* head; int main() { FILE *plik; char nazwa_pliku[30]; printf("Pojad nazwe pliku: "); scanf("%s", nazwa_pliku); printf("Otwieranie plikun"); if((plik=fopen(nazwa_pliku, "r")) == NULL) { printf("Plik nie zostal otwartyn"); exit(1); } printf("Otwarto plikn"); head = wczytaj_wartosci(plik); wypisz_wartosci(head); int sterowanie; printf("Chcesz dodac studenta??n0-NIEn1-TAKn"); scanf("%i", &sterowanie); while(sterowanie) { dodaj_wartosci(dodaj_nowe_pole()); printf("Chcesz usunac studenta??n0-NIEn1-TAKn"); scanf("%i", &sterowanie); } wypisz_wartosci(head); usun_liste(head); return 0; } struct student* wczytaj_wartosci(FILE *plik) { student* wsk, *head = NULL; while(!feof(plik)) { if(head==NULL) { head=(student*)malloc(sizeof(student)); head->next=NULL; head->prev=NULL; fscanf(plik, "%i %s %s %lfn", &head->nr_ID, head->nazwisko, head->imie, &head->punkty); wsk=head; } else { wsk->next=(student*)malloc(sizeof(student)); wsk->next->prev = wsk; wsk=wsk->next; wsk->next=NULL; fscanf(plik, "%i %s %s %lfn", &wsk->nr_ID, wsk->nazwisko, wsk->imie, &wsk->punkty); } } return head; } struct student* dodaj_nowe_pole() { student *wsk = (student*)malloc(sizeof(student)); printf("Podaj ID studenta: "); scanf("%i", &(wsk->nr_ID)); printf("Podaj Nazwisko studenta: "); scanf("%s", wsk->nazwisko); printf("Podaj Imie silnika: "); scanf("%s", wsk->imie); printf("Podaj Liczbe punktow studenta: "); scanf("%lf", &(wsk->punkty)); wsk->next = NULL; wsk->prev = NULL; return wsk; } void wypisz_wartosci(student* head) { student *wsk, *pom; printf("nWypisuje elementy listy:n"); wsk=head; if(head->next == NULL) { printf("t%it%st%st%.1lfn", head->nr_ID, head->nazwisko, head->imie, head->punkty); return; } else { while(wsk!=NULL) { printf("t%it%st%st%.1lfn", wsk->nr_ID, wsk->nazwisko, wsk->imie, wsk->punkty); wsk=wsk->next; if(wsk->next==NULL) { printf("t%it%st%st%.1lfn", wsk->nr_ID, wsk->nazwisko, wsk->imie, wsk->punkty); break; } } } } void usun_liste(student* head) { student *wsk=head; while(wsk->next != NULL) { wsk=wsk->next; free(wsk->prev); wsk->prev=NULL; } free(wsk); } void dodaj_wartosci(student *point) { student *wsk; if(head == NULL) { head=point; } if(head->nr_ID > point->nr_ID) { point->next = head; head->prev = point; } else { wsk=head; while(wsk->next->nr_ID <= point->nr_ID) { if(wsk->next->nr_ID == point->nr_ID) { printf("Student o podanym ID ISTNIEJEn"); free(point); return; } else { wsk = wsk->next; if(wsk->next==NULL) { wsk->next = point; point->prev = wsk; wsk=wsk->next; wsk->next=NULL; return; } } } point->next = wsk->next; wsk->next = point; point->prev = wsk; point->next->prev=point; } }