Advertisement
yosikadoshi

HW1 MATAM

Apr 28th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.61 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<conio.h>
  5. #include<math.h>
  6. /*structions decleration*/
  7. typedef struct Student
  8. {
  9.     char *name;
  10.     long id;
  11.     int exam_grade;
  12.     char program;
  13.     char labs[5];
  14.     char hw_grade;
  15. }Student;
  16.  
  17. typedef struct University
  18. {
  19.     Student *arr;
  20.     int amount;
  21. }University;
  22.  
  23. /*functions decleration*/
  24. void Error_Msg(char* str);
  25. void input_university(FILE *input, University* un);
  26. void output_university(FILE *output, University* un);
  27. void hw_grades(University* un);
  28. void final_grade(FILE *output, University* un);
  29. void uni_stats(FILE *output, University* un);
  30. void above_avg(FILE *output, University* un);
  31.  
  32. void main()
  33. {
  34.     University Braude;
  35.     FILE *input, *output;
  36.     int option, i;
  37.  
  38.     Braude.arr = (Student*)malloc(sizeof(Student));
  39.  
  40.     if (Braude.arr == NULL)
  41.         Error_Msg("Allocation failed");
  42.     /* initializing "input" to point to the txt file we created, as well as checking for faliure*/
  43.     if (!(input = fopen("input.txt", "r")))
  44.         Error_Msg("Error searching for file");
  45.  
  46.     printf("Enter option (1-6), You must start with option 1: ");
  47.     scanf("%d", &option);
  48.     while (option != 1)
  49.     {
  50.         printf("You must start with option 1, try again: ");
  51.         scanf("%d", &option);
  52.     }  
  53.     while (option!=6)
  54.     {
  55.         /* Creating a new empty txt file called "output" /writing over the last one*/
  56.         if (!(output = fopen("output.txt", "w")))
  57.             Error_Msg("Error! unable to create file");
  58.         switch (option)
  59.         {
  60.         case 1:
  61.             input_university(input, &Braude);
  62.             hw_grades(&Braude);
  63.             break;
  64.         case 2:
  65.             output_university(output, &Braude);
  66.             break;
  67.         case 3:
  68.             final_grade(output, &Braude);
  69.             break;
  70.         case 4:
  71.             uni_stats(output, &Braude);
  72.             break;
  73.         case 5:;
  74.             above_avg(output, &Braude);
  75.             break;
  76.         default:
  77.             printf("Error, Wrong input\n ");
  78.         }
  79.         fclose(output);
  80.         printf("What would you like to do next? (2-6): ");
  81.         scanf("%d", &option);
  82.     }
  83.     if (!(output = fopen("output.txt", "w")))
  84.         Error_Msg("Error! unable to create file");
  85.  
  86.     fprintf(output, "%s", "End Of Program");
  87.     printf("\nGood Bye!\n");
  88.     /*Closing files*/
  89.     fclose(output);
  90.     fclose(input);
  91.    
  92.     for (i = 0; i < Braude.amount; i++)
  93.         free(Braude.arr[i].name);
  94.     free(Braude.arr);
  95.    
  96.     getch();
  97. }
  98.  
  99. void Error_Msg(char* str)
  100. {
  101.     printf("\n%s", str);
  102.     exit(1);
  103. }
  104.  
  105. void input_university(FILE *input, University* un)
  106. {
  107.     int i = 0;
  108.     char tmp_name[99];
  109.     char tmp_labs[6];
  110.     while (fscanf(input, "%s %ld %d %s %c", tmp_name, &un->arr[i].id, &un->arr[i].exam_grade, tmp_labs, &un->arr[i].program) != EOF)
  111.     {
  112.         un->arr[i].name = (char*)malloc((strlen(tmp_name) + 1)*sizeof(char));
  113.         if (un->arr[i].name == NULL)
  114.             Error_Msg("Allocation failed");
  115.         strcpy(un->arr[i].name, tmp_name);
  116.         strcpy(un->arr[i].labs, tmp_labs);
  117.         i++;
  118.         un->arr = (Student*)realloc(un->arr, (i+1)*sizeof(Student));
  119.         if (un->arr == NULL)
  120.             Error_Msg("Allocation failed");
  121.     }
  122.     un->amount = i;
  123. }
  124.  
  125. void hw_grades(University* un)
  126. {
  127.     int i,j;
  128.     for (i = 0; i < un->amount; i++)
  129.     {
  130.         int cnt = 0;
  131.         for (j = 0; j < 5; j++)
  132.             if (un->arr[i].labs[j] == '1')
  133.                 cnt++;
  134.         if (cnt>2)
  135.             un->arr[i].hw_grade = '1';
  136.         else
  137.             un->arr[i].hw_grade = '0';
  138.     }
  139.  
  140. }
  141.  
  142. void output_university(FILE *output, University* un)
  143. {
  144.     int i;
  145.     for (i = 0; i < un->amount; i++)
  146.     {
  147.         fprintf(output,"Student %d: %s ", i + 1, un->arr[i].name);
  148.         fprintf(output, "%ld %d ", un->arr[i].id, un->arr[i].exam_grade);
  149.         fprintf(output, "%c %c\n", un->arr[i].hw_grade, un->arr[i].program);
  150.     }
  151. }
  152.  
  153. void final_grade(FILE *output, University* un)
  154. {
  155.     int i;
  156.     fprintf(output, "BEFORE:\n");
  157.     output_university(output, un);
  158.     fprintf(output, "\nATFER:\n");
  159.     for (i = 0; i < un->amount; i++)
  160.     {
  161.         if (un->arr[i].exam_grade>54)
  162.         if (un->arr[i].hw_grade == '1')
  163.         if (un->arr[i].program == 'Y')
  164.             un->arr[i].exam_grade = (float)un->arr[i].exam_grade*0.8 + 20;
  165.         else
  166.             un->arr[i].exam_grade = (float)un->arr[i].exam_grade*0.9 + 10;
  167.     }
  168.     output_university(output, un);
  169. }
  170.  
  171. void uni_stats(FILE *output, University* un)
  172. {
  173.     float avg=0,sd=0;
  174.     int i, min=100, max=0,old=0,new=0;
  175.  
  176.     /*Average calculation*/
  177.     for (i = 0; i < un->amount; i++)
  178.         avg += un->arr[i].exam_grade;
  179.     avg /= un->amount;
  180.  
  181.     /*Standard Deviation, Range, program calculation*/
  182.     for (i = 0; i < un->amount; i++)
  183.     {
  184.         sd += pow(((double)un->arr[i].exam_grade - avg), 2);
  185.         if (un->arr[i].exam_grade>max)
  186.             max = un->arr[i].exam_grade;
  187.         if (un->arr[i].exam_grade < min)
  188.             min = un->arr[i].exam_grade;
  189.         if (un->arr[i].program == 'Y')
  190.             new++;
  191.         else
  192.             old++;
  193.     }
  194.     sd /= un->amount;
  195.     sd = sqrt((double)sd);
  196.  
  197.     fprintf(output, "Average: %g\n", avg);
  198.     fprintf(output, "Standard Deviation: %g\n", sd);
  199.     fprintf(output, "Student amount: %d\n", un->amount);
  200.     fprintf(output, "Range: %d - %d\n", max,min);
  201.     fprintf(output, "New program: %d\n", new);
  202.     fprintf(output, "Old program: %d", old);
  203. }
  204.  
  205. void above_avg(FILE *output, University* un)
  206. {
  207.     char prog;
  208.     int i;
  209.     float avg=0;
  210.     /*Average calculation*/
  211.     for (i = 0; i < un->amount; i++)
  212.         avg += un->arr[i].exam_grade;
  213.     avg /= un->amount;
  214.     /*Program Choise*/
  215.     printf("Which program would you like to view? (Y/N): ");
  216.     flushall();
  217.     scanf("%c", &prog);
  218.     /*Input Check*/
  219.     while (prog != 'Y' &&prog != 'N')
  220.     {
  221.         printf("Error, please enter \'Y\' OR \'N\':");
  222.         flushall();
  223.         scanf("%c", &prog);
  224.     }
  225.     for (i = 0; i < un->amount; i++)
  226.     {
  227.         if (un->arr[i].program == prog)
  228.         {
  229.             if (un->arr[i].exam_grade>avg)
  230.             {
  231.                 fprintf(output, "Student %d: %s ", i + 1, un->arr[i].name);
  232.                 fprintf(output, "%ld %d ", un->arr[i].id, un->arr[i].exam_grade);
  233.                 fprintf(output, "%c %c\n", un->arr[i].hw_grade, un->arr[i].program);
  234.             }
  235.         }
  236.     }
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement