个人收支管理系统文档格式.docx

上传人:b****6 文档编号:17407104 上传时间:2022-12-01 格式:DOCX 页数:26 大小:231.97KB
下载 相关 举报
个人收支管理系统文档格式.docx_第1页
第1页 / 共26页
个人收支管理系统文档格式.docx_第2页
第2页 / 共26页
个人收支管理系统文档格式.docx_第3页
第3页 / 共26页
个人收支管理系统文档格式.docx_第4页
第4页 / 共26页
个人收支管理系统文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

个人收支管理系统文档格式.docx

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

个人收支管理系统文档格式.docx

三、总体设计

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复制给字符串s1。

6.file*()

file*fp1;

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

7.Fopen()

fopen(FILE_NAME, ”r或w”)

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

8.Fclose()

fclose()

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

9.Main()

voidmain()

Main()为主函数。

四、程序实现

1.源码分析

(1)程序预处理

#include<

stdio.h>

 //标准输入输出函数库

stdlib.h>

//标准函数库

string.h>

//字符串操作函数库

intincome()  //收入模式

intexpend()   //支出模式

intlist()   //明细表

intdestat() //查询与统计

voidwrite()   //写入文件

voidread()   //读取文件

(2)主函数main()

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

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

{

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

do

{

printf("

++++++++++++++++++\n"

);

个人收支管理\n"

//用户可以进行的功能操作选项

1.收入\n"

2.支出\n"

3.明细表\n"

4.查询与统计\n"

5.写入文件\n"

6.读取文件\n"

0.退出系统\n"

请输入你要进行操作:

"

scanf("

%d"

&

n);

//捕获用户要进行的操作

switch(n){

case1:

income(p);

system("

cls"

break;

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

  case2:

expend(p);

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

  

  case3:

list(p);

//进入明细表,结束后返回

    

    case4:

destat(p);

//进入查询与统计,结束后返回

  case5:

write(p);

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

  case6:

read(p);

//进入读取文件,结束后返回

}

}while(n!

=0);

//退出系统

}

2.程序运行结果显示

(1)初始化界面

(2)进入收入模式

结束时按Enter返回主界面

(3)进入支出模式

(4)明细表

(5)查询与统计

按年查询

按月查询

(6)写入文件

(7)读取文件

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

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

(8)退出系统

六、课程设计总结

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

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

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

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

努力奋斗,并不是没有回报的!

当然,在这2个星期的过程中,我们也发现了许多问题并克服了它们。

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

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

七、源代码

structdata{

}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>

d<

=a[m-1])

return1;

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

(y%100!

=0))||(y%400==0))&

(m==2)&

(d==29))

}

}

return0;

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

if(y2>

y1)return1;

if(y2==y1&

m2>

m1)return1;

m2==m1&

d2>

d1)return1;

d2==d1)return1;

else

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;

intincome(structdatap[])

inti;

charq[100];

for(i=k-1;

;

i++){

do{

请输入日期(例:

2012-7-1):

%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);

请输入摘要(默认:

无):

gets(p[i].zy);

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

无"

请输入金额:

%f"

p[i].money);

printf("

请输入币种(默认RMB):

gets(p[i].biz);

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

RMB"

p[i].x=1;

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

p[i].n=k;

请输入Enter继续:

gets(q);

intexpend(structdatap[])//支出

for(i=k-1;

请输入日期(例:

p[i].x=0;

intlist(structdatap[])

charq[100];

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

do{printf("

输入时请注意日期的先后顺序!

\n"

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

y1,&

m1,&

d1);

check1(y1,m1,d1));

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

y2,&

m2,&

d2);

check1(y2,m2,d2));

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

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

{printf("

此时间段内没有收支记录!

else{

顺序号\t日期\t\t摘要\t金额\t余额\t币种\t标志\n"

k;

%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);

注意:

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

请按Enter继续!

intdestat(structdatap[])//查询与统计

inty,m,z,i;

charq[100];

floatsum1=0,sum2=0,rmoney;

printf("

请选择查询方式:

1.查询年份:

2.查询月份:

z);

if(z==1)

{

请输入要查询的年份:

y);

if((y==p[i].y)&

(p[i].x==1))

sum1=sum1+p[i].rmoney;

(p[i].x==0))

sum2=sum2+p[i].rmoney;

if(z==2)

请输入年份:

scanf("

do{

请输入月份:

m);

while(m<

1||m>

12);

if((p[i].y==y)&

(p[i].x==1)&

(p[i].m==m))

(p[i].x==0)&

rmoney=sum1-sum2;

总收入:

%g\n"

sum1);

总支出:

sum2);

余额:

rmoney);

请按Enter继续:

"

voidwrite(structdatap[])//写入文件

inti;

FILE*fp;

charq[20],t[100];

if(k-1==0)

printf("

请先输入数据!

!

else{

请输入文件名:

fflush(stdin);

gets(q);

if(strlen(q)==0){

strcpy(q,"

record.dat"

已保存为默认文件data.dat\n"

);

fp=fopen(q,"

w"

for(i=0;

fwrite(&

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

记录已存储!

\n请按Enter键继续:

gets(t);

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

FILE*fp;

charq[20],t[100];

k=0;

输入文件名:

gets(q);

if(strlen(q)==0){

strcpy(q,"

已打开默认文件data.dat\n"

if((fp=fopen(q,"

rb"

))==NULL)

文件不存在!

fp=fopen(q,"

r"

feof(fp))

fread(&

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

fclose(fp);

k=k-1;

文件已读取!

case1:

case2:

case3:

case4:

case5:

case6:

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

当前位置:首页 > 工作范文 > 制度规范

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

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