數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)客戶積分系統(tǒng)方案_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)客戶積分系統(tǒng)方案_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)客戶積分系統(tǒng)方案_第3頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、錄(參考)1系統(tǒng)分析 11.1 課程設(shè)計(jì)容 21.2系統(tǒng)功能需求分析 31.3數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 42系統(tǒng)設(shè)計(jì) 52.1總體設(shè)計(jì) 52.2各功能模塊的設(shè)計(jì) 62.2.1 62.2.2 72.2.3 82.2.4 92.2.5 102.2.6 112.2.7 122.2.8 132.2.9 143系統(tǒng)調(diào)試 154總結(jié) 205參考文獻(xiàn) 22附錄(源代碼)1系統(tǒng)分析1.1課程設(shè)計(jì)容客戶消費(fèi)積分管理系統(tǒng) 系統(tǒng),功能包括:1、采用動(dòng)態(tài)分配順序表存儲(chǔ)客戶信息,并用文件保存和讀寫數(shù)據(jù)2、能對客戶信息進(jìn)行添加、查詢、修改、刪除等基本操作3、根據(jù)客戶消費(fèi)額,合理計(jì)算出客戶消費(fèi)所得積分4、根據(jù)客戶積分值,實(shí)行不同情況的

2、優(yōu)惠(即計(jì)算折扣)客戶消費(fèi)積分管理系統(tǒng) 系統(tǒng)的性能需求:速度:系統(tǒng)整體運(yùn)行要流暢,響應(yīng)時(shí)間不能太長,不能出現(xiàn)系統(tǒng)卡死情況,能滿 足使用者普通操作。安全性:系統(tǒng)涉及使用者的利益,為了防止造成使用者財(cái)產(chǎn)損失,應(yīng)加強(qiáng)系統(tǒng)安 全性檢測,特別是后臺(tái)文件的保密。精度:系統(tǒng)中涉及到折扣和積分的計(jì)算一定要注意精度要求,特別是折扣,應(yīng)采用高精度數(shù)據(jù)類型,積分使用整型。容量:隨著客戶數(shù)的增多,系統(tǒng)容量不斷增加,顯然為滿足容量需求,應(yīng)采用動(dòng) 態(tài)分配存儲(chǔ)空間輔以后臺(tái)文件存儲(chǔ)數(shù)據(jù)。1.2系統(tǒng)功能需求分析功能需求:商家(軟件使用者)可以進(jìn)行添加、查詢、修改、刪除客戶信息,查看客戶信 息存儲(chǔ)文件,其中包括客戶編號(hào)、客戶、客

3、戶消費(fèi)積分值、客戶享受的優(yōu)惠(折扣)??蛻艄芾恚嚎蛻粜畔蛻艟幪?hào)、客戶、客戶消費(fèi)積分值、客戶享受的優(yōu)惠(折扣)。積分管理:主要包括積分計(jì)算、積分更新、積分清零操作。積分計(jì)算:根據(jù)客戶的一次性 消費(fèi)額,計(jì)算增加的積分值,記錄客戶本次消費(fèi)使用的積分值;積分更新:每次消費(fèi)后,商 家根據(jù)客戶消費(fèi)增加的積分值以及使用的積分值計(jì)算剩余積分;積分清零:在年底,商家可以通過該操作將所有用戶積分清零。折扣管理:根據(jù)客戶本次消費(fèi)額和客戶已有積分值,計(jì)算客戶本次消費(fèi)所享受的優(yōu)惠,即折扣。具體規(guī)則:積分值大于 2000,享受6折優(yōu)惠;積分值大于 500小于2000,享受7折 優(yōu)惠;積分值大于 200小于500,享

4、受8折優(yōu)惠;積分值大于 50小于200,享受9折優(yōu)惠。1.3數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)Customer (客戶)定義: typedef structchar no10;/char n ame5;float poin ts;/float disco unt;/Customer;順序表定義:#define listinitsize 10#defi ne list in creme nt 10 typedef structCustomer * elem;int len gth;/int listsize;/SqList;void InitSq(SqList &L)/客戶編號(hào)積分折扣當(dāng)前長度當(dāng)前分配的存儲(chǔ)容

5、量動(dòng)態(tài)分配順序表存儲(chǔ)空間L.elem=(Customer*)malloc(list in itsize*sizeof(Customer); if(!L.elem)prin tf("Not able to allocate memory.' n");exit(1);L.le ngth=0;L.l istsize=listi ni tsize;2系統(tǒng)設(shè)計(jì)2.1總體設(shè)計(jì)2.2各功能模塊的設(shè)計(jì)2.2.1 主函數(shù) main()動(dòng)態(tài)獲取表空間,初始化順序表,打開文件將客戶數(shù)據(jù)加載入表中,進(jìn)行 表操作,操作結(jié)束將表數(shù)據(jù)保存到文件,文件關(guān)閉。2.2.2 客戶信息添加遍歷當(dāng)前順序表,

6、若待添加的用戶編號(hào)已存在,則返回用戶已存在的提示 信息;若待添加的用戶不存在,則將該客戶信息添加到順序表最后,并將順序表長度加1。2.2.3 客戶信息刪除遍歷當(dāng)前順序表,若要?jiǎng)h除的用戶標(biāo)號(hào)不存在,則返回提示信息;否則提 示用戶是否確定刪除,確定即刪除。刪除操作即將待刪除記錄的后面記錄依次向前移動(dòng)1步。2.2.4 客戶信息更新遍歷當(dāng)前順序表,若待更新的用戶編號(hào)不存在,則返回用戶不存在的提示信息; 若待添加的用戶存在,則提示輸入新的信息。225 查找客戶信息226 顯示客戶信息 遍歷順序表,返回客戶信息消費(fèi)積分清零遍歷順序表,將積分與折扣賦值為0;2.2.8 積分計(jì)算int points_cal(

7、float consume) /積分計(jì)算規(guī)則if(con sume<=0) con s=0;else if(con sume<=500) cons =con sume/10; else if(con sume<=2000) cons =(co nsume-500)/8+50;else if(con sume<=5000) co ns =(co nsume-2000)/6+237;else cons =(c on sume-5000)/5+737;retur n cons;2.2.9 折扣計(jì)算double Discount(int discount) /折扣的計(jì)算規(guī)則if

8、(m<=0) disco un t=10;else if(m<=50) disco unt =10;else if(m<=200) disco unt =9;else if(m<=500) disco unt =8;else if(m<=2000) disco unt =7;else disco unt =6;retur n disco unt;3系統(tǒng)調(diào)試1. 運(yùn)行客戶消費(fèi)積分管理系統(tǒng),主菜單如下:-I°lxl息心息息蚤苓 1£1 jfe-fe顧 你辰容?客唇保 操顧顧顧顧誓井 的加B龔不戀 焦ft更查助胃 先- - ,lzI 2 3 4 b

9、6 0"匚:Bd. 5 電息丄一=1E *C; DocuMent s and 5etingsAd*inist ratorXJ面”卜Si 黨容積升K作XOebuX 1 2. 調(diào)用添加客尸模塊,添加客尸信息10 J0 8 皿0 & 10,0 8 10,0 QKUwitriolim一sunxsaxKiieumMKKKioffnwifftexxxxiHxatxMxwe 請?jiān)栬鋼〦 _L:? "C: Docu>enT s and SetTincsX&dBinist ralorXJ面"卜胡'廝春積分撰作Debu(l.I ' 擇人;4;s

10、a1A:信 £ S 擇入:2 選>ir嗒SI二息:信Sr.操宮ill 擇扎:3:1 B01 請王扇姓3. 測試刪除模塊回?fù)癫僮髫?顧客信目出矗寫辛r- 匸惡円和已擊口巧ktop'詳琴設(shè)計(jì)C90旳菇呂EVZ少戲夸冃分堡憐.Debug"啟“'首譜 一 WB客存一砰八 找囊岀“ 亙口亶一 一一 二 4 5 & 0 -£OT5AJZ:息8S0警0.擇客丄送有KU甯1! uang ld.U U t Ilu 1Q,A aL s.un 1G. Q 9xii 18.3 0 wang 13.0 E sun 丄8.B B4. 測試更新模塊-'C

11、::3円叩已第»$ kto p特琴我計(jì)090了。3 3呂冷"Z小氐客冃分?jǐn)z年門ebug l.e:te逼L-2-Hi-s&-B-費(fèi)目曙三口的 B mJli's息息一昔戶 k膛離足中収蛋懺 "§£舊有畐 "頃顧顧顧t 巳誥豆TRT出 擇箭更查杲退 總一 一一一:一一 _!_OT5+>.-息 磴;. 操戶d.11Q搽客丄 送有Xu壽 甯丄2 43率 =J 作薛的 操所S 擇麻2 » :分 號(hào)和 茁增 曲E S鎖厶4竣二弦性苗費(fèi)的金臥&yo 博各更新后的信息:2 Wang 9-0 62呂 at u u

12、k w war at ua< irxafatKK ar 館選擇操作其他模塊測試類似。本次課程設(shè)計(jì),是我發(fā)現(xiàn)了很多不足,比如:1. 軟件設(shè)計(jì)階段考慮不充分,導(dǎo)致編碼時(shí)隨機(jī)性大,方向性不明確;2. 存儲(chǔ)結(jié)構(gòu)的選擇分析不夠充分,沒有考慮其它可行的存儲(chǔ)實(shí)現(xiàn)(只用了動(dòng) 態(tài)數(shù)組);3. 設(shè)計(jì)的系統(tǒng)安全性方面未能達(dá)到極高級(jí)別(后臺(tái)文件可以隨意更改);此外,在系統(tǒng)調(diào)試階段,我發(fā)還現(xiàn)了很多細(xì)節(jié)方面的不足,使我認(rèn)識(shí)到設(shè)計(jì) 一個(gè)系統(tǒng)并非想象中那么簡單,而是需要考慮各個(gè)方面結(jié)果的。通過本次課程設(shè)計(jì),我加深了對順序存儲(chǔ)結(jié)構(gòu)的理解,更加熟悉了順序表的 基本操作,還有文件讀寫方面的知識(shí)得到了回顧。通過客戶積分系統(tǒng)軟件

13、的設(shè)計(jì), 我基本熟悉了一般的軟件開發(fā)流程,認(rèn)識(shí)到前期設(shè)計(jì)的重要性與盲目編代碼錯(cuò)誤 觀點(diǎn)??偟膩碚f,本次課程設(shè)計(jì)獲益匪淺,既是對書本所學(xué)知識(shí)的回顧,更是對 課本所學(xué)知識(shí)的運(yùn)用。5參考文獻(xiàn)1 嚴(yán)蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu) M清華大學(xué)出版社,2005.2 何欽銘,顏暉.C語言程序設(shè)計(jì).M高等教育出版社,2008.附錄源代碼:#in clude<stdio.h>#in clude<stdlib.h> #in clude<stri ng.h>typedef structchar no10;/客戶編號(hào) char name5;float poin ts;/積分float dis

14、cou nt; /折扣Customer;#define listinitsize 10#defi ne list in creme nt 10typedef structCustomer * elem;int len gth;/當(dāng)前長度 int listsize; /當(dāng)前分配的存儲(chǔ)容量SqList;void In itSq(SqList & L)L.elem=(Customer *)malloc(listi nitsize*sizeof(Customer); /動(dòng)態(tài)分配順序表存儲(chǔ)空間if(!L.elem)prin tf("Not able to allocate memory

15、.' n" );exit(1);L.len gth=O;L.li stsize=list in itsize;int main (void)void Add(SqList & L);void Show(SqList & L);void Delete(SqList & L);void update(SqList & L);void Query(SqList & L);void Reset(SqList & L);SqList L;lnitSq(L);char ch; Customer * n ewbase; FILE *fp;if

16、(fp=fope n("1.txt","r")=NULL)printf("File open error!n"); exit(O);Customer customer; int c=0,f; ch=fgetc(fp) ;rew in d(fp);if(ch=EOF) printf(" 文件為空!n");elsefsca nf(fp,"%s%s%f%f',customer. no customer, name,&customer.disco unt,&customer .poi nt

17、s);while(!feof(fp)L.elemc=customer; c+; L.len gth+;fsca nf(fp,"%s%s%f%f',customer. no customer, name,&customer.disco unt,&customer .poi nts);if(L.len gth>=L .li stsize)n ewbase=(Customer*)realloc(L.elem,(L .l istsize+listi ncreme nt)*sizeof(Customer);if(!n ewbase)prin tf("No

18、t able to allocate memory.' n" );exit(1);L.elem=n ewbase; L.l istsize+=listi ncreme nt;更新顧printf(” 輸入你要選擇的操作:nt1-添加顧客信息nt2-刪除顧客信息nt3- 客信息nt4-查找顧客信息nt5-顯示所有顧客信息nt6-清零所有客戶的消費(fèi)積分 nt0-退出 n");printf(*n請選擇操作:");sca nf("%d",&f);while(f!=0)switch(f) case 1: Add(L);break;case

19、2:Delete(L);break;case 3:update(L);break;case 4:Query(L);break;case 5:Show(L);break;case 6:Reset(L);break;default: printf(”請輸入正確的操作!n"); break;printf(請選擇操作:”);sea nf("%d", &f);if(fclose(fp)printf("Can not close the file error!n");exit(0);if(fp=fope n( "1.txt",&

20、quot;w+")=NULL)printf("File open error!n");exit(0);for(i nt i=0;i<L .len gth ;i+) fprin tf(fp,"%s %s %.1f %.0fn",L.elemi. no,L.elemi. name ,L .elemi.discou nt,L .elemi.poi nts);if(fclose(fp)printf("Can not close the file error!n");exit(0);return 0;void Add(SqLis

21、t & L)int z=L .len gth; Customer customer;printf(" 請輸入客戶信息:n");printf("編號(hào):");scanf("%s",customer.no);for(i nt i=0;i<L .len gth;i+)if(strcmp(L.elemi. no customer. no)=0)prin tf("編號(hào)已存在,請重新輸入:");scan f("%s",customer. no); i=0; prin tf(":&quo

22、t;); sca nf("%s",customer. name );customer.disco un t=10; customer.po ints =0; L.elemz=customer;Len gth+;void Show(SqList &L)for(i nt i=0;i<L .len gth;i+)prin tf("%s %s %.1f %.0fn",L.elemi. no,L.elemi. name,L.elemi.discou nt,L .elemi.poi nts);void Query(SqList & L) cha

23、r no310;int i;prin tf("輸入要查詢的顧客編號(hào):");scan f("%s", no3);for( i=0;i<L .len gth;i+)if(strcmp(L.elemi. no,no 3)=0)prin tf("%s %s %.1f %.0fn",L.elemi. no,L .elemi. name ,L .elemi.discou nt,L.ele mi.poi nts);break;if(i>=L.length) printf("沒有該顧客信息!n");void Delet

24、e(SqList & L)char n o110,xx; int cc=1;prin tf("輸入你要?jiǎng)h除的顧客的編號(hào):");sca nf("%s", no1);printf(”您確定要?jiǎng)h除 s號(hào)客戶的信息嗎?n確定-Y,取消-N:",nol);scan f("%s", &xx);if(xx='Y'|xx='y')for(i nt i=0;i<Len gth;i+)if(strcmp(L.elemi. no,n o1)=0)for(i nt j=i;j<L .len

25、 gth;j+) L.elemj=L.elemj+1;L.le ngth-; prin tf("顧客信息刪除完畢!n"); cc=0;if(cc=0) break;!n");if(i>=L.le ngth) prin tf("您所要?jiǎng)h除的顧客信息不存在或已刪除else if(xx='N'|xx=' n') prin tf("您的刪除操作已取消!n");int poin ts_cal(float co nsume) /積分計(jì)算規(guī)則int ss=0;if(con sume<=0) ss=0; else if(con sume<=500) ss=c on sume/10;else if(con sume<=2000) ss=(co nsume-500)/8+50;else if(con sume<=5000) ss=(co nsume-2000)/6+237;else ss=(co nsume-5000)/5+737;return ss;double Discou nt(i nt m) /折扣的計(jì)算規(guī)則double ee;if(m<=50) ee=10; else if(m<=200) ee=9; else if(m<=500

溫馨提示

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

評論

0/150

提交評論