C语言课程设计家庭财务管理系统.docx
- 文档编号:13450576
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:29
- 大小:345.72KB
C语言课程设计家庭财务管理系统.docx
《C语言课程设计家庭财务管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计家庭财务管理系统.docx(29页珍藏版)》请在冰点文库上搜索。
C语言课程设计家庭财务管理系统
课程设计报告
课程设计题目:
家庭财务管理系统
学生姓名:
专业:
信息工程
班级:
指导教师:
2018年1月8日
1.需求分析
根据家庭账务管理的需要,建立一个“家庭账务管理系统",以方便对家庭日常收入及支出进行记录和管理。
该系统要求:
①家庭月收入管理②家庭月支出管理③统计家庭总收入/总支出④系统提供收入/支出的添加、删除和修改功能。
2。
总体设计
根据以上分析,本家庭账务管理系统主要包括:
①从键盘键入家庭月收入、月支出数据;
②查询月收入、月支出明细;
③删除收入、支出数据;
④修改收入、支出数据;
⑤统计总收入/总支出;
⑥退出系统.
除main()函数之外,系统还定义了以下函数来实现各部分内容:
①add_income():
添加收入数据函数.
②add_payout():
添加支出数据函数。
③search_data():
查找数据函数。
④initialize():
初始化函数,读取文本数据。
⑤show_info():
显示数据函数。
⑥count_total():
统计函数,统计总收入、总支出.
⑦update_data():
修改信息函数。
⑧delete_data():
删除数据函数。
⑨quit():
退出函数。
程序结构功能图如下:
3。
详细设计
3.1收入管理
3。
2支出管理
4。
测试结果
4.1程序运行主菜单
4.2添加收入测试
4。
3查询收入明细测试
4.4删除收入测试
4.5修改收入测试
4。
6添加支出测试
4。
7查询支出明细测试
4.8删除支出测试
4。
9修改支出测试
4。
10统计总收入/支出测试
4.11退出系统测试
5.软件操作使用说明书
本系统采用命令行对话方式进行操作,运行后出现主界面(如下图所示),然后按照主界面菜单指引操作即可。
6。
总结
编写程序之前要有一个整体的思路,不能写到哪里算哪里。
这样很容易遗漏,连续性也不好。
通过本次的课程设计让我对于数组、文件的存放、循环结构等知识有了更加透彻的理解。
希望在以后的课程设计中对于知识的运用能够更加的熟练。
代码:
#include #include〈stdlib。 h> #include〈string.h> #include〈conio。 h> #defineMAXNAME11//家庭成员姓名的最大长度 #defineMAXDETAIL21 //注最大长度 //自定义枚举类型fi_type,用来表示收入与支出 typedefenum_fi_type { income=1,//收入 payout=-1//支出 }fi_type; //家庭财务信息结构体 typedefstruct_fi_info { intyear; intmonth; fi_typetype; charname[9]; floatmoney; chardetail[11]; }fi_info; //存储财务数据结构的结构体 typedefstruct_fi_data { fi_infoinfo; struct_fi_data*next; }fi_data; fi_data*head;//财务数据的头结点 voidmenu();//菜单函数 voidadd_income(); voidsearch_income(); voiddelete_income(); voidupdate_income(); voidadd_payout(); voidsearch_payout(); voiddelete_payout(); voidupdate_payout(); voidcount_total(); voidquit(); // voidsearch_data(fi_typetype); voiddelete_data(fi_typetype); voidupdate_data(fi_typetype); // voidinitialize(); voidsave_to_file(); voidclear_data(); fi_data*get_last(); fi_data*get_previous(fi_data*p); voidinput_info(fi_info*info); voidshow_info(fi_data*p); voidmenu() { 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\t3。 删除收入"); printf("4.修改收入\n”); printf("\t\t*******************************************\n"); printf(”\t\t支出管理: "); printf(”5。 添加支出”); printf("6.查询支出明细\n"); printf(”\t\t\t7。 删除支出”); 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”); } voidmain() { intselected=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) { case0: exit(0);clear_data();break; case1: add_income();save_to_file();break; case2: search_income();break; case3: delete_income();save_to_file();break; case4: update_income();save_to_file();break; case5: add_payout();save_to_file();break; case6: search_payout();break; case7: delete_payout();save_to_file();break; case8: update_payout();save_to_file();break; case9: count_total();break; } } } } voidadd_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; else get_last()—>next=p; } voidadd_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; else get_last()—〉next=p; } //输入函数 voidinput_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); } //查找数据函数 voidsearch_data(fi_typetype) { intyear=0; intmonth=0; fi_data*p=NULL; intcount=0; charinput=''; 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>继续查找其他数据? (yorn)”); input=getchar(); if(input=='y'||input=='Y') continue; else break; } } } //初始化函数,读取文本数据 voidinitialize() { FILE*fp=NULL; fi_data*p=NULL; fi_data*last=NULL; intcount=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); } //显示信息函数 voidshow_info(fi_data*p) { inti=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"); } //统计总收入、总支出 voidcount_total() { floattotal_income=0。 0; floattotal_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(); } //保存到文件 voidsave_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); } //修改信息函数 voidupdate_data(fi_typetype) {intyear=0; intmonth=0; fi_data*p=NULL; fi_data*pre=NULL; charinput; intcount=0; inti=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〉继续查找其他数据? (yorn)”); input=getchar(); if(input=='y’||input=='Y') continue; else break; } } } voiddelete_data(fi_typetype)//删除数据函数 { intyear=0; intmonth=0; fi_data*p=NULL; fi_data*pre=NULL; intcount=0; charinput=''; inti=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; else pre—〉next=p—〉next; free(p); printf("\t\t〉删除成功\n"); } p=p—〉next; } if(count==0) printf("\t\t〉没有找到数据\n”); printf("\t\t〉继续查找其他数据? (yorn)"); input=getchar(); if(input=='y’||input=='Y’) continue; else break; } } } voidclear_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) returnp; while((p! =NULL)&&(p-〉next! =NULL)) p=p—>next; returnp; } fi_data*get_previous(fi_data*p) { fi_data*previous=head; while(previous! =NULL) { if(previous—>next==p) break; previous=previous—〉next; } returnprevious; } voidsearch_payout() { search_data(payout); } voiddelete_payout() { delete_data(payout); } voidupdate_payout() { update_data(payout); } voidsearch_income() { search_data(income); } voiddelete_income() { delete_data(income); } voidupdate_income() { update_data(income); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 家庭 财务管理 系统