C语言课程设计——家庭财务管理系统_第1页
C语言课程设计——家庭财务管理系统_第2页
C语言课程设计——家庭财务管理系统_第3页
C语言课程设计——家庭财务管理系统_第4页
C语言课程设计——家庭财务管理系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上课程设计报告课程设计题目: 家庭财务管理系统学生姓名 :专 业: 信息工程班 级:指导教师 :2018 年 1 月 8 日专心-专注-专业1. 需求分析根据家庭账务管理的需要,建立一个“家庭账务管理系统” ,以方便对家庭日常收入及支出进行记录和管理。 该系统要求: 家庭月收入管理家庭月支出管理统计家庭总收入 / 总支出系统提供收入 / 支出的添加、删除和修改功能。2. 总体设计根据以上分析,本家庭账务管理系统主要包括:从键盘键入家庭月收入、月支出数据;查询月收入、月支出明细;删除收入、支出数据;修改收入、支出数据;统计总收入 / 总支出;退出系统。除 main() 函

2、数之外,系统还定义了以下函数来实现各部分内容:add_income():添加收入数据函数。add_payout ():添加支出数据函数。search_data ():查找数据函数。initialize() :初始化函数,读取文本数据。show_info ():显示数据函数。count_total ():统计函数,统计总收入、总支出。update_data ():修改信息函数。delete_data ():删除数据函数。quit(): 退出函数。程序结构功能图如下:3. 详细设计3.1 收入管理3.2 支出管理4. 测试结果3.3 程序运行主菜单5. 添加收入测试6. 查询收入明细测试7. 删除

3、收入测试8. 修改收入测试9. 添加支出测试10. 查询支出明细测试11. 删除支出测试12. 修改支出测试13. 统计总收入 / 支出测试14. 退出系统测试15. 软件操作使用说明书本系统采用命令行对话方式进行操作,运行后出现主界面(如下图所示) ,然后按照主界面菜单指引操作即可。16. 总结编写程序之前要有一个整体的思路, 不能写到哪里算哪里。 这样很容易遗漏, 连续性也不好。 通过本次的课程设计让我对于数组、 文件的存放、 循环结构等知识有了更加透彻的理解。希望在以后的课程设计中对于知识的运用能够更加的熟练。代码:#include <stdio.h>#include <

4、;stdlib.h>#include <string.h>#include <conio.h>#define MAXNAME 11 / 家庭成员姓名的最大长度#define MAXDETAIL 21 / 注最大长度/ 自定义枚举类型 fi_type ,用来表示收入与支出typedef enum _fi_typeincome=1,/ 收入payout =-1 / 支出 fi_type;/ 家庭财务信息结构体typedef struct _fi_infoint year;int month;fi_type type;char name9;float money;cha

5、r detail11;fi_info;/ 存储财务数据结构的结构体typedef struct _fi_datafi_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_payou

6、t();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);vo

7、id menu()printf("n");printf("tt n");printf("tt n");printf("ttt 家庭财务管理系统 n");printf("tt n");printf("tt n");printf("tt*n");printf("tt 收入管理 :");printf("1. 添加收入 ");printf(" 2. 查询收入明细 n");printf("ttt

8、3. 删除收入 ");printf(" 4. 修改收入 n");printf("tt*n");printf("tt 支出管理 :");printf("5. 添加支出 ");printf(" 6. 查询支出明细 n");printf("ttt 7. 删除支出 ");printf(" 8. 修改支出 n");printf("tt*n");printf("tt 统 计:");printf("9. 统计总

9、收入 / 总支出 n");printf("tt*n");printf("tt 退 出:0. 退出系统 n");printf("tt*nnn");void main()int selected=0;initialize();while(selected>=0&&selected<=9)system("cls");menu();printf("tt> 请选择要进行的操作 (0-9):");if(scanf("%d",&selec

10、ted)!=1|selected<0|selected>9)printf("tt> 输入有误!请选择 (0-9) 之间的数字!按任意键重试 ");getchar();elseswitch(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

11、_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(&(

12、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)p

13、rintf("tt> 请输入年月 (YYYY/M)");scanf("%d/%d",&(info->year),&(info->month);printf("tt> 请输入家庭成员姓名(最大长度为 %d):",MAXNAME-1);scanf("%s",info->name);printf("tt> 输入金额 :");scanf("%f",&(info->money);printf("tt> 请

14、输入备注 ( 最大长度为 %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("tt> 请输入要查询的年月 (YYYY/M)");if(scanf("%d/%d",&year,&month)!=2)printf("tt&g

15、t; 输入有误 n");elsep=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("tt> 没有找到数据 n");printf("tt> 继续查找其他数据? (y or n)");input=ge

16、tchar();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(si

17、zeof(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;elselast=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

18、);p=NULL;fclose(fp);/ 显示信息函数void show_info(fi_data *p)int i=0;printf("|tt|tt|tt|tt|tt|tt|n");printf("|NO.t | 年/ 月tt| 类型tt| 姓名tt| 金额tt| 备注tt|n");printf("|%5dt|%4d/%02dt|%4st|%10st|%10.2f|%20s|n",i+1,p->info.year,p->info.month,p->info.type=income?" 收入":

19、" 支出",p->,p->info.money,p->info.detail);printf("|tt|tt|tt|tt|tt|tt|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;elsetotal_payout+=p->info.

20、money;p=p->next;printf("tt+tt+tt+n");printf("tt| 合计收入 t| 合计支出 t| 结余t|n");printf("tt%12.2f|%12.2f|%12.2f|n",total_income,total_payout,total_income-total_payout);printf("tt+tt+tt+n");printf("tt> 按任意键返回主菜单 ");getchar();getchar();/ 保存到文件void save_t

21、o_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=

22、0;int i=0;while(1) printf("tt> 请输入要查询的年月 (YYYY/M)");if(scanf("%d/%d",&year,&month)!=2)printf("tt> 输入有误 n");elsep=head;count=0;while(p!=NULL)if(p->info.year=year)&&(p->info.month=month)&&(p->info.type=type)count+;show_info(p);input_

23、info(&(p->info);printf("tt 修改成功 n");p=get_previous(p);p=p->next;if(count=0)printf("tt> 没有找到数据 n");printf("tt> 继续查找其他数据? (y or n)");input=getchar();if(input='y'|input='Y')continue;elsebreak;void delete_data(fi_type type)/ 删除数据函数int year=0;

24、int month=0;fi_data *p=NULL;fi_data *pre=NULL;int count=0;char input=' 'int i=0;while(1) printf("tt> 请输入要查询的年月 (YYYY/M)");if(scanf("%d/%d",&year,&month)!=2)printf("tt> 输入有误 n");elsep=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("tt> 删除成功 n");p=p->next;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论