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

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)教學(xué)學(xué)院課程名稱(chēng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)話(huà)題個(gè)人圖書(shū)管理系統(tǒng)目錄 TOC o h z HYPERLINK l _Toc375834075 概述 PAGEREF _Toc375834075 h 2 HYPERLINK l _Toc375834076 二 整體方案設(shè)計(jì) PAGEREF _Toc375834076 h 3 HYPERLINK l _Toc375834077 三個(gè)詳細(xì)設(shè)計(jì) PAGEREF _Toc375834077 h 7 HYPERLINK l _Toc375834078 四個(gè)程序的調(diào)試運(yùn)行結(jié)果 PAGEREF _Toc375834078 h 22 HYPERLINK l _Toc3

2、75834079 五門(mén)課程設(shè)計(jì)總結(jié) PAGEREF _Toc375834079 h 25 HYPERLINK l _Toc375834080 參考文獻(xiàn) PAGEREF _Toc375834080 h 27 HYPERLINK l _Toc375834081 附錄 PAGEREF _Toc375834081 h 28一、概述課程設(shè)計(jì)的目的(1)。了解并掌握本課程的基本概念、編程思想和方法。(2)。培養(yǎng)綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成項(xiàng)目的能力。(3)。培養(yǎng)科技人員勇于探索、推理嚴(yán)謹(jǐn)、實(shí)事求是、糾正錯(cuò)誤、用實(shí)踐檢驗(yàn)理論、全面思考問(wèn)題等應(yīng)有的素質(zhì)。(4)。掌握從文獻(xiàn)和科學(xué)實(shí)驗(yàn)中獲取知識(shí)的能力,提高學(xué)生從別人

3、的經(jīng)驗(yàn)中尋找新方法解決問(wèn)題的認(rèn)識(shí),初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。課程設(shè)計(jì)要求個(gè)人賬簿管理系統(tǒng)記錄一個(gè)人的月收入和各項(xiàng)支出,包括伙食費(fèi)、房租、子女教育費(fèi)、水電費(fèi)、醫(yī)療費(fèi)、儲(chǔ)蓄等。系統(tǒng)采用Windows XP操作系統(tǒng)結(jié)合Visual C+ 6.0、TC 2.0等軟件開(kāi)發(fā),可以輸入和修改某月的收支,可以按月支出從小到大排序,可以根據(jù)輸入的當(dāng)月收支查詢(xún)?cè)轮С?。C語(yǔ)言文件操作的知識(shí)點(diǎn)在課程設(shè)計(jì)中經(jīng)常用到,而文件操作在我們平時(shí)的學(xué)習(xí)中很少用到,所以在課程設(shè)計(jì)之前,我們組的成員們花了一個(gè)專(zhuān)門(mén)的課時(shí)間,重新閱讀C編程教程了解C入門(mén)加中的文件操作。二 整體方案設(shè)計(jì)一、整體系統(tǒng)設(shè)計(jì)思路本課程的程序主要通過(guò)C語(yǔ)言文件

4、操作實(shí)現(xiàn)文件的讀寫(xiě)操作來(lái)存儲(chǔ)管理數(shù)據(jù)。主要包含接收鍵盤(pán)輸入數(shù)據(jù),將數(shù)據(jù)寫(xiě)入指定文件,將.dat文件轉(zhuǎn)換為.txt文件顯示等功能。出來(lái),找到對(duì)應(yīng)的月份,對(duì)一個(gè)月的費(fèi)用進(jìn)行排序,修改其中一個(gè)數(shù)據(jù)刪除整月數(shù)據(jù)。整個(gè)系統(tǒng)的接口和對(duì)各個(gè)功能函數(shù)的調(diào)用都放在main函數(shù)中。一個(gè)指針變量a貫穿整個(gè)程序,使得每個(gè)函數(shù)都可以共享指針變量a所指向的存儲(chǔ)區(qū)的數(shù)據(jù)。整個(gè)程序涉及的功能很多,代碼一般比較長(zhǎng)。根據(jù)課程設(shè)計(jì)大綱的要求和我們對(duì)程序的整體設(shè)計(jì),我們將整個(gè)程序分為6個(gè)功能,其中7個(gè)功能功能與主要功能相關(guān)。調(diào)度每個(gè)函數(shù)以實(shí)現(xiàn)該功能。2.算法的總體思路數(shù)據(jù)類(lèi)型設(shè)置為:類(lèi)型定義結(jié)構(gòu)國(guó)際月份;內(nèi)裝船;詮釋方族;詮釋 zi

5、nv;int水電;int yiao;詮釋初許;詮釋手足; 信息;為了方便使用,每個(gè)變量基本都使用拼音。另外,為了方便查詢(xún)和排序,另外定義類(lèi)型定義結(jié)構(gòu)詮釋沒(méi)有;整數(shù)數(shù)據(jù);p類(lèi)型;排序時(shí)使用方便。整個(gè)程序流程圖如下:整個(gè)程序通過(guò)main函數(shù)中的switch調(diào)用來(lái)執(zhí)行整個(gè)程序。三、主要特點(diǎn)該程序可以在控制臺(tái)輸入數(shù)據(jù)后將數(shù)據(jù)寫(xiě)入文件。即使退出程序,也可以隨時(shí)通過(guò)程序?qū)ξ募械娜魏螖?shù)據(jù)進(jìn)行增刪改查,只要不刪除自己編寫(xiě)的文件即可。在修改數(shù)據(jù)時(shí),我們可以在指定文件中修改指定月份的指定數(shù)據(jù)項(xiàng),體現(xiàn)了修改的靈活性。查詢(xún)時(shí),我們可以在控制臺(tái)的一個(gè)文件中查詢(xún)一個(gè)月的數(shù)據(jù)。在控制臺(tái)中查詢(xún)指定文件中直徑月份的數(shù)據(jù),并刪

6、除指定文件中指定月份的全部數(shù)據(jù)。最后,程序還可以將每個(gè)月的開(kāi)支從小到大排序。4.具有功能程序可以接收鍵盤(pán)輸入的數(shù)據(jù),將數(shù)據(jù)寫(xiě)入指定文件,將.dat文件轉(zhuǎn)換成txt文件顯示方便查看,查找對(duì)應(yīng)月份,對(duì)一個(gè)月的支出進(jìn)行排序,修改其中一個(gè)數(shù)據(jù)為刪除一整月的數(shù)據(jù),最后在main函數(shù)中調(diào)用,對(duì)團(tuán)隊(duì)成員的功能進(jìn)行整體調(diào)試。詳情見(jiàn)下表:無(wú)效輸入(信息 *a)這個(gè)函數(shù)接受一個(gè)從main函數(shù)傳來(lái)的指針變量,并將數(shù)據(jù)寫(xiě)入a指向的存儲(chǔ)區(qū)無(wú)效 writeinfor(Infor *a)該函數(shù)將a指向的存儲(chǔ)區(qū)的數(shù)據(jù)寫(xiě)入指定的.dat文件無(wú)效更改格式()該函數(shù)用于查詢(xún)時(shí),將.dat文件中的數(shù)據(jù)寫(xiě)入控制臺(tái),轉(zhuǎn)換為.txt文件并

7、顯示,最后關(guān)閉文件。該函數(shù)完成執(zhí)行并刪除 .txt 文件整數(shù)搜索(信息 *a)從main函數(shù)中接受指針變量,在指針指向的內(nèi)存區(qū)域中找到a-month等于你需要找到的月份值的位置,使a指針正好指向this的數(shù)據(jù)月份,如果標(biāo)志找到為1則正確返回,如果沒(méi)有找到,則顯示為找到對(duì)應(yīng)的月份。void paixu(Infor *a)將指定月份的數(shù)據(jù)項(xiàng)中的數(shù)據(jù)從小到大排序。無(wú)效修改(Infor *a,int mon)修改指定文件指定月份指定數(shù)據(jù)項(xiàng)的數(shù)據(jù)無(wú)效刪除記錄(int mon)整月刪除指定文件中指定月份的數(shù)據(jù)我在這個(gè)程序中承擔(dān)的主要任務(wù)是查找對(duì)應(yīng)的月份,查詢(xún)數(shù)據(jù)或修改月份中的數(shù)字。這三個(gè)函數(shù)主要解決的問(wèn)題

8、是如何在指定文件中找到對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并對(duì)數(shù)據(jù)項(xiàng)進(jìn)行相應(yīng)的操作。最后在main函數(shù)中,通過(guò)switch將各個(gè)功能模塊作為一個(gè)整體調(diào)用,最終實(shí)現(xiàn)系統(tǒng)。我要解決的主要問(wèn)題是如何使用正確的文件讀寫(xiě)操作模式字符串打開(kāi)文件讀取指定的.dat文件并轉(zhuǎn)換為.txt文件最后以一定的格式顯示在屏幕上.另外,在查詢(xún)函數(shù)中,我們需要在對(duì)應(yīng)的文件中找到對(duì)應(yīng)的月份,并將這里的指針移到數(shù)據(jù)區(qū),這樣我們就可以使用指針變量方便的查詢(xún)和修改數(shù)據(jù),也就是還體現(xiàn)在指針變量使用的靈活性上。其中,fopen函數(shù)模式字符串在文件操作中的作用如下:模式串意義 r 打開(kāi)過(guò)去的文件,可以讀取文件“ w ”打開(kāi)文件,可以寫(xiě)入文件,先將文件長(zhǎng)度截?cái)?/p>

9、為0,如果文件不存在,則創(chuàng)建“一個(gè)”打開(kāi)一個(gè)文本文件,可以寫(xiě)入文件,將內(nèi)容追加到現(xiàn)有文件的末尾,如果文件不存在,先創(chuàng)建 r+ 打開(kāi)一個(gè)文本文件,該文件可以更新,也可以讀取和寫(xiě)入文件 w+ 打開(kāi)分隔的文本文件,可以更新(寫(xiě)入),如果文件存在,會(huì)先將其長(zhǎng)度截?cái)酁?;如果它不存在,它將首先創(chuàng)建?!耙粋€(gè)+ ”打開(kāi)一個(gè)文本文件,可以更新(讀寫(xiě)),將內(nèi)容追加到現(xiàn)有文件的末尾,如果文件不存在,先創(chuàng)建;您可以讀取整個(gè)文件,但只能在寫(xiě)入時(shí)附加內(nèi)容“ rb ” 、 “ wb+ ” 、 “ ab ” 、 “ ab+ ” 、 “ a+b ” 、 “ wb+ ” 、 “ w+b ”“ ab+ ” 、 “ a+b ”和之

10、前的模式一樣,只是用二進(jìn)制模式而不是文本模式打開(kāi)文件三個(gè)詳細(xì)的設(shè)計(jì)更改格式()該函數(shù)首先在控制臺(tái)打印一行語(yǔ)句提示用戶(hù)輸入要搜索的文件名,如果文件不存在則程序終止。如果文件存在,使用文件類(lèi)型指針fp1指向文件,以二進(jìn)制文件讀寫(xiě)方式打開(kāi)文件,然后我再創(chuàng)建一個(gè)同名但后綴為.txt的文件,并使用文件類(lèi)型指針fp2 指向它,并在這個(gè)文件中打印一些顯示文本,使輸出結(jié)果更好看,同時(shí)在控制臺(tái)打印這些文本,最后將 fp1 文件指向的格式化輸出 fprintf 寫(xiě)入 fp2,最后分別關(guān)閉 fp1 和 fp2。 ,并顯示剛才的.txt文件,并刪除剛剛創(chuàng)建的.txt文件。無(wú)效更改格式()文件 *fp1,*fp2;信息

11、 *a;字符文件名100;詮釋我;a=(Infor *)malloc(sizeof(Infor);printf(請(qǐng)輸入您要查詢(xún)的數(shù)據(jù)的文件名(.dat后綴的文件名);scanf(%s,文件名);fp1=fopen(filename,rb+);/打開(kāi)一個(gè)二進(jìn)制文件進(jìn)行讀寫(xiě)如果(fp1=NULL)printf(找不到文件n);退出(0);for(i=0;文件名i!=.;i+)文件名2i=文件名i;if(filename2i!=.)strcat(filename2,.txt);/將文件名后綴改為.txt文件fp2=fopen(filename2,wb+);如果(fp2=NULL)printf(創(chuàng)建文

12、件失敗n);返回 ; /返回主函數(shù)fputs(n個(gè)人賬簿管理系統(tǒng)rn,fp2);fputs(記錄每月的伙食費(fèi)、房租、子女費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入rn,fp2);fputs( rn,fp2);printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);rewind(fp1);/使fp1指向文件開(kāi)頭fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/從原文件.dat中讀取數(shù)據(jù)寫(xiě)入顯示文件.txtprintf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin

13、,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);fprintf(fp2,%7d %8d %8d %8d %8d %8d %8d %8drn,a-month,a-shipin,a-fangzu,a-zinv,a- shuidian,a-yiliao,a-chuxu,a-shouru);/格式化文件輸出fread(a,sizeof(Infor),1,fp1);fputs( rn,fp2);fputs(r關(guān)閉這個(gè)程序,繼續(xù)原來(lái)的程序!n,fp2);fclose(fp1);fclose(fp2);系統(tǒng)(文件名2); /調(diào)用打開(kāi)轉(zhuǎn)換后的文本文件刪除(文

14、件名2);搜索(信息 *a)該函數(shù)首先在控制臺(tái)打印一行語(yǔ)句提示用戶(hù)輸入要搜索的文件名,如果文件不存在則程序終止。如果文件存在,使用文件類(lèi)型指針fp1指向文件,以二進(jìn)制文件讀寫(xiě)方式打開(kāi)文件,然后我再創(chuàng)建一個(gè)同名但后綴為.txt的文件,并使用文件類(lèi)型指針fp2 指向它,并在這個(gè)文件中打印一些顯示文本,使輸出結(jié)果更好看,同時(shí)在控制臺(tái)打印這些文本,最后將 fp1 文件指向的格式化輸出 fprintf 寫(xiě)入 fp2,最后分別關(guān)閉 fp1 和 fp2。 ,并顯示剛才的.txt文件,并刪除剛剛創(chuàng)建的.txt文件。整數(shù)搜索(信息 *a)文件 *fp1;周一;int isfound=0;/標(biāo)志變量,初始值為0表

15、示找到對(duì)應(yīng)的月份,如果找到對(duì)應(yīng)的月份,則設(shè)置為1字符文件名100;printf(請(qǐng)輸入文件名(.dat文件):);scanf(%s,文件名);printf(請(qǐng)輸入正確的月份:);scanf(%d,&mon);刷新(標(biāo)準(zhǔn)輸入); /清空緩沖區(qū)fp1=fopen(文件名,rb+);如果(fp1=NULL)printf(找不到文件n);退出(0);rewind(fp1);/將fp1指向文件頭,比較嚴(yán)謹(jǐn)fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/查詢(xún)操作如果(a-月=星期一)發(fā)現(xiàn)=1;休息;別的發(fā)現(xiàn)=0;fread(a,sizeof(Infor),1,f

16、p1);fclose(fp1);如果(發(fā)現(xiàn))返回確定;別的printf(未找到對(duì)應(yīng)月份n);返回 1;無(wú)效修改(Infor *a,int mon)該函數(shù)的主要作用是修改指定文件下指定月份的指定數(shù)據(jù)項(xiàng)。首先用fp1指向指定文件,用fp2打開(kāi)一個(gè)temp.dat文件。上一個(gè)搜索函數(shù)找到月份后,通過(guò)指針變量a “傳遞”該月份。首先選擇要修改的數(shù)據(jù)項(xiàng),然后將要修改的數(shù)據(jù)的內(nèi)容輸入到a所指向的存儲(chǔ)區(qū)中對(duì)應(yīng)的數(shù)據(jù)項(xiàng)中。此時(shí),我們使用 printf 在控制臺(tái)打印出修改月份的數(shù)據(jù)。然后使用指針變量b來(lái)存儲(chǔ)從fp1文件中讀取的數(shù)據(jù)。不是對(duì)應(yīng)月份時(shí),直接寫(xiě)入fp2指向的temp.dat文件。當(dāng)是對(duì)應(yīng)月份的時(shí)候,a

17、指向的存儲(chǔ)區(qū)就是將數(shù)據(jù)寫(xiě)入fp2指向的temp.dat文件,這個(gè)過(guò)程還是一個(gè)函數(shù),直到fp1指向文件末尾才結(jié)束.最后關(guān)閉fp1和fp2指向的文件,刪除源文件,將temp.dat文件命名為和之前的文件同名,在控制臺(tái)打印修改成功。void modify(Infor *a,int mon)/修改數(shù)據(jù)文件 *fp1,*fp2;詮釋我;詮釋金錢(qián);字符文件名100;信息 *b;b=(Infor *)malloc(sizeof(Infor);printf(要插入修改數(shù)據(jù)的文件(注意文件名必須和之前的文件名一致!);scanf(%s,文件名);fp1=fopen(文件名,rb+);fp2=fopen(temp

18、.dat,wb+);/temp.dat作為臨時(shí)文件printf(你要修改哪些數(shù)據(jù)?(1個(gè)食物,2個(gè)房租,3個(gè)孩子開(kāi)銷(xiāo),4個(gè)水電費(fèi),5個(gè)醫(yī)療費(fèi),6個(gè)儲(chǔ)蓄,7個(gè)收入):);scanf(%d,&i);而(i7)printf(請(qǐng)重新輸入:);scanf(%d,&i);printf(請(qǐng)輸入修改后的數(shù)據(jù):);scanf(%d,&money);開(kāi)關(guān)(一)情況1:a-shipin=錢(qián);休息;案例2:a-fangzu=錢(qián);休息;案例3:a-zinv=錢(qián);休息;案例4:a-水電=錢(qián);休息;案例5:a-yiliao=錢(qián);休息;案例6:a-chuxu=錢(qián);休息;案例7:a-shouru=錢(qián);休息;默認(rèn):休息;prin

19、tf(修改:n);printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);倒帶(fp1);fread(b,sizeof(Infor),1,fp1);while (!feof(fp1)/重寫(xiě)數(shù)據(jù)如果(b-月=星期一)fwrite(a,sizeof(Infor),1,fp2);/修改數(shù)據(jù)別的fwrite(b,sizeof(Infor),1,

20、fp2);fread(b,sizeof(Infor),1,fp1);fclose(fp1);fclose(fp2);刪除(文件名); /刪除源文件rename(temp.dat,filename);/重命名中間文件printf(修改數(shù)據(jù)成功!n );4.主要功能調(diào)試主要功能部分通過(guò)switch語(yǔ)句實(shí)現(xiàn)整個(gè)程序功能的調(diào)度。首先在case1中,通過(guò)input函數(shù)將變量寫(xiě)入a指向的存儲(chǔ)區(qū)域,然后調(diào)用writeinfor函數(shù)將指針變量a指向的區(qū)域的數(shù)據(jù)寫(xiě)入用戶(hù)指定的文件中. case2是對(duì)整個(gè)文件查詢(xún)用戶(hù)指定文件的數(shù)據(jù),結(jié)果最終會(huì)在控制臺(tái)打印出來(lái)并顯示一個(gè).txt文件,比較方便直觀(guān)。在case3中,調(diào)

21、用search函數(shù),通過(guò)flag變量flag接收到search函數(shù)返回的值。如果標(biāo)志值不OK,則打印沒(méi)有滿(mǎn)足條件的記錄的語(yǔ)句。如果標(biāo)志正常,則通過(guò)指針變量 a 傳遞。將指向的存儲(chǔ)區(qū)的數(shù)據(jù)格式化打印在屏幕上,然后調(diào)用修改函數(shù)修改月份數(shù)據(jù)指定的數(shù)據(jù)項(xiàng)。 case4前面部分的流程和case3一樣。同樣是調(diào)用搜索函數(shù)在指定文件中查找指定月份的數(shù)據(jù)并指向它,最后通過(guò)指針變量a將其打印到屏幕上。在case5中,使用search函數(shù)查找指定月份,然后使用paixu函數(shù)將指定月份的數(shù)據(jù)從小到大排序,最后打印到控制臺(tái)。在案例6中,通過(guò)搜索功能也找到了指定的月份,并刪除了該月的所有數(shù)據(jù)。 case7 通過(guò) 函數(shù)中

22、的exit() 函數(shù)退出整個(gè)程序。主函數(shù)的整個(gè)流程圖見(jiàn)算法總體思路中的函數(shù)流程圖,這里不再贅述。主函數(shù)()而(真)int flag;/標(biāo)志位,用于保存查詢(xún)函數(shù)返回的結(jié)果int item;/函數(shù)項(xiàng)號(hào)周一;Infor *a;/信息指針a=(Infor *)malloc(sizeof(Infor);/動(dòng)態(tài)分配內(nèi)存空間做printf(nt*歡迎使用個(gè)人賬簿管理系統(tǒng)* *n ); printf(t*t *n);printf(t*t 主菜單 *n);printf(t*t *n);printf(t*t 1. 輸入數(shù)據(jù)*n);printf(t* t 2. 查看數(shù)據(jù)*n);printf(t*t 3. 修改數(shù)據(jù)*

23、n);printf(t*t 4. 查詢(xún)數(shù)據(jù)*n);printf(t*t 5. 數(shù)據(jù)排序*n);printf(t*t 6. 刪除數(shù)據(jù)*n);printf(t*t 0. 退出系統(tǒng)*n);printf(t*t *n);printf(t* * *nn);printf(請(qǐng)輸入要執(zhí)行的動(dòng)作:);scanf(%d,&item);while(item7 | item月;if (flag!=OK) printf(n沒(méi)有匹配的記錄!n);別的printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d

24、 %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);修改(一,周一);休息;/查詢(xún)數(shù)據(jù)案例4:標(biāo)志=搜索(一);if (flag!=OK) printf(n沒(méi)有匹配的記錄!n);別的printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);休息;/

25、排序數(shù)據(jù)案例5:標(biāo)志=搜索(一);如果(標(biāo)志!=確定)printf(n沒(méi)有找到符合排序條件的記錄!n);別的派虛(一);休息;/刪除數(shù)據(jù)案例6:標(biāo)志=搜索(一);星期一=a-月;if (flag!=OK) printf(n沒(méi)有匹配的記錄!n);別的printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-shuidian,a- yiliao,a-chuxu,a-shouru);delRecord(m

26、on);break;/Exit systemcase 0:printf(nInstructor: Shann);printf(Group members: Xia Neng, Wang Huan, Qiu Shaoxiong, Luo Siwein);exit(0);break;free(a);/Release storage spacereturn 0;Debugging and running results of the four programs1.查詢(xún)功能首先是測(cè)試查詢(xún)功能。數(shù)據(jù)已經(jīng)通過(guò)第一個(gè)函數(shù)提前寫(xiě)入了test.dat文件。我們?cè)谥鞴δ芙缑孑斎?,選擇查看數(shù)據(jù)。在控制臺(tái)中,我們可

27、以看到數(shù)據(jù)是以某種格式輸出的,同時(shí)打開(kāi)了一個(gè)名為 test.txt 的文件,顯示的是相同的數(shù)據(jù)。這是當(dāng)我們看到目錄結(jié)構(gòu)中同時(shí)存在 test.dat 和 test.txt 文件時(shí)。 test.txt 文件提示用戶(hù)關(guān)閉程序。繼續(xù)源碼程序,關(guān)閉程序后,發(fā)現(xiàn)回到主函數(shù)界面,text.txt文件被刪除。2.查詢(xún)數(shù)據(jù)接下來(lái),測(cè)試第四個(gè)查詢(xún)數(shù)據(jù)功能。這個(gè)函數(shù)和前者的區(qū)別在于前者是查詢(xún)整個(gè)文件的數(shù)據(jù),而這個(gè)函數(shù)是查詢(xún)指定文件的指定月份。我們先在功能主界面輸入4選擇功能,然后控制臺(tái)會(huì)提示我們輸入要查詢(xún)的文件名,或者輸入剛才的test.dat,然后控制臺(tái)會(huì)提示用戶(hù)輸入月份查詢(xún)中,我們輸入 10 ,然后你會(huì)發(fā)現(xiàn)控制

28、臺(tái)直接在控制臺(tái)打印了十月的數(shù)據(jù)。3.修改數(shù)據(jù)然后測(cè)試修改數(shù)據(jù)的功能。這時(shí)候我們?cè)谥鹘缑孑斎?,這里我們調(diào)用前面的搜索來(lái)指定文件和月份,所以誰(shuí)在控制臺(tái)提示我們輸入對(duì)應(yīng)的文件和響應(yīng)的月份,我們就輸入test。在dat和10之后,你會(huì)發(fā)現(xiàn)控制臺(tái)提示我們選擇要修改的項(xiàng)目。這時(shí)候我們選擇修改第一項(xiàng),即食物消費(fèi),把它的數(shù)字從150改為380,最后在控制臺(tái)顯示出來(lái),我們發(fā)現(xiàn)結(jié)果完全正確。五門(mén)課程設(shè)計(jì)總結(jié)課程設(shè)計(jì)主要是通過(guò)C語(yǔ)言的文件操作讀寫(xiě)文件來(lái)實(shí)現(xiàn)一個(gè)賬簿管理系統(tǒng),從這個(gè)角度看類(lèi)似于一個(gè)小型文件類(lèi)型的數(shù)據(jù)庫(kù)。本程序?qū)崿F(xiàn)了文件的增刪改查等基本功能,界面也非常友好,有很多提示輸出語(yǔ)句,操作起來(lái)更方便。查詢(xún)的文

29、件可以通過(guò).txt文件顯示,也可以在控制欄指定打印對(duì)應(yīng)文件中對(duì)應(yīng)月份的數(shù)據(jù)。并且可以使用這個(gè)程序來(lái)管理多個(gè)文件,這點(diǎn)和基于文件的DBMS是一樣的(當(dāng)然功能沒(méi)那么強(qiáng)大)。整個(gè)程序的編寫(xiě)過(guò)程中遇到的最大難點(diǎn)就是文件的讀寫(xiě),以及如何輸出好的格式,讓用戶(hù)看得更清楚、更直觀(guān)。首先,我們對(duì)文件操作函數(shù)中模式字符串的含義有一個(gè)模糊的認(rèn)識(shí)。如果沒(méi)有正確使用,我們?cè)趫?zhí)行文件操作后忘記重定向文件指針的位置,導(dǎo)致文件指針指向異常。我們期望實(shí)現(xiàn)的功能有很大的不同,所以我們?cè)诓僮魑募羔樦跋榷ㄎ恢羔樀奈恢?。另外,如果我們?cè)诤瘮?shù)2中將整個(gè)文件的數(shù)據(jù)輸出為.txt文件,這里的格式看起來(lái)比較舒服,但是一開(kāi)始顯示的效果就不是

30、這樣了。當(dāng)時(shí)我們忽略了windows中的換行符和dos命令控制臺(tái)中換行符的轉(zhuǎn)義符不同,所以不管怎么用 n ,最終的結(jié)果就是所有的數(shù)據(jù)都擠在一行,這特別難看。但是后來(lái)我突然想起,windows中的換行符是 r 然后換成 n ,經(jīng)過(guò)調(diào)試,輸出效果還算滿(mǎn)意。此外,整個(gè)程序是用模塊編寫(xiě)的。如何讓各個(gè)模塊共享數(shù)據(jù)成為了一個(gè)大問(wèn)題。后來(lái)經(jīng)過(guò)討論,我們決定在整個(gè)程序的main函數(shù)中創(chuàng)建一個(gè)Infor類(lèi)型的指針變量。它可以輕松共享其指向的存儲(chǔ)區(qū)域,以達(dá)到共享數(shù)據(jù)的效果。整個(gè)程序的缺點(diǎn)是程序的某些步驟操作起來(lái)比較麻煩。比如前面修改數(shù)據(jù)項(xiàng)的功能,前面已經(jīng)指定了文件名,后面需要重新指定文件名。問(wèn)題主要是因?yàn)樽幽K寫(xiě)

31、導(dǎo)致的缺陷,曾經(jīng)想過(guò)用全局變量來(lái)彌補(bǔ)缺陷,但是后來(lái)由于時(shí)間問(wèn)題,一旦修改,難免會(huì)做出一些改動(dòng)到整個(gè)程序并停止它。另外,整個(gè)程序設(shè)計(jì)的異常處理是很不完善的,但是這個(gè)責(zé)任也不全在我們身上,因?yàn)镃語(yǔ)言是面向過(guò)程的語(yǔ)言,它沒(méi)有像C+和JAVA那樣強(qiáng)大的異常處理機(jī)制(沒(méi)有那么多定義)。異常類(lèi)),所以整個(gè)程序雖然可以正常使用,但并不健壯。一旦遇到非法的運(yùn)行程序,必然會(huì)崩潰。如果使用 C+ 或 JAVA 等面向?qū)ο蟮恼Z(yǔ)言進(jìn)行編程,則程序的設(shè)計(jì)應(yīng)該更加完善一些。畢竟是圖書(shū)管理系統(tǒng),我們應(yīng)該為不同的用戶(hù)限制不同的使用權(quán)限。這個(gè)程序更進(jìn)一步的想法是希望實(shí)現(xiàn)一個(gè)用戶(hù)權(quán)限管理,可以通過(guò)不同的文件操作模式字符串來(lái)指定不

32、同類(lèi)型的用戶(hù)擁有不同權(quán)限的操作。比如對(duì)于一些用戶(hù),我們?cè)诖蜷_(kāi)文件的時(shí)候給他指定“只讀”類(lèi)型,那么他在整個(gè)操作過(guò)程中只能查詢(xún),不能創(chuàng)建、添加、刪除、修改數(shù)據(jù),有的還有更高的級(jí)別。我們將用戶(hù)指定為“可讀可寫(xiě)”類(lèi)型,則他擁有最高權(quán)限,可以在整個(gè)程序運(yùn)行過(guò)程中對(duì)數(shù)據(jù)進(jìn)行任意操作。如果這個(gè)修改成功,程序?qū)⒄嬲龑?shí)現(xiàn)一個(gè)小文件DBMS??偟膩?lái)說(shuō),完成本課程設(shè)計(jì)課題后,我原本的弱文件操作知識(shí)得到了加強(qiáng),在數(shù)據(jù)庫(kù)課程中學(xué)到的一些數(shù)據(jù)庫(kù)思想也能在程序中得到一定的體現(xiàn)。還是很大的。參考1 譚浩強(qiáng),C 編程問(wèn)題求解與計(jì)算機(jī)指導(dǎo)(第二版),清華大學(xué),2000 年 9 月。2 Stephen Prata,C Primer

33、 plus(第 4 版),人民郵電,2005 年 2 月。3 嚴(yán)為民,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),清華大學(xué),2007年3月4 譚浩強(qiáng),C程序設(shè)計(jì)(第四版),清華大學(xué),附錄#include#include#include#定義確定 1#定義錯(cuò)誤 0#define 真 1/個(gè)人信息類(lèi)型定義結(jié)構(gòu)國(guó)際月份;內(nèi)裝船;詮釋方族;詮釋 zinv;int水電;int yiao;詮釋初許;詮釋手足; Infor;/每個(gè)變量的名字為了方便使用拼音字符文件名1100,文件名2100;typedef struct / 自定義查詢(xún)數(shù)據(jù)類(lèi)型詮釋沒(méi)有;整數(shù)數(shù)據(jù);p類(lèi)型;void input(Infor *a)/接收鍵盤(pán)輸入的數(shù)據(jù)

34、printf(n請(qǐng)按順序輸入數(shù)據(jù)(數(shù)據(jù)之間用空格隔開(kāi)):n(本月伙食費(fèi)、房租、子女費(fèi)、水電費(fèi)、醫(yī)療費(fèi)、儲(chǔ)蓄費(fèi)、收入費(fèi))n) ;scanf(%d%d%d%d%d%d%d%d,&a-month,&a-shipin,&a-房族,&a-zinv,&a-水店,&a-yiliao ,&a-chuxu,&a-shouru);fflush(stdin);/清空文件緩沖區(qū),打開(kāi)文件寫(xiě)入時(shí)將緩沖區(qū)內(nèi)容寫(xiě)入文件void writeinfor(Infor *a)/將內(nèi)容寫(xiě)入文件字符 ch;文件 *fp;printf(請(qǐng)輸入要寫(xiě)入的文件名(請(qǐng)使用.dat作為文件名后綴):);scanf(%s,filename1);ch

35、=getchar();/回收換行鍵if(fp=fopen(filename1,ab+)=NULL)/第一次以讀寫(xiě)方式新建二進(jìn)制文件,如果以后文件名存在,則打開(kāi)文件并追加內(nèi)容printf(創(chuàng)建文件失敗n);退出(0);fwrite(a,sizeof(Infor),1,fp);/向fp指向的文件寫(xiě)入一個(gè)數(shù)據(jù)項(xiàng)fclose(fp);printf(數(shù)據(jù)寫(xiě)入成功n);無(wú)效更改格式()文件 *fp1,*fp2;信息 *a;字符文件名100;詮釋我;a=(Infor *)malloc(sizeof(Infor);printf(請(qǐng)輸入您要查詢(xún)的數(shù)據(jù)的文件名(.dat后綴的文件名);scanf(%s,文件名);

36、fp1=fopen(filename,rb+);/打開(kāi)一個(gè)二進(jìn)制文件進(jìn)行讀寫(xiě)如果(fp1=NULL)printf(找不到文件n);退出(0);for(i=0;文件名i!=.;i+)文件名2i=文件名i;if(filename2i!=.)strcat(filename2,.txt);/將文件名后綴改為.txt文件fp2=fopen(filename2,wb+);如果(fp2=NULL)printf(創(chuàng)建文件失敗n);返回 ; /返回主函數(shù)fputs(n個(gè)人賬簿管理系統(tǒng)rn,fp2);fputs(記錄每月的伙食費(fèi)、房租、子女費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入rn,fp2);fputs( rn,fp2

37、);printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);rewind(fp1);/使fp1指向文件開(kāi)頭fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/從原文件.dat中讀取數(shù)據(jù)寫(xiě)入顯示文件.txtprintf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);fprintf(fp2,%7d %8d %8d %8d %8d %8d %8d %8drn,a

38、-month,a-shipin,a-fangzu,a-zinv,a- shuidian,a-yiliao,a-chuxu,a-shouru);/格式化文件輸出fread(a,sizeof(Infor),1,fp1);fputs( rn,fp2);fputs(r關(guān)閉這個(gè)程序,繼續(xù)原來(lái)的程序!n,fp2);fclose(fp1);fclose(fp2);系統(tǒng)(文件名2); /調(diào)用打開(kāi)轉(zhuǎn)換后的文本文件刪除(文件名2);整數(shù)搜索(信息 *a)文件 *fp1;周一;int isfound=0;/標(biāo)志變量,初始值為0表示找到對(duì)應(yīng)的月份,如果找到對(duì)應(yīng)的月份,則設(shè)置為1字符文件名100;printf(請(qǐng)輸入文

39、件名(.dat文件):);scanf(%s,文件名);printf(請(qǐng)輸入正確的月份:);scanf(%d,&mon);刷新(標(biāo)準(zhǔn)輸入); /清空緩沖區(qū)fp1=fopen(文件名,rb+);如果(fp1=NULL)printf(找不到文件n);退出(0);rewind(fp1);/將fp1指向文件頭,比較嚴(yán)謹(jǐn)fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/查詢(xún)操作如果(a-月=星期一)發(fā)現(xiàn)=1;休息;別的發(fā)現(xiàn)=0;fread(a,sizeof(Infor),1,fp1);fclose(fp1);如果(發(fā)現(xiàn))返回確定;別的printf(未找到對(duì)應(yīng)月份n

40、);返回 1;void paixu(Infor *a)詮釋 i=0,j=0;國(guó)際溫度;pType px8=0,0;char str810=記錄月份,食品消費(fèi),房租,兒童費(fèi)用,水電費(fèi),醫(yī)療費(fèi),儲(chǔ)蓄費(fèi),月收入 ;/一個(gè)二維字符數(shù)組for(;i月;px1.data=a-shipin;px2.data=a-方形族;px3.data=a-zinv;px4.data=a-水電;px5.data=a-yiliao;px6.data=a-chuxu;px7.data=a-shouru;對(duì)于 (i=0;i8;i+)for(j=0;j=pxj+1.data)溫度=pxj.no;pxj.no=pxj+1.no;px

41、j+1.no=溫度;溫度=pxj.data;pxj.data=pxj+1.data;pxj+1.data=temp;其他繼續(xù);對(duì)于 (i=0;i8;i+)printf(%s|,strpxi.no);printf(n);對(duì)于 (i=0;i8;i+)printf(%d,pxi.data);void modify(Infor *a,int mon)/修改數(shù)據(jù)文件 *fp1,*fp2;解釋我;解讀金錢(qián);字符文件名100;信息*b;b=(Infor *)malloc(sizeof(Infor);printf(要插入修改數(shù)據(jù)的文件(注意文件名必須和之前的文件名一致!);scanf(%s,文件名);fp1=

42、fopen(文件名,rb+);fp2=fopen(temp.dat,wb+);/temp.dat作為臨時(shí)文件printf(你要修改哪些數(shù)據(jù)?(1個(gè)食物,2個(gè)房租,3個(gè)孩子開(kāi)銷(xiāo),4個(gè)水電費(fèi),5個(gè)醫(yī)療費(fèi),6個(gè)儲(chǔ)蓄,7個(gè)收入):);scanf(%d,&i);而(i7)printf(請(qǐng)重新輸入:);scanf(%d,&i);printf(請(qǐng)輸入修改后的數(shù)據(jù):);scanf(%d,&money);開(kāi)關(guān) (1)情況1:a-shipin=錢(qián);休息;案例二:a-fangzu=錢(qián);休息;案例3:a-zinv=錢(qián);休息;案例4:a-水電=錢(qián);休息;案例5:a-yiliao=錢(qián);休息;案例6:a-chuxu=錢(qián);休

43、息;案例7:a-shouru=錢(qián);休息;默認(rèn):休息;printf(修改:n);printf(n記錄每個(gè)月的伙食費(fèi)、房租、小孩費(fèi)、水電費(fèi)、醫(yī)療費(fèi)和儲(chǔ)蓄費(fèi)的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);倒帶(fp1);fread(b,sizeof(Infor),1,fp1);while (!feof(fp1)/重寫(xiě)數(shù)據(jù)如果(b-月=星期一)fwrite(a,sizeof(Infor),1,fp2);/修改數(shù)據(jù)別的fwrite(b,sizeof(Infor),1,fp2);fread(b,sizeof(Infor),1,fp1);fclose(fp1);fclose(fp2);刪除(文件名); /刪除源文件rename(temp.dat,filename);/重命名中間文件printf(修改數(shù)據(jù)成功!n );void delRecord(int mon) / 刪除數(shù)據(jù)文件 *fp1,*fp2;字符文件名100;信息 *b;b=(Infor *)malloc(sizeof(Infor);printf(刪除數(shù)據(jù)的文件名:n);scanf(%s,文件名);fp1=fopen(文件名,“rb”

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論