家庭财务管理课程设计报告.docx
《家庭财务管理课程设计报告.docx》由会员分享,可在线阅读,更多相关《家庭财务管理课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
家庭财务管理课程设计报告
信息工程学院
课
程
设
计
报
告
项目名称:
家庭财务管理系统的分析和设计
项目组长:
叶
项目成员:
杨刘
班级名称:
11信管3(本)
专业名称:
信管管理和信息系统
完成时间:
2012年5月21日
信息工程学院制
一、案例描述(小四号字体,段前断后0.5行)
1.、总体描述
家庭财务管理系统是一个典型的管理信息系统,主要运用添加、删除、修改、查询、显示等操作,给用户提供了一个在计算机上实现家庭的各项财务收支管理的平台,能够为每一个家庭的管理者提供充足的信息和快捷的查询手段,极大地提高家庭财务管理的效率,方便家庭管理者的合理理财。
2、模块描述
1)菜单设计
主界面由封面图案、收入管理、支出管理、统计四大部分组成。
其中,收入管理和支出管理两部分中各包含添加、查询、删除、修改、显示五大功能,而统计部分则包含统计总收入(总支出)的功能。
封面主要利用ptintf函数,摆出各式各样的图形,又用上了system()更改了页面的背景颜色、字体颜色、家庭财务管理系统的标题,以求达到美化封面的作用,而其余六大功能则是完善该家庭财务管理系统。
2)load模块
通过创建链表完成初始化。
链表创建完成后,把读取的资料先放在linshi中。
该模块的创建为实现接下来的一系列功能打下坚实基础。
3)cover模块
作为程序的封面,对主界面的颜色、尺寸、图案进行设置,起到美化作用。
同时,把程序里的每一项主要功能的名称显示到主界面上,使界面更加亲近、友好,方便用户进入并进行使用,在不知不觉中提升了程序的档次。
4)add模块:
用于添加用户的信息。
创建用户信息,依次输入家庭成员的姓名、收入(支出)的具体日期(可根据系统已有时间添加)、收入(支出)金额、收入(支出)备注等详细信息,完善用户的资料,并将其保存在文件记录中。
添加完一人信息后,界面提示用户“是否继续添加?
(YorN)”。
若选择继续添加,则重复上述步骤,添加用户信息,并将其详细信息一并保存到文件记录中,文件记录加1。
其中,用type判断是收入还是支出。
5)search模块
用于查询已添加的用户的信息。
以日期、姓名、金额等其中任意一项为关键词进行搜索并显示用户的详细信息。
若输入的关键词不存在,则提示用户“选择错误,请重新输入”。
若输入关键词正确,则显示该联系人的所有相关信息。
6)delete模块
用于删除用户不需要或输入错误的用户的相关信息。
首先,以姓名为关键词进行搜索并显示该联系人的所有已输入的信息。
然后,提示用户需要删除该联系人的第几条信息,删除该条完毕后,提示用户“是否继续删除?
(YorN)”。
若当前家庭成员所有信息均已删除,则再继续删除时,提示“家庭财务管理内无任何信息!
”。
7)show模块
用于显示已输入的相关信息。
该模块建立后,用户通过点击该模块的名称,系统先提示用户选择以同月、同日、姓名、全部信息等其中一项关键词为显示依据,选择所需要显示的同一类型的详细信息,以便使所有信息一目了然,有利于用户核对之前所输入的信息,方便用户使用。
8)save模块
用于保存之前用户输入的所有用户的有用信息。
该模块建立后,用户之前所输入的所有用户的详细信息皆可保存到指定文件中,方便用户在下一次使用时仍能轻松、便捷地找到其所需的有用信息。
9)修改模块
用于重新输入用户需要却输入错误的用户的相关信息。
先以姓名为关键词查找到需要修改的用户的所有相关信息。
然后删除该条输入错误的信息,并重新输入正确有效的信息,最后保存。
二、界面设计
菜单:
序号1~5:
进行收入管理
序号6~10:
进行支出管理
序号11~12:
进行统计
本软件界面友好,不难操作,根据页面提示进行操作即可。
三、模块化设计方案
1、系统主要函数及功能(五号黑体)
1)load函数:
创建链表,打开并读取文件,保存相关资料,起到一定的储存功能。
2)添加功能:
添加用户的相关收支信息,用户可根据选项选择是用系统时间还是自己添加时间,然后再输入相关用户姓名、金额、备注等基本信息,之后可自行选择是否继续添加,最后系统会自动保存用户信息,返回系统用户界面。
3)删除功能:
用户输入需要删除的姓名后系统根据用户输入信息删除,之后还可自行选择是否继续删除,待所有删除完毕后,返回系统用户界面。
4)修改功能:
用户根据系统提示输入需要修改的姓名,然后根据用户输入信息进行删除、重新添加,之后自行选择是否继续,在全部修改成功之后,返回系统用户界面。
5)查询功能:
用户根据系统提示输入判断资料,系统根据用户输入的信息进行查询,在查询成功之后,之后自行选择是否继续,否,则返回系统用户界面。
6)显示功能:
系统将根据用户的选择显示家庭财务管理系统中的相关信息。
7)统计功能:
系统将根据用户需要统计出总收入或总支出。
8)退出功能:
完成所有操作后,用户可以退出家庭财务管理系统。
9)main函数:
主函数提供用户操作界面(主菜单),供用户选择相应的功能模块。
2、主函数调用各功能函数流程图
四、数据结构描述
#include#include#include
#include#include
#definelensizeof(structmanage)
structmassage
{intyear;intmonth;intday;inttype;//1表示收入,-1表示支出
charname[20];floatmoney;charbeizhu[100];};
structmanage
{structmassageinfo;structmanage*next;};
intn,a=0;//计算结点数structmanage*head=NULL;/使首结点为空,全局变量
五、算法设计
六、程序运行结果
七、总结
1、工作时间(5号黑色)
封面15分钟添加功能1小时
删除功能1小时查询功能1小时
修改功能1小时显示功能30分钟
统计30分钟
2、分工情况
封面设计:
总体框架:
流程图:
拓展功能:
显示功能设计:
报告模块描述:
2、心得体会
杨:
家庭财务管理软件的开发主要考察我们对于C语言中的结构体函数、链表、指针及使用以文本方式建立文件和打开文件等知识的掌握。
因为结构的复杂性,我们在编写过程中遇到了一系列的困难和错误。
当然,对于初学者的我们而言,在程序运行中出现这些错误是在所难免的。
但是当错误出现时,我们不能选择任其自生自灭,而是要怀着刻苦钻研的态度,通过团队协作的方式力争解决,做到允许用户排除环境错误继续运行程序。
同时,在设计程序时还应该考虑全面,避免出现低级的漏洞。
作为一名的信管专业的学生,更加需要重视使用此程序设计,使得将来计算机可以在各个家庭中占有重要地位,也为计算机未来更长远的发展带来诸多可能的希望。
同时也使各个家庭成员更多地了解计算机为计算机的广泛使用做好准备。
刘:
通过这次程序设计:
一、让我懂得了只有平时多练习才能真正地掌握程序,学会分析这些程序的功能并正确的运用,了解程序的特点。
二、然我明白认真和细心会让我们在编写程序时节约很多时间。
三、团队的合作非常重要,这有利于我们团队成员之间取长补短,明确分工有利于我们更好的完成任务,并减少打酱油的人,从而确保每位成员都学到知识。
在本次试验中,我们小组成员深刻的体会到了基础知识的重要性,在编写程序的过程中,我们小组遇到了很多的问题,特别是细节问题在解决了问题后,我们明白了,只有拥有过硬的专业基础知识,在完成任务时才能得心应手,节省更多的时间。
在本次试验中,我们成员之间彼此帮助,依彼之长,补彼之短,在工作中积极参与,服从分配,工作热情高涨,团队合作出色,并且,在老师的指导下圆满的完成了任务。
这是全组沉吟不懈努力的结果,这让我们深刻体会到“知识就是力量”的道理。
一个人的力量是有限的,但是大家的力量却是无限的。
叶:
在本次实验中,我们小组共同协作完成了“家庭财务管理”这个程序的大体设计。
在完成这项任务的过程中,我们主要运用了C语言中指针、链表、以及系统时间相关知识进行了代码的编写,由于是指针、链表的知识是初学,因此我们小组遇到了很多困难,特别是一些细节问题。
但这丝毫没有影响我们对这项设计的热情。
我们在图书馆研究、讨论,查阅相关书籍,尽自己最大的努力解决难题。
遇到商讨后仍无法解决的问题,我们就虚心请教老师,在老师的点拨后继续努力钻研,最终完成了本次程序设计的实践要求。
本次课题设计让我们对C语言有了进一步的了解,丰富了C语言这门学科的知识。
同时,我们小组认为本次“家庭财务管理”软件的开发,是一次将计算机应用于现实管理的很有意义的实践,使用该系统将给用户的理财需求带来极大方便。
附页(源代码附加注释)
#include#include#include
#include#include#include
#definelensizeof(structmanage)
structmassage
{intyear;intmonth;intday;inttype;//1表示收入,-1表示支出
charname[20];floatmoney;charbeizhu[100];};
structmanage
{structmassageinfo;structmanage*next;};
intn,a=0,j;//计算结点数
structmanage*head=NULL;//使首结点为空,全局变量
structmanage*load()//初始化
{structmanage*q=NULL;structmanage*p;
FILE*fp;fp=fopen("data11.txt","rb");//读取文件
if(fp!
=NULL)
{structmassagelishi;//将读取的资料先存放在lishi中
while(fread(&lishi,sizeof(structmassage),1,fp)==1)
{p=(structmanage*)malloc(len);p->info=lishi;
p->next=NULL;
if(head==NULL){head=p;q=p;}
else{q->next=p;q=p;}n++;}fclose(fp);}
return(head);}
voidcover()//封面
{system("cls");system("color3b");system("modeconcols=70");
system("title家庭财务管理系统");
printf("\n");printf("\n");printf("\n");printf("\n");
printf("\t\t(>^ω^<)(>^ω^<)(>^ω^<)\n");
printf("\n");printf("\t\t家庭财务管理系统欢迎您\n");printf("\n");
printf("\t\t(>^ω^<)(>^ω^<)(>^ω^<)\n");printf("\n");
printf("▁▂▃▄▅▆▇▉▉☆☆☆☆☆☆▉▉▉▇▆▅▄▃▂▁\n");
printf("\t\t\t收入管理\n");printf("1:
添加收入\n");
printf("2:
查询收入明细\n");printf("3:
删除收入\n");
printf("4:
修改收入\n");printf("5:
显示收入\n");
printf("▁▂▃▄▅▆▇▉▉☆☆☆☆☆☆☆▉▉▉▇▆▅▄▃▂▁\n");
printf("\t\t\t支出管理\n");printf("6:
添加支出\n");
printf("7:
查询支出明细\n");printf("8:
删除支出\n");
printf("9:
修改支出\n");printf("10:
显示支出\n");
printf("▁▂▃▄▅▆▇▉▉☆☆☆☆☆☆☆▉▉▉▇▆▅▄▃▂▁\n");
printf("\t\t\t统计\n");printf("11:
统计总收入\n");
printf("12:
统计总支出\n");
printf("▁▂▃▄▅▆▇▉▉☆☆☆☆☆☆☆▉▉▉▇▆▅▄▃▂▁\n");
printf("0:
退出\n");}
structmanage*add(inttype)//添加功能(用type判断为收入还是支出)
{system("color78");structmanage*p0,*p1;charch;
p0=(structmanage*)malloc(len);printf("是否用系统时间(yorn)\n");
fflush(stdin);scanf("%c",&ch);if(ch=='y'||ch=='Y')
{structtm*local;time_tt;t=time(NULL);
local=localtime(&t);p0->info.year=local->tm_year+1900;
p0->info.month=local->tm_mon+1;p0->info.day=local->tm_mday;}
else
{printf("日期:
\n");printf("年:
");scanf("%d",&p0->info.year);
printf("月:
");scanf("%d",&p0->info.month);
printf("日:
");scanf("%d",&p0->info.day);}
printf("姓名:
");scanf("%s",p0->info.name);
printf("金额:
");scanf("%f",&p0->info.money);
printf("备注:
");scanf("%s",p0->info.beizhu);p0->info.type=type;
if(head==NULL)/*原来的链表是空表*/
{head=p0;p0->next=NULL;}/*使p0指向的结点作为头结点*/
else
{for(p1=head;p1->next!
=NULL;p1=p1->next);p1->next=p0;
p0->next=NULL;}/*插到最后的结点之后*/n++;return(head);}
intdate(inttype)
{structmanage*p;intnian,yue,ri;
printf("请输入要查询的日期:
\n");printf("年:
");scanf("%d",&nian);
printf("月:
");scanf("%d",&yue);printf("日:
");scanf("%d",&ri);
for(p=head;p!
=NULL;p=p->next)
{if(p->info.type==type&&p->info.year==nian&&p->info.month==yue&&p->info.day==ri)
{printf("日期:
%d.%d.%d\n",p->info.year,p->info.month,p->info.day);
printf("姓名:
%s\n",p->info.name);
printf("金额:
%f\n",p->info.money);
printf("备注:
%s\n",p->info.beizhu);
printf("***********************************************************\n");}}}
voidmingzi(inttype)
{structmanage*p;charmingz[20];
printf("请输入要查询的姓名:
");scanf("%s",mingz);
for(p=head;p!
=NULL;p=p->next)
{if(p->info.type==type&&strcmp(p->info.name,mingz)==0)
{printf("日期:
%d.%d.%d\n",p->info.year,p->info.month,p->info.day);
printf("姓名:
%s\n",p->info.name);printf("金额:
%f\n",p->info.money);
printf("备注:
%s\n",p->info.beizhu);
printf("***********************************************************\n");}}}
intjine(inttype)
{structmanage*p;floatmone;
printf("请输入要查询的金额;");scanf("%f",&mone);
for(p=head;p!
=NULL;p=p->next)
{if(p->info.type==type&&p->info.money==mone)
{printf("日期:
%d.%d.%d\n",p->info.year,p->info.month,p->info.day);
printf("姓名:
%s\n",p->info.name);printf("金额:
%f\n",p->info.money);
printf("备注:
%s\n",p->info.beizhu);
printf("***********************************************************\n");}}}
voidsearch(inttype)//查询功能
{system("color78");intchoice;printf("请输入要查询的依据:
\n");
printf("\t\t1.日期:
\n");printf("\t\t2.姓名:
\n");printf("\t\t3.金额:
\n");
scanf("%d",&choice);switch(choice)
{case1:
date(type);break;//根据日期查询
case2:
mingzi(type);break;//根据姓名查询
case3:
jine(type);break;//根据金额查询
default:
{printf("\n");printf("\n");printf("\n");
printf("选择错误,请重新输入\n");printf("\n");printf("\n");}}}
inttongyue(inttype)
{structmanage*p;intn,y;printf("请输入要显示的年月:
\n");
printf("年:
");scanf("%d",&n);printf("月:
");scanf("%d",&y);
printf("所有的记录是:
\n",n);for(p=head;p!
=NULL;p=p->next)
{if(p->info.type==type&&p->info.year==n&&p->info.month==y)
{printf("日期:
%d.%d.%d\n",p->info.year,p->info.month,p->info.day);
printf("姓名:
%s\n",p->info.name);printf("金额:
%f\n",p->info.money);
printf("备注:
%s\n",p->info.beizhu);printf("☆☆☆☆☆☆☆\n");}}}
inttongxingming(inttype)
{structmanage*p;charc[20];printf("请输入要显示的姓名:
");scanf("%s",c);
printf("所有的记录是:
\n",n);for(p=head;p!
=NULL;p=p->next)
{if(p->info.type==type&&strcmp(p->info.name,c)==0)
{printf("日期:
%d.%d.%d\n",p->info.year,p->info.month,p->info.day);
printf("姓名:
%s\n",p->info.name);printf("金额:
%f\n",p->info.money);
printf("备注:
%s\n",p->info.beizhu);printf("☆☆☆☆☆☆☆☆☆\n");}}}
inttongri(inttype)
{
structmanage*p;intn,y,r;printf("请输入要显示的年月:
\n");
printf("年:
");scanf("%d",&n);printf("月:
");scanf("%d",&y);
printf("日:
");scanf("%d",&r);printf("所有的记录是:
\n",n);
for(p=head;p!
=NULL;p=p->next)
{if(p->info.type==type&&p->info.year==n&&p->info.month==y&&p->info.day==r)
{printf("日期:
%d.%d.%d\n",p->info.year,p->info.month,p->info.day);
printf("姓名:
%s\n",p->info.name);printf("金额:
%f\n",p->info.money);
printf("备注:
%s\n",p->info.beizhu);printf("☆☆☆☆☆☆☆☆☆\n");}}}
structmanage*del(inttype)
{system("color78");structmanage*p1,*p2;charc[20];intn,a=0;
charmingz[20];printf("请输入姓名:
");scanf("%s",mingz);
for(p1=head;p1!
=NULL;p1=p1->next)
{if(p1->info.type==type&&strcmp(p1->info.name,mingz)==0)
{printf("第%d条信息\