第二组家庭财务管理系统Word文件下载.docx
- 文档编号:19094105
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:14
- 大小:159.77KB
第二组家庭财务管理系统Word文件下载.docx
《第二组家庭财务管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《第二组家庭财务管理系统Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
(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*/
{
nian;
yue;
ri;
xiangmu;
shumu;
}zhangmu[100]
由于日期、项目、收入或支出构成用于描述一个有机整体——收支情况,为了表明这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体这种形式来体现。
4.功能模块详细设计
4.1详细设计思想
4.1.1开发与设计的总体思想
本系统的总体思想基于结构化的程序设计。
应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的增、改、查等典型的管理功能由于主要实现的是管理系统的增、改、查等典型功能。
在软件开发过程中应用了软件工程的基本理论。
因此,系统的设计方法是结构化设计方法,开发手段是C语言。
4.1.2系统模块结构图
家庭财务管理系统可以分为4个模块:
系统增加模块,系统修改模块,系统排序模块,系统查询模块,如图所示:
4.1.3模块设计
(一)系统增加模块
1、模块描述
对增加财务收支信息功能管理。
对增加的操作,会将操作结果保存至数组。
2、源文件定义
源文件:
&
p->
nian,
yue,
ri三个变量用来储存收支情况里的日期
xiangmu这个变量用来储存收支情况里的项目,包括收入和各种支出
shumu这个变量用来储存收支情况里的数目
(二)系统修改模块
修改收支信息。
输入要修改的项目的日期、项目、数量,在选择要输入要修改的内容的类型,并输入修改的内容,并将操作结果保存至数组。
(三)系统排序模块
1、模块描述
排序收支信息。
原理是冒泡排序,依次比较相邻的两个数,将小数放在前面,大数放在后面。
即在第一趟:
首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。
至此第一趟结束,将最大的数放到了最后。
在第二趟:
仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
并将操作结果保存至数组。
源文件:
&
shumu这个变量用来储存收支情况里的数目系统查询模块
(四)系统查询模块
查询收支信息。
让用户选择查询的方式,再根据用户输入的信息,对结构体数组每项遍历和用户所输入的比较,只要相同就输出。
4.1.4界面设计
家庭财务管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。
软件开始界面
(1)系统增加模块
系统修改模块
(2)系统排序模块
(4)系统查询模块
4.2核心代码
#include<
stdio.h>
#include<
stdlib.h>
/*这个头文件包含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"
&
nian,&
yue,&
ri);
/*输入日期*/
请输入项目:
\n0收入\n1食品消费\n2房租\n3子女教育费\n4水电费\n5医疗费\n6储蓄\n7其他\n"
%d"
xiangmu);
/*输入项目*/
请输入数目:
\n"
shumu);
/*输入数目*/
}
voidxiugai(structshouzhi*p,intu)/*修改函数*/
intn,y,r,m,s;
/*5个变量用来存储要修改的日期,项目和数目*/
请输入原日期(********)\n"
n,&
y,&
r);
-
请输入原项目:
m);
请输入原数目:
s);
for(i=0;
i<
u;
i++,p=p+1)/*用for循环来查找出要修改的结构体*/
{
if(p->
nian==n&
yue==y&
ri==r&
xiangmu==m&
shumu==s)
{
printf("
%d.%d.%d\n%d\n%d\n"
p->
nian,p->
yue,p->
ri,p->
xiangmu,p->
printf("
请选择你要修改的选项:
\n1日期\n2项目\n3数目\n"
/*找到后选择要修改的项目*/
x);
if(x==1){printf("
请输入要修改的日期(********)\n"
}
/*修改完毕,输出修改完毕的项*/
elseif(x==2){
printf("
请输入要修改的项目:
scanf("
elseif(x==3){printf("
请输入要修改的数目:
}
elseif(x!
=1&
x!
=2&
=3)printf("
输入错误,请重新输入\n"
/*没找到所要查询的结构体,输出这句话*/
}
}
voidchaxun(structshouzhi*p)/*查询函数*/
intn,y,r,m,i,w;
charx;
1.日收支报表\n2.月收支报表\n"
a);
if(a==1)/*查询日收支报表*/
1.整表输出\n2.按类输出\n"
scanf("
w);
if(w==1)/*整表输出*/
{
printf("
请输入要查询的年月日(********)\n"
scanf("
/*输入完毕要查询的年月日*/
for(i=0;
A;
i++,p++)/*开始查询*/
{if(p->
ri==r)
printf("
年月日:
%d.%d.%d\n项目:
%d\n数目:
%d\n"
}/*查找完毕,输出所查找到的项*/
}
elseif(w==2)/*按类输出*/
{
printf("
请输入要查询的项目:
scanf("
/*输入完毕,开始查询*/
for(i=0;
i++,p++)/*for循环查找所要查找的项*/
{
if(p->
xiangmu==m)
/*当年月日,项目都相同时进行一下操作*/
年月:
%d.%d.%d\n项目:
%d\n数目:
/*查找完毕,输出所查找到的所有项*/
}
}
elseif(a==2)/*查询月收支报表*/
{
switch(a)
{/*整表输出*/
case1:
请输入要查询的年月(******)\n"
%d%d"
y);
/*输入年月*/
i++,p++)/*输入完毕,开始查询*/
/*for循环查找所要查找的项*/
if(p->
yue==y)/*找出符合的所有项*/
/*输出查询到的项*/
break;
/*查找完毕,跳出循环*/
case2:
请输入要查询的年月项目(*******)\n"
/*按类输出*/
if(p->
/*查找完毕,输出所查找到的所有项*/
}
voidpaixu(structshouzhi*p,intu)/*排序函数,用来按从大到小的顺序排列数目*/
intt;
intj;
i++)/*for循环用控制冒泡排序*/
for(intj=0,o=0;
j<
u-1;
j++,o++)/*for循环用控制冒泡排序*/
{if((p+o)->
shumu>
(p+1+o)->
shumu)
{
t=(p+o)->
(p+o)->
nian=(p+o+1)->
(p+o+1)->
nian=t;
t=(p+o)->
yue=(p+o+1)->
yue=t;
ri=(p+o+1)->
ri=t;
xiangmu=(p+o+1)->
xiangmu=t;
shumu=(p+o+1)->
shumu=t;
/*冒泡排序*/
}}
voidmain()/*主函数整合其他函数*/
structshouzhi*q=&
zhangmu[3],*p=&
zhangmu[0];
intj,u=10;
for(i=0;
)/*for循环开始执行家庭财务管理系统*/
欢迎使用家庭财务管理系统\n"
0退出\n"
1增加\n"
2修改\n"
3查询\n"
/*输出友好界面*/
switch(a)/*选择其中的项,根据输入的数选择执行一下函数*/
case0:
谢谢使用\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;
/*查询函数,查询前,先对函数进行排序*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 家庭 财务管理 系统