程序上機(jī)作業(yè)_第1頁
程序上機(jī)作業(yè)_第2頁
程序上機(jī)作業(yè)_第3頁
程序上機(jī)作業(yè)_第4頁
程序上機(jī)作業(yè)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、程序上機(jī)作業(yè)程序設(shè)計(jì)報(bào)告( 2012 / 2013 學(xué)年 第 一 學(xué)期)題 目:家庭支出管理系統(tǒng) 專 業(yè) 自動化 學(xué) 生 姓 名 闞世俊 班 級 學(xué) 號 B 指 導(dǎo) 教 師 張勤 指 導(dǎo) 單 位 計(jì)算機(jī)軟件教學(xué)中心 日 期 2012年12月20日 評 分 細(xì) 則評分項(xiàng)優(yōu)秀良好中等差遵守機(jī)房規(guī)章制度上機(jī)時(shí)的表現(xiàn)學(xué)習(xí)態(tài)度程序準(zhǔn)備情況程序設(shè)計(jì)能力團(tuán)隊(duì)合作精神課題功能實(shí)現(xiàn)情況算法設(shè)計(jì)合理性用戶界面設(shè)計(jì)報(bào)告書寫認(rèn)真程度內(nèi)容詳實(shí)程度文字表達(dá)熟練程度回答問題準(zhǔn)確度簡 短 評 語教師簽名: 年 月 日評分等級備注評分等級有五種:優(yōu)秀、良好、中等、及格、不及格家庭支出管理系統(tǒng)一、 課題內(nèi)容和要求1、該系統(tǒng)要求對

2、一個家庭某月的支出情況進(jìn)行統(tǒng)計(jì)和分析。通過此課題,熟練掌握數(shù)組、指針的各種操作,以及一些算法思想的應(yīng)用。2、功能要求:(1)支出信息包括:支出類型(主要可以分為飲食,服飾裝扮,禮金,教育培訓(xùn),電器,健身,通訊,子女培養(yǎng),旅游,文化娛樂,醫(yī)療,交通,聚會,居住等小項(xiàng)),金額,消費(fèi)地點(diǎn),消費(fèi)時(shí)間等。(2)需要實(shí)現(xiàn)的功能1) 用戶根據(jù)口令進(jìn)入系統(tǒng)2) 輸入某一月份,完成該月份的支出管理3) 輸入并統(tǒng)計(jì)該月的支出情況4) 顯示該月支出信息表,內(nèi)容應(yīng)包括日期,金額等5) 按支出類型進(jìn)行分類統(tǒng)計(jì)和排序6) 進(jìn)行本月消費(fèi)分析,即分析每項(xiàng)支出所占總支出的百分比,并顯示分析結(jié)果7) 顯示按支出類型排序后的支出信

3、息8) 將排序后的內(nèi)容存為文件。(3)界面友好,輸入信息符合邏輯如存款金額不為負(fù)數(shù)、不可能有非數(shù)字的字符等。2、 需求分析這個程序利用輸入,輸出,排序和百分比等功能對家庭的各項(xiàng)支出管理進(jìn)行操作,以次來方便操作管理。1, 菜單函數(shù),此函數(shù)是為了讓用戶根據(jù)菜單選擇功能并根據(jù)提示來進(jìn)行操作。2,密碼函數(shù),因?yàn)榧彝ブС龉芾硐到y(tǒng)涉及到私人財(cái)務(wù),所以需要利用密碼函數(shù)對程序進(jìn)行保密。因此只有在輸入正確的口令后才能進(jìn)入該系統(tǒng)。3, 輸入函數(shù),為了實(shí)現(xiàn)將各個指出項(xiàng)目的烈性,支出的金額以及消費(fèi)的時(shí)間,地點(diǎn)等存入需要的文件里,所以必須先要存在存儲器里。4, 求和函數(shù),實(shí)現(xiàn)簡單的求和功能,就是利用求和功能求出每月的各

4、項(xiàng)金額的總和。一次來統(tǒng)計(jì)出該月的支出情況。5, 輸出函數(shù),即通過行列表來直觀對應(yīng)所輸入的項(xiàng)目的金額,消費(fèi)時(shí)間及地點(diǎn)。6,分析函數(shù),對本月的消費(fèi)進(jìn)行分析,分析出每項(xiàng)支出所占總支出的百分比,通過他們各自的項(xiàng)目金額所占的百分比來直觀顯示那個指出比較重要。7, 類別排序函數(shù),對本月相同的類別進(jìn)行合并統(tǒng)計(jì),并排序。8, 保存函數(shù),就是將輸入的信息保存下來并存入文檔或者其他形式的文件。3、 概要設(shè)計(jì)按消費(fèi)價(jià)格排序支出情況計(jì)算消費(fèi)總和主函數(shù)退出系統(tǒng)輸入消費(fèi)金額消費(fèi)分析按消費(fèi)類別排序保存數(shù)據(jù)及結(jié)果輸入月份 首先,編寫一個現(xiàn)實(shí)的菜單函數(shù)以方便用戶將支出中的內(nèi)容(錢,時(shí)間,地點(diǎn)等)定義成結(jié)構(gòu)體。然后根據(jù)需求可以完

5、成需求的函數(shù),輸入信息的Put函數(shù),計(jì)算總支出的Money函數(shù),顯示所有的Display函數(shù)。最后,編寫主程序,這一步可以調(diào)用功能函數(shù),并利用相應(yīng)的函數(shù)將其與菜單聯(lián)系起來,方便用戶使用。1, 定義機(jī)構(gòu)體,聲明各成員的變量含義。2, 定義密碼函數(shù),通過對指針的運(yùn)用,利用getch()函數(shù)來獲得輸入的密碼值,再用來與定義的密碼值作比較利用if else語句,來顯示輸入密碼的正確性。3, 顯示主菜單,采用switch()和case語句,根據(jù)用戶的選擇則進(jìn)入相應(yīng)的模塊。4, Menu菜單包括輸入函數(shù)inputitems(),求和函數(shù)Summoney(),輸出函數(shù)showitems (),類別排序函數(shù)p

6、aixu(),消費(fèi)價(jià)格排序函數(shù)shunxu(),分析函數(shù)analyseitems (),保存函數(shù)save (),并在最后添加一個退出選項(xiàng)exit。5, 設(shè)置密碼函數(shù)void password (),我是采用逐字比較法,用for循環(huán)一次進(jìn)行從前到后的對比,假如完全正確用break跳出循環(huán)進(jìn)入系統(tǒng),如果錯誤就要重新輸入。6, 輸入函數(shù)int inoutitems(expense sxp,int n),在第1步中定義了exp,其中的type,place,money,time都是成員變量,逐項(xiàng)進(jìn)行輸入。輸入完畢的話則回到了第3步重新開始。7, 求和函數(shù)Summoney(expense sxp,int

7、n),利用循環(huán)和自加來求一個總和。相加的只是各項(xiàng)成員的成員變量money。8, 輸出函數(shù)Display(expense sxp,int n),仍然用循環(huán)采用逐項(xiàng)輸出。9, 分析函數(shù)analyseitems(expense sxp,int n),需要統(tǒng)計(jì)百分比,定義一個求和變量,計(jì)算所有輸出的總和s,再用每類支出除以s再乘以100%,用來求取百分比。10消費(fèi)類別排序函數(shù)paixu(expense sxp,int n),用字符串比較法找出相同的類別,把同類別的值加到第一個相同的值上,后面的賦值為0,輸出時(shí)判斷不為0的值才輸出。11保存函數(shù)save(expense sxp,int n),將數(shù)據(jù)保存到

8、學(xué)號命名的文檔里。4、 源程序代碼#include<>#include<>#include<>#include<>#include<>#include<>#include<>typedef struct 入消費(fèi)信息|n"); printf("tt|2.計(jì)算消費(fèi)總和|n");printf("tt|3.顯示消費(fèi)信息|n");printf("tt|4.對同種類型消費(fèi)進(jìn)行排序并顯示|n");printf("tt|5.消費(fèi)情況分析|n&quo

9、t;);printf("tt|6.添加消費(fèi)信息|n");printf("tt|7.保存數(shù)據(jù)|n");printf("tt|0.退出系統(tǒng)|n");printf("tt*n");printf("tt*n");printf("ttt請對應(yīng)選擇所需選項(xiàng)(0-7)");c=getchar();while(c<'0'|c>'7');return(c-'0'); void password()碼修改*n"); print

10、f("tt*tt.登陸*n"); printf("tt*n"); printf("tt*n"); printf("ttt請輸入您所要的選項(xiàng)(1,2):"); scanf("%d",&m); getchar(); switch(m) case 1:xt","r"); if(!fp1) printf("file cannot be opened"); exit(1); for(i=0;!feof(fp1);i+) ai=fgetc(fp1);

11、 fclose(fp1); printf("ttt請輸入原密碼:"); for(j=0;j<7;j+) scanf("%c",b+j); if (bj>='0'&&bj<='9'|bj>='a'&&bj<='z'|bj>='A'&&bj<='Z') putchar('*'); if(a0=b0&&a1=b1&&a2=b2&a

12、mp;&a3=b3&&a4=b4&&a5=b5) do printf("ttt請?jiān)O(shè)置您的新密碼:"); for(j=0;j<7;j+) scanf("%c",c+j); if (cj>='0'&&cj<='9'|cj>='a'&&cj<='z'|cj>='A'&&cj<='Z') putchar('*'); prin

13、tf("ttt請確認(rèn)您的新密碼:"); for(j=0;j<7;j+) scanf("%c",d+j); if (dj>='0'&&dj<='9'|dj>='a'&&dj<='z'|dj>='A'&&dj<='Z') putchar('*'); while(!(c0=d0&&c1=d1&&c2=d2&&c3=

14、d4&&c4=d4&&c5=d5); fp2=fopen("D:密碼.txt","w+"); if(!fp2) printf("the file cannot be opened"); exit(1); i=0; while(i<6) fprintf(fp2,"%c",ci); i+; fclose(fp2); printf("ttt密碼修改成功!n"); else printf("ttt密碼錯誤n"); exit(0); case 2:

15、xt","r"); if(!fp1) printf("the file cannot be opened!"); exit(1); for (i=0;!feof(fp1);i+) ei=fgetc(fp1); fclose(fp1); do printf("ttt請輸入六位數(shù)密碼:"); for(j=0;j<7;j+) scanf("%c",f+j); if (fj>='0'&&fj<='9'|fj>='a'&

16、&fj<='z'|fj>='A'&&fj<='Z') putchar('*'); if(!(e0=f0&&e1=f1&&e2=f2&&e3=f3&&e4=f4&&e5=f5) printf("n密碼錯誤!請重新輸入:n"); n+; if(n>3) printf("errorn"); exit(0); while(!(e0=f0&&e1=f1&

17、;&e2=f2&&e3=f3&&e4=f4&&e5=f5); printf("nttt歡迎使用!n"); int Inputitems(family sum,int n)ype); printf("ttt支出(大于0):"); scanf("ttt%f",&sumn+i.Getsum); printf("ttt地點(diǎn):"); scanf("ttt%s",sumn+i.place); printf("ttt時(shí)間(0-31):&

18、quot;); scanf("ttt%d",&sumn+i.time); if(sumn+i.time<1|sumn+i.time>31) return false; gets(x); printf("ttt需要再次輸入嗎(y/n)"); scanf("ttt%c",&sign); i+; return(n+i); void Getsum(family sum,int n)etsum; printf("ttt%fn",getsum); void Showitems(family sum,

19、int n)ype,sumi-1.Getsum,sumi-1.place,sumi-1.time);if(i>1&&i%10=0)printf("ttt-n");printf("ttt");printf("ttt-n");printf("ttt");system("pause");void paixu(family sum,int n)xt","a+"); if(fp=NULL) printf("ttt the file cannot

20、 be opened!n"); exit(1); for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if(strcmp(sumi.type,sumj.type)=1) temp=sumj; sumj=sumi; sumi=temp; else if(strcmp(sumj.type,sumi.type)=0) if(sumi.Getsum,sumj.Getsum) temp=sumj; sumj=sumi; sumi=temp; fprintf(fp,"排序后:n"); for(i=0;i<n;i+) fprintf(fp,

21、"%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.place); fclose(fp); printf("ttt保存成功!n");void Analyseitems(family sum,int n)paixu(sum,n);float total=0,a=0,sum1=0;int i,j;for(i=0;i<n;i+)total+=sumi.Getsum;for(i=0;i<n;i+)sum1=sumi.Getsum;for(j=i+1;j<n;j+)if(s

22、trcmp(sumi.type,sumj.type)=0)sum1+=sumj.Getsum;i+;a=(sum1/total)*100;printf("ttt%-8s%-10f%n",sumi.type,a);void save(family sum,int n, int m)xt","a+");if(fp=NULL)printf("tttthe file cannot be opened!n");exit(1);fseek(fp,-1,SEEK_END);ype,sumi.Getsum,sumi.place,sumi.t

23、ime);fclose(fp);printf("ttt保存成功!n");int main()password();getch();int n=0,m;char c;doprintf("ttt請輸入您所要管理的月份(1-12):");scanf("%d",&m);while(m<1|m>12);for(;)switch(menu_select()case 1:printf("ttt請輸入相應(yīng)消費(fèi)情況n");n=Inputitems(fam,n);printf("ttt想保存數(shù)據(jù)請輸入y/

24、Y!n");getchar();scanf("%c",&c);if(c='y'|c='Y')save(fam,n,m);printf("ttt");system("pause");break;case 2:printf("ttt消費(fèi)總和n");Getsum(fam,n);printf("ttt");system("pause");break;case 3: printf("ttt消費(fèi)情況n"); Showi

25、tems(fam,n); break; case 4:printf("ttt消費(fèi)排序n");paixu(fam,n);Showitems(fam,n);printf("ttt");system("pause");break;case 5:printf("ttt消費(fèi)金額分析n");Analyseitems(fam,n);printf("ttt 想保存數(shù)據(jù)請輸入 y/Y!n");getchar();scanf("%c",&c);if(c='y'|c=

26、9;Y')save(fam,n,m);printf("ttt");system("pause");break;case 6: printf("ttt添加消費(fèi)情況n"); n=Inputitems(fam,n);getchar();scanf("%c",&c);if(c='y'|c='Y')save(fam,n,m);break;case 7: printf("ttt 保存消費(fèi)數(shù)據(jù)n");save(fam,n,m);printf("ttt&

27、quot;);system("pause");case 0:printf("ttt謝謝使用!n");system("pause");exit(0);return 0;五、測試數(shù)據(jù)及其結(jié)果分析1按提示輸入密碼或是修改密碼,當(dāng)密碼錯誤時(shí)重新輸入。請輸入六位數(shù)密碼:*(172134)密碼錯誤!請重新輸入:*(983456)密碼錯誤!請重新輸入:*(578945)密碼錯誤!請重新輸入:*(942567)密碼錯誤!請重新輸入:*(776344)密碼錯誤!請重新輸入:errorPress any key to continue請輸入六位數(shù)密碼:*

28、(542346)密碼錯誤!請重新輸入:*(123456)歡迎使用!2.根據(jù)菜單提示選擇1,輸入消費(fèi)信息。3.根據(jù)菜單提示選擇2,計(jì)算消費(fèi)總和。4 根據(jù)菜單提示選擇3,顯示消費(fèi)信息。5根據(jù)提示選擇4,對消費(fèi)進(jìn)行排序并顯示。6.根據(jù)菜單提示選擇5,進(jìn)行消費(fèi)分析,計(jì)算出各項(xiàng)支出占總支出的百分比。7.根據(jù)菜單提示選擇6,可以進(jìn)行添加消費(fèi)信息。8.根據(jù)菜單提示選擇7,可以將信息進(jìn)行保存,保存結(jié)果在D盤中的的文件中。9 根據(jù)菜單提示選擇0,退出系統(tǒng)。6、 調(diào)試過程中的問題1.一開始是函數(shù)調(diào)用就有問題,包括函數(shù)定義有錯,還有就是定義的時(shí)候有重復(fù)了,然后不得不重新弄了。2再有就是消費(fèi)類別排序中的價(jià)格排序有問題,就是支出順序變了,但類型順序沒變,導(dǎo)致類別的支出有時(shí)會改變,后來想到在調(diào)換支出時(shí)把類別的字符串也調(diào)換一下就解決了。這其中出現(xiàn)了多達(dá)89個錯誤,然后細(xì)心的根據(jù)運(yùn)行的錯誤提示,一行一行的進(jìn)行修改,直到?jīng)]有了errors,然后還有些不懂得錯

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論