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 Stud {
- char *first_name, *last_name;
- int year, month, day;
- double av_grade;
- struct Stud *next;
- } Stud;
- //Добавление узла
- void push(Stud **head, char *first_name, char *last_name, int year, int month, int day, double av_grade) {
- Stud *tmp = (Stud*) malloc(sizeof(Stud));
- tmp -> first_name = (char*) malloc(strlen(first_name));
- strcpy(tmp -> first_name, first_name);
- tmp -> last_name = (char*) malloc(strlen(last_name));
- strcpy(tmp -> last_name, last_name);
- tmp -> year = year;
- tmp -> month = month;
- tmp -> day = day;
- tmp -> av_grade = av_grade;
- tmp -> next = *head;
- *head = tmp;
- }
- //Удаление узла head
- void pop(Stud **head) {
- Stud* prev = NULL;
- if (head == NULL){
- printf("Node Error\n");
- exit(1);
- }
- prev = *head;
- *head = (*head) -> next;
- free(prev);
- }
- //Указатель на э-т списка
- Stud* getNth(Stud* head, int n) {
- int counter = 0;
- while (counter < n && head) {
- head = head -> next;
- counter++;
- }
- return head;
- }
- //УДаление э-та
- void deleteNth(Stud **head, int n) {
- if (n == 0)
- return pop(head);
- else {
- Stud *prev = getNth(*head, n - 1);
- Stud *elm = prev -> next;
- prev -> next = elm -> next;
- free(elm);
- }
- }
- //Запись в файл
- void write_to_file(Stud *head, FILE *target){
- while (head != NULL) {
- fprintf(target, "%s\r\n", head -> first_name);
- fprintf(target, "%s\r\n", head -> last_name);
- fprintf(target, "%d ", head -> year);
- fprintf(target, "%d ", head -> month);
- fprintf(target, "%d\r\n", head -> day);
- fprintf(target, "%lf\r\n", head -> av_grade);
- head = head -> next;
- }
- }
- //Вывод списка
- void printList(Stud *head) {
- while (head) {
- printf("First name: %s", head -> first_name);
- printf("Last name: %s", head -> last_name);
- printf("Date of Birth: %d %d %d\n", head-> day, head -> month, head -> year);
- printf("Av_grade: %lf\n\n", head -> av_grade);
- head = head -> next;
- }
- printf("\n");
- }
- int main() {
- Stud *head = NULL;
- Stud *prev = NULL;
- char first_name[50], last_name[50], name_file[100], buf[10];
- int year, month, day;
- double av_grade;
- FILE *source;
- printf("Entering an action number:\n");
- printf("1. Reading base from file;\n");
- printf("2. Writing a database to a file;\n");
- printf("3. Display base;\n");
- printf("4. Add base from keyboard;\n");
- printf("5. Add database from file;\n");
- printf("6. Delete information by last name\n");
- printf("7. Search for students in the database\n");
- printf("8. Finish work\n\n");
- while(1) {
- int act;
- scanf("%d", &act);
- switch (act) {
- case 1: {
- printf("Enter file name:\n");
- scanf("%s", name_file);
- if ((source = fopen(name_file, "rw")) == NULL)
- printf("File error!");
- while (fgets(first_name, 64, source) != NULL) {
- fgets(last_name, 64, source);
- fgets(buf, 10, source);
- year = atoi(buf);
- fgets(buf, 10, source);
- month = atoi(buf);
- fgets(buf, 10, source);
- day = atoi(buf);
- fgets(buf, 10, source);
- av_grade = atof(buf);
- push(&head, first_name, last_name, year, month, day, av_grade);
- }
- fclose(source);
- break;
- }
- case 2: {
- printf("New file name:\n");
- scanf("%s", name_file);
- FILE *target;
- target = fopen(name_file, "wb");
- write_to_file(head, target);
- fclose(target);
- break;
- }
- case 3: {
- printList(head);
- break;
- }
- case 4: {
- printf("First name, surname:\n");
- scanf("%s %s", first_name, last_name);
- sprintf(first_name, "%s%s", first_name, "\n\0");
- sprintf(last_name, "%s%s", last_name, "\n\0");
- printf("Enter date of birth (DD MM YYYY):\n");
- scanf("%d %d %d", &day, &month, &year);
- printf("Grade point average:\n");
- scanf("%lf", &av_grade);
- push(&head, first_name, last_name, year, month, day, av_grade);
- break;
- }
- case 5: {
- printf("Base Plot File:\n");
- scanf("%s", name_file);
- source = fopen(name_file, "r");
- while (fgets(first_name, 50, source) != NULL) {
- fgets(last_name, 50, source);
- fgets(buf, 10, source);
- year = atoi(buf);
- fgets(buf, 10, source);
- month = atoi(buf);
- fgets(buf, 10, source);
- day = atoi(buf);
- fgets(buf, 10, source);
- av_grade = atof(buf);
- push(&head, first_name, last_name, year, month, day, av_grade);
- }
- fclose(source);
- break;
- }
- case 6: {
- int n = 0;
- prev = head;
- printf("Enter last name:\n");
- scanf("%s", last_name);
- sprintf(last_name, "%s%s", last_name, "\n\0");
- while (prev != NULL) {
- if (!strcmp(last_name, prev->last_name)) {
- deleteNth(&head, n);
- break;
- }
- prev = prev->next;
- n++;
- }
- break;
- }
- case 7: {
- printf("First name, surname:\n");
- scanf("%s %s", first_name, last_name);
- sprintf(first_name, "%s%s", first_name, "\n\0");
- sprintf(last_name, "%s%s", last_name, "\n\0");
- prev = head;
- while (prev != NULL) {
- if (!strcmp(first_name, prev->first_name) && !strcmp(last_name, prev->last_name)) {
- printf("Last name: %s", prev->first_name);
- printf("First name: %s", prev->last_name);
- printf("Date of Birth: %d %d %d\n", prev->day, prev->month, prev->year);
- printf("Av_grade: %lf\n\n", prev->av_grade);
- }
- prev = prev->next;
- }
- break;
- }
- case 8:
- return 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement