




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
個人記賬系統專業課程設計報告PAGE4軟件工程學年設計題目:個人記賬系統院系:計算機科學與技術班級:計算機班學號:姓名:指導教師:2011年7月15日摘要本報告介紹了一個運用C語言知識和DEVC++創建的用于個人財務情況管理的個人記賬系統。在該系統中創建了包含增加、刪除、修改、查找、插入、瀏覽、統計的功能總列表,創建序號鏈接各功能列表,輸入收入支出信息情況,增加信息,刪除信息,,創建合計排序瀏覽用戶可從總體上瀏覽個人財務信息情況。關鍵詞:C語言,DEVc++,個人記賬系統目錄TOC\o"1-2"\h\z\u第一章 緒論 11.1開發背景及意義 11.2相關技術背景 21.3開發及運行環境 4第二章需求分析 52.1設計目標 52.2功能需求 52.3可行性分析 5第三章總體設計 73.1設計目標 73.2系統結構設計 73.3系統功能結構圖 7第四章詳細設計 125.1基本對象設計 125.2系統主程序的設計與實現 135.3用戶登錄功能的設計與實現 175.4流水賬視圖的設計與實現 205.5消費結構視圖的設計與實現 235.6流水賬明細視圖的設計與實現 245.7賬戶設置功能的設計與實現 285.8消費趨勢堆棧圖的設計與實現 295.9系統輔助功能的設計與實現 30第六章軟件測試 346.1系統測試 346.2性能測試 376.3驗收測試 37第七章總結 38參考文獻 40緒論1.1開發背景及意義個人理財在我國得到大眾的認可和金融機構的重視是近幾年的事情。人們對個人理財的重視程度,與我國市場經濟制度不斷完善、資本市場長足發展、金融產品的日趨豐富以及居民總體收入水平的逐年上升等等是分不開的。但是比起美、日等發達國家,我國人民對于個人理財的理解還處于初級階段。但是其實理財并不困難,并非非要依靠個人理財專業人士的建議才能身體力行。只要了解收支狀況、設定財務目標、擬定策略、編列預算、執行預算到分析成果這六大步驟,便可以輕松的達成個人的財務管理。至于要如何預估收入掌握支出進而檢討改進則有賴于平日的財務記錄,簡單的說記賬是理財的第一步。最近越來越多的人具有了記賬的習慣,在上班族、學生族既定收入穩定的情況下,采取“節流”的科學理財方式是非常實際的,也符合個人理財統籌的原則。家庭、個人的收入支出結構在日益發生變化,單純地靠在本子上記錄收入支出無法滿足對于收入支出結構的統計分析,因此以個人用戶為目標的記賬軟件應運而生。相應的各種面向家庭及個人的理財軟件也越來越多。但是眾多個人理財軟件操作專業,對于個人用戶來說功能過于強大,分析數據用語專業也不易理解。因此開發一個操作簡便、統計結果直觀并對個人用戶理財有參考價值的記賬軟件無疑能為廣大個人用戶提供方便。在盛行個人理財的美國,70%以上的家庭都擁有一套自己的理財軟件,其中最具影響力的理財軟件要數Intuit公司開發的Quiken和微軟公司開發的Money這兩款軟件。現在,Intuit公司已成為世界最大的理財軟件與理財咨詢公司,Quiken也成為全世界用戶最多的家庭理財軟件。歐美家庭平日的財務報表,預算,稅務處理,銀行賬目的查詢等等都借助軟件的各項功能,使用理財軟件幫助家庭打理日常的財務安排已經成為一件很平常的事。但由于金融體制上的巨大差異,在歐美國家使用的個人家庭理財軟件卻并沒有登陸中國市場。但是國內的個人理財服務卻剛剛起步,各式各樣的個人理財軟件也如雨后春筍,數不勝數。至少有上百款的所謂個人理財軟件,但實際上99%是個人寫的業務小程序,功能比Excel方便一點而已,有的加一點報表功能,充其量叫記賬軟件。如果個人理財軟件僅有告訴你“柴米油鹽醬醋茶”這種流水賬的功能,Excel足夠了。但真正做到功能強大,技術專業,市場有影響力的,而且形成規模的,國內只有區區兩款,成都的財智和深圳的家財通。總而言之,在不久的將來家庭使用理財軟件也將成為國內家庭的必需品。能提供簡單明了的功能及操作的記賬軟件更是被廣泛需要。這種軟件也會為提升人們的生活質量發揮它最大的效用。1.2相關技術背景C語言是國內外廣泛使用的一種計算機語言,學會使用C語言進行程序設計是計算機工作者的一項基本功。對于我們大學生來說,學習這樣一門“C程序設計教程”更是必要的。本課程設計“家庭財務管理系統”就是通過學習《C程序設計》采用VisualC++作為編譯環境,是程序編譯和運行的。本系統的總體思想基于結構化的程序設計。應用高級語言程序設計中的基本控制結構,如循環和選擇,著重實現管理系統的增、刪、改、查等典型的管理功能由于主要實現的是管理系統的增、刪、改、查等典型功能。程序設計是一門實踐性很強的課程,既要掌握概念,又要動手編譯,還要上機調試運行,通過這一次的課程設計我們從實踐中更進一步的學習和了解C語言,當然由于我們的技術水平有限,在這途中遇到很多問題,程序也未能做到很完美,望見諒!1.3開發及運行環境開發工具:DEVc++運行環境:WindowsXP/WindowsVista/Win7需求分析需求分析是指理解用戶需求,就軟件功能與客戶達成一致,估計軟件風險和評估項目代價,最終形成開發計劃的一個復雜過程。需求分析就是分析軟件用戶的需求是什么。如果投入大量的人力、物力、財力和時間開發出的軟件卻不被人需要,那么所有的投入都是徒勞。本章將詳細闡述對于個人記賬系統的需求分析。以使得本系統可以盡可能地滿足大多數個人用戶記錄日常收支的需要。2.1設計目標為了做出滿足個人用戶的需要的符合質量要求的系統,制定以下設計目標:對于日常收入設parents,school,labor,others分類記錄收入。對于日常支出設clothes,food,house,travel,else分類記錄2.2功能需求為滿足用戶需要,要求本系統有以下功能:記錄日常收支情況的功能。查找某天的收支情況的功能。插入忘記的收支的功能。顯示賬單的功能。統計的功能。2.3可行性分析本課題是基于DEVc++環境,實現記賬系統的開發。為了使本設計更具可行性,本系統的設計嚴格按照軟件工程的設計思想要求,首先對系統進行了可行性分析。為了使分析更為清晰、完整,設計本系統的時,將可行性分析分為經濟可行性、操作可行性、技術可行性三個方面進行分析。1.經濟上可行性:DEVc++是免費開源的軟件,使得開發成本大大下降。而且可重用性高,節省了二次開發的費用。資源利用率高,成本低。從成本效益角度考慮十分可行。2.操作上的可行性:該設計的模塊界面簡潔,方便快捷,簡單易學。即便電腦初學者也可以輕松的操作所有系統的功能。并不需要掌握繁雜的財務專業知識也可以對自己的日常收支有一個大體的把握。3.技術上的可行性:該設計結合了軟件工程和會計學兩個專業的知識,通過相關技術的學習和鉆研是對大學幾年學習內容的很好的串聯。在給定的時間一定能完成需求說明要求的功能,并且確保軟件運行速度及性能均達到用戶期望。總體設計軟件總體設計是把需求分析階段得到的需求轉變成符合成本和質量要求的、抽象的系統實現方案的過程。從需求分析到總體設計,是一個逐漸擴充模型的過程。系統總體設計確定實現系統的策略和目標系統的高層結構。確定設計中的類、關聯、接口形式及實現操作的算法。符合傳統面向對象設計的準則:模塊化,抽象,信息隱藏,低耦合,高內聚。3.1設計目標本系統為個人用戶提供一個記錄日常收支情況,并得到相應統計結果的平臺,主要實現以下目標:提供日常收支情況記錄查看及修改的功能。備份賬目信息。3.2系統結構設計個人記賬系統面向的用戶主要是個人用戶,用戶只要記錄流水賬信息便可經過測算得到相應的統計結果,結合實際調查的其他資料可以得出系統的主要功能和輔助功能,并進行主控界面及基本對象的設計。根據上述分析,結合用戶的具體需求,確定系統主要包括四大功能,分別是流水賬、統計報表。3.3系統功能結構圖具體系統結構如下圖:個人記賬系統個人記賬系統統計查找流水賬流水賬統計查找流水賬流水賬排序流水賬保存讀取文件排序流水賬保存讀取文件按金額排序刪除流水賬新增流水賬按時間排序按日期查找按序號查找按金額排序刪除流水賬新增流水賬按時間排序按日期查找按序號查找詳細設計軟件詳細設計是軟件工程的重要階段,軟件詳細設計細化了高層的體系結構設計,將軟件結構中的主要部件劃分為能獨立編碼、編譯和測試的軟件單元,并進行軟件單元的設計,并最終將影響軟件實現的成敗。優秀的詳細設計在提高編碼質量、保證開發周期、節約開發成本等各方面都起著非常重要的作用,是一個軟件項目成功的關鍵保證。本章將按照設計實現的順序介紹各個單元的設計與實現情況。4.1基本對象設計按照面向對象的分析與設計方法的基本思想,“萬物皆對象”,把“對象”作為解決問題的重心。根據個人記賬系統的具體情況分析主要對象有流水賬、統計數據等。1.流水賬對象流水賬對象代表用戶所記錄的每一筆賬目。每一筆賬目信息包括賬目發生的年月日信息,賬目所屬的消費或收入的詳細類別,賬目名稱和金額。2.統計數據對象本來其實統計數據對象可以不設立,因為全部的統計數據都可以通過計算得到。但是考慮到用戶查詢較為頻繁,為了避免每次查詢均要計算一次,特別設立了統計數據對象。實際上,用于保存計算結果的數據量比較小,犧牲了這些許的空間卻能換來整個系統的高性能,這無疑是很值得的。統計數據對象包含了消費結構所需要的各項收支的統計計算結果。4.2系統主程序的設計與實現在設計系統主程序時,著重考慮項目的核心功能,并圍繞核心功能進行設計。顯然本項目的核心功能就是記賬。用戶需要很方便的進行記賬活動,并且可以快速看到記賬結果。經過反復考慮設計系統的主控界面如圖5-1所示。4.3流水賬視圖的設計與實現1.輸入數據創建鏈表實現代碼如下:APtrcreat(){APtrcPtr;intnum; printf("輸入的序號為0時代表輸入記錄結束\n"); printf("輸入序號:");scanf("%d",&num);if(num==0)returnNULL;else{cPtr=(APtr)malloc(sizeof(Account));cPtr->num=num; printf("輸入日期,格式為****.**.**:"); scanf("%s",cPtr->date); printf("輸入in或out表示收入和支出:"); scanf("%s",cPtr->in_out); printf("輸入金額:"); scanf("%f",&cPtr->amount); printf("輸入門類,收入有parents、school、labor、others\n" "支出有:clothes、food、house、travel、else:"); scanf("%s",cPtr->kind); printf("輸入余額:"); scanf("%f",&cPtr->remain); cPtr->next=creat();returncPtr;}顯示賬單實現代碼如下:voidprint(APtrheadPtr){if(headPtr==NULL){printf("鏈表為空\n");return;}else {if(headPtr->next==NULL)printf("%d\t%-10s\t%-5s\t\t%5.2f\t\t%-10s\t%5.2f\n",headPtr->num, headPtr->date,headPtr->in_out,headPtr->amount,headPtr->kind,headPtr->remain);else {printf("%d\t%-10s\t%-5s\t\t%5.2f\t\t%-10s\t%5.2f\n",headPtr->num, headPtr->date,headPtr->in_out,headPtr->amount,headPtr->kind,headPtr->remain);print(headPtr->next); } }}刪除記錄實現代碼如下:APtrdel(APtrheadPtr){APtrp1; APtrp2;intn,i; chardate[12];if(headPtr==NULL){ printf("nolist!"); return(headPtr); } printf("選擇刪除方式,輸入序號:\n");printf("1.按序號刪除一條記錄\n" "2.按時間刪除一條記錄\n" "3.刪除全部記錄\n");scanf("%d",&i);if(i==1){ printf("輸入要刪除的記錄序號:");scanf("%d",&n);p1=headPtr;while(p1->num!=n&&p1->next!=NULL) { p2=p1; p1=p1->next; }if(p1->num==n)//p1的num等于n {if(p1==headPtr) { headPtr=headPtr->next; }else { p2->next=p1->next; }free(p1); printf("刪除成功\n"); }elseprintf("記錄不存在,序號錯誤\n"); }elseif(i==2) {printf("輸入要刪除記錄的日期:"); scanf("%s",date); p1=headPtr;while(strcmp(date,p1->date)!=0&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(strcmp(date,p1->date)==0) { if(p1==headPtr) { headPtr=headPtr->next; } else { p2->next=p1->next; } free(p1); printf("刪除成功\n"); } else printf("記錄不存在\n"); } elseif(i==3) {while(headPtr!=NULL){p1=headPtr;headPtr=headPtr->next;free(p1);}printf("刪除成功\n"); }return(headPtr);}賬單查找實現代碼如下:/*4.按num查詢*/APtrnum_search(APtrheadPtr,intnum){APtrcPtr;printf("%3s\t%-10s\t%-8s\t%-10s\t%-10s\t%-10s\n", "No.","date","in_out","amount","kind","remain"); if(headPtr->num==num) printf("%d\t%-10s\t%-5s\t\t%5.2f\t\t%-10s\t%5.2f\n",headPtr->num, headPtr->date,headPtr->in_out,headPtr->amount,headPtr->kind,headPtr->remain); else{cPtr=headPtr;while(cPtr!=NULL&&cPtr->num!=num) {cPtr=cPtr->next; }if(cPtr!=NULL){printf("%d\t%-10s\t%-5s\t\t%5.2f\t\t%-10s\t%5.2f\n",cPtr->num, cPtr->date,cPtr->in_out,cPtr->amount,cPtr->kind,cPtr->remain); returncPtr;}else printf("該條記錄不存在\n");} returncPtr;}/*5.按date查詢*/voiddate_search(APtrheadPtr,chardate[]){APtrcPtr;intm=0;printf("%3s\t%-10s\t%-8s\t%-10s\t%-10s\t%-10s\n", "No.","date","in_out","amount","kind","remain");cPtr=headPtr;while(cPtr!=NULL) { if(strcmp(cPtr->date,date)==0) { printf("%d\t%-10s\t%-5s\t\t%5.2f\t\t%-10s\t%5.2f\n",cPtr->num, cPtr->date,cPtr->in_out,cPtr->amount,cPtr->kind,cPtr->remain);m=m+1; }cPtr=cPtr->next; }if(m==0) { printf("該條記錄不存在\n"); }}賬單排序瀏覽實現代碼如下:voiddate_sort(APtr*sPtr){APtrpPtr=NULL,cPtr=NULL,t1Ptr=NULL,t2Ptr=NULL;inti,j;for(i=0;i<n-1;i++){pPtr=*sPtr;cPtr=(*sPtr)->next;for(j=0;j<n-1-i;j++){if(strcmp(pPtr->date,cPtr->date)>0&&pPtr==*sPtr){pPtr->next=cPtr->next;cPtr->next=pPtr;t1Ptr=pPtr;pPtr=cPtr;cPtr=t1Ptr; *sPtr=pPtr;}else{if(strcmp(pPtr->date,cPtr->date)>0){t1Ptr->next=cPtr;cPtr->next=pPtr;pPtr->next=t2Ptr;t1Ptr=pPtr;pPtr=cPtr;cPtr=t1Ptr;}}if(cPtr->next!=NULL){t1Ptr=pPtr;pPtr=cPtr;cPtr=cPtr->next;t2Ptr=cPtr->next;}}}}voidamount_sort(APtr*sPtr){APtrpPtr=NULL,cPtr=NULL,t1Ptr=NULL,t2Ptr=NULL;inti,j;for(i=0;i<n-1;i++){pPtr=*sPtr;cPtr=(*sPtr)->next;for(j=0;j<n-1-i;j++){if(pPtr->amount>cPtr->amount&&pPtr==*sPtr){pPtr->next=cPtr->next;cPtr->next=pPtr;t1Ptr=pPtr;pPtr=cPtr;cPtr=t1Ptr;*sPtr=pPtr;}else{if(pPtr->amount>cPtr->amount){t1Ptr->next=cPtr;cPtr->next=pPtr;pPtr->next=t2Ptr;t1Ptr=pPtr;pPtr=cPtr;cPtr=t1Ptr;}}if(cPtr->next!=NULL){t1Ptr=pPtr;pPtr=cPtr;cPtr=cPtr->next;t2Ptr=cPtr->next;}}}}統計實現代碼如下:/*9.統計各類數據*/voidStat(APtrheadPtr){ intchoice; charIO[4],kind[30],date[12]; printf("請選擇項目序號:\n"); printf("1總收入和總支出\n" "2各門類總計統計\n" "3月度總計\n" "4各門類多占總量的比例\n");scanf("%d",&choice); switch(choice) { case1:printf("計算總收入請輸入in,計算總支出請輸入out\n");scanf("%s",IO);IO_total(headPtr,IO);break; case2:printf("統計收入輸入in,統計支出輸入out:");scanf("%s",IO);printf("請輸入要統計的kind類型:");scanf("%s",kind);kind_total(headPtr,kind,IO);break; case3:printf("統計收入輸入in,統計支出輸入out:");scanf("%s",IO);printf("請輸入要統計的年月,格式****.**:");scanf("%s",date);mon_total(headPtr,date,IO);break; case4:printf("統計收入輸入in,統計支出輸入out:");scanf("%s",IO);printf("請輸入要統計的kind類型:");scanf("%s",kind);proportion(headPtr,kind,IO);break; }}/*各門類總計統計*/floatkind_total(APtrheadPtr,charkind[],charIO[]){ FILE*fp; floatsum=0; charstr[20];APtrcPtr=headPtr;while(cPtr!=NULL) { if(strcmp(kind,cPtr->kind)==0&&strcmp(IO,cPtr->in_out)==0) {sum+=cPtr->amount; }cPtr=cPtr->next;}printf("%s類的%s統計結果為:%f\n",kind,IO,sum); printf("保存結果,輸入要保存的文件名:"); scanf("%s",str);if((fp=fopen(str,"a"))==NULL) { printf("文件打不開,無法保存\n"); } else { fprintf(fp,"%s","Theresultis"); fprintf(fp,"%s\t%s\t%f\n",kind,IO,sum); printf("保存成功\n"); } returnsum;}/*總收入總支出*/floatIO_total(APtrheadPtr,charIO[]){ floatsum=0; charstr[20];APtrcPtr=headPtr; FILE*fp;while(cPtr!=NULL) { if(strcmp(cPtr->in_out,IO)==0) { sum+=cPtr->amount; } cPtr=cPtr->next; }printf("%s的結果為:%f\n",IO,sum); printf("保存結果,輸入要保存的文件名:"); scanf("%s",str); if((fp=fopen(str,"a"))==NULL) { printf("文件打不開,無法保存\n"); } else { fprintf(fp,"%s","Theresultis"); fprintf(fp,"%s\t%f\n",IO,sum); printf("保存成功\n"); } returnsum;}/*月度開銷*/voidmon_total(APtrheadPtr,chardate[],charIO[]){ FILE*fp; charstr[20];floatsum=0;APtrcPtr=headPtr; while(cPtr!=NULL) { if(strcmp(cPtr->in_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育數字化推動城鄉教育均衡發展研究
- 教育信息化背景下在線化學實驗課程發展趨勢
- 以孩子為中心的數字化教育模式研究
- 棋類AI應用行業跨境出海項目商業計劃書
- 汽車駕駛員培訓AI應用企業制定與實施新質生產力項目商業計劃書
- 環保行動倡議行業跨境出海項目商業計劃書
- 柔道訓練中心行業深度調研及發展項目商業計劃書
- 商業視角下的金屬焊接教育市場分析
- 提升在線教育平臺穩定性與效率的維護策略
- 以創新為核心的教育機構數字化轉型領導策略
- 福建百校聯考2025屆高三5月高考押題卷-英語試卷(含答案)
- 知識圖譜構建與應用試題及答案
- 湖北省武漢市2025屆高三五月模擬訓練英語試題(含答案無聽力原文及音頻)
- 基因編輯技術的臨床應用與未來發展方向-洞察闡釋
- 浙江省杭州市2024年中考英語真題(含答案)
- 2024年黑龍江省哈爾濱市中考數學試卷(附答案)
- 《陸上風電場工程設計概算編制規定及費用標準》(NB-T 31011-2019)
- 消化呼吸循環泌尿
- D051操作規程
- 庭院綠化施工合同
- 立式數控加工中心主軸箱設計
評論
0/150
提交評論