程序设计_个人账本管理系统.doc_第1页
程序设计_个人账本管理系统.doc_第2页
程序设计_个人账本管理系统.doc_第3页
程序设计_个人账本管理系统.doc_第4页
程序设计_个人账本管理系统.doc_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

程序设计报告(2014/2015学年 第一学期)题 目:个人账本管理系统 专 业 组长 学号姓名 组员 学号姓名 指 导 教 师 指 导 单 位 日 期 成员分工组长()负责实现新增帐务明细条目、帐务数据查找、修改当前所有帐务数据列表等功能,以及对组员进行程序原理的讲解、报告的撰写和原创程序部分的编写。组员()负责实现帐务收支统计、保存帐务数据到文件中、从文件中读入帐务数据等功能,以及在网络上和图书馆查找资料。组员()负责实现删除帐务明细数据、帐务数据排序、显示帐务明细条目等功能,以及程序的后期调试、细节完善与应用。评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语 教师签名: 年 月 日评分等级备注评分等级共五种:优秀、良好、中等、及格、不及格个人账本管理系统一、 课题内容和要求该系统要求实现一个简单、实用的个人帐本管理程序,主要功能包括帐务收支明细数据的录入、查找、修改、删除、统计、排序等。所有帐务数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。(1)个人帐务数据由帐务明细条目构成,包括:序号,日期(年、月、日),收支项名称,收支类型(收入/支出),收支金额(正/负数表示收支),备注等。(2)需要实现的功能1) 新增帐务明细数据。2) 查找帐务数据(可按序号、日期(年、月、日)、名称、金额等查找)。3) 修改帐务明细条目(先查找,再修改。若查找出多个条目,则进一步提示用户选择条目的序号,再修改)。4) 删除帐务明细条目(请参考上面修改的处理)。5) 对帐务数据排序(可按日期、名称、金额等排序。要求排序后,记录的序号也要重新编排)。6) 显示当前所有帐务数据列表。7) 帐务统计(根据日期范围,可分别按年、月或日统计收、支、结余总金额,并显示)。8) 保存帐务数据到文件中、从文件中读入帐务数据。(3)界面友好,输入信息符合逻辑。二、 需求分析个人账本管理系统的功能框架图如图1所示。账务数据新增个人账本管理系统账务数据查找账务数据修改账务数据删除账务数据排序账务数据显示账务数据统计账务数据保存图1 功能框架图在当今整个大数据时代的背景下,电子科技越来越多的占据了人们的生活,它们为人们的生活提供了便利。而人们的生活中总是不能缺少与钱打交道的机会的,无论是支出还是收入,交易多了总会出现账目混乱的情况,这种时候,大数据时代,一个简单的“个人账目系统”就很容易帮人们解决这样的问题。再简单的程序也要有可以实现的功能,来达到最初编程的目的。这个程序要实现的基本功能首先包括:新增帐务明细数据:提供提示,引导用户录入账目的年、月、日、名称、金额等基本数据。查找帐务数据:分为按序号、按日期、按名称、按金额查询四种查询方式,形式较为多样化最大限度的提供方便。修改帐务明细条目:提示用户先查找到所要修改的信息条目,直接录入所要修改的数据内容,系统自动调整存储数据;若查找到多个条目,则需提示用户在录入条目的序号更改信息。删除帐务明细条目:首先提示用户查找到要删除的信息条目将后一个数据的信息自动赋值给要删除的内容,依次将后一个数据的信息条目赋值给前一个,最后删除最后一个信息条目,从而实现删除一条信息的删除。对帐务数据排序:分为按金额、按日期、按名称三种排序方式。按金额排序,遵循金额大的序号在前的顺序排列;日期则按照时间发生越晚序号在前的原则;名称排序是按照项目类型的名称ASCLL码从大到小排列。显示当前所有帐务数据列表:使数据信息条目按照序号、年、月、日、名称、收入(正)/支出(负)、备注的顺序显示,每个项目之间间距相同,一组数据占一行,排列规整,显示清晰。帐务统计(根据日期范围,可分别按年、月或日统计收、支、结余总金额,并显示):首先,程序会自动调用日期排序函数进行排序,然后提示用户选择统计方式,按照用户选择进入选项功能。按年统计首先判断是否为同一年,对同一年份的数据进行加和统计,并按照支出金额、收入金额以及余额分别统计。按月统计按日统计同理。昨晚上述内容后,才是进行时间段内总体的支出金额、收入金额和余额的计算。保存帐务数据到文件中、从文件中读入帐务数据:每实现一个功能,涉及到新增信息、数据更改等功能,均提示用户是否保存,利用文件输入输出流将数据内容存入指定文件内。主界面显示功能菜单,根据客户选择运行函数。用户界面的设计简单大方,首先实现清晰便捷的目的,让用户可以方便快速的实现账目管理的不同需求;加入数字的元素,数字与汉字相呼应,更加准确便捷的表达,减去许多繁琐以及不必要的麻烦。三、概要设计 1 主要结构体class account /*用一个类存储账本信息*/public:char a; /是否备注struct date int year; /年 int month; /月 int day; /日time; /日期long double all_time; /日期总数(用于排序)char name20; /收支项名称int type; /收支类型long double money; /收支金额char remarks100; /备注;2 主要函数流程图(1)装载函数:从文本中载入信息,函数流程图如图2所示。有开始有无文本打开文本读取数据退出新建文本无图2 装载函数(2)账务新增函数:新增数据并存档,如图3。退出是否返回确定新增账务数据个数输入日期(年月日)输入收支项目名称输入备注输入收支类型输入具体金额是否是否满足个数是是否备注否是否返回上一级图3账务新增函数(3)账务查找函数:查询已存档数据,如图4。退出是否返回是否查找确定查询方式按序号查询按日期查询按名称查询是否保存有重复?有重复?按序号查询用序号查询保存是否否否是是返回上一级图4账务查找函数(4)账务修改函数:查询已存档数据,修改并存档,如图5。退出是否返回是否调用新增函数修改调用查找函数按序号查询按日期查询按名称查询是否保存有重复?有重复?按序号查询用序号查询选择修改方式保存是否否否是是返回上一级图5账务修改函数(5)账务删除函数:查询已存档数据,删除并存档,如图6。退出是否返回是否删除选择查询方式按序号查询按日期查询按名称查询是否保存保存是否返回上一级图6 账务删除函数(6)账务排序函数:查询已存档数据,排序并存档,如图7。退出是否返回进行相应排序选择排序方式按序号排序按日期排序按名称排序保存是否返回上一级图7 账务排序函数(7)账务显示函数:查询已存档数据,删除并存档,如图8。退出是否返回显示所有账务数据是否返回上一级图8 账务显示函数(8)账务统计函数:查询已存档数据,如图9。数据统计按年统计按月统计按日统计同年?收入统计支出统计余额统计同年同月?收入统计支出统计余额统计一同年同月同日?收入统计支出统计余额统计输出输出输出结束YNYNYN调用日期排序函数图9 账本显示函数(9)账务存档函数:将数据存档,如图10。选择功能功能实现是否结束是否保存数据信息保存至指定文件夹结束YNYN图10 账务存档函数四、源程序代码 #include #include #include #include #include #include #include using namespace std;#define N 500class account /*用一个类存储账本信息*/public:char a; /是否备注struct date int year; /年 int month; /月 int day; /日time; /日期long double all_time; /日期总数(用于排序)char name20; /收支项名称int type; /收支类型long double money; /收支金额char remarks100; /备注;void input(account zhangwu,int n);void xinzeng(account zhangwu,int no, int n);void chazhao1(account zhangwu,int i, int n);/按序号查找帐务信息int chazhao2(account zhangwu,int x,int y,int z, int n);/按日期查找帐务信息int chazhao3(account zhangwu,char na, int n);/按名称查找帐务信息int chazhao4(account zhangwu,long double no, int a,int n);/按金额查找帐务信息void xiugai(account zhangwu,int no, int n);int shanchu1(account zhangwu,int no, int n);/按序号删除帐务信息(形参同查找)int shanchu2(account zhangwu,int x,int y,int z, int n);/按日期删除帐务信息(形参同查找)int shanchu3(account zhangwu,char na, int n);/按名称删除帐务信息(形参同查找)void paixu1(account zhangwu,int n);void paixu2(account zhangwu,int n);void paixu3(account zhangwu,int n);void xianshi(account zhangwu,int no,int n);void tongji(account zhangwu,int X,int Y,int Z,int x,int y,int z,int n);int save(account zhangwu, int n);int load(char *filename, account zhangwu);void back();void exit();void zhujiemian()cout 欢迎进入个人帐本管理系统 endl;cout endl;cout 请输入以下选项编号进行下一步操作 endl;cout endl;cout 1.新增账务数据 endl;cout 2.查找账务数据 endl;cout 3.修改账务数据 endl;cout 4.删除账务数据 endl;cout 5.账务数据排序 endl;cout 6.显示所有账务 endl;cout 7.账务数据统计 endl;cout 0.退出 endl;void xinzeng(account zhangwu,int no, int n)docout 请输入年 zhangwuno.time.year;while(zhangwuno.time.year2020);docout 请输入月 zhangwuno.time.month;while(zhangwuno.time.month12 | zhangwuno.time.month0);docout 请输入日 zhangwuno.time.day;while(zhangwuno.time.day31);zhangwuno.all_time=zhangwuno.time.year*10000 + zhangwuno.time.month*100 + zhangwuno.time.day;docout 请输入收支类型(1.收入 /2.支出) zhangwuno.type;while(zhangwuno.type!=1&zhangwuno.type!=2);cout 请输入收支项目名称 ;cout 请输入具体金额 zhangwuno.money;docout 是否进行备注?(Y/N) zhangwuno.a;while(zhangwuno.a!=y&zhangwuno.a!=n&zhangwuno.a!=Y&zhangwuno.a!=N); if (zhangwuno.a=y|zhangwuno.a=Y)cout 请输入备注: zhangwuno.remarks;save(zhangwu,n);void chazhao1(account zhangwu,int i, int n)/按序号查找帐务信息int sign=0;cout序号setw(5)年setw(10)月setw(8)日setw(8)名称setw(24)收入(正)/支出(负)setw(6)备注=0 & in)if(zhangwui.type=1) if(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)endl;elseif(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)endl;sign+;if(sign=0&i!=-1)cout无此序号endl;int chazhao2(account zhangwu,int x,int y,int z, int n)/按日期查找帐务信息int array100=0;int i,k,j=0;int sign=0;cout序号setw(5)年setw(10)月setw(8)日setw(8)名称setw(24)收入(正)/支出(负)setw(6)备注endl;for(i=0;in;i+)if(zhangwui.time.year=x & zhangwui.time.month=y & zhangwui.time.day=z)if(zhangwui.type=1) if(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)endl;elseif(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)endl;sign+;arrayj=i;j+;if(sign=0)cout此日无收支。endl;return -1;if(array1!=0) cout有以上几个相同日期,请进一步选择以下序号:endl;for(i=0;arrayi!=0;i+)coutarrayi+1k;array0=k-1;return array0;back();int chazhao3(account zhangwu,char na, int n)/按名称查找帐务信息int i,k,j=0;int array100=0;int sign=0;cout序号setw(5)年setw(10)月setw(8)日setw(8)名称setw(24)收入(正)/支出(负)setw(6)备注endl;for(i=0;in;i+)if(!strcmp(na,)if(zhangwui.type=1) if(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)endl;elseif(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)endl;sign+;arrayj=i;j+;if(sign=0)cout无此类收支。endl;return -1; if(array1!=0)cout有以上几个相同名称,请选择序号:endl;for(i=0;arrayi!=0;i+)coutarrayi+1k;array0=k-1;return array0;back();int chazhao4(account zhangwu,long double no, int a,int n)/按金额查找帐务信息int i,k,j=0;int array100=0;int sign=0;cout序号setw(5)年setw(10)月setw(8)日setw(8)名称setw(24)收入(正)/支出(负)setw(6)备注endl;for(i=0;in;i+)if(a=2)zhangwui.money=-zhangwui.money; for(i=0;in;i+) if(no=zhangwui.money)if(zhangwui.type=1) if(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)endl;elseif(zhangwui.a=y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)endl;sign+;arrayj=i;j+;if(sign=0)cout无此金额收支。endl;return -1;if(array1!=0)cout有以上几个相同金额,请选择序号:endl;for(i=0;arrayi!=0;i+)coutarrayi+1k;array0=k-1;return array0;back();void xiugai(account zhangwu,int no, int n)if(no=n|no0)cout序号有误endl;if(no=0 ) xinzeng( zhangwu, no, n);int shanchu1(account zhangwu,int no, int n)if(no=n|no0)cout序号有误endl;else if(non-1)for(int i=no;in-1;i+)zhangwui=zhangwui+1;n-;return n;int shanchu2(account zhangwu,int x,int y,int z, int n)int i;int sign=0;for(i=0;in;i+)if(zhangwui.time.year=x & zhangwui.time.month=y & zhangwui.time.day=z)for(int j=i;jn-1;j+)zhangwuj=zhangwuj+1;sign=1;n-; i-; if(sign=0)cout此日无收支。endl; return n;int shanchu3(account zhangwu,char na, int n)int i; int sign=0;for(i=0;in;i+) if(!strcmp(na,)for(int j=i;jn-1;j+)zhangwuj=zhangwuj+1;sign=1;n-; i-; if(sign=0)cout无此类收支。endl;return n;void paixu1(account zhangwu,int n)int i,j;account temp;for(i=0;in;i+)if(zhangwui.type=2)zhangwui.money=-zhangwui.money;for(i=0;in;i+)for(j=i;jn;j+)if(zhangwui.moneyzhangwuj.money) temp=zhangwui;zhangwui=zhangwuj;zhangwuj=temp;void paixu2(account zhangwu,int n) int i,j;account temp;for(i=0;in;i+)for(j=i;jn;j+)if(zhangwui.all_timezhangwuj.all_time) temp=zhangwui;zhangwui=zhangwuj;zhangwuj=temp;void paixu3(account zhangwu,int n)int i,j,p=0;account temp;for(i=0;in;i+)for(j=i;jn;j+)if(strcmp(,)0) temp=zhangwui;zhangwui=zhangwuj;zhangwuj=temp;void xianshi(account zhangwu,int no,int n)int i;for(i=0;in;i+)cout序号setw(5)年setw(10)月setw(8)日setw(8)名称setw(24)收入(正)/支出(负)setw(6)备注endl;if(zhangwui.type=1) if(zhangwui.a=y|zhangwui.a=Y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8)setw(8)fabs(zhangwui.money)endl;elseif(zhangwui.a=y|zhangwui.a=Y)couti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)setw(22)zhangwui.remarksendl;elsecouti+1setw(10)zhangwui.time.yearsetw(8)zhangwui.time.monthsetw(8)zhangwui.time.daysetw(8) -fabs(zhangwui.money)endl;void tongji(account zhangwu,int X,int Y,int Z,int x,int y,int z,int n)int i,k;long double a1,a2,total=0;long double inall=0;long double outall=0;long double yearinall=0;long double yearoutall=0;long double monthinall=0;long double monthoutall=0;long double dayinall=0;long double dayoutall=0;a1=X*10000+Y*100+Z;a2=x*10000+y*100+z;cout endl;cout 请选择统计方式 endl;cout endl;cout1.按年 2.按月 3.按日k;for(i=0;in;i+) if(zhangwui.all_time=a1)|(zhangwui.all_time=a2 & zhangwui.all_time=a1)switch(k)case 1:if(zhangwui.type=2)yearoutall+=zhangwui.money;elseyearinall+=zhangwui.money;if(zhangwui+1.time.year!=zhangwui.time.year)coutzhangwui.time.year年收

温馨提示

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

评论

0/150

提交评论