

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p> 選題: 商品管理系統(tǒng)</p><p><b> 姓 名: </b></p><p><b> 學(xué) 號: </b></p><p><b> 指導(dǎo)老師: </b>&
2、lt;/p><p><b> 目 錄</b></p><p> 一 開發(fā)工具介紹 3</p><p> 1簡介操作平臺與支持軟件</p><p> 二 選題目標(biāo)分析
3、 3</p><p> 1 透析選題,構(gòu)建系統(tǒng)框架,設(shè)計功能模塊</p><p><b> 2 設(shè)計特色介紹</b></p><p> 三 使用說明 5<
4、/p><p><b> 1程序安裝配置</b></p><p> 2操作細(xì)則與功能說明</p><p> 四 數(shù)據(jù)結(jié)構(gòu)設(shè)計 8</p><p><b> 1 數(shù)據(jù)構(gòu)成與定義</b></p&
5、gt;<p> 2 函數(shù)間數(shù)據(jù)傳遞與數(shù)據(jù)流走向設(shè)計</p><p> 五 功能板塊分析 11</p><p><b> 1 特色函數(shù)介紹</b></p><p><b> 2主功能模塊分析</b><
6、;/p><p> 3庫存操作(增加、刪除、出售、查找)</p><p> 六 程序比較分析 15</p><p> 1 比較各函數(shù)不同算法優(yōu)劣,選擇高效核心算法</p><p> 2對本系統(tǒng)的改進(jìn)意見</p><p>
7、; 七 技術(shù)討論 16</p><p> 1 如何保證數(shù)據(jù)一致性</p><p> 2 MFC下對文件的操作</p><p> 3 大容量鏈表中如何快速找到死鏈</p><p> 八 心得體會
8、 17</p><p> 九 參考文獻(xiàn)與附錄 19</p><p><b> 一 開發(fā)工具介紹</b></p><p> Visual C++6.0是微軟公司推出的開發(fā)W
9、in32應(yīng)用程序(Windows 95/98/2000/XP/NT)的、面向?qū)ο蟮目梢暬晒ぞ?。它的最大?yōu)點就是提供了功能強大的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ù)量,使
10、編程工作變得更加輕松容易。</p><p><b> 二 選題目標(biāo)分析</b></p><p> 商品管理系統(tǒng)功能要求:</p><p> 以鏈表結(jié)構(gòu)的有序表表示某商場家電部的庫存模型,當(dāng)有提貨或進(jìn)貨時需要對該鏈表及時進(jìn)行維護(hù),每個工作日結(jié)束以后,將該鏈表中的數(shù)據(jù)以文件形式保存,每日開始營業(yè)之前,須將文件形式保存的數(shù)據(jù)恢復(fù)成鏈表結(jié)構(gòu)的有序
11、表。</p><p> 鏈表結(jié)構(gòu)的數(shù)據(jù)域 包括家電名稱、品牌、單價和數(shù)量,以單價的升序體現(xiàn)鏈表的有序性。程序功能包括:初始化、創(chuàng)建表、插入、刪除、更新數(shù)據(jù)、查詢及鏈表數(shù)據(jù)與文件之間的轉(zhuǎn)換等。</p><p> 考察核心: 鏈表操作與對文件的操作</p><p> 1 透析選題,構(gòu)建系統(tǒng)框架,設(shè)計功能模塊</p><p> 本著將所學(xué)書
12、本知識融入未來社會需求的原則,對此選題進(jìn)行信息化分析,即將此單一選題的應(yīng)用背景擴大到整個信息管理系統(tǒng):信息管理的應(yīng)用能夠有效地提高管理水平和工作效率,同時也可以最大限度的減少手工操作帶來的錯誤。于是,進(jìn)銷存管理信息系統(tǒng)便應(yīng)運而生。在工廠中,產(chǎn)品的進(jìn)銷存涉及產(chǎn)品原料的采購、庫存、投入生產(chǎn)、報損,甚至有時涉及到銷售,同時,對于產(chǎn)品也有相應(yīng)的生產(chǎn)、庫存、銷售和報損等類似環(huán)節(jié)。超市進(jìn)銷存管理系統(tǒng)是目前應(yīng)用于公司或是企業(yè)進(jìn)銷存管理系統(tǒng)中的典型代表
13、。</p><p><b> 功能模塊設(shè)計:</b></p><p> 1信息管理:用來查詢系統(tǒng)中要用來進(jìn)行進(jìn)貨、出貨操作的商品的信息,一般訪問者都可以使用該功能</p><p> 2日常操作:商品進(jìn)貨與出貨操作;</p><p><b> 3信息查詢:</b></p><
14、;p> A庫存信息查詢:用來查詢庫存的商品的信息,可以按照商品編號、商品名稱和商品類別來查詢,可以將查詢結(jié)果打印輸出。</p><p> B進(jìn)貨信息查詢:用來查詢商品的進(jìn)貨記錄,可以按照商品編號、商品名稱、商品類別和進(jìn)貨日期查詢,可以將查詢結(jié)果打印輸出。</p><p> C出貨信息查詢:用來查詢商品的出貨記錄,可以按照商品編號、商品名稱、商品類別、經(jīng)手人和出貨日期查詢,可以將
15、查詢結(jié)果打印輸出。</p><p><b> 4系統(tǒng)管理</b></p><p> A系統(tǒng)登錄:用來驗證登錄的系統(tǒng)的合法性,只有合法的系統(tǒng)用戶才能登錄系統(tǒng)并且使用系統(tǒng)功能。</p><p> 5關(guān)于:用來顯示程序的名稱、版本、版權(quán),操作系統(tǒng)的登錄用戶名及系統(tǒng)得可用資源等信息</p><p><b>
16、2 設(shè)計特色介紹</b></p><p> 操作人性化:采用MFC圖形化界面,客戶界面友好,使用方便;</p><p> 管理安全性:要求登陸用戶名、密碼,必需輸入正確的用戶名和密碼,確保系統(tǒng)的安全性。如果未登陸或有錯誤將無法進(jìn)行庫存管理操作;</p><p> 操作方便性:能夠方便售貨員前臺零售的操作,使用操作界面人性化。只要輸入商品的條形碼就可
17、以知道這個商品的基本信息,再輸入零售商品的數(shù)量;</p><p> 數(shù)據(jù)實時性:能夠?qū)崟r地反映商品庫存數(shù)據(jù)的輸出,并更新庫存的商品數(shù)量。顯示零售商品信息; </p><p> 編輯一體化:在設(shè)計模塊時,將增加刪除、銷售功能進(jìn)行整合,達(dá)到減少函數(shù)數(shù)量,提高函數(shù)通用性,縮短后臺操作時間;</p><p> 錄入合理化:能輸入有效的超市基本信息、商品供應(yīng)商信息
18、、商品信息,不能對原有的數(shù)據(jù)造成損壞或重復(fù),即要求對錄入的信息進(jìn)行有效性驗證,不合法、不符合規(guī)范的信息拒絕被錄入。</p><p><b> 三 使用說明</b></p><p> 為方便用戶使用,本系統(tǒng)附帶有用戶使用手冊。NOTE.txt</p><p><b> 1程序安裝配置</b></p>&l
19、t;p> 由于使用MFC,在創(chuàng)建類、窗體及控件事件時,系統(tǒng)自動生成</p><p> StdAfx.cpp——在相應(yīng)項目的目錄下產(chǎn)生預(yù)編譯頭文件:</p><p> Stdafx.h ——標(biāo)準(zhǔn)AFX頭文件,用來產(chǎn)生預(yù)編譯的類型信息。</p><p> resource.h——定義了各種資源ID</p><p> GoodMan
20、ager.h—— 函數(shù)說明予類的定義</p><p> GoodManagerDlg.h——系統(tǒng)自動生成得函數(shù)聲明與接口定義</p><p> GoodManagerDlg.cpp——主體程序</p><p> 2操作細(xì)則與功能說明</p><p> 程序編譯組建后,將生成一個EXE文件,如左圖,雙擊,進(jìn)入程序。</p>
21、<p> 進(jìn)入歡迎界面,此時可以進(jìn)行的操作有:顯示當(dāng)前庫存、再如庫存文件、保存庫存文件、退出管理系統(tǒng);</p><p> 查詢當(dāng)前庫存,可選第某一款商品,查詢其條形碼號、單位價格與庫存數(shù)量。如下圖所示:</p><p> 商品名稱顯示的是大類的商品屬性,條形碼號是區(qū)別每一款不同商品的依據(jù),</p><p> 輸入正確的用戶名與密碼,即可使用管理功
22、能:</p><p> 商品信息通過四個列表框顯示出來;</p><p> 下方展開管理界面: </p><p> 此時能夠操作的功能有:</p><p><b> 增加記錄</b></p><p><b> 刪減記錄</b></p><p>
23、;<b> 查找記錄</b></p><p><b> 出售商品</b></p><p><b> 打印報表</b></p><p><b> 時間檢索</b></p><p> 完成對庫存的操作后,保存庫存文件,正常退出管理程序</p&g
24、t;<p> 在下次使用該程序的時候沒,可以調(diào)用原先保存得庫存文件</p><p><b> 功能說明:</b></p><p> 顯示當(dāng)前庫存:a當(dāng)前為初次開啟時,載入預(yù)存庫存信息;</p><p> B 當(dāng)前為開啟文檔時,若無,則新建空文檔,通過管理庫存來修改操作</p><p> 載入庫存文
25、件:打開已有的數(shù)據(jù)文檔文件,并顯示在下方列表內(nèi)</p><p> 保存庫存文件:保存對數(shù)據(jù)文件的操作</p><p> 管理庫存:通過對用戶名和密碼的判斷,確定使能與否</p><p> 增加記錄:1判斷是否為新的商品種類 </p><p> 2 判斷是否為已有商品種類的新的品牌分支</p><p> 3 判
26、斷是否為已有品牌分支的數(shù)量變化</p><p> 通過上述判斷,分不同情況對已有庫存進(jìn)行操作</p><p><b> 刪除記錄:原理同上</b></p><p> 查找記錄:可以選擇不同的查找方式:商品類別與條形碼號</p><p> 出售商品:選定某一款商品,填入出售數(shù)量,即可完成操作,如果所填數(shù)量不在庫存數(shù)
27、量的范圍,則會提醒犯錯</p><p> 打印報表:與并行打印機相連,將庫存文件打印出來</p><p> 時間檢索:添加日歷功能,使用者可以方便地查詢時間</p><p> 備注:由于時間問題,刪除功能沒有完全實現(xiàn)</p><p><b> 四 數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></p><p>
28、1 數(shù)據(jù)結(jié)構(gòu)與定義 </p><p><b> 結(jié)構(gòu)體設(shè)計:</b></p><p> typedef struct _Types</p><p><b> {</b></p><p> char type[10];//保存商品的種類</p><p>
29、Detail *first;//¸指向具體品牌,即條形碼</p><p> struct _Types *next;</p><p><b> }Types;</b></p><p> 2.typedef struct _Detail</p><p><b> {</b><
30、/p><p> Char brand[10];//保存家電的條形碼</p><p> int number;//保存商品的數(shù)量</p><p> int price; //保存商品的價格</p><p> struct _Detail *next;</p><p><b> }De
31、tail;</b></p><p><b> 類定義:</b></p><p> class CGoogsManagerDlg : public CDialog// Construction</p><p><b> {</b></p><p><b> public:
32、</b></p><p> void AddOldBrand(Detail *pos);</p><p> void AddNewBrand(Types *pos,char *name);</p><p> void AddOldKind(Types *pos);</p><p> void AddNewKind(Type
33、s *head,char *kind);</p><p> CGoogsManagerDlg(CWnd* pParent = NULL);</p><p> }將結(jié)構(gòu)體劃歸到類,封裝類</p><p><b> 函數(shù)定義</b></p><p> virtual BOOL OnInitDialog();//系統(tǒng)自
34、定義,初始化界面控件</p><p> afx_msg void OnSysCommand(UINT nID, LPARAM lParam); //系統(tǒng)自定義</p><p> afx_msg void OnPaint();//系統(tǒng)自定義</p><p> afx_msg HCURSOR OnQueryDragIcon();//系統(tǒng)自定義</p>
35、<p> afx_msg void OnManager();//管理控件</p><p> afx_msg void OnCreateNull();//建立新鏈表</p><p> virtual void OnCancel();//退出管理</p><p> afx_msg void OnFlush();//顯示更新數(shù)據(jù)</p>
36、<p> afx_msg void OnCreateWith();//更新鏈表數(shù)據(jù)</p><p> afx_msg void OnSelchangeList1();//顯示商品名稱的列表框</p><p> afx_msg void OnSelchangeList2();/顯示商品條形碼的列表框</p><p> afx_msg void OnS
37、elchangeList3();/顯示商品單價的列表框</p><p> afx_msg void OnSelchangeList4();/顯示商品數(shù)量的列表框</p><p> afx_msg void OnAdd();//增加新商品庫存記錄</p><p> afx_msg void OnDoubleclickedAdd();//增加已有商品庫存記錄<
38、;/p><p> afx_msg void OnSAVEWithFile();//保存庫存記錄至文件</p><p> afx_msg void OnOpenFile();//打開已有的庫存記錄文件</p><p> afx_msg void OnSell();//出售商品</p><p> afx_msg void OnFind();/
39、/按商品名稱查詢商品</p><p> afx_msg void OnFind2();//按條形碼號查詢商品</p><p> afx_msg void OnOutofmemoryProgress1(NMHDR* pNMHDR, LRESULT* pResult);</p><p> afx_msg void OnButton1();//登陸,檢測用戶名與密碼
40、</p><p> afx_msg void OnChangeEdit13();//顯示更新時間</p><p> 2 函數(shù)間數(shù)據(jù)傳遞與數(shù)據(jù)流走向設(shè)計</p><p> 函數(shù)與功能的對應(yīng)由MFC控件的事件對應(yīng),數(shù)據(jù)流走向如下:</p><p><b> 五 功能板塊設(shè)計</b></p><p
41、><b> 解決同名沖突</b></p><p> OnFlush2() </p><p><b> {</b></p><p> int Num=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCount();</p><p> for(in
42、t i=0;i<Num;i++)</p><p><b> {</b></p><p> for(int j=i+1;j<Num;j++)</p><p><b> {</b></p><p> CString temp,temp1;</p><p>
43、((CComboBox*)GetDlgItem(IDC_COMBO1))->GetLBText(i,temp);</p><p> ((CComboBox*)GetDlgItem(IDC_COMBO1))->GetLBText(j,temp1);</p><p> if(!strcmp(temp,temp1))</p><p><b>
44、{</b></p><p> ((CComboBox*)GetDlgItem(IDC_COMBO1))->DeleteString(j);</p><p><b> Num-=1;</b></p><p><b> }</b></p><p><b> }}}&l
45、t;/b></p><p> 功能:解決同商品名的沖突問題,在此情況下,以串比較的方式,刪除同名串,繼續(xù)進(jìn)行數(shù)據(jù)查詢與操作,并對結(jié)果作同目錄下合并顯示</p><p><b> 文件讀取與保存</b></p><p> void CGoogsManagerDlg::OnOpenFile() </p><p>
46、<b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> Types *pC,*tempC;</p><p> Detail *pD,*tempD;</p><p><b> int i,
47、j;</b></p><p> CFileDialog fileDlg(TRUE);</p><p> fileDlg.m_ofn.lpstrTitle="讀取庫存文件";</p><p> fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*
48、.*)\0*.*\0\0";</p><p> if(IDOK==fileDlg.DoModal())</p><p><b> {</b></p><p> CFile file(fileDlg.GetFileName(),CFile::modeRead);</p><p><b> if(
49、!head)</b></p><p> {head=(Types *)malloc(sizeof(Types));</p><p><b> }</b></p><p> head->first=NULL;</p><p> head->next=NULL;</p><
50、;p><b> pC=head;</b></p><p> file.Read(&i,sizeof(int));</p><p> while(i>0)</p><p><b> {</b></p><p> tempC=(Types *)malloc(sizeof(T
51、ypes));</p><p> if(!tempC)</p><p><b> {</b></p><p> MessageBox("讀取失敗");</p><p><b> }</b></p><p> file.Read(tempC,siz
52、eof(Types));</p><p> tempC->next=NULL;//消除不定指針</p><p> tempC->first=NULL;</p><p> pC->next=tempC;</p><p><b> pC=tempC;</b></p><p>
53、; file.Read(&j,sizeof(int));</p><p> for(;j>0;j--)</p><p><b> {</b></p><p> tempD=(Detail *)malloc(sizeof(Detail));</p><p> if(!tempD)</p>
54、<p><b> {</b></p><p> MessageBox("讀取失敗");</p><p><b> }</b></p><p> file.Read(tempD,sizeof(Detail));</p><p> tempD->next
55、=NULL;//消除不定指針</p><p> if(!pC->first)//第一個節(jié)點</p><p> pC->first=tempD;</p><p><b> else</b></p><p> pD->next=tempD;</p><p><b&g
56、t; pD=tempD;</b></p><p><b> }</b></p><p><b> i--;</b></p><p><b> }</b></p><p> file.Close();</p><p><b>
57、; }</b></p><p> MessageBox("讀取成功");</p><p> OnFlush();</p><p><b> }</b></p><p> 功能:傳統(tǒng)的fread 并不能夠配合圖形化界面的親和力,在此,選用CFile,順應(yīng)了人們平日操作軟件的文件保存
58、讀入的使用習(xí)慣</p><p><b> Add函數(shù)</b></p><p> void CGoogsManagerDlg::AddNewKind(Types *head,char *kind)</p><p><b> {</b></p><p> Types *pC=head;</
59、p><p> Types *temp;</p><p> temp=(Types *)malloc(sizeof(Types));</p><p><b> if(!temp)</b></p><p><b> {</b></p><p> MessageBox(&qu
60、ot;添加失敗,任意鍵返回……");</p><p><b> }</b></p><p> strcpy(temp->type,kind);</p><p> temp->first=NULL;</p><p> temp->next=NULL;</p><p&g
61、t; while(pC->next)//pC指向最后一個節(jié)點</p><p> pC=pC->next;</p><p> pC->next=temp;//掛在鏈尾</p><p> AddOldKind(temp);//添加已有品種</p><p><b> }</b></
62、p><p> void CGoogsManagerDlg::AddOldKind(Types *pos)</p><p><b> {</b></p><p> Detail *pD;</p><p> char temp[10];</p><p> GetDlgItem(IDC_EDIT2
63、)->GetWindowText(temp,10);</p><p> pD=pos->first;</p><p><b> while(pD)</b></p><p><b> {</b></p><p> if(!strcmp(pD->brand,temp))//添
64、加已有品牌</p><p><b> break;</b></p><p> pD=pD->next;</p><p><b> }</b></p><p> if(!pD)//添加新品牌</p><p> AddNewBrand(pos,temp);&l
65、t;/p><p> else//添加已有品牌</p><p> AddOldBrand(pD);</p><p><b> }</b></p><p> void CGoogsManagerDlg::AddNewBrand(Types *pos,char *name)</p><p>&l
66、t;b> {</b></p><p> Detail *pre_pD,*pD,*temp;</p><p> temp=(Detail *)malloc(sizeof(Detail));</p><p><b> if(!temp)</b></p><p><b> {</b&
67、gt;</p><p> MessageBox("添加新品牌失敗,任意鍵返回……");</p><p><b> }</b></p><p> strcpy(temp->brand,name);</p><p> char ch1[10],ch2[10];</p><
68、p> int num1,num2;</p><p> GetDlgItem(IDC_EDIT3)->GetWindowText(ch1,10);</p><p> num1=atoi(ch1);</p><p> GetDlgItem(IDC_EDIT4)->GetWindowText(ch2,10);</p><p&g
69、t; num2=atoi(ch2);</p><p> temp->number=num2;</p><p> temp->price=num1;</p><p> pD=pos->first;</p><p> while(pD&&pD->price<temp->price)/
70、/按價格升序?qū)ふ也迦胛恢?lt;/p><p><b> {</b></p><p> pre_pD=pD;</p><p> pD=pD->next;</p><p><b> }</b></p><p> if(pD==pos->first)//插在第一
71、個位置上</p><p><b> {</b></p><p> temp->next=pos->first;</p><p> pos->first=temp;</p><p> MessageBox("添加成功");</p><p><b&g
72、t; }</b></p><p><b> else</b></p><p><b> {</b></p><p> temp->next=pre_pD->next;//插在非第一的位置上</p><p> pre_pD->next=temp;</p&
73、gt;<p> MessageBox("添加成功");</p><p><b> }</b></p><p><b> }</b></p><p> void CGoogsManagerDlg::AddOldBrand(Detail *pos)//添加已有品牌</p>
74、;<p> {int num3;</p><p> char ch3[10];</p><p> GetDlgItem(IDC_EDIT4)->GetWindowText(ch3,10);</p><p> num3=atoi(ch3);</p><p> Detail *pD=pos;</p>
75、<p> pD->number+=num3;</p><p> MessageBox("添加成功");</p><p><b> }</b></p><p> 功能:1判斷是否為新的商品種類 </p><p> 2 判斷是否為已有商品種類的新的品牌分支</p>
76、<p> 3 判斷是否為已有品牌分支的數(shù)量變化</p><p> 通過上述判斷,分不同情況對已有庫存進(jìn)行操作,在Add的主功能函數(shù)中,分情況調(diào)用了創(chuàng)建新商品、增添已有商品的操作函數(shù)。</p><p><b> 窗體列表函數(shù)</b></p><p> OnSelchangeList2()</p><p>
77、<b> {</b></p><p><b> int i;</b></p><p> i=((CListBox*)GetDlgItem(IDC_LIST2))->GetCurSel();</p><p> ((CListBox*)GetDlgItem(IDC_LIST3))->SetCurSel(i)
78、;</p><p> ((CListBox*)GetDlgItem(IDC_LIST4))->SetCurSel(i);</p><p> CString str,str1,str2;</p><p> ((CListBox*)GetDlgItem(IDC_LIST2))->GetText(i,str);</p><p>
79、 ((CListBox*)GetDlgItem(IDC_LIST3))->GetText(i,str1);</p><p> ((CListBox*)GetDlgItem(IDC_LIST4))->GetText(i,str2);</p><p> GetDlgItem(IDC_EDIT2)->SetWindowText(str);</p><p&
80、gt; GetDlgItem(IDC_EDIT3)->SetWindowText(str1);</p><p> GetDlgItem(IDC_EDIT4)->SetWindowText(str2);</p><p><b> }</b></p><p> 功能:程序中多次用到,作用為將鏈表內(nèi)容在列表框中顯示給用戶,并及時刷
81、新。</p><p><b> 用戶名密碼的驗證</b></p><p> void CGoogsManagerDlg::OnButton1() </p><p><b> {</b></p><p> // TODO: Add your control notification handl
82、er code here</p><p> char s1[20],s2[20];</p><p> GetDlgItem(IDC_EDIT12)->GetWindowText(s2,20);</p><p> GetDlgItem(IDC_EDIT11)->GetWindowText(s1,20);</p><p> i
83、f (!(strcmp(s2,"06050602")) && (!strcmp(s1,"5678")))</p><p><b> {</b></p><p> (GetDlgItem(ID_Manager))->EnableWindow(true);</p><p><b
84、> }</b></p><p> else if(strcmp(s2,"06050602")//((strcmp(s2,"06050602"))&&(strcmp(s1,"5678")==1))</p><p><b> {</b></p><p&g
85、t; GetDlgItem(ID_Manager)->EnableWindow(false);</p><p> MessageBox("用戶名錯誤!");</p><p><b> }</b></p><p> else if(strcmp(s1,"5678"))</p>&
86、lt;p><b> {</b></p><p> GetDlgItem(ID_Manager)->EnableWindow(false);</p><p> MessageBox("密碼錯誤!");</p><p><b> }*/</b></p><p>&
87、lt;b> else</b></p><p><b> {</b></p><p> GetDlgItem(ID_Manager)->EnableWindow(false);</p><p><b> }</b></p><p><b> }</b&
88、gt;</p><p> 功用:只有在用戶名與密碼都正確的情況下,管理庫存的功能才能使用,而只要用戶名密碼有任一錯誤,都會彈出警告的對話框,并且管理功能始終灰化不可使用。]</p><p><b> 即時時間的顯示</b></p><p> void CGoogsManagerDlg::OnTimer(UINT nIDEvent)
89、 </p><p><b> { </b></p><p> CTime nowtime = CTime::GetCurrentTime(); </p><p> CString m_strNowTime; </p><p> m_strNowTime = _T("
90、;當(dāng)前時間:")+nowtime.Format(_T("%Y-%m-%d %H:%M:%S")); </p><p> CStatic *stic = (CStatic *)GetDlgItem(IDC_STATIC); </p><p> stic->SetWindowText("sdf");
91、 </p><p> UpdateData(FALSE); </p><p> CDialog::OnTimer(nIDEvent); </p><p><b> } </b></p><p> 功能:在靜態(tài)的文本框內(nèi)顯示動態(tài)的即時時間,取系統(tǒng)時間</p><p><b&
92、gt; 六 程序分析</b></p><p><b> 1 查找算法比較</b></p><p> 目前我們已經(jīng)學(xué)過的查找算法:順序、二分法、二叉排序樹、哈希表的查找、快速查找等多種算法, 按查找目的:</p><p> ? 查找如果只是為了確定指定條件的結(jié)點存在與否,成為靜態(tài)查找;</p>&l
93、t;p> ? 查找是為確定結(jié)點的插入位置或為了刪除找到的結(jié)點,稱為動態(tài)查找。</p><p> 順序存儲線性表的查找是最常見的查找方式。結(jié)點集合按線性表組織,采用順序存儲方式,結(jié)點只含關(guān)鍵碼,并且是整數(shù)。如果線性表無序,則采用順序查找,即從線性表的一端開始逐一查找。而如果線性表有序,則可以使用順序查找、二分法查找或插值查找。經(jīng)過比較,本系統(tǒng)采用順序查找,因為數(shù)據(jù)量不大,此種方式簡單高效。&
94、lt;/p><p><b> 2 實現(xiàn)形式比較</b></p><p> 傳統(tǒng)做課程設(shè)計,多在DOS環(huán)境下操作,然而這樣的界面交互性并不好,再經(jīng)過比較選擇和老師的指引,本系統(tǒng)采用MFC的圖形操作界面。利用VC自帶控件與函數(shù)庫,設(shè)計界面、編寫程序。</p><p> MFC的優(yōu)點十分明顯:MFC 旨在包裝 C/C++ 應(yīng)用程序,這些程序只需做很
95、少的修改或者不做任何修改,就可以在幾乎所有操作系統(tǒng)上運行。然而缺點就是龐大,臃腫,很多的宏使得結(jié)構(gòu)很難看。這給初學(xué)者的使用操作也帶來了許多困難。</p><p> 3 本系統(tǒng)的改進(jìn)意見</p><p> 由于時間倉促與水平有限,許多好的設(shè)想沒有能夠得到實現(xiàn):</p><p> 將每日的進(jìn)出貨記錄分別存儲并與系統(tǒng)自帶日歷相聯(lián)系,達(dá)到點擊日歷上的日期,該天庫存記錄
96、呈現(xiàn)在列表內(nèi);</p><p> 用戶名與密碼可以設(shè)等級,即不同層次的管理者權(quán)限不同,低級的只能察看記錄,售貨員只能進(jìn)行出售操作,而高級管理者可以有權(quán)修改所有記錄與察看所有進(jìn)出貨清單;</p><p> 為增強系統(tǒng)的安全性,有兩點可以改進(jìn):1密碼可以更換 2 庫存文件加密,即無法被查找到和修改;</p><p> 刪除功能沒有能夠?qū)崿F(xiàn),時間受到局限;</
97、p><p> 靜態(tài)表內(nèi)顯示動態(tài)時間,已找到算法,但是沒有能力讓其動態(tài)顯示出來;</p><p><b> 七 技術(shù)討論</b></p><p> 1 如何保證數(shù)據(jù)一致性</p><p> 算法數(shù)據(jù)一致性和完備性,是工程的系統(tǒng)設(shè)計考慮設(shè)計問題,觸發(fā)器函數(shù)可能只是其中的一部分,信息項目的數(shù)量和它們之間的邏輯關(guān)系以及系統(tǒng)
98、的容錯要求等,決定存儲函數(shù)設(shè)計。</p><p> 數(shù)據(jù)的智能在程序設(shè)計中保證數(shù)據(jù)庫中數(shù)據(jù)的一致性一般都是用事務(wù)來解決的。因為事務(wù)有一個特性就是:要成功一起執(zhí)行~要么失敗都不執(zhí)行(一個失敗就用返回)</p><p> 2 MFC下對文件的操作</p><p> MFC對文件的幾個常見的操作1. 文件的查找。其實"CFileDialog"聲
99、明一個對象時,第一個BOOL型參數(shù)用于指定文件的打開或保存,當(dāng)為TRUE時將構(gòu)造一個文件打開對話框,為FALSE時構(gòu)造一個文件保存對話框。文件讀寫最普通的方法是直接使用"CFile"類進(jìn)行,如文件的讀寫可以使用下面的方法:正規(guī)軟件經(jīng)常用到臨時文件,經(jīng)??梢钥吹?quot;C:\Windows\Temp"目錄下有大量的擴展名為".tmp"的文件,這些就是程序運行時建立的臨時文件。它的第一個
100、參數(shù)是建立此臨時文件的路徑,第二個參數(shù)是建立臨時文件名的前綴,第四個參數(shù)用于得到建立的臨時文件名。 </p><p> 3 大容量鏈表中如何快速找到死鏈</p><p> 在鏈表的操作中,經(jīng)常會遇到死鏈或短鏈的情況,如何迅速查找到問題節(jié)點有重要的作用;</p><p> 方法一:再構(gòu)造了一個雙向鏈,不存儲原來的數(shù)據(jù)而存儲節(jié)點指針:
101、 typedef struct _PtrLinkNode { LinkNode* theNode; struct _PtrLinkNode* prev; struct
102、 _PtrLinkNode* next; } PtrLinkNode; 然后在逆轉(zhuǎn)鏈表時把當(dāng)前節(jié)點指針加入到這個雙向鏈表中。當(dāng)逆轉(zhuǎn)結(jié)束時如果這個雙向鏈表的首尾的theNode不相等,則說明沒有死鏈,再逆轉(zhuǎn)回來就可以了;如果相等,則存在死鏈,再在這個雙向鏈表從兩端向中間進(jìn)行首尾比較,直到遇到不相等的兩個節(jié)
103、點,這兩個節(jié)點形成的閉區(qū)間就是原來形成死鏈的節(jié)點,順序與現(xiàn)在在雙向鏈表中的順序相同。把雙向鏈表中位于這個區(qū)間之后的節(jié)點支掉,然后按雙向鏈表的順序重建鏈表就可以恢復(fù)出原來的鏈表并去除死鏈。時間復(fù)雜度和空間復(fù)雜度都是O(N)。</p><p> 方法二:順序遍歷鏈表,記錄最小節(jié)點地址(min_node)、最大節(jié)點地址(max_node)和節(jié)點數(shù)(node_count),并判斷條件node_count
104、<= ((char*)max_node-(char*)min_node)/sizeof(node) + 如果條件不滿足,則說明存在死鏈,并結(jié)束遍歷</p><p> 該方法不需要修改任何內(nèi)容,也不需要預(yù)先知道節(jié)點總數(shù),當(dāng)鏈表存儲較為集中時效率也還可以接受</p><p><b> 八 心得體會</b></p&g
105、t;<p> 這次課程設(shè)計時間不算長,在有限的時間內(nèi),我盡力做好自己的課題,并認(rèn)真查資料寫設(shè)計報告,經(jīng)過一周的努力,學(xué)到了許多新的知識,收獲頗豐:</p><p> 1 善于學(xué)習(xí)別人才會提高自己</p><p> 這次的設(shè)計應(yīng)該是“集大成”,在網(wǎng)上下載了許多鏈表操作的代碼,比較分析各自的優(yōu)劣,向同學(xué)學(xué)習(xí)MFC的基本操作,下載了一些簡易教程補充,在用MFC的過程中以及在對
106、已有代碼的學(xué)習(xí)中模仿中,同學(xué)、網(wǎng)絡(luò)成了我最大的信息來源,比起系統(tǒng)的書本學(xué)習(xí),這樣的方式,更直接快捷,在于同學(xué)的交流的中,我同樣也學(xué)習(xí)到了許多新的知識。</p><p> 2 善于合作才會雙贏</p><p> 在于同學(xué)們交流和在網(wǎng)絡(luò)查資料的過程中,我發(fā)現(xiàn)合作遠(yuǎn)比閉門造車有效得多,在提出新的想法后,同選題的同學(xué)用各自的方法嘗試,實現(xiàn)后將思路與實現(xiàn)方法共享,每個人再結(jié)合自己的情況,形成一套
107、屬于自己的思路方式。我在此次的編程中,得到了繆海路同學(xué)的大力支持,我從他那里學(xué)到了構(gòu)建MFC的基本方法與系統(tǒng)的構(gòu)建模型,而我也在學(xué)習(xí)他人的基礎(chǔ)上有所增益,提出自己的設(shè)想,并在他的幫助下實現(xiàn),而他本人也在幫助我的過程中發(fā)現(xiàn)自己的程序還有一些Bug和可改進(jìn)的地方。善于合作才會雙贏。</p><p><b> 3 敢于動手打代碼</b></p><p> 這個打字有雙重
108、含義,一個是“打字”之意,代表編程要多動手,在理論上掌握算法思想的基礎(chǔ)上要通過自己的整合來真正實實現(xiàn)。第二個意思是“批判”,學(xué)了C語言,我們會編程,而學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),我們應(yīng)該掌握如何更好地編程,要能夠分析代碼的優(yōu)缺點,并在實際應(yīng)用中將各種算法思想融會貫通、取其精華為我所用。用MSDN Library 查函數(shù)</p><p> 4 善于利用輔助工具</p><p> 此次的操作平臺仍是我們
109、熟悉的VC 6.0,然而編程過程中,用到了許多輔助軟件,這大大提高了工作效率,如下:</p><p> VisualAssist 可以大幅度提高輸入代碼速度的一個工具,雖然現(xiàn)在.Net里面已經(jīng)自帶了這種類似的智能工具,但是VC里面還是沒有。</p><p> MSDN Library 用來查找函數(shù),這在類的事件函數(shù)對應(yīng)得過程中顯得十分有用,本系統(tǒng)的許多的函數(shù)都來自于此。</
110、p><p> Spy++ 是一個基于 Win32 的實用工具,它提供系統(tǒng)的進(jìn)程、線程、窗口和窗口消息的圖形視圖</p><p><b> 九 參考文獻(xiàn)與附錄</b></p><p> 1.《數(shù)據(jù)結(jié)構(gòu)》 晉良潁,人民郵電出版社,2002年</p><p> 2.《數(shù)據(jù)結(jié)構(gòu)算法設(shè)計指導(dǎo)》 胡學(xué)鋼著,清華大學(xué)出版
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計報告-商品管理系統(tǒng)
- c++課程設(shè)計報告--超市商品管理系統(tǒng)
- c++課程設(shè)計-商品管理系統(tǒng)
- vc++課程設(shè)計報告-小型超市商品管理系統(tǒng)
- vc++課程設(shè)計報告-小型超市商品管理系統(tǒng)
- 藥品管理系統(tǒng)課程設(shè)計報告
- c小型商品管理系統(tǒng)-課程設(shè)計說明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---商品管理軟件
- 公益物品管理系統(tǒng)課程設(shè)計
- 課程設(shè)計報告--商品進(jìn)銷存管理系統(tǒng)
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告--商品貨架管理系統(tǒng)
- c語言課程設(shè)計-產(chǎn)品管理系統(tǒng)
- 商品銷售管理系統(tǒng)課程設(shè)計
- jsp課程設(shè)計--商品書籍管理系統(tǒng)
- 課程設(shè)計--商品銷售管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計報告---商品銷售管理系統(tǒng)
- 商品房銷售系統(tǒng)課程設(shè)計報告
- 數(shù)據(jù)庫超市商品庫存管理系統(tǒng)課程設(shè)計報告
- c語言課程設(shè)計-- 商品庫存管理系統(tǒng)
- 商品信息管理課程設(shè)計報告
評論
0/150
提交評論