// // main.c // SIManager // // Created by Eric on 15-7-6. // Copyright (c) 2015年 Eric. All rights reserved. // #include "SIMager.h" int main(int argc, const char * argv[]) { CLEAR passwd_pass(); return 0; } //PAINT MENU void start_printf (int menu_number, char *MENU[]){ for (int i = 0; i < WEIGHT_LENGTH_SQUARE; i++) printf("■"); printf("\n"); for (int i = 0; i < menu_number; i++ ){ printf("■"); for (int j = 0; j 0){ count = 0; printf("Input the password (Chance : %d) : ",c_count); char temp = '0'; while ((count < PASSED_MAX)&& (temp != '\n')){ passwd [count] = getchar(); temp = passwd [count]; count++; } passwd[--count] = '\0'; int pass = 0; char r_passwd[12]; FILE *fp = fopen("passwd.db", "r"); fscanf(fp,"%s",r_passwd); fclose(fp); if (strcmp(passwd,r_passwd) == 0) pass =1; if (pass == 1){ CLEAR menu_main(); break; } else { printf("Wrong,try again!\n"); c_count--; } } } //ADD STUDENTS INFO int add_info (int const max_count){ int *count = (int*) malloc(sizeof(int)); int w_ifnot = 0; stuc *head = NULL; *count = 1; stuc *stu = NULL, *stu_last = NULL; struct _students *stu_s; while((*count) <= max_count){ w_ifnot = 0; for (int i = 0; i < 20-(*count % 10); i++ ) printf("■"); printf("[ %d ] of [ %d ]",*count,max_count); for (int i = 0; i < 20-(*count % 10); i++ ) printf("■"); printf("\n"); char u_name[12],u_class[6],u_year[6],u_number[28] = ""; printf("NAME: "); scanf("%s",u_name); printf("CLASS: "); scanf("%s",u_class); printf("YEAR: "); scanf("%s",u_year); int int_uname = (int)u_name[0], int2_uname = (int)u_name[1]; char u1_name[4] = {'0','0','0','\0'}, u2_name[4] = {'0','0','0','\0'}; char c_rand[4]={'0','0','0','\0'}; for (int i = 2; i >= 0;i--){ u1_name[i] = (int_uname%10)+48; int_uname/=10; } for (int i = 2; i >= 0;i--){ u2_name[i] = (int2_uname%10)+48; int2_uname/=10; } srand((unsigned int)time(0)); int int_rand = (rand()%1000); for (int i = 2; i >= 0;i--){ c_rand[i] = (int_rand%10)+48; int_rand/=10; } strcat(u_number, u_year); strcat(u_number, u_class); strcat(u_number, u1_name); strcat(u_number, u2_name); strcat(u_number, c_rand); printf("NUMBER: %s\n",u_number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE+2; i++ ) printf("■"); printf("\n"); printf("YES?(y or n): "); char yon = 'y'; getchar(); scanf("%c",&yon); switch (yon) { case 'y': w_ifnot = 1; break; case '\n': w_ifnot = 1; break; default: w_ifnot = 0; break; } if (w_ifnot == 1){ stu = (stuc*) malloc(sizeof(stuc)); stu_s = &stu->stu_info; strcpy(stu_s->name,u_name); strcpy(stu_s->class,u_class); strcpy(stu_s->year,u_year); strcpy(stu_s->number,u_number); (*count)++; } if ((head == NULL) && (w_ifnot == 1)){ head = stu; stu_last = head; } else if ((head != NULL) && (w_ifnot == 1)){ stu_last->next = stu; stu_last = stu; if(*count == max_count) stu->next = NULL; } CLEAR } stu = head; FILE *fp; fp = fopen("stuinfo.db", "a+"); if (fp == NULL) { printf("ERROR IN OPEN FILE!"); return -1; } for (int i = 0; i < max_count; i++){ stu_s = &stu->stu_info; fprintf(fp, "%s\n",stu_s->name); fprintf(fp, "%s\n",stu_s->class); fprintf(fp, "%s\n",stu_s->year); fprintf(fp, "%s\n",stu_s->number); stu = stu->next; } fclose(fp); free(count); //内存泄漏问题(); // count = NULL; printf("Done,any key to continue...\n"); getchar();getchar(); return 0; } //MENU OF SEARCH int search_info_menu(){ char *SEARCH_MENU[5] = { " SEARCH", "1.NAME", "2.CLASS", "3.YEAR", "4.NUMBER", }; start_printf(5, SEARCH_MENU); int ifnot = 1; stuc *head, *s_head; while (ifnot){ char choices = choice("Choose the number (q to quit): "); switch(choices){ case '1': head = search_info_read(); s_head = search_info_name(head); search_info_printf(s_head); ifnot = 0; break; case '2': head = search_info_read(); s_head = search_info_class(head); search_info_printf(s_head); ifnot = 0; break; case '3': head = search_info_read(); s_head = search_info_year(head); search_info_printf(s_head); ifnot = 0; break; case '4': head = search_info_read(); s_head = search_info_number(head); search_info_printf(s_head); ifnot = 0; break; case 'q': ifnot = 0; break; default: printf("Wrong,please try again!\n"); break; } } return 0; } //READ FILE TO MAKE TABLE stuc *search_info_read(){ FILE *fp = fopen("stuinfo.db", "r"); if (fp == NULL){ printf("ERROR IN OPEN FILE!"); return NULL; } stuc *stu = NULL, *head = NULL, *stu_last = NULL; struct _students *stu_s = NULL; stu = (stuc*) malloc(sizeof(stuc)); stu_s = &stu->stu_info; while (fscanf(fp,"%s",stu_s->name) != EOF){ fscanf(fp, "%s",stu_s->class); fscanf(fp, "%s",stu_s->year); fscanf(fp, "%s",stu_s->number); if (head == NULL){ head = stu; stu_last = head; stu->front = NULL; } else { stu_last->next = stu; stu->front = stu_last; stu_last = stu; } stu = (stuc*) malloc(sizeof(stuc)); stu_s = &stu->stu_info; } stu->next = NULL; fclose(fp); return head; } //SERACH INFO FROM CLASS stuc *search_info_class(stuc *head){ printf("CLASS: "); char s_class[6]= {'\0','\0','\0','\0','\0','\0'}; scanf("%s",s_class); CLEAR stuc *p_head = head, *s_head = NULL,*s_stu = NULL, *s_stu_last = NULL; struct _students *p_head_s = &p_head->stu_info; struct _students *s_head_s = NULL; p_head_s = &p_head->stu_info; int ifnot = 0; while (p_head != NULL){ if (strcmp(p_head_s->class, s_class) == 0){ ifnot = 1; s_stu = (stuc*) malloc(sizeof(stuc)); s_head_s = &s_stu->stu_info; strcpy(s_head_s->name,p_head_s->name); strcpy(s_head_s->class,p_head_s->class); strcpy(s_head_s->year,p_head_s->year); strcpy(s_head_s->number,p_head_s->number); if(s_head == NULL){ s_head = s_stu; s_stu_last = s_head; s_head->front = NULL; } else { s_stu_last->next = s_stu; s_stu->front = s_stu_last; s_stu_last = s_stu; } } p_head = p_head->next; p_head_s = &p_head->stu_info; } if (ifnot){ s_stu->next = NULL; } else{ return NULL; } return s_head; } //SERACH INFO FROM NAME stuc *search_info_name(stuc *head){ printf("NAME: "); char s_name[12]; scanf("%s",s_name); CLEAR stuc *p_head = head, *s_head = NULL,*s_stu = NULL, *s_stu_last = NULL; struct _students *p_head_s = &p_head->stu_info; struct _students *s_head_s = NULL; p_head_s = &p_head->stu_info; int ifnot = 0; while (p_head != NULL){ if (strcmp(p_head_s->name, s_name) == 0){ ifnot = 1; s_stu = (stuc*) malloc(sizeof(stuc)); s_head_s = &s_stu->stu_info; strcpy(s_head_s->name,p_head_s->name); strcpy(s_head_s->class,p_head_s->class); strcpy(s_head_s->year,p_head_s->year); strcpy(s_head_s->number,p_head_s->number); if(s_head == NULL){ s_head = s_stu; s_stu_last = s_head; s_head->front = NULL; } else { s_stu_last->next = s_stu; s_stu->front = s_stu_last; s_stu_last = s_stu; } } p_head = p_head->next; p_head_s = &p_head->stu_info; } if (ifnot){ s_stu->next = NULL; } else{ return NULL; } return s_head; } //SERACH INFO FROM YEAR stuc *search_info_year(stuc *head){ printf("YEAR: "); char s_year[12]; scanf("%s",s_year); CLEAR stuc *p_head = head, *s_head = NULL,*s_stu = NULL, *s_stu_last = NULL; struct _students *p_head_s = &p_head->stu_info; struct _students *s_head_s = NULL; p_head_s = &p_head->stu_info; int ifnot = 0; while (p_head != NULL){ if (strcmp(p_head_s->year, s_year) == 0){ ifnot = 1; s_stu = (stuc*) malloc(sizeof(stuc)); s_head_s = &s_stu->stu_info; strcpy(s_head_s->name,p_head_s->name); strcpy(s_head_s->class,p_head_s->class); strcpy(s_head_s->year,p_head_s->year); strcpy(s_head_s->number,p_head_s->number); if(s_head == NULL){ s_head = s_stu; s_stu_last = s_head; s_head->front = NULL; } else { s_stu_last->next = s_stu; s_stu->front = s_stu_last; s_stu_last = s_stu; } } p_head = p_head->next; p_head_s = &p_head->stu_info; } if (ifnot){ s_stu->next = NULL; } else{ return NULL; } CLEAR return s_head; } //SERACH INFO FROM NUMBER stuc *search_info_number(stuc *head){ printf("NUMBER: "); char s_number[28]; scanf("%s",s_number); CLEAR stuc *p_head = head, *s_head = NULL,*s_stu = NULL, *s_stu_last = NULL; struct _students *p_head_s = &p_head->stu_info; struct _students *s_head_s = NULL; p_head_s = &p_head->stu_info; int ifnot = 0; while (p_head != NULL){ if (strcmp(p_head_s->number, s_number) == 0){ ifnot = 1; s_stu = (stuc*) malloc(sizeof(stuc)); s_head_s = &s_stu->stu_info; strcpy(s_head_s->name,p_head_s->name); strcpy(s_head_s->class,p_head_s->class); strcpy(s_head_s->year,p_head_s->year); strcpy(s_head_s->number,p_head_s->number); if(s_head == NULL){ s_head = s_stu; s_stu_last = s_head; s_head->front = NULL; } else { s_stu_last->next = s_stu; s_stu->front = s_stu_last; s_stu_last = s_stu; } } p_head = p_head->next; p_head_s = &p_head->stu_info; } if (ifnot){ s_stu->next = NULL; } else{ return NULL; } CLEAR return s_head; } //PRINTF THE RESULT OF THE SEARCH int search_info_printf(stuc *head){ stuc *p_head = head; int count = 0; if(head == NULL){ char *PRINTF_MENU[5] = { " Not Found", }; start_printf(1, PRINTF_MENU); printf("Done!(Any key to continue...)"); getchar();getchar(); CLEAR return 0; }; struct _students *p_head_s = &p_head->stu_info; int ifnot = 1; char input = 'e'; while (ifnot){ if ((input == 'w') && (p_head != NULL)){ CLEAR if (p_head->next != NULL){ count++; p_head = p_head->next; p_head_s = &p_head->stu_info; } for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("[ %d ]", count); for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("\n"); printf("NAME: %s\n",p_head_s->name); printf("CLASS: %s\n",p_head_s->class); printf("YEAR: %s\n",p_head_s->year); printf("NUMBER: %s\n",p_head_s->number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE-7; i++ ) printf("■"); printf("\n"); } else if ((input == 's') && (p_head != NULL)){ CLEAR if (p_head->front != NULL){ p_head = p_head->front; p_head_s = &p_head->stu_info; count--; } for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("[ %d ]", count); for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("\n"); printf("NAME: %s\n",p_head_s->name); printf("CLASS: %s\n",p_head_s->class); printf("YEAR: %s\n",p_head_s->year); printf("NUMBER: %s\n",p_head_s->number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE-7; i++ ) printf("■"); printf("\n"); } else if ((input == 'e') && (p_head != NULL)){ count++; for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("[ %d ]", count); for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("\n"); printf("NAME: %s\n",p_head_s->name); printf("CLASS: %s\n",p_head_s->class); printf("YEAR: %s\n",p_head_s->year); printf("NUMBER: %s\n",p_head_s->number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE-7; i++ ) printf("■"); printf("\n"); } else{ } if ((p_head->front == NULL) && (input != 'q')){ printf("■:This is the first element in the list.\n"); } if ((p_head->next == NULL) && (input != 'q')){ printf("■:This is the last element of the list.\n"); } getchar(); printf("INPUT: w:Page down s:Page up q:Quit\n"); printf("INPUT: "); input = getchar(); if (input == 'q'){ ifnot = 0; } } printf("Done,any key to continue...\n"); getchar();getchar(); return 0; } void passwd_set (void){ CLEAR printf("Please enter the administrator password: "); char o_passwd[12]; scanf("%s",o_passwd); FILE *fp = fopen("passwd.db","r"); char r_passwd[12]; fscanf(fp,"%s",r_passwd); fclose(fp); if(strcmp(o_passwd, r_passwd) == 0 ){ int ifnot = 1; while (ifnot) { printf("Input the new password: "); char n_passwd[12]; scanf("%s",n_passwd); printf("Input the new password again: "); char n2_passwd[12]; scanf("%s",n2_passwd); if(strcmp(n2_passwd, n_passwd) == 0){ fp = fopen("passwd.db", "w"); fprintf(fp,"%s",n_passwd); fclose(fp); ifnot = 0; printf("Done,any key to continue..."); getchar();getchar(); CLEAR } else{ printf("Not the same!(Any key to continue...)"); getchar();getchar(); CLEAR } } } else{ printf("Wrong!(Any key to continue...)"); getchar();getchar(); CLEAR } } int delete_data_menu (void){ CLEAR char *DELETE_MENU[5]={ " Delete From", "1.Name", "2.Class", "3.Year", "4.Number" }; start_printf(5, DELETE_MENU); int ifnot = 1; stuc *head, *s_head; while (ifnot){ char choices = choice("Choose the number (q to quit): "); switch(choices){ case '1': head = search_info_read(); s_head = search_info_name(head); delete_info_printf(s_head, head); ifnot = 0; break; case '2': head = search_info_read(); s_head = search_info_class(head); delete_info_printf(s_head, head); ifnot = 0; break; case '3': head = search_info_read(); s_head = search_info_year(head); delete_info_printf(s_head, head); ifnot = 0; break; case '4': head = search_info_read(); s_head = search_info_number(head); delete_info_printf(s_head, head); ifnot = 0; break; case 'q': ifnot = 0; break; default: printf("Wrong,please try again!\n"); break; } } return 0; } //PRINTF THE RESULT OF THE SEARCH int delete_info_printf(stuc *head, stuc *r_head){ if(head == NULL){ char *PRINTF_MENU[5] = { " Not Found", }; start_printf(1, PRINTF_MENU); printf("Done!(Any key to continue...)"); getchar();getchar(); CLEAR return 0; } stuc *p_head = head; int count = 1; struct _students *p_head_s = &p_head->stu_info; int ifnot = 1; char input = 'e'; while (ifnot){ int e_ifnot = 0; if ((input == 'w') && (p_head != NULL)){ CLEAR if (p_head->next != NULL){ count++; p_head = p_head->next; p_head_s = &p_head->stu_info; } for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("[ %d ]", count); for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("\n"); printf("NAME: %s\n",p_head_s->name); printf("CLASS: %s\n",p_head_s->class); printf("YEAR: %s\n",p_head_s->year); printf("NUMBER: %s\n",p_head_s->number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE-7; i++ ) printf("■"); printf("\n"); } else if ((input == 's') && (p_head != NULL)){ CLEAR if (p_head->front != NULL){ p_head = p_head->front; p_head_s = &p_head->stu_info; count--; } for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("[ %d ]", count); for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("\n"); printf("NAME: %s\n",p_head_s->name); printf("CLASS: %s\n",p_head_s->class); printf("YEAR: %s\n",p_head_s->year); printf("NUMBER: %s\n",p_head_s->number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE-7; i++ ) printf("■"); printf("\n"); } else if ((input == 'e') && (p_head != NULL)){ p_head_s = &p_head->stu_info; for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("[ %d ]", count); for (int i = 0; i < 20-(count % 10); i++ ) printf("■"); printf("\n"); printf("NAME: %s\n",p_head_s->name); printf("CLASS: %s\n",p_head_s->class); printf("YEAR: %s\n",p_head_s->year); printf("NUMBER: %s\n",p_head_s->number); for (int i = 0; i < WEIGHT_LENGTH_SQUARE-7; i++ ) printf("■"); printf("\n"); } else if (input == 'd'){ stuc *p_front, *p_next, *pr_head = r_head; struct _students *r_head_s; while(pr_head != NULL){ r_head_s = &pr_head->stu_info; if (strcmp(r_head_s->number, p_head_s->number) == 0) { p_front = pr_head->front; p_next = pr_head->next; if (p_front != NULL){ p_front->next = p_next; } if (p_next != NULL){ p_next->front = p_front; } if (p_front == NULL){ pr_head = p_next; r_head = pr_head; } pr_head = NULL; } else{ pr_head = pr_head->next; } } if (p_head != NULL){ p_front = p_head -> front; p_next = p_head -> next; if (p_front != NULL){ p_front->next = p_next; } if (p_next != NULL){ p_next->front = p_front; } if (p_next == NULL){ p_head = p_front; count--; } else if(p_front == NULL){ p_head = p_next; count++; } else if((p_front == NULL) && (p_next == NULL)){ p_head = NULL; } else{ p_head = p_head -> next; } e_ifnot = 1; } } else{ } if ((e_ifnot == 0) && (p_head != NULL)) { if ((p_head->front == NULL) && (input != 'q')){ printf("■:This is the first element in the list.\n"); } if ((p_head->next == NULL) && (input != 'q')){ printf("■:This is the last element of the list.\n"); } getchar(); printf("INPUT: w:Page down s:Page up d:delete q:Quit\n"); printf("INPUT: "); input = getchar(); } if ((e_ifnot == 1) && (p_head != NULL)){ input = 'e'; CLEAR } if (input == 'q' ){ ifnot = 0; } if(p_head == NULL){ char *PRINTF_MENU[5] = { " Not Found", }; start_printf(1, PRINTF_MENU); break; } } FILE *fp = fopen("stuinfo.db", "w"); if (fp == NULL) { printf("ERROR IN OPEN FILE!"); return -1; } stuc *prf_head = r_head; struct _students *rf_head_s; while (prf_head != NULL){ rf_head_s = &prf_head->stu_info; fprintf(fp, "%s\n", rf_head_s->name); fprintf(fp, "%s\n", rf_head_s->class); fprintf(fp, "%s\n", rf_head_s->year); fprintf(fp, "%s\n", rf_head_s->number); prf_head = prf_head->next; } printf("Done,any key to continue...\n"); fclose(fp); getchar();getchar(); return 0; } //End of program