C/C++实现个人收支系统的示例代码

 更新时间:2020年06月16日 09:08:58   作者:Jimobbb  
这篇文章主要介绍了C/C++实现个人收支系统,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

昨天朋友委托我做一个基于C++的课程小设计,题目如下:
设计一个简单的个人收支管理系统,至少包括如下功能:

1、逐笔输入个人收入或支出的明细,写入到文件保存,可不断进行输入和追加。
输入的明细数据包括:收支明细类别编码、发生日期、金额、备注。

1)为了简化用户的输入,类别编码由字母和数字构成:“a”表示收入、“b”表示支
出,数字是大类下的编号。类别编码及类别名称的对应由自己定义、组织在程序中
并输出展示。比如 a1 表示收入类的生活费,b1 表示支出类的学习,编号依次递增,
类别的数量和名称根据日常需要自拟。
例如:
收入类:a1‐生活费,a2‐奖学金,a3‐稿费
支出类:b1‐学习用品,b2‐生活用品,b3‐游戏

2)用户输入收支明细,具体的输入格式如下(各数据用一个或多个连续空格分隔,
直接输入回车表示输入结束):
请逐笔输入类别编码、发生日期、金额、备注:
输入收支明细:a1 2020‐1‐26 2000.0 1 月生活费
输入收支明细:b1 2020‐3‐9 52.5 买书

输入收支明细:b2 2020‐5‐9 78.00 购买台灯
3)将输入的明细数据写入到一个文件中进行保存,便于以后进行追加和处理。

2、根据日常对个人收支管理的需要,完成汇总,进行功能设计和编码实现。需要
统计并输出用户所输入月份各收支类别的汇总情况,输出后,再次询问用户是否输
出该月的各笔明细,用户回答是,则按明细类别的升序输出;回答否,则不输出。
输入和输出结果如下:

请输入对收支类别数据进行汇总的月份:2020‐3
2020 年 3 月收支类别数据的汇总
收入/支出 明细类别 金额
收入 生活费 2000

支出 学习用品 200

2020 年 3 月的总收入为:1500,总支出为:1200
是否输出该月的各笔明细(y 为输出,其他为不输出):y
2020 年 3 月收支类别数据的明细
类别 收入/支出 发生日期 金额 备注
生活费 收入 2020‐03‐01 2000.0 3 月生活费
学习用品 支出 2020‐03‐03 10.0 买钢笔

自己敲了一遍,具体实现如下:

#include <iostream>
#include <stdlib.h>
#include <string.h>
#define MAX_MARK 100

using namespace std;

struct Pay
{
	char payment[2];
	int inout;
	int year;
	int month;
	int day;
	int money;
	char mark[MAX_MARK];
}ioi;/*日期,收入/支出 金额 收入来源/支出目的*/


void displayMenu()
 {
  cout <<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
  cout <<"+    个人收支管理系统      +"<<endl;
  cout <<"+     1. 添加收支       +"<<endl;
  cout <<"+     2. 查找收支       +"<<endl;
  cout <<"+     3. 统计收支       +"<<endl;
  cout <<"+     4. 输出文件       +"<<endl;
  cout <<"+     5. 结束程序       +"<<endl;
  cout <<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
}

int addPayment(Pay ioi[],int num)
{
	char tempPayment[3];
	cout <<"请逐笔输入类别编码、发生日期、金额、备注"<<endl;
	cout <<"输入收支明细:";
	scanf("%s %d-%d-%d %d %s",ioi[num].payment,&ioi[num].year,&ioi[num].month,&ioi[num].day,&ioi[num].money,ioi[num].mark);
	if(ioi[num].payment[0]=='a'){
		ioi[num].inout = 1;
	}else{
		ioi[num].inout = 0;
	}
	num++;
	return num;
};

void findPayment(Pay ioi[],int num)
{
	int kind;
	int i;
	int flag=0;
	int tempMonth=0,tempYear=0;
	cout <<"请输入想要查找的目标(1为年月,2为类别):"<<endl;
	cin >> kind;
	if(kind == 1){
		cout << "请输入查找的年月(XXXX-XX):";
		scanf("%d-%d",&tempYear,&tempMonth);
		for(i=0;i<num;i++){
			if(ioi[i].year==tempYear && ioi[i].month== tempMonth){
				cout << "找到了!";
				if(ioi[i].inout == 1){
					cout <<"收入 ";
				}
				if(ioi[i].inout == 0){
					cout <<"支出 ";
				} 
				cout <<ioi[i].money;
				cout << '\t';
				cout <<ioi[i].mark<<endl;
			}
		}
	}
	char tempPayment[2];
	if(kind == 2){
		cout <<"请输入查找的类别:";
		cin >> tempPayment;
		for(i=0;i<num;i++){
			if(ioi[i].payment[0] == tempPayment[0] && ioi[i].payment[1] == tempPayment[1]){
				cout <<"找到了!";
				if(ioi[i].inout == 1){
					cout <<"收入 ";
				}
				if(ioi[i].inout == 0){
					cout <<"支出 ";
				} 
				cout <<ioi[i].money;
				cout << '\t';
				cout <<ioi[i].mark<<endl;
			}
		}
	}
};


void sumPayment(Pay ioi[],int num)
{
	int i;
	int sumYear=0;
	int sumMonth=0;
	int judge=0;
	cout <<"请输入对收支类别数据进行汇总的月份:";
	scanf("%d-%d",&sumYear,&sumMonth);
	printf("%d年%d月收支类别数据的汇总:\n",sumYear,sumMonth); 
	cout << "收支\t明细\t金额" <<endl;
	for(i=0;i<num;i++){
		if(ioi[i].year==sumYear && ioi[i].month==sumMonth){
			if(ioi[i].inout == 1){
				cout <<"收入 ";
			}
			if(ioi[i].inout == 0){
				cout <<"支出 ";
			}
			cout <<ioi[i].money;
			cout << '\t';
			cout <<ioi[i].mark<<endl;
		}
	}
	
	int sumIn=0,sumOut=0;
	for(i=0;i<num;i++){
		if(ioi[i].inout == 1){
			sumIn+= ioi[i].money;
		}
		if(ioi[i].inout == 0){
			sumOut+= ioi[i].money;
		}
	}
	printf("%d年%d月的总收入为:%d 总支出为:%d\n",sumYear,sumMonth,sumIn,sumOut); 
	
	cout <<"是否输出各笔明细:(是1否0):";
	cin >>judge;
	if(judge==1){
		printf("%d年%d月收支类别数据的明细:\n",sumYear,sumMonth); 
		cout <<"类别\t收入\t支出\t发生日期\t金额\t备注"<<endl;
		for(i=0;i<num;i++){
			if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '1')
					cout <<"生活费 ";
			if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '2')
					cout <<"奖学金 ";
			if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '3')
					cout <<"稿费 ";
			if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '1')
					cout <<"学习用品 ";
			if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '2')
					cout <<"生活用品 ";
			if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '3')
					cout <<"游戏 ";
		
			if(ioi[i].inout == 1){
				cout <<"收入\t";
			}
			if(ioi[i].inout == 0){
				cout <<"支出\t";
			}
			cout <<ioi[i].money;
			cout << '\t';
			cout <<ioi[i].mark<<endl;
		}
	}
};

void writeFile(Pay ioi[])
{
	FILE *fp=NULL;
	int i=0;

	fp=fopen("payment.txt","wb");

	if(fp==NULL)
	{
		cout <<"打开文件出错!"<<endl;
		exit(0);
	}
	fwrite(&ioi,sizeof(struct Pay),1,fp);
	cout <<"信息已保存到文payment.txt中"<<endl;
	fclose(fp);
};

void sortMoney(Pay ioi[],int length)	//冒泡排序 
{
	int i=0,j=0,k=0;
	Pay temp;
	for(i=0;i<length;i++){
		k=i;
		for(j=i+1;j<length;j++)
			if(ioi[j].money>ioi[k].money)
				k=j;
  temp=ioi[k];
  ioi[k]=ioi[i];
  ioi[i]=temp;
	}
}

int main()
{
	int allNum=0;
	int choice=0;
	struct Pay ioi[50];
 while(1)
 {
		displayMenu();
		cout<<"请选择您的操作(1,2,3,4,5)"<<endl;
  cin>>choice;
		switch(choice)
  {
			case 1:
				allNum = addPayment(ioi,allNum);
				break;
			case 2:
				findPayment(ioi,allNum);
				break;
			case 3:
				sortMoney(ioi,allNum);
				sumPayment(ioi,allNum);
				break;
			case 4:
				writeFile(ioi);
				break;
			case 5:
				exit(0);
				break;
			default:
				cout<<"输入不合法,重新输入"<<endl;
				break;
		}
	}
}

总结

到此这篇关于C/C++实现个人收支系统的示例代码的文章就介绍到这了,更多相关c++ 个人收支系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C语言实现模糊搜索功能

    使用C语言实现模糊搜索功能

    本文所提到的模糊搜索是指输入不完整的关键词即可查询到对应的全部准确结果。下面小编通过实例代码给大家分享使用C语言实现模糊搜索功能,感兴趣的朋友一起看看吧
    2018-08-08
  • 用C++实现队列的程序代码

    用C++实现队列的程序代码

    本篇文章是对使用C++实现队列的程序代码进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++遍历文件夹获取文件列表

    C++遍历文件夹获取文件列表

    这篇文章主要为大家详细介绍了C++遍历文件夹获取文件列表的相关资料,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 详解C++ cout格式化输出完全攻略

    详解C++ cout格式化输出完全攻略

    这篇文章主要介绍了详解C++ cout格式化输出完全攻略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C语言实现简单扫雷小程序

    C语言实现简单扫雷小程序

    这篇文章主要为大家详细介绍了C语言实现简单扫雷小程序,一款大众类的益智小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 总结IOS中nil、Nil、NULL和NSNull区别

    总结IOS中nil、Nil、NULL和NSNull区别

    相信有不少朋友想知道,在 Objective-C 中 nil 和 Nil 以及 NULL 的区别。最重要的是,在面试中还有不少朋友常会被问到。现在小编在这里统一详细说明。
    2016-08-08
  • 如何通过函数指针调用函数(实现代码)

    如何通过函数指针调用函数(实现代码)

    指针可以不但可以指向一个整形,浮点型,字符型,字符串型的变量,也可以指向相应的数组,而且还可以指向一个函数
    2013-09-09
  • C++控制台循环链表实现贪吃蛇

    C++控制台循环链表实现贪吃蛇

    这篇文章主要为大家详细介绍了C++控制台循环链表实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C/C++ 监控磁盘与目录操作的示例

    C/C++ 监控磁盘与目录操作的示例

    这篇文章主要介绍了C/C++ 监控磁盘与目录操作的示例,帮助大家更好的理解和学习C/C++编程,感兴趣的朋友可以了解下
    2020-10-10
  • C语言数据结构中数制转换实例代码

    C语言数据结构中数制转换实例代码

    这篇文章主要介绍了C语言数据结构中数制转换实例代码的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论