一、整体介绍
1.1需求和目标
项目的需求,实现一个叫做“小谷记账簿”的基于命令行界面的家庭记账软件。
我们的目标,是通过项目练习,综合运用在C++第一部分课程中学习到的各种知识,初步掌握编写软件的方法和技巧。
1.2整体功能描述
这个软件相对简单,只需要基于命令行做纯文本的交互,不涉及图形化界面。作为一个记账软件,主要有两大功能:记账和查询。也就是说,软件需要能够记录家庭中每一笔收入、支出的账目,并提供查询收支明细的功能。而且为了让软件有真正的实用价值,需要对数据做持久化保存;我们这里只需要存放在一个指定的文本文件中。
项目采用分级菜单方式,每一级菜单应该有“返回主菜单”功能;主菜单有“退出”选项。
二、页面及功能描述
2.1主菜单
运行软件后首先应该显示主菜单。主菜单提供三个选项:“记账”、“查询”和“退出”,并在下方提示用户输入1-的数字,选择不同的功能。
主菜单界面如下:
2.2记账菜单
在主菜单页面选择“1”,可以进入记账菜单(二级菜单)。记账菜单提供三个选项:“收入”、“支出”和“返回主菜单”;并在下方提示用户按对应的数字进行功能选择。
记账菜单界面如下:
在记账菜单页面选择“1”,可以记录一笔收入账目。账目信息包括:类型(收入/支出)、金额、备注。这里需要提示用户输入账目的金额和备注信息,然后显示完成记账。
类似地,在记账菜单页面选择“2”,可以记录一笔支出账目。提示用户输入账目的金额和备注信息,然后显示完成记账。
2.查询菜单
在主菜单页面选择“2”,可以进入查询菜单。查询菜单提供四个选项:“统计所有账目”、“统计收入”、“统计支出”和“返回主菜单”;并在下方提示用户按对应的数字进行功能选择。
查询菜单界面如下:
在查询菜单页面,选择“1”可以查询所有账目;选择“2”可以查询所有收入;选择“”可以查询所有支出。用户选择之后,除了应该显示对应的账目明细外,还应该对所有账目进行统计汇总。
对应地,选择“1”之后列出所有账目,统计的是总收支;选择“2”之后列出所有收入,统计总收入;选择“”之后列出所有支出,统计总支出。
2.4退出功能
在主菜单页面,选择“”可以退出软件。页面将做确认退出的对话提醒:如果用户输入“Y”则退出,输入“N”则返回主菜单页面。
三、流程设计
.1主流程
.2记账操作流程
.查询操作流程
四、代码设计
4.1核心思路
记账软件处理的数据,就是收入或者支出的“账目”。每一条账目数据,都应该包含收支类型、金额、备注三部分,这可以构建一个结构体类型AccountItem来表示。
而程序运行的开始,应该读取保存在文件中的数据,读取之后应该是一个AccountItem类型的数组。
在流程控制方面,如果用户不选择退出,程序就不会结束,所以应该用一个while循环来处理整个流程;当用户确认退出时,更改一个标志位,用来退出循环。
每一级菜单做键盘选择后,可以用switch分支语句来处理;不同的功能模块,可以包装成函数。
4.2项目文件分类设计
4.2.1头文件
对于一个C++项目来说,构建整体架构很重要的一步就是定义头文件。一般我们会把全局变量、函数声明、以及结构体的定义都放在头文件中。
本项目可以设计两个头文件,来管理不同的内容:
结构体AccountItem的定义,以及涉及到账目操作的函数声明,都可以放在一个头文件account_item.h中;
其它一些通用的设置和功能性函数,可以放在另一个头文件