C语言课程设计家庭财务管理系统Word文档下载推荐.docx
《C语言课程设计家庭财务管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言课程设计家庭财务管理系统Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
![C语言课程设计家庭财务管理系统Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/3fb81f60-2b1e-449f-9d59-b36d598b29bf/3fb81f60-2b1e-449f-9d59-b36d598b29bf1.gif)
9quit():
退出函数。
程序结构功能图如下
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<
stdio.h>
stdlib.h>
string.h>
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\tprintf("
\t\t\tprintf("
\t\t
~~~~~~~~~~~~~~~~~~~~~~\n"
家庭财务管理系统\n"
\t\t*
****************************************
**\n"
收入管理:
"
添加收入"
查询收入明细\n"
删除收入"
修改收入\n"
支出管理:
添加支出"
查询支出明细\n"
删除支出"
修改支出\n"
9.
统计:
统计总收入/总支出\n"
\t\t退出:
0.退出系统\n"
**\n\n\n"
}voidmain()
intselected=0;
initialize();
while(selected>
=0&
&
selected<
=9)
system("
cls"
menu();
\t\t>
请选择要进行的操作(0-9):
if(scanf("
%d"
&
selected)!
=1||selected<
0||selected>
9)
输入有误!
请选择(0-9)之间的数字!
按任意键重试"
getchar();
}
else
switch(selected)
case0:
exit(0);
clear_data();
break;
case1:
add_income();
save_to_file();
case2:
search_income();
case3:
delete_income();
case4:
update_income();
case5:
add_payout();
case6:
search_payout();
case7:
delete_payout();
case8:
update_payout();
case9:
count_total();
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;
get_last()->
next=p;
voidadd_payout()//添加支出
input_info(&
info.type=payout;
//输入函数
voidinput_info(fi_info*info)
请输入年月(YYYY/M)"
scanf("
%d/%d"
(info->
year),&
month));
请输入家庭成员姓名(最大长度为%d):
MAXNAME-1);
%s"
info->
name);
输入金额:
%f"
money));
请输入备注(最大长度为%d):
20);
detail);
//查找数据函数
voidsearch_data(fi_typetype)
intyear=0;
intmonth=0;
fi_data*p=NULL;
intcount=0;
charinput='
'
;
while
(1)
请输入要查询的年月(YYYY/M)"
year,&
month)!
=2)
输入有误\n"
p=head;
count=0;
while(p!
=NULL)
if((p->
info.year==year)&
info.month==month)&
info.type==type)){
show_info(p);
system("
PAUSE"
count++;
p=p->
next;
if(count==0)
没有找到数据\n"
继续查找其他数据?
(yorn)"
input=getchar();
if(input=='
y'
||input=='
Y'
)
continue;
//初始化函数,读取文本数据
voidinitialize()
FILE*fp=NULL;
fi_data*last=NULL;
fp=fopen("
data.txt"
"
rb"
if(fp==NULL)
{fp=fopen("
w"
fclose(fp);
return;
}p=(fi_data*)malloc(sizeof(fi_data));
memset(p,0,sizeof(fi_data));
while(fread(&
info),sizeof(fi_info),1,fp)==1)
if(head==NULL)head=p;
last=get_last();
last->
fseek(fp,count*sizeof(fi_info),SEEK_SET);
p=(fi_data*)malloc(sizeof(fi_data));
memset(p,0,sizeof(fi_data));
free(p);
p=NULL;
fclose(fp);
//显示信息函数
voidshow_info(fi_data*p)
inti=0;
|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n"
|NO.\t|年/月\t\t|类型\t\t|姓名\t\t|金额\t\t|备注\t\t|\n"
|%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?
收入"
:
支出"
info.name,p->
info.money,p->
info.detail);
//统计总收入、总支出
voidcount_total()
floattotal_income=0.0;
floattotal_payout=0.0;
fi_data*p=head;
while(p!
if(p->
info.type==income)
total_income+=p->
info.money;
total_payout+=p->
\t\t+\t\t+\t\t+\n"
\t\t|合计收入\t|合计支出\t|结余\t|\n"
\t\t%12.2f|%12.2f|%12.2f|\n"
total_income,total_payout,total_income-total_payout);
按任意键返回主菜单"
getchar();
//保存到文件
voidsave_to_file()
FILE*fp=fopen("
wb"
);
fi_data*p=head;
{fwrite(&
info),sizeof(fi_info),1,fp);
fseek(fp,0,SEEK_END);
//修改信息函数
voidupdate_data(fi_typetype)
{intyear=0;
fi_data*pre=NULL;
charinput;
{printf("
show_info(p);
\t\t修改成功\n"
p=get_previous(p);
voiddelete_data(fi_typetype)//删除数据函数
=NULL){if((p->
pre=get_previous(p);
if(pre==NULL)head=head->
pre->
next=p->
删除成功\n"
(yorn)"
input=getchar();
voidclear_data()//清空链表数据
while(head!
if(head->
next!
head=head->
free(head);
head=NULL;
fi_data*get_last()
fi_data*p=head;
if(p==NULL)
returnp;
while((p!
=NULL)&
=NULL))p=p->
fi_data*get_previous(fi_data*p)
fi_data*previous=head;
while(previous!
if(previous->
next==p)break;
previous=previous->
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);