#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXNAME 11    //家庭成员姓名的最大长度
#define MAXDETAIL 21    //注最大长度//自定义枚举类型fi_type,用来表示收入与支出typedef enum _fi_type{income=1,//收入payout =-1 //支出} fi_type;// 家庭财务信息结构体
typedef struct _fi_info{int year;int month;fi_type type;char name[9];float money;char detail[11];}fi_info;// 存储财务数据结构的结构体typedef struct _fi_data{fi_info info;struct _fi_data* next;} fi_data;fi_data *head;//财务数据的头结点void menu();//菜单函数void add_income();void search_income();void delete_income();void update_income();void add_payout();void search_payout();void delete_payout();void update_payout();void count_total();void quit();//void search_data(fi_type type);void delete_data(fi_type type);void update_data(fi_type type);//void initialize();void save_to_file();void clear_data();fi_data *get_last();fi_data *get_previous(fi_data *p);void input_info(fi_info *info);void show_info(fi_data *p);void menu(){printf("\n");printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t       家庭财务管理系统\n");printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t*******************************************\n");printf("\t\t收入管理:");printf("1.添加收入");printf("  2.查询收入明细\n");printf("\t\t\t 3.删除收入");printf("  4.修改收入\n");printf("\t\t*******************************************\n");printf("\t\t支出管理:");printf("5.添加支出");printf("  6.查询支出明细\n");printf("\t\t\t 7.删除支出");printf("  8.修改支出\n");printf("\t\t*******************************************\n");printf("\t\t统    计:");printf("9.统计总收入/总支出\n");printf("\t\t*******************************************\n");printf("\t\t退    出:0.退出系统\n");printf("\t\t*******************************************\n\n\n");}
void main()                {int selected=0;initialize();while(selected>=0&&selected<=9){system("cls");menu();printf("\t\t>请选择要进行的操作(0-9):");if(scanf("%d",&selected)!=1||selected<0||selected>9){printf("\t\t>输入有误!请选择(0-9)之间的数字!按任意键重试");getchar();}else{switch(selected){case 0:exit(0);clear_data();break;case 1:add_income();save_to_file();break;case 2:search_income();break;case 3:delete_income();save_to_file();break;case 4:update_income();save_to_file();break;case 5:add_payout();save_to_file();break;case 6:search_payout();break;case 7:delete_payout();save_to_file();break;case 8:update_payout();save_to_file();break;case 9:count_total();break;}}}}void add_income()//添加收入{fi_data *p=(fi_data *)malloc(sizeof(fi_data));p->next=NULL;input_info(&(p->info));p->info.type=income;if(head==NULL)head=p;elseget_last()->next=p;}void add_payout()//添加支出{fi_data *p=(fi_data *)malloc(sizeof(fi_data));p->next=NULL;input_info(&(p->info));p->info.type=payout;if(head==NULL)head=p;elseget_last()->next=p;}//输入函数void input_info(fi_info *info){printf("\t\t>请输入年月(YYYY/M)");scanf("%d/%d",&(info->year),&(info->month));printf("\t\t>请输入家庭成员姓名(最大长度为%d):",MAXNAME-1);scanf("%s",info->name);printf("\t\t>输入金额:");scanf("%f",&(info->money));printf("\t\t>请输入备注(最大长度为%d):",20);scanf("%s",info->detail);}//查找数据函数void search_data(fi_type type){int year=0;int month=0;fi_data *p=NULL;int count=0;char input=' ';while(1){printf("\t\t>请输入要查询的年月(YYYY/M)");if(scanf("%d/%d",&year,&month)!=2){printf("\t\t>输入有误\n");}else{p=head;count=0;while(p!=NULL){if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type)){show_info(p);system("PAUSE");count++;}p=p->next;}if(count==0){printf("\t\t>没有找到数据\n");}printf("\t\t>继续查找其他数据?(y or n)");input=getchar();if(input=='y'||input=='Y')continue;elsebreak;}}}//初始化函数,读取文本数据void initialize(){FILE * fp=NULL;fi_data *p=NULL;fi_data *last=NULL;int count=0;fp=fopen("data.txt","rb");if(fp==NULL){fp=fopen("data.txt","w");fclose(fp);return;}p=(fi_data*)malloc(sizeof(fi_data));memset(p,0,sizeof(fi_data));p->next=NULL;while(fread(&(p->info),sizeof(fi_info),1,fp)==1){if(head==NULL)head=p;else{last=get_last();last->next=p;}count++;fseek(fp,count*sizeof(fi_info),SEEK_SET);p=(fi_data *)malloc(sizeof(fi_data));memset(p,0,sizeof(fi_data));p->next=NULL;}free(p);p=NULL;fclose(fp);}//显示信息函数void show_info(fi_data *p){int i=0;printf("|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n");printf("|NO.\t |年/月\t\t|类型\t\t|姓名\t\t|金额\t\t|备注\t\t|\n");printf("|%5d\t|%4d/%02d\t|%4s\t|%10s\t|%10.2f|%20s|\n",i+1,p->info.year,p->info.month,p->info.type==income?"收入":"支出",p->info.name,p->info.money,p->info.detail);printf("|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n");}//统计总收入、总支出void count_total(){float total_income=0.0;float total_payout=0.0;fi_data *p=head;while(p!=NULL){if(p->info.type==income){total_income+=p->info.money;}else{total_payout+=p->info.money;}p=p->next;}printf("\t\t+\t\t+\t\t+\n");printf("\t\t|合计收入\t|合计支出\t|结余\t|\n");printf("\t\t%12.2f|%12.2f|%12.2f|\n",total_income,total_payout,total_income-total_payout);printf("\t\t+\t\t+\t\t+\n");printf("\t\t>按任意键返回主菜单");getchar();getchar();}//保存到文件void save_to_file(){FILE *fp=fopen("data.txt","wb" );fi_data *p=head;while(p!=NULL){fwrite(&(p->info),sizeof(fi_info),1,fp);fseek(fp,0,SEEK_END);p=p->next;}fclose(fp);}//修改信息函数void update_data(fi_type type){  int year=0;int month=0;fi_data *p=NULL;fi_data *pre=NULL;char input;int count=0;int i=0;while(1){  printf("\t\t>请输入要查询的年月(YYYY/M)");if(scanf("%d/%d",&year,&month)!=2){printf("\t\t>输入有误\n");}else{p=head;count=0;while(p!=NULL){if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type)){count++;show_info(p);input_info(&(p->info));printf("\t\t修改成功\n");p=get_previous(p);}p=p->next;}if(count==0)printf("\t\t>没有找到数据\n");printf("\t\t>继续查找其他数据?(y or n)");input=getchar();if(input=='y'||input=='Y')continue;elsebreak;}}}void delete_data(fi_type type)//删除数据函数{int year=0;int month=0;fi_data *p=NULL;fi_data *pre=NULL;int count=0;char input=' ';int i=0;while(1){  printf("\t\t>请输入要查询的年月(YYYY/M)");if(scanf("%d/%d",&year,&month)!=2){printf("\t\t>输入有误\n");}else{p=head;count=0;while(p!=NULL){if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type)){count++;show_info(p);pre=get_previous(p);if(pre==NULL)head=head->next;elsepre->next=p->next;free(p);printf("\t\t>删除成功\n");}p=p->next;}if(count==0)printf("\t\t>没有找到数据\n");printf("\t\t>继续查找其他数据?(y or n)");input=getchar();if(input=='y'||input=='Y')continue;elsebreak;}}}void clear_data()//清空链表数据{fi_data *p=NULL;while(head!=NULL){if(head->next!=NULL){p=head;head=head->next;free(p);p=NULL;}else{free(head);head=NULL;}}}fi_data *get_last()                 {fi_data * p=head;if(p==NULL)return p;while((p!=NULL)&&(p->next!=NULL))p=p->next;return p;}fi_data *get_previous(fi_data *p){fi_data *previous=head;while(previous!=NULL){if(previous->next==p)break;previous=previous->next;}return previous;}void search_payout(){search_data(payout);}void delete_payout(){delete_data(payout);}void update_payout(){update_data(payout);}void search_income(){search_data(income);}void delete_income(){delete_data(income);}void update_income(){update_data(income);}

C语言课程设计——家庭财务管理系统源码相关推荐

  1. C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码

    <C语言课程设计学生成绩管理系统+源码>由会员分享,可在线阅读,更多相关<C语言课程设计学生成绩管理系统+源码(25页珍藏版)>请在人人文库网上搜索. 1.简易教学管理系统的设 ...

  2. java计算机毕业设计web家庭财务管理系统源码+数据库+系统+lw文档

    java计算机毕业设计web家庭财务管理系统源码+数据库+系统+lw文档 java计算机毕业设计web家庭财务管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

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

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

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

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

  5. c语言农场,C语言课程设计《开心农场》源码公开

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void Print(char c,int num) { for (int i = 0;i printf("%c",c); } int ...

  6. c语言课程设计(图书馆管理系统)

    大一c语言课程设计:图书馆管理系统. 图书管理系统,功能齐全拿来就能用 1.主界面 代码段 void main() { int n;Sleep(300);loop1:tongji(); printf( ...

  7. c语言课程表策划案,C语言课程设计-个人课程表管理系统报告

    <C语言课程设计-个人课程表管理系统报告>由会员分享,可在线阅读,更多相关<C语言课程设计-个人课程表管理系统报告(57页珍藏版)>请在人人文库网上搜索. 1.dJ Mecht ...

  8. Java课程设计——家庭理财管理系统(SpringMVC+Mybatis+LayUI)

    Java课程设计--家庭理财管理系统SpringMVC+Mybatis+LayUI 1 前言 2 需求与功能分析 3 概要设计 4 数据库设计 4.1 E-R图 4.2 数据库的模型图 4.3 各表的 ...

  9. c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...

    文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言课程设计职工信息管理系统单链表实现程序源代 ...

最新文章

  1. Touchpad Synaptics 触摸板(中文) [zt]
  2. 分享codeigniter框架,在zend studio 环境下的代码提示
  3. 662. 二叉树最大宽度 golang
  4. android网络动态获取权限,基于JetPack实现的权限动态获取
  5. Fragment学习笔记
  6. hibernate 多对多注解配置
  7. Total Commander如何设置自定义快捷键在当前目录打开ConEmu
  8. windows server 2008远程桌面轻松搞定
  9. 进击webpack4 (基础篇:配置 一)
  10. java比python快多少倍_java为什么比python快
  11. 牛顿迭代法的图像推导思路以及代码
  12. 计算机网络教室建设方案,计算机网络教室设计方案汇总.doc
  13. 计算机excel求四分位数,四分位数怎么算excel?
  14. 红队web打点信息收集
  15. 图像转换成lmdb格式
  16. HTML页面中head标签有啥用?—零基础自学网页制作
  17. Mathmatic 函数表
  18. 老夫整理的1000行MySQL学习笔记传授有缘人
  19. Python学习笔记002-安装SQL Server2016(和操作系统般配^-^)
  20. 批处理 窗口最小化 java_如何让批处理程序启动的时候最小化

热门文章

  1. 云套件将http协议改为https协议
  2. ETA6027,可编程限流负载开关,限流可调,过流报警,防反灌
  3. 熙可集团执行总裁:中国食品安全核心是体制问题
  4. Unity 点击UI(按钮)与点击屏幕冲突
  5. 找公司 CTO 聊了聊,原来技术总监需要这些能力!
  6. Vue中的import from
  7. CDN:静态资源如何加速?
  8. Spinner的详解
  9. 卷王-开源调查问卷天花板
  10. Android 获取手机运营商、有无sim卡