C项目实践家庭财务管理系统AIAlgorithms

家庭财务管理系统给家庭成员提供了一个管理家庭财务的平台,系统可以对家庭成员的收入和支出进行增加,删除、修改和查询等操作,并能统计总收入和总支出。其主要功能需求描述如下:

(1)系统主菜单界面:充许用户选择想要进行的操作,包括输入收入管理、支出管理、统计和退出系统等操作。其中收入管理包括添加收入、查询收入明细、删除收入和修改收入的操作,支出管理包括添加支出、查询支出明细、删除支出和修改支出的操作。统计是对总收入和总支出进行统计操作。

(2)添加收入处理:用户根据提示,输入要添加的收入信息,包括收入的日期,添加收入的家庭成员姓名、收入的金额以及备注信息。输入完一条收入记录,将其暂时保存在单链表中,然后返回到主菜单。

(3)查询收入明细处理:根据用户输入的年月信息在单链表中查找收入信息,如果查询成功,按照预定格式显示该收入明细。如果没有该数据,则给出提示信息。查询结束后,询问用户是否继续查找,根据用户的输入进行下一步操作。

(5)修改收入处理:首先提示用户输入要进行修改的信息的年月,如果单链表中有该收入信息存在,则提示用户输入要修改的收入日期,家庭成员姓名等信息并将结果重新存储到单链表中。如果没有找到要修改的收入信息,则给出提示信息。

(6)添加支出处理完成用户支出信息的添加,与添加收入处理类似。

(7)查询支出明细处理查询支出信息,与查询收入明细信息类似。

(8)删除支出处理,删除支出信息,与删除收入信息处理类似。

(9)修改支出处理,修改支出信息与修改收入信息类似。

(10)统计总收入和总支出处理:计算单链表中所有的收入总和和支出总和,并计算出家庭收入的结余信息

(11)退出系统。

2.总体设计

2.1功能模块设计

1.添加收入信息

主菜单中选择1,进入添加收入操作,系统调用add_income()函数来添加收入信息,首先建立单链表,函数调用input_info()函数提示用户输入收入信息,并存储到单链表中,输入完成后返回到主菜单界面。

2.查询收入明细

主菜单中选择2,进入查询收入明细操作,系统调用search_income()函数来查询收入的明细,调用search_data()函数来完成具体的查询操作。首先提示用户输入要查询的年月,如果用户输入错误,则给出输入有误提示信息,如果输入正确,在单链表中查找该年月的收入信息,如果查找成功,按照指定格式显示找到的收入信息。每页显示9条收入信息,如果找到收入的信息多于9条,按空格键翻页。如果没有找到任何信息,则给出相应的提示信息。查找成功后提示用户是否继续查找操作,如果用户输入"y"或"Y“,则再次调用次函数进行相应的操作。否则,直接返回主菜单界面。

3.删除收入信息

4.更新收入信息

5.添加支出信息

主菜单中选5,进入添加支出信息操作。系统调用add_income()函数来添加支出信息。添加支出信息的操作和添加收入信息的操作相似。

6.查询支出明细

主菜单中选6,进入查询支出明细操作,系统调用search_income()函数来查询支出明细操作。调用search_data()函数来完成具体的查询操作。查询支出明细的操作与查询收入明细的操作相似。

7.删除支出信息

主菜单选择7,进入删除支出信息操作,调用delete_data()函数进行删除支出的操作。删除支出操作与删除收入操作相似。

8.更新支出信息

主菜单中选择8,进入更新支出信息操作。调用update_data()函数进行更新支出信息操作。具体操作过程与更新收入信息操作相似。

9.统计总收入,总支出

主菜单中选择9,进入统计操作。调用count_total()函数进行总收入,总支出的统计。在单链表中,计算收入和支出的总和,并将两者相减得到家庭收入的结余,并按相应格式显示出来。统计结束之后,按任意键返回主菜单界面。

10.退出系统

主菜单中选择10,进入退出系统操作。调用quit()函数进行退出操作,首先调用save_to_file()函数,将单链表中的数据保存到文件,再调用clear_data()函数清空单链表,最后退出系统。

2.2系统处理流程

系统执行应从主菜单的选择开始,充许用户输入0-9之间的数值来选择要进行的操作,输入其它字符都是无效的,系统会给出出错的提示信息。若用户输入0,调用quit()函数退出系统;

若输入1,则调用add_income()函数,进行添加收入操作;

若输入2,则调用search_income()函数,进行查询收入明细;

若输入3,则调用delete_income()函数,进行删除收入操作;

若输入4,则调用update_income()函数,进行修改收入操作;

若输入5,则调用add_payout()函数,进行添加支出操作;

若输入6,则调用search_payout()函数,进行查询支出明显;

若输入7,则调用delete_payout()函数,进行删除支出操作;

若输入8,则调用update_payout()函数,进行更新支出操作;

若输入9,则调用count_total()函数,进行统计总收入,总支出操作。

1.添加操作

首先建立单链表,调用input_info()函数,提示用户输入要添加的收入或支出信息,并将输入信息存储到单链表中,输入完成之后返回主菜单界面。

2.查询操作

首先提示用户输入要查询的年月,如果用户输入错误,给出相应的提示信息;如果用户输入正确,则根据输入的数据在单链表中查找收入或支出的信息。如果没有找到,则给出没有数据的提示信息,如果找到,则判断记录个数是否小于9,如果小于9,直接显示结果,否则提示用户按空格键翻页。查询操作的处理流程图如下所示:

3.删除操作

首先提示用户输入要删除的年月,如果用户输入错误,给出相应的提示信息,如果输入正确,则在单链表中查询收入或支出的信息,如果没有找到,给出没有数据的提示信息,如果找到,显示找到的记录信息,并提示用户输入对应的序号进行删除操作。删除成功之后,给出提示信息。删除操作的处理流程如图:

4.修改操作

首先提示用户输入要查询的年月,如果输入错误,给出相应的提示信息,如果输入正确,则先在单链表中查找收入或支出的信息,如果没找到,则给出提示信息,否则显示找到的记录信息,并提示用户输入序号,进行修改,用户可以根据提示信息输入要修改的收入或支出信息。修改操作的处理流程如图:

2.3详细设计与系统实现

打开vs,新建win32consoleApplication,选择EmptyProj,点击Finished完成FinanceMng项目创建

//HeaderInformation#include家庭财务管理系统主要是对家庭成员的基本信息及财务收支信息的管理,其中涉及到信息我们将它们归类并希望通过自定义三个数据类型来集中管理和使用这些信息,那么其中有些字段由于其本身的需求,最好定义为字符数组来处理,为了具有可扩展性和便于更好的维护,需要先定义一些常量宏,这样当这些字段的大小发生变化时,可以通过简单的修改这些常量宏来达到目的,这其中包括定义家庭成员姓名的最大长度、收支信息记录的备注最大长度、菜单选项个数以及数据文件名等常量宏的定义,具体定义如下:

//DataStructDefinition//自定义枚举类型fi_type,用来表示收入支出typedefenum_fi_type{income=1,//收入payout=-1//支出}fi_type;.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}接下来定义一个存储家庭财务信息的结构体fi_info

typedefstruct_fi_info{intyear;intmonth;fi_typetype;//数据类型,即财务类型是收入还是支出charname[MAX_NAME];//家庭成员姓名,属于TA的收入或由TA支出floatmoney;//收入或支出的金额chardetail[MAX_DETAIL];//备注信息}fi_info;.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}还需要定义一个存储财务数据结构的结构体fi_data,通过此结构把财务数据连接成链表,具体实现如下:

#includeFinanceMain.h

系统的执行应从主菜单处开始,所以首先来实现main入口函数,将主菜单打印出来,并等待用户输入相应的操作选项,如果输入有误,则给出提示信息,并提示重新输入,直到输入正确为止。具体实现如下:

1.添加收入

函数名称:add_income

函数功能:用来添加收入信息的操作。

处理过程:首先建立单链表,调用input_info()函数,提示用户输入收入信息,并将输入的信息存储到单链表中,输入完成后返回到主菜单界面。具体实现如下:

//添加收入voidadd_income(){//定义一个存储财务数据的结构体指针p,并申请内存fi_data*p=(fi_data*)malloc(sizeof(fi_data));if(NULL==p)throwprintf("内存申请失败...\n");//如果内存申请失败则抛出异常memset(p,0,sizeof(fi_data));//置空p->next=NULL;input_info(&(p->info));//录入相应的财务数据信息p->info.type=income;//财务类型标识为收入//如果当前头指针为空,表示当前单链表为空,则把p作为头节点并将地址赋值给headif(NULL==head){head=p;}else{//否则寻找当前单链表的最后一个节点并把p连接到这个节点后面get_last(head)->next=p;}}因为查询,删除和修改信息在收入管理中的查询收入明细、删除收入信息、更新收入信息这三项操作和支出管理中的查询支出明细、删除支出以及更新支出等三项操作操作几乎相同,仅仅只是财务数据类型不同,所以我们直接把查询、删除和修改信息这三项独立出来,写成公共模块,来供收入管理或支出管理需要使用时作相应的调用即可,即避免代码冗余,亦便于维护。

函数名称:search_income

函数功能:用来查询收入明细的操作。函数中调用search_data()来完成收入明细的查询。具体实现如下:

//查询收入明细voidsearch_income(){search_data(income);}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}3.删除收入

函数名称:delete_income

函数功能:用来删除收入信息的操作,在函数中调用delete_data()来完成收入信息的删除,具体实现如下:

//删除收入信息voiddelete_income(){delete_data(income);}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}4.修改收入

函数名称:update_income

函数功能:用来修改收入信息的操作,通过调用update_data()函数来完成收入信息的修改,具体实现如下:

//更新收入信息voidupdate_income(){update_data(income);}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}5.添加支出信息

函数名称:add_payout

函数功能:添加支出信息的操作

处理过程:首先建立单链表、调用input_info()函数提示用户输入支出信息,并将输入信息存储在单链表中,输入完成后返回到主菜单界面。实现过程和添加收入雷同,只是录入的财务类型为支出。具体实现如下:

//添加支出信息voidadd_payout(){fi_data*p=(fi_data*)malloc(sizeof(fi_data));memset(p,0,sizeof(fi_data));p->next=NULL;input_info(&(p->info));p->info.type=payout;if(NULL==head){head=p;}else{get_last(head)->next=p;}}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}6.查询支出明显

函数名称:search_payout

函数功能:用来查询支出明细操作,通过调用search_data()来实现,具体实现如下:

//查询支出信息明显voidsearch_payout(){search_data(payout);}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}7.删除支出

函数名称:delete_payout

函数功能:通过调用delete_data()函数来完成删除支出信息的操作,具体实现如下:

//删除支出信息voiddelete_payout(){delete_data(payout);}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}8.修改支出

函数名称:update_payout

函数功能:通过调用update_data()来修改支出信息,具体实现如下:

//更新支出信息voidupdate_payout(){update_data(payout);}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}9.统计总收支结余信息

函数名称:count_total

函数功能:在单链表中,分别计算出收入和支出的总和,并将两者相减算出结余信息,具体实现如下:

函数名称:quit

函数功能:将单链表中的数据先保存到本地磁盘文件中,然后清空单链表中的数据,最后退出系统。具体实现如下:

//退出系统voidquit(){save_to_file();clear_data();exit(0);}接下来对前面抽象出来的查询、删除和修改三个处理函数进行实现

1.查询处理

函数名称:search_data

函数功能:收入和支出的查询操作。

处理过程:

(1)提示用户按照指定格式输入要查询的年月,如果用户输入错误,则给出提示信息;如果输入正确,则在单链表中查找该年月的信息

(2)如果查找成功,则调用show_info()函数显示找到的信息,并判断查询结果是否小于9条,如果大于9条信息,则提示按空格键进行翻页操作。

(3)如果没有找到符号年月的信息,则给出提示信息

(4)提示用户是否继续进行查询操作,如果用户输入"y"或"Y",则再次调用本函数进行处理,否则返回主菜单界面。具体实现如下:

函数名称:delete_data

函数功能:收入与支出的删除操作

处理流程:

(2)如果查找成功,且查找的记录条数小于9条,则直接调用show_info()函数显示查找到收支信息,如果查找的记录条数大于9,则调用show_info()函数将当前查询到的9条信息显示出来,并提示用户按空格键进行翻页操作。

(3)最后提示用户输入要删除的的收支信息的序号,完成删除操作。

(4)如果查找不成功,则给出相应的提示信息

(5)删除完成之后,提示用户是否继续进行删除操作,如果用户输入"y"或"Y",则继续进入删除操作界面,否则返回主菜单界面。具体实现如下:

3.更新处理

函数名称:update_data

函数功能:收支信息的更新操作

(1)首先提示用户输入要更新的信息所属的年月,然后根据此输入进行查询

(2)如果查询成功,且查找的记录条数小于9,则直接调用show_inof()函数显示出来,如果大于9,则提示空格键翻页操作。

(3)提示用户输入要更新的信息的序号,然后调用input_info()函数输入要更新的信息,完成更新操作。

(4)如果查找不成功,则给出提示信息

(5)提示用户是否继续进行更新操作,如果用户输入"y"或'Y",则继续进行更新操作,否则直接返回主界面

更新操作和删除操作类似,只是将删除操作中完成具体删除操作的部分替换成调用input_info()来完成更新数据的录入工作。其它几乎是一样的。具体实现如下:

1.系统初始化

函数名称:initialize

函数功能:系统初始化操作,包括数据文件和单链表的初始化,具体实现如下:

函数名称:save_to_file

函数功能:将单链表中的数据保存到文件中。具体实现如下:

函数名称:clear_data

函数功能:退出系统时调用此函数,清空单链表中的数据。具体实现如下:

//清空单链表中的数据voidclear_data(){fi_data*p=NULL;while(NULL!=head){fi_data*p=NULL;//从链表开始处开始清空数据if(NULL!=head->next){p=head;head=head->next;free(p);p=NULL;}else{free(head);head=NULL;}}}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}4.取得最后一个节点地址

函数名称:get_last

函数功能:取得收支数据链表中的最后一个节点指针。具体实现如下:

//取得最后一个节点,并返回此节点指针fi_data*get_last(fi_data*head){fi_data*p=head;if(p==NULL){returnp;}while((NULL!=p)&&(NULL!=p->next)){p=p->next;}returnp;}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}5.取参数p的前一个节点

函数名称:get_previous

函数功能:取得数据节点p的前驱节点。具体实现如下:

//取得当前节点的前驱节点fi_data*get_previous(fi_data*p){fi_data*previous=head;while(previous!=NULL){if(previous->next==p){break;}previous=previous->next;}returnprevious;}.csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)}.csharpcodepre{margin:0}.csharpcode.rem{color:rgba(0,128,0,1)}.csharpcode.kwrd{color:rgba(0,0,255,1)}.csharpcode.str{color:rgba(0,96,128,1)}.csharpcode.op{color:rgba(0,0,192,1)}.csharpcode.preproc{color:rgba(204,102,51,1)}.csharpcode.asp{background-color:rgba(255,255,0,1)}.csharpcode.html{color:rgba(128,0,0,1)}.csharpcode.attr{color:rgba(255,0,0,1)}.csharpcode.alt{background-color:rgba(244,244,244,1);width:100%;margin:0}.csharpcode.lnum{color:rgba(96,96,96,1)}6.输入收支的数据信息

函数名称:input_info

函数功能:提示用户按指定格式输入收支信息。具体实现如下:

函数名称:show_info

函数功能:按指定格式显示收支信息。具体实现如下:

1.F5运行,首先进入主菜单界面,充许用户输入0-9之间的数值,以实现不同的操作,如图:

====================================================

|家庭财务管理系统|

+--------------------------------------------------+

|收入管理|

|<1>添加收入|

|<2>查询收入明细|

|<3>删除收入|

|<4>修改收入|

|支出管理|

|<5>添加支出|

|<6>查询支出明细|

|<7>删除支出|

|<8>修改支出|

|统计|

|<9>统计总收入总支出|

|输入<0>退出系统|

>请选择要进行的操作[0-9]:

2.添加收入信息

>请选择要进行的操作[0-9]:1

>请输入年月(YYYY/M):2010/1

>请输入家庭成员姓名(最大长度为10):Mike

>请输入金额:100000

>请输入备注(最大长度为20):payforworking

3.查询收入明细

选择操作2,可以查询某年月的收入明细情况。首先系统提示输入要查询的年月,然后进行查询如果查询成功则显示查询到的信息,如果查询到的信息超过9条,则提示用户可以空格键翻页。如图:

>请选择要进行的操作[0-9]:2

>请输入要查询的年月(例如:2009/1)2010/1

+---+---------+------+----------+----------+------------------------+

|No.|年-月|类型|姓名|金额|备注|

|1|2010-01|收入|Mike|10000.00|payforworking|

|2|2010-01|收入|Jhon|100.00|payment|

|3|2010-01|收入|Stive|203.00|working|

|4|2010-01|收入|Yse|3923.00|workingforhours|

|5|2010-01|收入|Sasu|395.00|workingforhours|

|6|2010-01|收入|Jane|8958.00|payment|

|7|2010-01|收入|Xlie|485.00|loanfrombank|

|8|2010-01|收入|Xeson|495.00|working|

>继续查找其它数据?(YorN)

查询信息超过9条时的情况(图示情况是已经按下空格键将余下的信息也一起显示出来了):

|9|2010-01|收入|Weon|987.00|fortestmorethan9|

>输入空格并回车翻页,按其它键退出....

|1|2010-01|收入|Mik|618.00|fortestingnow|

|2|2010-01|收入|Jhons|781.00|fortesting9|

4.删除收入信息

选择操作3,则进行删除操作,系统提示输入要查询的年月,然后进行查询,如果查询成功,系统会将符号查询条件的信息显示出来,然后提示用户输入要删除的信息的序号,完成删除操作。如果查询到,则给出提示信息。删除完成之后将删除完之后的信息重新打印出来,并可继续删除操作或返回主界面。如图:

>请选择要进行的操作[0-9]:3

>请输入要查询的年月(例如:2009/1):2010/1

>输入空格并回车翻页.输入对应的序号删除.其它键退出.请输入:9

>删除成功!

|9|2010-01|收入|Mik|618.00|fortestingnow|

>输入空格并回车翻页.输入对应的序号删除.其它键退出.请输入:

5.修改收入信息

选择操作4,进行修改收入信息的操作,系统提示输入要查询的年月,如果查询成功,系统会将符合条件的信息显示出来,再提示用户输入要修改的收入信息的序号,然后调用input_info函数使按照提示信息进行修改操作。修改完成后,系统会立即打印修改后的信息,并提示是否继续操作。如图:

>请选择要进行的操作[0-9]:4

>请输入要查询的年月(例如:2009/1):2010/2

|1|2010-02|收入|Alice|2003.00|working|

>输入对应的序号修改,其它键退出,请输入:1

>请输入年月(YYYY/M):2010/2

>请输入家庭成员姓名(最大长度为10):Mikes

>请输入金额:9589

>请输入备注(最大长度为20):payment

|1|2010-02|收入|Mikes|9589.00|payment|

>修改成功...

>继续查找其它数据?(YorN)

支出管理操作与收入管理操作类似,下面就不再赘述操作过程,而直接上图了

6.添加支出信息,如图:

>请选择要进行的操作[0-9]:5

>请输入年月(YYYY/M):2010/3

>请输入家庭成员姓名(最大长度为10):Woen

>请输入金额:85

>请输入备注(最大长度为20):forbreakfirst

7.查询支出明细,如图:

>请选择要进行的操作[0-9]:6

>请输入要查询的年月(例如:2009/1)2010/3

|1|2010-03|支出|Stensn|623.00|watchmoving|

|2|2010-03|支出|Woen|85.00|forbreakfirst|

8.删除支出信息,如图:

>请选择要进行的操作[0-9]:7

>请输入要查询的年月(例如:2009/1):2010/3

>输入对应的序号删除.其它键退出.请输入:1

>删除成功...

>继续查找其它数据?(YorN)N

9.修改支出信息,如图:

>请选择要进行的操作[0-9]:8

>请输入要查询的年月(例如:2009/1):2010/3

|1|2010-03|支出|Woen|85.00|forbreakfirst|

>请输入家庭成员姓名(最大长度为10):Stenph

>请输入金额:2039

>请输入备注(最大长度为20):lunchfee

|1|2010-03|支出|Stenph|2039.00|lunchfee|

10.统计收支结余,如图:

>请选择要进行的操作[0-9]:9

+------------+------------+------------+

|合计收入|合计支出|结余|

|125647.00|2039.00|123608.00|

>按任意键返回主菜单...

4.总结与Bug

Bug.1

在函数实现的时候把get_last()函数写错了,本应该写成:fi_data*get_last(fi_data*head)

Bug.2

delete_data()函数,

//修改input-48为input-48-1因为数组的下标是从0开始的i=input-48-1;

否则输入最后一个序号,则最后删除的时候因为数组越界,造成错误,因为数组小标是从0开始排起的

THE END
1.家庭财务管理系统的设计与实现20240805144800.doc管理系统家庭财务管理系统的设计与实现.doc 27页内容提供方:瀚海文化 大小:452.7 KB 字数:约1.19万字 发布时间:2024-08-06发布于北京 浏览人气:6 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)家庭财务管理系统的设计与实现.doc 关闭预览 想预览更多内容,点击免费在线...https://max.book118.com/html/2024/0805/7054030162006141.shtm
2.信息与通信RationalRose建模家庭财务管理系统资源描述 单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,、目的,通过“家庭财务管理系统”,UML,建模过程了解面向对象的系统分析与设计方法,、建模环境,Windows xp,RationalRoseforWin.200...http://m.zhuangpeitu.com/article/252065713.html
1.关注可白嫖源码家庭账户资金管理系统,怎么设计这个系统呢,不会的...设计一个家庭账户资金管理系统的目标是帮助家庭成员协同管理和规划家庭财务,跟踪日常支出、储蓄计划、预算和投资等资金流动情况。以下是一个详细的系统设计方案,确保家庭成员能够有效控制家庭财务,实时掌握资金状态。 1. 系统架构设计 家庭账户资金管理系统应该具备跨平台访问的能力,支持B/S架构,允许用户通过浏览器、移动端...https://blog.csdn.net/WX_BYSJ1992/article/details/143094298
2.家庭财务管理系统设计与实现5篇合理规划和管理家庭财务,不仅可以帮助家庭成员更好地把握财务状况,节约支出,还能够为家庭未来的生活提供更多的保障。针对这一需求,家庭财务管理系统的设计与实现变得尤为重要。本文将从系统设计的角度,为大家介绍如何设计和实现一套家庭财务管理系统,希望可以帮助家庭更好地管理财务,实现财务自由。 系统需求分析 在进行...https://hsy.chanjet.com/wenku/wk6142f4cb45b5.html
3.家庭财务管理系统的设计与实现开题报告.docx家庭财务管理系统的设计与实现开题报告一、选题背景与意义随着现代社会经济的发展和人们生活水平的提高,人们对于家庭财务管理的意识越来越重视。然而,许多人由于缺乏有效的财务管理系统,导致家庭财务管理混乱不堪,难以进行有效的理财。如何设计一款优秀的家庭财务管理系统,成为当前一个十分值得重视的问题。本文拟设计和实现一...https://m.renrendoc.com/paper/323152241.html
4.家庭财务管理系统的设计与实现[1]李霞,郭肇毅.家庭财务管理系统的设计与实现[J].信息与电脑,2016,(23):157-158.doi:10.3969/j.issn.1003-9767.2016.23.066. [2]李霞,郭肇毅.家庭财务管理系统的设计与实现[J].信息与电脑(理论版),2016,(023):157-158. [3]刘娅,王芬.家庭财务管理系统的设计与实现[J].福建电脑,2006,(1):168-169....https://d.wanfangdata.com.cn/periodical/kxlt-x200911082
5.家庭财务管理系统的设计与实现家庭财务管理系统的设计与实现 家庭财务管理系统是一个可以帮助家庭有效管理财务的工具。它可以帮助家庭成员记录和追踪他们的收入和支出,并提供方便的数据分析和报告功能。通过家庭财务管理系统,家庭可以更好地了解他们的财务状况,制定更好的预算和理财计划。 设计和实现一个有效的家庭财务管理系统是一项复杂的任务。首先,...https://www.huoban.com/news/post/154046.html
6.财务管理专业大学生职业生涯规划书范文(精选10篇)2、财务管理特殊环境: 由于中国的管理科学发展较晚,管理知识大部分源于国外,中国企业的`财务管理还有许多不完善的地方。中国急需管理人才,尤其是经过系统培训的高级管理人才。因此,财务管理市场前景广阔。但经济与世界接轨的同时财务管理也与世界接轨,为了适应以后的工作,身为财务管理的学生应做好充分的准备。 https://3g.yjbys.com/jiuyezhidao/zhiyeguihua/1449821.html
7.北京大学中国教育财政科学研究所5. 产教融合与应用型高校建设:组织制度创新与机制设计(负责人:郭建如,北京大学教育学院教授) 6. 高校财政预算拨款制度改革与绩效管理探究(负责人:唐万宏,南京师范大学教授、江苏省教育会计学会会长、江苏省教育财政科学研究所所长) 7. 民促法及其实施条例与地方政策出台背景下的民办教育(负责人:王江璐,北京大学中国教...https://ciefr.pku.edu.cn/xshd/xshy/9aa79cece0a74447be2189ad49ec92e3.htm
8.关于优化方案范文(通用15篇)因此开发财务管理系统要以此为理念, 梳理财务工作环节与各业务环节的关联度并建立各个节点的系统连接。财务工作流程从内部操作转为各业务客体独立操作, 使原有的到财务部门排队办事变成随时随地在网上办理, 财务部门审批处理后经费直接划转的形式, 开通网上报账、劳务费发放网上提交委托等远程手段。综上所述,优化高校财务...https://www.wenshubang.com/fangan/1894780.html
9.医院家庭一体化(精选八篇)[1]王勇.高校后勤物流与财务一体化管理系统设计与实现[J].安徽工程科技学院学报, 2007 (3) . [2]王新玲.企业财务业务一体化系统规划与实施[J].财会学习, 2008 (8) . 医院预算支出一体化管理措施初探 篇6 2012年, 我国开始在全国公立医院范围内实行《新医院会计制度》与《新医院财务制度》, 而随着两年的开展...https://www.360wenmi.com/f/cnkeyo2bq62n.html
10.家庭财务管理系统的设计与实现家庭财务管理系统的设计与实现刘光彬 随着经济水平的不断提高,家庭收入、支出日渐复杂,给家庭财务管理增加了难度。因此,本文设计实现了该家庭财务管理系统,本系统基于家庭经济财务的需要提供了家庭财务数据统一管理,便于家庭人员做出合理的财务决策,以帮助解决家庭财务问题。 本系统共设计了四个模块,分别为家庭账簿管理、...https://wap.cnki.net/lunwen-1013118743.html
11.计算机开题报告第七周 :网站系统规划和Sql Server数据库设计。 第八周 :前台:网站首页及基本功能的实现 。 第九周 :后台:管理端用户及在线测试模块的设计 第十周 :完成毕业设计中期检查报告 第十一周:完善前台布局并进行编码设计。 第十二周:依据后台功能划分进行后台布局和编码。 https://www.fwsir.com/Article/html/Article_20221120154127_2088788.html
12.财务计划书(精选19篇)切实促进员工按操作规程办理业务,今年,我们财务科将全面建立、健全信用社业务操作考核办法,将日常业务和微机处理充分结合,加强内勤员工在制度落实上的考核力度,制定出详细的奖罚办法,以此来有效提高员工按规程进行业务操作意识,确保我辖各项业务的.正常运转和全年业务操作安全无事故,促进我县年底各项财务管理制度的全面落实...https://mip.ruiwen.com/gongwen/jihuashu/951252.html
13.包装塑造独特的物流企业形象未来,品牌包装设计将与数字化技术相结合,实现更加精准的包装设计和生产。数字化技术可以帮助企业更好地了解消费者需求和市场趋势,从而进行有针对性的包装设计,提高产品的附加价值和市场竞争力。 综上所述,未来包装品牌建设将朝着可持续性、智能化、多样化、虚拟现实和数字化等方向发展。企业需要根据市场需求和消费者需求...https://www.rhtimes.com/news/Design-NEWS7644.html
14.基于SpringBoot的企业员工绩效管理系统的设计与实现+一稿+开题...购买后自动跳转百度云,项目自提,轻松方便。 若有个人部署运行问题,点击右侧客服按钮咨询站长 站长联系方式 QQ:3484724101 微信:bgouyangxiaobai 点击微信公众号下单(含平台费,稍贵) 项目介绍: 基于SpringBoot的企业员工绩效管理系统的设计与实现...http://ym.maptoface.com/archives/61572