C语言课程设计家庭财务管理系统.docx
- 文档编号:5665311
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:16
- 大小:17.95KB
C语言课程设计家庭财务管理系统.docx
《C语言课程设计家庭财务管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计家庭财务管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
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
#include
#include
#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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 家庭 财务管理 系统