家庭财务管理_第1页
家庭财务管理_第2页
家庭财务管理_第3页
家庭财务管理_第4页
家庭财务管理_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 说 明 书课程名称: C 语言课程设计设计题目: 家庭财务管理院 系: 计算机科学与信息工程学院学生姓名: 任超俊 学 号: 201103040061 专业班级: 软件工程 指导教师: 周晏 2012 年 06 月 11 日课 程 设 计 任 务 书设计题目家庭财务管理学生姓名任超俊所在院系计算机科学与信息工程系学院专业、年级、班、软件工程 11 级二班设计要求:完成一个家庭财务管理,具体要求如下:1.添加收入信息2.查询收入信息3.删除收入信息4.更新收入信息5.添加支出信息6.查询支出信息7.删除支出信息8.更新支出信息9.统计总收入、总支出 10.退出学生应完成的工作:1 学生应认真学习参考程序,理解每个文件、每个函数以及各个变量的作用和意义。在此基础上进一步改进程序,最后正确地运行程序。2 对程序进行测试,设计详细的测试计划,然后根据测试计划设计测试用例,对程序进行测试。测试时应注意对各种边缘情况进行测试。3 完成课程设计报告参考文献:1 梁旭等 C 程序设计课程设计 电子工业出版社 20112 谭浩强 C 程序设计(第四版) 清华大学出版社 2010工作计划:1. 小组审题,查阅资料,进行设计前的必要资料准备(2 天) 。2. 把程序完整运行出来(3 天) 。3. 增加改进程序(2 天) 。4. 写课程设计报告(2 天) 。5. 提交课程设计报告及答辩(1 天)任务下达日期:2011 年 6 月 4 日 任务完成日期:2011 年 6 月 18 日指导教师(签名): 学生(签名):任超俊目 录一 设计要求.4二 系统的功能模块.4三 数据结构设计描述.4四 函数功能及参数说明、相互调用关系.6五 各变量的定义和作用.6六 各功能模块的算法处理流程图及相关说明.7七 改进或增加功能模块说明.11八 程序测试.14九 程序设计过程中遇到的问题及解决过程.16十 课程设计心得及体会.17十一 参考文献.17十二 源程序.17一、设计要求1.要求使用多文件方式实现设计.2.要求在各个文件内实现结构化设计.3.每个模块作为一个单独的 C 文件.4.宏和数据结构等放在头文件中,并使用条件编译.二、系统的功能模块根据设计要求,通讯录管理系统功能模块如图 6-1 所示:图 6-1 家庭财务管理系统功能模块:家庭财务管系统理系统收入管理 支出管理 统计 退出添加收入查询收入明细删除收入修改收入添加支出查询支出明细删除支出修改支出三、数据结构设计描述(1)自定义枚举类型 fi_type,用来表示收入和支出typedef enum _fi_typeincome = 1;/收入payout = -1;/支出fi_type;(2)用来存储家庭财务信息的结构体 fi_infotypedef struct _fi_infoint year;/年int month;/月fi_type type;/数据类型char name MAX_NAME;/家庭成员姓名float money;/收入或支出金额char detailMAX_DETAIL;/备注fi_info;(3)存储财务数据结构的结构体 fi_datatypedef struct _fi_datafi_info info;/财务数据struct _fi_data *next;/指向下一个节点的指针fi_data;4、 函数功能及参数说明、相互调用关表 4-1 函数相互调用关系源文件 函数名或其他成分 功 能main 总控函数menu_select 菜单选择handle_menu 菜单处理newRecords 新建学生信息记录finance.cquit 结束运行showTable 打印表头getIndex 按升序排序的位置addRecord 在表尾追加信息add_disp.cdisplay 显示信息removeRecord 删除制定的记录findRecord 查找制定的记录queryInfo 查找制定学生的信息copyRecord 复制记录que_remv_modi.cmodifyRecord 修改制定学生信息save 文件储存save_loadsave_load load 文件读取sort.c sortInfo 排序常数 提供常数结构声明 学生成绩结构finance.h库函数及函数原型声明 引用库函数及函数1、添加收入信息主菜单中选择 1 的时候进行台南家收入操作,系统调用 add_income()函数来添加收入信息,先建立单链表,函数调用 input_info()函数提示用户输入收入信息,并存储到单链表中,输入完成后返回到主菜单界面。2、查询收入明细主菜单中选择 2 的时候进行查询收入明细操作,系统调用 search_income()函数来查询收入明细,调用 search_data()函数来完成具体的查询操作。首先提示用户输入要查询的年月,如果用户输入错误,给出输入错误的提示信息,如果用户输入正确,在单链表中查找该年月的收入信息,如果查找成功,按照指定格式显示找到输入信息。每页显示 9 条收入信息,如果找到输入信息多于 9 条,按空格键翻页。如果没有找到任何信息,系统给出提示信息。查询成功后提示用户是否继续查询操作,如果用户输入“Y”或“y” ,则再次进行查询操作;否则,返回主页界面。4、更新输入信息主菜单中选择 4 的时候进行更新输入信息操作,调用 updare_data()函数进行更新收入操作。首先,提示用户输入要更新收入的年月,然后,根据用户输入的年月信息在单链表中查找相关信息。如果查找成功则调用 show_info()函数,显示查找到的收入信息,每页最多显示 9 条信息;如果查找到的收入信息多余 9 条,则按空格键翻页,最后提示用户输入要更新的收入信息的序号,调用 input_info()函数,输入更新的收入信息,完成更新的操作。如果查找不成功,则给出相应的提示信息。更新操作结束后,提示用户是否进行继续更新操作,如果用户输入“Y” 或“y” ,则再次进行查询操作;否则,返回主菜单界面。5、添加指出信息主菜单中选择 5 的时候进行添加支出操作,系统调用 sdd_income()函数来添加支出信息。添加支出信息的操作与添加收入信息的操作相似。6、查询支出明细主菜单中选择 6 的时候进行查询支出明细的操作,系统调用 search_income()函数来查询支出明细,调用 search_data()函数来完成具体的查询操作。查询支出明细的操作与查询收入明细的操作相似。7、删除支出信息主菜单中选择 7 的时候进行删除支出信息的操作,调用 delete_data()函数进行删除支出的操作。删除支出的操作与收入的操作相似。8、更新支出信息主菜单中选择 8 的时候进行更新支出信息的操作,调用 update_data()函数进行更新支出操作。更新支出操作与更细收入操作相似。9、统计总收入、总支出主菜单中选择 9 的时候进行统计操作,调用 count_total()函数进行总收入、总支出的统计。在单链表中,计算收入和支出的总和,并将两者相减得到家庭收入结余,并按一定的格式显示出来。统计结束后,按任意键返回主菜单界面。10、退出系统主菜单中选择 0 的时候退出系统,调用 quit()函数进行退出操作,首先调用save_to_file()函数,将单链表中的数据保存到文件,在调用 clear_data()函数晴空单链表,最后退出系统。家庭财务管理功能模块如图 6-1 所示。五、各变量的定义和作用#include“finance.h“#define MAX_NAME 11/家庭成员姓名最大长度#define MAX_DETAIL 21/备注最大长度#define MENU_COUNT 9/菜单选项个数#define DATA_FILE “fs.dat“/数据文件文件名2.数据结构定义(1)自定义枚举类型 fi_type,用来表示收入和支出typedef enum _fi_typeincome = 1;/收入payout = -1;/支出fi_type;(2)用来存储家庭财务信息的结构体 fi_infotypedef struct _fi_infoint year;/年int month;/月fi_type type;/数据类型char name MAX_NAME;/家庭成员姓名float money;/收入或支出金额char detailMAX_DETAIL;/备注fi_info;(3)存储财务数据结构的结构体 fi_datatypedef struct _fi_datafi_info info;/财务数据struct _fi_data *next;/指向下一个节点的指针fi_data;除此之外还有部分函数内部变量,用作循环和判断条件。家庭财务管理系统应用软件给家庭成员提供一个管理家庭财务的平台,系统采用的开发工具是 Visual C+6.0,主要用于系统可以对家庭成员提供的收入和支出进行增加、删除、修改和查询等操作,并能统计总收入和总支出。其主要功能需求描述如下:(1) 系统主菜单界面 允许用户选择想要进行的操作,包括输入收入管理、支出管理、统计和退出系统等操作。其中收入管理包括添加收入、查询收入明细、删除收入和修改收入操作,指出管理包括添加指出、查询指出明细、删除支出明细和修改支出明细的操作。统计是对总收入和总支出进行统计操作。(2) 添加收入处理 用户根据提示,输入要添加的收入信息,包括收入的日期(要求 4 位的年和月份) 、添加收入的家庭成员、收入的金额及备注信息。输入完一条收入记录,将其暂时保存在单链表中,返回到主菜单界面。(3) 查询收入明细处理 根据用户输入的年月信息在单链表中查找收入信息,如果查询成功,按照预定格式显示该收入明细。如果没有数据,则给出相应的提示信息。查询结束后,提示用户是否继续查找,根据用户的输入进行下一步的操作。删除收入处理 首先提示用户输入要删除的年月,根据用户的输入在单链表中查询。(4) 提示用户输入对应的序号,删除该收入信息,用户输入对应的序号就删除相关的收入信息,并给出删除成功的提示信息。用户输入其他键则重新进行删除操作。(5) 修改收入处理 首先提示用户输入要进行修改收入的年月,如果单链表中有该收入信息存在,则提示用户输入要修改的收入日期、家庭成员姓名、收入金额及备注等信息,并将修改结果重新储存在单链表中。如果没有和找到要修改的收入信息,系统将给出提示信息。(6) 添加支出处理 完成用户支出信息的添加,与添加收入信息相似。(7) 查询住处明细处理 查询支出信息,与查询收入明细处理相似。(8) 删除支出处理 删除支出信息,与删除收入信息相似。(9) 修改支出信息 修改支出信息与修改收入信息相似。(10) 统计总收入和总支出处理 计算单链表中所有的收入的总和和所有支出的总和,并将两者相减,得到家庭收入的结余。(11) 退出 退出系统。六、各功能模块的算法处理流程图及相关说明输出 “ 请选择查询方式 ”输出 “ 1 . 按时间查询 “输出 “ 2 . 按姓名查询 “输出 “ 3 . 按金额查询 “输入 w a y当 w a y ! = 1 c o u n t = 0 ;m e m s e t ( r e s u l t , 0, s i z e o f ( f i _ d a t a *) )取 P 指向的节点数据P 值等于输入条件YNc o u n t n e x t显示结果p 是n u l l?N Y空格翻页清空结果提示是否再次查询条件真 假结束请输入要查询的姓名 ( 例如 : 张三 )输入正确 ?p = h e a d ;c o u n t = 0 ;m e m s e t ( r e s u l t , 0, s i z e o f ( f i _ d a t a *) )取 P 指向的节点数据P 值等于输入条件YNc o u n t n e x t显示结果空格翻页清空结果提示是否再次查询条件真 假结束真假P 不等于 N U L L 请输入要查询的金额 ( 例如 : 1 0 0 0 )输入正确 ?p = h e a d ;c o u n t = 0 ;m e m s e t ( r e s u l t , 0, s i z e o f ( f i _ d a t a *) )取 P 指向的节点数据c o u n t n e x t显示结果空格翻页提示是否再次查询条件真结束P 不等于 N U L LP 值等于输入条件Y NYNN假真假开始用户输入条件输入正确 ?定义指针 p 指向头节点结构个数是 0 ?P 是 N U L L ?结果个数 请输入要查询的年月(例如:2009/1)“);if(scanf(“%d/%d“,elsep=head;count=0;menset(result,0,sizeof(fi_data*);while(p!=NULL)if(p-info.year=yearfflush(stdin);input=getchar();if(input= )memset(result,0,sizeof(fi_data*);count=0;result=0;resultcount=p;count+;elsebreak;p=p-next;if(count!=0)show_info(result,count);elseprintf(“没有查找到数据。n“);printf(“继续查找其他数据?(y or n)“);fflush(stdin);input=getchar();if(input=y|input=Y)coutinue;elsebreak;(2)删除处理函数名称:delete_data处理流程:提示用户输入要删除的年月,然后根据用户输入的年月在单链表中查找相关信息。如果查找成功,且查找到的数据小于 9,直接调用 show_info()函数显示查找到的收入信息;如果查找到的数据大于 9 条信息,则按空格键翻页。最后提示用户输入要删除的收入信息的序号,完成删除的操作。如果查找不成功,给出相应的提示信息。提示用户是否继续删除操作,如果用户输入“Y”或“y” ,则再进行查询操作;否则,返回主菜单界面。程序清单:void delete_data(fi_type type)int year=0;month=0;fi_data*p=NULL;fi_data*pre=NULL:fi_data*result9=NULL;int count=0;char input= ;int i=0;while(1)printf(“请输入要查询的年月(例如: 2009/1)“);if(scanf(“%d/%d“,elsep=head;count=0;memset(result,0,sizeof(fi_data*);while(p!=NULL)if(p-info.year=yearinput=getchar();if(input= )memset(result,0,sizeof(fi_data*);count=0;resultcount=p;count+;elseif(input=1elsepre-next=resulti-next;free(resulti);for(;i删除成功。n“);elsebreak;p=p-next;if(count!=0);show_info(result,count);printf(“输入对应的序号删除。其他键退出。“);fflush(stdin);input=getchar();if(input=1elsepre-next=resulti-next;free(resulti);for(;i删除成功。n“);elseprintf(“没有找到数据。n“);printf(“继续查找其他数据?(y or n)“);fflush(stdin);input=getchar();if(input=y|input=Y)coutinue;elsebreak;八、程序测试:1、主界面系统运行后,首先进入主菜单界面,允许用户输入 09 之间的不同的数字,以实现不同的操作。主菜单界面如图所示。2、添加收入信息进入主菜单界面后,输入数字 1 进入添加收入信息操作,用户可以根据提示信息输入收入的年月、家庭成员姓名、收入明细和备注信息,输入完后返回主界面。输入信息情况如图 67 所示。3、查询收入明细如果在主菜单界面中输入数字 3,则进行删除收入信息操作,系统提示输入要查询的年月,如果查询成功,系统会将单链表中的收入信息按照预定的格式显示出来,在提示用户输入要删除的收入信息的序号,完成删除操作。删除收入信息的操作在操作界面如图所示。4、删除收入明细如果在菜单中输入 3,则进行删除收入信息的操作,系统提示输入要查询的年月,如果查询成功,系统会将单链表中的收入信息按照预定的格式显示出来,在提示用户输入要删除的收入信息的序号,完成删除的操作。删除收入信息的操作界面如图所示:5、修改输入信息如果在主菜单中输入 4,则进行修改收入信息的操作,系统提示输入要查询的年月,如果查询成功,系统会将单链表中的收入信息按照预定的格式显示出来,在提示用户输入要修改的收入信息的序号,用户可以按照系统的提示进行修改的操作。修改收入信息的操作界面如图 6-10 所示。6、添加支出信息在主菜单中输入数字 5,则进入添加支出信息操作,输入信息情况如图 6-11 所示。7、查询支出明细如果在主菜单中输入数字 6,则查询支出明细的操作。查询支出明细的操作如图 6-12所示。8、删除支出信息如果在主菜单中输入 7,则进行删除支出信息的操作。删除支出信息的操作界面如图6-13 所示。9、修改支出信息在主菜单中输入 8,则进行修改支出信息的操作,修改支出信息的操作界面如图 6-14所示。10、统计在主菜单中如果输入 9,则进行总收入和总支出的信息的统计操作,操作界面如图 6-15 所示。6.5 小结本章实现了一个简单的家庭财务管理系统,对于系统的分析、设计、创建的全过程进行了详尽的阐述,包括家庭财务管理系统过程中对收入信息的增加、删除、修改和查询等。由于收入和支出的操作流程几乎相同,所以对与相同操作通过调用同一函数,传递的参数不同来完成,有效地实现了代码的重用,也使得程序变的简洁易懂。九、程序设计过程中遇到的问题及解决过程. 1、 对程序整体理解,但在设计过程中,细节问题处理不当,使得整个程序中出现了一些人为的错误。为了要排除这些问题,首先我先对着课本把自己打的程序与书本上的程序进行了一一的对照,然后就是通过问题找到具体是哪里错了,然后对着课本进行修改。2、把书本上的程序都打到运行环境当中,无法进行,出现了很多的错误和警告。有一个是比较明显的就是 delete,运行环境好像是把它当成了库函数,所以在运行的过程当中在 delete 处总是出现一些系统错误,在没有办法的情况下,就把 delete 换成了 delete1,这样的运行环境就不会把它当成库函数了。从而解决了这个问题。整个环境就可以运行了。3.在刚开始程序设计的时候,不了解什么是组建工程,什么是模块,对于程序设计本身也有不理解的地方,不知道该从何下手。然后我就先认真的看c 程序设计课程设计 ,了解怎样组建工程,理解每个模块的作用,弄清楚参考程序上的逻辑顺序以及如何设计等问题,然后再进行课程设计。十、课程设计心得及体会以前我对计科系应该学的东西基本上就不了解,这是我第一次做课件,虽然不怎么会在过程中遇到了好多困难和迷茫,程序看了一遍又一遍终于搞懂一些,然后就开始敲程序经过检查程序可以运行了,但我感觉在做前面的内容是确实需要耐心和好好理解。不懂得问同学和老师。花费了很长时间。在设计过程中一直都有错误存在,困难重重。遇到困难就开始用大量的时间进行修改以及整理,理出思路。最终将工程调试成功,添加模块成功,而这些成功的瞬间是最快乐最开心的时刻。而且通过这次课程设计我学会了好多东西,觉得自己设计的东西更加接近实际的程序要求。知道团队合作的重要性,知道怎样使团队一起合作构建程序。而且我也了解到了我们也应该去帮助别人,只要我们能够帮助他们的。十一、参考文献:1、旭等 C 程序设计课程设计 电子工业出版社 20112、谭浩强 C 程序设计(第四版) 清华大学出版社 20103、谭浩强著.C 程序设计教程.北京:清华大学出版社,2007十二、源程序:#include#include#include/#include“finance.h“#define MAX_NAME 11/家庭成员姓名最大长度#define MAX_DETAIL 21/备注最大长度#define MENU_COUNT 9/菜单选项个数#define DATA_FILE “fs.dat“/数据文件文件名typedef enum _fi_typeincome = 1,/收入payout = -1/支出fi_type;typedef struct _fi_infoint year;/年int month;/月fi_type type;/数据类型char name MAX_NAME;/家庭成员姓名float money;/收入或支出金额char detailMAX_DETAIL;/备注fi_info;typedef struct _fi_datafi_info info;/财务数据struct _fi_data *next;/指向下一个节点的指针fi_data;void add_income ();/添加收入void search_income();/查询收入明细void delete_income();/删除收入void update_income();/修改收入void add_payout();/添加支出void search_payout();/查询支出明细void delete_payout();/删除支出void update_payout();/修改支出void count_total();/统计总收入总支出void quit();/退出系统void search_data(fi_type type);/查询处理void delete_data(fi_type type);/删除处理void update_data(fi_type type);/更新处理void initialize();/系统初始化void save_to_file();/将财务数据保存到文件void clear_data();/清空链表中的数据fi_data *get_last();/得到财务数据链表的最后一个节点fi_data *get_previous(fi_data *p);/取得财务数据节点 p 的前一个节点void input_info(fi_info *info);/输入财务数据信息void show_info(fi_data *p,int count);/显示财务数据fi_data* head;char menu =“=n“|家庭财务管理系统 |n“+-+n“|收入管理 |n“| 添加收入 |n“| 查询收入明细 |n“| 删除收入 |n“| 修改收入 |n“|支出管理 |n“| 添加支出 |n“| 查询支出明细 |n“| 删除支出 |n“| 修改支出 |n“|统计 |n“| 统计总收入总支出 |n“+-+n“|输入退出系统 |n“+-+n“;void (* menu_fun)()=quit,add_income,/退出系统search_income,/添加收入delete_income,/查询收入明细update_income,/删除收入add_payout,/修改收入search_payout,/添加支出delete_payout,/查询支出明细update_payout,/删除支出count_total/统计总支出总收入;int main()int selected=0;initialize();while(selected= 0 if(scanf(“%d“,fflush(stdin);getchar();else menu_funselected();selected=0;void add_income()fi_data *p= (fi_data *)malloc(sizeof(fi_data);memset(p,0,sizeof(fi_data)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论