期末C语言作业--家庭理财系统

期末C语言作业--家庭理财系统


比较简单
直接上代码:

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include<time.h>
#include<windows.h>
int s=1;
int b=1;
struct Data
{
      int  a;
	char name[25];
	char riqi[15];
	float money;
	char beizhu[50];
};
struct list			              //链表申请
{
   
	struct Data info;
	struct list *next;
};
struct list *Inhead = NULL;	     //收入链表头指针
struct list *Intail = NULL;	     //收入链表尾指针
struct list *zhichuhead = NULL;  //支出链表头指针
struct list *zhichutail = NULL;  //支出链表尾指针
struct list *temp = NULL;        //定义一个全局空指针方便后面引用
int count=0;
int count1=0;
void inquire_income();
void inquire_pay();
void modify_income();
void modify_pay();
void time();
void inquire_menu();
void Add_income();
void Del_income();
void display_income();
void inquire_menu();
void full_name();
void money();
void content();
void modify_menu();
void full_name_modify_income();
void time_modify_income();
void money_modify_income();
void content_modify_income(); 
void Del_pay();
void inquire_pay();
void display_pay();
void modify_pay(); 
void Add_pay();
void full_name_pay();
void time_pay();
void money_pay();
void content_pay();
void full_name_modify_pay();
void time_modify_pay();
void money_modify_pay();
void content_modify_pay();
void all_income();
void all_pay();
void ALLfund();
void menu();

void Save_income()               //将收入数据存入文件
{
   
	FILE *fp;
	fp=fopen("D:\\shouru.dat","wb");
	struct list *p = Inhead;
	while (p != NULL)
	{
   
		fwrite(&p->info, sizeof(struct Data), 1, fp); //向文件写入内容
		p = p->next;             //指向下一个节点
	}
	fclose(fp);                  //关闭文件
}
void Save_zhichu()               //将支出数据存入文件
{
   
	FILE  *fp;
	fp = fopen("D:\\zhichu.dat","wb");
	struct list  *p = zhichuhead;
	while (p != NULL)
	{
   
		fwrite(&p->info, sizeof(struct Data), 1, fp);
		p = p->next;
	}
	fclose(fp);
}
void Open()                      //提前打开文件将已有的收入数据添加进来(如果没有直接跳过)
{
   
	FILE *pp;
	pp = fopen("D:\\shouru.dat", "rb");

		if(pp != NULL)
		{
   
		    struct Data linshi;  //申请一个结构体
			while (fread(&linshi, sizeof(struct Data), 1, pp) == 1) //直到没有了为止
			{
   
				temp = (struct list*)malloc(sizeof(struct list));   //分配空间赋给temp
				temp->info = linshi;      //将linshi地址赋给temp指向
				temp->next = NULL;        //将指针指向空
				if (Inhead == NULL)       //分为两种情况一种为空的时候一种不为空
				{
   
					Inhead = temp;
					Intail = temp;        //因为第一个元素
				}
				else
				{
   
					Intail->next = temp;  //添加到前尾部的后指针
					Intail = temp;        //尾部指针
				}
		
			}
		   
		  
			fclose(pp);

		}
}
void Openzhichu()                //提前打开文件将已有的支出数据添加进来(如果没有直接跳过)
{
   
	FILE  *fp;
	fp = fopen("zhichu.dat","rb");
		if (fp != NULL)
		{
   
			struct Data linshi;
			while (fread(&linshi, sizeof(struct Data), 1, fp) == 1)
			{
   
				temp = (struct list*)malloc(sizeof(struct list));
				temp->info = linshi;
				temp->next = NULL;
				if (zhichuhead == NULL)
				{
   
					zhichuhead = temp;
					zhichutail = temp;
				}
				else
				{
   
					zhichutail->next = temp;
					zhichutail = temp;
				}
		;
			}
			fclose(fp);
		}
}

/*********************************************************************/
void Menu()                      //菜单主界面
{
   
	system("cls");               //清屏
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\t\t\t\t *****************************************\n");
	printf("\n");
	printf("\t\t\t\t *       欢迎使用家庭财务管理系统        *\n");
	printf("\n");
	printf("\t\t\t\t *****************************************\n");
	printf(" \n");
	printf("\t\t\t\t 1:收入操作 \n");
	printf("\t\t\t\t 2:支出操作 \n");
	printf("\t\t\t\t 3:统计操作 \n");
	printf("\t\t\t\t 0:退出 \n");
}
void menu(){
   
	system("cls");               //清屏
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\t\t\t\t *****************************************\n");
	printf("\n");
	printf("\t\t\t\t *       欢迎使用家庭财务管理系统        *\n");
	printf("\n");
	printf("\t\t\t\t *****************************************\n");
	printf(" \n");
	
	
	
}
/*****************************收入区**********************************/
void Income_menu()               //收入界面
{
   
	system("cls");
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\t\t\t\t *****************************************\n");
	printf(" \n");
	printf("\t\t\t\t *      欢迎使用家庭财务管理系统         * \n");
	printf(" \n");
	printf("\t\t\t\t *****************************************\n");
	printf(" \n");
	printf("\t\t\t\t 1.添加收入 \n");
	printf("\t\t\t\t 2.删除收入 \n");
	printf("\t\t\t\t 3.查询收入 \n");
	printf("\t\t\t\t 4.显示收入 \n");
	printf("\t\t\t\t 5.修改收入 \n");
	printf("\t\t\t\t 0.返回上一级 \n");
}

void Income()                    //进入收入界面
{
   
	int choice;
	while (1)
	{
   
		Income_menu();           //收入菜单显示
		printf("\t\t\t\t 请输入选择: ");
		scanf("%d", &choice);
		fflush(stdin);           //等待
		if (choice == 0)
		{
   
		printf("\t\t\t\t 返回上一级中......  ");system("PAUSE");break;
		}
		else
			switch (choice)
			{
   
			case 1: Add_income(); Save_income(); break;     //添加
			case 2: Del_income(); Save_income(); break;     //删除
			case 3: inquire_income(); Save_income(); break;  //查询
			case 4: display_income(); Save_income(); break;     //显示
			case 5: modify_income(); Save_income(); break;  //修改
			}
	}
}
void Add_income()                //添加收入
{
   
	char panduan;
	do
	{
   
		temp = (struct list*)malloc(sizeof(struct list));
		if(Inhead == NULL){
   
			s=1;
		}
		else{
   
			s=Intail->info.a+1;
		}
		temp->info.a=s;
	
		printf("\t\t\t\t 姓名: "); gets(temp->info.name); fflush(stdin);
		printf("\t\t\t\t 日期( XX 年 XX 月 XX 日): "); gets(temp->info.riqi); fflush(stdin);
		printf("\t\t\t\t 收入: "); scanf("%f", &temp->info.money); fflush(stdin);
		printf("\t\t\t\t 备注: "); gets(temp->info.beizhu); fflush(stdin);
		printf("\n");
		temp->next = NULL;       //将尾部变为空
		if (Inhead == NULL)
		{
   
			Inhead = temp;
			Intail = temp;
		}
		else
		{
   
			Intail->next = temp;
			Intail = temp;
		}
	
		Save_income();
		do{
   

		printf("\t\t\t\t 是否 (Y/N) 继续添加信息:");
		panduan = getchar();
		fflush(stdin);
		if(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N')
	      {
   printf("\t\t\t\t 输入错误!\n");}
	   	}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N');
	} while (panduan == 'Y' || panduan == 'y');
	printf("\t\t\t\t 正在返回......");
	system("PAUSE");
}

void Del_income()                //删除收入
{
   
	char shanchu[20],panduan2;
	int t=0;
 	struct list *p = NULL;
	struct list *m = NULL;
	struct list *n = NULL;
	p = Inhead;
	if(p==NULL){
   
	printf("\t\t\t\t 目前为空列表!\n");
	printf("\t\t\t\t 即将返回收入操作界面进行添加\n");
	printf("\t\t\t\t 正在返回......");
	system("PAUSE");
	}
	else{
   
		part:
		if(t==0) printf("\t\t\t\t 请输入删除姓名: ");
		else
		{
   
			printf("\t\t\t\t 请重新输入删除姓名: ");
		
		}
	gets(shanchu);
	if (strcmp(Inhead->info.name, shanchu) == 0)
	{
   
		count++;
		while (Inhead != NULL && strcmp(Inhead->info.name, shanchu) == 0)
		{
   
			char ch;
			printf("\t\t\t\t 编号: "); printf("%d\n",Inhead->info.a);
			printf("\t\t\t\t 姓名: "); puts(Inhead->info.name);
			printf("\t\t\t\t 日期: "); puts(Inhead->info.riqi);
			printf("\t\t\t\t 收入: "); printf("%.3f\n", Inhead->info.money);
			printf("\t\t\t\t 备注: "); puts(Inhead->info.beizhu);
			printf("\t\t\t\t 找到一个数据名字为%s,确认删除 Y/N ?", shanchu);
			ch = getchar(); fflush(stdin);
			if (ch == 'y' || ch == 'Y'){
   
			Inhead = Inhead->next;
			p = Inhead;
        while(p!=NULL){
   
        	p->info.a=p->info.a-1;
        	p=p->next;


		}


			}
			else {
   
				  break;
			}
		}
	}
	else
	{
   
		if (strcmp(Intail->info.name, shanchu) == 0)
		{
   
			count++;
			do
			{
   
				m = p;
				p = p->next;
			} while (p != Intail);
			char ch2;
			printf("\t\t\t\t 编号: "); printf("%d\n",Intail->info.a);
			printf("\t\t\t\t 姓名: "); puts(Intail->info.name);
			printf("\t\t\t\t 日期: "); puts(Intail->info.riqi);
			printf("\t\t\t\t 收入: "); printf("%.4f\n", Intail->info.money);
			printf("\t\t\t\t 备注: "); puts(Intail->info.beizhu);
			printf("\t\t\t\t 找到一个数据名字为%s,确认删除 Y/N ?", shanchu);
			ch2 = getchar(); fflush(stdin);
			if (ch2 == 'y' || ch2 == 'Y'){
   
			m->next = NULL;
			Intail=m;
		



			}
		
		}
		else 
		{
   
			while( count>=3 && p->next != NULL && strcmp(p->info.name, shanchu) != 0 )
			{
   
				m = p;
				p = p->next;
				n = p->next;
			} 
			if(count>=3 && strcmp(p->info.name, shanchu) == 0)
			{
   
				char ch3;
			printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);
			printf("\t\t\t\t 姓名: "); puts(p->info.name);
			printf("\t\t\t\t 日期: "); puts(p->info.riqi);
			printf("\t\t\t\t 收入: "); printf("%.3f\n", p->info.money);
			printf("\t\t\t\t 备注: "); puts(p->info.beizhu);
			printf("\t\t\t\t 找到一个数据名字为%s,确认删除 Y/N ?", shanchu);
				ch3 = getchar(); fflush(stdin);
				if (ch3 == 'y' || ch3 == 'Y')
					m->next = n;
				while(n!=NULL){
   
					n->info.a=n->info.a-1;
				   n=n->next;
					
				}
					
			}
			else
			{
   
				printf("\t\t\t\t\t 不存在\n");

				if(t==0){
   
						t=1;
					goto part;
				}
				
				
			}

		}
	}
	Save_income();
	if (Inhead != NULL)
	{
   
		char panduan;
	  do{
   
	    
		printf("\t\t\t\t 是否继续删除 (Y/N):");
		panduan = getchar();
		fflush(stdin);
		if (panduan == 'Y' || panduan == 'y')
		{
   
			Del_income();break;
		}
	  else  if(panduan=='n'||panduan=='N'){
   
		   break;
		}
	   else
	     {
   printf("\t\t\t\t 输入错误!\n");}
	}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N');
	}
	else{
   
		printf("\t\t\t\t 目前为空列表!\n");
		printf("\t\t\t\t 即将返回收入操作界面进行添加!!!!!\n");
		printf("\t\t\t\t 正在返回......");
		system("PAUSE");
	}
   }

}
void inquire_income()             //查询收入
{
   
	inquire_menu();
	int choice;
	printf("\t\t\t\t 请输入你的选择: ");
	scanf("%d", &choice);
	fflush(stdin);
	switch (choice)
	{
   
	case 1: full_name(); break;
	case 2: time(); break;
	case 3: money(); break;
	case 4: content(); break;
	default: printf("\t\t\t\t 输入错误 "); break;
	}
}
void full_name()                    //通过名字查询收入
{
   
	char chazhao[20];
	int j=0;
	if(Inhead==NULL){
   
	printf("\t\t\t\t 目前为空列表!\n");
	printf("\t\t\t\t 即将返回收入操作界面进行添加\n");
	printf("\t\t\t\t 正在返回......");
	system("PAUSE");

	}
	else{
   

	printf("\t\t\t\t 请输入查询的名字: ");
	gets(chazhao);
	struct list *p = Inhead;
	while (p != NULL)
	{
   
		if (strcmp(p->info.name, chazhao) == 0)  //循环遍历链表
		{
   
			printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);
			printf("\t\t\t\t 姓名: "); puts(p->info.name);
			printf("\t\t\t\t 日期: "); puts(p->info.riqi);
			printf("\t\t\t\t 收入: "); printf("%.3f\n", p->info.money);
			printf("\t\t\t\t 备注: "); puts(p->info.beizhu)
  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
开发背景 全球经济的蓬勃发展带来了理财领域的巨大变革和创新,新的金融工具和理财观点不断产生,迅速刷新家庭与个人传统的理财观念,随着我国经济的持续上升,居民的收入水平大大提升,家庭理财活动已成为居民生活的重要内容。 以往的理财方式多过于单调,繁琐,效率低,不安全等弊端。掌握更好的理财方法,通过合理的规划支出,能够提升您所拥有,使用,保护财富资源的有效性,提高您的财富控制力,避免过度的债务,破产等问题。 而大多数家庭忙于平时的工作,没有充足的时间去对自身的财务进行合理的管理,借助银行等专业机构帮助家庭理财的话成本又太高,把自己的财富让别人打理还是有顾忌的。所以,开发一种能够帮助人们自己理财,而且又不太繁琐,不很费时的软件是很有必要,也是很有需求的。 需求分析 家庭理财管理系统,则要求对家庭所有成员的财富进行一个合理适用的管理。如用户按照家庭成员统计家庭成员的财富收入,支出。另外,还需要有增加,删除,查找,修改等管理功能 可行性分析 3.1 经济和市场可行性分析 现在,人们的生活水平和文化素质普遍提高,并且开始注重生活质量。随着市场经济的快速发展,观念的不断更新,个人理财意识普遍增强,特别是家庭理财意识得到很大发展,在意识上,一方面,人们对家庭和个人的各方面消费有想进行统计和分析的愿望,以便更好地做好家庭收支计划,和家庭财务管理。 另一方面,各种理财手段不断丰富,如何把各种理财手段统一起来,并且能更加方便的操作成为要求。在物质基础上,计算机的应用开始普及,人们购置计算机和使用计算机的能力增强,人均计算机拥有量将快速提高。这些条件说明,人们有购买一个家庭化财务软件的要求。在一个可接受的价格范围内,将购买这种软件,因此具有市场潜力。经过以上分析,开发一个通用型家庭理财软件具有在经济和市场可行性 。。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingcheng--dp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值