數據結構課程設計-進銷存貨物管理系統_第1頁
數據結構課程設計-進銷存貨物管理系統_第2頁
數據結構課程設計-進銷存貨物管理系統_第3頁
數據結構課程設計-進銷存貨物管理系統_第4頁
數據結構課程設計-進銷存貨物管理系統_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、桂林電子科技大學綜合設計說明書用紙 數據結構與算法數據結構與算法課程設計說明書課程設計說明書題題 目:目: 進銷存貨物管理系統進銷存貨物管理系統 學學 院:院: 計算機科學與工程學院計算機科學與工程學院 專專 業業: 姓姓 名名: 學學 號號: 指導教師:指導教師: 張瑞霞張瑞霞 2014 年年 10 月月 11 日日桂林電子科技大學綜合設計說明書用紙目 錄引言 .31 系統概述 .32 需求分析 .32.1 系統需求.32.2 開發環境.43 詳細設計 .44 所遇到的問題和分析解決 .175 系統特色及關鍵技術 .206 結論 .21參考文獻 .22桂林電子科技大學綜合設計說明書用紙 第

2、1 頁 引言 隨著計算機技術的發展,經濟大環境的變化使得規模經濟的優勢不再突出。固定的硬設備、人員數量、大量資金等資源投入占企業效益的比重變少,而軟投入如管理、人力資源價值、服務、品牌附加值、渠道等要素資源的投入卻能增加企業的效益。 “速度沖擊規模”的速度經濟概念已經向企業提出,計算機技術已經滲透到各個領域,成為各個行業必不可少的工具,特別是 internet 技術的推廣和信息高速公路的建立,使 IT 產業在市場競爭中越發顯示獨特的優勢,步入信息化的時代,有巨大的數據信息等待加工處理和傳輸,這使得對數據的進一步開發和利用顯得尤為迫切。倉庫作為一總貨品資源的集散地,貨品的種類繁多,包含很多的信息

3、數據管理。據調查得知,以前倉庫進行信息管理的方式主要是基于文本、表格等紙介質的手工處理,對于貨品的出入庫情況的統計和核實等往往采用對賬本的的人工檢查,對管理者的管理權限的不受約束,任何人都可以查看,引起資料外泄。另外,數據信息處理工作量大,容易出錯,不宜查找。而且,一般儲存情況是記錄在賬本上的,倉庫貨物管理人員也只是當時記得比較清楚,時間長了進行查詢會造成費事、費時、費力,如對很長時間的貨物以及大量貨物進行管理就更加困難了。因此我們很有必要建立一個倉庫進銷存貨物管理系統,使貨物管理工作更加規范化、系統化、程序化,提高信息處理的速度和準確性。1 系統概述 進銷存貨物管理系統主要運用了數據結構中線

4、性表的鏈式存儲,鏈式存儲空間的可擴展性大,將鏈表中的數據以文件的形式保存,程序功能包括初始化、創建表、插入、刪除和查找等,以最少的內存使用和最高的效率為原則,實現客戶的需求。進入主菜單,選擇相應的功能按照提示即可進入相應的操作。本系統的主要功能如下:(1)用戶自行注冊登錄,保證倉庫貨物信息的保密性。(2)倉庫各種貨物信息的輸入,主要包括貨物標號、名稱、產地、入庫價格、入庫 時間、現存貨物數量、已經銷售數量、平均銷售價格等。(3)倉庫各種貨物信息的查詢、修改和維護。(4)對倉庫中損壞貨物信息的刪除。(5)倉庫貨物信息列表的生成顯示。(6)實現貨物信息對文本中的保存。2 需求分析2.1 系統需求為

5、了能夠提高內存的利用及各功能的實現,程序主要使用了:(1)線性表的鏈式存儲,分配存儲空間,空間可擴展性強,方便頻繁的錄入、插入、查桂林電子科技大學綜合設計說明書用紙 第 2 頁 找、刪除和排序等而不占用多余的內存。 (主要應用)(2)文件文本的讀取與寫入,為了方便用戶更加快速的執行管理操作。(3)結構體的定義,定義了貨物結構體。(4)登錄用戶時的字符串讀取及驗證。進銷存貨物管理系統主要實現以下函數模塊功能:(1)錄入貨物信息函數 LinkList CreateList(void) /運用鏈式存儲 貨物信息寫入文件的函數 void file_write(ListNode *p) 文件中的信息讀出

6、的函數 LinkList file_read()(2)查找貨物函數 vvoid FindNode()(3)修改信息函數 void ModNode()(4)插入貨物函數 void InsertNode()(5)刪除貨物函數 void DelNode()(6)貨物信息排序函數 void goodsrank() (7)統計貨物信息函數 void goods_count()(8)密碼登陸系統函數 void apply();int load();void key() 系統能夠實現初始化、創建表、插入、刪除和查找等功能,使得貨物管理更加規范化、系統化、程序化,方便貨物管理員對倉庫進行科學高效管理。2.2

7、開發環境 系統主要在 Microsoft Visual C+ 6.0 的環境下開發。Visual C+ 6.0,簡稱 VC 或者 VC6.0,是微軟推出的一款 C+編譯器,將“高級語言”翻譯為“機器語言(低級語言) ”的程序。Visual C+是一個功能強大的可視化軟件開發工具。自 1993 年 Microsoft 公司推出 Visual C+1.0 后,隨著其新版本的不斷問世,Visual C+已成為專業程序員進行軟件開發的首選工具。雖然微軟公司推出了 Visual C+.NET(Visual C+7.0),但它的應用的很大的局限性,只適用于 Windows 2000、Windows XP

8、和 Windows NT4.0。所以實際中,更多的是以 Visual C+6.0 為平臺。Visual C+6.0 不僅是一個 C+ 編譯器,而且是一個基于 Windows 操作系統的可視化集成開發環境(integrated development environment,IDE) 。Visual C+6.0 由許多組件組成,包括編輯器、調試器以及程序向導 AppWizard、類向導 Class Wizard 等開發工具。 3 詳細設計3.1 設計框架設計框架桂林電子科技大學綜合設計說明書用紙 第 3 頁 圖 3.1:設計框架圖3.2 程序主要流程圖程序主要流程圖桂林電子科技大學綜合設計說明書

9、用紙 第 4 頁 圖 3.2:程序主要流程圖3.3 主要函數設計主要函數設計3.3.1 登陸函數登陸函數啟動系統,進入界面,會有兩個選項:1、新用戶注冊2、新用戶登陸新用戶注冊: 執行此函數,程序會在工程目錄下自動生成一個 key.txt 文件,用于保存新用戶申請的賬號和密碼。void apply() /新用戶注冊int i,flag=1;FILE *fp;char name20,key20;flushall();printf(n*新用戶注冊*n);printf(ttt 用戶名(不能為空):);scanf(%s,name);flushall();printf(ttt 密碼(不能為空):);fo

10、r(i=0;i=20;i+) keyi=getch();if(keyi=13)keyi=0;break;printf(*);fp=fopen(key.txt,w);if(fp=NULL)printf(the file can not open!);flag=0;exit(1);fprintf(fp,%s %s,name,key);fclose(fp);新用戶登陸: 函數通過讀取 key.txt 文件獲取新用戶之前申請的賬號和密碼,以驗證輸入是否正確,從而是否允許用戶進入系統。int load() /用戶登錄桂林電子科技大學綜合設計說明書用紙 第 5 頁 FILE *fp;int i;char

11、name20,key20;char name120,key120;fp=fopen(key.txt,r);fscanf(fp,%s %s,name,key); fclose(fp);printf(n*新用戶登陸*n); printf(ttt 用戶名(不能為空):); scanf(%s,name1);flushall();printf(ttt 密碼(不能為空):); for(i=0;idata.NO);/輸入貨物標號scanf(%s,);/輸入貨物名稱scanf(%s,p-data.area);/輸入貨物產地scanf(%f,&p-data.price);/輸入貨物入庫價格

12、scanf(%s,p-data.time);/輸入貨物入庫時間scanf(%d,&p-data.number1);/輸入貨物入庫數量scanf(%d,&p-data.number2);/輸入貨物已經銷售數量scanf(%f,&p-data.sellprice);/輸入貨物銷售價格rear-next=p; /新結點連接到尾結點之后rear=p; /尾指針指向新結點rear-next=NULL; /終端結點指針置空file_write(head);/ 保存輸入的貨物信息建立貨物信息界面:桂林電子科技大學綜合設計說明書用紙 第 8 頁 圖 3.5:建立貨物信息界面(1)圖 3.5:建立貨物信息界面(

13、2).4 貨物信息的插入貨物信息的插入 本系統設置了貨物一共有八個屬性,分別是貨物的標號、貨物名稱、貨物產地、入庫價格、入庫時間、現存貨物數量、已經銷售貨物數量、銷售平均單價。在進行貨物信息的插入時應該按照上面的順序依次插入,插入的位置也可以自由選擇。插入完成后系桂林電子科技大學綜合設計說明書用紙 第 9 頁 統會提醒文件需要保存的位置。 在進行貨物信息的插入前,系統會提示用戶輸入插入點。根據以下函數可以找到相應的插入點while(p2&knext;k=k+1; i 為貨物插入的點。p1=(ListNode*)malloc(sizeof(ListNode);節點申請成功后輸入貨

14、物的信息,p1 節點將保存貨物的信息。p1-next=p2-next;p2-next=p1;/將新節點插入貨物信息插入的界面: 圖 3.6:貨物信息插入的界面(1)桂林電子科技大學綜合設計說明書用紙 第 10 頁 圖 3.6:貨物信息插入的界面(2).5 貨物信息的查詢貨物信息的查詢查找貨物是信息管理的基本功能,當數據很多時怎么快速找到貨物對管理員來說很重要,系統調用查找函數模塊,顯示查找菜單。根據提示輸入需要查找的“貨物標號”或者“貨物名稱”進行查找,查找成功,用戶會看到查找貨物的詳細信息,如沒有該貨物,則查找失敗,查找的主要函數設計:p=p0=file_read();/讀取

15、文件p=p-next;scanf(%s,&pp);/輸入查找的方式,a 為按照貨物的標號查找,b 為按照貨物的名稱查找,設計兩種方式查找貨物的信息,更利于管理員對貨物進行管理getchar(); if (pp=a|pp=A) printf(請輸入要查找的貨物標號:);scanf(%s,&num);while (p&strcmp(p-data.NO,num)!=0)p=p-next;else /按照貨物的名稱查找if (pp=b|pp=B) 桂林電子科技大學綜合設計說明書用紙 第 11 頁 printf( 請輸入要查找的貨物名稱:);scanf(%s,&name);while(p&strcmp(

16、,name)!=0)p=p-next; 以上函數是找到貨物的儲存位置,而找到貨物之后將貨物打印出來,用戶就可以看到所要查找的貨物的相應信息了。 貨物查詢的界面:圖 3.7:貨物查詢的界面.6 貨物信息的刪除貨物信息的刪除 刪除是一項對數據管理的功能,將過期的貨物信息刪除,以免影響倉庫管理,刪除函數的原理和查找函數原理一樣,只是在輸入“貨物標號”找到對應的貨物后刪除該結點,就會刪除該貨物的所有詳細信息,并提示用戶保存! p0=file_read();/調用此函數讀取所要刪除的文件信息 while(p!=NULL) if(strcmp(p-data.NO,no

17、)=0)/找到相應的結點p1-next=p-next;free(p);/刪除鏈表中的結點flag=1;break; p1=p; p=p-next;flag=0;刪除成功后,新的貨物信息會打印出來,并提示用戶保存。貨物信息刪除的界面:桂林電子科技大學綜合設計說明書用紙 第 12 頁 圖 3.8:貨物信息刪除的界面.7 貨物信息的輸出貨物信息的輸出軟件的此功能能夠使用戶獲得貨物的全部信息,利于管理員對貨物的管理。p0=file_read();p0=p0-next;printf(貨物標號 貨物名稱 貨物產地 入庫價格 入庫時間 現存數量 已售數量 銷售均價n);while(p0!=N

18、ULL)printf(%7s %10s %10s %8.2f %10s %10d %10d %8.2f, p0-data.NO,,p0-data.area,p0-data.price,p0-data.time, p0-data.number1,p0-data.number2,p0-data.sellprice);p0=p0-next;貨物信息輸出界面:圖 3.9:貨物信息輸出界面桂林電子科技大學綜合設計說明書用紙 第 13 頁 .8 貨物信息的修改貨物信息的修改 軟件的此項功能限制用戶只能修改貨物的標號,貨物名稱,貨物產地,入庫價格,入庫時間,不能修改貨

19、物的已售數量和銷售平均單價兩個屬性,如需要修改此兩項信息,需要進入“貨物管理的銷售更新”選項進行操作。對貨物的信息修改,就是對鏈表的操作,首先需要找到所要修改的結點,根據函數:scanf(%s,snum);/系統提示用戶輸入所要修改貨物的標號 while(p1!=NULL)if(strcmp(p1-data.NO,snum)=0) flag=1; break; p1=p1-next;貨物信息的修改界面:圖 3.10:貨物信息修改界面.9 貨物信息的銷售更新貨物信息的銷售更新 對貨物的銷售更新,需要對其銷售數量和銷售均價進行更新。在輸入的時候,系統會提示用戶輸入銷售的數量和后面銷

20、售的均價,完成這兩個輸入后,系統會自動更新貨物的已經銷售數量、現存數量和銷售均價。p1-data.sellprice=(p1-data.number2*p1-data.sellprice+num1*price1)/(p1- data.number2+num1);/更新貨物的銷售均價p1-data.number1=p1-data.number1-num1;/更新貨物的現存數量 p1-data.number2=p1-data.number2+num1;/更新貨物的已經銷售數量貨物信息的更新界面:桂林電子科技大學綜合設計說明書用紙 第 14 頁 圖 3.11:貨物信息更新界面.10

21、 貨物信息的排序貨物信息的排序貨物信息排序,為了可以更清楚的了解到貨物庫存量的多少,方便于管理者對倉庫貨物的銷售政策和對即將過期貨物的多少有所了解,使倉庫管理員更直觀的了解到倉庫庫存。該函數找到貨物的記錄信息按照貨物數量從小到大重新排序,排序完后,返回主菜單并提示用戶保存! 在對貨物排序時,用戶可以根據貨物的現存數量、貨物的入庫價格、貨物的已經銷售價格、貨物的銷售均價進行排序。在對貨物的現存數量進行排序時,應用了冒泡排序的方法,大體算法如下: while(p-next)/冒泡排序k=p;q=p-next;while(q)if(k-data.number1)(q-data.number1)k=q

22、;q=q-next; if(p!=k) t=*p; *p=*k; *k=t;t.next=p-next;p-next=k-next;k-next=t.next;flag=1; p=p-next; 對貨物的入庫價格進行排序時,應用了直接插入的排序方法,充分利用數據結構與算法的內容進行設計系統。ListNode *ptr1,*ptr2;桂林電子科技大學綜合設計說明書用紙 第 15 頁 q=L; ptr2=ptr1=p-next; /待排序鏈表 p-next=NULL; while(ptr1) while(p) if(p-data.priceptr1-data.price)ptr2=ptr1-nex

23、t; /記錄無序鏈表下一個節點q-next=ptr1; ptr1-next=p;ptr1=ptr2;/ptr1 指向下一個節點break;else q=p;p=p-next; if(p=NULL) ptr2=ptr1-next; /從無序鏈表取出節點元素q-next=ptr1;ptr1-next=NULL; ptr1=ptr2;/無序鏈表節點后移 q=L;p=L-next; /有序鏈表貨物信息的排序界面:桂林電子科技大學綜合設計說明書用紙 第 16 頁 圖 3.12:貨物信息排序界面.11 貨物信息的統計貨物信息的統計對貨物的信息統計時,系統會自動計算出倉庫里的剩余貨物件數,

24、已經銷售的件數,利潤總數。當貨物的總數量少于 200 件時,會提示:倉庫里的貨物偏少,請適當進貨!當貨物的總數量大于 1100 件時,會提示:倉庫里積壓的貨物太多,請及時清倉!當貨物的數量在 200 到 1100 件之間時,系統會提示:倉庫里總件數大于 200 件,小于 1100 件,無需進貨,清倉! 通過對鏈表的操作,可以實現上面的功能。貨物信息的統計界面:桂林電子科技大學綜合設計說明書用紙 第 17 頁 圖 3.13:貨物信息統計界面4 所遇到的問題和分析解決 在進行系統設計開始時,我花了一段時間思索設計了系統的主體框架。本次課程設計,重要的是將已學的算法應用到自己的設計當中,因此在構建完

25、系統主體框架之后,我又花了很長的時間去思考系統的算法。整個系統應用了鏈表的內容,通過對鏈表的操作,可以對數據進行輸入,修改,查詢,和更新等。 軟件的設計應用了流文件,在操作流文件時,程序出現了各式各樣的問題,剛開始在建立文件的時候,文件不能寫入,經過后面的調試,發現是文件的寫入格式不對,將貨物的入庫價格和銷售平均價格由 double 型改為 float 型,原來的問題就不會再出現了。 軟件的貨物信息錄入、插入、更新、統計等功能都是在鏈表的基礎上操作,在寫系統之前就應該對這方面做足了功課,否則將無從下手。貨物的信息錄入,也就是鏈表的創建,在設計軟件之初時,我利用尾插法進行創建。正確的算法大概為:

26、LinkList head=(ListNode *)malloc(sizeof(ListNode);rear=head;p=(ListNode *)malloc(sizeof(ListNode);rear-next=p; rear=p; 剛開始時在寫創建鏈表的代碼時可能因為粗心,忘記為節點申請新空間,導致后面的貨物信息寫入總是出現錯誤。 軟件在對貨物的信息進行更新時,用戶只需要輸入后面貨物的銷售數量和銷售平均價格,而軟件需要自動更新文件的現存數量、已經銷售數量和銷售平均價格。雖然這個算法不是太難,但如果不夠細心去寫的話,也可能會導致系統的更新失敗。比如剛開始的時候我就把它們之間的代碼順序搞亂,

27、結果出現了更新錯誤。桂林電子科技大學綜合設計說明書用紙 第 18 頁 p1-data.sellprice=(p1-data.number2*p1-data.sellprice+num1*price1)/(p1-data.number2+num1);p1-data.number1=p1-data.number1-num1;p1-data.number2=p1-data.number2+num1; 上面的三行代碼是正確的排列順序,如果將第一行代碼跟第二行代碼或者第三行代碼交換,就會出現更新錯誤! 在寫貨物的信息插入的代碼時候也遇到過問題,軟件剛開始的時候會提示用戶輸入插入的位置,但在調試軟件的時候

28、老是出現插入位置不對的情況,經過檢查發現是查找 i的位置不對!正確的算法為:while(p2&knext;k=k+1; 而開始寫代碼的時候居然寫成了 knext) /冒泡排序算法 k=p;q=p-next; while(q) if(k-data.number1)(q-data.number1) k=q;q=q-next; if(p!=k) t=*p;*p=*k; *k=t;t.next=p-next; p-next=k-next; k-next=t.next;flag=1;桂林電子科技大學綜合設計說明書用紙 第 19 頁 p=p-next;直接插入的主要算法為:ListNode *ptr1,*ptr2;q=L; ptr2=ptr1=p-next; /待排序鏈表 p-next=NULL; while(ptr1) while(p) if(p-data.priceptr1-data.price)ptr2=ptr1-next; /記錄無序鏈表下一個節點q-next=ptr1; ptr1-next=p;ptr1=ptr2;/ptr1 指向下一個節點break;elseq=p;p=p-next; if(p=NULL) ptr2=ptr1-next; /從無

溫馨提示

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

評論

0/150

提交評論