1、 《家庭财务系统》课程设计报告 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 29 个人收集整理 勿做商业用途 课 程
2、 设 计 报 告 项目名称: 家庭财务系统 项目组长: 项目成员: 班级名称: 专业名称: 计算机科学与技术 完成时间: 2010—6—1 信息工程学院制 一、 案例描述 1.、家庭财务系统功能 实现家庭财务的添加、显示、查询、修改、删除和统计功能 二、 界面设计 菜单: 1。添加收入 2.显示收入 3。查询收入 4.修改收入 5.删除收入 6.添加支出 7。显示支出
3、8。查询支出
9.修改支出
10。删除支出
11。显示所有记录
12.统计总收入和总支出
0.退出系统
本软件界面友好,不难操作,每一步执行后都有提示语 ,只要按照提示一步一步执行就可以了。而且每执行完一个功能,都会进行清屏,跳出菜单页,这样一方面防止函数执行页面过长,另一方面也方便你选择执行下个功能。
模块化设计方案
1、 系统主要函数及功能
1) #include〈stdio。h> /*I/O函数*/
#include
4、字符串函数*/
#include 5、息,返回值为0
int judge()
6)print()函数:显示函数,参数为1,只显示收入;参数为0,只显示输出;参数为2,即显示收入又显示输出
void print(int a)
7)search()函数:查询函数,参数为1,查询收入;参数为0,查询支出
void search(int a)
8)modify()函数:修改函数,参数为1,修改收入;参数为0,修改支出
void modify(int a)
9)del()函数:删除函数 ,参数为1,删除收入;参数为0,删除支出
void del(int a)
10)count()函数:计算函数,参数为1, 6、只计算总收入;参数为0,只总计算输出;参数为2,即计算总收入又计算总输出
void count(int a)
11)save()函数:保存函数,把内存中的信息读到文件夹中
void save()
2、 主函数调用各功能函数流程图
三、 数据结构描述
#include 7、l *head;
float income=0,payout=0;
int n=0;
int face()//封面函数
{
}
void save() //保存函数
{
}
void init() //初始化函数
{
}
int judge()//判断文件里有没有记录信息
{
}
void print(int a) //显示记录
{
}
void add(int a) //添加
{
}
int search(int a)//查询
{
}
void del(int a) 8、//删除
{
}
void modify(int a)//修改收入
{
}
void count(int a)//计算金额
{
}
main() //以下是main函数
{
system(”color 7c”);
init();
count(1);
for(;;)
{
switch(face())
{
case 1: add(1);break; //添加收入
case 2: print(1);break; //显示收入
case 3: search(1);break; //查询收入
c 9、ase 4: modify(1);break; //修改收入
case 5: del(1);break; //删除收入
case 6: add(0); break; //添加支出
case 7: print(0); break; //显示支出
case 8: search(0); break; //查询支出
case 9: modify(0); break; //修改支出
case 10: del(0);break; //删除支出
case 11: print(2); break; //显示所有记录
10、 case 12: count(2);break; //统计总收入和总支出
case 0: printf("\n\n\n\t\t 再见,谢谢您的使用! \n\n\n");
exit(0); break; //退出系统
}
save();
fflush(stdin);/*以保证调试输出可以在正确的时间输出*/
system("PAUSE");
}
}
四、 算法设计
modify修改函数
五、 程序运行结果
第一次使用
第一次进入菜单页,选显示
11、
添加收入
显示收入
查询收入
修改收入
删除收入
添加支出
显示支出
查询支出
修改支出
删除支出
显示所有记录
统计总收入和总支出
六、 总结
1、 工作时间(5号黑色)
初始化-1小时
添加– 2分钟
判断—20分钟
显示 – 2小时
查询 – 3小时
修改 – 3小时
删除 – 3小时
统计-30分钟
主函数-30分钟
保存—30分钟
修改优化—20小时
2、分工情况
每位成员都先了代码,把相对好的版块选取,然后由组长拼接,把报告做出来.
3、心得体会
12、
看到课程设计要求的时候,大家在一起讨论了一下,看要怎么做,后来讨论出来的结果是:因为每个人都有自己不同的想法,那不如就每个人做一份,这样也有助于大家掌握这个课程所需要的相关知识.基本的课程要求达到之后,为了使课程设计更完善,我们上网找了相关课程案例,但由于网上的程序所用到的知识点,不符合我们的要求,而且有部分是我们看不懂的知识点,查了相关资料之后还是无法彻底的理解,所以我们只能相互讨论自己完善程序,而放弃了在网上找的这个途径。在程序完成之后,因为这个程序的只能查询一个月的收入和支出情况,我们想要完善成能查找到任何时间段内的收入和支出情况。可是用户的输入顺序不一定是完全按照时间顺序来的,所以要 13、达到这个功能,首先得对个个结点内的信息根据时间顺序进行排序,由于原先考虑到用户输入的时间可能不一定是整型,所以把时间设成了字符型,但要达到排序的目的就得把时间改为整型。在考虑过相关要求和要达到的功能之后,就开始了编程。功能程序完成之后,把代码放到原先的代码之中, 运行之后,发现在累加的结果上出现了问题,通过多次的查看代码和调试之后,发现问题还是没有彻底地解决,可是现在距离我们报告上交的时间已经不远了.考虑到时间的问题,我们决定放弃这个功能,等把报告交了之后,再继续修改代码,以达到这个功能.个人收集整理,勿做商业用途文档为个人收集整理,来源于网络
通过这次的课程设计:①觉得在修改代码方面,我们 14、有很多不足,希望在以后通过不断地写代码的过程中,能提高修改和完善代码的水平。②要重视团队合作,每个人都有自己不同的想法,把大家好的想法拼在一起,就会出来一个好的作品。
附页(源代码附加注释)
#include〈stdio。h〉
#include 15、
char month[10]; //表示月份
char day[10]; //表示日期
char name[20]; //家庭成员
float money; //表示本次金额
int z; //判断收入还是支出
char event[60]; //收支备注
struct family_financial *next;
};
//创建结构体指针
struct family_financial 16、 *head;
float income=0,payout=0;
int n=0;
int face()//封面函数
{
int c;
system(”cls");
printf("\t ☆ \n");
printf(”\t ☆ \t \t\t◇收入管理 \n");
printf("\t ☆ \t \t\t 1.添加收入 \n”);
printf("\t ☆ \t ◎ \t\t 17、 2.显示收入 \n”);
printf("\t ☆ \t 欢 \t\t 3。查询收入 \n”);
printf("\t ☆ \t 迎 \t\t 4.修改收入 \n”);
printf(”\t ☆ \t 进 \t\t 5。删除收入 \n”);
printf(”\t ☆ \t 入 \n”);
printf("\t ☆ \t 家 \n");
prin 18、tf("\t ☆ \t 庭 \t◇支出管理 \n");
printf(”\t ☆ \t 财 \t\t 6.添加支出 \n");
printf("\t ☆ \t 务 \t\t 7。显示支出 \n");
printf(”\t ☆ \t 管 \t\t 8.查询支出 \n");
printf(”\t ☆ \t 理 \t\t 9.修改支出 \n");
printf("\t ☆ \t 系 \t\t10.删除支出 19、 \n");
printf("\t ☆ \t 统 \n”);
printf("\t ☆ \n");
printf(”\t ☆ \t \t\t◇总 计 \n”);
printf(”\t ☆ \t \t\t11。显示所有记录 \n”);
printf(”\t ☆ \t \t\t12。统计总收入和总支出\n”);
printf(”\t 20、 ☆ \n");
printf(”\t ☆ \t \t\t 0.退出系统 \n");
printf("\t ☆ \n");
do{
printf(”\n\t 请选择菜单项(0—12):”); /*提示输入选项*/
scanf("%d",&c); /*输入选择项*/
}while(c〈0||c>12); /*选择项不在0~8之间的显示重新输*/
21、 system(”cls”);
printf("\n\n **********家庭财务管理系统**********\n\n ”);
return c; /*返回主程序,根据选择的数值调用相应的函数*/
}
void save() //保存函数
{
struct family_financial *fam_p;
FILE *fp;
fp=fopen(”cwgl。txt”,"wb");
if (fp!=NULL)
{
for(fam_p=head;fam_p!=NULL;fam_p=fam_p-〉next)
fwri 22、te(fam_p,sizeof(struct family_financial),1,fp);
}
fclose(fp);
}
void init() //初始化函数
{
struct family_financial *p,*q;
FILE *fp;
fp=fopen("cwgl。txt",”rb”);
if(fp==NULL)
{
printf(”\n\n\n\t 尊敬的用户,这是您第一次使用该软件\n\n”);
system("PAUSE”);
}
if (fp!=NULL)
23、
while(p=(struct family_financial *)malloc(sizeof(struct family_financial)),fread(p,sizeof(struct family_financial),1,fp)!=NULL)
{
if(n==0)
head=p;
else
q—〉next=p;
q=p;
n++;
}
}
int judge()//判断文件里有没有记录信息
{ struct family_financial *fam_p,* 24、q;
for(fam_p=head;fam_p!=NULL;fam_p=fam_p—〉next)
{
if(fam_p==NULL)
return 0;
else
return 1;
}
}
void print(int a) //显示记录
{
struct family_financial *fam_p,*q;
int i=1,j=0,d;
d=judge();
if(d==0)
printf("\n\n\t没有任何信息,无法继续.。.请开 25、始添加记录!\n\n\n");
else
{
if(a==1||a==2)
{
printf(”\n\t —收入:\n");
for(fam_p=head;fam_p!=NULL;fam_p=fam_p—>next)
{
if(fam_p->z==1)
{
printf("\n\t\t%d. 日 期:%s.%s。%s",i,fam_p->year,fam_p->month,fam_p—>day);
printf("\n\t\t 家庭成员:%s”,f 26、am_p-〉name);
printf(”\n\t\t 本次金额:%。2f",fam_p->money);
printf(”\n\t\t 备 注:%s”,fam_p->event);
printf(”\n\n\t\t-——-——-———--————-———-——--\n");
i++;
j++;
}
}
}
if(a==0||a==2)
{
printf("\n\n\t —支出:\n”);
for( 27、fam_p=head;fam_p!=NULL;fam_p=fam_p—>next)
{
if(fam_p->z==0)
{
printf("\n\t\t%d。 日 期:%s.%s.%s",i,fam_p->year,fam_p-〉month,fam_p-〉day);
printf("\n\t\t 家庭成员:%s",fam_p—〉name);
printf(”\n\t\t 本次金额:%。2f",fam_p->money);
printf 28、"\n\t\t 备 注:%s”,fam_p-〉event);
printf(”\n\n\t\t-—----—-—----——————-———--\n");
i++;
j++;
}
}
}
if(j==0)
printf("\n\n\t\t\t 没有找到任何信息,无法输出!\n\n");
}
}
void add(int a) //添加
{
struct family_financial *fam_p; 29、
fam_p=(struct family_financial*) malloc(sizeof(struct family_financial));
if(a==1)
printf(”\n\t ~~~~~添加收入记录~~~~~\n”);
else
printf(”\n\t ~~~~~添加支出记录~~~~~\n");
printf("\n\t 请输入姓名:”);
scanf("%s",fam_p->name);
printf("\n\t 请输入年份:");
scanf("%s”,fam_p->year);
30、printf("\n\t 请输入月份:”);
scanf(”%s”,fam_p->month);
printf("\n\t 请输入日期:");
scanf("%s",fam_p-〉day);
if(a==1)
{
printf("\n\t 请输入收入金额:”);
scanf(”%f",&fam_p->money);
income=income+fam_p—〉money;
fam_p—>z=1;
}
else
{
printf("\n\t 请输入支出金额:”);
scanf(” 31、f”,&fam_p—〉money);
payout=payout+fam_p—>money;
fam_p—>z=0;
}
printf(”\n\t 请输入备注:");
scanf(”%s”,fam_p—>event);
fam_p—>next=head;
head=fam_p;
n++;
printf(”\n\t\t~~~~~添 加 成 功~~~~~ \n\n”);
save();
}
int search(int a)//查询
{
struct family_financial *fam_p,*q;
in 32、t i,k=0,d;
float sum=0;
char pyear[10],pmonth[10],pname[20];
d=judge();
if(d==0)
printf("\n\n\t没有任何信息,无法继续。。.请开始添加记录!\n\n\n");
else
{
printf("\n\t ~~~请先输入以下信息进行查询~~~\n\n”);
printf(”\n\t 请输入姓名:”);
scanf(”\t %s”,pname);
printf(”\n\t 请输入年份:”);
scanf("%s",pyear);
printf( 33、"\n\t 请输入月份:”);
scanf("%s”,pmonth);
printf("\n\t —- %s年%s月\n",pyear,pmonth);
if(a==1)
{
printf("\n\t\t 日 期\t\t收入金额”);
for(i=0,fam_p=head;fam_p!=NULL;q=fam_p,fam_p=fam_p-〉next)
{
fam_p-〉num=1;
if(strcmp(pyear,fam_p-〉year)==0&&strcmp(pmonth,fam_p—〉month 34、0&&strcmp(pname,fam_p->name)==0&&fam_p—>z==1)
{
sum=sum+fam_p->money;
i++;k++;
fam_p—>num=i;
printf("\n\t %d、 %s 日\t\t %.2f”,i,fam_p-〉day,fam_p—>money);
}
}
printf(”\n\n\t\t\t\t小计:本月 %s 共收入:%.2f\n\n",q—>name, 35、sum);
}
if(a==0)
{
printf("\n\t\t 日 期\t\t支出金额”);
for(i=0,fam_p=head;fam_p!=NULL;q=fam_p,fam_p=fam_p-〉next)
{
fam_p->num=0;
if(strcmp(pyear,fam_p—>year)==0&&strcmp(pmonth,fam_p—〉month)==0&&strcmp(pname,fam_p—>name)==0&&fam_p—〉z==0)
{
36、 sum=sum+fam_p—〉money;
i++;k++;
fam_p->num=i;
printf("\n\t %d、 %s 日\t\t %.2f",i,fam_p—>day,fam_p—〉money);
}
}
printf(”\n\n\t\t\t\t小计:本月 %s 共支出:%。2f\n\n",q-〉name,sum);
}
if(i==0)
{
system("cls");
printf("\n\n ******** 37、**家庭财务管理系统**********\n\n ");
printf(”\n\n\t\t\t 找不到您要的信息,无法输出!\n\n");
}
}
return k;
}
void del(int a)//删除
{
struct family_financial *fam_p,*q;
int i,j=1,k,m;
if(a==1)
k=search(1);
else
k=search(0);
if(k!=0)
{
while(j!=0)
38、{
printf("\n\t请输入你要删除的编号:");
scanf("%d”,&i);
printf("\n\n\t是否要确认删除?(是:1 / 否:0)");
scanf(”%d”,&m);
if(m==1)
{
for(q=fam_p=head;fam_p!=NULL;q=fam_p,fam_p=fam_p-〉next)
{
if(fam_p->num==i)
{
if(a==1)
inc 39、ome=income—fam_p->money;
else
payout=payout+fam_p->money;
if (fam_p==q)
head=q->next;
else
q->next=fam_p—〉next;
free(fam_p);
}
fam_p—>num=0;
save();
}printf(”\n\t\t~~~~~删 除 成 功 40、~~~~~ ");
}
printf("\n\n\t是否要继续选择删除?(是:1 / 否:0):");
scanf(”%d",&j);
}
}
}
void modify(int a)//修改收入
{
struct family_financial *fam_p;
int i,j=1,k;
if(a==1)
k=search(1);
else
k=search(0);
if(k!=0)
{
while(j!=0)
41、 {
printf(”\n请输入你要修改的编号:”);
scanf("%d",&i);
for(fam_p=head;fam_p!=NULL;fam_p=fam_p—>next)
{
if(fam_p-〉num==i)
{
if(a==1)
income=income-fam_p->money;
else
payout=payout+fam_p—〉money;
printf(”\n\t ~~~~~请修改记录~~~~~\n\n”);
42、printf("\n\t 请输入正确的姓名:”);
scanf(”%s",fam_p—>name);
printf("\n\t 请输入正确的年份:”);
scanf(”%s”,fam_p->year);
printf(”\n\t 请输入正确的月份:”);
scanf("%s”,fam_p—〉month);
printf(”\n\t 请输入正确的日期:");
scanf(”%s",fam_p->day);
if(a==1)
43、 printf("\n\t 请输入正确的收入金额:”);
else
printf(”\n\t 请输入正确的支出金额:");
scanf(”%f",&fam_p—〉money);
if(a==1)
income=income+fam_p->money;
else
payout=payout—fam_p—〉money;
}
fam_p-〉num=0;
}
printf("\n\t\t~~~~~修 改 成 功~~~~~ \n\n");
save 44、);
printf("\n\n是否要继续选择修改?(是:1 / 否:0):");
scanf("%d”,&j);
}
}
}
void count(int a)//计算金额
{
struct family_financial *fam_p,*q;
for(q=fam_p=head;fam_p!=NULL;q=fam_p,fam_p=fam_p->next)
{
if(fam_p—〉z==1)
income=income+fam_p-〉money;
else
45、 payout=payout+fam_p—〉money;
}
if(a==2)
{
printf("\n\n\t\t 总 收 入:%。2f ”,income);
printf("\n\n\t\t 总 支 出:%.2f ”,payout);
printf(”\n\n\t\t 合 计 总 额:%。2f \n\n",income-payout);
}
save();
}
main() //以下是main函数
{
system(”color 7c"); 46、
init();
count(1);
for(;;)
{
switch(face())
{
case 1: add(1);break; //添加收入
case 2: print(1);break; //显示收入
case 3: search(1);break; //查询收入
case 4: modify(1);break; //修改收入
case 5: del(1);break; //删除收入
case 6: add(0); break; //添加支出
case 7: print(0); brea 47、k; //显示支出
case 8: search(0); break; //查询支出
case 9: modify(0); break; //修改支出
case 10: del(0);break; //删除支出
case 11: print(2); break; //显示所有记录
case 12: count(2);break; //统计总收入和总支出
case 0: printf("\n\n\n\t\t 再见,谢谢您的使用! \n\n\n”);
exit(0); break; //退出系统
}
save();
fflush(stdin);/*以保证调试输出可以在正确的时间输出*/
system(”PAUSE”);
}
}






