#include <stdio.h> 
#include <locale.h> 
#include <stdlib.h> 
#include <ctype.h>
#include <conio.h>
#include <string.h> 
struct student{
	int number;
	char name[15];
	char surname[15];
};
struct student group = { { 0 } };
struct marks{
	int number;
	int marks[5];
};


int main()
{
int i=0;
char login1[]="skyfer",true_password[6]="1927s",login2[32],passw[6];
setlocale(LC_ALL,"Rus"); 
printf ("Введiть логiн: ");
scanf ("%31s", login2);
printf("Введiть пароль: ");
passw[i]=getch();
printf("*");
while(passw[i]!=13){
	i++;
passw[i]=getch();
printf("*");
}
passw[5]=0;

if (strcmp(login1,login2) != 0){
 printf ("\nНе правильно введено логiн чи пароль\n");
 return 0;
}

if (strcmp(true_password,passw) != 0){
 printf ("\nНе правильно введено логiн чи пароль\n"); 
 return 0;
}
else{
printf("\nВхiд в систему...\n");
system("cls");
menu();
}
return 0;
}

int menu(){
int choice;
printf("1.Групи\n");
printf("2.Оцiнки\n");
printf("4.Статистика\n");
printf("0.Вихiд з програми\n");
scanf ("%d", &choice);
    if(choice==1){
	groups();	
	}
 	if (choice==2){
	marks();
	}
 	if (choice==3){
	statistic();
	}
 	if (choice==0){
	exit (1);
	}
}


int groups(){
	int choice;
	system("cls");
	printf ("1.Додати нову групу\n");
	printf ("2.Редагувати групу\n");
	printf ("3.Видалити групу\n");
	printf ("4.Переглянути список груп\n");
	printf ("5.Повернутися в головне меню\n");
	printf ("0.Вихiд з програми\n");
	scanf ("%d", &choice);
	if (choice==1){	
	system("cls");
	add_group();
	}
	if (choice==2){	
	system("cls");
	edit_group();
	}
	if (choice==3){
	system("cls");
	delete_group();
	}
	if (choice==4){
	system("cls");
	print_list_groups();
	}
	if (choice==5){
	system("cls");
	menu();
	}
	if (choice==0){
	exit (1);
	}
}


int add_group(){
	int numbers=0,i;
	char name_groups[6], dat[5]=".dat", name_group[10];
	struct student group={0,"",""};
	FILE *fPtrG;
	FILE *fPtrN;
	printf ("Введiть назву групи: ");
	scanf ("%s",name_groups);
	fflush(stdin);
	if ((fPtrG=fopen("groups.dat", "ab")) == NULL)
		printf ("File could not be opened.\n");
	else{
	
		fwrite (&name_groups,sizeof(name_groups),1,fPtrG);
	}
	fclose (fPtrG);
	strncpy(name_group,name_groups,6);
	strcat (name_group,dat);
	printf ("Введiть кiлькiсть студентiв в групi: ");	
	scanf("%d", &numbers);
	if(numbers>0){
	struct student group[numbers];
	if ((fPtrN=fopen(name_group, "ab")) == NULL)
		printf ("File could not be opened.\n");
	else{
	for (i=1;i<=numbers;i++){
	group[i].number=i; 
	printf ("Прiзвище та Iмя студентaа №%d: \n", i);
	fscanf (stdin,"%s%s",group[i].name,group[i].surname);
	fseek( fPtrN ,sizeof(struct student) , SEEK_SET );  
	fwrite(&group[i], sizeof(struct student),1,fPtrN);
}
}
fclose (fPtrN);
}

groups();

}

int edit_group(struct student *group){
	int choice=0;
	FILE *fPtrN;
	char name_group[10],dat[5]=".dat";
	print_list_groups();
	printf ("\nОберiть необхiдну групу: \n");
	scanf ("%s",name_group);
	strcat (name_group,dat);
		if((fPtrN=fopen(name_group, "rb+")) == NULL){
		printf ("File could not be opened.\n");
		}
		else{
		printf("%-2s%-15s%-15s", "Number", "Name", "Surname");
		}	
		
		fclose (fPtrN);
	printf ("1.Змiнити iм'я студента\n");
	printf ("2.Змiнити прiзвище студента\n");
	printf ("3.Повернутися в меню групи\n");
	printf("0.Вихiд з програми\n");
	scanf ("%d", &choice);
	if (choice==3){
	system("cls");
	groups();
	}
 	if (choice==0){
	exit (1);
	}
	
}

int delete_group(){
int choice=0;
char name_group[10],dat[5]=".dat";
printf ("Введiть назву групи, яку бажаєте видалити: ");
scanf ("%s",name_group);
strcat (name_group,dat);
if(remove(name_group)) {
printf("Error delete group!");
return 0;
}
else{
	printf("Successfully delete group!\n");
}
printf("\n1.Видалити ще одну групу\n2.Повернутися в меню групи\n");
scanf ("%d", &choice);
if (choice==1){
	system("cls");
	delete_group();
	}
if (choice==2){
	system("cls");
	groups();
	}
}

int print_list_groups(){
	int choice;
{
  FILE * ptrFile = fopen( "groups.dat" , "rb" );
 
  if (ptrFile == NULL)
  {
      fputs("Ошибка файла", stderr);
      exit(1);
  }
  fseek(ptrFile , 0 , SEEK_END);                         
  long lSize = ftell(ptrFile);                            
 
 while(!feof(ptrFile)){ 

  char * buffer = (char*) malloc(sizeof(char) * lSize);
  if (buffer == NULL)
  {
      fputs("Ошибка памяти", stderr);
      exit(2);
  }
  
  size_t result = fread(buffer, 1, lSize, ptrFile);       
  if (result != lSize)
  {
      fputs("Ошибка чтения", stderr);
      exit (3);
  }
  
  puts(buffer);
   free (buffer);
}
  fclose (ptrFile);
 
}
printf("\n1.Переглянути конкретну групу\n2.Повернутися до меню груп\n3.Повернутися до головного меню\n");
	scanf ("%d", &choice);
	if (choice==1){
		specific_group();//функція за алгоритмом впринципі аналогічна до list_group, но так як і list_group не робоча)
	}
	if (choice==2){
	system("cls");
	groups();
	}
	if (choice==3){
	system("cls");
	menu();
}
}
int specific_group(struct student *group){
int choice=0;
	printf("\n1.Повернутися до меню груп\n2.Повернутися до головного меню\n");
	scanf("%s", &choice);
	if (choice==1){
	system("cls");
	groups();
	}
	if (choice==2){
	system("cls");
	menu();
}
}
int marks(){      
	int choice=0;    
	system("cls");
	printf ("1.Внести оцiнки\n");
	printf ("2.Редагувати оцiнки\n");	
	printf ("4.Повернутися в головне меню\n");
	printf("0.Вихiд з програми\n");
	scanf ("%d", &choice);
	if (choice==4){	
	system("cls");
	menu();
}
	if (choice==0){
	exit (1);
	}
}

int statistic(){
	int choice;
	system("cls");
	printf ("1.Абсолютний i якiсний показники\n");
	printf ("2.Рейтинг студентiв\n");
	printf ("3.Рейтинг груп\n");
	printf ("4.Повернутися в головне меню\n");
	printf("0.Вихiд з програми\n");
	scanf ("%d", &choice);
	if (choice==4){
	system("cls");
	menu();
	}
	if (choice==0){
	exit (1);
	}
}

