2024年備忘錄實(shí)驗(yàn)報(bào)告_第1頁
2024年備忘錄實(shí)驗(yàn)報(bào)告_第2頁
2024年備忘錄實(shí)驗(yàn)報(bào)告_第3頁
2024年備忘錄實(shí)驗(yàn)報(bào)告_第4頁
2024年備忘錄實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

試驗(yàn)三.備忘錄試驗(yàn)規(guī)定:用VC++實(shí)現(xiàn)備忘錄小程序,可以設(shè)定事件告知信息,并按照設(shè)定的時(shí)間進(jìn)行事件告知,詳細(xì)規(guī)定如下:1.界面友好,美觀大方;2.支持事件的錄入,包括時(shí)間、事件、備注信息等;3.支持在設(shè)定的時(shí)間進(jìn)行事件提醒;4.支持對(duì)已錄入事件大的查看、修改和刪除;5.其他更多功能,可根據(jù)狀況自行添加。題目分析:由題意可知,建立備忘錄小程序需要操作的對(duì)象是“事件”和“事件列表”。因此,我們建立了事件類(classEvent)和事件鏈表類(classEventList)。如下是對(duì)類的詳細(xì)分析:事件類的組員變量中應(yīng)當(dāng)包括如下信息:◆內(nèi)容(content)◆標(biāo)識(shí)符用以唯一標(biāo)識(shí)(id)◆與否設(shè)置提醒(reminder)◆事件提醒時(shí)間(time)◆標(biāo)題(title)對(duì)應(yīng)組員變量的組員函數(shù)有:Event():構(gòu)造一種空事件getContent():獲得事件內(nèi)容getOleTime():獲得COleDateTime對(duì)象的時(shí)間getReminder():獲得與否提醒getTime():獲得字符串格式時(shí)間getTitle():獲得標(biāo)題setContent(..),setID(..),setReminder(..),setTime(..),setTitle(..)分別設(shè)置內(nèi)容,ID,提醒,時(shí)間,和標(biāo)題。創(chuàng)立一種事件的詳細(xì)過程:1.申明一種事件Event對(duì)象,調(diào)用默認(rèn)構(gòu)造函數(shù)。2.根據(jù)顧客輸入調(diào)用對(duì)應(yīng)的set函數(shù)給事件組員變量賦值。需要注意的是:content,id,tiltle都是CString類對(duì)象,而time是COleDateTime對(duì)象。3.調(diào)用setIDAuto()函數(shù),給該事件自動(dòng)加上ID,ID對(duì)應(yīng)著目前時(shí)間點(diǎn)。如下是setIDAuto的詳細(xì)實(shí)現(xiàn)代碼:voidsetIDAuto() { COleDateTimecur_time; cur_time.GetCurrentTime(); intday=cur_time.GetDay(); intmonth=cur_time.GetMonth(); intyear=cur_time.GetYear(); intminute=cur_time.GetMinute(); inthour=cur_time.GetHour(); intsecond=cur_time.GetSecond();//根據(jù)目前時(shí)間設(shè)定ID id.Format(_T("%.4d-%.2d-%.2d%.2d:%.2d:%.2d"),year,month,day,hour,minute,second); }下面是對(duì)事件鏈表類EventList的分析:首先引入STL中的vector類,為事件構(gòu)造一種向量(動(dòng)態(tài)數(shù)組)。語句為:std::vector<Event>event_vector而該類的所有操作都是圍繞著這個(gè)事件向量進(jìn)行的。如下是對(duì)組員變量的講解:Eventleft_event:標(biāo)識(shí)即將發(fā)生事件,在背面的【事件提醒】有詳細(xì)簡(jiǎn)介。intsize:記錄目前的事件數(shù)量組員函數(shù):addEvent:添加事件check():檢查left_event與否抵達(dá)提醒時(shí)間deleteEvent:從id或下標(biāo)刪除事件GetEvent:從下標(biāo)獲取事件getLeftEvent:設(shè)置left_event,并返回它getSize:或取目前事件數(shù)Read:從傳入途徑讀取文獻(xiàn),獲取已保留事件數(shù)據(jù)Save:從傳入途徑寫入文獻(xiàn)如下是添加一種事件的流程:創(chuàng)立事件調(diào)用EventList的組員函數(shù)addEvent添加事件程序共含兩個(gè)窗體:即主窗體和事件添加編輯窗體。如下是窗體截圖:兩個(gè)窗體分別為兩個(gè)類,其中主窗體類名為CbeiwangluDlg,包括如下私有組員。Cur_event:一種事件對(duì)象,新建和編輯對(duì)象時(shí)用的臨時(shí)變量event_list:事件鏈表,伴伴隨窗體的生命周期left_event:保留即將發(fā)生的事件事件添加編輯窗體類為CNewEventDlg,類關(guān)系圖為:如下是對(duì)該類的組員變量進(jìn)行闡明:Event*cur_event:保留一種事件指針,而該類的所有操作均是對(duì)該指針?biāo)赶虻膶?duì)象進(jìn)行操作BoolifEdit:判斷與否為編輯窗口,默認(rèn)是添加事件窗口EventContext:事件內(nèi)容,和一種EditBox綁定EventID:事件ID,自動(dòng)設(shè)置EventReminder:事件與否提醒,和一種CheckBox綁定EventTitle:事件標(biāo)題,與一種EditBox綁定SelectedTime:和一種CDateTimeCtrl控件綁定,用以獲得選擇的年月曰Time_of_hms:和一種CDateTimeCtrl控件綁定,用以獲得詳細(xì)的時(shí)分秒SetEvent:根據(jù)EventID,EventReminder,EventTitle,SelectedTime為cur_event所指向的事件賦值。1.文獻(xiàn)讀寫程序運(yùn)行,創(chuàng)立事件鏈表,然後調(diào)用EventList的Read函數(shù)從文獻(xiàn)中讀入事件列表。在了爭(zhēng)讀取文獻(xiàn)時(shí),我們不妨先看一看保留的格式,即Save函數(shù)的實(shí)現(xiàn),如下是Save函數(shù)的實(shí)現(xiàn)代碼:(有關(guān)注釋已在代碼間表明) CStringSave(constCString&path) { CStdioFilef; CFileExceptione; if(!f.Open(path,CFile::modeWrite|CFile::modeCreate|CFile::typeText|CFile::typeBinary,&e)) { return_T("Filecouldnotbeopened\n"); } std::vector<Event>::iteratorit=event_vector.begin(); CStringtemp; while(it!=event_vector.end())//無限循環(huán),直至迭代器走到向量尾端 { f.WriteString(it->getTime());//寫入時(shí)間 f.WriteString(_T("\n"));//換行 f.WriteString(it->getTitle());//寫入標(biāo)題 f.WriteString(_T("\n"));//換行 if(it->getReminder()==TRUE) { f.WriteString(_T("TRUE"));//寫入與否提醒 } else { f.WriteString(_T("FALSE"));//寫入與否提醒 } f.WriteString(_T("\n"));//換行 f.WriteString(it->getContent());//寫入事件內(nèi)容 f.WriteString(_T("\n\r"));//換行 f.WriteString(it->getID());//寫入ID f.WriteString(_T("\n"));//換行 it++;//迭代器向前進(jìn)一 } return_T("OK"); }Save的實(shí)現(xiàn)方式是將每個(gè)事件均有次序地保留進(jìn)一種文本文獻(xiàn)裏,這樣有條不紊的寫入文獻(xiàn)保證了文獻(xiàn)讀入時(shí)穩(wěn)定性。如下是Read函數(shù)是詳細(xì)實(shí)現(xiàn)代碼:CStringRead(constCString&path) { CStdioFilef; CFileExceptione; if(!f.Open(path,CFile::modeRead|CFile::typeBinary,&e)) { return_T("Filecouldnotbeopened\n"); } CStringstr,temp_str; Eventcur_event; COleDateTimeevent_time; CStringstrii; intcount=1; while(f.ReadString(str)) { if(str=="\n"||str=="\r") { continue; } switch(count) { case1://第一行,讀入時(shí)間 intyear,month,day,hour,minute,second; temp_str=str.Mid(0,4); year=_wtoi(temp_str); temp_str=str.Mid(5,2); month=_wtoi(temp_str); temp_str=str.Mid(8,2); day=_wtoi(temp_str); temp_str=str.Mid(11,2); hour=_wtoi(temp_str); temp_str=str.Mid(14,2); minute=_wtoi(temp_str); temp_str=str.Mid(17,2); second=_wtoi(temp_str); event_time.SetDateTime(year,month,day,hour,minute,second); cur_event.setTime(event_time); break; case2://第二行,讀入標(biāo)題 cur_event.setTitle(str); break; case3://第三行,讀入與否提醒 if(str==_T("TRUE")) { cur_event.setReminder(TRUE); } else { cur_event.setReminder(FALSE); } break; case4://讀入事件內(nèi)容 cur_event.setContent(str); break; case5://讀入ID cur_event.setID(str); break; } if(count==5)//若count==5,表達(dá)一種事件已經(jīng)讀入完畢,則使count變回,并向列表中添加 { count=1; this->addEvent(cur_event); } else { count++;//否則使count自增 } } return_T("OK"); }Read操作即為Save的逆向操作,根據(jù)Save的保留次序依次讀入各個(gè)事件,將原字符串格式的信息轉(zhuǎn)化為需要的類型添加進(jìn)事件中,最終依次添加每一種事件進(jìn)入事件鏈表中。事件添加事件的添加,即為當(dāng)單擊新建事件按鈕時(shí)調(diào)出添加事件對(duì)話框。但我們需要在主對(duì)話框和添加事件對(duì)話框建立信息橋梁,因此我們讓添加事件對(duì)話框的組員變量*cur_event指向主窗口的組員變量cur_event,詳細(xì)實(shí)現(xiàn)代碼如下: Eventcur_event; CNewEventDlgdlg; dlg.setEvent(&cur_event);//設(shè)置指針指向cur_event intdd=dlg.DoModal();//對(duì)話框彈出 if(cur_event.getTitle()!=_T(""))//假如標(biāo)題未設(shè)置則認(rèn)為未確認(rèn)添加 { event_list.addEvent(cur_event); RefreshList();//刷新顯示列表 }如下是添加事件對(duì)話框的詳細(xì)實(shí)現(xiàn)代碼,如OnBnClickedOk函數(shù)上進(jìn)行響應(yīng):voidCNewEventDlg::OnBnClickedOk(){ //TODO:在此添加控件告知處理程序代碼 UpdateData(TRUE);//獲得各變量的值 intyear=SelectedTime.GetYear(); intmonth=SelectedTime.GetMonth(); intday=SelectedTime.GetDay(); inthour=time_of_hms.GetHour(); intminute=time_of_hms.GetMinute(); intsecond=time_of_hms.GetSecond(); SelectedTime.SetDateTime(year,month,day,hour,minute,second); //為事件的各組員變量賦值 cur_event->setTime(this->SelectedTime); cur_event->setTitle(this->EventTitle); cur_event->setReminder(this->EventReminder); cur_event->setContent(this->EventContext); COleDateTimecur_time=COleDateTime::GetCurrentTime(); cur_event->setID(cur_time); OnOK();}至此,便完畢了對(duì)事件的添加。事件刪除事件刪除的詳細(xì)實(shí)現(xiàn)是:獲得選中事件通過獲得下標(biāo)對(duì)事件進(jìn)行刪除詳細(xì)實(shí)現(xiàn)代碼為:voidCbeiwangluDlg::OnBnClickedButton3(){ //TODO:在此添加控件告知處理程序代碼 CStringstr; POSITIONpos=m_list.GetFirstSelectedItemPosition(); if(pos==NULL) TRACE0("Noitemswereselected!\n"); else { while(pos) { intnItem=m_list.GetNextSelectedItem(pos); Eventcur_event=event_list.GetEvent(nItem); event_list.deleteEvent(nItem); RefreshList(); MessageBox(_T("刪除成功!")); } }}4.事件編輯對(duì)事件進(jìn)行編輯,需要得到目前列表的選中項(xiàng),并要調(diào)出事件編輯窗口。如下是主窗口對(duì)事件編輯的代碼: CStringstr; POSITIONpos=m_list.GetFirstSelectedItemPosition(); if(pos==NULL) TRACE0("Noitemswereselected!\n"); else { while(pos) { intnItem=m_list.GetNextSelectedItem(pos);//將pos轉(zhuǎn)化為下標(biāo) Eventcur_event=event_list.GetEvent(nItem);//由下標(biāo)獲得事件,并賦值給臨時(shí)事件 event_list.deleteEvent(nItem);//刪除事件 //等同于添加事件 CNewEventDlgdlg; dlg.setEvent(&cur_event); dlg.setIfEdit(true); intdd=dlg.DoModal(); event_list.addEvent(cur_event); RefreshList(); }}編輯事件的流程是:獲取要編輯事件,并將其賦值給臨時(shí)變量cur_event刪除該事件調(diào)用事件添加模塊,但使事件添加窗口在窗口創(chuàng)立時(shí)加載cur_event的各項(xiàng)參數(shù)。不管顧客確定還是取消編輯,均無條件添加cur_event進(jìn)入事件鏈表中刷新顯示列表5.事件提醒事件的提醒處理思想如下:設(shè)置一種Timer,每1秒響應(yīng)一次因此,我們?cè)谥鞔翱诘腛nInitDlg函數(shù)裏添加了下面這一句代碼:SetTimer(32,1000,NULL);設(shè)置Timer響應(yīng)函數(shù),為了使窗口跳到最前,并彈出對(duì)話框,因此我們?cè)贠nTimer函數(shù)中寫了如下代碼:voidCbeiwangluDlg::OnTimer(UINT_PTRnIDEvent){ //TODO:在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值 COleDateTimecur_time=COleDateTime::GetCurrentTime(); if(nIDEvent==32) { if(event_list.check()==true)//當(dāng)檢查返回true時(shí),執(zhí)行提醒 { //使窗口跳到最前,并彈出對(duì)話框 ShowWindow(SW_SHOW); SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); SetWindowPos(&wndNoTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); SetForegroundWindow(); HWNDhCurWnd=NULL; DWORDlMyID; DWORDlCurID; hCurWnd=::GetForegroundWindow(); lMyID=::GetCurrentThreadId(); lCurID=::GetWindo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論