#include #include #include #include #define MAX 30 #define MAX_HEAP_SIZE 100 #define MAX_ARR_SIZE 100 typedef struct heapnode{ int y; int m; int d; int number; int date_number; int output_date_number; char work[MAX]; }heapnode; heapnode heap[MAX_HEAP_SIZE]; heapnode search_heap[MAX_HEAP_SIZE]; heapnode arr[MAX_ARR_SIZE]; heapnode new_insertdata; heapnode today; heapnode search_day; heapnode con_temp; heapnode finish_work[MAX_HEAP_SIZE]; int i = 0; int a_i = 0; int temp_i = 0; int mod_temp = 0; int k = 0; int arr_count = 0; int f_count = 0; int y, m, d; //ºÎ¸ð i = i/2; //¿ÞÂÊ ÀÚ½Ä i = 2*i; //¿À¸¥ÂÊ ÀÚ½Ä i = 2*i+1; //È÷ÇÁ »ðÀÔ void heap_insert(heapnode *h,heapnode data) { ++i; int temp = i; while(i > 1){ if((h[i/2]).date_number < data.date_number){ //Àڽijëµå°¡ ºÎ¸ð³ëµåº¸´Ù °ªÀÌ Å¬ °æ¿ì h[i] = h[i/2]; // ºÎ¸ð³ëµå °ªÀ» Àڽijëµå·Î ¿Å°ÜÁÜ i = i/2; } else { goto o; } } o: h[i] = data; // i = temp; } //°Ë»ö ¹è¿­ È÷ÇÁ »ðÀÔ void arr_heap_insert(heapnode *h,heapnode data) { ++a_i; int temp = a_i; while(a_i > 1){ if((h[a_i/2]).date_number < data.date_number){ //Àڽijëµå°¡ ºÎ¸ð³ëµåº¸´Ù °ªÀÌ Å¬ °æ¿ì h[a_i] = h[a_i/2]; // ºÎ¸ð³ëµå °ªÀ» Àڽijëµå·Î ¿Å°ÜÁÜ a_i = a_i/2; } else { goto o; } } o: h[a_i] = data; // a_i = temp; } //ÃÖ´ëÈ÷ÇÁ »èÁ¦ heapnode heap_delete() { int parent, child; heapnode item, temp; if(!i) { printf("ÀÏÁ¤ÀÌ ºñ¾îÀÖ½À´Ï´Ù.\n"); } finish_work[f_count] = heap[1]; ++f_count; item = heap[1]; temp = heap[(i)--]; parent =1; child = 2; while(child <= i) { if((child <= i) && (heap[child].date_number < heap[child+1].date_number)) { child++; } if(temp.date_number >= heap[child].date_number) { break; } heap[parent] = heap[child]; parent = child; child *= 2; } heap[parent] = temp; return item; } //È÷ÇÁ »ðÀÔ void search_heap_insert(heapnode *h,heapnode data) { ++k; int temp = k; while(k > 1){ if((h[k/2]).number < data.number){ //Àڽijëµå°¡ ºÎ¸ð³ëµåº¸´Ù °ªÀÌ Å¬ °æ¿ì h[k] = h[k/2]; // ºÎ¸ð³ëµå °ªÀ» Àڽijëµå·Î ¿Å°ÜÁÜ k = k/2; } else { goto o; } } o: h[k] = data; k = temp; } //°Ë»ö ¹è¿­ ÃÖ´ëÈ÷ÇÁ »èÁ¦ heapnode arr_heap_delete(int temp_i) { int parent, child; heapnode item, temp; if(!temp_i) { printf("ÀÏÁ¤ÀÌ ºñ¾îÀÖ½À´Ï´Ù.\n"); } item = arr[1]; temp = arr[(temp_i)--]; parent =1; child = 2; while(child <= temp_i) { if((child <= temp_i) && (arr[child].date_number < arr[child+1].date_number)) { child++; } if(temp.date_number >= arr[child].date_number) { break; } arr[parent] = arr[child]; parent = child; child *= 2; } arr[parent] = temp; return item; } //°Ë»ö ³¯Â¥ Ãâ·Â void search_heap_output() { int search_y, search_m, search_d; int search_heap_count; printf("³â, ¿ù, ³¯Â¥¸¦ ÀÔ·ÂÇϼ¼¿ä(¿¹:2013 12 3) : "); scanf("%d %d %d", &search_y, &search_m, &search_d); getchar(); if(!i) { printf("ÀÏÁ¤ÀÌ ºñ¾îÀÖ½À´Ï´Ù.\n"); getchar(); } search_heap_count = 0; for(int j = 1; j < i+1; j++) { if(arr[j].y == search_y && arr[j].m == search_m && arr[j].d == search_d) { search_heap_insert(search_heap,arr[j]); ++search_heap_count; } } for(int j = 1; j <= search_heap_count; j++) { printf(" Áß¿äµµ : %d ÇؾßÇÒ ÀÏ : %s \n ",search_heap[j].number,search_heap[j].work); } getchar(); k = 0; } void calendar() //´Þ·Â { int last,th,year,day,date,x,z; int temp_day=0; printf("ÀÔ·Â ³âµµ¸¦ ÀÔ·ÂÇϼ¼¿ä : "); scanf("%d",&new_insertdata.y); //³âµµ¸¦ ÀԷ¹ÞÀ½ y = new_insertdata.y; printf("ÀÔ·Â ¿ùÀ» ÀÔ·ÂÇϼ¼¿ä : "); scanf("%d",&new_insertdata.m); //¿ùÀ» ÀԷ¹ÞÀ½ m = new_insertdata.m; if ((m>=1) && (m<=12)) // ÀÔ·ÂÇÑ ¿ùÀÌ 1¿ù ~ 12¿ùÀÌ ÂüÀÎÁö °ÅÁþÀÎÁö È®ÀÎ { // ¿ù(1~12)ÀÌ ¸ÂÀ» ¶§ ½ÇÇà if ((m==1) || (m==3) || (m==5) || (m==7) || (m==8) || (m==10) || (m==12)) { last=31; // 1, 3, 5, 7, 8, 10, 12¿ùÀº ¸¶Áö¸· ³¯ÀÌ 31ÀϱîÁö } else if ((m==4) || (m==6) || (m==9) || (m==11)) { last=30; // 4, 6, 9, 11¿ùÀº ¸¶Áö¸· ³¯ÀÌ 30ÀϱîÁö } if (m==2) { last=28; // 2¿ùÀº ±âº»ÀûÀ¸·Î ¸¶Áö¸· ³¯ÀÌ 28ÀϱîÁö } if ((m==2) && (y%4==0) && (y%100!=0) || (y%400==0)) { last=29; // 2¿ù À±³âÀ» È®ÀνÃÄÑ À±³âÀÏ °æ¿ì ¸¶Áö¸· ³¯ÀÌ 29ÀϱîÁö } if (m<3) { y = y-1; m = m+12; } } printf("\n ÀÏ ¿ù È­ ¼ö ¸ñ ±Ý Åä\n"); printf(" --------------------\n"); date = 1; for(x=0;x<=6;x++) { th=y/100; year=y%100; day=((21*th/4)+(5*year/4)+(26*(m+1)/10)+date-1)%7; for(z=0;z<7;z++) { if(x=1 && z < day) { printf(" "); } else { if(z >= day && date < 10) { for(int t=1; t<=i; t++){ if(y == heap[t].y && m == heap[t].m && date == heap[t].d) temp_day = date; } if(temp_day == date){ HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY ); printf(" %2d",date); SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); } else printf(" %2d",date); } else if(z >= day && date >= 10) { for(int t=1; t<=i; t++){ if(y == heap[t].y && m == heap[t].m && date == heap[t].d) temp_day = date; } if(temp_day == date){ HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY ); printf(" %2d",date); SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); } else printf(" %2d",date); } if(date < last) { date = date + 1; } else if(date >= last) { printf("\n"); return; } } } printf("\n"); } } void modify() { char temp[30]; printf("¼öÁ¤ÇÒ ÀÏÁ¤ : "); scanf("%s",temp); getchar(); for(int j = 0; j <= i; j++) { if(!strcmp(arr[j].work, temp)) { int n; printf("\n"); printf(" 1. ³¯Â¥ ¼öÁ¤ \n"); printf(" 2. Áß¿äµµ ¼öÁ¤ \n"); printf(" 3. ÇÒ ÀÏ ¼öÁ¤ \n"); printf(" 4. ÀÏÁ¤ »èÁ¦ \n"); printf(" 5. ÀÌÀü È­¸é \n"); scanf("%d",&n); getchar(); switch(n) { case 1: printf("¼öÁ¤ÇÒ ³¯Â¥¸¦ ÀÔ·ÂÇϼ¼¿ä : "); scanf("%d %d %d", &arr[j].y, &arr[j].m, &arr[j].d); printf("ÀÏÁ¤ÀÌ ¼öÁ¤µÇ¾ú½À´Ï´Ù"); getchar(); break; case 2: printf("¼öÁ¤ÇÒ Áß¿äµµ¸¦ ÀÔ·ÂÇϼ¼¿ä : "); scanf("%d", &arr[j].number); printf("ÀÏÁ¤ÀÌ ¼öÁ¤µÇ¾ú½À´Ï´Ù"); getchar(); break; case 3: printf("¼öÁ¤ÇÒ ÇÒ ÀÏÀ» ÀÔ·ÂÇϼ¼¿ä : "); scanf("%s", arr[j].work); printf("ÀÏÁ¤ÀÌ ¼öÁ¤µÇ¾ú½À´Ï´Ù"); getchar(); break; case 4: arr[j].date_number = 0; mod_temp = i; con_temp.y = arr[i].y; con_temp.m = arr[i].m; con_temp.d = arr[i].d; con_temp.number = arr[i].number; con_temp.output_date_number = arr[i].output_date_number; strcpy(con_temp.work, arr[i].work); heap[i].date_number = 0; arr[j].y = con_temp.y; arr[j].m = con_temp.m; arr[j].d = con_temp.d; arr[j].number = con_temp.number; arr[j].output_date_number = con_temp.output_date_number; strcpy(arr[j].work, con_temp.work); arr[j].output_date_number = arr[j].number - (arr[j].y - today.y)*10 - (arr[j].m - today.m)*5 - (arr[j].d - today.d)*3; arr[j].date_number = arr[j].number - (arr[j].y - today.y)*10 - (arr[j].m - today.m)*5 - (arr[j].d - today.d)*5000; i = 0; for(int l=1; l<=mod_temp; l++) { heap_insert(heap,arr[l]); } --i; printf("ÀÏÁ¤ÀÌ »èÁ¦µÇ¾ú½À´Ï´Ù."); return; break; case 5: return; break; default : printf("¹øÈ£¸¦ À߸ø ÀÔ·ÂÇß½À´Ï´Ù.\n"); } // ´Ù½Ã ÆQ Á¤·Ä arr[j].date_number = arr[j].number - (arr[j].y - today.y)*10 - (arr[j].m - today.m)*5 - (arr[j].d - today.d)*5000; int i_temp = 0; i_temp = i; i = 0; for(int l=1; l<=i_temp; l++) { heap_insert(heap,arr[l]); } } } } int main(){ int op; int q=1; printf("¿À´Ã ³¯Â¥¸¦ ÀÔ·ÂÇϼ¼¿ä(¿¹ : 2013 12 3) : "); scanf("%d %d %d",&today.y,&today.m,&today.d); printf("\n"); input_day: calendar(); printf("ÀÔ·Â ³¯Â¥¸¦ ÀÔ·ÂÇϼ¼¿ä : "); scanf("%d",&new_insertdata.d); printf("\n"); while(1){ system("cls"); printf("\n¿À´Ã ³¯Â¥ : %d³â %d¿ù %dÀÏ\n",today.y, today.m, today.d); printf("\nÀÔ·Â ³¯Â¥ : %d³â %d¿ù %dÀÏ\n\n",new_insertdata.y, new_insertdata.m, new_insertdata.d); printf("¦®¦¬¦¬¦¬¦¬¦¬¦¬MENU¦¬¦¬¦¬¦¬¦¬¦¬¦¯\n"); printf("¦­ 1. ÀÏÁ¤ Ãß°¡ ¦­\n"); printf("¦­ 2. ÀÏÁ¤ ¿Ï·á ¦­\n"); printf("¦­ 3. ÀÏÁ¤ È®ÀÎ ¦­\n"); printf("¦­ 4. ³¯Â¥ ÀÔ·Â ¦­\n"); printf("¦­ 5. ³¯Â¥º° ÀÏÁ¤ °Ë»ö ¦­\n"); printf("¦­ 6. ¿Ï·á ¸ñ·Ï ¦­\n"); printf("¦­ 7. ÀÏÁ¤ ¼öÁ¤ ¦­\n"); printf("¦­ 8. ÇÁ·Î±×·¥ Á¾·á ¦­\n"); printf("¦±¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦°\n"); printf(" ÀÔ·Â = "); scanf("%d",&op); getchar(); switch(op) { case 1: // ÀÏÁ¤ Ãß°¡ printf("Áß¿äµµ¸¦ ÀÔ·ÂÇϽÿÀ : "); scanf("%d",&new_insertdata.number); getchar(); printf("ÇÒÀÏ ÀÔ·ÂÇϽÿÀ : "); scanf("%s",new_insertdata.work); getchar(); ++arr_count; printf("ÀÏÁ¤ÀÌ µî·Ï‰ç½À´Ï´Ù\n"); new_insertdata.date_number = new_insertdata.number - (new_insertdata.y - today.y)*10 - (new_insertdata.m - today.m)*5 - (new_insertdata.d - today.d)*5000; new_insertdata.output_date_number = new_insertdata.number - (new_insertdata.y - today.y)*10 - (new_insertdata.m - today.m)*5 - (new_insertdata.d - today.d)*3; heap_insert(heap,new_insertdata); arr_heap_insert(arr,new_insertdata); q++; break; case 2: // ÀÏÁ¤ »èÁ¦ temp_i = i; if(!i) { printf("ÀÏÁ¤ÀÌ ºñ¾îÀÖ½À´Ï´Ù.\n"); } else{ heap_delete(); arr_heap_delete(temp_i); printf("ÀÏÁ¤ÀÌ »èÁ¦µÇ¾ú½À´Ï´Ù.\n"); } break; case 3: // ÀÏÁ¤ È®ÀÎ if(!i) { printf("ÀÏÁ¤ÀÌ ºñ¾îÀÖ½À´Ï´Ù.\n"); } for(int j = 1; j < i+1; j++) { printf("Áß¿äµµ : %d | ÇؾßÇÒ ÀÏ : %s | ¸¶°¨ÀÏÀÚ : %d %d %d\n ", heap[j].output_date_number,heap[j].work, heap[j].y, heap[j].m, heap[j].d); } break; case 4: // ³¯Â¥ ÀÔ·Â goto input_day; case 5: // ³¯Â¥º° ÀÏÁ¤ °Ë»ö search_heap_output(); break; case 6: // ¿Ï·á ¸ñ·Ï if(finish_work[0].y == 0) printf("¿Ï·á ¸ñ·ÏÀÌ ¾ø½À´Ï´Ù."); printf("==================¿Ï·á¸ñ·Ï================\n\n"); for(int f=0; f