From d341d17f1260d2035f13b113ff456c5b580903fa Mon Sep 17 00:00:00 2001 From: JZYFC Date: Thu, 23 Dec 2021 17:21:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E5=90=88=E5=90=84=E4=B8=AA=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 9 +++- gui/AddWnd.c | 7 ++- gui/AddWnd.h | 2 +- gui/WndUtil.c | 108 ++++++++++++++++++++++++++++++++----------- inout/ddlinout.c | 14 +++++- inout/ddlinout.h | 3 +- note/text.c | 4 +- note_by_WDC/search.c | 6 ++- note_by_jzy/menu.c | 20 ++++++-- note_by_ps/addnew.c | 37 ++++++--------- note_by_ps/addnew.h | 2 +- zm/modify.c | 9 ++-- 12 files changed, 147 insertions(+), 74 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed3277f..38dbf5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,10 @@ add_library(ZMLib "zm/delete.c" "zm/modify.c" zm/del_and_mod.h) add_library(PSLib "note_by_ps/addnew.h" "note_by_ps/printall.h" "note_by_ps/printall.c" "note_by_ps/addnew.c" "note_by_ps/test.c") add_library(WDCLib note_by_WDC/search.h note_by_WDC/search.c) +add_library(HYLLib note/note.c + note/note.h + note/note_add.c + note/note_out.c) add_executable(TeamProject "console/ConsoleSettings.c" "console/ConsoleSettings.h" @@ -29,7 +33,8 @@ add_executable(TeamProject note/note.h) # hylTest -add_executable(hylTest note/note.h note/note.c note/note_add.c note/note_out.c) +add_executable(note note/text.c) +target_link_libraries(note HYLLib) # jzyTest add_executable(jzyTest note_by_jzy/menu.c note_by_jzy/menu.h main.c) @@ -43,4 +48,4 @@ target_link_libraries(jzyTest PSLib) add_executable(psTest note_by_ps/addnew.c note_by_ps/test.c linked_list/struct_def.h inout/ddlinout.c inout/ddlinout.h note_by_ps/addnew.h note_by_ps/printall.h note_by_ps/printall.c console/ConsoleSettings.c console/ConsoleSettings.h) # wdc_test -add_executable(wdcTest note_by_WDC/search.c note_by_WDC/test.c note_by_WDC/search.h note_by_ps/addnew.c note_by_ps/addnew.h inout/ddlinout.c inout/ddlinout.h console/ConsoleSettings.c console/ConsoleSettings.h) \ No newline at end of file +add_executable(wdcTest note_by_WDC/search.c note_by_WDC/test.c note_by_WDC/search.h note_by_ps/addnew.c note_by_ps/addnew.h inout/ddlinout.c inout/ddlinout.h console/ConsoleSettings.c console/ConsoleSettings.h) diff --git a/gui/AddWnd.c b/gui/AddWnd.c index 62d2d79..e08f0d7 100644 --- a/gui/AddWnd.c +++ b/gui/AddWnd.c @@ -17,6 +17,7 @@ day_data data; bool dataUsable = false; bool isModify = false; +list_head currentHead; // TODO: tab切换 //WNDPROC prevEditProc; @@ -176,6 +177,7 @@ LRESULT CALLBACK AddProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { EnumChildWindows(hWnd, EnumChildWndSetFont, (LPARAM) font); + EnableWindow(editBoxes[11], true); if (isModify) { WCHAR buf[5]; int *ptr = &(data.start_date.year); @@ -187,6 +189,7 @@ LRESULT CALLBACK AddProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { SetWindowText(editBoxes[10], data.todo); swprintf(buf, 5, L"%d", data.number); SetWindowText(editBoxes[11], buf); + EnableWindow(editBoxes[11], false); } break; case WM_PAINT: @@ -244,6 +247,7 @@ LRESULT CALLBACK AddProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { swscanf(buf, L"%d", &(data.number)); if (GetWindowTextLength(editBoxes[10]) >= TODO_LENGTH) goto input_error; + if (!isModify && verify_id(currentHead, data) == false) goto input_error; if (verify_time(data.start_date, data.due_date) == false) goto date_error; GetWindowText(editBoxes[10], longBuf, TODO_LENGTH + 1); @@ -301,8 +305,9 @@ LRESULT CALLBACK AddProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { } -void open_add_window(HWND hWnd, bool is_modify) { +void open_add_window(HWND hWnd, bool is_modify, list_head head) { + currentHead = head; isModify = is_modify; EnableWindow(hWnd, false); diff --git a/gui/AddWnd.h b/gui/AddWnd.h index 59b11c6..4744e4c 100644 --- a/gui/AddWnd.h +++ b/gui/AddWnd.h @@ -11,7 +11,7 @@ #include LRESULT CALLBACK AddProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); -void open_add_window(HWND hWnd, bool is_modify); +void open_add_window(HWND hWnd, bool is_modify, list_head head); bool get_data(day_data *mDataPtr); bool put_data(day_data mData); diff --git a/gui/WndUtil.c b/gui/WndUtil.c index 1fc6896..22de7f4 100644 --- a/gui/WndUtil.c +++ b/gui/WndUtil.c @@ -6,6 +6,8 @@ #include "AddWnd.h" #include "FontUtil.h" #include "NoteWnd.h" +#include "../note_by_ps/addnew.h" +#include "../zm/del_and_mod.h" #ifdef _UNICODE #if defined _M_IX86 @@ -47,6 +49,7 @@ void callRePaint(HWND hWnd, RECT *disp, TEXTMETRIC text_metric); static list_head weekHead; static list_head dayHead; +static bool is_update = false; // TODO: TESTDATA day_data current_data = { @@ -81,24 +84,26 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) list_head current; static int currentListBox; + WCHAR initBuf[100]; + switch (msg) { case WM_CREATE: font = (HFONT) GetStockObject(DEFAULT_GUI_FONT); - // Add button - HWND hWndTestBtn = CreateWindowEx( - WS_EX_LEFT, - L"Button", - L"Test", - WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 24, - 281, - 144, - 24, - hWnd, - (HMENU) ID_TEST_BTN, // 按钮ID - (HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE), - NULL - ); + // Add buttons +// HWND hWndTestBtn = CreateWindowEx( +// WS_EX_LEFT, +// L"Button", +// L"Test", +// WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, +// 24, +// 281, +// 144, +// 24, +// hWnd, +// (HMENU) ID_TEST_BTN, // 按钮ID +// (HINSTANCE) GetWindowLongPtr(hWnd, GWLP_HINSTANCE), +// NULL +// ); HWND hWndAddWeekBtn = CreateWindowEx( WS_EX_LEFT, @@ -190,9 +195,9 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) L"Button", L"打开笔记", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 188, + 24, 281, - 64, + 144, 24, hWnd, (HMENU) ID_NOTE_BTN, @@ -244,7 +249,6 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) currentListBox = 0; current = weekHead->next; - WCHAR initBuf[100]; while (current != NULL) { swprintf(initBuf, 99, L"%s", current->data.todo); int pos = (int) SendMessage(week_edit, LB_ADDSTRING, 0, (LPARAM) initBuf); @@ -288,6 +292,8 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) Rectangle(hdc, sign.left, sign.top, sign.right, sign.bottom); sign.left += 10; DrawText(hdc, L"个性签名", -1, &sign, DT_LEFT | DT_VCENTER); + sign.top += text_metric.tmHeight + 6; + sign.bottom += text_metric.tmHeight + 6; // 信息显示区 disp.left = 273; @@ -331,7 +337,23 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) EndPaint(hWnd, &ps); - + if (is_update) { + SendMessage(week_edit, LB_RESETCONTENT, 0, 0); + SendMessage(day_edit, LB_RESETCONTENT, 0, 0); + current = weekHead->next; + while (current != NULL) { + swprintf(initBuf, 99, L"%s", current->data.todo); + int pos = (int) SendMessage(week_edit, LB_ADDSTRING, 0, (LPARAM) initBuf); + current = current->next; + } + current = dayHead->next; + while (current != NULL) { + swprintf(initBuf, 99, L"%s", current->data.todo); + int pos = (int) SendMessage(day_edit, LB_ADDSTRING, 0, (LPARAM) initBuf); + current = current->next; + } + is_update = false; + } return 0; case WM_COMMAND: switch (LOWORD(wParam)) { @@ -345,31 +367,59 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) MessageBox(hWnd, wstr, L"Button clicked", MB_OK); break; case ID_ADD_WEEK_BTN: - case ID_ADD_DAY_BTN: - // 添加 - open_add_window(hWnd, false); + // 添加周计划 + open_add_window(hWnd, false, weekHead); get_data(¤t_data); + addnew(weekHead, current_data); + is_update = true; + callRePaint(hWnd, &disp, text_metric); + break; + case ID_ADD_DAY_BTN: + // 添加日计划 + open_add_window(hWnd, false, dayHead); + get_data(¤t_data); + addnew(dayHead, current_data); + is_update = true; callRePaint(hWnd, &disp, text_metric); break; case ID_MODIFY_WEEK_BTN: + put_data(current_data); + open_add_window(hWnd, true, weekHead); + get_data(¤t_data); + modifyNode(weekHead, current_data); + is_update = true; + callRePaint(hWnd, &disp, text_metric); + break; case ID_MODIFY_DAY_BTN: // 修改 put_data(current_data); - open_add_window(hWnd, true); + open_add_window(hWnd, true, dayHead); get_data(¤t_data); + modifyNode(dayHead, current_data); + is_update = true; callRePaint(hWnd, &disp, text_metric); break; case ID_DELETE_WEEK_BTN: - // TODO: 删除消息框 + deleteNode(weekHead, current_data); + is_update = true; + callRePaint(hWnd, &disp, text_metric); break; case ID_DELETE_DAY_BTN: + deleteNode(dayHead, current_data); + is_update = true; + callRePaint(hWnd, &disp, text_metric); break; - case ID_NOTE_BTN: - open_note_window(hWnd); + case ID_NOTE_BTN:; +// open_note_window(hWnd); + FILE *file = NULL; + file = fopen("note.exe", "r"); + if (file == NULL) + MessageBox(hWnd, L"笔记模块不存在", L"错误", MB_OK); + else system("start cmd /k note.exe"); break; case ID_WEEK_LB: switch (HIWORD(wParam)) { - case LBN_SELCHANGE: + case LBN_SELCHANGE:; int i = (int) SendMessage(week_edit, LB_GETCURSEL, 0, 0); if (i < 0) return 0; current = weekHead->next; @@ -378,13 +428,14 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } current_data = current->data; currentListBox = 0; + is_update = false; callRePaint(hWnd, &disp, text_metric); break; } break; case ID_DAY_LB: switch (HIWORD(wParam)) { - case LBN_SELCHANGE: + case LBN_SELCHANGE:; int i = (int) SendMessage(day_edit, LB_GETCURSEL, 0, 0); if (i < 0) return 0; current = dayHead->next; @@ -393,6 +444,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } current_data = current->data; currentListBox = 1; + is_update = false; callRePaint(hWnd, &disp, text_metric); break; } diff --git a/inout/ddlinout.c b/inout/ddlinout.c index 52f3fed..b8746c6 100644 --- a/inout/ddlinout.c +++ b/inout/ddlinout.c @@ -11,7 +11,7 @@ date read_date(); -day_data read_info(void) { +day_data read_info(list_head head, bool is_add) { wchar_t tmp; day_data data; int read_num; @@ -27,6 +27,9 @@ day_data read_info(void) { restore_prev_color(); clear_input_stream(); goto reInputID; + } else if (is_add && !verify_id(head, data)) { + wprintf(L"id重复,请重新输入\n"); + goto reInputID; } reInputDate: wprintf(L"请输入开始时间:\n"); @@ -72,6 +75,15 @@ void clear_input_stream(void) { while (wc != WEOF && wc != L'\n') wc = getwchar(); } +bool verify_id(list_head head, day_data data) { + head = head->next; + while (head != NULL) { + if (data.number == head->data.number) return false; + head = head->next; + } + return true; +} + bool verify_time(date start, date end) { if (start.year < end.year) { return true; diff --git a/inout/ddlinout.h b/inout/ddlinout.h index 5680f04..2a8fd50 100644 --- a/inout/ddlinout.h +++ b/inout/ddlinout.h @@ -12,10 +12,11 @@ #include #include -day_data read_info(void); +day_data read_info(list_head head, bool is_add); void clear_input_stream(void); date read_date(); bool verify_time(date start, date end); +bool verify_id(list_head head, day_data data); #endif //TEAMPROJECT_DDLINOUT_H diff --git a/note/text.c b/note/text.c index 5c00f7d..97ffbde 100644 --- a/note/text.c +++ b/note/text.c @@ -1,8 +1,8 @@ #include "note.c" int main(){ - //setlocale(LC_ALL," "); + setlocale(LC_ALL,""); int flag=1; - system("chcp 65001"); +// system("chcp 65001"); system("cls"); tag_head= init(); if(tag_head==NULL)return 0; diff --git a/note_by_WDC/search.c b/note_by_WDC/search.c index 598e5aa..1d3c883 100644 --- a/note_by_WDC/search.c +++ b/note_by_WDC/search.c @@ -15,11 +15,12 @@ void search_start(list_head head,date start_date_s){ if(pointer->data.start_date.year == start_date_s.year && pointer->data.start_date.month == start_date_s.month && pointer->data.start_date.day == start_date_s.day){ wprintf(L"\n------------------------------\n"); wprintf(L"截至时间:%d,%d,%d\n",pointer->data.due_date.year,pointer->data.due_date.month,pointer->data.due_date.day); - wprintf(L"事件:%ls",pointer->data.todo); + wprintf(L"事件:%ls\n",pointer->data.todo); wprintf(L"-------------------------------\n"); } pointer = pointer->next; } + system("pause"); } void search_end(list_head head,date due_date_s){ @@ -29,11 +30,12 @@ void search_end(list_head head,date due_date_s){ if(pointer->data.due_date.year == due_date_s.year && pointer->data.due_date.month == due_date_s.month && pointer->data.due_date.day == due_date_s.day){ wprintf(L"\n------------------------------\n"); wprintf(L"开始时间:%d,%d,%d\n",pointer->data.start_date.year,pointer->data.start_date.month,pointer->data.start_date.day); - wprintf(L"事件:%ls",pointer->data.todo); + wprintf(L"事件:%ls\n",pointer->data.todo); wprintf(L"-------------------------------\n"); } pointer = pointer->next; } + system("pause"); } diff --git a/note_by_jzy/menu.c b/note_by_jzy/menu.c index 9ac5390..d3369e9 100644 --- a/note_by_jzy/menu.c +++ b/note_by_jzy/menu.c @@ -96,19 +96,24 @@ void main_menu(void) { case 1: wprintf(L"请输入要更改的计划类型编号(周计划为1,日计划为2)\n"); wscanf_s(L"%d", &input); + day_data dd; if (input == 1) { - addnew(week_head); + dd = read_info(week_head, true); + addnew(week_head, dd); } else if (input == 2) { - addnew(day_head); + dd = read_info(day_head, true); + addnew(day_head, dd); } else goto input_err; break; case 2: wprintf(L"请输入要更改的计划类型编号(周计划为1,日计划为2)\n"); wscanf_s(L"%d", &input); - day_data data = read_info(); + day_data data; if (input == 1) { + data = read_info(week_head, false); modifyNode(week_head, data); } else if (input == 2) { + data = read_info(day_head, false); modifyNode(day_head, data); } else goto input_err; break; @@ -135,9 +140,10 @@ void main_menu(void) { } else if (input == 2) { head_tmp = day_head; } else goto input_err; - wprintf(L"请输入查找的数据:(查找计划开始日期为1,查找计划结束日期为2)\n"); + wprintf(L"请输入查找的数据:(查找计划开始日期为1,查找计划结束日期为2,忽略小时与分钟)\n"); wscanf_s(L"%d", &input); if (input != 1 && input != 2) goto input_err; + wprintf(L"请输入日期: \n"); date d = read_date(); if (input == 1) { search_start(week_head, d); @@ -146,7 +152,11 @@ void main_menu(void) { } break; case 5: - // TODO: 打开笔记本 + FILE *file = NULL; + file = fopen("note.exe", "r"); + if (file == NULL) + wprintf(L"笔记本模块不存在"); + else system("start cmd /k note.exe"); break; case 6: wprintf(L"正在图形界面中操作。"); diff --git a/note_by_ps/addnew.c b/note_by_ps/addnew.c index feb0070..77aa682 100644 --- a/note_by_ps/addnew.c +++ b/note_by_ps/addnew.c @@ -1,32 +1,21 @@ #include "addnew.h" -void addnew(list_head head){ - +void addnew(list_head head, day_data dd) { + linked_list *now; - linked_list *new_node =(linked_list*) malloc(sizeof(linked_list)); - day_data dd = read_info(); + linked_list *prev; + linked_list *new_node = (linked_list *) malloc(sizeof(linked_list)); new_node->data = dd; new_node->next = NULL; - if(head->next=NULL){ - head->next=new_node; + if (head->next == NULL) { + head->next = new_node; } - for(now= head; (now->next)!=NULL; now = now->next){ - - if(new_node->data.due_date.year<=now->next->data.due_date.year){ - if(new_node->data.due_date.month<=now->next->data.due_date.month){ - if(new_node->data.due_date.day<=now->next->data.due_date.day){ - if (new_node->data.due_date.hour <= now->next->data.due_date.hour) { - if (new_node->data.due_date.minute <= now->next->data.due_date.minute) { - new_node->next = now->next; - now->next = new_node; - } - } - } - } - } - } - if((now->next)==NULL) - now->next=new_node; - return; + prev = head; + for (now = head->next; now != NULL; now = now->next) { + if(verify_time(dd.start_date, now->data.start_date)) break; + prev = now; } + new_node->next = prev->next; + prev->next = new_node; +} diff --git a/note_by_ps/addnew.h b/note_by_ps/addnew.h index f91452f..db32d54 100644 --- a/note_by_ps/addnew.h +++ b/note_by_ps/addnew.h @@ -5,5 +5,5 @@ #include "../linked_list/struct_def.h" #include "../inout/ddlinout.h" -void addnew(list_head head); +void addnew(list_head head, day_data dd); #endif//TEAMPROJECT_ADDNEW_H \ No newline at end of file diff --git a/zm/modify.c b/zm/modify.c index f706d63..3ce56c1 100644 --- a/zm/modify.c +++ b/zm/modify.c @@ -2,19 +2,16 @@ void modifyNode(list_head head, day_data DATA) { linked_list *p = head->next; - linked_list *pre = head->next; while(p!=NULL){ if(p->data.number == DATA.number){ // if(p->data_data.number == DATA.number){ // DID YOU MEAN "data" p->data = DATA; // p->data_data = DATA; // DID YOU MEAN "data" - printf("The %dth task has been modified successfully!\n",DATA.number); +// printf("The %dth task has been modified successfully!\n",DATA.number); return ; } - pre = pre->next; - p = pre->next; + p = p->next; } - printf("Sorry, we don't find this task, please check the number you input."); - return ; +// printf("Sorry, we don't find this task, please check the number you input."); }