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

下載本文檔

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

文檔簡(jiǎn)介

個(gè)人帳簿管理系統(tǒng)課程設(shè)計(jì)

B04900083

號(hào)■學(xué)

號(hào).201240420113

HUBEIPOLYTECHNICUNIVERSITY

課程設(shè)計(jì)

教學(xué)院計(jì)算機(jī)學(xué)院

課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)

題目個(gè)人帳簿管理系統(tǒng)

專業(yè)網(wǎng)絡(luò)工程

班級(jí)1班

姓名夏能

同組人員

指導(dǎo)教師馮珊

2012年12月25日

/月/我手挈花課程設(shè)計(jì)(論文)

目錄

一概述.....................................................3

二總體方案設(shè)計(jì)............................................4

三詳細(xì)設(shè)計(jì)................................................8

四程序的調(diào)試與運(yùn)行結(jié)果說明...............................23

五課程設(shè)計(jì)總結(jié)...........................................26

參考文獻(xiàn)...................................................28

附錄.......................................................29

1

/月/我手挈花課程設(shè)計(jì)(論文)

2

/月/我手挈花課程設(shè)計(jì)(論文)

一概述

1.課程設(shè)計(jì)的目的

(1).理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計(jì)思想和方法。

(2).培養(yǎng)綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成課題的能力。

(3).培養(yǎng)勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有錯(cuò)必改,用實(shí)踐來檢驗(yàn)理

論,全方位考慮問題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。

(4).掌握從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識(shí)的能力,提高學(xué)生從別人經(jīng)

驗(yàn)中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。

2.課程設(shè)計(jì)的要求

個(gè)人帳簿管理系統(tǒng)記錄某人每月的全部收入及各項(xiàng)開支情況,包括食品

消費(fèi),房租,子女教育費(fèi)用,水電費(fèi),醫(yī)療費(fèi),儲(chǔ)蓄等。該系統(tǒng)采用了Windows

XP操作系統(tǒng)結(jié)合VisimlC++6.0,TC2.0等軟件開發(fā),可以輸入和修改某月的

收支情況,可以對(duì)每月的開支從小到大進(jìn)行排序,可以根據(jù)輸入的月份查詢

每月的收支情況。

該課程設(shè)計(jì)中會(huì)頻繁的使用到C語言里的文件操作的知識(shí)點(diǎn),而文件操

作又是我們平常的學(xué)習(xí)當(dāng)中使用的比較少的地方,所以在課程設(shè)計(jì)之前我們

組的成員專門花了一節(jié)課的時(shí)間重新閱讀了《C程序設(shè)計(jì)教程》以及《Cprimer

phis》里的文件操作的相關(guān)知識(shí)。

3

/月/我手挈花課程設(shè)計(jì)(論文)

二總體方案設(shè)計(jì)

L系統(tǒng)整體設(shè)計(jì)思路

本課程序中主要通過C語言的文件操作實(shí)現(xiàn)文件的讀寫操作來存放管理

數(shù)據(jù),里面主要包含功能函數(shù)有接收鍵盤輸入數(shù)據(jù)、將數(shù)據(jù)寫入指定文件、

將.dat文件文件轉(zhuǎn)換.txt文件顯示出來、找到對(duì)應(yīng)月份、對(duì)一個(gè)月內(nèi)各項(xiàng)支出

進(jìn)行排序、修改其中一項(xiàng)數(shù)據(jù)以及刪除整月數(shù)據(jù)。整個(gè)系統(tǒng)的界面以及對(duì)各

功能函數(shù)的調(diào)用都放在了主函數(shù)之中。整個(gè)程序中一個(gè)指針變量a貫穿始終,

可以使各個(gè)函數(shù)共享指針變量a所指向的內(nèi)存區(qū)域的數(shù)據(jù)。

整個(gè)程序涉及到的功能較多,代碼普遍較長(zhǎng),根據(jù)課程設(shè)計(jì)教學(xué)大綱里

的要求以及我們對(duì)程序的整體設(shè)計(jì)我們將整個(gè)程序分為了6個(gè)功能,7個(gè)功能

函數(shù)以及主函數(shù)來調(diào)度各個(gè)函數(shù)以來實(shí)現(xiàn)功能。

2.算法的整體思路

數(shù)據(jù)類型設(shè)定為;

typedefstruct{

intmonth;

intshipin;

intfangzu;

intzinv;

intshuidian;

intyiliao;

intchuxu;

intshouru;

}Infor;

為了方便使用,所以每一個(gè)變量基本上都使用了拼音。另外為了方便查

詢與排序,又另外定義了

typedefstruct{

intno;

intdata;

}pType;方便排序時(shí)候使用。

4

即以kN挈花課程設(shè)計(jì)(論文)

整個(gè)程序流程圖如下:

整個(gè)程序在主函數(shù)中由switch調(diào)用各個(gè)功能函數(shù)來執(zhí)行整個(gè)程序。

3.主要特點(diǎn)

本程序可以在控制臺(tái)里錄入數(shù)據(jù)后寫入文件當(dāng)中,即使退出了程序,只

要不刪除自己所寫的文件都可以隨時(shí)通過程序?qū)ξ募锏娜我鈹?shù)據(jù)進(jìn)行增刪

改查,并且可以實(shí)現(xiàn)對(duì)多文件的管理,在修改數(shù)據(jù)的時(shí)候我們可以對(duì)指定文

件里的指定月份的指定數(shù)據(jù)項(xiàng)進(jìn)行修改體現(xiàn)了修改的靈活性,在查詢的時(shí)候

我們可以在控制臺(tái)中查詢一個(gè)文件中里的一個(gè)月的數(shù)據(jù)也可以在控制臺(tái)中查

詢指定文件里的直徑月份的數(shù)據(jù),還可以對(duì)指定文件里的指定月份的數(shù)據(jù)整

項(xiàng)刪除。最后該程序還可以對(duì)每個(gè)月中的各項(xiàng)開支進(jìn)行從小到大的排序。

4.具備功能

該程序可以接收鍵盤輸入數(shù)據(jù)、將數(shù)據(jù)寫入指定文件、將.dat文件文件

轉(zhuǎn)換為txt文件顯示出來方便查看、找到對(duì)應(yīng)月份、對(duì)一個(gè)月內(nèi)各項(xiàng)支出進(jìn)行

排序、修改其中一項(xiàng)數(shù)據(jù)以及刪除整月數(shù)據(jù)最后在主函數(shù)中對(duì)小組成員的各

個(gè)函數(shù)進(jìn)行整體的調(diào)試調(diào)用。詳細(xì)情況見下表:

5

/月/我手挈花課程設(shè)計(jì)(論文)

voidinput(Infor*a)該函數(shù)接受一個(gè)從主函數(shù)傳過來的指

針變量,將數(shù)據(jù)寫入a所指向的內(nèi)存區(qū)

voidwriteinfor(Infor*a)該函數(shù)將a所指向的內(nèi)存區(qū)域的數(shù)據(jù)寫

入到指定的.dat文件中

voidchangeForniat()該函數(shù)用于查詢的時(shí)候?qū)?dat文件里的

數(shù)據(jù)寫入到控制臺(tái)中,并轉(zhuǎn)化一個(gè).txt

文件顯示出來,最后關(guān)閉這個(gè)文件。函

數(shù)執(zhí)行完畢并刪除該.txt文件

intsearch(Infor*a)接受主函數(shù)中傳來的指針變量,尋找該

指針指向的內(nèi)存區(qū)域中a->month與你

所需要查找的month值相等的位置,使

a指針剛好指向這個(gè)月的數(shù)據(jù),若找到

了標(biāo)志位為1返回正確,如果沒找到的

話就顯示為找到對(duì)應(yīng)月份。

voidpaixu(Infor*a)對(duì)指定月份里的數(shù)據(jù)項(xiàng)里的數(shù)據(jù)從小

到大進(jìn)行排序。

voidmodify(Infor*a,intmon)對(duì)指定文件的指定月份的指定的數(shù)據(jù)

項(xiàng)的數(shù)據(jù)進(jìn)行修改

voiddelRecord(intmon)對(duì)指定的文件的指定月份的數(shù)據(jù)整月

進(jìn)行刪除

我在本程序中承擔(dān)的主要任務(wù)是查找對(duì)應(yīng)月份,查詢數(shù)據(jù)或修改該月份

中的一項(xiàng)數(shù)。該三項(xiàng)功能主要解決的問題是如何在指定的文件中找到對(duì)應(yīng)的

數(shù)據(jù)項(xiàng)并對(duì)該數(shù)據(jù)項(xiàng)進(jìn)行相應(yīng)的操作。最后在主函數(shù)中通過switch對(duì)各個(gè)功

能模塊進(jìn)行整體調(diào)用最終實(shí)現(xiàn)該系統(tǒng)。

我所主要要解決的問題是如何使用正確的文件讀寫操作模式字符串來打

開文件以及對(duì)指定的.dat文件讀取后轉(zhuǎn)換為.txt文件并最終按照以定的格式顯

示在屏幕上。另外在查詢函數(shù)中我們要在相應(yīng)的文件中找到對(duì)應(yīng)的月份,并

將指針移動(dòng)到這里指向該數(shù)據(jù)區(qū)域,這樣的話我們就可以利用該指針變量方

便的查詢、修改數(shù)據(jù),這也正是體現(xiàn)出指針變量使用的靈活性。其中文件操

作中fopen函數(shù)模式字符串的功能如下:

6

/月/我手挈花課程設(shè)計(jì)(論文)

模式字符串意義

“r”打開已過文件,可以讀取文件

“w”打開己文件,可以寫入文件,先

將文件的長(zhǎng)度截為0,如果該文件

不存在則創(chuàng)建之

“a”打開一個(gè)文本文件,可以寫入文

件,向已有文件的尾部追加內(nèi)容,

如果該文件不存在則先創(chuàng)建之

“r+”打開一個(gè)文本文件,可以進(jìn)行更

新,也可以讀取和寫入文件

“w+”打開已隔文本文件,可以進(jìn)行更

新(寫入),如果該文件存在則首

先將其長(zhǎng)度截為0:如果不存在則

先創(chuàng)建之

“a+”打開一個(gè)文本文件,可以進(jìn)行更

新(讀取和寫入),向己有的文件

的尾部追加內(nèi)容,如果該文件不

存在則先創(chuàng)建之;可以讀取整個(gè)

文件,但寫入時(shí)只能追加內(nèi)容

“rb”,”、vb+”,"ab“Jab+”Ja+b”Jwb+”Jw+b”與前面的模式相同,只是使用二

“ab+"Ja+b"進(jìn)制模式而非文本模式打開文件

7

/月/我手挈花課程設(shè)計(jì)(論文)

三詳細(xì)設(shè)計(jì)

1.changeFormat()

該函數(shù)功首先在控制臺(tái)上打印一排語句提示用戶輸入想要查找的文件

名,若該文件不存在的話該程序就會(huì)終止。若該文件存在的話使用文件

類型指針fpl指向該文件,以二進(jìn)制文件讀寫方式打開該文件,接著我

用相通的名字卻用.txt后綴創(chuàng)建了另一個(gè)文件,并用文件類型指針fp2指

向它,并在該文件中打印一些展示文字使輸出結(jié)果更加好看,同時(shí)將這

些文字也打印在了控制臺(tái)上,最后將fpl文件指向的內(nèi)容用格式化輸出

fprintf全部寫入fp2中,最后分別關(guān)閉fpl,fp2,并將剛剛的.txt文件顯

示出來,同時(shí)刪除剛剛創(chuàng)建的.txt文件。

8

/月/我手挈花課程設(shè)計(jì)(論文)

輸入所在的文件名

N

Y

找到所在的文件

未找到所在的文件

生成一個(gè)txt文件

將dat文件中的數(shù)據(jù)一一寫入a,

再將a所指向內(nèi)存的物據(jù)寫入txt文件中

。將.txt文件打開顯示出來二)

歷txt文件,刪除該文件,

結(jié)束該函數(shù)

voidchangeFormat()

(

FILE*fpl,*fp2;

Infor*a;

charfilename[100];

inti;

a=(Infor*)malloc(sizeof(Infor)):

printf(〃請(qǐng)輸入您要查詢的數(shù)據(jù)所在的文件名(以.dat為后綴的

文件名)〃);

scanf("%s”,filename);

fpl=fopen(filename,*rb+*);〃以讀寫方式打開一個(gè)二進(jìn)制文件

9

即以kN挈花課程設(shè)計(jì)(論文)

if(fpl==NULL)

printf("無法找到文件\n");

exit(0);

)

for(i=0;filename[i]!=,.*;i++)

(

filename2[i]=filename[i];

)

if(filename2[i]!='.')

(

strcat(filename?,txt");〃將filename的后綴改為.txt

文件

}

fp2=fopen(filename2,"wb+”);

if(fp2==NULL)

printf("無法創(chuàng)建文件\n");

return;〃返回主函數(shù)

fputs(*\n..............................個(gè)人帳簿管理系

統(tǒng)............................\r\n*?fp2);

fputs(〃記錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用水電費(fèi)用醫(yī)

療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入\r\n\fp2);

fputs("-----------------------------------------------------

-------------------\r\n”,fp2);

printfC\n汜錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用水電費(fèi)用

醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入\n〃);

/月/我手挈花課程設(shè)計(jì)(論文)

printf("---------------------------------------------------------

----------------------\n");

rewind(fpl);〃使fpl指向文件開頭

fread(a,sizeof(Infor),1,fpl);

whileQfeof(fpl))〃從原文件.dat中讀數(shù)據(jù)寫入顯示文件.txt

(

printf("%7d%8d%8d%8d%8d%8d%8d%8d\n”,a->month,a->ship

in,a->fangzu,a->zinv,a->shuidian,a->yiliao,a->chuxu,a->shou

ru);

fprintf(fp2,"%7d%8d%8d%8d%8d%8d%8d%8d\r\n*,a->month,

a->shipin,a->fangzu,a->zinv,a->shuidian,a->yiliao,a->chuxu,

a->shouru);〃格式化文件輸出

fread(a,sizeof(Infor),1,fpl);

)

fputs(*----------------------------------------------------------

---------------------\r\n”,fp2);

fputs(〃\r關(guān)閉木程序繼續(xù)原程序!\n〃,fp2);

fclose(fpl);

fclose(fp2);

system(filename2);〃調(diào)用打開轉(zhuǎn)換的文本文件

remove(filename2);

)

2.search(infor*a)

該函數(shù)功首先在控制臺(tái)上打印一排語句提示用戶輸入想要查找的文

件名,若該文件不存在的話該程序就會(huì)終止。若該文件存在的話使用文

件類型指針fpl指向該文件,以二進(jìn)制文件讀寫方式打開該文件,接著

我用相通的名字卻用.txt后綴創(chuàng)建了另一個(gè)文件,并用文件類型指針fP2

指向它,并在該文件中打印一些展示文字使輸出結(jié)果更加好看,同時(shí)將

11

M及以kN挈花課程設(shè)計(jì)(論文)

這些文字也打印在了控制臺(tái)上,最后將fpl文件指向的內(nèi)容用格式化輸

出fprintf全部寫入fp2中,最后分別關(guān)閉fpl,fp2,并將剛剛的.txt文件

顯示出來,同時(shí)刪除剛剛創(chuàng)建的.txt文件。

intsearch(Infor*a)

(

FILE*fpl;

intmon;

intisfound=0;〃標(biāo)志變量,初始為0代表為找到對(duì)應(yīng)的月份,

若找到對(duì)應(yīng)的月份這設(shè)置為1

charfilename[100];

printf("請(qǐng)輸入文件名字(.dat文件):”);

scanffilename);

即以ZTN挈花課程設(shè)計(jì)(論文)

printf(〃請(qǐng)正確輸入月份:〃);

scanf&non);

fflush(stdin);〃清除緩沖區(qū)

fpl=fopen(filename,"rb+”);

if(fpl==NULL)

(

printf("無法找到文件\n");

exit(O);

)

rewind(fpl);〃將fpl指向文件頭,這樣更加嚴(yán)謹(jǐn)

fread(a,sizeof(Infor),1,fpl);

whileQfeof(fpl))〃查詢操作

(

if(a->month==mon)

(

isfound=l;

break;

)

else

(

isfound=0;

)

fread(a,sizeof(Infor),1,fpl);

}

fclose(fpl);

if(isfound)

returnOK;

else

printf("未找到對(duì)應(yīng)的月份\n〃);

/月/我手挈花課程設(shè)計(jì)(論文)

return1;

)

)

3.voidmodify(Infor*a,intmon)

該函數(shù)主要功能在于修改指定文件下指定月份的指定數(shù)據(jù)項(xiàng),首先用

fpl指向指定的文件,同時(shí)用fp2打開一個(gè)temp.dat文件。月份是通過前

面的search函數(shù)找到后,通過指針變量a“傳遞”過來的。首先選擇修改

哪一項(xiàng)數(shù)據(jù),然后輸入要修改的數(shù)據(jù)的內(nèi)容將其寫入a指向的內(nèi)存區(qū)域

里對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。此時(shí)我們用printf在控制臺(tái)打印出修改后的月份的數(shù)

據(jù)。然后用指針變量b來存儲(chǔ)從fpl文件中讀取的數(shù)據(jù),當(dāng)它不是對(duì)應(yīng)

的月份就直接寫入fp2指向的temp.dat文件中,當(dāng)它是對(duì)應(yīng)的月份的時(shí)

候就將a指向的內(nèi)存區(qū)域的數(shù)據(jù)寫入fp2指向的temp.dat文件中,該過

程還是一個(gè)直到fpl指向文件結(jié)尾時(shí)才結(jié)束的函數(shù)。最后關(guān)閉fpl,fp2指

向的文件,刪除源文件,將temp.dat文件的名字命名為與先前文件相同

的名字并在控制臺(tái)上打印出修改成功的字樣。

14

/月/我手挈花課程設(shè)計(jì)(論文)

voidmodify(Infor*a,intmon)〃修改數(shù)據(jù)

(

FILE*fpl,*fp2;

inti;

intmoney;

charfilename[100];

Infor*b;

b=(Infor*)oalloc(sizeof(Infor));

15

MW/kN季花課程設(shè)計(jì)(論文)

printf(〃修改后的數(shù)據(jù)所要插入的文件(注意與前面的文件名一

定要是一致的!!)〃);

scanf('%s”,filename);

fpl=fopen(filename,"rb+”);

fp2=fopen("temp,dat","wb+")"/temp,dat作為臨時(shí)文件

printf("你要修改哪一項(xiàng)數(shù)據(jù)?(1代表食品,2代表房租,3代

表子女費(fèi)用,4代表水電費(fèi)用,5代表醫(yī)療費(fèi)用,6代表儲(chǔ)蓄,7代表

收入):");

scanf("%d",&i);

while(i<l||i>7)

(

printf("請(qǐng)重新輸入:”);

scanf&i);

)

printf(〃請(qǐng)將修改后的數(shù)據(jù)輸入進(jìn)來:〃);

scanf&money);

switch(i)

{

case1:

a->shipin=money;

break;

case2:

a->fangzu=money;

break;

case3:

a->zinv=money;

break;

case4:

a->shuidian=money;

break;

case5:

a->yiliao=money;

break;

case6:

16

/月/我手挈花課程設(shè)計(jì)(論文)

a->chuxu=money;

break;

case7:

a->shouru=money;

break;

default:

break;

)

printf("修改后的:\n");

printfC\n記錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用水電費(fèi)用

醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入\n〃);

printf(*----------------------------------------------------

--------------------------\n〃);

printfC%7d%8d%8d%8d%8d%8d%8d%8d\n*,a->month,a->ship

in,a->fangzu,a->zinv,a->shuidian,a->yiliao,a->chuxu,a->shou

ru);

rewind(fpl);

fread(b,sizeof(Infor),1,fpl);

while(!feof(fpl))〃重寫數(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,fpl);

)

fclose(fpl);

fclose(fp2);

鵬月,挈花課程設(shè)計(jì)(論文)

remove(filename);〃刪除源文件

rename(*temp.dat",filename);〃重命名中間文件

printf("修改數(shù)據(jù)成功!\n");

)

4.主函數(shù)調(diào)試

主函數(shù)部分通過switch語句來對(duì)實(shí)現(xiàn)整個(gè)程序功能的調(diào)度。首先easel

里通過input函數(shù)將變量寫入a所指向的內(nèi)存區(qū)域,然后調(diào)用writeinfor函

數(shù)將指針變量a所指向區(qū)域的數(shù)據(jù)寫入用戶自己指定的文件中。case2是對(duì)用

戶指定的文件的數(shù)據(jù)進(jìn)行整個(gè)文件查詢,結(jié)果最終會(huì)打印在控制臺(tái)中并且還

會(huì)顯示一個(gè).txt文件這樣更加方便更加直觀。case3中調(diào)用了search函數(shù),

并且通過標(biāo)志位變量flag來接收search函數(shù)所返回的值,若flag值不是0K

的話就打印出沒有符合條件的記錄的語句,flag是0K的話就通過指針變量a

將其所指向的內(nèi)存區(qū)域的數(shù)據(jù)格式化的打印在屏幕上,然后調(diào)用modify函數(shù)

對(duì)該該月份的數(shù)據(jù)指定的數(shù)據(jù)項(xiàng)進(jìn)行修改。case4中前面部分的流程與case3

還是一樣的,同樣是調(diào)用search函數(shù)找到指定文件里的指定月份的數(shù)據(jù)并使

a指向它,最后通過指針變量a打印在屏幕上。case5中還是通過search函

數(shù)來找到指定的月份然后通過paixu函數(shù)來對(duì)指定月份的數(shù)據(jù)進(jìn)行從小到大

的排序,最后還是打印到控制臺(tái)上。case6中同樣是通過search函數(shù)找到指

定的月份,并刪除這個(gè)月份的所有數(shù)據(jù)。case7中通過〈stdlib.h>函數(shù)中的

exit。函數(shù)來退出整個(gè)程序。

主函數(shù)的整個(gè)流程圖如算法整體思路里的函數(shù)流程圖所示,在這里就省略

掉了。

intmainO

(

while(TRUE)

(

intflag;〃標(biāo)志位,用來保存查詢函數(shù)所返回的結(jié)果

intite叫〃功能項(xiàng)目號(hào)

intmon;

Infor*a;〃信息指針

a=(Infor*)malloc(sizeof(Infor));〃動(dòng)態(tài)分配內(nèi)存空間

do(

printfC\n\t******************歡迎進(jìn)入個(gè)人帳簿管理系統(tǒng)

18

/月/挈花

/TN課程設(shè)計(jì)(論文)

****************\n");

printf(*\t*\t

*\n");

printf(*\t*\t—-主菜單一—

*\n");

printf('\t*\t

*\n");

printf1.錄入數(shù)據(jù)*\nO;

printf("\t*\t2.查看數(shù)據(jù)*\n");

printf(*\t*\t3.修改數(shù)據(jù)*\n〃);

printf(*\t*\t4.查詢數(shù)據(jù)

*\n");

printf(*\t*\t5.排序數(shù)據(jù)*\n〃);

printf6.刪除數(shù)據(jù)*\n〃);

printf(*\t*\t0.退出系統(tǒng)*\n");

printf(*\t*\t*\n");

printf(\t********3tc^******5ic**5K*********************5^5K5K5K*******

******\n\n");

printf("請(qǐng)輸入要進(jìn)行的操作:”):

scanf("%d”,&item);

}while(item>7|itenKO);〃選擇功能

switch(item)

〃錄入數(shù)據(jù)

case1:input(a);

writeinfor(a);

break;

〃查看數(shù)據(jù)

case2:changeFormat();〃將dat文件轉(zhuǎn)換為txt文件來進(jìn)行查

break;

/月/我手挈花課程設(shè)計(jì)(論文)

〃修改數(shù)據(jù)

case3:flag=search(a);

mon=a->month;

if(flag!=OK)printf("\n沒有符合條件的記錄!\n");

else

(

printf(〃\n記錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用

水電費(fèi)用醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入\n");

printfC--------------------------------------------------------

-----------------\n〃);

printfC%7d%8d%8d%8d%8d%8d%8d%8d\n*,a->month,a->shipin,

a->fangzu,a->zinv,a->shuidian,a->yiliao,a->chuxu,a->shouru);

modify(a,mon);

}

break;

〃查詢數(shù)據(jù)

case4:flag=search(a);

if(flag!=OK)printf("\n沒有符合條件的記錄!\n");

else{

printf(〃\n記錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用

水電費(fèi)用醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入\n");

printf("-------------------------------------------------------

-----------------\n〃);

printf(*%7d%8d%8d%8d%8d%8d%8d%8d\n*,a->month,a->shipin,

a->fangzu,a->zinv,a->shuidian,a->yiliao,a->chuxu,a->shouru);

20

/月/我手挈花課程設(shè)計(jì)(論文)

break;

〃排序數(shù)據(jù)

case5:flag=search(a);

if(flag!=OK)

(

printfC\n沒有找到符合排序條件的記錄!\n〃);

)

else

(

paixu(a);

}

break;

〃刪除數(shù)據(jù)

case6:

flag=search(a);

mon=a->month;

if(flag!=OK)printf("\n沒有符合條件的記錄!\n");

else

(

printf("\n記錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用

水電費(fèi)用醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用木月收入\n");

printf("--------------------------------------------------------

-----------------\n〃);

printfC%7d%8d%8d%8d%8d%8d%8d%8d\n*,a->month,a->shipin,

a->fangzu,a->zinv,a->shuidian,a->yiliao,a->chuxu,a->shouru);

delRecord(mon);

)

break;

〃退出系統(tǒng)

case0:

21

/月/我手挈花課程設(shè)計(jì)(論文)

printf(〃\n指導(dǎo)老師:馮珊\n");

printf("小組成員:夏能,王歡,邱少雄,羅四維\n〃);

exit(0);

break;

)

free(a);〃釋放內(nèi)存空間

)

return0;

)

22

/月/我手挈花課程設(shè)計(jì)(論文)

四程序的調(diào)試與運(yùn)行結(jié)果說明

1.查詢函數(shù)

*?。*??■*E七

我便送入個(gè)人侏理系統(tǒng)

-一

jl:??」t

TM詞

2.s

Dabu)3.i

M24.

S?

.G^

據(jù)

B

.

(以?k■為無福的文件名)??八?a,

心圓月侑食品希CJ層阻瞥用子女費(fèi)用水叭貨則醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)則本M收入

15B2803607?e985A69555

G00??890S75。68439。900

S0O90S8W40968059?7te

7除,T,EAC-'fg^,Dttug,ftW^e.e-

皆求要查司擄耕在蚊件名以3為段稅件名)tft.dat

朗份食品糠房租斷子姨用水電酬斷M儲(chǔ)懿用本月必

2394聯(lián)5

1澳

lan58$8688S55傻

679886843相9

88758聯(lián)

508980868057

lz40898

1

2

3改

4詢

s

6

DC

首先是測(cè)試查詢函數(shù),數(shù)據(jù)已經(jīng)先通過第一項(xiàng)功能提前寫入到了test.dat

文件中,我們?cè)谥骱瘮?shù)界面中輸入2選擇查看數(shù)據(jù)這時(shí)在控制臺(tái)中我們可以

看到數(shù)據(jù)按照一定的格式輸出了,同時(shí)也打開了一個(gè)名為test.txt文件顯示出

了同樣的數(shù)據(jù),這是我們看到目錄結(jié)構(gòu)中同時(shí)有test.dat文件和test.txt文件,

test.txt文件中提示用戶關(guān)閉本程序繼續(xù)源程序,關(guān)閉程序后我們發(fā)現(xiàn)回到了

主函數(shù)界面中,并且text.txt文件被刪除掉了。

23

/月/我手挈花課程設(shè)計(jì)(論文)

2.查詢數(shù)據(jù)

歡迎進(jìn)入個(gè)人帳清管理系統(tǒng)

主菜單

1i人數(shù)

2?

?袤

3?

4

n詢

5一

6原

0一

進(jìn)

行的

操作

j要

名字

JA蓄

喻:test.d<it

E月份<.

:!

記錄月份閏品消費(fèi)房租費(fèi)用子女費(fèi)用水電費(fèi)用醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入

1015。2802G070098546。55S

其次測(cè)試第四項(xiàng)查詢數(shù)據(jù)功能,該功能與前者的區(qū)別在于,前者是對(duì)整個(gè)

文件的數(shù)據(jù)進(jìn)行查詢,而該項(xiàng)功能是對(duì)于指定文件的指定月份來進(jìn)行查詢。

我們首先在主函數(shù)界面下輸入4來選擇功能,然后控制臺(tái)會(huì)提示我們輸入要

查詢的文件名,還是輸入剛剛的test.dat,然后控制臺(tái)接著會(huì)提示用戶輸入查

詢的月份,我們輸入了10,這時(shí)候會(huì)發(fā)現(xiàn)控制臺(tái)將10月份的數(shù)據(jù)直接打印在

了控制臺(tái)上。

3.修改數(shù)據(jù)

24

/月/我手挈花課程設(shè)計(jì)(論文)

4詢數(shù)

?H

5數(shù)

?排

6數(shù)

?年

0系

?

道卷入墨譙勺電操作:3山

請(qǐng)輸入寵?件名于<.dat文件):test.dat

請(qǐng)正酶人月份

記錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用水電費(fèi)用醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入

1015。395

70

據(jù)

號(hào)

2885,55

^要!

一C

居es

費(fèi)

水電

醫(yī)

女t.

^用

埠<151

k7^表

^來

制0

的::3

怛錄月份食品消費(fèi)房租費(fèi)用子女費(fèi)用水電費(fèi)用醫(yī)療費(fèi)用儲(chǔ)蓄費(fèi)用本月收入

10380280360700985460555

份改數(shù)據(jù)成功!

接著測(cè)試修改數(shù)據(jù)的功能,這時(shí)我們?cè)谥鹘缑嬷休斎?,這里調(diào)用前面的

search來指定文件與月份,所以控制臺(tái)上還是誰提示我們輸入相應(yīng)的文件與

響應(yīng)的月份,我們輸入好testdat與10后,會(huì)發(fā)現(xiàn)控制臺(tái)上提示我們選擇要

修改哪一項(xiàng),這時(shí)我們選擇修改的是第一項(xiàng)即食品消費(fèi)這一項(xiàng),將其數(shù)字從

150改為380,最后在控制臺(tái)中顯示出來了,我們發(fā)現(xiàn)結(jié)果是完全正確的。

25

/月/我手挈花課程設(shè)計(jì)(論文)

五課程設(shè)計(jì)總結(jié)

該課程設(shè)計(jì)主要是通過C語言里的文件操作對(duì)文件進(jìn)行讀寫操作,來實(shí)

現(xiàn)一個(gè)賬簿管理系統(tǒng),從這一點(diǎn)上類似于一個(gè)小型的文件類型數(shù)據(jù)庫。基本

的的對(duì)于文件里的增刪改查的功能都在該程序里實(shí)現(xiàn)了,界面搭建的也很友

好,提示性輸出語句很多,操作起來也比較方便。查詢的文件可以通過一個(gè).txt

文件顯示出來,也可以指定對(duì)應(yīng)文件里的對(duì)應(yīng)月份的數(shù)據(jù)打印在控制條中。

并且可以通過該程序?qū)崿F(xiàn)對(duì)多文件的管理操作,在這一點(diǎn)上與一個(gè)文件型

DBMS是一樣的(當(dāng)然功能沒有那么強(qiáng)大)。

在整個(gè)程序的編寫過程中遇到的最大困難就是關(guān)于文件的讀寫,以及如何

以一種良好的格式輸出讓用戶看的更加清晰直觀。最先我們對(duì)文件操作函數(shù)

里的模式字符串的含義理解比較含糊,沒有正確的使用以及文件操作了以后

忘了重定向文件指針的位置導(dǎo)致文件指針指向異常往往在某些時(shí)候的測(cè)試下

與我們所期待實(shí)現(xiàn)的功能大相徑庭,所以我們?cè)谖募羔槻僮髦岸紩?huì)先將

指針的位置定位好。另外如我們?cè)诠δ?中以一個(gè).txt文件將整個(gè)文件的數(shù)據(jù)

都輸出出來了,在這里格式就看起來比較舒服,但最先的時(shí)候顯示的效果并

不是這樣的。我們當(dāng)時(shí)忽略了windows里的換行與dos命令控制臺(tái)里的換行

的轉(zhuǎn)義字符是不一樣的,所以無論怎樣使用W最后結(jié)果都是所有的數(shù)據(jù)都擠

在了一排顯得特別難看,但是后來突然想起來在windows中的換行使用的

是后來替換掉了后一經(jīng)調(diào)試就達(dá)到了滿意的輸出效果。另外在整個(gè)程

序中是分模塊來編寫的,怎樣使各個(gè)模塊能共享數(shù)據(jù)又成了一大難題,后來

經(jīng)過討論我們決定整個(gè)程序在主函數(shù)中創(chuàng)建一個(gè)Infor類型的指針變量,通過

26

鵬月,挈花課程設(shè)計(jì)(論文)

指針變量我們就可以方便的共享其所指向的內(nèi)存區(qū)域以達(dá)到共享數(shù)據(jù)的效

果。

整個(gè)程序的缺點(diǎn)在于該程序的某些步驟操作起來比較繁瑣,比方說前面的

修改數(shù)據(jù)項(xiàng)的功能,在前面已經(jīng)指定好了一個(gè)文件名,在后面又要重新指定

一遍文件名,這個(gè)問題主要是因?yàn)榉帜K編寫所造成的缺陷,曾經(jīng)想到用一

個(gè)全局變量來彌補(bǔ)該缺陷,但是后來由于時(shí)間的問題一旦修改必然又會(huì)對(duì)整

個(gè)程序大動(dòng)干戈進(jìn)行一番修改就此作罷。另外整個(gè)程序設(shè)計(jì)的異常處理很不

完善,但這個(gè)責(zé)任也不全然在于我們身上,因?yàn)镃語言是面向過程的語言,

它并不具備類似C++、JAVA里強(qiáng)大的異常處理機(jī)制(沒有定義那么多的異常

類),所以整個(gè)程序雖然可以正常的運(yùn)行使用,但并不健壯,一旦遇到非法的

操作程序就必然崩潰,如果采用C++或JAVA這樣的面向?qū)ο笳Z言來進(jìn)行編

程的話程序應(yīng)該可以設(shè)計(jì)的更加完善一些。

畢竟是一個(gè)賬簿管理系統(tǒng),對(duì)于不同的用戶我們應(yīng)該限制不同的使用權(quán)

限。關(guān)于本程序的進(jìn)一步設(shè)想就是我希望能夠?qū)崿F(xiàn)一個(gè)用戶權(quán)限管理,可以

通過不同的文件操作模式字符串來指定不同類型的用戶有不同權(quán)限的操作。

比方說有的用戶我們就在打開文件時(shí)給他指定“只讀”類型,那么他在整個(gè)

操作過程中就只能進(jìn)行查詢,而不能創(chuàng)建,增加,刪除,修改數(shù)據(jù),而有的

級(jí)別比較高的用戶我們就給他指定為“既可讀既可寫”類型,那么他在整個(gè)

程序的操作過程中就擁有最高的權(quán)限可以對(duì)數(shù)據(jù)進(jìn)行任意的操作。如果這樣

修改成功了以后的話就該程序就真真正正的實(shí)現(xiàn)了一個(gè)小型的文件DBMS。

總的來說做完這一次課程設(shè)計(jì)題目以后使我原本比較薄弱的文件操作知

識(shí)得到了加強(qiáng)并且也將數(shù)據(jù)庫課當(dāng)中學(xué)到的一些數(shù)據(jù)庫的思想也能在該程序

中得到了一定的體現(xiàn),收獲還是很大的。

27

/月/我手挈花課程設(shè)計(jì)(論文)

參考文獻(xiàn)

[1]譚浩強(qiáng),C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第

二版),北京,清華大學(xué)出版社,2000年9月。

[2]StephenPrata,Cprimerplus(第四版),

北京,人民郵電出版社,2005年2月。

⑶嚴(yán)蔚敏《數(shù)據(jù)結(jié)構(gòu)(C語言版)》北京,

清華大學(xué)出版社,2007年3月

⑷譚浩強(qiáng)《C程序設(shè)計(jì)(第四版)》,北京,

清華大學(xué)出版社,

28

/月/我手挈花課程設(shè)計(jì)(論文)

附錄

#include<stdio.h>

#include<stdlib.h>

#includc<string.h>

#defincOK1

#defineERROR0

29

/月/我手挈花課程設(shè)計(jì)(論文)

#defineTRUE1

〃個(gè)人信息

typedefstruct{

intmonth;

intshipin;

intfangzu;

intzinv;

intshuidian;

intyiliao;

intchuxu;

intshouru;

}Infor;

溫馨提示

  • 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)論