栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++课程设计--个人财务助理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++课程设计--个人财务助理

目录

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

一、功能要求及说明:

二、需求分析

三、概要设计

四、具体实现代码

五、功能测试

六、个人详细讲解视频


一、功能要求及说明:

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

①新建账目——enter();

②载入——load( ) ;

③存盘--save()

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

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

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

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

(2)设计要求:

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

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

二、需求分析

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

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

2、载入文件

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

3、对账目进行操作

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

三、概要设计

1、设计一个操作菜单

将对账目进行新建、载入、存盘、操作账目等操作集成一个菜单界面,使得用户可以通过编译器进行对账目的操作。

2、设计时间类和账目类

设计一个时间类,能够将账单的时间展示出来,时间类包括账目的月份日期一年的第几周和详细的时分秒,时间类还需要包含getter和setter供操作者进行操作。

//时间类头文件
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);
	//返回第几周
	int getWeek();
	//返回第几月
	int getMonth();
	//返回第几天
	int getDay();
	//输入时间
	void enterTime();
	//输出时间
	void displayTime();
	//将文件里的时间载入编译器
	void loadTime();
	//将一个时间数据写入文件中
	void saveTime();
};
//账目类头文件
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);
	//返回时间
	Time getTime();
	//返回账目金额
	double getMoney();
	//将文件中的一个账目数据载入编译器
	void loadOne();
	//将一个账目数据存入文件中
	void saveOne();
	static int getNum();
	//输入一个账目数据
	void enter();
	//显示一个账目数据
	void displayOne();
};

四、具体实现代码
#include
#include
#include
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 << "act.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 << "act.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 SortByTime(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;
			SortByTime(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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号