C语言课程设计家庭财务管理系统.docx

上传人:b****4 文档编号:5116683 上传时间:2023-05-08 格式:DOCX 页数:28 大小:344.45KB
下载 相关 举报
C语言课程设计家庭财务管理系统.docx_第1页
第1页 / 共28页
C语言课程设计家庭财务管理系统.docx_第2页
第2页 / 共28页
C语言课程设计家庭财务管理系统.docx_第3页
第3页 / 共28页
C语言课程设计家庭财务管理系统.docx_第4页
第4页 / 共28页
C语言课程设计家庭财务管理系统.docx_第5页
第5页 / 共28页
C语言课程设计家庭财务管理系统.docx_第6页
第6页 / 共28页
C语言课程设计家庭财务管理系统.docx_第7页
第7页 / 共28页
C语言课程设计家庭财务管理系统.docx_第8页
第8页 / 共28页
C语言课程设计家庭财务管理系统.docx_第9页
第9页 / 共28页
C语言课程设计家庭财务管理系统.docx_第10页
第10页 / 共28页
C语言课程设计家庭财务管理系统.docx_第11页
第11页 / 共28页
C语言课程设计家庭财务管理系统.docx_第12页
第12页 / 共28页
C语言课程设计家庭财务管理系统.docx_第13页
第13页 / 共28页
C语言课程设计家庭财务管理系统.docx_第14页
第14页 / 共28页
C语言课程设计家庭财务管理系统.docx_第15页
第15页 / 共28页
C语言课程设计家庭财务管理系统.docx_第16页
第16页 / 共28页
C语言课程设计家庭财务管理系统.docx_第17页
第17页 / 共28页
C语言课程设计家庭财务管理系统.docx_第18页
第18页 / 共28页
C语言课程设计家庭财务管理系统.docx_第19页
第19页 / 共28页
C语言课程设计家庭财务管理系统.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言课程设计家庭财务管理系统.docx

《C语言课程设计家庭财务管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计家庭财务管理系统.docx(28页珍藏版)》请在冰点文库上搜索。

C语言课程设计家庭财务管理系统.docx

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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2