Advertisement
thinhckhcmus

qlsv_sort MSSV( Code Tuyen )

May 30th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.45 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #include<stdlib.h>
  6. struct Name {
  7. char name[10];
  8. char fullName[40];
  9. };
  10. struct sinhvien {
  11. Name name;
  12. int code;
  13. float marks;
  14. };
  15. typedef struct sinhvien SV;
  16.  
  17. void input(SV *, int *, int);
  18. Name separate(char name[]);
  19. void output(SV *, int *, int );
  20. void shareSort(int *, int *, int *, int *, int);
  21. int fpartition(SV *, int *, int, int);
  22. void fquickSort(SV *, int *, int, int);
  23. void swap(int*, int*);
  24. void input(SV *sv, int *sort, int n) {
  25. char a[100];
  26. for (int i = 0; i < n; i++) {
  27. printf("\nEnter info studen %d\n", i + 1);
  28. printf("Enter code student: ");
  29. scanf_s("%d", &sv[i].code);
  30. printf("Enter name student: ");
  31. rewind(stdin);
  32. gets_s(sv[i].name.fullName);
  33. printf("Enter mark: ");
  34. scanf_s("%f", &sv[i].marks);
  35. sort[i] = i;
  36. }
  37. }
  38.  
  39. void swap(int* a, int* b)
  40. {
  41. int t = *a;
  42. *a = *b;
  43. *b = t;
  44. }
  45.  
  46. int fpartition(SV *sv, int *sortMark, int low, int high) {
  47. float pivot = sv[high].marks;
  48. int i = (low - 1);
  49.  
  50. for (int j = low; j <= high - 1; j++) {
  51. if (sv[sortMark[j]].marks >= pivot) {
  52. i++;
  53. swap(&sortMark[i], &sortMark[j]);
  54. }
  55. }
  56. swap(&sortMark[i + 1], &sortMark[high]);
  57. return (i + 1);
  58. }
  59.  
  60. void fquickSort(SV *sv, int *sort, int low, int high) {
  61. if (low < high) {
  62. int pi = fpartition(sv, sort, low, high);
  63. fquickSort(sv, sort, low, pi - 1);
  64. fquickSort(sv, sort, pi + 1, high);
  65. }
  66. }
  67.  
  68. void upSortNumber(SV *sv, int *sortCode, int *sortMark, int n) {
  69. int tempt;
  70. for (int i = 0; i < n - 1; i++) {
  71. for (int j = i + 1; j < n; j++) {
  72. if (sv[sortCode[i]].code > sv[sortCode[j]].code) {
  73. tempt = sortCode[i];
  74. sortCode[i] = sortCode[j];
  75. sortCode[j] = tempt;
  76. }
  77. }
  78. }
  79. /*for (int i = 0; i < n - 1; i++) {
  80. for (int j = i + 1; j < n; j++) {
  81. if (sv[sortMark[i]].marks < sv[sortMark[j]].marks) {
  82. tempt = sortMark[i];
  83. sortMark[i] = sortMark[j];
  84. sortMark[j] = tempt;
  85. }
  86. }
  87. }*/
  88.  
  89. }
  90. Name separate(char name[]) { // tách tên trong chuổi
  91. char *p = strtok(name, " ");
  92. int i = 0;
  93. Name value;
  94. char str1[5][10];
  95. while (p != '\0')
  96. {
  97. strcpy(str1[i], p);
  98. i++;
  99. p = strtok('\0', " ");
  100. }
  101. strcpy(value.name, str1[i - 1]);
  102. return value;
  103. }
  104.  
  105. void upSortString(SV *sv, int *sortName, int n) {
  106. int tempt;
  107. int check;
  108. char tName[40], tName2[40];
  109. for (int i = 0; i < n - 1; i++) {
  110. for (int j = i + 1; j < n; j++) {
  111. //lay name trong chuoi fullName di so sanh
  112. strcpy(tName, sv[sortName[i]].name.fullName);
  113. strcpy(tName2, sv[sortName[j]].name.fullName);
  114. if (strcmp(separate(tName).name, separate(tName2).name) > 0) {
  115. tempt = sortName[i];
  116. sortName[i] = sortName[j];
  117. sortName[j] = tempt;
  118. }
  119. }
  120. }
  121. }
  122. void output(SV *sv, int *sort, int n) {
  123. for (int i = 0; i < n; i++) {
  124. printf("\nInfo student %d\n", i + 1);
  125. printf("Code: %d\n", sv[sort[i]].code);
  126. printf("Name: ");
  127. puts(sv[sort[i]].name.fullName);
  128. printf("Marks: %g\n", sv[sort[i]].marks);
  129. printf("_____________________________\n");
  130. }
  131. }
  132.  
  133. void shareSort(int *sort, int *sortCode, int *sortName, int *sortMark, int n) {
  134. for (int i = 0; i < n; i++) {
  135. sortCode[i] = sort[i];
  136. sortMark[i] = sort[i];
  137. sortName[i] = sort[i];
  138. }
  139. }
  140.  
  141. void writeFile(SV *sv, int *sort, int *sortCode, int *sortName, int *sortMark, int n) {
  142. FILE* fStudent;
  143. fStudent = fopen("fStudent.txt", "w");
  144. if (fStudent == NULL) {
  145. printf("Open file Fail!!!\n");
  146. exit(0);
  147. }
  148. fprintf(fStudent, "%d\n", n);
  149. for (int i = 0; i < n; i++) {
  150. fprintf(fStudent, "%d ", sort[i]);
  151. }
  152. fprintf(fStudent, "\n");
  153. for (int i = 0; i < n; i++) {
  154. fprintf(fStudent, "%d ", sortCode[i]);
  155. }
  156. fprintf(fStudent, "\n");
  157. for (int i = 0; i < n; i++) {
  158. fprintf(fStudent, "%d ", sortName[i]);
  159. }
  160. fprintf(fStudent, "\n");
  161. for (int i = 0; i < n; i++) {
  162. fprintf(fStudent, "%d ", sortMark[i]);
  163. }
  164. fprintf(fStudent, "\n");
  165.  
  166.  
  167. for (int i = 0; i < n; i++) {
  168. fprintf(fStudent, "%d\n", sv[i].code);
  169. fprintf(fStudent, "%f\n", sv[i].marks);
  170. fputs(sv[i].name.fullName, fStudent);
  171. fputs("\n", fStudent);
  172. }
  173. fclose(fStudent);
  174. }
  175. void readFile(SV *&sv, int *sort, int *sortCode, int *sortName, int *sortMark, int &n) {
  176. FILE* fStudent;
  177. FILE* num;
  178. fStudent = fopen("fStudent.txt", "r");
  179. if (fStudent == NULL) {
  180. printf("Open file Fail!!!\n");
  181. exit(0);
  182. }
  183. fscanf(fStudent, "%d", &n);
  184. for (int i = 0; i < n; i++) {
  185. fscanf(fStudent, "%d", &sort[i]);
  186. }
  187. for (int i = 0; i < n; i++) {
  188. fscanf(fStudent, "%d", &sortCode[i]);
  189. }
  190. for (int i = 0; i < n; i++) {
  191. fscanf(fStudent, "%d", &sortName[i]);
  192. }
  193. for (int i = 0; i < n; i++) {
  194. fscanf(fStudent, "%d", &sortMark[i]);
  195. }
  196.  
  197. for (int i = 0; i < n; i++) {
  198. char trash[5];
  199. fscanf(fStudent,"%d", &sv[i].code);
  200. fscanf(fStudent, "%f", &sv[i].marks);
  201. fgets(trash, 5, (FILE*)fStudent);
  202. fgets(sv[i].name.fullName, 40, (FILE*)fStudent);
  203. char *pos;
  204. if ((pos = strchr(sv[i].name.fullName, '\n')) != NULL)
  205. *pos = '\0';
  206. }
  207. fclose(fStudent);
  208. }
  209. void addStudent(SV *sv, int *sort, int *sortCode, int *sortName, int *sortMark, int &n) {
  210. printf("\nEnter student info %d\n", n + 1);
  211. printf("Enter code student: ");
  212. scanf_s("%d", &sv[n].code);
  213. printf("Enter name student: ");
  214. rewind(stdin);
  215. gets_s(sv[n].name.fullName);
  216. printf("Enter mark: ");
  217. scanf_s("%f", &sv[n].marks);
  218. sort[n] = n;
  219. n++;
  220. }
  221. void del(SV *sv, int *sort, int &n, int index) {
  222. for (int i = index; i < n; i++) {
  223. sv[sort[i]] = sv[sort[i]+1];
  224. }
  225. n--;
  226. }
  227. void delStudent(SV *sv, int *sort, int *sortCode, int *sortName, int *sortMark, int &n, int deleCode) {
  228. for (int i = 0; i < n; i++)
  229. {
  230. if ((sv[sort[i]].code) == deleCode)
  231. {
  232. del(sv, sort, n, sort[i]);
  233. i--;
  234. }
  235. }
  236. }
  237. void main() {
  238. int max, n, key;
  239. printf("Enter student space: ");
  240. scanf_s("%d", &max);
  241. SV *sv = (SV *)malloc(max * sizeof(SV));
  242. int *sort = (int *)malloc(max * sizeof(int));
  243. int *sortCode = (int *)malloc(max * sizeof(int));
  244. int *sortMark = (int *)malloc(max * sizeof(int));
  245. int *sortName = (int *)malloc(max * sizeof(int));
  246.  
  247. printf(">0. Exit\n");
  248. printf(">1. Enter Student List\n");
  249. printf(">2. Export list by code\n");
  250. printf(">3. Export list by mark\n");
  251. printf(">4. Export list by name\n");
  252. printf(">5. Save student list in file\n");
  253. printf(">6. Open file student list\n");
  254. printf(">7. Add student to the list\n");
  255. do {
  256. printf("\nChose: ");
  257. scanf_s("%d", &key);
  258. switch (key)
  259. {
  260. case 0:
  261. {
  262. exit(0);
  263. }
  264. case 1:
  265. {
  266. do {
  267. printf("Enter the number of students: ");
  268. scanf_s("%d", &n);
  269. if (n > max) {
  270. printf("Error!!!, maximum number of student: %d\n", max);
  271. }
  272. } while (n > max);
  273. input(sv, sort, n);
  274. shareSort(sort, sortCode, sortName, sortMark, n);
  275. fquickSort(sv, sortMark, 0, n - 1);
  276. upSortNumber(sv, sortCode, sortMark, n);
  277. upSortString(sv, sortName, n);
  278. printf("Done Enter\n");
  279. break;
  280. }
  281. case 2:
  282. {
  283. if (n == 0) {
  284. printf("List empty!!!!!\n");
  285. }
  286. else {
  287. output(sv, sortCode, n);
  288. }
  289. break;
  290. }
  291. case 3:
  292. {
  293. if (n == 0) {
  294. printf("List empty!!!!!\n");
  295. }
  296. else {
  297. output(sv, sortMark, n);
  298. }
  299. break;
  300. }
  301. case 4:
  302. {
  303. if (n == 0) {
  304. printf("List empty!!!!!\n");
  305. }
  306. else {
  307. output(sv, sortName, n);
  308. }
  309. break;
  310. }
  311. case 5:
  312. {
  313. if (n == 0) {
  314. printf("List empty!!!!!\n");
  315. }
  316. else {
  317. writeFile(sv, sort, sortCode, sortName, sortMark, n);
  318. }
  319. break;
  320. }
  321. case 6:
  322. {
  323. readFile(sv, sort, sortCode, sortName, sortMark, n);
  324. if (n == 0) {
  325. printf("Empty file\n");
  326. }
  327. break;
  328. }
  329. case 7:
  330. {
  331. addStudent(sv, sort, sortCode, sortName, sortMark, n);
  332. shareSort(sort, sortCode, sortName, sortMark, n);
  333. fquickSort(sv, sortMark, 0, n - 1);
  334. upSortNumber(sv, sortCode, sortMark, n);
  335. upSortString(sv, sortName, n);
  336. break;
  337. }
  338. case 8:
  339. {
  340. if (n == 0) {
  341. printf("List empty!!!!!\n");
  342. }
  343. else {
  344. int delCode;
  345. printf("Enter the student code to delete: ");
  346. scanf_s("%d", &delCode);
  347. delStudent(sv, sort, sortCode, sortName, sortMark, n, delCode);
  348. shareSort(sort, sortCode, sortName, sortMark, n);
  349. fquickSort(sv, sortMark, 0, n - 1);
  350. upSortNumber(sv, sortCode, sortMark, n);
  351. upSortString(sv, sortName, n);
  352. }
  353. break;
  354. }
  355. default:
  356. printf("Does not have this function\n");
  357. break;
  358. }
  359. } while (1);
  360. free(sv);
  361. free(sort);
  362. free(sortCode);
  363. free(sortMark);
  364. free(sortName);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement