个人财务管理软件报告_第1页
个人财务管理软件报告_第2页
个人财务管理软件报告_第3页
个人财务管理软件报告_第4页
个人财务管理软件报告_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、个人财务管理软件报告22388911个人财务管理软件报告目录一、需求分析 二、概要设计三、详细设计四、调试分析五、用户手册六、测试数据七、附录一、需求分析1 .首先个人的财务信息里包括收支日期, 收入金额、支出金额还有收入和支 出的目的,还有账户余额。因为是包括多个信息所以考虑到用结构体数组来储 存这些信息,然后再把这些信息一起储存到文件中。2 .该软件需要有六个功能,首先是登录功能,必须输入正确的用户名和密码 才能使用软件。第二是收支记录的管理,该部分包括添加功能,删除功能和修 改功能。第三是查询某天或某月的收支情况。第四是统计一段时间的信息。3 .后面的收支功能,查询功能和统计功能都是从文

2、件中读取,读取后存到结 构体数组中,然后再进行操作,操作完后关闭文件,以免信息丢失。4 .当用户名和密码输入错误,会提示你输入错误,请重新输入。5 .如果是操作过程中输入错误,会回到最菜单重新操作。6 .运行时用户可以根据提示进行操作,每进行一步操作,就会有相应的提示。二.概要分析1 .程序中存储个人每天的财务信息用的是结构体数组,其中结构体中包括: 日期(年月日),收入金额,支出金额,收入目的。struct peopleint year;/年份int month;/月份int day;/日期float get;/收入金额float out;/支出金额char motive100;/支出目的c

3、har source100;/收入来源float leave;/余额2 .本程序各函数的结构main函数将三天的账户信息存储到文件中;提示用户输入用户名和密码,输入正确;进入f7 (); 菜单选择函数switch () 1 .修改信息;/f2() 函数2 .添加信息;/f3()函数3 .删除信息;/f4()函数4 .查询信息;/f5()函数5 .统计信息;/f6()函数3 .各模块的调用关系第一层:main函数第二层:f7 ();第三层:f2() , f3(), f4(), f5(), f6();调用时这些函数都可以通过f7 ()函数来互相 调用。比如运行完f2 ()函数后,可以调用 f7 (

4、),然后再调用f3 ()函数。4 .主函数:添加信息到文件中和执行登录功能。其他调用函数分别执行其他五大功能。三.详细设计1、基本数据类型操作a)存储每天账户信息的数组结构体struct peopleint year;int month;int day;float get;float out;char motive100;char source100; float leave;b )控制结构体数目的extern N刚开始运行该程序时,N的初始值为3,后来如果进行添加操作,则N的值就会加1,反之如果进行删除操作,则 N的值就会减1。3、基本操作的算法描述a)登录功能:用户只有在输入正确的用户名和

5、密码后才能进入系统进行 操作。for(;)printf("=请输入用户名和密码:=n");printf("用户名:");scanf("%d",&a);/a表示用户名printf("n");printf("密码:");/b表示密码scanf("%d",&b);printf("n");if(a=10201306&&b=1) /输入和条件一致的情况下进入if语句中(printf("=恭喜输入正确,登录成功!=n"

6、;);printf(" 该软件中已存有2010年1月 1号到3号的信息!n");)else /输入和条件不一致就进入else语句(printf(" 输入错误,请重新输 入!n");)b)主菜单功能:用户可以自行选择要进行的操作printf("=1: 修改信息 =n");printf("=2: 删除信 息n");printf("=3:添加信息 =n");printf("=4: 查询信 息 =n");printf("=5: 统计信 息=n");printf(&

7、quot; 请选择:");/在屏幕上输出,指示用户操作scanf("%d",&flag);/输入用户的选项并存在flag中while( flag != 0)switch(flag)default: printf("此选项不存在,请重新输入:n");break;case 1:f2(x,y,z);/进入修改函数break;/进入删除case 2:f3(x,y,z);函数break;case 3:f4();/进入添加函数break;case 4:f5(x,y,z);进入查询函数break;case 5:f6(x,y,z,x1,y1,z1);

8、进入统计函数break;c)修改功能:用户如果觉得存储的信息有问题,可以在此进行修改fp=fopen("f:pan.txt","w+");for(i=0;i<N;i+)fread(&peoi,sizeof(struct people),1,fp);if(x=peoi.year&&y=peoi.month&&z= peoi.day) n=i;/查看是否有该天的信息存在break; if(i=N) printf(" 没有该天信息!n");printf("请重新选择!n");

9、f7();fread(&peoi,sizeof(structpeople),1,fp);/先从文件中读出printf("请输入新的收入来源n");scanf("%s",peon.source);printf(" 请输入新的收入金额 n") scanf("%f”,&peon.get);printf(" 请输入新的支出目的n");scanf("%s",peon.motive);printf(" 请输入新的支出金额n");scanf("%f”,&

10、amp;peon.out);peon.leave=peon.get-peon.out;输入新的信息for(i=0;i<N;i+) if(fwrite(&peoi,sizeof(structpeople),1,fp)!=1) printf("无法打开!n"); exit(0); fclose(fp);/把新的信息存储到文件当中,并关闭文件d) 删除功能:用户可以在此删除不需要的信息fp=fopen("f:pan.txt","w+");打开文for(i=0;i<N;i+)fread(&peoi,sizeof(s

11、truct people),1,fp);if(x=peoi.year&&y=peoi.month&&z= peoi.day)n=i;/查看是否有该天的信息存在break;if(i=N)printf(" 没有该天信息!n");printf("请重新选择!n");for(i=n;i<N;i+ )fscanf(fp,"%s",&peoi);/ 将 文件中 的信息存到数组结构体里strcpy(peoi.source,peoi+1.source);peoi.year=peoi+1.year;peoi

12、.month=peoi+1.month;peoi.day=peoi+1.day;peoi.get=peoi+1.get ;peoi.out=peoi+1.out;strcpy(peoi.motive,peoi+1.motive);peoi.leave=peoi+1.leave ;/用后面的信息覆盖前面的信息N=N-1;/删除后信息减少一组,所以N要减1for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(structpeople),1,fp)!=1)printf("无法打开!n");exit(0);fclose(fp);/将现有信息重新存

13、回到文件e)添加功能:用户可以在此添加新的账户信息fp=fopen("f:pan.txt","rb");/先打开文件fread(&peoi,sizeof(structpeople),1,fp);/将文件信息存到结构体数组里n=N;/添加到结构体数组的末尾printf("请输入新的信息日期:n");scanf("%d %d %d",&peon.year,&peon.month,&peon.day);printf(" 请输入新的信息收入金额和收入 来源:n");sca

14、nf("%f %s",&peon.get,peon.source);printf(" 请输入新的信息支出金额和支出 目的:n");scanf("%f %s",&peon.out,peon.motive);peon.leave=peon.get-peon.out/输入新的信息到结构体中N=N+1;/添加了新的数据所以N的值加1fp=fopen("f:pan.txt","wb");for(i=0;i<N;i+)fwite(&peoi,sizeof(structpeopl

15、e),1,fp);fclose(fp);/将新的一组结构体信息写到文件里f) 查询功能:用户可以在此查询以前存有的账户信息fopen("f:pan.txt","r");for(i=0;i<N;i+)fread(&peoi,sizeof(structpeople),1,fp);if(x=peoi.year&&y=peoi.month&&z=peoi.day)n=i;/查看是否有该天的信息存在break;if(i=N)printf(" 没有该天信息!n");printf("请重新选择

16、!n");f7();fread(&peon,sizeof(structpeople),1,fp);/将数据存到结构体数组中printf(" 收入来源收入金额支出目的 支出金额余额n");printf("%5s ",peon.source);printf("%3f ",peon.get);printf("%5s ",peon.motive);printf("%5f ”,peon.out);printf("%3f”,peon.leave); 输出您要查询的该天信息fclose(fp

17、);/关闭文件防止信息丢失g) 统计功能:用户可以在此统计一段时间内的收入金额和支出金额for(i=0;i<N;i+)fread(&peoi,sizeof(structpeople),1,fp);if(x=peoi.year&&y=peoi.month&&z=peoi.day)n=i;/查看是否有该天的信息存在break;if(i=N)printf("没有该天信息!n");printf("请重新选择!n");for(i=0;i<N;i+)fread(&peoi,sizeof(structpeop

18、le),1,fp);if(x1=peoi.year&&y1=peoi.month&&z1=peoi.day)m=i;/查看是否有该天的信息存在break;if(i=N)printf("没有该天信息!n");printf("请重新选择!n");如果存在该段时间信息,那么统计收入金额:if(n<m)for(i=n,sum=0;i<=m;i+)sum+=peoi.get;printf("%f",sum);fclose(fp);break;elsefor(i=m,sum=0;i<=n;i+)s

19、um+=peoi.get;printf("%f",sum);fclose(fp);break;如果统计支出金额,只需将peoi.get 改为peoi.out 就行。3 、各函数的调用关系图main函数f7 ()函数; ; ; ; ;f2()函数 f3()函数 f4()函数 f5()函数 f6()函数f7 ()函数四.调试分析1 .开始时没有将N定义为全局变量,导致在添加函数中 N+1后,其他函数 中的N却没有改变,导致最后查询的信息不完整。2 .开始时没有将主菜单单独存到一个函数里面,这样就无法一次运行多个功 能,最后将主菜单单独存到一个函数里以后,就可以在运行完一个功能之

20、后, 重新选择,这样就可以在一次调试中,运行所有的功能模块,减少了很多麻烦。3 .第一次调试运行时,文件中没有存储任何的信息,所以每次进入都必须先 要输入一定量的数据,然后才能进行下面的操作,后来加以改善,先在文件中 存储几天的账户信息,这样在运行时就可以直接进行查询,修改,删除等操作 了。4 .第一次检查时,由于对文件的操作不是很熟练,发现了添加的数据并没有 存储到文件之中,最后经过修正,加入了一个 fwrite将信息写到了文件里。五.用户手册1、本程序的运行环境为DOS操作系统,执行文件为fl.dsw;2、进入演示程序后,即显示对话形式的提示操作过程,如:请输入用户名和密码,输入正确后便进

21、入菜单选择请输入你的选项,输入选项后,如果选项不存在,会提示你选项不存在,请重新选择。输入正确选项后,便会提示你输入日期。如果进入的是修改函数,就会继 续提示你输入新的信息;如果进入的时添加函数,会让你输入新的账户信息; 如果进入的是删除函数,再删除完后会提示你删除成功;如果进入的时查询函 数,会输出你要查询的当天账户信息;如果进入的统计函数,会提示你选择将 要统计的信息。3、如果用户不小心进错了功能,可以输入 0来返回主菜单,重新选择。4、进行完上面的操作之后,会提示用户是否继续运行该程序来进行其他的功能操作 按n或n '键stop或其它键继续六.测试数据=请输入用户名和密码:= 用

22、户名:10201306密码:i 恭喜输入正确,登录成功!1:修改信息2:删除信息3:添加信息4:查询信息5:统计信息a)请选择:1请输入您要修改得日期:2010 1 10.返回主菜单 1.修改该天信息请选择1 旧的信息为:2010 1 1 1000.000000 收入 1 100.000000 支出 1请输入新的信息:收入金额1100收入来源aaa支出金额200支出目的bbb 。修改成功!新的信息为 2010 1 1 1100.000000 aaa 200.0000000 bbbb)请选择:2请输入您要删除的日期:2010 1 10.返回主菜单1.删除该天信息请选择:1旧的信息为:2010 1

23、 1 1000.000000收入1 100.000000支出2010 1 2 2000.000000收入2 200.000000支出2010 1 3 3000.000000收入3 300.000000支出删除成功!新的信息为:2010 1 2 2000.000000 收入 2 200.000000 支出 22010 1 3 3000.000000收入3 300.000000支出是否继续y/npress any key to continuec)请选择:30.返回主菜单1.添加一天的账户信息请选择:旧的信息为:2010 1 1 1000.000000收入1 100.000000支出2010 1

24、2 2000.000000收入2 200.000000支出2010 1 3 3000.000000收入3 300.000000支出请输入新的信息:2010 1 4 4000收入4 400支出4添加成功!新的信息为:2010 1 1 1000.000000收入1 100.000000支出2010 1 2 2000.000000收入2 200.000000支出2010 1 3 3000.000000收入3 300.000000支出2010 1 4 4000.000000收入4 400.000000支出是否继续y/npress any key to continued)请选择:4请输入您要查询得日期

25、:2010 1 10.返回主菜单1.查询该天信息请选择12010 1 1 1000.000000 收入 1 100.000000 支出 1是否继续y/nn press any key to continuee)请选择:5请输入你要统计的两个日期:2010 1 1 2010 1 30.返回主菜单1 .统计该段时间的收入金额2 .统计该段时间的支出金额3 .统计该段时间的余额请选择 1. 6000.0000002. 600.0000003. 5400.000000是否继续y/nn press any key to continue七.附录1、源程序函数清单主函数:f1()修改函数:f2()删除函数

26、:f3()添加函数:f4()查询函数:f5()统计函数:f6()主菜单函数:f7()2、源程序代码f1.cpp:#include"stdio.h"#include"stdlib.h"#include"string.h"#include"f2.h"#include"f3.h"#include"f4.h"#include"f5.h"#include"f6.h"#include"f7.h"struct people peo

27、SIZE;int N=3;void main()int i,a,b;char d110=" 收 入 1",d210=" 收 入2",d310=" 收 入 3",e110=" 支 出 1",e210=" 支出 2",e310=" 支出 3"FILE *fp;/*输入三天的账户信息*/peo0.year=2010;peo0.month=1;peo0.day=1;strcpy(peo0.source,d1);peo0.get=1000;strcpy(peo0.motive,e1);

28、peo0.out=100peo0.leave=peo0.get-peo0.out;peo1.year=2010;peo1.month=1;peo1. day=2;strcpy(peo1.source,d2);peo1.get=2000;strcpy(peo1.motive,e2);peo1.out=200;peo1.leave=peo1.get-peo1.out;peo2.year=2010;peo2.month=1;peo2.day=3;strcpy(peo2.source,d3);peo2.get=300 0;strcpy(peo2.motive,e3);peo2.out=300peo2.

29、leave=peo2.get-peo2.out;/*把数据写入文件*/fp=fopen("f:pan.txt","w");for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(struct people),1,fp)!=1)printf("无法打开!n");exit(0);fclose(fp);/*菜单选择功能*/printf("=个人账户管理软 件=n");printf("=设计人:潘君宇 =n");printf("n");printf(

30、"n");printf("请登录:n");for(;)printf("= 请输入用户名和 密码:=n");printf("用户名:"); scanf("%d",&a);printf("n");printf("密码:"); scanf("%d",&b);printf("n");if(a=10201306&&b=1)(printf("= 恭喜 输入正 确,登录成功!=n"

31、;);printf("= 该软件中已存有20104三1月1号至IJ 3号的信息!=n");f7(); else(printf(" 输入错误,请重新输 入!n");f2.cpp:#include"stdio.h"#include"stdlib.h"#include"string.h"#include"f2.h"#include"f3.h"#include"f4.h"#include"f5.h"#include"

32、;f6.h"#include"f7.h"extern struct people peoSIZE;extern N;void f2(int x,int y,int z)int b,i,n,flag=1;char c;FILE *fp;/*检查信息*/if(fp=fopen("f:pan.txt","r")=NULL)printf("无法找到该文件!n");exit(0);/*检查是否有该信息*/for(i=0;i<N;i+)fread(&peoi,sizeof(structpeople),1

33、,fp);if(x=peoi.year&&y=peoi.month&&z= peoi.day)n=i;break;if(i=N)printf("没有该天信息!n");printf("请重新选择!n");f7();/* 进入修改程序*/for(;)(printf("=请选 择:=n");printf("=0.返回主菜单=n");printf("=1.修改该天信 息=n");printf("= = n");scanf("%d",

34、&b);switch(b)(default:printf("无此选项)请重新输入:n");break;case 0:f7();case 1:修改收入来源fp=fopen("f:pan.txt","w+");fread(&peoi,sizeof(structpeople),1,fp);printf(" 旧的信息为:n");printf(" 收入来源 收入金额 支出目的支出金额余额n");printf("%5s ”,peon.source);printf("%3f

35、”,peon.get);printf("%5s ",peon.motive);printf("%5f ”,peon.out);printf("%3f n",peon.leave);fscanf(fp,"%s",&peon);printf("请输入新的收入来源n");scanf("%s",peon.source);printf("n");/修改收入金额printf("请输入新的收入金额n");scanf("%f",&am

36、p;peon.get);printf("n");/修改支出目的printf("请输入新的支出目的n");scanf("%s",peon.motive);printf("n");修改支出金额printf("请输入新的支出金额n");scanf("%f",&peon.out);printf("n");peon.leave=peon.get-peon.out;printf(" 新的的信息为:n");printf(" 收入来源

37、 收入金额支出目的 支出金额余额n");printf("%5s”,peon.source);printf("%3f ”,peon.get);printf("%5s”,peon.motive);printf("%5f ”,peon.out);printf("%3fn",peon.leave);for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(structpeople),1,fp)!=1)printf("无法打开!n"); exit(0);fclose(fp);brea

38、k;printf("是否继续 y y/nn");scanf("%s",&c);if(c='n'|c='N')exit(0);F3.cpp:#include"stdio.h"#include"stdlib.h"#include"string.h"#include"f2.h"#include"f3.h"#include"f4.h"#include"f5.h"#include&quo

39、t;f6.h"#include"f7.h"extern struct people peoSIZE;void f3(int x,int y,int z)int b,i,n,flag=1;extern N;char c;FILE *fp;if(fp=fopen("f:pan.txt","r")=NULL )printf("无法找到该文件!n");exit(0);/*检查是否有该信息*/for(i=0;i<N;i+)if(x=peoi.year&&y=peoi.month&&am

40、p;z=peoi.day)(n=i;break;)if(i=N)(printf("没有该天信息!n");printf("请重新选择!n");f7();)/*进入删除程序*/for(;)(printf("= 请选择:=n");printf("=0.返回 主菜单=n");printf("=1.删除该天信息n");printf("=n");scanf("%d",&b);switch(b)(default:printf(" 无此选项)请重新输入:

41、n");break;case 0:f7();case 1:fp=fopen("f:pan.txt","w+");printf("旧的信息为:n");for(i=0;i<N;i+)(printf(" 日期收入来源收入金额支出目的支出金额 余额n");printf("%d%d%d”,peoi.year,peoi.month,peoi.day);printf("%5s ",peoi.source);printf("%3f”,peoi.get);printf(&quo

42、t;%5s ",peoi.motive);printf("%5f ”,peoi.out);printf("%3f n",peoi.leave);for(i=n;i<N;i+)fscanf(fp,"%s",&peoi);strcpy(peoi.source,peoi+1.source);peoi.year=peoi+1.year;peoi.month=peoi+1.month;peoi.day=peoi+1.day;peoi.get=peoi+1.get;peoi.out=peoi+1.out;strcpy(peoi.mo

43、tive,peoi+1.motive);peoi.leave=peoi+1.leave;printf("删除成功!n");N=N-1;for(i=0;i<N;i+)支出%2dprintf("日期收入来源收入金额目的支出金额 余额n"printf("%2d%2d”,peoi.year,peoi.month,peoi.day);printf("%5s",peoi.source);printf("%3f”,peoi.get);printf("%5s ",peoi.motive);printf(&

44、quot;%5f ”,peoi.out);printf("%3f n",peoi.leave);for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(structpeople),1,fp)!=1)printf("无法打开!n");exit(0);fclose(fp);break;printf("是否继续 y y/n'n"); scanf("%s",&c);if(c='n'|c='N')exit(0);f4.cpp:#include&

45、quot;stdio.h"#include"stdlib.h"#include"string.h"#include"f2.h"#include"f3.h"#include"f4.h"#include"f5.h"#include"f6.h"#include"f7.h"extern struct people peoSIZE;extern N;void f4()(int i,b,n;char c;FILE *fp;if(fp=fo

46、pen("f:pan.txt","a")=NULL)(printf(" 无法找到该文件!n");exit(0);for(;)(printf("= =n");printf("=0. 返回主 菜单=n");1.添加信printf("=n");printf(" =n");scanf("%d",&b);switch(b)无此选项)请default:printf("重新输入:n"); break;case 0:f7()

47、;case 1:/*进入添加程序*/fp=fopen("f:pan.txt","rb");printf("旧的信息为:n");for(i=0;i<N;i+)printf("fread(&peoi,sizeof(structpeople),1,fp);日期 收入来源 收入金额 支出目的 支出金额余额n");printf("%2d%2d %2",peoi.year,peoi.month,peoi.day); printf("%5s”,peoi.source);printf(&

48、quot;%3f”,peoi.get);printf("%5s ”,peoi.motive);printf("%5f ”,peoi.out);printf("%3fn",peoi.leave);n=N;printf("请输入新的信息日期:n");scanf("%d %d %d",&peon.year,&peon.mon th,&peon.day);printf("请输入新的信息收入金额和收入来源:n");scanf("%f %s",&peon.

49、get,peon.source);printf("请输入新的信息支出金额和支出目的:n");scanf("%f %s",&peon.out,peon.motive );peon.leave=peon.get-peon.out;现在的信N=N+1;息:printf("=n");for(i=0;i<N;i+)printf("日期 收入来源 收入金额%2支出目的支出金额余额n");printf("%2d%2d”,peoi.year,peoi.month,peoi.day);printf("

50、;%5s ”,peoi.source);”,peoi.get);printf("%5s”,peoi.out);printf("%3f”,peoi.motive);printf("%5fprintf("%3f n",peoi.leave);fp=fopen("f:pan.txt","wb");for(i=0;i<N;i+)fwrite(&peoi,sizeof(struct people),1,fp);fclose(fp);break;printf("是否继续?y/nn")

51、; scanf("%s",&c);i f(c='n'|c='N')exit(0);f5.cpp:#include"stdlib.h"#include"string.h"#include"f2.h"#include"f3.h"#include"f4.h"#include"f5.h"#include"f6.h"#include"f7.h"extern struct people peoSIZE;extern N;void f5(int x,int y,int z)int b,i,n;char c;FILE *fp;if(fp=fopen("f:pan.txt","r")=NULL )printf("无法找到该文件!n");exit(0);/*检查是否有该信息*/for(i=0;i<N;i+)if(x=peoi.year&&y=peoi.month&&z= peoi.day)(n=i;break;)if(i=N)(printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论