Advertisement
Guest User

ForMe8

a guest
Dec 15th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.87 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. // Заменить названия полей структуры
  4.  
  5. struct Student {
  6. char name[50];
  7. double group;
  8. int year;
  9. int phys, math, info, chem;
  10. double average;
  11. };
  12.  
  13. // Заменить названия прототипов функций
  14. int ShowMenu();
  15. int CreateFile(char*);
  16. int AddRecord(const char*);
  17. int EditRecord(const char*);
  18. int ViewAll(const char*, int);
  19.  
  20. using namespace std;
  21.  
  22. int main()
  23. {
  24. setlocale(LC_ALL, "Rus");
  25. char fileName[256] = ""; // Инициализируем char для хранения названия файла
  26. do {
  27. int value = ShowMenu(); // Инциализируем value с значением функции для показа меню
  28. switch (value)
  29. {
  30. case 1:
  31. CreateFile(fileName); // Вызываем функцию создания файла, которая принимает имя файла из char
  32. break;
  33. case 2:
  34. AddRecord(fileName); // Добавление данных
  35. break;
  36. case 3:
  37. EditRecord(fileName); // Изменение данных
  38. break;
  39. case 4:
  40. ViewAll(fileName, 0); // Показать всех
  41. break;
  42. case 5:
  43. ViewAll(fileName, 1); // Индивидуальное задание
  44. break;
  45. default:
  46. return 0;
  47. }
  48. } while (true);
  49. return 0;
  50. }
  51.  
  52. // Функции --------------------------------------------
  53.  
  54. int ShowMenu() // Функция для вывода меню
  55. {
  56. do {
  57. puts("====== Menu =====");
  58. puts(" 1 - Create file\n 2 - Add record\n 3 - Edit record");
  59. puts(" 4 - View all\n 5 - Processing\n\n 0 - Exit");
  60. printf(">: ");
  61. int value;
  62. scanf_s("%d", &value);
  63. if (value >= 0 && value <= 5) {
  64.  
  65. return value;
  66. }
  67. cout << "Вы ввели некорректное значение. Ознакомьтесь с таблицей" << endl;
  68. } while (true);
  69. }
  70.  
  71. void InputString(char* str, int length) // функция для записи названия файла
  72. {
  73. do {
  74. gets_s(str, length);
  75. } while (str[0] == 0);
  76. }
  77.  
  78. unsigned InputRate() // Функция для рейтинга
  79. {
  80. unsigned rate = 0;
  81. do {
  82. scanf_s("%u", &rate);
  83. } while (rate < 1 || rate > 10);
  84. return rate;
  85. }
  86.  
  87. int CreateFile(char* fileName) // Функция для создания файла
  88. {
  89. cout << "Введите название нового файла:" << endl;
  90. InputString(fileName, 255);
  91. FILE* f = fopen(fileName, "wb");
  92. if (f == NULL) {
  93. puts("ERROR: Can't create file!");
  94. return -1;
  95. }
  96. fclose(f);
  97. puts("File was created!");
  98. return 0;
  99. }
  100.  
  101. int AddRecord(const char* fileName) // Функция для добавления данных
  102. {
  103. FILE* f = fopen(fileName, "ab");
  104. if (f == NULL) {
  105. puts("ERROR: File is not found!");
  106. return -1;
  107. }
  108. Student rec;
  109. printf("Input student name: ");
  110. InputString(rec.name, 30);
  111. printf("Input year of born: ");
  112. scanf_s("%u", &rec.year);
  113. printf("Input group number: ");
  114. scanf_s("%u", &rec.group);
  115. printf("Physic rate: ");
  116. rec.phys = InputRate();
  117. printf("Mathematic rate: ");
  118. rec.math = InputRate();
  119. printf("Informatic rate: ");
  120. rec.info = InputRate();
  121. printf("Chemistry rate: ");
  122. rec.chem = InputRate();
  123. rec.average = 0.25 * (rec.phys + rec.math + rec.info + rec.chem);
  124. if (1 != fwrite(&rec, sizeof(Student), 1, f)) {
  125. puts("ERROR: Record was not saved!");
  126. fclose(f);
  127. return -1;
  128. }
  129. puts("Record was saved!");
  130. fclose(f);
  131. return 0;
  132. }
  133.  
  134. void OutRecord(FILE* r, const Student& rec, unsigned num) // Функция для вывода результата
  135. {
  136. printf("| %2u %-30s %4u %6u %2u %2u %2u %2u %3.1lf |\n",
  137. num, rec.name, rec.year, rec.group, rec.phys, rec.math, rec.info, rec.chem, rec.average);
  138. if (r != NULL) {
  139. fprintf(r, "| %2u %-30s %4u %6u %2u %2u %2u %2u %3.1lf |\n",
  140. num, rec.name, rec.year, rec.group, rec.phys, rec.math, rec.info, rec.chem, rec.average);
  141. }
  142. }
  143.  
  144. int EditRecord(const char* fileName) // Функция для изменения данных
  145. {
  146. FILE* f = fopen(fileName, "rb+");
  147. if (f == NULL) {
  148. puts("ERROR: File is not found!");
  149. return -1;
  150. }
  151. unsigned num;
  152. printf("Input record number: ");
  153. scanf_s("%u", &num);
  154. if (0 != fseek(f, (num - 1) * sizeof(Student), SEEK_SET)) {
  155. puts("ERROR: Record is not found!");
  156. fclose(f);
  157. return -1;
  158. }
  159. Student rec;
  160. if (1 != fread(&rec, sizeof(Student), 1, f)) {
  161. puts("ERROR: Can not read the record!");
  162. fclose(f);
  163. return -1;
  164. }
  165. puts("Old value: ");
  166. OutRecord(NULL, rec, num);
  167.  
  168. printf("Input student name: ");
  169. InputString(rec.name, 30);
  170. printf("Input year of born: ");
  171. scanf_s("%u", &rec.year);
  172. printf("Input group number: ");
  173. scanf_s("%u", &rec.group);
  174. printf("Physic rate: ");
  175. rec.phys = InputRate();
  176. printf("Mathematic rate: ");
  177. rec.math = InputRate();
  178. printf("Informatic rate: ");
  179. rec.info = InputRate();
  180. printf("Chemistry rate: ");
  181. rec.chem = InputRate();
  182. rec.average = 0.25 * (rec.phys + rec.math + rec.info + rec.chem);
  183. fseek(f, (num - 1) * sizeof(Student), SEEK_SET);
  184. if (1 != fwrite(&rec, sizeof(Student), 1, f)) {
  185. puts("ERROR: Record was not saved!");
  186. fclose(f);
  187. return -1;
  188. }
  189. puts("Record was saved!");
  190. fclose(f);
  191. return 0;
  192. }
  193.  
  194. void OutHeader(FILE* r)
  195. {
  196. puts("| N Student name Year Group Rates Ave |");
  197. if (r != NULL) {
  198. fputs("| N Student name Year Group Rates Ave |\n", r);
  199. }
  200. }
  201.  
  202. int ViewAll(const char* fileName, int mode)
  203. {
  204. FILE* f = fopen(fileName, "rb");
  205. if (f == NULL) {
  206. puts("ERROR: File is not found!");
  207. return -1;
  208. }
  209. Student rec;
  210. FILE* r = fopen(mode == 0 ? "result.txt" : "report.txt", "wt");
  211. OutHeader(r);
  212. unsigned num = 1;
  213. while (1 == fread(&rec, sizeof(Student), 1, f)) {
  214. if ((mode == 0) || ((rec.name[0] == 'A') && (rec.math >= 8) && (rec.math <= 9)))
  215. OutRecord(r, rec, num++);
  216. }
  217. fclose(r);
  218. fclose(f);
  219. return 0;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement