程序设计个人账本管理系统.docx
《程序设计个人账本管理系统.docx》由会员分享,可在线阅读,更多相关《程序设计个人账本管理系统.docx(59页珍藏版)》请在冰豆网上搜索。
![程序设计个人账本管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/25/561a914b-304b-4ac0-ae2f-5756695b8d62/561a914b-304b-4ac0-ae2f-5756695b8d621.gif)
程序设计个人账本管理系统
程序设计报告
(2014/2015学年第一学期)
题目:
个人账本管理系统
专业
组长学号姓名
组员学号姓名
指导教师
指导单位
日期
成员分工
组长()
负责实现新增帐务明细条目、帐务数据查找、修改当前所有帐务数据列表等功能,以及对组员进行程序原理的讲解、报告的撰写和原创程序部分的编写。
组员()
负责实现帐务收支统计、保存帐务数据到文件中、从文件中读入帐务数据等功能,以及在网络上和图书馆查找资料。
组员()
负责实现删除帐务明细数据、帐务数据排序、显示帐务明细条目等功能,以及程序的后期调试、细节完善与应用。
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级共五种:
优秀、良好、中等、及格、不及格
个人账本管理系统
一、课题容和要求
该系统要现一个简单、实用的个人帐本管理程序,主要功能包括帐务收支明细数据的录入、查找、修改、删除、统计、排序等。
所有帐务数据都要利用文件系统保存,以备系统下次运行时使用。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
(1)个人帐务数据由帐务明细条目构成,包括:
序号,日期(年、月、日),收支项名称,收支类型(收入/支出),收支金额(正/负数表示收支),备注等。
(2)需要实现的功能
1)新增帐务明细数据。
2)查找帐务数据(可按序号、日期(年、月、日)、名称、金额等查找)。
3)修改帐务明细条目(先查找,再修改。
若查找出多个条目,则进一步提示用户选择条目的序号,再修改)。
4)删除帐务明细条目(请参考上面修改的处理)。
5)对帐务数据排序(可按日期、名称、金额等排序。
要求排序后,记录的序号也要重新编排)。
6)显示当前所有帐务数据列表。
7)帐务统计(根据日期围,可分别按年、月或日统计收、支、结余总金额,并显示)。
8)保存帐务数据到文件中、从文件中读入帐务数据。
(3)界面友好,输入信息符合逻辑。
二、需求分析
个人账本管理系统的功能框架图如图1所示。
图1功能框架图
在当今整个大数据时代的背景下,电子科技越来越多的占据了人们的生活,它们为人们的生活提供了便利。
而人们的生活中总是不能缺少与钱打交道的机会的,无论是支出还是收入,交易多了总会出现账目混乱的情况,这种时候,大数据时代,一个简单的“个人账目系统”就很容易帮人们解决这样的问题。
再简单的程序也要有可以实现的功能,来达到最初编程的目的。
这个程序要实现的基本功能首先包括:
新增帐务明细数据:
提供提示,引导用户录入账目的年、月、日、名称、金额等基本数据。
查找帐务数据:
分为按序号、按日期、按名称、按金额查询四种查询方式,形式较为多样化最大限度的提供方便。
修改帐务明细条目:
提示用户先查找到所要修改的信息条目,直接录入所要修改的数据容,系统自动调整存储数据;若查找到多个条目,则需提示用户在录入条目的序号更改信息。
删除帐务明细条目:
首先提示用户查找到要删除的信息条目将后一个数据的信息自动赋值给要删除的容,依次将后一个数据的信息条目赋值给前一个,最后删除最后一个信息条目,从而实现删除一条信息的删除。
对帐务数据排序:
分为按金额、按日期、按名称三种排序方式。
按金额排序,遵循金额大的序号在前的顺序排列;日期则按照时间发生越晚序号在前的原则;名称排序是按照项目类型的名称ASCLL码从大到小排列。
显示当前所有帐务数据列表:
使数据信息条目按照序号、年、月、日、名称、收入(正)/支出(负)、备注的顺序显示,每个项目之间间距相同,一组数据占一行,排列规整,显示清晰。
帐务统计(根据日期围,可分别按年、月或日统计收、支、结余总金额,并显示):
首先,程序会自动调用日期排序函数进行排序,然后提示用户选择统计方式,按照用户选择进入选项功能。
按年统计首先判断是否为同一年,对同一年份的数据进行加和统计,并按照支出金额、收入金额以及余额分别统计。
按月统计按日统计同理。
昨晚上述容后,才是进行时间段总体的支出金额、收入金额和余额的计算。
保存帐务数据到文件中、从文件中读入帐务数据:
每实现一个功能,涉及到新增信息、数据更改等功能,均提示用户是否保存,利用文件输入输出流将数据容存入指定文件。
主界面显示功能菜单,根据客户选择运行函数。
用户界面的设计简单大方,首先实现清晰便捷的目的,让用户可以方便快速的实现账目管理的不同需求;加入数字的元素,数字与汉字相呼应,更加准确便捷的表达,减去许多繁琐以及不必要的麻烦。
三、概要设计
1主要结构体
classaccount/*用一个类存储账本信息*/
{
public:
chara;//是否备注
structdate
{
intyear;//年
intmonth;//月
intday;//日
}time;//日期
longdoubleall_time;//日期总数(用于排序)
charname[20];//收支项名称
inttype;//收支类型
longdoublemoney;//收支金额
charremarks[100];//备注
};
2主要函数流程图
(1)装载函数:
从文本中载入信息,函数流程图如图2所示。
图2装载函数
(2)账务新增函数:
新增数据并存档,如图3。
图3账务新增函数
(3)账务查找函数:
查询已存档数据,如图4。
图4账务查找函数
(4)账务修改函数:
查询已存档数据,修改并存档,如图5。
退出
是否返回
是
否
调用新增函数修改
调用查找函数
按序号查询
按日期查询
按名称查询
是否保存
有重复?
有重复?
按序号查询
用序号查询
选择修改方式
保存
是
否
否
否
是
是
返回上一级
图5账务修改函数
(5)账务删除函数:
查询已存档数据,删除并存档,如图6。
图6账务删除函数
(6)账务排序函数:
查询已存档数据,排序并存档,如图7。
图7账务排序函数
(7)账务显示函数:
查询已存档数据,删除并存档,如图8。
图8账务显示函数
(8)账务统计函数:
查询已存档数据,如图9。
图9账本显示函数
(9)账务存档函数:
将数据存档,如图10。
选择功能
功能实现
是否结束
是否保存
数据信息保存至指定文件夹
结束
Y
N
Y
N
图10账务存档函数
四、源程序代码
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#defineN500
classaccount/*用一个类存储账本信息*/
{
public:
chara;//是否备注
structdate
{
intyear;//年
intmonth;//月
intday;//日
}time;//日期
longdoubleall_time;//日期总数(用于排序)
charname[20];//收支项名称
inttype;//收支类型
longdoublemoney;//收支金额
charremarks[100];//备注
};
voidinput(accountzhangwu[],intn);
voidxinzeng(accountzhangwu[],intno,intn);
voidchazhao1(accountzhangwu[],inti,intn);//按序号查找帐务信息
intchazhao2(accountzhangwu[],intx,inty,intz,intn);//按日期查找帐务信息
intchazhao3(accountzhangwu[],charna[],intn);//按名称查找帐务信息
intchazhao4(accountzhangwu[],longdoubleno,inta,intn);//按金额查找帐务信息
voidxiugai(accountzhangwu[],intno,intn);
intshanchu1(accountzhangwu[],intno,intn);//按序号删除帐务信息(形参同查找)
intshanchu2(accountzhangwu[],intx,inty,intz,intn);//按日期删除帐务信息(形参同查找)
intshanchu3(accountzhangwu[],charna[],intn);//按名称删除帐务信息(形参同查找)
voidpaixu1(accountzhangwu[],intn);
voidpaixu2(accountzhangwu[],intn);
voidpaixu3(accountzhangwu[],intn);
voidxianshi(accountzhangwu[],intno,intn);
voidtongji(accountzhangwu[],intX,intY,intZ,intx,inty,intz,intn);
intsave(accountzhangwu[],intn);
intload(char*filename,accountzhangwu[]);
voidback();
voidexit();
voidzhujiemian(){
cout<<"欢迎进入个人帐本管理系统"<cout<<""<cout<<"请输入以下选项编号进行下一步操作"<cout<<""<cout<<"1.新增账务数据"<cout<<"2.查找账务数据"<cout<<"3.修改账务数据"<cout<<"4.删除账务数据"<cout<<"5.账务数据排序"<cout<<"6.显示所有账务"<cout<<"7.账务数据统计"<cout<<"0.退出"<}
voidxinzeng(accountzhangwu[],intno,intn){
do{
cout<<"请输入年"<cin>>zhangwu[no].time.year;
}while(zhangwu[no].time.year<0||zhangwu[no].time.year>2020);
do{
cout<<"请输入月"<cin>>zhangwu[no].time.month;
}while(zhangwu[no].time.month>12||zhangwu[no].time.month<0);
do{
cout<<"请输入日"<cin>>zhangwu[no].time.day;
}while(zhangwu[no].time.day<0||zhangwu[no].time.day>31);
zhangwu[no].all_time=zhangwu[no].time.year*10000+zhangwu[no].time.month*100+zhangwu[no].time.day;
do{
cout<<"请输入收支类型(1.收入/2.支出)"<cin>>zhangwu[no].type;
}while(zhangwu[no].type!
=1&&zhangwu[no].type!
=2);
cout<<"请输入收支项目名称"<cin>>zhangwu[no].name;
cout<<"请输入具体金额"<cin>>zhangwu[no].money;
do{
cout<<"是否进行备注?
(Y/N)"<cin>>zhangwu[no].a;
}while(zhangwu[no].a!
='y'&&zhangwu[no].a!
='n'&&zhangwu[no].a!
='Y'&&zhangwu[no].a!
='N');
if(zhangwu[no].a=='y'||zhangwu[no].a=='Y')
{
cout<<"请输入备注:
"<cin>>zhangwu[no].remarks;
}
save(zhangwu,n);
}
voidchazhao1(accountzhangwu[],inti,intn)//按序号查找帐务信息
{
intsign=0;
cout<<"序号"<if(i>=0&&iif(zhangwu[i].type==1){
if(zhangwu[i].a=='y')
cout<
else
cout<
}
else
{
if(zhangwu[i].a=='y')
cout<
else
cout<
}
sign++;
}
if(sign==0&&i!
=-1){
cout<<"无此序号"<}
}
intchazhao2(accountzhangwu[],intx,inty,intz,intn)//按日期查找帐务信息
{
intarray[100]={0};
inti,k,j=0;
intsign=0;
cout<<"序号"<for(i=0;i{
if(zhangwu[i].time.year==x&&zhangwu[i].time.month==y&&zhangwu[i].time.day==z){
if(zhangwu[i].type==1){
if(zhangwu[i].a=='y'){
cout<
}
else{
cout<
}
}
else{
if(zhangwu[i].a=='y'){
cout<
}
else{
cout<
}
}
sign++;
array[j]=i;
j++;
}
}
if(sign==0){
cout<<"此日无收支。
"<return-1;
}
if(array[1]!
=0)
{
cout<<"有以上几个相同日期,请进一步选择以下序号:
"<for(i=0;array[i]!
=0;i++){
cout<}
cin>>k;
array[0]=k-1;
}
returnarray[0];
back();
}
intchazhao3(accountzhangwu[],charna[],intn)//按名称查找帐务信息
{
inti,k,j=0;
intarray[100]={0};
intsign=0;
cout<<"序号"<for(i=0;iif(!
strcmp(na,zhangwu[i].name)){
if(zhangwu[i].type==1){
if(zhangwu[i].a=='y'){
cout<
}
else{
cout<
}
}
else{
if(zhangwu[i].a=='y'){
cout<
}
else
{
cout<
}
}
sign++;
array[j]=i;
j++;
}
}
if(sign==0){
cout<<"无此类收支。
"<return-1;
}
if(array[1]!
=0)
{
cout<<"有以上几个相同名称,请选择序号:
"<