-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfWork.cpp
More file actions
126 lines (120 loc) · 3.34 KB
/
fWork.cpp
File metadata and controls
126 lines (120 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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;
}