個人帳簿管理系統(tǒng)設(shè)計_第1頁
個人帳簿管理系統(tǒng)設(shè)計_第2頁
個人帳簿管理系統(tǒng)設(shè)計_第3頁
個人帳簿管理系統(tǒng)設(shè)計_第4頁
個人帳簿管理系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告?zhèn)€人帳簿管理系統(tǒng)設(shè)計2010年01月21日目錄1.引言(1)2需求分析(2)3概要設(shè)計(4)4具體設(shè)計(5)5測試結(jié)果(6)6設(shè)計體會(12)7結(jié)束語(13)8參考文獻(11)摘要該課程設(shè)計主要設(shè)計個人賬簿管理系統(tǒng)以記錄某人每月的全部收入及各項開支狀況,包括食品消費,房租,子女教化費用,水電費,醫(yī)療費,儲蓄等。在課程設(shè)計中,用到了C語言以及數(shù)據(jù)結(jié)構(gòu)中的相關(guān)學(xué)問,當(dāng)然也有少數(shù)參考了其他人對某些問題的處理閱歷。對于進入系統(tǒng)后可以輸入和修改某月的收支狀況,可以對每月的開支從小到大進行排序,可以依據(jù)輸入的月份查詢每月的收支狀況。在程序設(shè)計中,添加了運用說明和幫助事項,并且采納了面對對象這種解決問題的方法。程序通過調(diào)試運行,初步是想了設(shè)計目標(biāo),并且經(jīng)過適當(dāng)完善后,將可以應(yīng)用在個人理財解決實際問題。一引言本課程設(shè)計主要解決在個人帳簿管理系統(tǒng)記錄某人每月的全部收入及各項開支狀況,包括食品消費,房租,子女教化費用,水電費,醫(yī)療費,儲蓄等。進入系統(tǒng)后可以輸入和修改某月的收支狀況,可以對每月的開支從小到大進行排序,可以依據(jù)輸入的月份查詢每月的收支狀況。現(xiàn)在是一個科技文化飛速發(fā)展的時代,家家戶戶都可以見到計算機的影子,我們平常的生活,工作以及學(xué)習(xí)和消遣都和電腦有著親密的聯(lián)系。隨著經(jīng)濟的發(fā)展,理財成為我們生活中不行缺少的內(nèi)容,理財?shù)闹匾宰圆淮?。因此,特別有必要設(shè)計一個個人帳薄管理系統(tǒng),它能夠為我們家庭生活個人理財供應(yīng)諸多便利,使理財更系統(tǒng),更精確。作為計算機應(yīng)用的一部分,運用計算機供應(yīng)個人帳薄管理系統(tǒng),既繼承了傳統(tǒng)理財形式,也克服了人工理財?shù)暮芏嗳秉c,譬如:計算困難,會時有錯誤,而用計算機處理的話這種錯誤可以輕易避開;輸入便利,節(jié)約了理財人的時間,提高效率和精確度。查詢便利、信息具體清楚。便于理財。二需求分析個人帳薄管理系統(tǒng)具有良好的性能和好用的功能,其性能的良好表現(xiàn)為:輸入性強、檢索快速、查詢便利、牢靠性高等,其好用的功能表現(xiàn)為:由于個人理財所要記載的項目比較瑣碎,查詢不便利,簡潔搞錯依次,應(yīng)用該管理系統(tǒng)可以輸入隨意每月開支狀況,不但不會輕易犯錯,而且可以簡潔修改每月的記錄,包括食品消費,房租,子女教化費用,水電費,醫(yī)療費,儲蓄等。節(jié)約時間和空間,這些優(yōu)點能夠促進優(yōu)化家庭及財政管理,促進財政管理的科技化和現(xiàn)代化。個人帳薄管理系統(tǒng)可以為用戶供應(yīng)隨意月份的查詢,月份消費信息包括食品消費,房租,子女教化費用,水電費,醫(yī)療費,儲蓄,具體信息如表2-1所示。表2-1個人開支項目信息表數(shù)字編號名稱具體信息1錄入數(shù)據(jù)錄入個人每月份的開支狀況2查看數(shù)據(jù)查看所錄入月份的開支狀況3修改數(shù)據(jù)假如錄入開清狀況有誤,可以修改4查詢數(shù)據(jù)可以查詢?nèi)吭路莸拈_支狀況5排序數(shù)據(jù)可以把所要查詢的月份的開支狀況按從小到大排列6刪除數(shù)據(jù)刪除所輸入月份的數(shù)據(jù)0退出系統(tǒng)退出系統(tǒng)三概要設(shè)計設(shè)計本系統(tǒng),首先要細致研讀老是給的題目要求,細致分析設(shè)計該題須要用到的技術(shù)和學(xué)問,同時應(yīng)當(dāng)主動查詢相關(guān)資料,復(fù)習(xí)有關(guān)學(xué)問,不懂的地方多向同學(xué)以及摯友提問,從而達到事半功倍的想過,也可以參考網(wǎng)上的有關(guān)學(xué)問幫助有自己解答,總之,就是動用一切可以動用的力氣,達到充溢自己的目的!以下為該設(shè)計系統(tǒng)流程圖起先結(jié)束0退出系統(tǒng)6刪除數(shù)據(jù)5排序數(shù)據(jù)4查詢數(shù)據(jù)3修改數(shù)據(jù)2查詢數(shù)據(jù)1錄入數(shù)據(jù)菜單起先結(jié)束0退出系統(tǒng)6刪除數(shù)據(jù)5排序數(shù)據(jù)4查詢數(shù)據(jù)3修改數(shù)據(jù)2查詢數(shù)據(jù)1錄入數(shù)據(jù)菜單圖3.0四具體設(shè)計1算法設(shè)計(1)錄入、查詢、修改、刪除數(shù)據(jù)。建立一個文件,包括某人5個月的開支狀況,對文件中的信息擴充,包括修改,刪除等。所以先確定文件保存路徑,接受鍵盤輸入,像文件內(nèi)寫入內(nèi)容,將dat格式文件轉(zhuǎn)換為txt文件,查詢用聲明,自定義數(shù)據(jù)類型,然后返回查詢結(jié)果及查詢狀態(tài),繼而對查詢結(jié)果排序。刪除數(shù)據(jù)時,先調(diào)用打開轉(zhuǎn)換的文本文件。修改數(shù)據(jù)時,要重寫數(shù)據(jù),刪除源文件,重命名中間文件,顯示新的數(shù)據(jù)。(2)起泡排序起泡排序是每趟把當(dāng)先序列中最小的元素放在起先位置,是交換排序中最簡潔的排序方法,其基本思想是:兩兩比較相鄰記錄的關(guān)鍵碼,假如反序則交換,值到?jīng)]有反序的記錄為止,將整個待排序的記錄序列分成為有序區(qū)和無序區(qū),初始狀態(tài)有序區(qū)為空,無序區(qū)包括全部待排序的記錄。對無序去從前向后依次將相鄰記錄的關(guān)鍵碼進行比較,若反序則交換,從而使得關(guān)鍵碼曉得記錄向前移,關(guān)鍵碼大的記錄向后移(像水中的氣泡,體積大的先浮現(xiàn)來)。重復(fù)執(zhí)行,之前無序區(qū)中沒有反序的記錄。確定每趟范圍。(3)其基本思想是:先確定文件保存路徑,建立一個文件,錄入個人5個月的開支狀況,對文件中的信息擴充,包括修改,刪除等。接受鍵盤輸入,向文件內(nèi)寫入內(nèi)容,將dat格式文件轉(zhuǎn)換為txt文件,然后輸入2進行查看,查看所錄入的數(shù)據(jù),假如數(shù)據(jù)有誤,可以輸入3修改數(shù)據(jù),輸入4查詢?nèi)吭路莸拈_支狀況,系統(tǒng)自動啟用氣泡排序?qū)?shù)據(jù)細心兩兩比較,按從小到大的依次排列。2實現(xiàn)代碼#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<windows.h>//文件保存路徑#defineFilePath1"Myinfor.dat"#defineFilePath2"Myinfor.txt"http://查詢用聲明#defineStatusint#defineOK1#defineError0#defineNotFound2typedefstruct{intmonth;//月份intfood;//食品消費inthouse;//房租費用intedu;//子女教化費用intelc;//水電費用inthealth;//醫(yī)療費用intstore;//儲蓄費用intincome;//收入費用}Infor;typedefstruct{//查詢用自定義數(shù)據(jù)類型intno;intdata;}pType;voidmenu(void);//菜單voidinput(Infor*newI);//接收鍵盤輸入voidwriteinfor(Infor*newI);//向文件內(nèi)寫入內(nèi)容voidchangeFormat(void);//將dat格式文件轉(zhuǎn)換為txt文件Statussearch(Infor*a);//查詢函數(shù)[返回查詢的結(jié)果及查詢的狀態(tài)]voidpaixu(Infor*a);//對查詢據(jù)結(jié)果排序voidmodify(Infor*a,intmon);//修改數(shù)據(jù)voiddelRecord(intmon);//刪除數(shù)據(jù)voidmain(){while(1){menu();}}voidmenu(void){intitem;intmon;Infor*a;a=(Infor*)malloc(sizeof(Infor));do{printf("\n…………個人帳簿管理系統(tǒng)--軟件082郭帥…………\n\n");printf("\t\t1.錄入數(shù)據(jù)。\n");printf("\t\t2.查看數(shù)據(jù)。\n");printf("\t\t3.修改數(shù)據(jù)。\n");printf("\t\t4.查詢數(shù)據(jù)。\n");printf("\t\t5.排序數(shù)據(jù)。\n");printf("\t\t6.刪除數(shù)據(jù)。\n");printf("\t\t0.退出系統(tǒng)。\n\n");printf("請輸入要進行的操作:");scanf("%d",&item);}while(item>6||item<-1);switch(item){//退出程序case0:getchar();//保存界面getchar();exit(0);break;//錄入數(shù)據(jù)case1:input(a);writeinfor(a);break;//查看數(shù)據(jù)case2:changeFormat();break;//修改數(shù)據(jù)case3:item=search(a);mon=a->month;if(item!=OK)printf("\n沒有符合條件的記錄!\n");else{printf("\n記錄月份食品消費房租費用子女費用水電費用醫(yī)療費用儲蓄費用本月收入\n");printf("\n");printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->food,a->house,a->edu,a->elc,a->health,a->store,a->income);input(a);modify(a,mon);}break;//查詢數(shù)據(jù)case4:item=search(a);if(item!=OK)printf("\n沒有符合條件的記錄!\n");else{printf("\n記錄月份食品消費房租費用子女費用水電費用醫(yī)療費用儲蓄費用本月收入\n");printf("\n");printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->food,a->house,a->edu,a->elc,a->health,a->store,a->income);}break;//排序數(shù)據(jù)case5:item=search(a);if(item!=OK)printf("\n沒有符合條件的記錄!\n");elsepaixu(a);break;//刪除數(shù)據(jù)case6:item=search(a);mon=a->month;if(item!=OK)printf("\n沒有符合條件的記錄!\n");else{printf("\n記錄月份食品消費房租費用子女費用水電費用醫(yī)療費用儲蓄費用本月收入\n");printf("\n");printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->food,a->house,a->edu,a->elc,a->health,a->store,a->income);delRecord(mon);}break;}free(a);//釋放內(nèi)存空間}voidinput(Infor*newI){printf("\n請依次輸入數(shù)據(jù)[說明:中間以空格符隔開]:\n(本月月份食品消費房租費用子女費用水電費用醫(yī)療費用儲蓄費用收入費用)\n");scanf("%d%d%d%d%d%d%d%d",&newI->month,&newI->food,&newI->house,&newI->edu,&newI->elc,&newI->health,&newI->store,&newI->income);fflush(stdin);}voidwriteinfor(Infor*newI){FILE*fp;fp=fopen(FilePath1,"ab+");if(fp==NULL){printf("無法創(chuàng)建文件:%s",FilePath1);exit(0);}fwrite(newI,sizeof(Infor),1,fp);//這里可以做特殊處理可防止存在同一月份有條以上的記錄問題。這里就不寫了。fclose(fp);printf("數(shù)據(jù)錄入勝利!\n");}voidchangeFormat(void)//短暫只能操作一行文件有待改進{FILE*fp1,*fp2;Infor*a;a=(Infor*)malloc(sizeof(Infor));fp1=fopen(FilePath1,"rb+");if(fp1==NULL){printf("無法找到文件:%s\n",FilePath1);return;//返回主函數(shù)}fp2=fopen(FilePath2,"wt+");if(fp2==NULL){printf("無法創(chuàng)建文件:%s\n",FilePath2);return;//返回主函數(shù)}fputs("\n……個人帳簿管理系統(tǒng)……\n\n",fp2);fputs("記錄月份食品消費房租費用子女費用水電費用醫(yī)療費用儲蓄費用本月收入\n",fp2);fputs("\n",fp2);printf("\n記錄月份食品消費房租費用子女費用水電費用醫(yī)療費用儲蓄費用本月收入\n");printf("\n");rewind(fp1);fread(a,sizeof(Infor),1,fp1);while(!feof(fp1))//從原文件[.dat]中讀數(shù)據(jù)寫入顯示文件[.txt]中{printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->food,a->house,a->edu,a->elc,a->health,a->store,a->income);fprintf(fp2,"%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->food,a->house,a->edu,a->elc,a->health,a->store,a->income);fread(a,sizeof(Infor),1,fp1);}fputs("\n",fp2);fputs("關(guān)閉本程序接著原程序!\n",fp2);fclose(fp1);fclose(fp2);system(FilePath2);//調(diào)用打開轉(zhuǎn)換的文本文件remove(FilePath2);//刪除文本文件文件}Statussearch(Infor*a){FILE*fp1;intmon;intisfound=0;printf("請正確輸入要查詢的月份:");scanf("%d",&mon);fflush(stdin);//清除緩沖區(qū)fp1=fopen(FilePath1,"rb+");if(fp1==NULL){printf("無法找到文件:%s\n",FilePath1);returnError;//返回主函數(shù)}rewind(fp1);fread(a,sizeof(Infor),1,fp1);while(!feof(fp1))//查詢操作{if(a->month==mon){isfound=1;break;}else{isfound=0;}fread(a,sizeof(Infor),1,fp1);}fclose(fp1);if(isfound)returnOK;elsereturnNotFound;}voidpaixu(Infor*a){inti=0,j=0,flag=0,t;pTypepx[8]={{0,0}};charstr[8][10]={"記錄月份","食品消費","房租費用","子女費用","水電費用","醫(yī)療費用","儲蓄費用","本月收入"};for(;i<8;i++)px[i].no=i;px[0].data=a->month;px[1].data=a->food;px[2].data=a->house;px[3].data=a->edu;px[4].data=a->elc;px[5].data=a->health;px[6].data=a->store;px[7].data=a->income;for(i=1;i<8;i++)//冒泡排序{flag=0;for(j=0;j<8-i;j++)if(px[j].data>px[j+1].data){t=px[j].data;px[j].data=px[j+1].data;px[j+1].data=t;t=px[j].no;px[j].no=px[j+1].no;px[j+1].no=t;flag=1;}//輸出結(jié)果if(flag==0)break;}printf("\n");for(i=0;i<8;i++){printf("%s",str[px[i].no]);}printf("\n\n");for(i=0;i<8;i++){printf("%8d",px[i].data);}printf("\n");}voidmodify(Infor*a,intmon)//修改數(shù)據(jù){FILE*fp1,*fp2;Infor*b;b=(Infor*)malloc(sizeof(Infor));fp1=fopen(FilePath1,"rt");fp2=fopen("temp.dat","wt+");rewind(fp1);fread(b,sizeof(Infor),1,fp1);while(!feof(fp1))//重寫數(shù)據(jù){if(b->month==mon){fwrite(a,sizeof(Infor),1,fp2);//修改數(shù)據(jù)}else{fwrite(b,sizeof(Infor),1,fp2);}fread(b,sizeof(Infor),1,fp1);}fclose(fp1);fclose(fp2);remove(FilePath1);//刪除源文件rename("temp.dat",FilePath1);//重命名中間文件printf("修改數(shù)據(jù)勝利!\n");changeFormat();//顯示數(shù)據(jù)}voiddelRecord(intmon)//刪除數(shù)據(jù){FILE*fp1,*fp2;Infor*b;b=(Infor*)malloc(sizeof(Infor));fp1=fopen(FilePath1,"rt");fp2=fopen("temp.dat","wt+");rewind(fp1);fread(b,sizeof(Infor),1,fp1);while(!feof(fp1))//重寫數(shù)據(jù){if(b->month!=mon)fwrite(b,sizeof(Infor),1,fp2);fread(b,sizeof(Infor),1,fp1);}fclose(fp1);fclose(fp2);remove(FilePath1);//刪除源文件rename(

溫馨提示

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

評論

0/150

提交評論