See More

void saveRezult (FILE *f, GAME *head) { // ñîõðàíèå ðåçóëüòàòîâ èãðû GAME *bad; if (head) { for (GAME *cur = head; cur; ) { // çàïèñü â ôàéë ïîêà åñòü ïîêà åñòü ñëåä ýëåìåíò â ñïèñêå fwrite (cur, sizeof(GAME), 1, f); bad = cur; cur = cur->next; free(bad); // óäàëÿåì ýëåìåíò èç ïàìÿòè } } } void saveUser (USER* user) { // ñîõðàíåíèå ñòðóêòóðû ïîëüçîâàòåëÿ â ôàéë char str[strlen(user->login) + 19]; strcpy (str, "./users/"); strcat(str, user->login); strcat (str, ".bin"); // ñîáèðàåì íóæíûé ïóòü äëÿ ôàéëà FILE *f = fopen (str, "wb"); fwrite (user, sizeof(USER), 1, f); // çàïèñûâàåì â ôàéë ñòðóêòóðó ïîëüçîâàòåëÿ saveRezult (f, user->rez); // çàïèñûâàåì èñòîðèþ òåñòîâ ïîëüçîâàòåëÿ free(user); // óäàëÿåì ýëåìåíò èç ïàìÿòè fclose(f); // çàêðûâàåì ôàéë } GAME* uploadRezult (FILE *f) { // çàãðóæàåì èíôîðìàöèþ ïîëüçîâàòåëñÿ èç ôàéëà GAME *cur = (GAME*)malloc(sizeof(GAME)); fread (cur, sizeof(GAME), 1, f); if (!feof(f)) { // åñëè ïîïûòêà ñ÷èòûâàíèÿ óäàëàñü GAME *head = cur; while (1) { GAME *next = (GAME*)malloc(sizeof(GAME)); fread(next, sizeof(GAME), 1, f); if (feof(f)) { // åñëè óæå âûøëè çà ïðåäåëû free (next); break; } cur->next = next; // âñòàâëÿåì ýëåìåíò â íàø ñïèñîê cur = next; } cur->next = NULL; return head; } else { free(cur); return NULL; } } void printFile (FILE *ft) { // âûâîäèò òåêñò èç ôàéëà system("cls"); if (!ft) // åñëè ôàéë íå ïåðåäàí printf ("Òðåáóåìàÿ èíôîðìàöèÿ îòñóòñòâóåò"); else { char str[100]; while (fgets (str, 100, ft)) // fgets âîçâðàùàåò íîëü, åñëè ó íåãî íå ïîëó÷èëîñü íè÷åãî ñ÷èòàòü printf ("%s", str); } printf ("\n\n"); system ("pause"); } bool rightFname (char *name) { // ïðîâåðêà íà êîððåêòíîñòü èìåíè ôàéëà for (int i = 0; name[i]; i++) { if (name[i] == ' ' || name[i] == '/' || name[i] == ':' || name[i] == '*' || name[i] == '?' || name[i] == '"' || name[i] == '<' || name[i] == '>' || name[i] == '|' || name[i] == '+' || name[i] == '!' || name[i] == '.' || name[i] == '@' || name[i] == '\\') return 1; } return 0; } USER* registration () { system ("cls"); USER *user = (USER*)malloc(sizeof(USER)); printf ("Ââåäèòå ëîãèí: "); gets(user->login); printf ("Ââåäèòå ïàðîëü: "); gets(user->password); if (rightFname(user->login)) { // åñëè íåêêîðåêòíûé ëîãèí printf ("\nÍåïðàâèëüíûé ëîãèí\n\n\n"); system ("pause"); free(user); return NULL; } char str[strlen(user->login) + 19]; strcpy (str, "./users/"); strcat(str, user->login); strcat (str, ".bin"); // ñîáèðàåì ïóòü ê ôàéëó FILE *f = fopen (str, "rb"); if (f) { // åñëè ôàéë îòêðûëñÿ printf ("\nÍèê %s óæå çàíÿò\n\n\n", user->login); system ("pause"); free(user); fclose(f); return NULL; } user->rez = NULL; return user; } USER* autorisation () { system ("cls"); char login[50], password[50]; USER *user = (USER*)malloc(sizeof(USER)); printf ("Ââåäèòå ëîãèí: "); gets (login); printf ("Âåäèòå ïàðîëü: "); gets (password); char str[strlen(login) + 19]; strcpy (str, "./users/"); strcat(str, login); strcat (str, ".bin"); FILE *f = fopen (str, "rb"); if (f) { // åñëè ôàéë îòêðûëñÿ fread (user, sizeof(USER), 1, f); if (!strcmp(user->password, password)) { // ïðîâåðÿåì ïàðîëü íà ñîâïàäåíèå user->rez = uploadRezult (f); return user; } fclose (f); } printf ("\nÒàêîé êîìáèíàöèè ëîãèíà è ïàðîëÿ íåò\n\n\n"); system ("pause"); return NULL; }