Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<conio.h>
- #include<string.h>
- #include<stdlib.h>
- struct Name {
- char name[10];
- char fullName[40];
- };
- struct sinhvien {
- Name name;
- int code;
- float marks;
- };
- typedef struct sinhvien SV;
- void input(SV *, int *, int);
- Name separate(char name[]);
- void output(SV *, int *, int );
- void shareSort(int *, int *, int *, int *, int);
- int fpartition(SV *, int *, int, int);
- void fquickSort(SV *, int *, int, int);
- void swap(int*, int*);
- void input(SV *sv, int *sort, int n) {
- char a[100];
- for (int i = 0; i < n; i++) {
- printf("\nEnter info studen %d\n", i + 1);
- printf("Enter code student: ");
- scanf_s("%d", &sv[i].code);
- printf("Enter name student: ");
- rewind(stdin);
- gets_s(sv[i].name.fullName);
- printf("Enter mark: ");
- scanf_s("%f", &sv[i].marks);
- sort[i] = i;
- }
- }
- void swap(int* a, int* b)
- {
- int t = *a;
- *a = *b;
- *b = t;
- }
- int fpartition(SV *sv, int *sortMark, int low, int high) {
- float pivot = sv[high].marks;
- int i = (low - 1);
- for (int j = low; j <= high - 1; j++) {
- if (sv[sortMark[j]].marks >= pivot) {
- i++;
- swap(&sortMark[i], &sortMark[j]);
- }
- }
- swap(&sortMark[i + 1], &sortMark[high]);
- return (i + 1);
- }
- void fquickSort(SV *sv, int *sort, int low, int high) {
- if (low < high) {
- int pi = fpartition(sv, sort, low, high);
- fquickSort(sv, sort, low, pi - 1);
- fquickSort(sv, sort, pi + 1, high);
- }
- }
- void upSortNumber(SV *sv, int *sortCode, int *sortMark, int n) {
- int tempt;
- for (int i = 0; i < n - 1; i++) {
- for (int j = i + 1; j < n; j++) {
- if (sv[sortCode[i]].code > sv[sortCode[j]].code) {
- tempt = sortCode[i];
- sortCode[i] = sortCode[j];
- sortCode[j] = tempt;
- }
- }
- }
- /*for (int i = 0; i < n - 1; i++) {
- for (int j = i + 1; j < n; j++) {
- if (sv[sortMark[i]].marks < sv[sortMark[j]].marks) {
- tempt = sortMark[i];
- sortMark[i] = sortMark[j];
- sortMark[j] = tempt;
- }
- }
- }*/
- }
- Name separate(char name[]) { // tách tên trong chuổi
- char *p = strtok(name, " ");
- int i = 0;
- Name value;
- char str1[5][10];
- while (p != '\0')
- {
- strcpy(str1[i], p);
- i++;
- p = strtok('\0', " ");
- }
- strcpy(value.name, str1[i - 1]);
- return value;
- }
- void upSortString(SV *sv, int *sortName, int n) {
- int tempt;
- int check;
- char tName[40], tName2[40];
- for (int i = 0; i < n - 1; i++) {
- for (int j = i + 1; j < n; j++) {
- //lay name trong chuoi fullName di so sanh
- strcpy(tName, sv[sortName[i]].name.fullName);
- strcpy(tName2, sv[sortName[j]].name.fullName);
- if (strcmp(separate(tName).name, separate(tName2).name) > 0) {
- tempt = sortName[i];
- sortName[i] = sortName[j];
- sortName[j] = tempt;
- }
- }
- }
- }
- void output(SV *sv, int *sort, int n) {
- for (int i = 0; i < n; i++) {
- printf("\nInfo student %d\n", i + 1);
- printf("Code: %d\n", sv[sort[i]].code);
- printf("Name: ");
- puts(sv[sort[i]].name.fullName);
- printf("Marks: %g\n", sv[sort[i]].marks);
- printf("_____________________________\n");
- }
- }
- void shareSort(int *sort, int *sortCode, int *sortName, int *sortMark, int n) {
- for (int i = 0; i < n; i++) {
- sortCode[i] = sort[i];
- sortMark[i] = sort[i];
- sortName[i] = sort[i];
- }
- }
- void writeFile(SV *sv, int *sort, int *sortCode, int *sortName, int *sortMark, int n) {
- FILE* fStudent;
- fStudent = fopen("fStudent.txt", "w");
- if (fStudent == NULL) {
- printf("Open file Fail!!!\n");
- exit(0);
- }
- fprintf(fStudent, "%d\n", n);
- for (int i = 0; i < n; i++) {
- fprintf(fStudent, "%d ", sort[i]);
- }
- fprintf(fStudent, "\n");
- for (int i = 0; i < n; i++) {
- fprintf(fStudent, "%d ", sortCode[i]);
- }
- fprintf(fStudent, "\n");
- for (int i = 0; i < n; i++) {
- fprintf(fStudent, "%d ", sortName[i]);
- }
- fprintf(fStudent, "\n");
- for (int i = 0; i < n; i++) {
- fprintf(fStudent, "%d ", sortMark[i]);
- }
- fprintf(fStudent, "\n");
- for (int i = 0; i < n; i++) {
- fprintf(fStudent, "%d\n", sv[i].code);
- fprintf(fStudent, "%f\n", sv[i].marks);
- fputs(sv[i].name.fullName, fStudent);
- fputs("\n", fStudent);
- }
- fclose(fStudent);
- }
- void readFile(SV *&sv, int *sort, int *sortCode, int *sortName, int *sortMark, int &n) {
- FILE* fStudent;
- FILE* num;
- fStudent = fopen("fStudent.txt", "r");
- if (fStudent == NULL) {
- printf("Open file Fail!!!\n");
- exit(0);
- }
- fscanf(fStudent, "%d", &n);
- for (int i = 0; i < n; i++) {
- fscanf(fStudent, "%d", &sort[i]);
- }
- for (int i = 0; i < n; i++) {
- fscanf(fStudent, "%d", &sortCode[i]);
- }
- for (int i = 0; i < n; i++) {
- fscanf(fStudent, "%d", &sortName[i]);
- }
- for (int i = 0; i < n; i++) {
- fscanf(fStudent, "%d", &sortMark[i]);
- }
- for (int i = 0; i < n; i++) {
- char trash[5];
- fscanf(fStudent,"%d", &sv[i].code);
- fscanf(fStudent, "%f", &sv[i].marks);
- fgets(trash, 5, (FILE*)fStudent);
- fgets(sv[i].name.fullName, 40, (FILE*)fStudent);
- char *pos;
- if ((pos = strchr(sv[i].name.fullName, '\n')) != NULL)
- *pos = '\0';
- }
- fclose(fStudent);
- }
- void addStudent(SV *sv, int *sort, int *sortCode, int *sortName, int *sortMark, int &n) {
- printf("\nEnter student info %d\n", n + 1);
- printf("Enter code student: ");
- scanf_s("%d", &sv[n].code);
- printf("Enter name student: ");
- rewind(stdin);
- gets_s(sv[n].name.fullName);
- printf("Enter mark: ");
- scanf_s("%f", &sv[n].marks);
- sort[n] = n;
- n++;
- }
- void del(SV *sv, int *sort, int &n, int index) {
- for (int i = index; i < n; i++) {
- sv[sort[i]] = sv[sort[i]+1];
- }
- n--;
- }
- void delStudent(SV *sv, int *sort, int *sortCode, int *sortName, int *sortMark, int &n, int deleCode) {
- for (int i = 0; i < n; i++)
- {
- if ((sv[sort[i]].code) == deleCode)
- {
- del(sv, sort, n, sort[i]);
- i--;
- }
- }
- }
- void main() {
- int max, n, key;
- printf("Enter student space: ");
- scanf_s("%d", &max);
- SV *sv = (SV *)malloc(max * sizeof(SV));
- int *sort = (int *)malloc(max * sizeof(int));
- int *sortCode = (int *)malloc(max * sizeof(int));
- int *sortMark = (int *)malloc(max * sizeof(int));
- int *sortName = (int *)malloc(max * sizeof(int));
- printf(">0. Exit\n");
- printf(">1. Enter Student List\n");
- printf(">2. Export list by code\n");
- printf(">3. Export list by mark\n");
- printf(">4. Export list by name\n");
- printf(">5. Save student list in file\n");
- printf(">6. Open file student list\n");
- printf(">7. Add student to the list\n");
- do {
- printf("\nChose: ");
- scanf_s("%d", &key);
- switch (key)
- {
- case 0:
- {
- exit(0);
- }
- case 1:
- {
- do {
- printf("Enter the number of students: ");
- scanf_s("%d", &n);
- if (n > max) {
- printf("Error!!!, maximum number of student: %d\n", max);
- }
- } while (n > max);
- input(sv, sort, n);
- shareSort(sort, sortCode, sortName, sortMark, n);
- fquickSort(sv, sortMark, 0, n - 1);
- upSortNumber(sv, sortCode, sortMark, n);
- upSortString(sv, sortName, n);
- printf("Done Enter\n");
- break;
- }
- case 2:
- {
- if (n == 0) {
- printf("List empty!!!!!\n");
- }
- else {
- output(sv, sortCode, n);
- }
- break;
- }
- case 3:
- {
- if (n == 0) {
- printf("List empty!!!!!\n");
- }
- else {
- output(sv, sortMark, n);
- }
- break;
- }
- case 4:
- {
- if (n == 0) {
- printf("List empty!!!!!\n");
- }
- else {
- output(sv, sortName, n);
- }
- break;
- }
- case 5:
- {
- if (n == 0) {
- printf("List empty!!!!!\n");
- }
- else {
- writeFile(sv, sort, sortCode, sortName, sortMark, n);
- }
- break;
- }
- case 6:
- {
- readFile(sv, sort, sortCode, sortName, sortMark, n);
- if (n == 0) {
- printf("Empty file\n");
- }
- break;
- }
- case 7:
- {
- addStudent(sv, sort, sortCode, sortName, sortMark, n);
- shareSort(sort, sortCode, sortName, sortMark, n);
- fquickSort(sv, sortMark, 0, n - 1);
- upSortNumber(sv, sortCode, sortMark, n);
- upSortString(sv, sortName, n);
- break;
- }
- case 8:
- {
- if (n == 0) {
- printf("List empty!!!!!\n");
- }
- else {
- int delCode;
- printf("Enter the student code to delete: ");
- scanf_s("%d", &delCode);
- delStudent(sv, sort, sortCode, sortName, sortMark, n, delCode);
- shareSort(sort, sortCode, sortName, sortMark, n);
- fquickSort(sv, sortMark, 0, n - 1);
- upSortNumber(sv, sortCode, sortMark, n);
- upSortString(sv, sortName, n);
- }
- break;
- }
- default:
- printf("Does not have this function\n");
- break;
- }
- } while (1);
- free(sv);
- free(sort);
- free(sortCode);
- free(sortMark);
- free(sortName);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement