2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  數據結構課程設計</b></p><p>  選題: 商品管理系統</p><p><b>  姓 名: </b></p><p><b>  學 號: </b></p><p><b>  指導老師: </b>&

2、lt;/p><p><b>  目   錄</b></p><p>  一 開發(fā)工具介紹 3</p><p>  1簡介操作平臺與支持軟件</p><p>  二 選題目標分析

3、 3</p><p>  1 透析選題,構建系統框架,設計功能模塊</p><p><b>  2 設計特色介紹</b></p><p>  三 使用說明 5<

4、/p><p><b>  1程序安裝配置</b></p><p>  2操作細則與功能說明</p><p>  四 數據結構設計 8</p><p><b>  1 數據構成與定義</b></p&

5、gt;<p>  2 函數間數據傳遞與數據流走向設計</p><p>  五 功能板塊分析 11</p><p><b>  1 特色函數介紹</b></p><p><b>  2主功能模塊分析</b><

6、;/p><p>  3庫存操作(增加、刪除、出售、查找)</p><p>  六 程序比較分析 15</p><p>  1 比較各函數不同算法優(yōu)劣,選擇高效核心算法</p><p>  2對本系統的改進意見</p><p>

7、;  七 技術討論 16</p><p>  1 如何保證數據一致性</p><p>  2 MFC下對文件的操作</p><p>  3 大容量鏈表中如何快速找到死鏈</p><p>  八 心得體會

8、 17</p><p>  九 參考文獻與附錄 19</p><p><b>  一 開發(fā)工具介紹</b></p><p>  Visual C++6.0是微軟公司推出的開發(fā)W

9、in32應用程序(Windows 95/98/2000/XP/NT)的、面向對象的可視化集成工具。它的最大優(yōu)點就是提供了功能強大的MFC類庫,MFC是一個很大的C++類層次結構,其中封裝了大量的類及其函數,很多Windows程序所共有的標準內容可以由MFC的類來提供,MFC類為這些內容提供了用戶接口的標準實現方法,程序員所要做的就是通過預定義的接口把具體應用程序特有的東西填入這個輪廓,這將簡化編程工作,大大的減少程序員編寫的代碼數量,使

10、編程工作變得更加輕松容易。</p><p><b>  二 選題目標分析</b></p><p>  商品管理系統功能要求:</p><p>  以鏈表結構的有序表表示某商場家電部的庫存模型,當有提貨或進貨時需要對該鏈表及時進行維護,每個工作日結束以后,將該鏈表中的數據以文件形式保存,每日開始營業(yè)之前,須將文件形式保存的數據恢復成鏈表結構的有序

11、表。</p><p>  鏈表結構的數據域 包括家電名稱、品牌、單價和數量,以單價的升序體現鏈表的有序性。程序功能包括:初始化、創(chuàng)建表、插入、刪除、更新數據、查詢及鏈表數據與文件之間的轉換等。</p><p>  考察核心: 鏈表操作與對文件的操作</p><p>  1 透析選題,構建系統框架,設計功能模塊</p><p>  本著將所學書

12、本知識融入未來社會需求的原則,對此選題進行信息化分析,即將此單一選題的應用背景擴大到整個信息管理系統:信息管理的應用能夠有效地提高管理水平和工作效率,同時也可以最大限度的減少手工操作帶來的錯誤。于是,進銷存管理信息系統便應運而生。在工廠中,產品的進銷存涉及產品原料的采購、庫存、投入生產、報損,甚至有時涉及到銷售,同時,對于產品也有相應的生產、庫存、銷售和報損等類似環(huán)節(jié)。超市進銷存管理系統是目前應用于公司或是企業(yè)進銷存管理系統中的典型代表

13、。</p><p><b>  功能模塊設計:</b></p><p>  1信息管理:用來查詢系統中要用來進行進貨、出貨操作的商品的信息,一般訪問者都可以使用該功能</p><p>  2日常操作:商品進貨與出貨操作;</p><p><b>  3信息查詢:</b></p><

14、;p>  A庫存信息查詢:用來查詢庫存的商品的信息,可以按照商品編號、商品名稱和商品類別來查詢,可以將查詢結果打印輸出。</p><p>  B進貨信息查詢:用來查詢商品的進貨記錄,可以按照商品編號、商品名稱、商品類別和進貨日期查詢,可以將查詢結果打印輸出。</p><p>  C出貨信息查詢:用來查詢商品的出貨記錄,可以按照商品編號、商品名稱、商品類別、經手人和出貨日期查詢,可以將

15、查詢結果打印輸出。</p><p><b>  4系統管理</b></p><p>  A系統登錄:用來驗證登錄的系統的合法性,只有合法的系統用戶才能登錄系統并且使用系統功能。</p><p>  5關于:用來顯示程序的名稱、版本、版權,操作系統的登錄用戶名及系統得可用資源等信息</p><p><b>  

16、2 設計特色介紹</b></p><p>  操作人性化:采用MFC圖形化界面,客戶界面友好,使用方便;</p><p>  管理安全性:要求登陸用戶名、密碼,必需輸入正確的用戶名和密碼,確保系統的安全性。如果未登陸或有錯誤將無法進行庫存管理操作;</p><p>  操作方便性:能夠方便售貨員前臺零售的操作,使用操作界面人性化。只要輸入商品的條形碼就可

17、以知道這個商品的基本信息,再輸入零售商品的數量;</p><p>  數據實時性:能夠實時地反映商品庫存數據的輸出,并更新庫存的商品數量。顯示零售商品信息; </p><p>  編輯一體化:在設計模塊時,將增加刪除、銷售功能進行整合,達到減少函數數量,提高函數通用性,縮短后臺操作時間;</p><p>  錄入合理化:能輸入有效的超市基本信息、商品供應商信息

18、、商品信息,不能對原有的數據造成損壞或重復,即要求對錄入的信息進行有效性驗證,不合法、不符合規(guī)范的信息拒絕被錄入。</p><p><b>  三 使用說明</b></p><p>  為方便用戶使用,本系統附帶有用戶使用手冊。NOTE.txt</p><p><b>  1程序安裝配置</b></p>&l

19、t;p>  由于使用MFC,在創(chuàng)建類、窗體及控件事件時,系統自動生成</p><p>  StdAfx.cpp——在相應項目的目錄下產生預編譯頭文件:</p><p>  Stdafx.h ——標準AFX頭文件,用來產生預編譯的類型信息。</p><p>  resource.h——定義了各種資源ID</p><p>  GoodMan

20、ager.h—— 函數說明予類的定義</p><p>  GoodManagerDlg.h——系統自動生成得函數聲明與接口定義</p><p>  GoodManagerDlg.cpp——主體程序</p><p>  2操作細則與功能說明</p><p>  程序編譯組建后,將生成一個EXE文件,如左圖,雙擊,進入程序。</p>

21、<p>  進入歡迎界面,此時可以進行的操作有:顯示當前庫存、再如庫存文件、保存庫存文件、退出管理系統;</p><p>  查詢當前庫存,可選第某一款商品,查詢其條形碼號、單位價格與庫存數量。如下圖所示:</p><p>  商品名稱顯示的是大類的商品屬性,條形碼號是區(qū)別每一款不同商品的依據,</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>  在下次使用該程序的時候沒,可以調用原先保存得庫存文件</p><p><b>  功能說明:</b></p><p>  顯示當前庫存:a當前為初次開啟時,載入預存庫存信息;</p><p>  B 當前為開啟文檔時,若無,則新建空文檔,通過管理庫存來修改操作</p><p>  載入庫存文

25、件:打開已有的數據文檔文件,并顯示在下方列表內</p><p>  保存庫存文件:保存對數據文件的操作</p><p>  管理庫存:通過對用戶名和密碼的判斷,確定使能與否</p><p>  增加記錄:1判斷是否為新的商品種類 </p><p>  2 判斷是否為已有商品種類的新的品牌分支</p><p>  3 判

26、斷是否為已有品牌分支的數量變化</p><p>  通過上述判斷,分不同情況對已有庫存進行操作</p><p><b>  刪除記錄:原理同上</b></p><p>  查找記錄:可以選擇不同的查找方式:商品類別與條形碼號</p><p>  出售商品:選定某一款商品,填入出售數量,即可完成操作,如果所填數量不在庫存數

27、量的范圍,則會提醒犯錯</p><p>  打印報表:與并行打印機相連,將庫存文件打印出來</p><p>  時間檢索:添加日歷功能,使用者可以方便地查詢時間</p><p>  備注:由于時間問題,刪除功能沒有完全實現</p><p><b>  四 數據結構設計</b></p><p>  

28、1 數據結構與定義 </p><p><b>  結構體設計:</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;//保存商品的數量</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>  }將結構體劃歸到類,封裝類</p><p><b>  函數定義</b></p><p>  virtual BOOL OnInitDialog();//系統自

34、定義,初始化界面控件</p><p>  afx_msg void OnSysCommand(UINT nID, LPARAM lParam); //系統自定義</p><p>  afx_msg void OnPaint();//系統自定義</p><p>  afx_msg HCURSOR OnQueryDragIcon();//系統自定義</p>

35、<p>  afx_msg void OnManager();//管理控件</p><p>  afx_msg void OnCreateNull();//建立新鏈表</p><p>  virtual void OnCancel();//退出管理</p><p>  afx_msg void OnFlush();//顯示更新數據</p>

36、<p>  afx_msg void OnCreateWith();//更新鏈表數據</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();/顯示商品數量的列表框</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 函數間數據傳遞與數據流走向設計</p><p>  函數與功能的對應由MFC控件的事件對應,數據流走向如下:</p><p><b>  五 功能板塊設計</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ù)進行數據查詢與操作,并對結果作同目錄下合并顯示</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>  功能:傳統的fread 并不能夠配合圖形化界面的親和力,在此,選用CFile,順應了人們平日操作軟件的文件保存

58、讀入的使用習慣</p><p><b>  Add函數</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、/按價格升序尋找插入位置</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 判斷是否為已有品牌分支的數量變化</p><p>  通過上述判斷,分不同情況對已有庫存進行操作,在Add的主功能函數中,分情況調用了創(chuàng)建新商品、增添已有商品的操作函數。</p><p><b>  窗體列表函數</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>  功能:程序中多次用到,作用為將鏈表內容在列表框中顯示給用戶,并及時刷

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、;當前時間:")+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)的文本框內顯示動態(tài)的即時時間,取系統時間</p><p><b&

92、gt;  六 程序分析</b></p><p><b>  1 查找算法比較</b></p><p>  目前我們已經學過的查找算法:順序、二分法、二叉排序樹、哈希表的查找、快速查找等多種算法, 按查找目的:</p><p>  ? 查找如果只是為了確定指定條件的結點存在與否,成為靜態(tài)查找;</p>&l

93、t;p>  ? 查找是為確定結點的插入位置或為了刪除找到的結點,稱為動態(tài)查找。</p><p>  順序存儲線性表的查找是最常見的查找方式。結點集合按線性表組織,采用順序存儲方式,結點只含關鍵碼,并且是整數。如果線性表無序,則采用順序查找,即從線性表的一端開始逐一查找。而如果線性表有序,則可以使用順序查找、二分法查找或插值查找。經過比較,本系統采用順序查找,因為數據量不大,此種方式簡單高效。&

94、lt;/p><p><b>  2 實現形式比較</b></p><p>  傳統做課程設計,多在DOS環(huán)境下操作,然而這樣的界面交互性并不好,再經過比較選擇和老師的指引,本系統采用MFC的圖形操作界面。利用VC自帶控件與函數庫,設計界面、編寫程序。</p><p>  MFC的優(yōu)點十分明顯:MFC 旨在包裝 C/C++ 應用程序,這些程序只需做很

95、少的修改或者不做任何修改,就可以在幾乎所有操作系統上運行。然而缺點就是龐大,臃腫,很多的宏使得結構很難看。這給初學者的使用操作也帶來了許多困難。</p><p>  3 本系統的改進意見</p><p>  由于時間倉促與水平有限,許多好的設想沒有能夠得到實現:</p><p>  將每日的進出貨記錄分別存儲并與系統自帶日歷相聯系,達到點擊日歷上的日期,該天庫存記錄

96、呈現在列表內;</p><p>  用戶名與密碼可以設等級,即不同層次的管理者權限不同,低級的只能察看記錄,售貨員只能進行出售操作,而高級管理者可以有權修改所有記錄與察看所有進出貨清單;</p><p>  為增強系統的安全性,有兩點可以改進:1密碼可以更換 2 庫存文件加密,即無法被查找到和修改;</p><p>  刪除功能沒有能夠實現,時間受到局限;</

97、p><p>  靜態(tài)表內顯示動態(tài)時間,已找到算法,但是沒有能力讓其動態(tài)顯示出來;</p><p><b>  七 技術討論</b></p><p>  1 如何保證數據一致性</p><p>  算法數據一致性和完備性,是工程的系統設計考慮設計問題,觸發(fā)器函數可能只是其中的一部分,信息項目的數量和它們之間的邏輯關系以及系統

98、的容錯要求等,決定存儲函數設計。</p><p>  數據的智能在程序設計中保證數據庫中數據的一致性一般都是用事務來解決的。因為事務有一個特性就是:要成功一起執(zhí)行~要么失敗都不執(zhí)行(一個失敗就用返回)</p><p>  2 MFC下對文件的操作</p><p>  MFC對文件的幾個常見的操作1. 文件的查找。其實"CFileDialog"聲

99、明一個對象時,第一個BOOL型參數用于指定文件的打開或保存,當為TRUE時將構造一個文件打開對話框,為FALSE時構造一個文件保存對話框。文件讀寫最普通的方法是直接使用"CFile"類進行,如文件的讀寫可以使用下面的方法:正規(guī)軟件經常用到臨時文件,經??梢钥吹?quot;C:\Windows\Temp"目錄下有大量的擴展名為".tmp"的文件,這些就是程序運行時建立的臨時文件。它的第一個

100、參數是建立此臨時文件的路徑,第二個參數是建立臨時文件名的前綴,第四個參數用于得到建立的臨時文件名。 </p><p>  3 大容量鏈表中如何快速找到死鏈</p><p>  在鏈表的操作中,經常會遇到死鏈或短鏈的情況,如何迅速查找到問題節(jié)點有重要的作用;</p><p>  方法一:再構造了一個雙向鏈,不存儲原來的數據而存儲節(jié)點指針:    

101、 typedef   struct   _PtrLinkNode     {         LinkNode*   theNode;         struct   _PtrLinkNode*   prev;         struct

102、   _PtrLinkNode*   next;     }   PtrLinkNode;         然后在逆轉鏈表時把當前節(jié)點指針加入到這個雙向鏈表中。當逆轉結束時如果這個雙向鏈表的首尾的theNode不相等,則說明沒有死鏈,再逆轉回來就可以了;如果相等,則存在死鏈,再在這個雙向鏈表從兩端向中間進行首尾比較,直到遇到不相等的兩個節(jié)

103、點,這兩個節(jié)點形成的閉區(qū)間就是原來形成死鏈的節(jié)點,順序與現在在雙向鏈表中的順序相同。把雙向鏈表中位于這個區(qū)間之后的節(jié)點支掉,然后按雙向鏈表的順序重建鏈表就可以恢復出原來的鏈表并去除死鏈。時間復雜度和空間復雜度都是O(N)。</p><p>  方法二:順序遍歷鏈表,記錄最小節(jié)點地址(min_node)、最大節(jié)點地址(max_node)和節(jié)點數(node_count),并判斷條件node_count  

104、<=   ((char*)max_node-(char*)min_node)/sizeof(node)   +  如果條件不滿足,則說明存在死鏈,并結束遍歷</p><p>  該方法不需要修改任何內容,也不需要預先知道節(jié)點總數,當鏈表存儲較為集中時效率也還可以接受</p><p><b>  八 心得體會</b></p&g

105、t;<p>  這次課程設計時間不算長,在有限的時間內,我盡力做好自己的課題,并認真查資料寫設計報告,經過一周的努力,學到了許多新的知識,收獲頗豐:</p><p>  1 善于學習別人才會提高自己</p><p>  這次的設計應該是“集大成”,在網上下載了許多鏈表操作的代碼,比較分析各自的優(yōu)劣,向同學學習MFC的基本操作,下載了一些簡易教程補充,在用MFC的過程中以及在對

106、已有代碼的學習中模仿中,同學、網絡成了我最大的信息來源,比起系統的書本學習,這樣的方式,更直接快捷,在于同學的交流的中,我同樣也學習到了許多新的知識。</p><p>  2 善于合作才會雙贏</p><p>  在于同學們交流和在網絡查資料的過程中,我發(fā)現合作遠比閉門造車有效得多,在提出新的想法后,同選題的同學用各自的方法嘗試,實現后將思路與實現方法共享,每個人再結合自己的情況,形成一套

107、屬于自己的思路方式。我在此次的編程中,得到了繆海路同學的大力支持,我從他那里學到了構建MFC的基本方法與系統的構建模型,而我也在學習他人的基礎上有所增益,提出自己的設想,并在他的幫助下實現,而他本人也在幫助我的過程中發(fā)現自己的程序還有一些Bug和可改進的地方。善于合作才會雙贏。</p><p><b>  3 敢于動手打代碼</b></p><p>  這個打字有雙重

108、含義,一個是“打字”之意,代表編程要多動手,在理論上掌握算法思想的基礎上要通過自己的整合來真正實實現。第二個意思是“批判”,學了C語言,我們會編程,而學習數據結構,我們應該掌握如何更好地編程,要能夠分析代碼的優(yōu)缺點,并在實際應用中將各種算法思想融會貫通、取其精華為我所用。用MSDN Library 查函數</p><p>  4 善于利用輔助工具</p><p>  此次的操作平臺仍是我們

109、熟悉的VC 6.0,然而編程過程中,用到了許多輔助軟件,這大大提高了工作效率,如下:</p><p>  VisualAssist 可以大幅度提高輸入代碼速度的一個工具,雖然現在.Net里面已經自帶了這種類似的智能工具,但是VC里面還是沒有。</p><p>  MSDN Library 用來查找函數,這在類的事件函數對應得過程中顯得十分有用,本系統的許多的函數都來自于此。</

110、p><p>  Spy++ 是一個基于 Win32 的實用工具,它提供系統的進程、線程、窗口和窗口消息的圖形視圖</p><p><b>  九 參考文獻與附錄</b></p><p>  1.《數據結構》 晉良潁,人民郵電出版社,2002年</p><p>  2.《數據結構算法設計指導》 胡學鋼著,清華大學出版

溫馨提示

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

評論

0/150

提交評論