第二组家庭财务管理系统.docx

上传人:b****6 文档编号:6095493 上传时间:2023-01-03 格式:DOCX 页数:14 大小:159.77KB
下载 相关 举报
第二组家庭财务管理系统.docx_第1页
第1页 / 共14页
第二组家庭财务管理系统.docx_第2页
第2页 / 共14页
第二组家庭财务管理系统.docx_第3页
第3页 / 共14页
第二组家庭财务管理系统.docx_第4页
第4页 / 共14页
第二组家庭财务管理系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

第二组家庭财务管理系统.docx

《第二组家庭财务管理系统.docx》由会员分享,可在线阅读,更多相关《第二组家庭财务管理系统.docx(14页珍藏版)》请在冰豆网上搜索。

第二组家庭财务管理系统.docx

第二组家庭财务管理系统

中北大学

数据结构

课程设计说明书

 

 

学生姓名:

李晓晨

学号:

04

学生姓名:

文巧丽

学号:

10

学生姓名:

梁振宁

学号:

26

学生姓名:

闫梦彪

学号:

27

学院:

信息商务学院

专业:

10060342X 

题目:

家庭财务管理

指导教师

武瑞娟,贾美丽

 

 

 

 

 

 2011年11月28日

 

1设计目的

家庭财务系统主要对家庭的各项财务收支管理进行在计算机上的信息存储和处理,从而简化用户的工作量。

该系统使普通家庭对于一般的家庭财务,例如:

记录家庭每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。

进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。

2.设计内容

家庭财务管理系统是为用户进行家庭成员的收支构成及信息管理进行辅助的应用软件,设计内容大致如下:

(1)增加家庭成员收支信息:

用户根据提示输入增加的项目,如:

年、月、日、项目、数目。

可一次性输入多条家庭成员的收支信息记录,系统将家庭成员收信息记录存储在系统磁盘的文件中,以便进行管理,查找,排序。

(2)修改家庭成员收支信息:

用户输入要进行修改,根据提示确定要修改的项,再根据提示确定修改的项目:

如:

年月日,项目,数目,继续存储在系统的磁盘中。

(3)家庭成员收支排序:

该项需求要求根据收支数目用冒泡法进行排序,以便用户对家庭成员收状况有较为直观的了解。

(4)查询家庭成员财务情况:

分为按日查询和按月查询两个具体需求,根据用户自己的需求,选择整表输出或按类输出,系统会列出用户所需的信息在该功能中,也提示用户是否需要修改,如果不需要,则返回主界面。

3.本设计所采用的数据结构

1、常量定义 #define A 100    

在排序浏览、删除、修改等功能模块中该常量用于定义数组长度。

程序先把要排序或删除、修改的文件中的每条记录存放在数组当中,然后用特定的算法对该数组中的家庭成员信息进行排序、删除、修改等操作。

C语言中的数组长度是固定的,并且必须在声明时指定数组的长度,因此用SIZE常量定义该数组的长度,由于财务信息文件的信息量较大,因此定义大小为100,并可根据需要进行简单更改。

int a    

整体变量a控制函数中的选项,在本程序有好界面中,会输入用户选择的选项,以整形储存在a中。

int  i   

整体变量i用来控制函数中for循环的次数,在函数中,会涉及很多for循环,i用来控制循环次数,以免陷入死循环,或者不循环。

2、收支情况信息数据结构

用于存放收支情况的日期、项目、收入或支出方面的信息。

struct shouzhi/*定义结构体struct shouzhi*/

{

int nian; 

int yue;

int ri;

int xiangmu;

int shumu; 

}zhangmu[100]

由于日期、项目、收入或支出构成用于描述一个有机整体——收支情况,为了表明这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体这种形式来体现。

4.功能模块详细设计

4.1详细设计思想

4.1.1开发与设计的总体思想

本系统的总体思想基于结构化的程序设计。

应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的增、改、查等典型的管理功能由于主要实现的是管理系统的增、改、查等典型功能。

在软件开发过程中应用了软件工程的基本理论。

因此,系统的设计方法是结构化设计方法,开发手段是C语言。

4.1.2系统模块结构图

家庭财务管理系统可以分为4个模块:

系统增加模块,系统修改模块,系统排序模块,系统查询模块,如图所示:

4.1.3模块设计

(一)系统增加模块

1、模块描述

  对增加财务收支信息功能管理。

对增加的操作,会将操作结果保存至数组。

  

2、源文件定义

  源文件:

  &p->nian,

&p->yue,

&p->ri三个变量用来储存收支情况里的日期

&p->xiangmu这个变量用来储存收支情况里的项目,包括收入和各种支出

&p->shumu这个变量用来储存收支情况里的数目

(二)系统修改模块

1、模块描述

  修改收支信息。

输入要修改的项目的日期、项目、数量,在选择要输入要修改的内容的类型,并输入修改的内容,并将操作结果保存至数组。

2、源文件定义

  源文件:

  &p->nian,

&p->yue,

&p->ri三个变量用来储存收支情况里的日期

&p->xiangmu这个变量用来储存收支情况里的项目,包括收入和各种支出

&p->shumu这个变量用来储存收支情况里的数目

(三)系统排序模块

1、模块描述

排序收支信息。

原理是冒泡排序,依次比较相邻的两个数,将小数放在前面,大数放在后面。

即在第一趟:

首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

至此第一趟结束,将最大的数放到了最后。

在第二趟:

仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。

如此下去,重复以上过程,直至最终完成排序。

并将操作结果保存至数组。

2、源文件定义

源文件:

&p->nian,

&p->yue,

&p->ri三个变量用来储存收支情况里的日期

&p->xiangmu这个变量用来储存收支情况里的项目,包括收入和各种支出

&p->shumu这个变量用来储存收支情况里的数目系统查询模块

(四)系统查询模块

1、模块描述

  查询收支信息。

让用户选择查询的方式,再根据用户输入的信息,对结构体数组每项遍历和用户所输入的比较,只要相同就输出。

2、源文件定义

  源文件:

  &p->nian,

&p->yue,

&p->ri三个变量用来储存收支情况里的日期

&p->xiangmu这个变量用来储存收支情况里的项目,包括收入和各种支出

&p->shumu这个变量用来储存收支情况里的数目

 

4.1.4界面设计

家庭财务管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。

 

软件开始界面

 

(1)系统增加模块

系统修改模块

(2)系统排序模块

(4)系统查询模块

4.2核心代码

#include

#include/*这个头文件包含exit函数*/

#defineA100/*定义了结构体数组的大小*/

inta;/*整体变量a控制函数中的选项*/

inti;/*整体变量i用来控制函数中for循环的次数*/

intk=0;

charx;

structshouzhi/*定义结构体structshouzhi*/

{

intnian;

intyue;

intri;/*三个变量用来储存收支情况里的日期*/

intxiangmu;/*这个变量用来储存收支情况里的项目,包括收入和各种支出,*/

intshumu;/*这个变量用来储存收支情况里的数目*/

}zhangmu[100]={{2011,01,01,0,3500},{2011,02,03,0,4000},{2011,01,02,2,400},{2011,01,12,3,500},{2011,01,02,2,500},{2011,02,04,2,4400},{2011,01,30,1,400},{2011,01,02,4,100},{2011,02,04,3,10},{2011,01,02,0,1000}};

/*为结构体数组赋初值*/

voidzengjia(structshouzhi*p)/*增加函数*/

{

printf("请输入日期(********)\n");

scanf("%d%d%d",&p->nian,&p->yue,&p->ri);/*输入日期*/

printf("请输入项目:

\n0收入\n1食品消费\n2房租\n3子女教育费\n4水电费\n5医疗费\n6储蓄\n7其他\n");

scanf("%d",&p->xiangmu);/*输入项目*/

printf("请输入数目:

\n");

scanf("%d",&p->shumu);/*输入数目*/

}

voidxiugai(structshouzhi*p,intu)/*修改函数*/

{

intn,y,r,m,s;/*5个变量用来存储要修改的日期,项目和数目*/

printf("请输入原日期(********)\n");

scanf("%d%d%d",&n,&y,&r);-

printf("请输入原项目:

\n0收入\n1食品消费\n2房租\n3子女教育费\n4水电费\n5医疗费\n6储蓄\n7其他\n");

scanf("%d",&m);

printf("请输入原数目:

\n");

scanf("%d",&s);

for(i=0;i

{

if(p->nian==n&&p->yue==y&&p->ri==r&&p->xiangmu==m&&p->shumu==s)

{

printf("%d.%d.%d\n%d\n%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);

printf("请选择你要修改的选项:

\n1日期\n2项目\n3数目\n");

/*找到后选择要修改的项目*/

scanf("%d",&x);

if(x==1){printf("请输入要修改的日期(********)\n");

scanf("%d%d%d",&p->nian,&p->yue,&p->ri);

printf("%d.%d.%d\n%d\n%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);}

/*修改完毕,输出修改完毕的项*/

elseif(x==2){

printf("请输入要修改的项目:

\n0收入\n1食品消费\n2房租\n3子女教育费\n4水电费\n5医疗费\n6储蓄\n7其他\n");

scanf("%d",&p->xiangmu);

printf("%d.%d.%d\n%d\n%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);}

/*修改完毕,输出修改完毕的项*/

elseif(x==3){printf("请输入要修改的数目:

\n");

scanf("%d",&p->shumu);

printf("%d.%d.%d\n%d\n%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);}

/*修改完毕,输出修改完毕的项*/

elseif(x!

=1&&x!

=2&&x!

=3)printf("输入错误,请重新输入\n");

/*没找到所要查询的结构体,输出这句话*/

}

}

}

voidchaxun(structshouzhi*p)/*查询函数*/

{

intn,y,r,m,i,w;/*5个变量用来存储要修改的日期,项目和数目*/

charx;

printf("1.日收支报表\n2.月收支报表\n");

scanf("%d",&a);

if(a==1)/*查询日收支报表*/

{

printf("1.整表输出\n2.按类输出\n");

scanf("%d",&w);

if(w==1)/*整表输出*/

{

printf("请输入要查询的年月日(********)\n");

scanf("%d%d%d",&n,&y,&r);/*输入完毕要查询的年月日*/

for(i=0;i

{if(p->nian==n&&p->yue==y&&p->ri==r)

printf("年月日:

%d.%d.%d\n项目:

%d\n数目:

%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);}/*查找完毕,输出所查找到的项*/

}

elseif(w==2)/*按类输出*/

{

printf("请输入要查询的年月日(********)\n");

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

printf("请输入要查询的项目:

\n0收入\n1食品消费\n2房租\n3子女教育费\n4水电费\n5医疗费\n6储蓄\n7其他\n");

scanf("%d",&m);/*输入完毕,开始查询*/

for(i=0;i

{

if(p->nian==n&&p->yue==y&&p->ri==r&&p->xiangmu==m)

/*当年月日,项目都相同时进行一下操作*/

printf("年月:

%d.%d.%d\n项目:

%d\n数目:

%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);

/*查找完毕,输出所查找到的所有项*/

}

}

}

elseif(a==2)/*查询月收支报表*/

{

printf("1.整表输出\n2.按类输出\n");

scanf("%d",&a);

switch(a)

{/*整表输出*/

case1:

printf("请输入要查询的年月(******)\n");

scanf("%d%d",&n,&y);/*输入年月*/

for(i=0;i

/*for循环查找所要查找的项*/

{

if(p->nian==n&&p->yue==y)/*找出符合的所有项*/

printf("年月日:

%d.%d.%d\n项目:

%d\n数目:

%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);/*输出查询到的项*/

}

break;/*查找完毕,跳出循环*/

case2:

printf("请输入要查询的年月项目(*******)\n");/*按类输出*/

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

for(i=0;i

if(p->nian==n&&p->yue==y&&p->xiangmu==m)

printf("年月日:

%d.%d.%d\n项目:

%d\n数目:

%d\n",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);

/*查找完毕,输出所查找到的所有项*/

}

}

}

voidpaixu(structshouzhi*p,intu)/*排序函数,用来按从大到小的顺序排列数目*/

{

intt;

intj;

for(i=0;i

{

for(intj=0,o=0;j

{if((p+o)->shumu>(p+1+o)->shumu)

{

t=(p+o)->nian;

(p+o)->nian=(p+o+1)->nian;

(p+o+1)->nian=t;

t=(p+o)->yue;

(p+o)->yue=(p+o+1)->yue;

(p+o+1)->yue=t;

t=(p+o)->ri;

(p+o)->ri=(p+o+1)->ri;

(p+o+1)->ri=t;

t=(p+o)->xiangmu;

(p+o)->xiangmu=(p+o+1)->xiangmu;

(p+o+1)->xiangmu=t;

t=(p+o)->shumu;

(p+o)->shumu=(p+o+1)->shumu;

(p+o+1)->shumu=t;/*冒泡排序*/

}}

}

}

voidmain()/*主函数整合其他函数*/

{

structshouzhi*q=&zhangmu[3],*p=&zhangmu[0];

intj,u=10;

for(i=0;i

{

printf("欢迎使用家庭财务管理系统\n");

printf("0退出\n");

printf("1增加\n");

printf("2修改\n");

printf("3查询\n");/*输出友好界面*/

scanf("%d",&a);

switch(a)/*选择其中的项,根据输入的数选择执行一下函数*/

{

case0:

printf("谢谢使用\n");exit(0);/*选择0,退出系统*/

case1:

zengjia(q);u++;i++;paixu(p,u);

break;/*增加函数,增加完后i自增一位,控制for循环的次数,u自增一位,控制冒泡排序中排序次数*/

case2:

xiugai(p,u);break;/*修改函数*/

case3:

paixu(p,u);chaxun(p);break;/*查询函数,查询前,先对函数进行排序*/

}

}

}

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

当前位置:首页 > 自然科学

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

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