版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目錄相關(guān)技術(shù)介紹 21.1VisualStudio2008的簡介 21.2MicrosoftAccess2007的簡介 21.3C/S結(jié)構(gòu)的簡介 2需求分析 32.1需求簡介 32.2數(shù)據(jù)字典 32.2.1數(shù)據(jù)項 32.2.2數(shù)據(jù)結(jié)構(gòu) 42.3用例圖 4總體設(shè)計 53.1系統(tǒng)總體功能模塊圖 5數(shù)據(jù)庫設(shè)計 54.1ER圖設(shè)計 64.2關(guān)系模式 64.3邏輯模型 74.4物理設(shè)計 74.4.1數(shù)據(jù)庫建立 74.4.2數(shù)據(jù)庫備份和恢復(fù) 8用戶界面的設(shè)計和實現(xiàn)和應(yīng)用程序編碼 85.1用戶界面設(shè)計 8系統(tǒng)測試方案和測試報告 166.1系統(tǒng)測試 176.1.1錯誤數(shù)據(jù) 176.1.2正確數(shù)據(jù) 21安裝和使用說明 237.1安裝 237.2使用說明 24參考文獻(xiàn) 25
相關(guān)技術(shù)介紹1.1VisualStudio2008的簡介對于應(yīng)用程序開發(fā)工具的選擇,很多人都聽過這句經(jīng)典的說法:聰明的程序員使用Delphi,真正的程序員使用VisualC++。VisualStudio是微軟公司推出的開發(fā)Win32應(yīng)用程序(Windows95/98/2000/XP/NT)的、面向?qū)ο蟮目梢暬砷_發(fā)工具。它的最大優(yōu)點就是提供了功能強(qiáng)大的MFC類庫,MFC是一個很大的C++類層次結(jié)構(gòu),其中封裝了大量的類及其函數(shù),很多Windows程序所共有的標(biāo)準(zhǔn)內(nèi)容可以由MFC的類來提供,MFC類為這些內(nèi)容提供了用戶接口的標(biāo)準(zhǔn)實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓,這將簡化編程工作,大大的減少程序員編寫的代碼數(shù)量,使編程工作變得更加輕松容易。1.2MicrosoftAccess2007的簡介MicrosoftAccess數(shù)據(jù)庫管理系統(tǒng)是MicrosoftOffice套件的重要組成部分,先后出現(xiàn)了Access97、Access2000和Access2007。其中Access2007是最新版本。Access適用于小型商務(wù)活動,用以存貯和管理商務(wù)活動所需要的數(shù)據(jù)。Access不僅是一個數(shù)據(jù)庫,而且它具有強(qiáng)大的數(shù)據(jù)管理功能,它可以方便地利用各種數(shù)據(jù)源,生成窗體(表單),查詢,報表和應(yīng)用程序等。Access2007數(shù)據(jù)庫由七種對象組成:表、查詢、窗體、報表、頁、宏和模塊。
表(Table)——表是數(shù)據(jù)庫的基本對象,是創(chuàng)建其他6種對象的基礎(chǔ)。表由記錄組成,記錄由字段組成,表用來存貯數(shù)據(jù)庫的數(shù)據(jù),故又稱數(shù)據(jù)表。
查詢(Query)——查詢可以按索引快速查找到需要的記錄,按要求篩選記錄并能連接若干個表的字段組成新表。
窗體(Form)——窗體提供了一種方便的瀏覽、輸入及更改數(shù)據(jù)的窗口。還可以創(chuàng)建子窗體顯示相關(guān)聯(lián)的表的內(nèi)容。窗體也稱表單。
報表(Report)——報表的功能是將數(shù)據(jù)庫中的數(shù)據(jù)分類匯總,然后打印出來,以便分析。
頁(Page)——也叫數(shù)據(jù)訪問頁。是連接到數(shù)據(jù)庫的Web頁,在數(shù)據(jù)訪問頁中,可以查看、添加、編輯和操作存儲在數(shù)據(jù)庫中的數(shù)據(jù)。數(shù)據(jù)訪問頁還可以包括其他來源的數(shù)據(jù),例如MicrosoftExcel。
宏(Macro)——宏相當(dāng)于DOS中的批處理,用來自動執(zhí)行一系列操作。Access列出了一些常用的操作供用戶選擇,使用起來十分方便。
模塊(Module)——模塊的功能與宏類似,但它定義的操作比宏更精細(xì)和復(fù)雜,用戶可以根據(jù)自己的需要編寫程序。模塊使用VisualBasic編程。1.3C/S結(jié)構(gòu)的簡介隨著網(wǎng)絡(luò)的發(fā)展,出現(xiàn)了C/S模式,應(yīng)用被分為前端(客戶機(jī)部分)和后端(服務(wù)器部分)。C/S結(jié)構(gòu)的系統(tǒng)有三個基本組成部分:客戶機(jī)、服務(wù)器、客戶機(jī)與服務(wù)器的連接件。客戶機(jī)一般運行在微機(jī)上,而服務(wù)器一般運行在大型機(jī)或高性能微機(jī)上。這種模式的最大特點就在于利用客戶機(jī)和服務(wù)器雙方的資源來共同執(zhí)行一個特定的任務(wù),也就是一個應(yīng)用由客戶機(jī)和服務(wù)器共同承擔(dān)完成。C/S結(jié)構(gòu)的優(yōu)點有:交互性強(qiáng),運行效率高,開放性強(qiáng),可擴(kuò)充性好,應(yīng)用服務(wù)器運行負(fù)荷較輕,提供了更安全的存儲模式。由于C/S模式在邏輯結(jié)構(gòu)上比B/S模式少一層,對于相同的任務(wù),C/S完成的速度總比B/S快。需求分析2.1需求簡介在生活節(jié)奏非??斓漠?dāng)今社會,人們需要對日常的開支有一個明確的但是簡單的記錄方式,迷你一個記賬系統(tǒng)就是提供這樣一種方式的小型管理系統(tǒng)。它可以用來管理日常生活的支出,可以對消費進(jìn)行分類、統(tǒng)計、查詢,使支出更加清晰明確,你可以根據(jù)時間段進(jìn)行統(tǒng)計出消費的情況,打印出消費單。因為是面向?qū)嵱玫?,所以功能不需要太過于復(fù)雜,只需要實用就可以了,考慮到用戶的需求,界面需要比較簡潔和美觀,操作盡量簡單。2.2數(shù)據(jù)字典2.2.1數(shù)據(jù)項數(shù)據(jù)項名稱:用戶名簡述:用戶的名稱,用于登錄系統(tǒng)類型:字符串長度:20數(shù)據(jù)項之間的聯(lián)系:用戶名→密碼數(shù)據(jù)項名稱:條目編號簡述:消費的條目編號類型:字符串長度:7取值范圍:0000000~9999999數(shù)據(jù)項之間的聯(lián)系:條目編號→條目名稱,條目編號→消費類型,條目編號→單價,條目編號→數(shù)量,條目編號→消費時間數(shù)據(jù)項名稱:消費類型簡述:消費的類型類型:字符串長度:202.2.2數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)名稱:用戶信息含義說明:使用系統(tǒng)的用戶的具體信息組成:用戶名+密碼數(shù)據(jù)結(jié)構(gòu)名稱:消費信息含義說明:消費的條目的具體信息組成:條目編號+條目名稱+消費類型+單價+數(shù)量+消費時間數(shù)據(jù)結(jié)構(gòu)名稱:類型信息含義說明:消費類型的具體信息組成:消費類型2.3用例圖總體設(shè)計3.1系統(tǒng)總體功能模塊圖數(shù)據(jù)庫設(shè)計4.1ER圖設(shè)計4.2關(guān)系模式用戶(用戶名,密碼)消費類型(消費類型)消費(條目編號,條目名稱,消費類型,單價,數(shù)量,消費時間)關(guān)系模式對應(yīng)的基本表關(guān)系模型基本表用戶users消費類型class消費entry4.3邏輯模型4.4物理設(shè)計4.4.1數(shù)據(jù)庫建立Access數(shù)據(jù)庫本身就是一個文件,創(chuàng)建一個文件就創(chuàng)建一個數(shù)據(jù)庫,所以不需要再建立數(shù)據(jù)庫。建立表usersCREATETABLEusers(u_nameVARCHAR(20)PRIMARYKEY,u_passwordVARCHAR(20));建立表classCREATETABLEclass(c_nameVARCHAR(20)PRIMARYKEY);建立表entryCREATETABLEentry(e_noVARCHAR(7)PRIMARYKEY,e_tagVARCHAR(15),e_classVARCHAR(20),e_priceMONEY,e_quantityINT,e_dateDATE,e_descriptionTEXT,FOREIGNKEY(e_class)REFERENCESclass(c_name));4.4.2數(shù)據(jù)庫備份和恢復(fù)因為Access數(shù)據(jù)庫本身就是一個數(shù)據(jù)文件,所以可以直接對這個文件進(jìn)行備份,如果數(shù)據(jù)遭到破壞需要恢復(fù),那么將備份文件覆蓋到原來的數(shù)據(jù)文件就可以恢復(fù)數(shù)據(jù)了,非常方便。用戶界面的設(shè)計和實現(xiàn)和應(yīng)用程序編碼5.1用戶界面設(shè)計用戶界面使用MFC(微軟基礎(chǔ)類庫)進(jìn)行開發(fā),其中的界面元素主要用的是BCGControlBar框架,這個框架是BCGSoft公司的界面庫產(chǎn)品,后來被微軟收購,并在后續(xù)發(fā)布的VS2008SP版本中將其嵌入到MFC中作為MFC的一部分。用該框架可以開發(fā)出類似于office2007的界面。登錄界面關(guān)鍵代碼voidCLoginDlg::OnBnClickedBnLogin(){ //TODO:在此添加控件通知處理程序代碼 UpdateData(); CStringstrSQL; strSQL=_T("SELECT*FROMusers"); CAdoRecordSetrs; if(CPayoutManagerApp::OpenRecordSet(rs,strSQL)) { if(rs.GetRecordCount()>0) { CStringstrUsername; CStringstrPassword; rs.GetCollect(_T("u_name"),strUsername); rs.GetCollect(_T("u_password"),strPassword); if(strUsername.Compare(m_strUsername)==0) { if(strPassword.Compare(m_strPassword)==0) { EndDialog(TRUE); } else { AfxMessageBox(_T("密碼錯誤!")); } } else { AfxMessageBox(_T("用戶名錯誤!")); } } else { AfxMessageBox(_T("用戶表為空!")); } }}主界面面板//////////////////////////////////////////////////////////////////////////////////// //添加管理主面板 bNameValid=strTemp.LoadString(IDS_RIBBON_MANAGER); ASSERT(bNameValid); CMFCRibbonCategory*pManagerCategory=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE); //面板工廠(管理) CPanelFactorymanagerFactory(pManagerCategory); //利用面板工廠創(chuàng)建類別面板 m_pClassPanel=newCClassPanel(IDS_RIBBON_CLASS,managerFactory); //初始化面板內(nèi)容 m_pClassPanel->InitializeContainer(); //利用面板工廠創(chuàng)建條目面板 m_pEntryPanel=newCEntryPanel(IDS_RIBBON_ENTRY,managerFactory); //初始化面板內(nèi)容 m_pEntryPanel->InitializeContainer();//////////////////////////////////////////////////////////////////////////////////// //添加搜索主面板 bNameValid=strTemp.LoadString(IDS_RIBBON_SEARCH); ASSERT(bNameValid); CMFCRibbonCategory*pSearchCategory=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE); //面板工廠(搜索) CPanelFactorysearchFactory(pSearchCategory); //利用面板工廠創(chuàng)建搜索面板 m_pSearchPanel=newCSearchPanel(IDS_RIBBON_SEARCH,searchFactory); //初始化面板內(nèi)容 m_pSearchPanel->InitializeContainer();//////////////////////////////////////////////////////////////////////////////////// //添加統(tǒng)計主面板 bNameValid=strTemp.LoadString(IDS_RIBBON_STAT); ASSERT(bNameValid); CMFCRibbonCategory*pStatCategory=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE); //面板工廠(統(tǒng)計) CPanelFactorystatFactory(pStatCategory); //利用面板工廠創(chuàng)建統(tǒng)計面板 m_pStatPanel=newCStatPanel(IDS_RIBBON_STAT,statFactory); //初始化面板內(nèi)容 m_pStatPanel->InitializeContainer();列表視圖voidCEntryGrid::OnInitialUpdate(){ CListView::OnInitialUpdate(); //TODO:在此添加專用代碼和/或調(diào)用基類 //設(shè)定列表樣式 DWORDdwStyle=::GetWindowLong(m_hWnd,GWL_STYLE); dwStyle|=LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL; ::SetWindowLong(m_hWnd,GWL_STYLE,dwStyle); dwStyle=m_listCtrl.GetExtendedStyle(); dwStyle|=LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT; m_listCtrl.SetExtendedStyle(dwStyle); CAdoRecordSetrs; CStringstrSQL; strSQL=_T("SELECTe_noAS條目編號,e_tagAS條目名稱,e_classAS消費類型,e_priceAS單價,e_quantityAS數(shù)量,e_dateAS購買時間,e_descriptionAS備注FROMentry"); CPayoutManagerApp::OpenRecordSet(rs,strSQL+_T("ORDERBYe_no"),adCmdText); longcolCount=rs.GetFieldsCount(); //插入列名 for(longi=0;i<colCount;i++) { CStringcolumnName=rs.GetFieldName(i); m_listCtrl.InsertColumn((int)i,columnName,0,100); } ListData(&rs);}voidCEntryGrid::ListData(CAdoRecordSet*pRs){ BOOLbCreated(FALSE); if(pRs==NULL) { bCreated=TRUE; pRs=newCAdoRecordSet(); CStringstrSQL; strSQL=_T("SELECTe_noAS條目編號,e_tagAS條目名稱,e_classAS消費類型,e_priceAS單價,e_quantityAS數(shù)量,e_dateAS購買時間,e_descriptionAS備注FROMentry"); CPayoutManagerApp::OpenRecordSet(*pRs,strSQL+_T("ORDERBYe_no"),adCmdText); } m_listCtrl.DeleteAllItems(); longcolCount=pRs->GetFieldsCount(); longrowCount=pRs->GetRecordCount(); m_listCtrl.SetColumnWidth(colCount-1,200); pRs->MoveFirst(); for(longi=0;i<rowCount;i++) { CStringitem; longj=0; //插入條目編號 pRs->GetCollect(j,item); m_listCtrl.InsertItem(i,item); //插入內(nèi)容 for(j=1;j<colCount;j++) { if(j==(colCount-2)) { COleDateTimedtDate; pRs->GetCollect(_T("購買時間"),dtDate); item=dtDate.Format(_T("%Y-%m-%d")); } else { pRs->GetCollect(j,item); } m_listCtrl.SetItemText(i,j,item); } pRs->MoveNext(); } if(bCreated==TRUE) { deletepRs; }}管理面板voidCEntryPanel::OnClickedBnAdd(void){ UpdateData(); CEntryentry(m_strNo,m_strTag,m_strClass,m_strPrice,m_strQuantity,m_strDate,m_strDescription); if(entry.Add()) { AfxMessageBox(_T("添加成功")); NotifyOthersToUpdate(); } else { AfxMessageBox(_T("添加失敗")); }}voidCEntryPanel::OnClickedBnMod(void){ UpdateData(); CEntryentry; MakeEntry(entry); if(entry.Update()==TRUE) { AfxMessageBox(_T("修改成功")); NotifyOthersToUpdate(); } else { AfxMessageBox(_T("修改失敗")); }}voidCEntryPanel::OnClickedBnDel(void){ CEntryentry; MakeEntry(entry); if(entry.Delete()==TRUE) { AfxMessageBox(_T("刪除成功")); NotifyOthersToUpdate(); } else { AfxMessageBox(_T("刪除失敗")); }}搜索面板voidCSearchPanel::OnBnSearch(void){ CStringstrText=m_pBnSearch->GetText(); CStringstrField=m_pCBField->GetEditText(); CStringstrValue=m_pEditValue->GetEditText(); if(strField.Compare(_T("條目編號"))==0) { strField=_T("e_no"); } elseif(strField.Compare(_T("條目名稱"))==0) { strField=_T("e_tag"); } elseif(strField.Compare(_T("消費類型"))==0) { strField=_T("e_class"); } CStringstrStatement; if(strText.Compare(_T("精確搜索"))==0) { strStatement.Format(_T("%s='%s'"),strField,strValue); } else { strStatement.Format(_T("%sLIKE'%s%s%s'"),strField,_T("%"),strValue,_T("%")); } CStringstrSQL; strSQL.Format(_T("SELECTe_noAS條目編號,e_tagAS條目名稱,e_classAS消費類型,e_priceAS單價,e_quantityAS數(shù)量,e_dateAS購買時間,e_descriptionAS備注FROM%sWHERE%sORDERBYe_no"),m_strTable,strStatement); CAdoRecordSetrs; if(OpenRecordSet(rs,strSQL)) { CMainFrame*pMainFrame=(CMainFrame*)theApp.m_pMainWnd; CEntryGrid*pEntryGrid=(CEntryGrid*)pMainFrame->GetActiveView(); pEntryGrid->ListData(&rs); }}統(tǒng)計面板voidCStatPanel::OnBnStat(void){ CStringstrStart=m_pCBStart->GetEditText(); CStringstrEnd=m_pCBEnd->GetEditText(); CStringstrCount=_T("0"); CStringstrSum=_T("0"); CStringstrHighest=_T("0"); CStringstrStatement; strStatement.Format(_T("e_dateBETWEEN#%s#AND#%s#"),strStart,strEnd); CStringstrSQL; strSQL.Format(_T("SELECTSUM(e_price*e_quantity)AS消費總額,MAX(e_price*e_quantity)AS最高消費FROM%sWHERE%s"),m_strTable,strStatement); CAdoRecordSetrs; if(OpenRecordSet(rs,strSQL)) { if(!rs.IsFieldNull(0l)) { rs.GetCollect(_T("消費總額"),strSum); rs.GetCollect(_T("最高消費"),strHighest); } } strSQL.Format(_T("SELECTe_noAS條目編號,e_tagAS條目名稱,e_classAS消費類型,e_priceAS單價,e_quantityAS數(shù)量,e_dateAS購買時間,e_descriptionAS備注FROM%sWHERE%sORDERBYe_no"),m_strTable,strStatement); if(OpenRecordSet(rs,strSQL))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年1月國家開放大學(xué)法律事務(wù)??啤睹穹▽W(xué)(1)》期末紙質(zhì)考試試題及答案
- 南京工業(yè)大學(xué)浦江學(xué)院《建筑設(shè)備與室內(nèi)空間》2023-2024學(xué)年第一學(xué)期期末試卷
- 南方科技大學(xué)《城鄉(xiāng)總體規(guī)劃原理與城鄉(xiāng)綠地系統(tǒng)規(guī)劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 南充科技職業(yè)學(xué)院《智能制造產(chǎn)線及關(guān)鍵裝備》2023-2024學(xué)年第一學(xué)期期末試卷
- 南昌應(yīng)用技術(shù)師范學(xué)院《影視聲音賞析》2023-2024學(xué)年第一學(xué)期期末試卷
- 明達(dá)職業(yè)技術(shù)學(xué)院《動畫項目實踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 閩江學(xué)院《英語教學(xué)法流派》2023-2024學(xué)年第一學(xué)期期末試卷
- 漯河食品職業(yè)學(xué)院《歌曲編配與彈奏》2023-2024學(xué)年第一學(xué)期期末試卷
- 洛陽師范學(xué)院《三維項目實訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 魯迅美術(shù)學(xué)院《鄉(xiāng)村景觀設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 第二章 運營管理戰(zhàn)略
- 《三本白皮書》全文內(nèi)容及應(yīng)知應(yīng)會知識點
- 專題14 思想方法專題:線段與角計算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來器械及植入物管理制度(4篇)
- 圖像識別領(lǐng)域自適應(yīng)技術(shù)-洞察分析
- 新概念英語第二冊考評試卷含答案(第49-56課)
- 商業(yè)倫理與企業(yè)社會責(zé)任(山東財經(jīng)大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年山東財經(jīng)大學(xué)
- 【奧運會獎牌榜預(yù)測建模實證探析12000字(論文)】
- (完整版)譯林版英語詞匯表(四年級下)
- 支票票樣-樣版
- 標(biāo)準(zhǔn)活動板房設(shè)計說明(共7頁)
評論
0/150
提交評論