C语言家庭财务管理系统设计报告.docx
- 文档编号:9462616
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:19
- 大小:169.11KB
C语言家庭财务管理系统设计报告.docx
《C语言家庭财务管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《C语言家庭财务管理系统设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
C语言家庭财务管理系统设计报告
东华理工大学
C语言课程设计实验报告
题目:
家庭账务管理
姓名:
曾祥华
班级:
1321815
学号:
201320181518
指导老师:
程志梅
一案例描述
1.总体描述
家庭财务管理系统主要是对家庭成员的收入,支出,进行添加,删除,查询等操作,并能统计总收入和总支出。
该软件给家庭成员提供了一个管理家庭财务的平台。
2.模块描述
1)菜单设计:
本系统提供简单易操作的界面。
有提示,帮助用户根据需要对家庭财务管理系统进行操作。
2)添加模块:
根据实际的收入或支出,添加相应的记录,条数不限。
3)查询模块:
可以选择不同关键字输入,查找该条记录。
4)删除模块:
若某条记录错误或者不需要则可以删除。
5)显示模块:
按照添加的先后顺序依次把记录显示在屏幕上,并显示总收入和总支出以及余额。
6)退出模块:
退出财务管理系统并保存文件。
二界面设计
界面有相应的选择,根据自己的需要对该管理系统进行添加,查找,删除,显示功能操作.
本软件界面友好,不难操作,用户可根据自己的需要按提示进行。
三模块化设计方案
1.系统主要函数及功能
1)DataInit函数:
功能为数据初始化
将数据从硬盘传到内存。
2)add函数:
功能为添加收入或支出的记录
3)search函数:
功能为查找联系人
输入关键字,从文件中搜索相应的记录并显示出来。
4)delete_rec函数:
功能为删除记录
若某条记录错误或者不需要则可以删除。
5)show函数:
功能为显示记录
将添加的记录显示在屏幕上。
6)quit函数:
功能为保存信息退出系统
2.主函数调用各功能函数流程
四.数据结构描述
structF_Data
{
intyear;//年
intmonth;//月
intdata;//日期
floatamout;//金额
charname[20];//姓名
inttype;//收入或支出类型
charcomment[100];//备注
structF_Data*next;//定义一个指针
};
该数据结构为链表,是一种动态进行存储分配的结构。
链表的每一个一个节点中包含了一个指针变量,用它存放下一个结点的地址,环环相扣,中间决不能断开,该指针指向一个structF_Data类型的数据.链表中各元素在内存中可以不是连续存放的。
五算法设计
添加
在主菜单选择添加选项后,系统会依次让用户输入年月日,并且限定月份输入时要在1至12内,如果符合要求则继续执行,输完整条记录。
动态链表会根据用户的使用情况动态调整内存大小.插入一个结点到已有链表后,head指向插入的结点,该结点指向head原来所指的结点。
每添加一条记录后接点随即加一。
查询
在主菜单选择查询选项后,选择查询方式,1。
按姓名查2.按类型查.然后按提示输入相应的信息姓名(或备注),系统会根据信息用一个指针从这个链表的第一个结点依次往后开始查询,若某个结点符合则输出该记录的信息,若指向NULL即最后一个结点也查询完毕依然没找到,则返回主菜单。
删除
输入需要删除的姓名和金额,系统会根据信息用一个q指针从这个链表的第一个结点依次往后开始查询,并将已查询过的结点赋给另一个p指针.若某个结点符合则显示该记录的信息,并让用户再次确认是否删除.若指向NULL即最后一个结点也查询完毕依然没找到,则则返回主菜单。
如果确定删除该结点,则q所指的结点的前一个结点(即p所指的结点)指向该接点所指向的下一个结点,也就是将q所指的结点从原来的链表中分离出来。
每删除一条记录后接点随即减一。
六.程序运行结果
1.添加联系人
添加记录时限定月份在1~12月之间,否则无法添加,每添加一条记录后就返回主菜单,链表中插入了该结点。
2查询联系人
查询记录时,可以选择类型或者姓名进行查找。
若选择按姓名查找,则在输入名字后,系统会根据添加的先后顺序,在屏幕上依次显示出该联系人的全部记录。
3删除联系人
选择删除选项后,界面会让使用者输入要删除者的姓名及金额,并根据输入的信息显示该条记录,并且为了防止意外删除而有提示是否删除,经使用者再三确认后便删除该记录。
4显示联系人
在菜单中选择显示选项后,系统会把所有的记录按照先后顺序依次逐条显示在界面上,并且还计算出了一共的收入,一共的支出及当前余额。
5退出
在菜单中选中该选项后,系统会把所有的资料都保存到文件中,然后关闭该系统。
七.总结
1.工作时间
通讯录界面—-1星期
添加的实现—-1星期
查询的实现——1星期
删除的实现--1星期
显示实现——1星期
退出的实现——1星期
程序初步完成——3星期
整理修改程序-—1星期
报告的制作——1星期
2.分工情况
何洁:
设计程序的整个框架,编写add函数,delete_rec函数,并对初步完成的整个程序做调试修改。
制作报告的案例描述,模块设计方案,数据结构描述,总结。
潘昇琳:
编写search函数,quit函数,制作报告的封面,流程图,界面设计。
王树康:
编写DataInit函数,show函数,算法设计,程序运行结果。
3.心得体会
本次对家庭财务管理系统的编写,我遇到了许多困难。
主要原因不怎么擅长使用“指针".在添加模块中,由于没有很好的理解指针中插入的专用句子,所以脱离书本的时候根本不知怎么开始,自己想了很久也没想出来,后面翻了书,把相关的句子抄上去后死记硬背了下来.p-〉next=head;head=p;在写删除模块是也遇到了类似的问题.看了书上的一个例题,里面有两个指针,可是我的代码中只有一个,怎么办呢?
模仿了书上的写法,第一次以失败告终,经过很多种修改后总结出失败的原因是该指针定义错误,针对该错误,经过很多的尝试终成功了。
在显示函数中,自我感觉没有错误了,可是每次在“一共收入,一共支出,当前余额"后面都显示了一长串数字,在快放弃时终于发现自己犯了一个很可笑的错,printf语言中居然用了取地址符,真是苦笑不得.在保存函数中叶犯了一些常见的错,在写入文件中居然用了fscanf语句,因此,一开始打开该系统时总是什么记录也没有,后来老师给我指出了这个错误,在修改之后还是不能显示之前的记录,请教其他同学后才发现主函数中没有调用数据导入函数,在修改之后,一个系统就完成了.
我们也有了一些感慨:
我们平时的一些基础学习真的很重要.总而言之,这次的报告让我们获益匪浅。
附页(源代码附加注释)
以下是添加模块代码
voidadd()
{
system(”cls”);/*清屏*/
structF_Data*p=NULL;/*定义pNode为structF_Data类型指针*/
p=(structF_Data*)malloc(sizeof(structF_Data));/*运行时动态调整所占内存的大小*/
printf("请输入年份:
");
scanf("%d",&p—>year);
printf(”请输入月份:
");
scanf("%d",&p—〉month);
if((p->month〉0)&&(p->month〈13))/*限定月份为1~12*/
{
printf("请输入日期:
");
scanf("%d",&p->data);
printf(”请输入金额:
");
scanf("%f",&p->amout);
printf("请输入姓名:
”);
scanf(”%s”,p->name);
printf(”收入按1,支出按0:
”);
scanf(”%d”,&p->type);
printf(”请输入类型:
");
scanf("%s”,p—>comment);
p->next=head;/*插入一个结点*/
head=p;
Recordcount++;/*结点数加一*/
}
system(”PAUSE");/*停顿*/
}
在菜单界面选择“添加”选项,界面会依次显示年份,月份,且限定月份为1~12,再显示日期,金额,姓名,type,类型逐个填写,然后返回到菜单界面。
以下是查询模块代码
voidsearch()
{
system(”cls");/*清屏*/
charname[20];
inttype;
intchoice;
structF_Data*p=NULL;/*定义pNode为structF_Data类型指针*/
printf(”1按姓名查找\n2按类型查找\n");
printf(”请输入你的选择:
");
scanf(”%d”,&choice);
if(choice==1)
{
printf("请输入姓名:
”);
scanf("%s",name);
for(p=head;p!
=NULL;p=p-〉next)/*从链表的第一个结点到尾结点*/
if(strcmp(p-〉name,name)==0)/*如果输入的name和结点中的name一样*/
{
printf("%d\t”,p->year);
printf(”%d\t”,p-〉month);
printf(”%d\t”,p->data);
printf(”%。
2f\t",p—>amout);
printf(”%s\t”,p—〉name);
printf(”%d\t”,p->type);
printf(”%s\n",p—>comment);
}
}
if(choice==2)
{
printf("请输入类型:
1收入0支出\n”);
scanf(”%d”,&type);
for(p=head;p!
=NULL;p=p—>next)
if(p->type==type)/*如果输入的type和结点中的type一样*/
{
printf("%d\t”,p->year);
printf("%d\t”,p-〉month);
printf(”%d\t”,p—〉data);
printf("%。
2f\t”,p-〉amout);
printf(”%s\t",p—>name);
printf(”%d\t”,p->type);
printf("%s\n",p—>comment);
}
}
system("PAUSE”);/*停顿*/
}
在菜单界面选择“查询”选项,界面会让你选择查找的方式:
1按姓名查找2按类型查找,用户可以根据自己的需要进行选择,按1就输入联系人的姓名,按2就输入类型,系统会进行查询,如果有就显示该条记录。
以下是删除模块代码
voiddelete_rec()
{
system(”cls”);/*清屏*/
charname[20];
floatamout;
intchoice;
structF_Data*p=NULL,*q=NULL;/*定义p和q都为structF_Data类型指针*/
p=head;/*p指向第一个结点*/
q=head;/*q指向第一个结点*/
printf(”请输入要删除者的姓名:
");
scanf("%s”,name);
printf(”请输入金额:
");
scanf(”%f",&amout);
for(;q!
=NULL;q=q->next)/*q指针从链表的第一个结点到尾结点*/
{
if((head-〉amout==amout)&&(strcmp(head—>name,name)==0))/*如果头结点符合要求*/
{
printf("%d\t",q—〉year);
printf(”%d\t”,q->month);
printf(”%d\t",q-〉data);
printf(”%。
2f\t",q-〉amout);
printf("%s\t",q—>name);
printf("%d\t",q—>type);
printf("%s\n”,q-〉comment);
printf(”确认删除?
\n1是\n2否\n”);
scanf(”%d”,&choice);
if(choice==1)
{
head=q—>next;/*删除头结点*/
Recordcount--;/*结点数减一*/
}
elsebreak;
}
else
{
if((q—>amout==amout)&&(strcmp(q—〉name,name)==0))/*如果结点符合要求*/
{
{
printf(”%d\t”,q-〉year);
printf("%d\t”,q->month);
printf(”%d\t",q—〉data);
printf(”%。
2f\t",q—〉amout);
printf(”%s\t”,q->name);
printf(”%d\t",q—〉type);
printf("%s\n",q-〉comment);
}
printf("确认删除?
\n1是\n2否\n”);
scanf("%d”,&choice);
if(choice==1)
{
p—>next=q—〉next;/*删除一个结点*/
Recordcount—-;/*结点数减一*/
}
elsebreak;
}
else
{
p=q;/*p后移一个位子*/
}
}
}
system("PAUSE");/*停顿*/
}
选择删除选项后,界面会让使用者输入要删除者的姓名及金额,并根据输入的信息显示该条记录,并且为了防止意外删除而有提示是否删除,经使用者再三确认后便删除该记录.
以下是显示模块
voidshow()
{
system("cls");/*清屏*/
structF_Data*p=NULL;/*定义p和q都为structF_Data类型指针*/
floatj=0。
0,i=0。
0,w=0.0;
for(p=head;p!
=NULL;p=p-〉next)/*从链表的第一个结点到尾结点*/
{
printf(”%d\t",p—>year);
printf(”%d\t",p-〉month);
printf("%d\t",p-〉data);
printf("%.2f\t”,p->amout);
printf(”%s\t",p—〉name);
printf(”%d\t”,p->type);
printf("%s\n”,p—〉comment);
if(p-〉type==1)
j+=p-〉amout;/*把type=1记录中的金额全部加给j*/
else
i+=p-〉amout;
}
printf("一共收入:
%.2f\n",j);
printf(”一共支出:
%。
2f\n”,i);
w=j—i;
printf(”当前余额:
%.2f\n",w);
system("PAUSE”);/*停顿*/
}
在界面选择显示选项后,屏幕上会把每条记录依次显示出来,并把总收入和总支出及目前余额也统计并显示出来。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 家庭 财务管理 系统 设计 报告