目录

前排提示:如果是某民大的课程设计作业,希望不要粘贴复制,我怕被老师抓到查重,qwq

一、功能要求及说明:

二、需求分析

三、概要设计

四、具体实现代码

五、功能测试

六、个人详细讲解视频


一、功能要求及说明:

(1)本系统应完成以下几方面的功能:

①新建账目——enter();

②载入——load( ) ;

③存盘--save()

④显示所有账目——displayAll( );

⑤按周显示账目 ——displayWeek( );

⑥按月显示账目——displayMonth( );

⑦将指定时间段内的账目按消费经额排序--SortByTime();

(2)设计要求:

1)每条账目至少包含: 收支类型,金额,用途,时间等

2)作为一个完整的系统,应具有友好的界面和较强的容错能力。

二、需求分析

1、新建账目并存储在文件中

通过编译器,创建一个账目,然后输入账目的基本信息,并将该新建的账目的信息保存到D盘下的account.txt文件中。

2、载入文件

将D盘下的account.txt账目文件中的账目信息载入到编译器中,以实现账目的展示、排序等操作。

3对账目进行操作

先将账目载入到编译器中,通过选择菜单,可以进行显示所有账目、按周显示账目操作、按月显示账目操作、将指定时间段内的账目按消费额排序等操作

三、概要设计

1、整体功能模块图

本程序的整体功能流程图如图所示,首先运行程序,第一步先将account.txt文件中的账目数据载入到编译器中,此后才能对账目进行新建账目,显示所有账目,对账目进行排序,按月显示账目,按周显示账目等功能,在新建账目之后,必须将账目进行存盘操作,最后退出本程序。

2、设计时间类和账目类

设计一个时间类,能够将账单的时间展示出来,时间类包括账目的月份日期一年的第几周和详细的时分秒,时间类还需要包含getter和setter供操作者进行操作,成员函数中还包含对时间的文件操作函数,将时间从文件中读取出来和写入文件中。

设计一个账目类,这个账目类和时间类具有组合关系,如图3所示,每个账目对象都有一个时间对象用来记录账目的记账时间,账目类还包含对账目私有数据成员的返回操作,用以对账目进行修改等功能,成员函数中也包含有对账目数据的载入和存盘操作。

四、具体实现代码

#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
ifstream infile;
ofstream outfile;
const int M = 100;//最多存放100个账目;
//时间类
class Time {
private:int hour;//时int minute;//分int second;//秒int week;//第几周int day;//日int month;//月
public:Time() {}Time(int mon, int d, int w, int h, int m, int s) {hour = h;minute = m;second = s;week = w;day = d;month = mon;}//返回第几周int getWeek() {return week;}//返回第几月int getMonth() {return month;}//返回第几天int getDay() {return day;}//输入时间void enterTime() {cin >> month >> day >> week >> second >> minute >> hour;}//输出时间void displayTime() {cout << setw(2) << setfill('0') << month << "月";cout << setw(2) << setfill('0') << day << "日 ";cout <<"第" << week << "周 ";cout << setw(2) << setfill('0') << hour << ":";cout << setw(2) << setfill('0') << minute << ":";cout << setw(2) << setfill('0') << second;}//将文件里的时间载入编译器void loadTime() {string md, w, h;infile >> md >> w >> h;month = atoi(md.substr(5, 2).c_str());day = atoi(md.substr(9, 2).c_str());week = atoi(w.substr(2, 2).c_str());hour = atoi(h.substr(0, 2).c_str());minute = atoi(h.substr(3, 2).c_str());second = atoi(h.substr(6, 2).c_str());}//将一个时间数据写入文件中void saveTime() {outfile << " 时间:";outfile << setw(2) << setfill('0') << month << "月";outfile << setw(2) << setfill('0') << day << "日 ";outfile << "第" << week << "周 ";outfile << setw(2) << setfill('0') << hour << ":";outfile << setw(2) << setfill('0') << minute << ":";outfile << setw(2) << setfill('0') << second ;}
};
//账目类
class Account {
private:string form;//收支类型double money;//金额string usage;//用途Time t;//记账时间static int num;//账目个数
public://无参构造函数Account() {}//有参构造函数Account(string f, double mo, string u, int mon, int d, int w, int h, int mi, int s) :t(mon, d, w, h, mi, s) {form = f;money = mo;usage = u;num++;}//返回时间Time getTime() {return t;}//返回账目金额double getMoney() {return money;}//将文件中的一个账目数据载入编译器void loadOne() {string f,m,u,md,w,h;infile >> f >> m >> u;form = f.substr(9, 6);money = atof(m.substr(5, 4).c_str());usage = u.substr(5, 6);t.loadTime();num++;}//将一个账目数据存入文件中void saveOne() {outfile << "\n收支类型:" << form ;outfile << " 金额:" << money;outfile << " 用途:" << usage ;t.saveTime();}static int getNum() {return num;}//输入一个账目数据void enter() {cout << "收支类型:";cin >> form;cout << "金额:";cin >> money;cout << "用途:";cin >> usage;cout << "时间(xx月xx日 第x周 hh:mm:ss):";t.enterTime();num++;}//显示一个账目数据void displayOne() {cout << "收支类型:" << form << " 金额:" << money;cout << " 用途:" << usage << " 时间:";t.displayTime();cout << endl;}
};
//静态成员num初始化
int Account::num = 0;//主函数
//载入,将账目载入到编译器中
void load(Account a[]) {int i = 0;infile.open("D:\\account.txt");if (!infile) {cout << "account.txt cat't open." << endl;exit(0);}while (!infile.eof()) {a[i].loadOne();i++;}infile.close();
}
//存盘,将账目存入account.txt中
void save(Account a[]) {outfile.open("D:\\account.txt");if (!outfile) {cout << "account.txt cat't open." << endl;exit(0);}for (int i = 0; i < Account::getNum(); i++) {a[i].saveOne();}outfile.close();
}
//显示所有账目
void displayAll(Account a[]) {for (int i = 0; i < Account::getNum(); i++) {a[i].displayOne();}
}
//按周显示账目
void displayWeek(Account a[],int n) {for (int i = 0; i < Account::getNum(); i++) {if (a[i].getTime().getWeek() == n) {a[i].displayOne();}}
}
//按月显示账目
void displayMonth(Account a[],int n) {for (int i = 0; i < Account::getNum(); i++) {if (a[i].getTime().getMonth() == n) {a[i].displayOne();}}
}
//将指定时间段内的账目按消费额从小到大排序(指定月份与日期),并展示排序后的账目
void SortByMoney(Account a[],int beginM,int beginD,int endM,int endD) {Account b[M];Account temp;int j = 0;//得到指定时间段的账目for (int i = 0; i < Account::getNum(); i++) {if (a[i].getTime().getMonth() >= beginM && a[i].getTime().getMonth() <= endM && a[i].getTime().getDay() >= beginD && a[i].getTime().getDay() <= endD) {b[j] = a[i];j++;}}//将该时间段的账目进行排序for (int i = 1; i <= j-1; i++) {for (int k = 1; k <= j - i; k++) {if (b[k-1].getMoney() > b[k].getMoney()) {temp = b[k - 1];b[k - 1] = b[k];b[k] = temp;}}}//展示排序后的账目cout << "指定时间段的账目从小到大排序后:\n";for (int i = 0; i < j; i++) {b[i].displayOne();}
}
void showMenu() {cout << "===============主菜单==============\n";cout << "            0.退出系统\n";cout << "            1.新建账目\n";cout << "            2.载入账目\n";cout << "              3.存盘\n";cout << "          4.显示所有账目\n";cout << "          5.按周显示账目\n";cout << "          6.按月显示账目\n";cout << "7.指定时间段内的账目按消费金额排序\n";cout << "===================================\n";
}
int main() {Account a[M];int c;int n;int bm, bd, em, ed;while (true) {showMenu();cin >> c;switch (c){case 0:return 0;case 1:a[Account::getNum()].enter();cout << "********新建成功!********\n";break;case 2:load(a);cout << "********载入成功!********\n";break;case 3:save(a);cout << "********存盘成功!********\n";break;case 4:cout << "********2022年账目********\n";displayAll(a);break;case 5:cout << "请输入要显示第几周的账目:";cin >> n;displayWeek(a, n);break;case 6:cout << "请输入要显示第几月的账目:";cin >> n;displayMonth(a, n);break;case 7:cout << "请输入排序时间段的开始时间和结束时间(xx月xx日至xx月到xx日):";cin >> bm >> bd >> em >> ed;SortByMoney(a, bm, bd, em, ed);break;default:break;}}}

五、功能测试

1、载入账目和新建账目功能测试

2存盘功能测试

3显示所有账目功能测试

4按周显示账目功能测试

5按月显示账目功能测试

6指定时间段按消费额从小到大排序账目功能测试

六、个人详细讲解视频

c++期末编程作业--个人财务经理

https://www.bilibili.com/video/BV1wa411x7ky?share_source=copy_web

C++课程设计--个人财务助理相关推荐

  1. java课程设计家庭财务管理系统_javaEE-课程设计-个人财务管理系统

    <javaEE-课程设计-个人财务管理系统>由会员分享,可在线阅读,更多相关<javaEE-课程设计-个人财务管理系统(5页珍藏版)>请在人人文库网上搜索. 1.javaEE- ...

  2. java课程设计家庭财务管理系统_家庭财务管理系统设计方案与实现.doc

    家庭财务管理系统设计方案与实现 苏州大学高等教育自学考试"专接本" 毕业论文(设计) 题目 家庭财务管理系统的设计与实现 专科学校 无锡科技职业学院 专业 计算机信息管理 班级 信 ...

  3. C语言课程设计——家庭财务管理系统源码

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> ...

  4. 二维数组递归算法c语言,C语言课程设计--二维数组的按行求和及递归函数的编写简单家庭财务管理程序的设计.doc...

    成 绩 评 定 表 学生姓名李艳坤班级学号专 业通信工程课程设计题目C语言课程设计评 语 组长签字: 成绩 日期 20 年 月 日 课程设计任务书 学 院信息科学与工程通信工程学生姓名班级学号课程设计 ...

  5. 家庭财务管理系统(C++面向对象课程设计附课设报告)

    0004 家庭财务管理系统(C++面向对象课程设计) 摘要:主要用于记录家庭财务支出和收入等记录的程序设计,其主要开发平台为 Windows 10,程序设计开发环境为 Microsoft visual ...

  6. c语言个人小管家数据的定义,c语言个人财务小管家课程设计

    1.个人小管家应用系统给家庭提供了一个管理个人财务的平台,主要用于对家庭成员收 入.支出进行添加.查询.删除.修改以及打印的操作,使得家庭财务收支状况一目了然.主要功能包括:(1)主菜单.主要包括收入 ...

  7. 计算机毕业设计、计算机课程设计怎么做?计算机设计1900套来帮你!

    计算机毕业设计.计算机课程设计怎么做?计算机设计1900套来帮你! 人生做什么事都有套路,大学毕业设计.课程设计通常比较简单,大多数都是找个项目做参考,有的人随便抄一抄糊弄一下,只要查重,格式别出错就 ...

  8. Java课程设计报告--绩效考核信息管理系统

     Java课程设计报告 题目      绩效考核信息管理系统    学生姓名         学    号                   院    系        年级专业计算机科学与技术 班 ...

  9. 【艾琪出品】《数据库课程设计》【参考】

    <数据库课程设计> 2.概念模型设计(要求用E-R图画出概念模型) ⑴ 确定实体及其主码.属性: ⑵ 确定类型的类型及其属性: 3.逻辑结构设计 ⑴ 定义数据库中表的所有属性及其类型.宽度 ...

最新文章

  1. pitch android,Pitch Clash
  2. python 实现HMAC_SHA1算法
  3. 短视频内容理解与生成技术在美团的创新实践
  4. Linux创建、删除文件和文件夹命令
  5. linux mint 19 内核4.9,Linux Kernel 4.4.59 LTS/4.9.19 LTS/4.10.7维护版本更新发布
  6. 钱大妈关闭所有北京门店:低估了北京市场的难度
  7. Windows XP操作系统中的禁忌
  8. python视频教程唐学韬-python
  9. 基于单片机at89s52的频率计设计c语言程序,基于AT89S52单片机电子万年历设计(附程序,电路原理图)...
  10. 《Mastering OpenCV》--3.Markless AR.无标识式AR (1)
  11. MindManager 2020(Keymaker-CORE.rar)新手学习安装下载中文版及教程
  12. 如何从福彩官网抓取 双色球历史数据
  13. 三维建模技术是如何发展的
  14. 2.2、项目管理知识体系构成
  15. 一年后再读《rework》
  16. home1.2 ServerFragment(fragment_server)
  17. qrcodejs2的错误、公众号识别不了二维码、公众号识别二维码没反应
  18. Javascript变量、作用域与内存
  19. php initlize,PHP 反序列化漏洞入门学习笔记
  20. UVA 1600 巡逻机器人

热门文章

  1. linux 虚拟机 ping: www.baidu.com: 未知的名称或服务 报错处理
  2. android平台上线,网易新闻客户端3.0版iOS、Android平台正式上线
  3. Loaded plugins: fastestmirror
  4. 行人和车辆的分类——数据集分类
  5. Vue下载本地pdf、word、excel文件
  6. sql2000数据库备份压缩存储+压缩密码
  7. 吉姆餐厅吉他谱 C调扫弦版_革命吉他编配_赵雷
  8. 上班不排队 动态人脸识别杜绝考勤作假
  9. 2022低压电工考试试题及模拟考试
  10. java画图卡通人物,持续更新中