




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中北大学数 据 结 构课 程 设 计 说 明 书 学生姓名:李晓晨学 号:04学生姓名:文巧丽学 号:10学生姓名:梁振宁学 号:26学生姓名:闫梦彪学 号:27学 院:信息商务学院专 业:10060342X 题 目:家庭财务管理指导教师武瑞娟,贾美丽 2011 年 11月28日1 设计目的家庭财务系统主要对家庭的各项财务收支管理进行在计算机上的信息存储和处理,从而简化用户的工作量。该系统使普通家庭对于一般的家庭财务,例如:记录家庭每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等
2、。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。2. 设计内容家庭财务管理系统是为用户进行家庭成员的收支构成及信息管理进行辅助的应用软件,设计内容大致如下:(1) 增加家庭成员收支信息:用户根据提示输入增加的项目,如:年、月、日、项目、数目。可一次性输入多条家庭成员的收支信息记录,系统将家庭成员收信息记录存储在系统磁盘的文件中,以便进行管理,查找,排序。(2) 修改家庭成员收支信息:用户输入要进行修改,根据提示确定要修改的项,再根据提示确定修改的项目:如:年月日,项目,数目,继续存储在系统的磁盘中。(3) 家庭成员收支排序:该项
3、需求要求根据收支数目用冒泡法进行排序,以便用户对家庭成员收状况有较为直观的了解。(4) 查询家庭成员财务情况:分为按日查询和按月查询两个具体需求,根据用户自己的需求,选择整表输出或按类输出,系统会列出用户所需的信息在该功能中,也提示用户是否需要修改,如果不需要,则返回主界面。3本设计所采用的数据结构1、常量定义 #define A 100 在排序浏览、删除、修改等功能模块中该常量用于定义数组长度。程序先把要排序或删除、修改的文件中的每条记录存放在数组当中,然后用特定的算法对该数组中的家庭成员信息进行排序、删除、修改等操
4、作。C语言中的数组长度是固定的,并且必须在声明时指定数组的长度,因此用SIZE常量定义该数组的长度,由于财务信息文件的信息量较大,因此定义大小为100,并可根据需要进行简单更改。int a 整体变量a控制函数中的选项,在本程序有好界面中,会输入用户选择的选项,以整形储存在a中。 int i 整体变量i用来控制函数中for循环的次数,在函数中,会涉及很多for循环,i用来控制循环次数,以免陷入死循环,或者不循环。2、收支情况信息数据结构 用于存放收支情况的日期、项目、收入或支出方面的信
5、息。struct shouzhi/*定义结构体struct shouzhi*/int nian; int yue;int ri;int xiangmu;int shumu; zhangmu100 由于日期、项目、收入或支出构成用于描述一个有机整体收支情况,为了表明这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体这种形式来体现。4功能模块详细设计4.1 详细设计思想 开发与设计的总体思想 本系统的总体思想基于结构化的程序设计。应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的
6、增、改、查等典型的管理功能由于主要实现的是管理系统的增、改、查等典型功能。在软件开发过程中应用了软件工程的基本理论。因此,系统的设计方法是结构化设计方法,开发手段是C语言。 4.1.2系统模块结构图家庭财务管理系统可以分为4个模块:系统增加模块,系统修改模块,系统排序模块,系统查询模块,如图所示:排序模块增加模块家庭财务管理系统修改模块查询模块系统模块结构图 4.1.3 模块设计(一) 系统增加模块1、模块描述 对增加财务收支信息功能管理。对增加的操作,会将操作结果保存至数组。 2、源文件定义 源文件: &
7、amp;p->nian,&p->yue,&p->ri 三个变量用来储存收支情况里的日期&p->xiangmu 这个变量用来储存收支情况里的项目,包括收入和各种支出&p->shumu 这个变量用来储存收支情况里的数目增加项目增加日期增加模块增加数目增加模块结构树图 (二) 系统修改模块1、模块描述 修改收支信息。输入要修改的项目的日期、项目、数量,在选择要输入要修改的内容的类型,并输入修改的内容,并将操作结果保存至数组。2、源文件定义 源文件: &p->n
8、ian,&p->yue,&p->ri 三个变量用来储存收支情况里的日期&p->xiangmu 这个变量用来储存收支情况里的项目,包括收入和各种支出&p->shumu 这个变量用来储存收支情况里的数目输入修改资料输入原资料修改模块修改收支情况修改模块结构树图 (三) 系统排序模块 1、模块描述 排序收支信息。原理是冒泡排序,依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第
9、一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。并将操作结果保存至数组。2、源文件定义 源文件: &p->nian,&p->yue,&p->ri 三个变量用来储存收支情况里的日期&p->xiangmu 这个变量用来储存收支情况里的项目,包括收入和各种支出&
10、amp;p->shumu 这个变量用来储存收支情况里的数目系统查询模块(四) 系统查询模块 1、模块描述 查询收支信息。让用户选择查询的方式,再根据用户输入的信息,对结构体数组每项遍历和用户所输入的比较,只要相同就输出。2、源文件定义 源文件: &p->nian,&p->yue,&p->ri 三个变量用来储存收支情况里的日期&p->xiangmu 这个变量用来储存收支情况里的项目,包括收入和各种支出&p->shumu 这个变量用来储存收支情况里的数目按类
11、输出查询模块查询模块结构树图按日查询 按日查询整表输出整表输出按类输出4.1.4界面设计家庭财务管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。软件开始界面(1) 系统增加模块系统修改模块(2) 系统排序模块(4)系统查询模块4.2 核心代码#include<stdio.h>#include <stdlib.h> /*这个头文件包含exit函数*/#define A 100 /*定义了结构体数组的大小*/int a; /*整体变量a控制函数中的选项*/int i; /*整体变量i用来控制函数中for循环的次数*/int k=0;char x;struc
12、t shouzhi /*定义结构体struct shouzhi*/int nian; int yue;int ri; /*三个变量用来储存收支情况里的日期*/int xiangmu; /*这个变量用来储存收支情况里的项目,包括收入和各种支出,*/int shumu; /*这个变量用来储存收支情况里的数目*/zhangmu100=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,
13、100,2011,02,04,3,10,2011,01,02,0,1000; /*为结构体数组赋初值*/void zengjia(struct shouzhi *p) /*增加函数*/printf("请输入日期 (* * *)n");scanf("%d %d %d",&p->nian,&p->yue,&p->ri); /*输入日期*/printf("请输入项目:n 0 收入n 1 食品消费n 2 房租n 3 子女教育费n 4 水电费n 5 医疗费n 6 储蓄n 7 其他n");scanf(&q
14、uot;%d",&p->xiangmu); /*输入项目*/printf("请输入数目:n");scanf("%d",&p->shumu); /*输入数目*/void xiugai(struct shouzhi *p,int u) /*修改函数*/int n,y,r,m,s; /*5个变量用来存储要修改的日期,项目和数目*/printf("请输入原日期 (* * *)n");scanf("%d %d %d",&n,&y,&r);-printf("
15、;请输入原项目:n 0 收入n 1 食品消费n 2 房租n 3 子女教育费n 4 水电费n 5 医疗费n 6 储蓄n 7 其他n");scanf("%d",&m);printf("请输入原数目:n");scanf("%d",&s);for(i=0;i<u;i+,p=p+1) /*用for循环来查找出要修改的结构体*/if(p->nian=n&&p->yue=y&&p->ri=r&&p->xiangmu=m&&p-&g
16、t;shumu=s) printf("%d.%d.%dn%dn%dn",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-&g
17、t;yue,&p->ri);printf("%d.%d.%dn%dn%dn",p->nian,p->yue,p->ri,p->xiangmu,p->shumu); /*修改完毕,输出修改完毕的项*/ else if(x=2) printf("请输入要修改的项目:n 0 收入n 1 食品消费n 2 房租n 3 子女教育费n 4 水电费n 5 医疗费n 6 储蓄n 7 其他n"); scanf("%d",&p->xiangmu);printf("%d.%d.%dn%dn%
18、dn",p->nian,p->yue,p->ri,p->xiangmu,p->shumu);/*修改完毕,输出修改完毕的项*/ else if(x=3) printf("请输入要修改的数目:n"); scanf("%d",&p->shumu);printf("%d.%d.%dn%dn%dn",p->nian,p->yue,p->ri,p->xiangmu,p->shumu); /*修改完毕,输出修改完毕的项*/ else if(x!=1&&am
19、p;x!=2&&x!=3) printf("输入错误,请重新输入n");/*没找到所要查询的结构体,输出这句话*/ void chaxun(struct shouzhi *p) /*查询函数*/int n,y,r,m,i,w; /*5个变量用来存储要修改的日期,项目和数目*/char x;printf("1.日收支报表n2.月收支报表n");scanf("%d",&a);if(a=1) /*查询日收支报表*/ printf("1.整表输出n2.按类输出n"); scanf("%d&
20、quot;,&w); if(w=1) /*整表输出*/ printf("请输入要查询的年月日(* * *)n"); scanf("%d %d %d",&n,&y,&r); /*输入完毕要查询的年月日*/ for(i=0;i<A;i+,p+) /*开始查询*/ if(p->nian=n&&p->yue=y&&p->ri=r) printf("年月日:%d.%d.%dn项目:%dn数目:%dn",p->nian,p->yue,p->r
21、i,p->xiangmu,p->shumu); /*查找完毕,输出所查找到的项*/ else if(w=2) /*按类输出*/ printf("请输入要查询的年月日(* * *)n"); scanf("%d %d %d",&n,&y,&r);printf("请输入要查询的项目:n 0 收入n 1 食品消费n 2 房租n 3 子女教育费n 4 水电费n 5 医疗费n 6 储蓄n 7 其他n");scanf("%d",&m); /*输入完毕,开始查询*/ for(i=0;i&
22、lt;A;i+,p+) /*for循环查找所要查找的项*/ if(p->nian=n&&p->yue=y&&p->ri=r&&p->xiangmu=m) /*当年月日,项目都相同时进行一下操作*/ printf("年月: %d.%d.%d n项目: %dn数目:%dn",p->nian,p->yue,p->ri,p->xiangmu,p->shumu); /*查找完毕,输出所查找到的所有项*/ else if(a=2) /*查询月收支报表*/ printf("1.
23、整表输出n2.按类输出n"); scanf("%d",&a); switch (a) /*整表输出*/ case 1:printf("请输入要查询的年月(* *)n"); scanf("%d %d",&n,&y); /*输入年月*/ for(i=0;i<A;i+,p+) /*输入完毕,开始查询*/ /*for循环查找所要查找的项*/ if(p->nian=n&&p->yue=y) /*找出符合的所有项*/ printf("年月日:%d.%d.%dn项目:%d
24、n数目:%dn",p->nian,p->yue,p->ri,p->xiangmu,p->shumu); /*输出查询到的项*/ break; /*查找完毕,跳出循环*/case 2:printf("请输入要查询的年月项目(* * *)n"); /*按类输出*/scanf("%d %d %d",&n,&y,&m);for(i=0;i<A;i+,p+) /*for循环查找所要查找的项*/if(p->nian=n&&p->yue=y&&p->
25、xiangmu=m)printf("年月日:%d.%d.%dn项目:%dn数目:%dn",p->nian,p->yue,p->ri,p->xiangmu,p->shumu); /*查找完毕,输出所查找到的所有项*/ void paixu(struct shouzhi *p,int u) /*排序函数,用来按从大到小的顺序排列数目*/int t;int j;for(i=0;i<u;i+) /*for循环用控制冒泡排序*/ for(int j=0,o=0;j<u-1;j+,o+) /*for循环用控制冒泡排序*/ 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+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工入职培训体系介绍
- 扎实基础中级审计师考试试题及答案
- 审计报告的撰写标准与规范性探讨试题及答案
- 护理教育与评估试题及答案
- 高级审计师复习中的实践操作技巧试题及答案
- 政务电子网培训体系构建
- 消防专业知识综合测试试题及答案
- 知识点复习计划2025年一级建造师考试试题及答案
- 模拟飞行训练的无人机执照考试试题及答案
- 2024年河南省周口市商水县数学三上期末监测模拟试题含解析
- GB/T 1839-2008钢产品镀锌层质量试验方法
- 科技公司外部涉密信息导入涉密计算机审批表
- 年产12万吨甲烷氯化物可行性研究报告
- 临床试验伦理委员会远程会议审查的标准操作规程
- DB31T 1187-2019 特种设备风险分级管控实施指南
- 三年级数学下册《面积》练习试卷及答案
- 室内装饰医疗贝斯板技术交底
- 会计师事务所自查自纠报告范文3篇
- 信用评级ppt全套教学课件
- 2022年烟台毓璜顶医院医护人员招聘考试笔试题库及答案解析
- 现场跟踪审计工作要点
评论
0/150
提交评论