Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct {
- char *name, *date, *group;
- int fis, math, inf, phis;
- float ball;
- } users;
- users *user_struct(char *text, int *len)
- {
- int i;
- users *udata = (users *)malloc(sizeof(users) * 1);
- char *tok = strtok(text, "\n"), **strarr = (char **)malloc(sizeof(char *) * 1);
- size_t ln = 1, type = 0;
- while (tok != NULL)
- {
- if (strlen(tok) > 5)
- {
- strarr = (char **)realloc(strarr, sizeof(char *) * ln);
- memcpy((strarr[ln - 1] = (char *)malloc(strlen(tok) + 1)), tok, strlen(tok) + 1);
- }
- tok = strtok(NULL, "\n"); ln++;
- }
- for (i = 0; i < ln - 1; i++) {
- udata = (users *)realloc(udata, sizeof(users) * (i + 1));
- udata[i].name = (char *)malloc(50); udata[i].date = (char *)malloc(11);
- udata[i].group = (char *)malloc(50);
- char *stok = strtok(strarr[i], "|");
- while (stok != NULL)
- {
- if (type == 0 && strlen(stok) < 49)
- strcpy(udata[i].name, stok);
- if (type == 1 && strlen(stok) < 11)
- strcpy(udata[i].date, stok);
- if (type == 2 && strlen(stok) < 49)
- strcpy(udata[i].group, stok);
- if (type == 3 && strlen(stok) == 1)
- udata[i].fis = atoi(stok);
- if (type == 4 && strlen(stok) == 1)
- udata[i].math = atoi(stok);
- if (type == 5 && strlen(stok) == 1)
- udata[i].inf = atoi(stok);
- if (type == 6 && strlen(stok) == 1)
- udata[i].phis = atoi(stok);
- stok = strtok(NULL, "|"); type++;
- }
- udata[i].ball = (udata[i].fis + udata[i].math +
- udata[i].inf + udata[i].phis) / 4;
- type = 0;
- }
- free(strarr);
- *len = ln - 1;
- return udata;
- }
- void add_record(users *udata, int *ln)
- {
- int len = *ln;
- udata = (users *)realloc(udata, sizeof(users) * (len + 1));
- udata[len].name = (char *)malloc(50); udata[len].date = (char *)malloc(11);
- udata[len].group = (char *)malloc(50);
- printf("Enter name of student: "); scanf("%s", udata[len].name);
- printf("Enter group of student: "); scanf("%s", udata[len].group);
- printf("Enter date of student: "); scanf("%s", udata[len].date);
- printf("Enter a physics score: "); scanf("%d", &udata[len].fis);
- printf("Enter a math score: "); scanf("%d", &udata[len].math);
- printf("Enter a inf. score: "); scanf("%d", &udata[len].inf);
- printf("Enter a chemistry score: "); scanf("%d", &udata[len].phis);
- udata[len].ball = (udata[len].fis + udata[len].math +
- udata[len].inf + udata[len].phis) / 4;
- FILE *fs = fopen("users.txt", "a+");
- fprintf(fs, "%s|%s|%s|%d|%d|%d|%d|\n",
- udata[len].name, udata[len].date,
- udata[len].group, udata[len].math,
- udata[len].inf, udata[len].phis);
- fclose(fs); (*ln)++;
- }
- void view_record(users *udata, int len)
- {
- int i;
- for (i = 0; i < len; i++)
- {
- printf("Student #%d\n", i + 1);
- printf("Name: %s\n", udata[i].name);
- printf("Group: %s\n", udata[i].group);
- printf("Date: %s\n", udata[i].date);
- printf("Physics score: %d\n", udata[i].fis);
- printf("Math score: %d\n", udata[i].math);
- printf("Inf. score: %d\n", udata[i].inf);
- printf("Chemistry score: %d\n", udata[i].phis);
- printf("Result: %.2f\n\n", udata[i].ball);
- }
- getchar(); getchar();
- }
- void save_records(users *udata, int len)
- {
- int i;
- FILE *fa = fopen("users.txt", "w");
- for (i = 0; i < len; i++)
- fprintf(fa, "%s|%s|%s|%d|%d|%d|%d|\n",
- udata[i].name, udata[i].date,
- udata[i].group, udata[i].math,
- udata[i].inf, udata[i].phis);
- fclose(fa);
- }
- void edit_record(users *udata, int len)
- {
- int i;
- char name[50]; int id = -1;
- printf("Enter name of student: ");
- scanf("%s", name);
- for (i = 0; i < len; i++)
- if (strncmp(udata[i].name, name, strlen(name)))
- {
- id = i; break;
- }
- printf("Student number %d\n", id);
- if (id == -1) return;
- printf("Enter new group name: "); scanf("%s", udata[id].group);
- printf("Enter new date: "); scanf("%s", udata[id].date);
- printf("Enter new physics score: "); scanf("%d", &udata[id].fis);
- printf("Enter new math score: "); scanf("%d", &udata[id].math);
- printf("Enter new inf. score: "); scanf("%d", &udata[id].inf);
- printf("Enter new chemistry score: "); scanf("%d", &udata[id].phis);
- udata[id].ball = (udata[id].fis + udata[id].math +
- udata[id].inf + udata[id].phis) / 4;
- save_records(udata, len);
- }
- void search_record(users *udata, int len)
- {
- int i;
- for (i = 0; i < len; i++)
- if (udata[i].math >= 8 || udata[i].inf >= 8 || udata[i].phis >= 8|| udata[i].fis >= 8)
- {
- printf("Student #%d\n", i + 1);
- printf("Name: %s\n", udata[i].name);
- printf("Group: %s\n", udata[i].group);
- printf("Date: %s\n", udata[i].date);
- printf("Physics score: %d\n", udata[i].fis);
- printf("Math score: %d\n", udata[i].math);
- printf("Inf. score: %d\n", udata[i].inf);
- printf("Chemistry score: %d\n", udata[i].phis);
- printf("Result: %.2f\n\n", udata[i].ball);
- }
- getchar(); getchar();
- }
- void menu(users *udata, int len)
- {
- int id = 0;
- while (id != 5)
- {
- system("cls");
- printf(
- "==Kutuzov Matvey: Database of students==\n"
- "Full list of options:\n"
- " 1) - Add new record to database.\n"
- " 2) - View a data of students.\n"
- " 3) - Edit exist record.\n"
- " 4) - Search a student by scores.\n"
- " 5) - Exit.\n"
- "Enter a number of option: "
- ); scanf("%d", &id);
- if (id == 1)
- add_record(udata, &len);
- if (id == 2)
- view_record(udata, len);
- if (id == 3)
- edit_record(udata, len);
- if (id == 4)
- search_record(udata, len);
- if (id == 5) break;
- }
- }
- int main()
- {
- FILE *fp = fopen("users.txt", "a+");
- if (!fp) return 1;
- char *text = (char *)malloc(1), c;
- int i, len = 2, st_len = 0; text[0] = '\0';
- while ((c = fgetc(fp)) != EOF)
- if (len < 300) strncat((text = (char *)realloc(text, len++ + 1)), &c, 1);
- fclose(fp);
- users *udata = user_struct(text, &st_len);
- if (st_len == 0) return 1;
- menu(udata, st_len);
- free(text);
- for (i = 0; i < st_len; i++)
- {
- free(udata[i].name); free(udata[i].group);
- free(udata[i].date);
- }
- free(udata);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement