Advertisement
Guest User

kak zhe ya ebal infu

a guest
Jan 23rd, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <fstream>
  5. #include <stdio.h>
  6. using namespace std;
  7.  
  8. typedef struct stud{
  9.    char *first_name, *last_name;
  10.    int year, month, day;
  11.    double av_grade;
  12.    struct stud *next;
  13. };
  14.  
  15. void push(stud **head, char *first_name, char *last_name, int year, int month, int day, double av_grade) {
  16.     stud *tmp = (stud*) malloc(sizeof(stud));
  17.     tmp->first_name = (char*) malloc(strlen(first_name));
  18.     strcpy(tmp->first_name, first_name);
  19.     tmp->last_name = (char*) malloc(strlen(last_name));
  20.     strcpy(tmp->last_name, last_name);
  21.     tmp->year = year;
  22.     tmp->month = month;
  23.     tmp->day = day;
  24.     tmp->av_grade = av_grade;
  25.     tmp->next = *head;
  26.     *head = tmp;
  27. }
  28. void pop(stud **head) {
  29.     stud* prev = NULL;
  30.     if (head == NULL){
  31.         cout << "Node Error" << endl;
  32.         exit(1);
  33.     }
  34.     prev = *head;
  35.     *head = (*head)->next;
  36.     free(prev);
  37. }
  38. void write_to_file(stud *head, FILE *target) {
  39.     int flag = 0;
  40.     while (head != NULL) {
  41.         if (flag == 0) {
  42.             fprintf(target, "%s", head->first_name);
  43.             flag = 1;
  44.         }
  45.         else
  46.             fprintf(target, "\n%s", head->first_name);
  47.         fprintf(target, "%s", head->last_name);
  48.         fprintf(target, "%d\n", head->day);
  49.         fprintf(target, "%d\n", head->month);
  50.         fprintf(target, "%d\n", head->year);
  51.         fprintf(target, "%f", head->av_grade);
  52.         head = head->next;
  53.     }
  54. }
  55. void pr_b(stud *head) {
  56.     while (head) {
  57.         cout <<  head->first_name << " " << head->last_name << endl;
  58.         cout << "Date of Birth: " << head->day << "." << head->month << "." << head->year << endl; ;
  59.         cout << "Av_grade: " <<  head->av_grade << endl << endl;
  60.         head = head->next;
  61.     }
  62.     cout << endl;
  63. }
  64. stud* getNth(stud* head, int n) {
  65.     int c = 0;
  66.     while (c < n && head) {
  67.         head = head->next;
  68.         c++;
  69.     }
  70.     return head;
  71. }
  72.  
  73. void deleteNth(stud **head, int n) {
  74.     if (n == 0)
  75.         return pop(head);
  76.     else {
  77.         stud *prev = getNth(*head, n - 1);
  78.         stud *elm = prev->next;
  79.         prev->next = elm->next;
  80.         free(elm);
  81.     }
  82. }
  83.  
  84. int main(){
  85.     stud *head = NULL;
  86.     char  first_name[50], last_name[50], name_file[100], buf[10];
  87.     int year, month, day;
  88.     double av_grade;
  89.     int act;
  90.     FILE* source;
  91.     char k[10];
  92.    cout << "Enter way" << endl;
  93.    int n = 0;
  94.    while(n != 3){
  95.     cin >> act;
  96.      switch (act) {
  97.  
  98.             case 1: {
  99.                 cout << "Enter file name:";                    //Чтение из файла
  100.                 cin >>  name_file;
  101.                 if ((source = fopen(name_file, "rw")) == NULL)
  102.                    cout << "File error!" << endl;
  103.  
  104.                 while (fgets(first_name, 64, source) != NULL) {
  105.                     fgets(last_name, 32, source);
  106.                     fgets(buf, 10, source);
  107.                     year = atoi(buf);
  108.                     fgets(buf, 10, source);
  109.                     month = atoi(buf);
  110.                     fgets(buf, 10, source);
  111.                     day = atoi(buf);
  112.                     fgets(buf, 10, source);
  113.                     av_grade = atof(buf);
  114.  
  115.                     push(&head, first_name, last_name, year, month, day, av_grade);
  116.  
  117.                 }
  118.                 fclose(source);
  119.                 break;
  120.             }
  121.             case 2: {
  122.                  printf("New file name:\n");
  123.                 scanf("%s", name_file);
  124.                 FILE *target;
  125.                 target = fopen(name_file, "w");
  126.                 write_to_file(head, target);
  127.                 fclose(target);
  128.                 cout << "done" << endl;
  129.                 break;
  130.             }
  131.  
  132.             case 3:{
  133.                 pr_b(head);
  134.                 break;
  135.             }
  136.             case 4: {
  137.                 cout << "Surname, first name" << endl;
  138.                 cin >> last_name >> first_name;
  139.                 cout << "Enter date of birth (DD MM YYYY):" << endl;
  140.                 cin >> day >> month >> year;
  141.                 cout << "Grade point average:" << endl;
  142.                 cin >> av_grade;
  143.                 push(&head, first_name, last_name, year, month, day, av_grade);
  144.                 break;
  145.             }
  146.             case 5: {
  147.                 cout << "Base Plot File:" << endl;
  148.                 cin >> name_file;
  149.                 source = fopen(name_file, "r");
  150.  
  151.                 while (fgets(first_name, 64, source) != NULL) {
  152.                     fgets(last_name, 64, source);
  153.                     fgets(buf, 10, source);
  154.                     year = atoi(buf);
  155.                     fgets(buf, 10, source);
  156.                     month = atoi(buf);
  157.                     fgets(buf, 10, source);
  158.                     day = atoi(buf);
  159.                     fgets(buf, 10, source);
  160.                     av_grade = atof(buf);
  161.  
  162.                     push(&head, first_name, last_name, year, month, day, av_grade);
  163.                 }
  164.                 break;
  165.             }
  166.  
  167.             case 6: {
  168.                 int n = 0;
  169.                 stud* prev = head;
  170.                 cout << "Enter last name:" << endl;
  171.                 cin >> last_name;
  172.                 sprintf(last_name, "%s%s", last_name, "\n\0");
  173.                 while (prev != NULL) {
  174.                     if (!strcmp(last_name, prev->last_name)) {
  175.                         deleteNth(&head, n);
  176.                         cout << "done" << endl;
  177.                     }
  178.                 prev = prev->next;
  179.                 n++;
  180.                 }
  181.  
  182.                 break;
  183.             }
  184.             case 7: {
  185.                 cout << "First name:" << endl;
  186.                 cin >> first_name;
  187.                 cout << "Surname" << endl;
  188.                 cin >> last_name;
  189.                 sprintf(first_name, "%s%s", first_name, "\n\0");
  190.                 sprintf(last_name, "%s%s", last_name, "\n\0");
  191.                 stud* prev = head;
  192.                 while (prev != NULL) {
  193.                 if (!strcmp(first_name, prev->first_name) && !strcmp(last_name, prev->last_name)) {
  194.                     cout << "Last name:" <<  prev->first_name << endl;
  195.                     cout << "First name: %s" << prev->last_name << endl;
  196.                     cout << "Date of Birth:" <<  prev->day << prev->month << prev->year;
  197.                     cout << "Av_grade: %\n\n"<< prev->av_grade << endl;
  198.  
  199.                 prev = prev->next;
  200.                 }
  201.                 break;
  202.             }
  203.  
  204.         }
  205.          case 8: {
  206.             n = 3;
  207.             return n;
  208.          }
  209.     }
  210.    }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement