個(gè)人消費(fèi)管理系統(tǒng)C語言課程設(shè)計(jì)_第1頁
個(gè)人消費(fèi)管理系統(tǒng)C語言課程設(shè)計(jì)_第2頁
個(gè)人消費(fèi)管理系統(tǒng)C語言課程設(shè)計(jì)_第3頁
個(gè)人消費(fèi)管理系統(tǒng)C語言課程設(shè)計(jì)_第4頁
個(gè)人消費(fèi)管理系統(tǒng)C語言課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目目 錄錄 1 需求分析需求分析.1 1.1問題描述 1.2 輸入數(shù)據(jù)要求.1 1.2輸出數(shù)據(jù)要求1 1.3開發(fā)環(huán)境和工具2 1.4成員分工2 2 總體設(shè)計(jì)總體設(shè)計(jì).3 2.1 總體設(shè)計(jì)思路.3 2.2模塊結(jié)構(gòu)圖 3 2.3模塊說明4 3 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì).5 3.1 數(shù)據(jù)類型定義5 3.2 算法思想 6 3.3 具體實(shí)現(xiàn) 7 A 讀入及保存文件模塊 7 B 信息插入、刪除模塊 7 C 查找及顯示信息模塊 9 D 排序模塊:按時(shí)間,類別,金額 11 E 統(tǒng)計(jì)模塊 15 4 測(cè)試結(jié)果及分析測(cè)試結(jié)果及分析.21 5 總結(jié)總結(jié).23 參考文獻(xiàn)參考文獻(xiàn).25 附錄附錄.26 1 需求分析需求分析 1.

2、1 問題描述問題描述 當(dāng)代大學(xué)生有著旺盛的消費(fèi)需求,消費(fèi)觀念的超前和消費(fèi)實(shí)力的滯后 決定了他們特殊的消費(fèi)心理和消費(fèi)行為。大學(xué)生科學(xué)消費(fèi)觀的建立和 合理消費(fèi)規(guī)劃不僅關(guān)系到大學(xué)生健康消費(fèi)心理的形成,還影響到大學(xué) 生邁入社會(huì)后社會(huì)經(jīng)濟(jì)生活的適應(yīng)能力,本系統(tǒng)將提供一個(gè)日常消費(fèi) 記錄,統(tǒng)計(jì),分析的平臺(tái),幫助大學(xué)生合理的管理自己的日常消費(fèi)。 1.2 輸入數(shù)據(jù)要求輸入數(shù)據(jù)要求 消費(fèi)表信息:時(shí)間,類別,品名,單價(jià),數(shù)量,金額 消費(fèi)信息存放在文件中,以編號(hào)的先后順序存放 用戶從鍵盤讀入消費(fèi)時(shí)間,類別,品名,單價(jià),數(shù)量,金額,保存到文 件中 例如: sum:40.index:1 time:2009-8-4 typ

3、e:1 name:hzw price:0. num:5 sum:3.index:0 time:2010-8-9 type:1 name:hzw price:0. num:4 1.3 輸出數(shù)據(jù)要求輸出數(shù)據(jù)要求 打開:顯示文件中的所有消費(fèi)記錄,提供分頁顯示 保存:將消費(fèi)表的更新結(jié)果存入文件 更新:可插入、刪除、修改各消費(fèi)記錄 查找:按時(shí)間,類別、品名查找消費(fèi)記錄 排序:按時(shí)間,類別,金額 統(tǒng)計(jì):求各類別消費(fèi)品的總金額,求各月的消費(fèi)總金額,求各年的消 費(fèi)總金額 例如: 1.4 開發(fā)環(huán)境和工具開發(fā)環(huán)境和工具 開發(fā)環(huán)境:Windows 2000 開發(fā)工具:C Free5.0 1.5 成員分工成員分工 超

4、 人(郭振興):系統(tǒng)測(cè)試、主調(diào)模塊、 、總體設(shè)計(jì) 蜘蛛俠(林莉莎):、查詢模塊、排序模塊、更新模塊 2 總體設(shè)計(jì)總體設(shè)計(jì) 2.1 總體設(shè)計(jì)思路總體設(shè)計(jì)思路 本設(shè)計(jì)主要包括數(shù)據(jù)錄入模塊,信息刪除模塊,查詢顯示模塊,數(shù)據(jù) 排序模塊, 數(shù)據(jù)統(tǒng)計(jì)模塊. 2.2 模塊結(jié)構(gòu)圖模塊結(jié)構(gòu)圖 根據(jù)需求將系統(tǒng)劃分為五個(gè)功能模塊如圖所示 數(shù) 據(jù) 錄 入 模 塊 數(shù) 據(jù) 統(tǒng) 計(jì) 模 塊 插 入 刪 除 模 塊 查 詢 顯 示 模 塊 數(shù) 據(jù) 排 序 模 塊 個(gè)人消費(fèi)管理系統(tǒng) 2.3 模塊說明模塊說明 1.數(shù)據(jù)錄入模塊. 本模塊的設(shè)計(jì)主要包括三個(gè)函數(shù),struct Time(消 費(fèi)時(shí)間) ,enum TYPE(消費(fèi)類型

5、)struct ConsumeRecord(完整的消 費(fèi)記錄)struct ConsumeRecord 函數(shù)主要實(shí)現(xiàn)程序的初始建庫,把數(shù) 據(jù)添加到文件中,其主要過程是打開文件,調(diào)用 Time ,TYPE 函數(shù), 將需要錄入的數(shù)據(jù)從鍵盤輸入,添加到文件中。 2.信息刪除模塊. 本模塊通過輸入需要查找的條目的索引號(hào),程序 循環(huán)遍歷所有已存的消費(fèi)條目,如果消費(fèi)條目的索引號(hào)等于要?jiǎng)h除的 索引號(hào),刪除該索引號(hào)對(duì)應(yīng)的消費(fèi)條目,并將其后面的消費(fèi)條目依次 往前移動(dòng)。 3.查詢顯示模塊. 本模塊通過輸入需要查找的條目的索引號(hào),程序 循環(huán)遍歷所有已存的消費(fèi)條目,直到查找完或者找到。找到后顯示從 record 指針

6、開始的 number 個(gè)條目,遍歷需要查找的條目,依次顯示。 4.數(shù)據(jù)排序模塊. 本模塊交換兩個(gè)條目的內(nèi)容,將 record 數(shù)組用選 擇冒泡法分別以消費(fèi)時(shí)間,類型,價(jià)格進(jìn)行排序。 5.數(shù)據(jù)統(tǒng)計(jì)模塊. 本模塊已存條目指針和已存?zhèn)€數(shù)如果已存條目小 于等于零,退出統(tǒng)計(jì), 將條目按時(shí)間排序,如果只有一條記錄直接輸出, 如果有多條記錄,則遍歷所有記錄并分別打印如果當(dāng)前記錄與下一條 記錄年份月份相同,則將其歸于一個(gè)月,并累加該月的總金額. 月份 變了,打印統(tǒng)計(jì)月份的總金額,/將年份金額賦值為下一月份,開始記 錄下一月份. 3 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì) 3.1 數(shù)據(jù)類型定義數(shù)據(jù)類型定義 /時(shí)間結(jié)構(gòu)體記錄消費(fèi)時(shí)間

7、struct Time int year; int month; int day; ; 類型結(jié)構(gòu)體記錄消費(fèi)類型 enum TYPE STUDY, EAT, PLAY ; /消費(fèi)條目結(jié)構(gòu)體,用以記錄完整的消費(fèi)記錄 struct ConsumeRecord int index;/消費(fèi)索引 Time time;/消費(fèi)時(shí)間 TYPE type;/消費(fèi)類型 char name256;/消費(fèi)名稱 float price;/單價(jià) int num;/數(shù)目 float sum;/總價(jià) nt _tmain(int argc, _TCHAR* argv ConsumeRecord* recordTmp;/臨時(shí)條目指

8、針 int indexToDelete;/需要?jiǎng)h除的條目的索引號(hào) int indexToFind;/需要查找的條目的索引號(hào) char sortType=0;/排序類型 int nCurrent=0;/已存條目的個(gè)數(shù) int nCurrentDump;/暫存“已存條目的個(gè)數(shù)” ,用以分頁顯示的時(shí)候, 還原已存條目個(gè)數(shù) char next;/分頁顯示時(shí)輸入變量,輸入n顯示下一頁(十行) FILE *file;/文件指針,用以從文件讀取記錄,或?qū)懳募?ConsumeRecord* pCurrent;/現(xiàn)在所指向的條目的指針 ConsumeRecord record100;/現(xiàn)存條目數(shù)組 char i

9、nput=o;/記錄需要做的操作的變量 3.2 算法思想算法思想 分別用時(shí)間結(jié)構(gòu)體記錄消費(fèi)時(shí)間, 類型結(jié)構(gòu)體記錄消費(fèi)類型, 消費(fèi) 條目結(jié)構(gòu)體記錄完整的消費(fèi)記錄.其中查詢和刪除模塊通過掃描已建立 的所有數(shù)據(jù),索引出符合條件的條目,統(tǒng)計(jì)模塊先通過以時(shí)間,類型,價(jià)格 進(jìn)行排序,再統(tǒng)計(jì)各類別消費(fèi)品的總金額,各月的消費(fèi)總金額,各年的 消費(fèi)總金額. 3.3 具體實(shí)現(xiàn)具體實(shí)現(xiàn) A.讀入及保存文件模塊讀入及保存文件模塊 將消費(fèi)數(shù)據(jù)以文件的形式儲(chǔ)存,定義一個(gè)文件指針file使其指向該 文件,利用標(biāo)準(zhǔn)輸入函數(shù)fopen讀入文件內(nèi)數(shù)據(jù)。具體是用指針指向條 目的第一行,判斷如果已存文件數(shù)小于最大文件數(shù),讀取文件。讀取

10、 一條后,指針指向下一個(gè)地方以讀取下一條目,同時(shí)使讀入條目數(shù) nCurrent加一。如此循環(huán)讀完數(shù)據(jù)后,將文件關(guān)閉。 以同樣的方法打開文件,遍歷所有的條目直到結(jié)束,將消費(fèi)一個(gè) 條目寫入文件,消費(fèi)條目指針指向下一個(gè)消費(fèi)條目,用以將下一個(gè)消 費(fèi)條目寫入文件,最后關(guān)閉文件。 B信息插入、刪除模塊信息插入、刪除模塊 自定義函數(shù)DeleteRecord(ConsumeRecord* record,intiindex=index) for (int j = i;jnumsum=pCurrent-price*pCurrent-num; pCurrent+; nCurrent+; pCurrent= 如下:

11、C.查找及顯示信息模塊查找及顯示信息模塊 Record:指向消費(fèi)條目記錄數(shù)組, nCurrent:已存條目數(shù), index:需要查找的條目的索引號(hào) 利用ConsumeRecord* FindRecord(ConsumeRecord* record,intiindex=index) return record; printf(not found!); return 0; 查找完后調(diào)用ShowRecord輸出要顯示的條目。 ShowRecord函數(shù)功能如下: void ShowRecord(ConsumeRecord* record) printf(index:%d %d-%d-%d type:%

12、d name:%s price:%f num:%d sum:%fn,record-index,record- time.year,record-time.month,record-time.day,record-type,record- name,record-price,record-num,record-sum); 然后調(diào)用顯示ShowRecords查找到的從指針開始的總的條目, ShowRecords功能如下: void ShowRecords(ConsumeRecord* record,int number) for (int i=0;inumber;i+) ShowRecord(re

13、cord+i); 注:number:需要顯示的條目數(shù)。 Record:指向第一個(gè)要顯示的指針。 D排序模塊:按時(shí)間,類別,金額排序模塊:按時(shí)間,類別,金額 具體來說是定義了一個(gè)函數(shù),實(shí)現(xiàn)三種方式的排序,其中運(yùn)用了 switch語句,根據(jù)不同的排序類型劃分了不同的case,然后選擇出相應(yīng) 的功能來實(shí)現(xiàn)要求,比較實(shí)用而且簡(jiǎn)潔。函數(shù)內(nèi)部是采用冒泡法排序, 首先判斷選擇的類型然后進(jìn)入相應(yīng)的功能區(qū)。定義函數(shù) void SortRecord(ConsumeRecord* record,int nCurrent,char type) 其中 record:排序數(shù)組頭指針,nCurrent:數(shù)組的個(gè)數(shù),type

14、:排 序類型 void SortRecord(ConsumeRecord* record,int nCurrent,char type) int i,j; switch(type) case t: /按時(shí)間排序 for(i=0;inCurrent-1;i+) for(j=0;jrecordj+1.time.year) swap( else if /年份相同,比較月份 (recordj.time.year=recordj+1.time.year else if /年份月份相同,比較日期 (recordj.time.year=recordj+1. time.year break; /按類型排序 c

15、ase l: for(i=0;inCurrent-1;i+) for(j=0;jrecordj+1.type) swap( break; /按價(jià)格排序 case p: for(i=0;inCurrent-1;i+) for(j=0;jrecordj+1.price) swap( break; 如下: E統(tǒng)計(jì)模塊統(tǒng)計(jì)模塊 為了便于統(tǒng)計(jì),現(xiàn)將數(shù)據(jù)進(jìn)行排序,根據(jù)不同的統(tǒng)計(jì)方式進(jìn)行不 同的排序,如為了計(jì)算每年的消費(fèi)總額,需要將數(shù)據(jù)按時(shí)間排序,然 后進(jìn)行統(tǒng)計(jì),按類型排序就利于統(tǒng)計(jì)每個(gè)項(xiàng)目的消費(fèi)情況。在程序中 就要在統(tǒng)計(jì)之前根據(jù)需要調(diào)用相應(yīng)的函數(shù)實(shí)現(xiàn)排序功能。具體如下所 示: void Statistic

16、(ConsumeRecord* record,int nCurrent) /如果已存條目小于等于零,退出 if (nCurrentsum;/按年統(tǒng)計(jì)的總金額,將第一條 記錄的金額付給他 double sumMonth = record-sum;/按月統(tǒng)計(jì)的總金額,將第一條記 錄的金額付給他 double sumType = record-sum;/按類型統(tǒng)計(jì)的總金額,將第一條記 錄的金額付給他 /如果只有一條記錄直接輸出 if (nCurrent = 1) /輸出按年統(tǒng)計(jì)的總金額 printf(year:%d sum:%fn,record0.time.year,sumYear); /輸出按月統(tǒng)

17、計(jì)的總金額 printf(year:%d-month%d: sum:%fn,record0.time.year,record0.time.month,sumMonth); /輸出按類型統(tǒng)計(jì)的總金額 printf(type:%d sum:%fn,record0.type,sumType); return; /如果有多條記錄,則遍歷所有記錄并分別打印 for (int i=0;inCurrent;i+) /如果當(dāng)前記錄與下一條記錄年份相同,則將其歸于一年,并 累加改年的總金額 if (recordi.time.year=recordi+1.time.year) sumYear+=recordi+1

18、.sum; else /年份變了,打印統(tǒng)計(jì)年份的總金額 printf(year:%d sum:%fn,recordi.time.year,sumYear); /將年份金額賦值為下一年份,開始記錄下一年分 sumYear=recordi+1.sum; /如果當(dāng)前記錄與下一條記錄年份月份相同,則將其歸于一個(gè) 月,并累加該月的總金額 if (recordi.time.year=recordi+1.time.year else /月份變了,打印統(tǒng)計(jì)月份的總金額 printf(year:%d-month%d: sum:%fn,recordi.time.year,recordi.time.month,su

19、mMonth); /將年份金額賦值為下一月份,開始記錄下一月分 sumMonth=recordi+1.sum; /按類型將記錄排序 SortRecord(record,nCurrent,l); /遍歷所有記錄 for (int i=0;inCurrent;i+) /如果當(dāng)前記錄與下一條記錄類型相同,則將其歸于同一類型, 并累加改類型的總金額 if (recordi.type=recordi+1.type) sumType+=recordi+1.sum; else /類型變了,打印該類型的總金額 printf(type:%d sum:%fn,recordi.type,sumType); /將類型

20、金額賦值為下一類型,開始記錄下一類型 sumType = recordi+1.sum; 如下: /輸入e則退出,否則一直運(yùn)行 以上是各個(gè)函數(shù)功能,在實(shí)際運(yùn)行時(shí)要建立一個(gè)dos菜單輸入不同的 指令來實(shí)現(xiàn)相應(yīng)的功能,即下面的顯示信息: 提示用戶選擇想要的操作 4.測(cè)試結(jié)果及分析測(cè)試結(jié)果及分析 部分結(jié)果如下: 本次測(cè)試主要對(duì)程序的五個(gè)模塊功能進(jìn)行了檢驗(yàn),剛開始的時(shí)候也出現(xiàn) 了很多沒有預(yù)想到的錯(cuò)誤,接著一步步查找錯(cuò)誤,認(rèn)真分析,最終正確地 實(shí)現(xiàn)了功能,結(jié)果與預(yù)期基本相同.最終通過給老師提問,以及自己的演 示也出現(xiàn)了一些問題,比如:功能實(shí)現(xiàn)不全,以及結(jié)果顯示不清楚等等. 出現(xiàn)的顯示不清楚如下: 應(yīng)當(dāng)按照

21、平常習(xí)慣建立表格形式的目錄,沒有必要每次的結(jié)果都要在前 面附帶類型. 這個(gè)不足在于2009年的統(tǒng)計(jì)處有問題.這些問題提醒了我以后做什么事 情都要多方面考慮,設(shè)計(jì)這種程序關(guān)鍵在于它的實(shí)用性. 5.5.總結(jié)總結(jié) 經(jīng)過上一個(gè)學(xué)期對(duì)C 程序設(shè)計(jì)的學(xué)習(xí),我們學(xué)習(xí)了理論知識(shí), 了解了 C 語言程序設(shè)計(jì)的思想,這些知識(shí)都為我們的下一步學(xué)習(xí)打下 了堅(jiān)實(shí)的基礎(chǔ)。通過課程設(shè)計(jì),一方面是為了檢查我們一個(gè)學(xué)期來我 們學(xué)習(xí)的成果,另一方面也是為了讓我們進(jìn)一步的掌握和運(yùn)用它,同 時(shí)也讓我們認(rèn)清自己的不足之處和薄弱環(huán)節(jié),加以彌補(bǔ)和加強(qiáng)。 在個(gè)人消費(fèi)系統(tǒng)程序編寫過程中也體會(huì)到了做事情一頂要細(xì)心、 認(rèn)真。更加知道了要掌握好基礎(chǔ)

22、知識(shí)。還有體會(huì)到了成功的感覺!更 加體會(huì)到了團(tuán)隊(duì)合作的重要性(很感謝我的隊(duì)友),“一個(gè)諸葛亮比不上 三個(gè)臭皮匠?!敝懒酥挥袌F(tuán)隊(duì)合作才會(huì)更好的完成設(shè)計(jì)!也體會(huì)到以 后在工作中團(tuán)隊(duì)合作的必要性和重要性! 通過本項(xiàng)課程設(shè)計(jì)培養(yǎng)了我獨(dú)立思考、 綜合運(yùn)用所學(xué)有關(guān)相應(yīng) 知識(shí)的能力,掌握 工程軟件設(shè)計(jì)的基本方法,強(qiáng)化上機(jī)動(dòng)手編程能 力,闖過理論與實(shí)踐相結(jié)合的難關(guān)!也知道了自己的動(dòng)手能力不強(qiáng)有 待進(jìn)一步的提高!在設(shè)計(jì)過程中不能夠把書本上的知識(shí)與實(shí)踐相結(jié)合, 這也就增加了設(shè)計(jì)不好該程序的想法!一次次設(shè)計(jì)錯(cuò)誤增加了我放棄 的想法!不過經(jīng)過大家的努力終于完成了課程設(shè)計(jì)!完成該程序后想 起自己以前的每一次對(duì)自己失去

23、信心,就覺得并不是在知識(shí)掌握上打 敗了,而是自己對(duì)自己缺乏信心!只要自己對(duì)自己不失去信心相信就 可以完成那些以前認(rèn)為完成不了的事情!懂得了自己以后要在做任何 事情時(shí)都要自信!當(dāng)自己都不相信自己能夠成功時(shí)還可能會(huì)獲得成功 嗎?也知道了自己在以前的學(xué)習(xí)中有很大的不足導(dǎo)致在設(shè)計(jì)過程中出 現(xiàn)了很多的問題,有些地方看不懂也不知道怎么去設(shè)計(jì),但是在設(shè)計(jì) 過程中也學(xué)習(xí)了很多,掌握了自己以前沒有學(xué)好的知識(shí),雖然一時(shí)可 以掌握完以前沒有學(xué)好的知識(shí),不過也給自己敲響了警鐘,在學(xué)習(xí)中 不可以伏于表面,要想學(xué)好每一門課程都要踏踏實(shí)實(shí),做什么都不是 給別人看的!都是要更好的掌握該門知識(shí),提高自己的自身的修養(yǎng), 提高自己

24、的能力!為以后的工作打下良好的知識(shí)基礎(chǔ)和技能基礎(chǔ)! 參考文獻(xiàn)參考文獻(xiàn) 譚浩強(qiáng)編著.C 程序設(shè)計(jì)第二版M.北京:清華大學(xué)出版社,1999 陳朔鷹,陳英編著.C 語言趣味程序百例精解M.北京:北京理工大 學(xué)出版社,1994 電腦知識(shí)與技術(shù)學(xué)術(shù)交流版J2005.2 (備注:來自網(wǎng)絡(luò)資源) Herbert Schildit 著. 戴健鵬譯. C 語言大全 (第二版)M.北 京:電子工業(yè)出版社,1994 譚浩強(qiáng),張基溫,唐永炎編著. C 語言程序設(shè)計(jì)教程.M北京: 高等教育出版社,1992 秦友淑,曹化工編著. C 語言程序設(shè)計(jì)教程. M武漢:華中理工 大學(xué)出版社,1996 7.黃明等編著.21 世紀(jì)進(jìn)

25、階輔導(dǎo) C 語言程序設(shè)計(jì). M大連理工大學(xué) 出版 附錄 源程序源程序: / 個(gè)人消費(fèi)系統(tǒng).cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 /#include stdafx.h #include #include #include /時(shí)間結(jié)構(gòu)體記錄消費(fèi)時(shí)間 struct Time int year; int month; int day; ; /消費(fèi)條目結(jié)構(gòu)體,用以記錄完整的消費(fèi)記錄 struct ConsumeRecord int index;/消費(fèi)索引 Time time;/消費(fèi)時(shí)間 int type;/消費(fèi)類型 char name256;/消費(fèi)名稱 float price;/單價(jià) int num

26、;/數(shù)目 float sum;/總價(jià) ; /讀取文件。 /file 文件指針,record 消費(fèi)條目數(shù)組指針,len 為消費(fèi)條目數(shù)組最大長(zhǎng)度(用 以判定越界) ,nCurrent 消費(fèi)條目數(shù)組已存條目個(gè)數(shù) void ReadFile(FILE* /讀取文件直到結(jié)束 while(!feof(file) /如果已存文件數(shù)小于最大文件數(shù),讀取文件 if (nCurrentindex, /數(shù)組指針指向下一個(gè)地方,以讀取下一條記錄 record+; /已存記錄數(shù)加一 nCurrent+; /關(guān)閉文件 fclose(file); /保存文件。 /file 為文件指針,record 消費(fèi)條目數(shù)組指針,nCu

27、rrent 已存消費(fèi)條目條目個(gè) 數(shù) void SaveFile(FILE* /遍歷每一個(gè)消費(fèi)條目直到結(jié)束 for (int i=0;iindex,record-time.year,record-time.month,record- time.day, record-type,record-name,record-price,record-num,record-sum); /消費(fèi)條目指針指向下一個(gè)消費(fèi)條目,用以將下一個(gè)消費(fèi)條目寫入文 件 record+; /關(guān)閉文件 fclose(file); /刪除消費(fèi)記錄 /record 消費(fèi)條目數(shù)組指針,nCurrent 已存消費(fèi)條目的個(gè)數(shù),index 即

28、將刪除 的記錄的索引號(hào) void DeleteRecord(ConsumeRecord* record,intiindex=index) /刪除該索引號(hào)對(duì)應(yīng)的消費(fèi)條目,并將其后面的消費(fèi)條目依次往 前移動(dòng) for (int j = i;jnCurrent;j+) recordj=recordj+1; /已存消費(fèi)條目減一 nCurrent-; /查找消費(fèi)條目 /record 消費(fèi)條目記錄數(shù)組,nCurrent 已存條目數(shù),需要查找的條目的索引號(hào) ConsumeRecord* FindRecord(ConsumeRecord* record,intiindex=index) return recor

29、d; /遍歷完了沒有找到,輸出“not found!” printf(not found!); return 0; /顯示條目。 /record 需要顯示的條目的指針 void ShowRecord(ConsumeRecord* record) /輸出要顯示的條目 printf(index:%d %d-%d-%d type:%d name:%s price:%f num:%d sum:%fn, record-index,record-time.year,record-time.month,record- time.day,record-type,record-name,record-price

30、,record-num,record-sum); /顯示從 record 指針開始的 number 個(gè)條目 /record 第一個(gè)要顯示的條目的指針,number 需要顯示的條目的個(gè)數(shù) void ShowRecords(ConsumeRecord* record,int number) /遍歷需要查找的條目,依次顯示 for (int i=0;inumber;i+) /顯示條目 ShowRecord(record+i); /交換兩個(gè)條目的內(nèi)容 void swap(ConsumeRecord *pR1,ConsumeRecord *pR2) ConsumeRecord temp; temp=*p

31、R1; *pR1=*pR2; *pR2=temp; /將 record 數(shù)組排序,選擇冒泡排序 /record 排序數(shù)組頭指針,nCurrent 數(shù)組的個(gè)數(shù),排序類型 void SortRecord(ConsumeRecord* record,int nCurrent,char type) int i,j; /判斷排序類型 switch(type) /按時(shí)間排序 case t: /遍歷數(shù)組 for(i=0;inCurrent-1;i+) for(j=0;jrecordj+1.time.year) swap( /年份相同,比較月份 else if (recordj.time.year=recor

32、dj+1.time.year /年份月份相同,比較日期 else if (recordj.time.year=recordj+1.time.year break; /按類型排序 case l: for(i=0;inCurrent-1;i+) for(j=0;jrecordj+1.type) swap( break; /按價(jià)格排序 case p: for(i=0;inCurrent-1;i+) for(j=0;jrecordj+1.price) swap( break; /統(tǒng)計(jì) /已存條目指針,和已存?zhèn)€數(shù) void Statistic(ConsumeRecord* record,int nCur

33、rent) /如果已存條目小于等于零,退出 if (nCurrentsum;/按年統(tǒng)計(jì)的總金額,將第一條記錄的金額 付給他 double sumMonth = record-sum;/按月統(tǒng)計(jì)的總金額,將第一條記錄的金 額付給他 double sumType = record-sum;/按類型統(tǒng)計(jì)的總金額,將第一條記錄的金 額付給他 /如果只有一條記錄直接輸出 if (nCurrent = 1) /輸出按年統(tǒng)計(jì)的總金額 printf(year:%d sum:%fn,record0.time.year,sumYear); /輸出按月統(tǒng)計(jì)的總金額 printf(year:%d-month%d: s

34、um:%fn,record0.time.year,record0.time.month,sumMonth); /輸出按類型統(tǒng)計(jì)的總金額 printf(type:%d sum:%fn,record0.type,sumType); return; /如果有多條記錄,則遍歷所有記錄并分別打印 for (int i=0;inCurrent;i+) /如果當(dāng)前記錄與下一條記錄年份相同,則將其歸于一年,并累加改 年的總金額 if (recordi.time.year=recordi+1.time.year) sumYear+=recordi+1.sum; else /年份變了,打印統(tǒng)計(jì)年份的總金額 pri

35、ntf(year:%d sum:%fn,recordi.time.year,sumYear); /將年份金額賦值為下一年份,開始記錄下一年分 sumYear=recordi+1.sum; /如果當(dāng)前記錄與下一條記錄年份月份相同,則將其歸于一個(gè)月,并 累加該月的總金額 if (recordi.time.year=recordi+1.time.year else /月份變了,打印統(tǒng)計(jì)月份的總金額 printf(year:%d-month%d: sum:%fn,recordi.time.year,recordi.time.month,sumMonth); /將年份金額賦值為下一月份,開始記錄下一月分

36、 sumMonth=recordi+1.sum; /按類型將記錄排序 SortRecord(record,nCurrent,l); for (int j=0;jnCurrent;j+) /如果當(dāng)前記錄與下一條記錄類型相同,則將其歸于同一類型,并累 加改類型的總金額 if (recordj.type=recordj+1.type) sumType+=recordj+1.sum; else /類型變了,打印該類型的總金額 printf(type:%d sum:%fn,recordj.type,sumType); /將類型金額賦值為下一類型,開始記錄下一類型 sumType = recordj+1.

37、sum; int _tmain(int argc, _TCHAR* argv) ConsumeRecord* recordTmp;/臨時(shí)條目指針 int indexToDelete;/需要?jiǎng)h除的條目的索引號(hào) int indexToFind;/需要查找的條目的索引號(hào) char sortType=0;/排序類型 int nCurrent=0;/已存條目的個(gè)數(shù) int nCurrentDump;/暫存“已存條目的個(gè)數(shù)” ,用以分頁顯示的時(shí)候,還原 已存條目個(gè)數(shù) char next;/分頁顯示時(shí)輸入變量,輸入n顯示下一頁(十行) FILE *file;/文件指針,用以從文件讀取記錄,或?qū)懳募?Cons

38、umeRecord* pCurrent;/現(xiàn)在所指向的條目的指針 ConsumeRecord record100;/現(xiàn)存條目數(shù)組 char input=o;/記錄需要做的操作的變量 /打印提示信息,提示用戶選擇想要的操作 printf(plese select:n c -for clear screenn o -for openn s -for saven i -for insertn d -for deleten f -for findn p -for sortn t -for stasticn e -for exitn l -for listn h -for helpn); /輸入e則退出

39、,否則一直運(yùn)行 while(input != e) /讀取用戶選擇的操作 scanf(%c, switch(input) /請(qǐng)求幫助 case h: printf(plese select:n c -for clear screenn o -for openn s -for saven i -for insertn d -for deleten f -for findn p -for sortn t -for stasticn e -for exitn l -for listn h -for helpn); break; /清屏 case c: system( cls); break; /讀取文件 case o: ReadFile(file,record,100,nCurrent); break; /保存條目到文件 case s: SaveFile(file,record,nCurrent); break; /插入條目 case i: /判斷條目是否已滿 if (nCurrentnum=-1; while(pCurrent-num index, /清空輸入緩存,進(jìn)行下一次輸入 setbu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論