C语言课程设计——家庭财务管理系统源码
#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语言课程设计——家庭财务管理系统源码相关推荐
- C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码
<C语言课程设计学生成绩管理系统+源码>由会员分享,可在线阅读,更多相关<C语言课程设计学生成绩管理系统+源码(25页珍藏版)>请在人人文库网上搜索. 1.简易教学管理系统的设 ...
- java计算机毕业设计web家庭财务管理系统源码+数据库+系统+lw文档
java计算机毕业设计web家庭财务管理系统源码+数据库+系统+lw文档 java计算机毕业设计web家庭财务管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
- java课程设计家庭财务管理系统_javaEE-课程设计-个人财务管理系统
<javaEE-课程设计-个人财务管理系统>由会员分享,可在线阅读,更多相关<javaEE-课程设计-个人财务管理系统(5页珍藏版)>请在人人文库网上搜索. 1.javaEE- ...
- java课程设计家庭财务管理系统_家庭财务管理系统设计方案与实现.doc
家庭财务管理系统设计方案与实现 苏州大学高等教育自学考试"专接本" 毕业论文(设计) 题目 家庭财务管理系统的设计与实现 专科学校 无锡科技职业学院 专业 计算机信息管理 班级 信 ...
- c语言农场,C语言课程设计《开心农场》源码公开
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void Print(char c,int num) { for (int i = 0;i printf("%c",c); } int ...
- c语言课程设计(图书馆管理系统)
大一c语言课程设计:图书馆管理系统. 图书管理系统,功能齐全拿来就能用 1.主界面 代码段 void main() { int n;Sleep(300);loop1:tongji(); printf( ...
- c语言课程表策划案,C语言课程设计-个人课程表管理系统报告
<C语言课程设计-个人课程表管理系统报告>由会员分享,可在线阅读,更多相关<C语言课程设计-个人课程表管理系统报告(57页珍藏版)>请在人人文库网上搜索. 1.dJ Mecht ...
- Java课程设计——家庭理财管理系统(SpringMVC+Mybatis+LayUI)
Java课程设计--家庭理财管理系统SpringMVC+Mybatis+LayUI 1 前言 2 需求与功能分析 3 概要设计 4 数据库设计 4.1 E-R图 4.2 数据库的模型图 4.3 各表的 ...
- c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言课程设计职工信息管理系统单链表实现程序源代 ...
最新文章
- Touchpad Synaptics 触摸板(中文) [zt]
- 分享codeigniter框架,在zend studio 环境下的代码提示
- 662. 二叉树最大宽度 golang
- android网络动态获取权限,基于JetPack实现的权限动态获取
- Fragment学习笔记
- hibernate 多对多注解配置
- Total Commander如何设置自定义快捷键在当前目录打开ConEmu
- windows server 2008远程桌面轻松搞定
- 进击webpack4 (基础篇:配置 一)
- java比python快多少倍_java为什么比python快
- 牛顿迭代法的图像推导思路以及代码
- 计算机网络教室建设方案,计算机网络教室设计方案汇总.doc
- 计算机excel求四分位数,四分位数怎么算excel?
- 红队web打点信息收集
- 图像转换成lmdb格式
- HTML页面中head标签有啥用?—零基础自学网页制作
- Mathmatic 函数表
- 老夫整理的1000行MySQL学习笔记传授有缘人
- Python学习笔记002-安装SQL Server2016(和操作系统般配^-^)
- 批处理 窗口最小化 java_如何让批处理程序启动的时候最小化