/*Program koji definira strukturu STUDENT sa članovima ime, prezime, broj indeksa, godina studija,datum izlaska na ispit, kolegij i ocjena. Podaci se smještaju u dinamički povezanu listu sortiranu po prezimenu studenta (i imenu ako je prezime isto). Program daje korisniku izbornik u kojem može odabrati: PRIJAVA ISPITA (unosi se broj indeksa i kolegij, ako takav element već postoji u listi korisnik se na to upozorava, a ako ne postoji unose se i ostali podaci i element smješta u listu)(unose se podaci osim ocjene), ODJAVA ISPITA (unosi se broj indeksa i kolegij, element pronalazi u listi i uklanja iz nje), OCJENA ISPITA (unosi se broj indeksa,
kolegij i ocjena, pronalazi element u listi, upisuje mu se ocjena, element se uklanja iz liste i svi podaci nadodaju u datoteku ispiti.txt), ISPIS SVIH PRIJAVA NA EKRAN (samo ime i prezime i kolegij) te IZLAZ IZ PROGRAMA. Nakon svake akcije korisniku se ponovo daje izbornik, sve dok ne odabere izlaz iz programa*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
char ime[15];
char prezime[35];
int index;
int godina;
char datum[50];
char kolegij[50];
int ocjena;
struct Student *next;
}*student, *glava=NULL;
void Prijava();
void Odjava();
void Ocjena();
void Ispis();
void main()
{
int opcija;
do
{
printf("\nUnesi:\n1 za prijavu ispita\n2 za odjavu ispita\n3 za ocjenu ispita\n4 za ispis svih prijava na ekran\n5 za izlaz iz programa\n\n");
scanf ("%d", &opcija);
switch (opcija)
{
case 1:
Prijava();
break;
case 2:
Odjava();
break;
case 3:
Ocjena();
break;
case 4:
Ispis();
break;
case 5:
break;
default:
printf("\nPogresan unos\n");
break;
}
}while (opcija!=5);
}
void Prijava()
{
int index;
char kolegij[50];
printf("\nBroj indexa --> "); scanf("%d", &index);
printf("Kolegij --> "); scanf("%s", &kolegij);
student=glava;
while (student!=NULL)
{
if(student->index==index && strcmp(student->kolegij,kolegij)==0)
{
printf("\nVec postoji!\n");
return;
}
student = student->next;
}
student=(Student*)malloc(sizeof(Student));
student->index=index;
strcpy(student->kolegij,kolegij);
printf("Ime --> "); scanf("%s", &student->ime);
printf("Prezime --> "); scanf("%s", &student->prezime);
printf("Godina studija -->"); scanf("%d", &student->godina);
printf("Datum izlaska -->"); scanf("%s", &student->datum);
student->next=glava;
glava=student;
}
void Odjava()
{
int index;
char kolegij[50];
printf("\nIndex --> "); scanf("%d", &index);
printf("Kolegij --> "); scanf("%s", &kolegij);
student=glava;
while (student!=NULL)
{
if(student->index==index && strcmp(student->kolegij,kolegij)==0)
{
glava=student->next;
free(student);
printf("\nOdjavljen\n");
return;
}
student=student->next;
}
printf("\nNije pronadjen\n");
}
void Ocjena()
{
int index, ocjena;
char kolegij[50];
printf("\nIndex --> "); scanf("%d", &index);
printf("Kolegij --> "); scanf("%s", &kolegij);
printf("Ocjena --> "); scanf("%d", &ocjena);
student=glava;
while (student!=NULL)
{
if(student->index==index && strcmp(student->kolegij,kolegij)==0)
{
student->ocjena=ocjena;
FILE *dat = fopen("ispiti.txt", "a+");
fprintf(dat, "Ime --> %s \n", student->ime);
fprintf(dat, "Prezime --> %s \n", student->prezime);
fprintf(dat, "Index --> %d \n", student->index);
fprintf(dat, "Kolegij --> %s \n", student->kolegij);
fprintf(dat, "Godina --> %d \n", student->godina);
fprintf(dat, "Datum polaganja --> %s \n", student->datum);
fprintf(dat, "Ocjena --> %d \n", student->ocjena);
fprintf(dat, "===================================\n");
fclose(dat);
printf("\nUpisano u datoteku ispiti.txt");
glava=student->next;
free(student);
printf("\nIzbrisan iz liste!");
return;
}
student=student->next;
}
printf("\nNije pronadjen!");
}
void Ispis()
{
student=glava;
while(student!=NULL)
{
printf("Ime --> %s\n", student->ime);
printf("Prezime --> %s\n", student->prezime);
printf("Kolegij --> %s\n", student->kolegij);
printf("==============================\n");
student=student->next;
}
}
/*nema sortiranja i prekidanje liste prilikom brisanja ocjenjenog*/