版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、建筑工地信息管理系統(tǒng),班級(jí):191114 姓名:劉倩 學(xué)號(hào):20111003428,課程設(shè)計(jì)目的: MFC編程實(shí)踐是學(xué)習(xí)C+語(yǔ)言的一個(gè)重要環(huán)節(jié),為提高學(xué)生的程序設(shè)計(jì)能力,通過(guò)課堂和上機(jī)實(shí)踐使學(xué)生的程序設(shè)計(jì)能力有一個(gè)上升的臺(tái)階。通過(guò)前面的學(xué)習(xí)過(guò)程以及練習(xí)之后能夠解決一些簡(jiǎn)單的實(shí)際問(wèn)題。,設(shè)計(jì)要求 建立一個(gè)基于對(duì)話框的MFC程序,要求要有如下內(nèi)容: 建筑工地 (建筑工地號(hào)碼,建筑工地名稱(chēng),建筑工地所在地,建筑工地狀態(tài)) 功能: 1、首先建立一個(gè)相關(guān)的對(duì)話框,然后添加數(shù)據(jù),并進(jìn)行刪除、更新操作,最后進(jìn)行查詢操作。 2、查詢操作需要根據(jù)建筑工地的名稱(chēng)進(jìn)行查詢。,操作步驟: (1)首先建立一個(gè)基于對(duì)話框
2、的MFC程序,這個(gè)時(shí)候?qū)?huì)出現(xiàn)一個(gè)對(duì)話框,此時(shí),可以根據(jù)設(shè)計(jì)的要求來(lái)創(chuàng)建對(duì)話框。根據(jù)要求創(chuàng)建對(duì)話框如下:,這個(gè)時(shí)候我們開(kāi)始點(diǎn)擊建立類(lèi)向?qū)?,然后點(diǎn)擊Member Variables,這個(gè)時(shí)候開(kāi)始給各個(gè)成員編輯一個(gè)成員變量名和變量類(lèi)型,以及給相應(yīng)的函數(shù)和列表框賦予函數(shù)名,同時(shí)增加一個(gè)對(duì)建筑工地名進(jìn)行編輯的CEdit類(lèi)型的變量m_IDC_Name。內(nèi)容如下所示:,當(dāng)將建立建立類(lèi)向?qū)е械囊磺卸紲?zhǔn)備好后,此時(shí),我們返回到.cpp程序和.h文件中去,我們發(fā)現(xiàn),在類(lèi)向?qū)е卸x的一些控件的對(duì)象的聲明,系統(tǒng)已經(jīng)直接給我們加到程序中去了。然后我們只需要關(guān)注使相應(yīng)的功能得以實(shí)現(xiàn)的函數(shù)及其聲明即可。,函數(shù)聲明在Con
3、Stru.h中如下所示: afx_msg void OnUpdate(); /更新函數(shù)的聲明 afx_msg void OnAdd();/增加函數(shù)的聲明 afx_msg void OnSelchangeNamelist();/列表框函數(shù)的聲明 afx_msg void OnDelete();/刪除函數(shù)的聲明 afx_msg void OnClose();/關(guān)閉函數(shù)的聲明 afx_msg void OnAbout();/About對(duì)話框函數(shù)的聲明 afx_msg void OnSearchbyname();/查找函數(shù)的聲明,定義一個(gè)結(jié)構(gòu)體,用來(lái)實(shí)現(xiàn)數(shù)據(jù)的輸入、輸出和保存,同時(shí)定義兩個(gè)指向結(jié)構(gòu)體本
4、身的指針,建立鏈表。 struct ConStruCard char number20; char name20; char city20; char state10; struct ConStruCard *prev;/前一結(jié)點(diǎn) struct ConStruCard *next;/下一結(jié)點(diǎn) ;/定義結(jié)構(gòu)體,static struct ConStruCard* head,*last,*curr;/定義全局變量:頭指針、尾指針、當(dāng)前指針,void LoadInfo(struct ConStruCard*); void DataInit();/函數(shù)聲明 FILE* fp;/聲明文件指針 int i
5、Count;/總的結(jié)點(diǎn)數(shù) bool bNewFile;/文件屬性:是否為新文件?第一次運(yùn)行程序 bool bFileEmpty;/文件屬性:文件是否為空 bool bFileModified;/文件屬性:文件是否被修改 將以上內(nèi)容定義到ConStruDlg這個(gè)類(lèi)中去,實(shí)現(xiàn)部分函數(shù)的聲明和對(duì)文件屬性的聲明等,聲明之后,我們到ConStru.cpp中實(shí)現(xiàn)相應(yīng)的功能。,當(dāng)我們進(jìn)入到ConStru.cpp源文件中去時(shí),由于程序的需要必須加入 #include string.h #include malloc.h這兩個(gè)頭文件,同時(shí)也要對(duì)各種操作進(jìn)行相應(yīng)的函數(shù)聲明 ON_BN_CLICKED(IDC_UP
6、DATE, OnUpdate) ON_BN_CLICKED(IDC_ADD, OnAdd) ON_LBN_SELCHANGE(IDC_NAMELIST,OnSelchangeNamelist) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_WM_CLOSE() ON_BN_CLICKED(IDC_ABOUT, OnAbout) ON_BN_CLICKED(IDC_SEARCHBYNAME, OnSearchbyname),DataInit();/調(diào)用數(shù)據(jù)初始化函數(shù)(自定義函數(shù)) 功能:完成從文件讀取數(shù)據(jù)的操作,如果文件不存在則只建立鏈表輸入輸出均為空。,該函數(shù)函
7、數(shù)體如下: void CConStruDlg:DataInit() struct ConStruCard *p,*q;/定義兩個(gè)臨時(shí)指針 bFileEmpty=FALSE;/文件默認(rèn)為不空 bNewFile=FALSE;/假定不是新文件 bFileModified=FALSE;/初始化文件屬性 p=head=(struct ConStruCard*)malloc(sizeof(struct ConStruCard); head-prev=head-next=NULL;/建立頭結(jié)點(diǎn)(不存放數(shù)據(jù)) if(!(fp=fopen(data.dat,r)/試圖用只讀方式打開(kāi)數(shù)據(jù)文件,如文件不存在則fp返
8、回NULL值 bNewFile=TRUE;/文件不存在,則為新文件 bFileEmpty=TRUE;/文件當(dāng)前狀態(tài)是空的,第一次運(yùn)行程序 iCount=0;/總結(jié)點(diǎn)數(shù)為0,注意不包括頭結(jié)點(diǎn),頭結(jié)點(diǎn)不用來(lái)存放數(shù)據(jù) last=head;/尾結(jié)點(diǎn)此時(shí)就是頭結(jié)點(diǎn) ,if(!bFileEmpty)/因?yàn)槲募J(rèn)為不空,如果文件已存在,則從文件中讀取數(shù)據(jù)建立鏈表 fread(/改變尾指針的指向 ,if(iCount=0)/如果名單為空,禁用更新、刪除和查找等按鈕,以免發(fā)生誤操作導(dǎo)致錯(cuò)誤 GetDlgItem(IDC_UPDATE)-EnableWindow(FALSE); GetDlgItem(IDC_D
9、ELETE)-EnableWindow(FALSE); GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(FALSE); GetDlgItem(IDC_NUMBER)-EnableWindow(FALSE); GetDlgItem(IDC_NAME)-EnableWindow(FALSE); GetDlgItem(IDC_CITY)-EnableWindow(FALSE); GetDlgItem(IDC_STATE)-EnableWindow(FALSE); else m_NameList.SetCurSel(0);/默認(rèn)選中第一條記錄 OnSelchange
10、Namelist(); ,函數(shù)原型:void OnAdd() 功能:在鏈表的結(jié)尾添加一條記錄,并將默認(rèn)將新記錄的姓名置為“新工地名”,其它項(xiàng)為空 輸入輸出均為空,只是一個(gè)過(guò)程. void CConStruDlg:OnAdd() / TODO: Add your control notification handler code here GetDlgItem(IDC_NUMBER)-EnableWindow(TRUE); GetDlgItem(IDC_NAME)-EnableWindow(TRUE); GetDlgItem(IDC_CITY)-EnableWindow(TRUE); GetDl
11、gItem(IDC_STATE)-EnableWindow(TRUE);/啟用文本框控件 curr=(struct ConStruCard*)malloc(sizeof(struct ConStruCard);/將 當(dāng)前指針指向新增加的結(jié)點(diǎn)上 strcpy(curr-name,新工地名); strcpy(curr-number,); strcpy(curr-city,); strcpy(curr-state,);/將默認(rèn)的數(shù)據(jù)復(fù)制到當(dāng)前結(jié)點(diǎn) m_NameList.InsertString(m_NameList.GetCount(),新工地名); m_NameList.SetCurSel(m_N
12、ameList.GetCount()-1);/在列表框中插入新工地名并選中,iCount+;/總結(jié)點(diǎn)數(shù)加1 curr-next=NULL; curr-prev=last; last-next=curr; last=curr;/在尾結(jié)點(diǎn)后插入新結(jié)點(diǎn) bFileEmpty=FALSE; bFileModified=TRUE;/修改文件屬性,文件被修改且不為空 GetDlgItem(IDC_UPDATE)-EnableWindow(TRUE); GetDlgItem(IDC_DELETE)-EnableWindow(TRUE); GetDlgItem(IDC_SEARCHBYNAME)-Enable
13、Window(TRUE);/啟用更新、刪除、查找按鈕控件 LoadInfo(curr);/在文本框顯示個(gè)人信息 ,函數(shù)原型:void DataUpdate() 功能:完成修改當(dāng)前記錄的操作 輸入輸出均為空,只是一個(gè)過(guò)程.,void CConStruDlg:OnUpdate() / TODO: Add your control notification handler code here UpdateData(); int sel = m_NameList.GetCurSel();/得到所選擇記錄在列表框中的序號(hào) if(m_name=) MessageBox(必須輸入工地名!,錯(cuò)誤!,MB_IC
14、ONERROR); m_IDC_Name.SetFocus(); return;/如果姓名輸入框?yàn)榭談t發(fā)生錯(cuò)誤 strcpy(curr-name,m_name); strcpy(curr-number,m_number); strcpy(curr-city,m_city); strcpy(curr-state,m_state);/將更新的數(shù)據(jù)從文本輸入框復(fù)制到結(jié)點(diǎn) m_NameList.DeleteString(sel); m_NameList.InsertString(sel,m_name); m_NameList.SetCurSel(sel);/更新列表框中的名稱(chēng) m_ButtonAdd.
15、SetFocus();/將焦點(diǎn)設(shè)置到“添加”按鈕上 ,函數(shù)原型:void OnSelchangeNamelist() 功能:當(dāng)列表框的選擇項(xiàng)改變時(shí),移動(dòng)指針到指定結(jié)點(diǎn)的位置輸入輸出均為空,只是一個(gè)過(guò)程.,void CConStruDlg:OnSelchangeNamelist() / TODO: Add your control notification handler code here int sel = m_NameList.GetCurSel();/獲得當(dāng)前的選擇 curr=head-next; for(int i=0;inext;/移動(dòng)當(dāng)前指針到選定結(jié)點(diǎn) LoadInfo(curr)
16、;/更新界面 ,函數(shù)原型:void LoadInfo(ConStruCard *p) 功能:將結(jié)點(diǎn)中存放的數(shù)據(jù)信息顯示在文本框中 輸入為當(dāng)前結(jié)點(diǎn)的地址值 輸出為空,void CConStruDlg:LoadInfo(ConStruCard *p) m_name=p-name; m_number=p-number; m_city=p-city; m_state=p-state; UpdateData(FALSE); m_IDC_Name.SetFocus(); m_IDC_Name.SetSel(0,20,TRUE); ,函數(shù)原型:void OnDelete() 功能:將當(dāng)前結(jié)點(diǎn)刪除 輸入為空
17、輸出為空,void CConStruDlg:OnDelete() / TODO: Add your control notification handler code here int sel = m_NameList.GetCurSel();/得到所選記錄在列表框中的序號(hào) struct ConStruCard *p=curr;/新建一個(gè)臨時(shí)指針變量 if (MessageBox(確定要?jiǎng)h除嗎?,警 告”,MB_ICONQUESTION|MB_OKCANCEL) = IDCANCEL) return;/彈出確認(rèn)對(duì)話框 iCount-;/總結(jié)點(diǎn)數(shù)減1 /刪除當(dāng)前結(jié)點(diǎn) p-prev-next=p-
18、next; if(p-next)!=NULL)/注意刪除結(jié)點(diǎn)為末尾結(jié)點(diǎn)時(shí)的操作! p-next-prev=p-prev; else last=p-prev; free(p);/釋放內(nèi)存空間 m_NameList.DeleteString(sel);/在列表框中刪除記錄,if (m_NameList.GetCount()=0) GetDlgItem(IDC_UPDATE)-EnableWindow(FALSE); GetDlgItem(IDC_DELETE)-EnableWindow(FALSE); GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(FALSE)
19、; GetDlgItem(IDC_NAME)-EnableWindow(FALSE); GetDlgItem(IDC_NUMBER)-EnableWindow(FALSE); GetDlgItem(IDC_CITY)-EnableWindow(FALSE); GetDlgItem(IDC_STATE)-EnableWindow(FALSE); bFileEmpty=TRUE; bFileModified=TRUE; return;/如果剩除到一條記錄都不剩,則需要禁用一些控件以免發(fā)生誤操作,同時(shí)修改文件屬性 if (selm_NameList.GetCount() m_NameList.Set
20、CurSel(sel); else m_NameList.SetCurSel(sel-1);/將焦點(diǎn)定義在列表中上一條記錄 OnSelchangeNamelist(); ,函數(shù)原型:void OnClose() 功能:程序結(jié)束時(shí)將鏈表中的數(shù)據(jù)保存到文件 輸入為空 輸出為空,void CConStruDlg:OnClose() / TODO: Add your message handler code here and/or call default struct ConStruCard *p;/聲明一個(gè)臨時(shí)指針變量 if(!bNewFile) ,fwrite( ,void CConStruDlg:OnAbout() / TODO: A
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年福建莆田第五中學(xué)初中部編外教師招聘若干人備考題庫(kù)(含答案詳解)
- 2026年徽商職業(yè)學(xué)院2025-2026學(xué)年第二學(xué)期校外兼職教師招聘53名備考題庫(kù)(含答案詳解)
- 2026北京首都醫(yī)科大學(xué)附屬北京天壇醫(yī)院國(guó)家神經(jīng)疾病醫(yī)學(xué)中心招聘3人備考題庫(kù)及一套答案詳解
- 2025河南漯河市科教文化藝術(shù)中心人才引進(jìn)1人備考題庫(kù)及參考答案詳解一套
- 2025北京工業(yè)大學(xué)聘用制人員招聘1人備考題庫(kù)(第十八批)有完整答案詳解
- 2026暨南大學(xué)附屬第一醫(yī)院粵西醫(yī)院(陽(yáng)西總醫(yī)院)就業(yè)見(jiàn)習(xí)崗位74人備考題庫(kù)(廣東)帶答案詳解
- 2026云南金智瑞貴金屬冶煉股份有限公司招聘?jìng)淇碱}庫(kù)及完整答案詳解
- 2026年甘肅省蘭州天立學(xué)校后勤部招聘?jìng)淇碱}庫(kù)(19+人)及參考答案詳解一套
- 2025江西省金合控股集團(tuán)有限公司副總經(jīng)理及財(cái)務(wù)總監(jiān)2人備考題庫(kù)完整參考答案詳解
- 2026廣東佛山市獅山鎮(zhèn)聯(lián)表小學(xué)招聘教師1人備考題庫(kù)及答案詳解(奪冠系列)
- 地鐵施工現(xiàn)場(chǎng)防臺(tái)風(fēng)措施
- 種植業(yè)合作社賬務(wù)處理
- 【麗江玉龍旅游薪酬制度的創(chuàng)新研究6100字】
- 公司兩權(quán)分離管理制度
- 車(chē)輛叉車(chē)日常檢查記錄表
- 廣東高校畢業(yè)生“三支一扶”計(jì)劃招募考試真題2024
- 膠帶機(jī)硫化工藝.課件
- 種雞免疫工作總結(jié)
- 河南省商丘市柘城縣2024-2025學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)
- 河南省信陽(yáng)市2024-2025學(xué)年高二上學(xué)期1月期末英語(yǔ)試題(含答案無(wú)聽(tīng)力原文及音頻)
- 給女朋友申請(qǐng)書(shū)
評(píng)論
0/150
提交評(píng)論