




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、華中科技大學計算機科學與技術學院C語言課程設計報告 題目: 菜市場商品銷售管理系統專 業: 計算機科學與技術專業班 級: 學 號: 姓 名: 成 績:指導教師: 完成日期: 2016年 10月 7日第II頁 共2頁華中科技大學計算機科學與技術學院 C語言課程設計報告目 錄一、系統需求分析11.1數據維護功能11.2數據查詢功能11.3數據統計功能11.4數據存取功能21.5輔助功能2二、總體設計22.1文件模塊22.2數據維護模塊32.3數據查詢模塊42.4數據統計模塊52.5幫助6三、數據結構設計6四、詳細設計與系統實現114.0主程序114.1數據維護114.1.1分類信息維護124.1.
2、2基本信息維護154.1.3銷售信息維護194.2數據查詢224.2.1分類信息查詢224.2.2基本信息查詢:234.2.3銷售信息查詢254.3數據統計284.3.1按類別統計:284.3.2按品種統計314.3.3按客戶名稱統計36五、運行測試與結果分析405.1輸入數據405.2初始化界面425.3系統主界面425.4數據維護界面435.5數據查詢界面:525.6數據統計界面575.7幫助模塊界面62六、總結64七、參考文獻65附錄1 程序源代碼66頭文件:market.h66main.c文件:74I華中科技大學計算機科學與技術學院 C語言課程設計報告一、系統需求分析菜市場商品銷售管理
3、系統用于管理人員對于菜市場的各類商品銷售信息進行管理,主要包括商品分類信息,商品基本信息,商品銷售信息 等三類信息,以幫助商場管理人員及時了解產品銷售情況和變化。菜市場商品銷售管理系統要求實現以下幾方面的基本功能:1.1數據維護功能菜市場商品銷售管理系統的基本信息主要包括以下三類:(1)商品分類信息:分類編碼、分類名稱等數據項。(2)商品基本信息:商品編號、商品名稱、分類碼、產地、單價、售出數量等數據項。(3)商品銷售信息:銷售編號、商品編號、銷售重量、銷售金額、銷售日期、客戶名稱等數據項。系統應實現以上三種數據的錄入、修改、和刪除功能。信息錄入時,系統應提供快捷方便的數據錄入方式;同時應進行
4、自動數據校驗,滿足數據的正確性,合理性,有效性和依賴性要求。1.2數據查詢功能系統應實現對三種基礎數據的查詢功能,提供按多種條件進行查詢的方式,具體包括:(1)以分類編碼為條件來查找并顯示滿足條件的商品分類信息。(2)商品名稱中文字符子串為條件查找,并顯示商品中包含指定子串的商品基本信息。(3)以分類碼和單價為條件查找并顯示滿足條件的商品基本信息。(4)客戶名稱和銷售日期為條件查找并顯示滿足條件的所有商品銷售信息。(5)以商品名稱為條件查找并顯示滿足條件的商品銷售信息。上述查詢結果中,如果有多條信息被查中,查詢結果應生成表格并逐條顯示。1.3數據統計功能在以上三種基礎信息的基礎上,提供多方面的
5、數據統計功能,并生成表格輸出,具體包括:(1)按類別統計各類商品某年(如肉類、魚類等)銷售總重量、銷售總額、按銷售總額降序排序后、輸出分類名稱、銷售總重量、銷售總額。 (2)以所輸入的年份為條件、按商品名稱(如豬肉、大豆等)統計該年度內所售各種商品銷售總重量、銷售金額、按售總重量降序排序后、輸出商品名稱、分類名稱、售出總重量、銷售金 額。(3)按客戶名稱統計所購某類商品(如肉類、魚類等)的總重量、消費總金額、輸出客戶名稱、所購各類商品總重量、消費總金額。(4)按客戶名稱統計所購某種商品(如豬肉、豆角等)的總重量、消費總金額、輸出客戶名稱、所購各種商品總重量、消費總金額。(5)按商品類別統計某客
6、戶購買情況、輸出分類名稱、購買總重量、消費總金額。(6)按商品品種統計某客戶購買情況、輸出分類名稱、商品名稱、購買總重量、消費總金額。1.4數據存取功能以上三種信息在程序運行時,以鏈表結構形式存在于內存中,并且數據的存儲采用動態存儲的分配方式。同時,在外存上以數據文件形式對數據進行存儲,且保證數據在內存和外存兩種存儲介質上內容的一致性。1.5輔助功能幫助功能,主要是對系統的操作方式進行介紹,以及一些方便操作,提供良好人機交互界面的輔助功能。二、總體設計菜市場商品銷售管理系統由五大功能模塊組成:文件模塊,數據維護,數據查詢,數據統計,幫助系統。功能結構如圖2.0。下面為這五個模塊及其子模塊的功能
7、的介紹。2.1文件模塊文件模塊的功能包括一系列與系統啟動和系統既然的話運行相關的環境維護和數據保障操作,它包括六個子模塊:界面初始化、數據保存、數據備份、數據恢復、退出系統。功能結構如圖2.1。(1)界面初始化子模塊:用于設置控制臺窗口顯示模式,將屏幕窗口設置為80列和25行文本字符界面,設置窗口標題欄,清屏并顯示系統菜單欄和系統狀態欄。(2)數據加載子模塊:用于將分別放在多個數據文件中的基礎數據讀入內存,并構造數據鏈表,同時輸出數據加載相關提示信息。(3)數據保存模塊:用于將鏈表數據按缺省路徑分別保存到各個數據文件。(4)數據備份子模塊:用于將存放在多個數據文件中的基礎數據按缺省路徑轉儲到一
8、個數據文件中,供用戶在系統數據被破壞或丟失后用來恢復系統。(5)數據恢復子模塊:與數據備份子模塊在功能上相對應,能從一個備份數據文件恢復得到備份時間點的系統數據,并將恢復出來的數據加載到內存中,用于提高系統的安全性和可靠性。(6)退出系統子模塊:釋放程序運行過程中申請的動態存儲區,關閉控制臺標準輸入和輸出設備句柄。清除屏幕窗口信息,結束系統運行。2.2數據維護模塊 數據維護模塊完成對三種基礎數據信息的錄入、修改和刪除功能,保證數據的準確性,完整性華為有效性。該模塊按信息種類劃分為分類信息維護、基本信息維護、銷售信息維護三個子模塊。如圖2.2。分類信息維護、基本信息維護、銷售信息維護三個子模塊分
9、別用于錄入、刪除和修改分類信息、基本信息和銷售信息。同時,系統將這三種數據存入數據鏈表,并在子模塊結束運行時分別保存到分類信息數據文件,商品基本信息數據文件和商品銷售信息數據文件,以保持在內存和外存上兩種存儲介質上數據內容的一致性。2.3數據查詢模塊數據查詢模塊提供對系統三類基礎數據信息按多種條件查詢的功能,按信息種類分為分類信息查詢,基礎信息查詢和銷售信息查詢三個子模塊。如圖2.3。(1)分類信息查詢:可分為兩個子模塊,提供按分類編碼查詢分類信息的功能和輸出全部分類信息的功能。(2)基礎信息查詢:可分為三個子模塊,提供按商品名稱中的關鍵字模糊查詢商品基本信息的功能,按分類碼與單價查詢基本信息
10、的功能和輸出全部基本信息的功能。(3)銷售信息查詢:可分為三個子模塊,提供按客戶名稱和銷售日期查詢銷售信息的功能,按商品名稱精確查詢銷售信息的功能和輸出全部銷售信息的功能。其中,輸出全部分類信息,基本信息和銷售信息的功能主要用于測試系統運行是否正確。2.4數據統計模塊數據統計模塊提供對三種基礎數據進行多方面統計的功能。按照統計條件,該模塊按類別統計,按品種統計和按客戶姓名統計三個模塊。每個模塊根據統計的范圍又各自分為2個子模塊,共計6種不同的統計方式。如圖2.4。(1)統計各類商品銷售情況:年度各分類銷售情況:按類別統計某年銷售總重量、銷售總額,按銷售總額降序排序后,以表格形式輸出分類名稱、銷
11、售總重量、銷售總額。某客戶各分類購買情況:統計用戶給出的客戶的各類商品消費情況,輸出類別名稱、客戶所購各種商品總重量、消費總金額。(2)按品種統計:年度各品種消費情況:統計用戶給出的年份的各種商品的銷售總重量、銷售金額,按售總重量降序排序后,以表格形式輸出商品名稱、分類名稱、售出總重量、銷售金額。某客戶各品種購買情況:統計用戶給出的客戶的各種商品消費情況,輸出類別名稱、商品名稱、客戶所購各種商品總重量、消費總金額。(3)按客戶姓名統計:按查詢內容分為三個子模塊,查分類名稱,查商品名稱和查客戶姓名。 某分類銷售情況:按客戶名稱統計用戶給出的分類的購買總重量、消費總金額。輸出客戶名稱、所購各類商品
12、總重量、消費總金額。 某商品銷售情況:按客戶名稱統計用戶給出的商品的購買總重量、消費總金額。輸出客戶名稱、所購各種商品總重量、消費總金額。2.5幫助幫助模塊為用戶使用系統提供幫助信息,同時提供系統版本和版權信息。分為幫助主題子模塊和關于市場兩個子模塊。三、數據結構設計菜市場銷售管理系統用于對菜市場商品銷售信息進行管理,主要包括商品分類信息、商品基本信息和商品銷售信息這三類基礎信息數據。此外,系統在運行統計模塊時還會結果形成三種生成數據,分別表示按品種統計的銷售信息,按類別統計的銷售信息和按客戶名稱統計的銷售信息。下面為對本系統所涉及的基礎數據和生成數據的數據結構,以及數據在內存和外存中的存儲結
13、構的介紹。1. 菜市場商品分類信息表: typedef struct type_node char type_id; /*< 分類編碼*/ char name10; /*< 分類名稱*/ struct item_node *inext; /*< 指向商品基本信息支鏈的指針*/ struct type_node *next; /*< 指向下一結點的指針*/ TYPE_NODE;菜市場商品分類信息表如下:數據結構名稱:菜市場商品分類信息表 數據結構標識:TYPE_NODE中文字段名數據項標識類型及長度舉例分類編碼type_idchar'1''5
14、9;分類名稱namechar105 個分類名稱:肉類、魚類、蔬菜、海鮮、雜糧內存中的存儲結構:存放在十字交叉鏈表的主鏈節點上。每個主鏈節點除了保存下一個結點的地址外,還保存該分類對應的菜市場商品基本信息鏈表的頭結點地址。如圖3.1所示。數據文件中的存儲結構:每條信息作為一條記錄放到二進制文件。2. 菜市場商品基本信息表:typedef struct item_node int item_id; /*< 商品編號*/ char name20; /*< 商品名稱*/ char type_id; /*< 分類碼*/ char producer20; /*< 產地(可以簡單用文
15、字描述)*/ float price; /*< 單價(單位:元/斤)*/ float sale; /*< 銷售總重量“斤”*/ struct sale_node *snext; /*< 指向商品銷售信息支鏈的指針*/ struct item_node *next; /*< 指向下一結點的指針*/ ITEM_NODE;菜市場商品基本信息表如下:數據結構名稱:菜市場商品基本信息表 數據結構標識:ITEM_NODE中文字段名數據項標識類型及長度舉例商品編號item_idint自增長(順序增加)商品名稱namechar20“豬肉”分類碼type_idchar'1'
16、; /表示肉類商品產地producerchar20可以簡單用文字描述單價pricefloat18.50 /單位:元/斤售出數量salefloat指銷售總重量“斤”。應自動從銷售信息表中計算而得,初始值為 0內存中的存儲結構:存放在相應分類節點的商品基本信息鏈結點上。每個結點除了保存下一個結點的地址外,還保存該商品對應的菜市場商品銷售信息鏈表的頭結點地址。如圖3.1所示。數據文件中的存儲結構:每條信息作為一條記錄放到二進制文件。3. 菜市場商品銷售信息表typedef struct sale_node int sale_id; /*< 銷售編號*/ int item_id; /*<
17、商品編號*/ float weight; /*< 銷售重量*/ float sales_amount; /*< 銷售金額*/ char date10; /*< 銷售日期*/ char client_name20; /*< 客戶名稱*/ struct sale_node *next; /*< 指向下一結點的指針*/ SALE_NODE;菜市場商品銷售信息表如下:數據結構名稱:菜市場商品銷售信息表 數據結構標識:SALE_NODE中文字段名數據項標識類型及長度舉例銷售編號sale_idInt自增長商品編號item_idInt同商品基本信息表中的商品編號銷售重量weig
18、htfloat銷售金額sales_amountfloat銷售金額=斤數*單價,應是自動計算銷售日期datechar10“20150222” 年(4)+月(2)+日(2)客戶名稱client_namechar20“張三”內存中的存儲結構:存放在相應基本信息節點的商品銷售信息鏈結點上。每個結點保存下一個銷售信息結點的地址。如圖3.1所示。數據文件中的存儲結構:每條信息作為一條記錄放到二進制文件。該系統基礎數據部分在內存中以后進先出的方式創建三方向的十字交叉鏈表。十字交叉鏈表模型如圖3.1。4各類商品消費情況表typedef struct type_stat char type10; /*<
19、分類名稱*/ float weight; /*< 總重量*/ float sale; /*< 消費金額*/ struct type_stat *next; /*< 指向下一結點的指針*/ TYPE_STAT;各類商品消費情況表如下:數據結構名稱:各類商品消費情況表 數據結構標識:TYPE_STAT中文字段名數據項標識類型及長度舉例分類名稱typechar 10“肉類”總重量weightfloat消費金額salefloat銷售金額=斤數*單價,應是自動計算內存中的存儲結構:存放在各類商品消費情況單向鏈表的結點上。每個結點保存下一個銷售信息結點的地址。數據文件中的存儲結構:不介入
20、外存。4. 各種商品消費情況表typedef struct item_stat char type10; /*< 分類名稱*/ char item20; /*< 商品名稱*/ float weight; /*< 總重量*/ float sale; /*< 銷售金額*/ struct item_stat *next; /*< 指向下一結點的指針*/ ITEM_STAT;各類商品消費情況表如下:數據結構名稱:各類商品消費情況表 數據結構標識:ITEM_STAT中文字段名數據項標識類型及長度舉例商品名稱typechar20“豬肉”分類名稱itemchar 10“肉類”總
21、重量weightfloat消費金額salefloat銷售金額=斤數*單價,應是自動計算內存中的存儲結構:存放在各種商品消費情況單向鏈表的結點上。每個結點保存下一個銷售信息結點的地址。數據文件中的存儲結構:不介入外存。5. 按客戶名稱統計的消費情況表typedef struct client_stat char client20; /*< 客戶姓名*/ float weight; /*< 總重量*/ float sale; /*< 銷售金額*/ struct client_stat *next; /*< 指向下一結點的指針*/ CLIENT_STAT;按客戶名稱統計的消費
22、情況表如下:數據結構名稱:按客戶名稱統計的消費情況表 數據結構標識:CLIENT_STAT中文字段名數據項標識類型及長度舉例客戶姓名clientchar20“張三”總重量weightfloat消費金額salefloat銷售金額=斤數*單價,應是自動計算內存中的存儲結構:存放在各種商品消費情況單向鏈表的結點上。每個結點保存下一個銷售信息結點的地址。數據文件中的存儲結構:不介入外存。四、詳細設計與系統實現4.0主程序數據加載,界面初始化,選擇及運行系統功能模塊,退出系統。如流程圖4.0。4.1數據維護函數原型:BOOL MaintainTypeInfo(void) /*維護商品分類信息*/BOOL
23、 MaintainItemInfo(void) /*維護商品基本信息*/BOOL MaintainSaleInfo(void) /*維護商品銷售信息*/函數功能:進入三類信息維護的子菜單,選擇要執行的操作。詳細設計:選擇要進行維護的信息后,進入信息維護子菜單選項,選擇要執行的操作。選擇插入/修改/刪除后返回信息維護子菜單,選擇退出則提示保存信息到外存后返回主菜單。(分類信息維護,基本信息維護,銷售信息維護流程相同)如圖4.1。4.1.1分類信息維護(1)錄入分類信息:函數原型:void InsertTypeNode(TYPE_NODE* hd)函數功能:在十字鏈表中插入一個分類信息結點。詳細設
24、計:新建分類信息結點p,輸入分類編碼和分類名稱。若名稱長度超過10字節,提示字數過多后返回分類信息維護菜單。否則遍歷商品分類信息鏈表,檢查分類編碼和分類名稱是否已被使用。若能夠查找到與新建結點的分類編碼或分類名稱相同的結點,提示信息重復并返回分類信息維護菜單。若p 的分類編碼,分類名稱都沒有與已存在的分類信息結點重復,且分類名稱不超過10字節,則將p作為商品分類信息鏈表的頭結點,提示插入成功后返回分類信息維護菜單。如流程圖4.1.1所示。(2) 修改分類信息:函數原型:void ModifTypeNode(TYPE_NODE *hd)函數功能:從十字鏈表中修改指定的分類信息結點.詳細設計:輸入
25、要修改的分類的名稱后遍歷商品分類信息鏈表,查找名稱符合的結點pt。若沒有查找到,提示分類不存在并返回分類信息維護子菜單。否則輸出當前分類信息,然后選擇要修改的內容。若選擇修改分類編號,輸入新編號后遍歷鏈表,查找分類編號相同的結點,若查找到,提示編號已被使用,否則修改編號。然后繼續選擇要修改的內容。若選擇修改名稱,輸入新分類名稱后先判斷新名稱長度是否大于10字節。若大于10字節,提示字數過多后繼續選擇要修改的內容。若不超過10字節,遍歷分類信息鏈表,若能查找到分類名稱與新名稱相同的分類信息結點,提示名稱重復后繼續選擇要修改的內容。否則將pt的分類名稱改為新名稱。若選擇退出,則返回分類信息維護菜單
26、。如流程圖4.1.2所示。(3) 刪除分類信息:函數原型:void DelTypeNode(TYPE_NODE *hd)函數功能:從十字鏈表中刪除指定的分類信息結點.詳細設計:輸入要刪除的結點的分類名稱。遍歷商品分類信息鏈表,查找分類名稱相符的結點pt以及pt的前驅p。若查找到,判斷pt是否為頭結點。若pt為頭結點,令pt->next為新的頭結點,若不是,使p->next=pt->next。然后釋放pt及對應的基本信息和銷售信息鏈表的存儲空間,提示刪除成功并返回分類信息維護菜單。否則沒有查找到符合條件的pt,提示刪除失敗后返回分類信息維護菜單。如流程圖4.1.3所示。4.1.
27、2基本信息維護(1)插入基本信息:函數原型:void InsertItemNode(TYPE_NODE* hd)函數功能:在十字鏈表中插入一個基本信息結點.詳細設計:輸入商品所在分類的名稱。遍歷分類信息鏈表,查找分類名稱與輸入的相同的分類信息結點pt。若pt為NULL,提示商品分類不存在并返回基本信息維護子菜單。否則新建基本信息結點p。輸入商品名稱,判斷商品名稱長度是否大于20字節。若名稱大于20字節,提示字數過多后返回基本信息維護菜單。若沒有超過20字節,遍歷商品基本信息鏈表,查找商品名稱與輸入的商品名稱相同的基本信息結點pi,同時查找最大的商品編號ITEM_ID。若pi不為NULL,提示名
28、稱已被使用,返回基本信息維護菜單。否則繼續輸入商品產地和單價,若產地長度超過20字節,提示字數過多后返回基本信息維護菜單。否則將p作為pt對應的基本信息支鏈的新的頭結點,并令p的商品編碼為ITEM_ID+1,然后返回基本信息維護子菜單。如圖4.1.4所示。(2)修改基本信息:函數原型:void ModifItemNode(TYPE_NODE *hd)函數功能:從十字鏈表中修改指定的基本信息結點詳細設計:輸入商品名稱,遍歷基本信息鏈表,查找商品名稱與輸入的相同的結點pi,pi所在基本信息支鏈對應的分類信息結點pt和pi的前驅。若pi為NULL,提示商品不存在并返回基本信息維護子菜單。若pi存在,
29、選擇修改內容。若選擇改名稱,則輸入新名稱,若新名稱長度大于20字節,提示字數過多修改失敗,并繼續選擇要修改的內容。否則提示遍歷基本信息鏈表,查找與商品名稱與新名稱相同的基本信息結點pi2,若pi2存在則提示修改失敗,否則修改結點的商品名稱,并繼續選擇要修改的內容。若選擇改產地,則輸入新產地,若新產地長度不超過20字節,修改產地并提示修改成功,然后繼續選擇要修改的內容;否則提示字數過多后繼續選擇要修改的內容。若選擇修改單價,輸入并修改基本信息結點pi中的單價后,遍歷pi對應的銷售信息鏈表,修改銷售信息結點中的銷售金額。若選擇分類編碼,則遍歷分類信息鏈表,查找新編碼所在結點pt2,pt2不存在則提
30、示失敗并繼續選擇修改內容。否則如果pi為原基本信息支鏈的頭結點,則令pt->next指向pi->next,否則令pi的前驅指向pi->next。然后將pi插入pt2對應的基本信息支鏈,并作為支鏈頭結點。最后令pt = pt2并繼續選擇修改內容。若選擇退出,則返回基本信息維護子菜單。如流程圖4.1.5所示。(4) 刪除基本信息:函數原型:void DelItemNode(TYPE_NODE *hd)函數功能:從十字鏈表中刪除指定的基本信息結點.詳細設計:輸入要刪除的基本信息結點的商品名稱,遍歷基本信息鏈表,查找結點pi, pi的前驅pi2,pi所在基本信息支鏈對應的分類信息結點
31、pt。若pi為NULL,提示商品不存在并返回基本信息維護菜單;否則判斷pi是否為基本信息鏈表頭結點,若是頭結點,則令pi->next為pt對應的基本信息支鏈的新的頭結點,否則pi2->next=pi->next。最后釋放pi對應的銷售信息鏈表和pi的存儲空間,提示刪除成功后返回基本信息維護子菜單。如圖4.1.6所示。4.1.3銷售信息維護(1)錄入銷售信息函數原型:void InsertSaleNode(TYPE_NODE* hd)函數功能:在十字鏈表中插入一個銷售信息結點詳細設計:輸入商品名稱,遍歷基本信息鏈表,查找商品名稱與輸入的名稱相同的基本信集結點pi,若pi不存在,
32、提示商品不存在并返回銷售信息維護菜單。否則新建銷售信息結點p,輸入銷售重量,日期。日期是否為8個字節,若不是,提示格式錯誤后返回銷售信息維護菜單。否則計算銷售金額,并修改pi中的銷售總重量和總金額,然后遍歷銷售信息鏈表查找最大的銷售編號SALE_ID,令p->sale_id為SALE_ID+1。最后將p設置為pi對應銷售信息支鏈的新的頭結點。如圖示4.1.7所示。(2)修改銷售信息:函數原型:void ModifSaleNode(TYPE_NODE *hd)函數功能:從十字鏈表中修改指定的基本信息結點詳細設計:輸入銷售編號,遍歷銷售信息鏈表,查找對應的結點ps,ps的前驅psale,以及
33、ps所在銷售信息支鏈對應的基本信息結點pi。若ps不存在,提示修改失敗,返回銷售信息維護子菜單。否則輸出當前銷售信息的內容,選擇修改的內容。若選擇商品編號,則輸入新編號后,遍歷基本信息鏈表,查找新編號對應的基本信息結點pi2,若沒找到,提示修改失敗,若找到,令ps的前驅指向ps的后繼。將ps作為pi2對應銷售信息支鏈的新的頭結點,并修改ps的銷售金額,pi2和原對應基本信息節點pi的銷售重量。最后令pi=pi2后繼續選擇要修改的內容。若選擇銷售重量,輸入新重量后修改銷售金額和對應結點pi的總重量。若選擇日期,則輸入新日期。若日期超過8字節,提示格式錯誤,否則修改日期。然后繼續選擇修改的內容。若
34、選擇客戶姓名,則輸入新客戶姓名。若客戶姓名超過20字節,提示字數過多,否則修改客戶姓名。然后繼續選擇修改的內容。若選擇退出,返回銷售信息維護子菜單。如流程圖4.1.8所示。(3)刪除銷售信息:函數原型:void DelSaleNode(TYPE_NODE *hd)函數功能:從十字鏈表中刪除指定的基本信息結點詳細設計:輸入銷售編號,遍歷銷售信息鏈表,查找對應的結點ps,ps的前驅psale,以及ps所在銷售信息支鏈對應的基本信息結點pi。若ps不存在,提示刪除失敗,返回銷售信息維護子菜單。否則判斷ps是否為支鏈頭結點。若不是頭結點,令psale->next=ps->next,否則令p
35、i->snext=ps->next,隨后修改pi的銷售總重量并釋放ps的存儲空間。如流程圖4.1.9所示。4.2數據查詢4.2.1分類信息查詢(1)按分類編碼查詢:函數原型:void SeekType_id(TYPE_NODE *head)函數功能:根據輸入的分類編碼查找分類信息選擇分類編碼查詢,輸入分類編碼,遍歷分類信息鏈表,查找對應分類信息結點,若找到則輸出結點中的分類信息,否則提示編碼不存在,然后返回子菜單,若選擇退出,返回主菜單,否則繼續查詢。如流程圖4.2.1所示。(2)輸出全部:函數原型: void SeekType_All(TYPE_NODE *head)函數功能:輸
36、出所有分類信息詳細設計:遍歷分類信息鏈表,輸出每個結點的信息。該功能主要用于測試信息維護功能是否正確。4.2.2基本信息查詢:(1)按商品名稱關鍵詞查詢:函數原型:void SeekName(TYPE_NODE *head)函數功能:按商品名稱中的關鍵詞模糊查找并輸出商品基本信息詳細設計:輸入商品名稱中的關鍵詞后,令find=0,遍歷鏈表,查找商品名稱中含關鍵詞子串的基本信息結點。輸出查找到的結點的信息并使find=1。若循環完畢find=0,則提示信息不存在。如圖4.2.2所示。(2)按分類碼和單價查詢函數原型:void SeekId_Price(TYPE_NODE *head)函數功能:按
37、分類碼和單價區間查找商品基本信息詳細設計:輸入分類碼和價格區間后,遍歷分類信息鏈表,查找對應分類結點,若不存在,提示信息不存在。否則令find = 0,然后遍歷此分類結點對應的基本信息支鏈,查找并輸出單價滿足條件的基本信息結點的信息。若查找到,令find = 1。若循環完畢find等于0,提示信息不存在。如圖4.2.3所示。(3)輸出全部:函數原型:void SeekItem_All(TYPE_NODE *head)函數功能:輸出所有基本信息詳細設計:遍歷每個分類信息結點對應的基本信息鏈表,輸出每個結點中的信息。該功能主要用于測試基本信息維護功能是否運行正確。4.2.3銷售信息查詢(1)按客戶
38、名稱和銷售日期查詢:函數原型:void SeekClient_Date(TYPE_NODE *head)函數功能:按客戶名稱和銷售日期查找商品銷售信息詳細設計:輸入客戶名稱和日期date,若date長度大于8字節,提示日期格式錯誤,返回銷售信息查詢菜單。否則令find=0,遍歷銷售信息鏈表,若查找到客戶名稱和日期都符合條件的銷售信息結點,輸出結點信息,令find=1。若循環結束時find=0,提示信息不存在。如流程圖4.2.4所示。 (2)按商品名稱查詢函數原型:void SeekSaleName(TYPE_NODE *head)函數功能:按商品名稱查找商品銷售信息詳細設計:輸入商品名稱,令f
39、ind = 0,findsale = 0。遍歷基本信息鏈表,查找商品名稱符合條件的基本信息結點pi,若pi存在,令find = 1并遍歷該結點對應的銷售信息鏈表后退出循環。若銷售信息鏈表不為空,使findsale = 1,并輸出銷售信息支鏈中每個結點中存儲的銷售信息。若循環結束后,find等于0,提示商品不存在;若findsale等于0,提示該商品無銷售記錄。如流程圖4.2.5所示。(3)輸出全部:函數原型:void SeekSale_All(TYPE_NODE *head)函數功能:輸出所有商品銷售信息詳細設計:遍歷每個基本信息結點對應的銷售信息鏈表,輸出每個銷售信息結點中的信息。該功能主要
40、用于測試銷售信息維護功能是否運行正確。4.3數據統計4.3.1按類別統計:(1)年度各類別銷售情況統計:函數原型:void StatTypeSale(void)函數功能:按類別統計并輸出所有類別總體的年度銷售情況調用了的函數:函數原型:TYPE_STAT * StatTypeInfo(TYPE_NODE *head,char year5)函數功能:按類別統計所有分類的年度銷售情況,創建統計結果鏈表函數原型:void StatTypeSort(TYPE_STAT *head, int len)函數功能:將按分類名稱統計的鏈表按銷售總額排序詳細設計:輸入年份Date,先判斷Date的長度是否為4字
41、節,若不是,提示格式錯誤后結束。否則新建年度各類別銷售情況情況鏈表,令p1和phead指向頭結點。遍歷分類信息鏈表,每指向一個分類信息結點,新建統計結果結點,將結點插入統計結果鏈表表尾,并令p1指向該結點。對p1初始化,令p1->weight=0,p1->sale=0。遍歷分類信息結點對應的銷售信息支鏈,統計銷售時間前四位與Date相同的銷售信息結點的銷售總重量和銷售總金額,并修改p1->weight(年度銷售重量)和p1->sale(年度銷售金額)。分類信息鏈表遍歷完畢后,令phead指向phead->next。對統計結果鏈表按照銷售金額進行冒泡排序并輸出各類商
42、品銷售情況鏈表中的信息。如流程圖4.3.0和4.3.1。(2)某客戶購買各類別情況統計:函數原型:void StatTypeSale(void)函數功能:按類別統計并輸出所有類別總體的年度銷售情況調用了的函數:函數原型:TYPE_STAT *StatT_ClientInfo(TYPE_NODE *head, char client20)函數功能:按分類名稱統計指定客戶消費情況并創建統計結果鏈表函數原型:void StatTypeSort(TYPE_STAT *head, int len)函數功能:將按分類名稱統計的鏈表按銷售總額排序詳細設計:輸入客戶姓名,新建某客戶各類別購買情況情況鏈表,令p
43、1和phead指向頭結點。遍歷分類信息鏈表,每指向一個分類信息結點,令weight=0(銷售重量),sale=0(銷售金額),遍歷分類信息結點對應的銷售信息支鏈,統計客戶姓名與輸入的客戶姓名相同的銷售信息結點的銷售總重量和銷售總金額,記錄于weight和sale。若銷售信息支鏈遍歷完畢,sale不為0,新建統計結果結點,將結點插入統計結果鏈表表尾,并令p1指向該結點。分類信息鏈表遍歷完畢后,令phead指向phead->next。對統計結果鏈表按照銷售金額進行冒泡排序并輸出各類商品銷售情況鏈表中的信息。如流程圖4.3.2,冒泡排序流程圖同4.3.0。4.3.2按品種統計(2)年度各種商品
44、銷售情況統計:函數原型:void StatItemYear(void)函數功能:按商品名稱統計年度銷售情況調用了的函數:函數原型:ITEM_STAT *StatYearInfo(TYPE_NODE *head, char year5)函數功能:按年統計指定各品種銷售情況并創建統計結果鏈表函數原型:void StatItemSort(ITEM_STAT *head, int len)函數功能:將按商品名稱統計的鏈表按銷售重量排序詳細設計:輸入年份Date,先判斷Date的長度是否為4字節,若不是,提示格式錯誤后結束。否則新建年度各類別銷售情況情況鏈表,令p1和phead指向頭結點。遍歷基本信息鏈
45、表,每指向一個基本信息結點,新建統計結果結點,將結點插入統計結果鏈表表尾,并令p1指向該結點。對p1初始化,令p1->weight=0(年度銷售重量),p1->sale=0(年度銷售金額)。遍歷基本信息結點對應的銷售信息支鏈,統計銷售時間前四位與Date相同的銷售信息結點的銷售總重量和銷售總金額,并修改p1->weight和p1->sale。分類信息鏈表遍歷完畢后,令phead指向phead->next。對統計結果鏈表按照銷售重量進行冒泡排序并輸出各類商品銷售情況鏈表中的信息。如流程圖4.3.3.0和4.3.3。(2)某客戶購買各品種情況統計:函數原型:void
46、StatItemClient(void)函數功能:按商品名稱統計指定客戶的消費情況調用了的函數:函數原型:ITEM_STAT *StatI_ClientInfo(TYPE_NODE *head, char client20)函數功能:按商品名稱統計指定客戶消費情況,創建統計結果鏈表,并按照銷售金額排序。輸入客戶姓名,新建某客戶各品種購買情況情況鏈表,令p1和phead指向頭結點。遍歷基本信息鏈表,每指向一個分類信息結點,令weight=0(銷售重量),遍歷基本信息結點對應的銷售信息支鏈,統計客戶姓名與輸入的客戶姓名相同的銷售信息結點的銷售總重量,記錄于weight。若銷售信息支鏈遍歷完畢,we
47、ight不為0,新建統計結果結點,將結點插入統計結果鏈表表尾,并令p1指向該結點,然后對p1中的weight,sale,type(分類名稱),item(商品名稱)等賦值。分類信息鏈表遍歷完畢后,令phead指向phead->next。對統計結果鏈表按照銷售金額進行冒泡排序并輸出各類商品銷售情況鏈表中的信息。如流程圖4.3.4,冒泡排序流程圖同4.3.0。4.3.3按客戶名稱統計(1)某分類銷售情況:函數原型:void StatCType(void)函數功能:按客戶姓名統計指定類別商品消費情況調用了的函數:函數原型:CLIENT_STAT *StatCTypeInfo(TYPE_NODE
48、*pt)函數功能:按客戶姓名統計指定各類別銷售情況并創建統計結果鏈表函數原型:void StatClientSort(CLIENT_STAT *head, int len)函數功能:將按客戶姓名統計的鏈表按銷售總重排序詳細設計:輸入類別名稱,查找分類結點pt,若pt不存在,提示分類不存在。否則新建按客戶統計的某分類商品消費情況表。令phead指向統計結果鏈表的頭結點。遍歷pt對應的銷售信息鏈表,每指向一個銷售信息結點ps,遍歷統計結果鏈表,查找客戶名稱與銷售信息結點中客戶名稱相同的結點p2。若p2存在,令 p2->weight += ps->weight, p2->sale
49、+= ps->sales_amount。若p2不存在,新建結點p1,令p1為phead的后繼,并對p1的sale(銷售金額),weight(銷售重量),client(客戶姓名)賦值。銷售信息鏈表遍歷完畢后,對統計結果鏈表進行冒泡排序,最后遍歷統計結果鏈表,輸出每個結點中存儲的客戶消費信息。如流程圖4.3.5,冒泡排序流程圖同4.3.3.0。(2)某商品銷售情況:函數原型:void StatCItem(void)函數功能:按客戶姓名統計指定品種的商品消費情況調用了的函數:函數原型:CLIENT_STAT *StatCItemInfo(ITEM_NODE *pi)函數功能:按客戶姓名統計指定
50、各品種銷售情況并創建統計結果鏈表函數原型:void StatClientSort(CLIENT_STAT *head, int len)函數功能:將按客戶姓名統計的鏈表按銷售總重排序輸入商品名稱,查找基本信息結點pi,若pi不存在,提示商品不存在。否則新建按客戶統計的某商品消費情況表。令phead指向統計結果鏈表的頭結點。與某分類銷售情況統計類似,遍歷pi對應的銷售信息鏈表,每指向一個銷售信息結點ps,遍歷統計結果鏈表,查找客戶名稱與銷售信息結點中客戶名稱相同的結點p2。若p2存在,令p2->weight += ps->weight, p2->sale += ps->s
51、ales_amount。若p2不存在,新建結點p1,令p1為phead的后繼,并對p1的sale(銷售金額),weight(銷售重量),client(客戶姓名)賦值。銷售信息鏈表遍歷完畢后,對統計結果鏈表進行冒泡排序,最后遍歷統計結果鏈表,輸出每個結點中存儲的客戶消費信息。如流程圖4.3.6,冒泡排序流程圖同4.3.3.0。五、運行測試與結果分析5.1輸入數據商品分類信息:分類編碼12345分類名稱肉類魚類蔬菜海鮮雜糧商品基本信息:分類編碼1111222商品名稱豬肉牛肉羊肉火雞肉鯽魚黃骨魚鱔魚產地湖南衡陽衡南縣相市鄉湖南省懷化市鶴城區甘肅白銀市靖遠縣江蘇鹽城市建湖縣A市企鵝碼頭廣州5678號外
52、婆家池塘仙桃市張溝鎮先鋒村單價(元/斤)21.9849.7852.435.215.8522.5635.5分類編碼2333334商品名稱鳊魚茄子西紅柿黃瓜豆角冬瓜南美對白蝦產地三府灣碼頭山東省聊城市莘縣山東聊城市東昌府區山東臨沂市蒼山縣山東臨沂市沂水縣江蘇省鹽城市東臺市廣西壯族自治區欽州市單價(元/斤)36.31.61.923.724.80.5234.76分類編碼444555商品名稱螃蟹扇貝魷魚大豆玉米小麥產地遼寧省丹東市東港市北京市朝陽門外街道海南儋州市光村鎮山東泰安市東平縣湖北省襄陽市南漳縣安徽阜陽市臨泉縣單價(元/斤)48.676.5240.86.81.151.21商品銷售信息:商品名稱大豆冬瓜黃骨魚黃骨魚黃瓜火雞肉茄子鱔魚銷售重量1.12.13.42.33.53.21.43.9銷售日期20150
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 理解干線網絡的重要性與試題及答案
- 安全法規基礎知識測試題及答案
- 英語高一期末試卷及答案
- 公共政策與全球氣候目標試題及答案
- 教育政策與人力資源發展的關系研究題目及答案
- 信息系統項目管理師考試學習經驗與技巧分享試題及答案
- 政治文化與國家認同試題及答案
- 新能源汽車二手車市場前景分析與評估體系構建2025年報告
- 信息系統項目管理的知識分享與團隊學習試題及答案
- 西方國家中黨派斗爭的機理與后果分析試題及答案
- 2003奧迪a8原廠維修手冊帶電路圖自學
- 我國江河湖泊及水資源散布現狀
- 基于51單片機的智能門鈴設計-正式版
- 2023年不動產登記代理人《不動產登記代理實務》沖刺備考200題(含詳解)
- 畜產品市場營銷策劃方案
- GB/T 18852-2020無損檢測超聲檢測測量接觸探頭聲束特性的參考試塊和方法
- ZJUTTOP100理工類學術期刊目錄(2018年版)
- F0值計算公式自動
- 《全國統一建筑工程基礎定額河北省消耗量定額》宣貫資料
- 道路交通事故現場勘查課件
- 門店電表記錄表
評論
0/150
提交評論