个人收支管理组织系统.docx

上传人:b****1 文档编号:28592943 上传时间:2023-07-19 格式:DOCX 页数:25 大小:286.84KB
下载 相关 举报
个人收支管理组织系统.docx_第1页
第1页 / 共25页
个人收支管理组织系统.docx_第2页
第2页 / 共25页
个人收支管理组织系统.docx_第3页
第3页 / 共25页
个人收支管理组织系统.docx_第4页
第4页 / 共25页
个人收支管理组织系统.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

个人收支管理组织系统.docx

《个人收支管理组织系统.docx》由会员分享,可在线阅读,更多相关《个人收支管理组织系统.docx(25页珍藏版)》请在冰豆网上搜索。

个人收支管理组织系统.docx

个人收支管理组织系统

计算机科学与信息工程学院

课程设计报告

2011-2012第二学期

课程设计名称c语言课程设计设计题目个人收支管理系统

学生姓名

学号

专业班级

指导教师

2012年7月4日

个人收支管理

一、设计目的

一些比较发达国家人的生活中对理财有着很严格的计划,因此国外的理财系统总体来说比较普遍,做的也比较完善.国内的理财系统主要偏重于办公财务软件,而个人理财和家庭理财方面的比较少,因此需要开发相关的系统软件,从而达到引导理性消费,合理安排收支。

进行账目的统计,如果是手动统计的话,首先,如果每天统计的话,用于统计的账本和记录会越来越多,不利于保管,容易造成丢失;其次,随着纪录的增多,如果要查找以前的记录,会变的越来越困难。

因此,需要一个功能比较完善的记账系统来代替传统的手工统计。

个人收支管理系统可以方便地记录您家庭的每日收支情况。

二、功能描述

如图1所示,本系统主要有8个板块构成:

1.个人收支管理系统显示界面。

个人收支管理系统必须在系统运行后第一时间显示出来。

此界面显示了一个收入模式、一个支出模式、一个明细表、一个查询与统计、一个记录数据写入文件、一个读取文件的功能。

2.收入模式。

用户可以在收入模式中输入以下数据:

顺序号、日期、摘要、金额、余额、币种,收入或支出标志。

默认币种为人民币,也可以是美圆、欧元、日币或英镑。

3.支出模式。

用户可以在支出模式中输入以下数据:

顺序号、日期、摘要、金额、余额、币种,收入或支出标志。

默认币种为人民币,也可以是美圆、欧元、日币或英镑。

4.明细表。

用户可以根据需要输入起止时间来查询一段时间内的

收入支出情况,系统会通过列表的形式把内容展示出来。

5.查询与统计。

在此功能模式下,用户可以对一段时间的收入支出情况进行查询,可以得到总收入、总支出和余额。

此数据是按月或按年份统计计算的。

6.此板块属于拓展功能1---写入文件,记录数据。

在此模块下,用户可以根据需要爆当前输入的数据保存下来,以备后用。

7.此板块属于拓展功能2—读取文件,读取数据。

在此模块下,用户可以读取以前所记录的数据并进行查看。

8.退出系统。

个人收支管理系统

 

图1简易系统功能模块图

二、总体设计

1•系统执行主程序

本系统执行主程序如图2所示。

首先,调用main函数,是系统进入主显示面。

然后由用户选择所需要的功能,并进入相应功能程序,按照用户需求进行相应操作后回到主显示界面,等待用户继续按键选择功能进行操作。

2•系统显示界面

此系统界面主要由可供选择的功能组成:

收入、支出、明细表、

查询与统计、写入文件、读取文件。

用户在进行选择后可通过switch

语句进行跳转进入相应分程序。

日期

摘要

输入文件名读取文件

写入文件

查询与统计

退出系统

金额

列表

总收入

总支出

余额

币种

 

 

图2系统执行主流程图

 

四、数据结构设计

data结构体

structdata{

intn;〃顺序

 

inty,m,d;

 

charzy[100];//摘要

floatmoney,rmoney;//金额,余额

charbiz[5];//币种

intx;//收支类型(标记,明细表或查询统计用)

}p[100];本程序中主要数据都需要显示顺序、日期、摘要、金额、余额、币种和收支类型,所以需要定义data结构体。

Intn:

表示顺序。

Inty,m,d:

用来定义日期。

Charzy:

摘要。

Floatmoney、rmoney:

金额、余额。

Charbiz[5]:

币种。

Intx:

定义收支类型。

五、函数功能描述

1.check():

函数原型:

intcheck()

check函数主要用于检查输入日期的合法性、日期的先后顺序是否正确,并查找符合日期要求的数据。

2.fflush()

函数原型:

fflush(stdin)主要用于清除缓存,方便用户接下来的操作。

3.gets()函数原型:

gets()函数主要用于把用户输入的数据保存到指定数据中。

4.strlen()函数原型:

size_tstrlen(constchar*s)该函数是用来计算字符串的长度,用于用户接下来的操作

5.strcpy()

函数原型:

char*strcpy(char*s1,constchar*s2)该函数用于把字符串s2复制给字符串si。

6.file*()函数原型:

file*fp1;

通过文件指针便于对流的访问。

7.Fopen()

函数原型:

fopen(FILE_NAME,”r或w”)

该函数用于打开文件,进行读取或写入。

8.Fclose()

函数原型:

fclose()该函数主要用来关闭用户打开的文件。

9.Main()函数原型:

voidmain()

Main()为主函数。

四、程序实现

1.源码分析

(1)程序预处理

#include

#include

//标准输入输出函数库

//标准函数库

//字符串操作函数库

#include

(2)主函数main()

Main()函数主要实现了对整个程序的调用,以及相关功能模块的调用。

它主要的工作是初始化程序。

voidmain()

{

intn;//确定用户需要进入的功能模块

do

printf("++++++++++++++++++\n");

printf("

个人收支管理

\n");//用户可以进行的功能操作选项

printf("1.

收入

\n");

printf("2.

支出

\n");

printf("3.

明细表

\n");

printf("4.

查询与统计

\n");

printf("5.

写入文件

\n");

printf("6.

读取文件

\n");

printf("0.

退出系统

\n");

printf("++++++++++++++++++\n");

printf("请输入你要进行操作:

");

scanf("%d",&n);//捕获用户要进行的操作

switch(n){

 

case1:

income(p);

system("cls");break;//

进入收入模块,结束后返回

case2:

expend(p);

system("cls");break;//

进入指出模块,结束后返回

 

 

case5:

write(p);

system("cls");break;//

进入写入文件,结束后返回

 

 

case6:

read(p);

system("cls");break;//进入读取文件,结束后返回

}

}while(n!

=0);//退出系统

}

2.程序运行结果显示

(1)初始化界面

 

(2)进入收入模式

■■-*C;VPooumi™!

r-aniil5vttincErlAdain±EFtratiar\^ilj\2!

!

1-"'£.it'2\^

+-

+1.T

寸H1-S!

-♦■丁

*WK—十+£、、出刃询人呼:

++辅F■亠■■■■!

・*1RL.E11rfi.tX

-■*Cz\bacmaitsutiASettijigs1|1AiaBi«.dalrator|kViJjEeKiI2A

+

¥s-

+SV

17=

+L<

#■

t-Lx

+Hv

*上

廖词卢!

<«■na■■-«■L

才a->l小化州无HE永1-Er号;5.Z:

!

%上pV-・I#

HI

^t^sstl需^M:

t*l书,-x农氧:

I:

■iKUU-

Nh—■n:

ab■

g星nRl一Il

结束时按Enter返回主界面

(3)进入支出模式

EE:

XDodiBEntsandSetti/nAdnimstrfttorX-feUfl课稈i£■计23吓人枚芟骨il

2C0S-5-5

ID

*

"里二宀7;

・r當%社"人入A人A人

”收訂-HLT.15JF."孙霍轴.药

*」2.囂乩S.J9.”请以思g歯

X-11

Fd-

・t:

e1巳E>a卡二果=RI1"鶴封默结一JI1-廿豎—CSCr

聖晰要亦科in程-K.V編”喘口皓馬En

 

结束时按Enter返回主界面

(4)明细表

1:

*Ce\DocuAeEitsandSettingE'iAiiiinistraror\_SiSX^程设计2%十人收支管理」ese

In

I-0理^iccfc.管+*行日斜7-5-fl姗十r“井意冷期S1阳A-仆收百243QH-忘\麦H文咬莎■*+宙嚅-食_卿个X山细询、需+*■X时人入号I我畐出晏退++更输玛意」B.g.tuifc.札”華蠕圭r>呃丄NHa

2000-丄一丄

金顿余或帀种标恵

23S235RHB1

^7?

?

d&llarB

RR

!

请我EnMi'W务

结束时按Enter返回主界面

(5)查询与统计

■"*C:

MlocTrafint3mdKettiiirsMIrLwimstratoirXfiEl设计2Y4H人Iti7它規■忙富上

**卄作:

遅:

噪—¥:

%

S计++进pt-A衷=_丈左节VI你古書片夬出卵奧囁-ft入常前f协蕃夺W汶迥1|驸找至t+——札轧06."趴

按年查询

 

-'C:

\DocnrafflitamdKeftjnrs\ftrlwimstfatorX^Bl\S.S设计214■人B(芟官理・好上

 

濟入聲鱼询的年飯2BBS

希萄*-679?

话欣師"应沖:

-

按月查询

 

(6)写入文件

(7)读取文件

在这我们主要显示退出系统后读取文件操作显示:

""C:

ocuEsnirsaiulSc~t±Ea±oir\^PQ-|

 

<■'"C:

:

\Do>cii»eii±aand.Settin^s\iLdlamiatratariSlT-ijr计卜人枚支总理-丄.亡

 

Ir.I..-F秤7:

-己

 

 

□2S

之后用户可以根据需要进行相应操作查看数据。

(8)

退出系统

訥kDocuBentsandSe-ttinfsVAdtinistrat«.

六、课程设计总结

经过2个星期的努力,终于完成了个人收支管理系统的设计。

本来,在开始上课之前,我们都以为这是很简单的东西,毕竟我们都学习了这么时间,并且也在课上进行了一次次的实战训练。

可是,没想到,别看平时比较容易,在这一刻,要把课上学到的知识融会贯通,要想设计出自己心满意足的东西是多么的困难。

不过,还好,总算完成了,也感受到了成功的喜悦。

努力奋斗,并不是没有回报的当然,在这2个星期的过程中,我们也发现了许多问题并克服了它们。

这些问题或许是上课时没注意到的细节问题,或是自己之前一直没能搞懂的知识点,但不论如何,它都让我们学会了好多新的东西,有了新的感悟。

在此,感谢老师们的辛勤工作,无私贡献,感谢老师们的指导。

七、源代码

#include

#include

#include

structdata{

intn;

inty,m,d;

charzy[100];//摘要

floatmoney,rmoney;//金额,余额

charbiz[5];//币种

}p[100];

intk=1;

intcheck1(inty,intm,intd)//检测日期合法性

{

inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};

if(y>0){

if(m>0&&m<13){

if(d>0&&d<=a[m-1])

return1;

if((((y%4==0)&&(y%100!

=0))||(y%400==0))&&(m==2)&&(d==29))

return1;

}

}

return0;

}

intcheck2(inty1,intm1,intd1,inty2,intm2,intd2)//检测日期的先后顺序是否正确

if(y2>y1)return1;

if(y2==y1&&m2==m1&&d2>d1)return1;

if(y2==y1&&m2==m1&&d2==d1)return1;else

return0;

}

查找符合要求的日期

intcheck3(inty1,intm1,intd1,inty2,intm2,intd2)//

{

inti,k=0;

for(i=0;i<100;i++)

{

if((check2(y1,m1,d1,p[i].y,p[i].m,p[i].d))

&&(check2(p[i].y,p[i].m,p[i].d,y2,m2,d2)))

k=k+1;

}

if(k=1)

return1;

elsereturn0;

intincome(structdatap[])

{

inti;charq[100];

for(i=k-1;;i++){

do{

printf("请输入日期(例:

2012-7-1):

");scanf("%d-%d-%d",&p[i].y,&p[i].m,&p[i].d);

}

while(!

check1(p[i].y,p[i].m,p[i].d));

fflush(stdin);

printf("请输入摘要(默认:

无):

");

gets(p[i].zy);

if(strlen(p[i].zy)==0)strcpy(p[i].zy,"无");

fflush(stdin);

printf("请输入金额:

");

scanf("%f",&p[i].money);

fflush(stdin);

printf("请输入币种(默认RMB):

");

ou」no」

Mb)so6e_pls)lls€-s黑」9岳<緯堰==lu_」d

:

„L+M2專u.md匚①UOE-二d+A①UOE」」V二duA①UOE」.-二d

匚x.md

FCQIAIgNq三dMdobsou"z_q.三d)u24=SM

JNq.曰d)SO6

 

A(pmdumd-A.md)pp£o¥=llM

MP.曰doau.曰doa-A.曰d03-=p%1p%1p%==ueos

(L.卜&LOCXI.-s隸口<緯堰=£u_」d

)op)(+土=上.!

|)」O4-00匸b」elp~u一田帜v(=derop10n」ls)puedxe-u一

 

fflush(stdin);

gets(p[i].zy);

if(strlen(p[i].zy)==0)strcpy(p[i].zy,"无");

fflush(stdin);

printf("请输入金额:

");

scanf("%f",&p[i].money);

fflush(stdin);

printf("请输入币种(默认RMB):

");

gets(p[i].biz);

if(strlen(p[i].biz)==0)strcpy(p[i].biz,"RMB");

p[i].x=0;

p[i].rmoney=p[i-1].rmoney+p[i].money;

p[i].n=k;

k=k+1;

printf("请输入Enter继续:

");

fflush(stdin);

gets(q);

return0;

intlist(structdatap[])

{

charq[100];

inti,y1,m1,d1,y2,m2,d2;

do{printf("输入时请注意日期的先后顺序\n");

do{

printf("请输入起始时间(例2000-1-1):

");

scanf("%d-%d-%d",&y1,&m1,&d1);

}

while(!

check1(y1,m1,d1));

do{

printf("请输入截至时间(例2000-1-1):

");

scanf("%d-%d-%d",&y2,&m2,&d2);

}

while(!

check1(y2,m2,d2));

}

while(!

check2(y1,m1,d1,y2,m2,d2));

if(check3(y1,m1,d1,y2,m2,d2)==0)

}

else{

printf(”顺序号\t日期\t\t摘要\t金额\t余额\t币种\t标志\n”);for(i=0;i

printf("%d\t%d-%d-%d\t%s\t%g\t%g\t%s\t%d\n",p[i].n,p[i].y,p[i].m,p[i].d,p[i].zy,p[i].money,p[i].rmoney,p[i].biz,p[i].x);

printf("注意:

标志1为收入,标志0为支出!

");

}

printf("请按Enter继续!

");

fflush(stdin);

gets(q);

return0;

//查询与统计

}

intdestat(structdatap[])

inty,m,z,i;charq[100];

printf("请选择查询方式:

\n");

printf("1.查询年份:

\n");

printf("2.查询月份:

\n");scanf("%d",&z);

if(z==1)

{

printf("请输入要查询的年份:

");scanf("%d",&y);

for(i=0;i<100;i++)

{

if((y==p[i].y)&&(p[i].x==1))sum1=sum1+p[i].rmoney;

if((y==p[i].y)&&(p[i].x==0))sum2=sum2+p[i].rmoney;

}

}

if(z==2)

{

printf("请输入年份:

");

scanf("%d",&y);

do{

scanf("%d",&m);

}

while(m<1||m>12);

for(i=0;i<100;i++)

{

if((p[i].y==y)&&(p[i].x==1)&&(p[i].m==m))

sum1=sum1+p[i].rmoney;

if((p[i].y==y)&&(p[i].x==0)&&(p[i].m==m))sum2=sum2+p[i].rmoney;

}

}

rmoney=sum1-sum2;

printf("总收入:

%g\n",sum1);

printf("总支出:

%g\n",sum2);

printf("余额:

%g\n",rmoney);

printf(”请按Enter继续:

”);fflush(stdin);

gets(q);

return0;

voidwrite(structdatap[])//

{

inti;

FILE*fp;

charq[20],t[100];if(k-1==0)printf("请先输入数据!

!

");else{printf("请输入文件名:

");fflush(stdin);gets(q);

if(strlen(q)==0){

strcpy(q,"record.dat");

printf("已保存为默认文件

fp=fopen(q,"w");

for(i=0;i

{

写入文件

data.dat\n");}

fwrite(&p[i],sizeof(structdata),1,fp);

}

printf("\n请按Enter键继续:

");fflush(stdin);

gets(t);

voidread(structdatap[])//读取文件

{

FILE*fp;

charq[20],t[100];

k=0;

printf("输入文件名:

");

fflush(stdin);

gets(q);

if(strlen(q)==0){

strcpy(q,"record.dat");

printf("已打开默认文件data.dat\n");}

if((fp=fopen(q,"rb"))==NULL)

printf("文件不存在!

\n");

else

{

fp=fopen(q,"r");

while(!

feof(fp))

{

fread(&p[k++],sizeof(structdata),1,fp);

}

fclose(fp);

k=k-1;

printf("文件已读取!

\n");

}

printf("\n请按Enter键继续:

");

fflush(stdin);

gets(t);

voidmain()

{

intn;

do

{

printf("++++++++++++++++++\n");

printf("

个人收支管理

\n");

printf("1.

收入

\n");

printf("2.

支出

\n");

printf("3.

明细表

\n");

printf("4.

查询与统计

\n");

printf("5.

写入文件

\n");

printf("6.

读取文件

\n");

printf("0.

退出系统

\n");

printf("++++++++++++++++++\n");

printf("请输入你要进行操作:

");

scanf("%d",&n);

switch(n){

 

case1:

income(p);system("cls");break;

case3:

list(p);system("cls");break;

case4:

destat(p);system("cls");break;

case5:

write(p);system("cls");break;

case6:

read(p);system("cls");break;

}

}while(n!

=0);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1