⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a.c

📁 计算机课程设计
💻 C
字号:
#include<stdio.h>
#include<string.h>
struct notebook
{
	struct date//日期
	{
		int y;
		int m;
		int d;
	}date;
	int mon;  //金额
	int info;//摘要       等于0 表示支出  , 等于1表示收入
	int res;   //余额
	char cur[3];//币种

};
struct notebook data[100];
int numdata;
int i;

void get()
{
	struct notebook t;
wm:	printf("输入日期(YYYY:MM:DD): ");
	scanf("%d:%d:%d",&t.date.y,&t.date.m,&t.date.d);
	fflush(stdin);      //清空输入缓冲区
	if((t.date.m>12)|(t.date.m<1)|(t.date.d>31)|(t.date.d<1))goto wm;
	printf("输入金额:");
	scanf("%d",&t.mon);
	fflush(stdin);
	printf("输入币种:");
	gets(t.cur);
	if(strlen(t.cur)==0) strcpy(t.cur,"RMB");  //如果输入字符为空则赋默认值 RMB
	t.info=1;
	if(numdata>0){t.res =data[numdata-1].res+t.mon;}   //在前一次剩余金额的基础上设置这一次的剩余金额
	else{t.res =t.mon;}     //没有数据则把剩余金额设置等于刚加入的金额
	data[numdata]=t;
	numdata++;
}

void use()   //use函数原理与get类似,唯一不同的一个是加钱一个是减钱
{
	struct notebook t;
ww:	printf("输入日期(YYYY:MM:DD): ");
	scanf("%d:%d:%d",&t.date.y,&t.date.m,&t.date.d);
	fflush(stdin);
	if((t.date.m>12)|(t.date.m<1)|(t.date.d>31)|(t.date.d<1))goto ww;  //判断月在1~12,日在1~30之间
	printf("输入金额:");
	scanf("%d",&t.mon);
	fflush(stdin);
	printf("输入币种:");
	gets(t.cur);
	if(strlen(t.cur)==0) strcpy(t.cur,"RMB");
	t.info=0;
	if(numdata>0){t.res =data[numdata-1].res-t.mon;}
	else{t.res =-t.mon;}
	data[numdata]=t;
	numdata++;

}

void stat()
{
	int a,b,allrec,alluse;
	allrec=0;   //累计,所有收入
	alluse=0;   //累计,所有支出
	if(numdata==0)
		printf("没有数据\n");
	else
	{
	printf("1:统计某一年\n2.统计某年某一个月\n输入项目编号:");
	scanf("%d",&a);

	switch(a)
	{
	case 1:{
		printf("输入年:");
		scanf("%d",&a);
		for(i=0;i<numdata;i++)
		{
			if(data[i].date.y==a)
			{
				if(data[i].info==1)allrec+=data[i].mon;     //摘要为1表示收入,否则是支出
				else alluse+=data[i].mon;
			}
		}
		printf("      总收入:%d       总支出:%d",allrec,alluse);
		   }break;
	case 2:{
		printf("输入年:");
		scanf("%d",&a);
		printf("输入月:");
		scanf("%d",&b);
		for(i=0;i<numdata;i++)
		{
			if((data[i].date.y==a)&(data[i].date.m==b))
			{
				if(data[i].info==0)allrec+=data[i].mon;
				else alluse+=data[i].mon;
			}
		}
		printf("      总收入:%d       总支出:%d",allrec,alluse);

		   }break;
	}
	}
}

void showall()
{
	struct notebook t;
	if(numdata==0)
		printf("没有数据\n");
	else
	{
wk:	printf("输入起始日期(YYYY:MM:DD):");
	scanf("%d:%d:%d",&t.date.y,&t.date.m,&t.date.d);
	fflush(stdin);
	if((t.date.m>12)|(t.date.m<1)|(t.date.d>31)|(t.date.d<1))goto wk;
	printf("-----------------------------------------------------------------------");
	printf("\n顺序号       日期         摘要       金额           余额     币种\n");
		for(i=0;i<numdata;i++)
		{
			if((data[i].date.y>t.date.y)|
			((data[i].date.y==t.date.y)&(data[i].date.m>t.date.m))|
			((data[i].date.y==t.date.y)&(data[i].date.m==t.date.m)&(data[i].date.d>=t.date.d))) 
			{printf("%4d     %4d:%2d:%2d        %d     %8d       %8d     %s\n",i+1,data[i].date.y,data[i].date.m,data[i].date.d,data[i].info,data[i].mon,data[i].res,data[i].cur);}
		}
	printf("-----------------------------------------------------------------------\n");
	}
}

void write()
{
	FILE *f;
	char fn[10];
	printf("输入文件名:");
	scanf("%s",fn);
	f=fopen(fn,"wb");
	for(i=0;i<numdata;i++)
	{
		fwrite(&data[i],sizeof(struct notebook),1,f);
	}
}

void read()
{
	FILE *f;
	char fn[10];
	numdata=0;
	printf("输入文件名:");
	scanf("%s",fn);
	f=fopen(fn,"rb");
	while(!feof(f))
	{
		fread(&data[numdata++],sizeof(struct notebook),1,f);
	}
	fclose(f);
}

int main()
{
int a;
numdata=0;
ww:	printf("\n         个人收支管理\n  1. 收入\n  2. 支出\n  3. 明细表\n  4. 统计\n  5. 写入文件\n  6. 读取文件\n  0. 退出\n");
	printf("请输入选项编号:");
	scanf("%d",&a);
	switch(a){
		case 1:get();break;  //收入
		case 2:use();break;  //支出
		case 3:showall();break;  //明细表
		case 4:stat();break;  //统计
		case 5:write();break;  //写入文件
		case 6:read();break;  //读取文件
		case 0:return 0;break;  //退出
		default:printf("                     编号无效\n\n");
	}
goto ww;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -