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

下载本文档

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

文档简介

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

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

3、入金额 float out; / 支出金额 char motive100; / 支出目的 char source100; / 收入来源 float leave; / 余额 2. 本程序各函数的结构 main 函数 将三天的账户信息存储到文件中; 提示用户输入用户名和密码, 输入正确; 进入 f7 ();/ 菜单选择函数 switch () 1. 修改信息; /f2() 函数 2. 添加信息; /f3() 函数 3. 删除信息; /f4() 函数 4. 查询信息; /f5() 函数 5. 统计信息; /f6() 函数 3. 各模块的调用关系 第一层: main 函数 第二层: f7 (); 第三

4、层: f2() , f3(), f4(), f5(), f6(); 调用时这些函数都可以通过 f7()函数来互相 调用。比如运行完 f2()函数后,可以调用f7 (),然后再调用 f3()函数。 4.主函数:添加信息到文件中和执行登录功能。 其他调用函数分别执行其他五大功能。 三详细设计 1、基本数据类型操作 a)存储每天账户信息的数组结构体 struct people int year; int month; int day; float get; float out; char motive100; char source100; float leave; b )控制结构体数目的 exte

5、rn N 刚开始运行该程序时, N 的初始值为 3,后来如果进行添加操作,则 N的值就会加 1,反之如果进行删除操作,则 N的值就会减 1。 2、流程图 3、基本操作的算法描述 a) 登录功能:用户只有在输入正确的用户名和密码后才能进入系统进行 操作。 for(;) printf(= 请输入用户名 和密码: =n); printf( 用户名 :); scanf(%d, /a 表示用户 名 printf(n); printf( 密码 :); /b 表示密码 scanf(%d, printf(n); if(a=10201306 printf( 该软件中已存有 2010 年 1 月 1 号到 3 号

6、的信息 !n); else / 输入和条件不一致就进入 else 语句 printf( 输 入 错 误 , 请 重 新 输 入!n); b)主菜单功能:用户可以自行选择要进行的操作 printf(=1: 修 改 信 息 =n); printf(=2: 删除 信息 =n); printf(=3: 添 加 信 息 =n); printf(=4: 查询 信息 =n); printf(=5: 统 计 信 息 =n); printf(请选择 :);/ 在屏幕上输出,指示用户操作 scanf(%d, / 输入用户的选项并存在 flag 中 while( flag != 0) switch(flag) de

7、fault: 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); / 进 入 统 计函数 break; c) 修改功能:用户如果觉得存储的信息有问题,可以在此进行修改 fp=fopen(f:pan.txt,w+); for(i=0;iN;i+) f

8、read( if(x=peoi.year / 查看是否有该天的信息存在 break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); f7(); fread(/ 先从文件中读出 printf( 请输入新的收 入来源n); scanf(%s,peon.source); printf( 请输入新的收入金额 n )scanf(%f, printf(请 输 入 新 的 支 出 目 的 n); scanf(%s,peon.motive); printf( 请 输 入 新 的 支 出 金 额 n); scanf(%f, peon.leave=peon.get-

9、peon.out;/ 输 入新的信息 for(i=0;iN;i+) if(fwrite( exit(0); fclose(fp);/ 把新的信息存储到文件当 中,并关闭文件 打开文 d) 删除功能:用户可以在此删除不需要的信息 fp=fopen(f:pan.txt,w+);/ for(i=0;iN;i+) fread( if(x=peoi.year / 查看是否有该天的信息存在 break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); for(i=n;iN;i+ ) fscanf(fp,%s,/将 文 件 中 的信息存到数组结构体里 strcp

10、y(peoi.source,peoi+1.sour ce); 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.motive,peoi+1.moti ve); peoi.leave=peoi+1.leave;/ 用后 面的信息覆盖前面的信息 N=N-1;/ 删除后信息减少一组, 所以 N要减 1 for(i=0;iN;i+) if(fwrite( exit(0); fclose(fp);/ 将现有信

11、息重新存回到文件 中 e) 添加功能:用户可以在此添加新的账户信息 fp=fopen(f:pan.txt,rb);/ 先打开 文件 fread(/ 将文件信息存到结构体数 组里 n=N; / 添加到结构体数组的末尾 printf( 请输入新的信息日期: n); scanf(%d %d %d, printf( 请输入新的信息收入金额和收入 来源: n); scanf(%f %s, printf( 请输入新的信息支出金额和支出 目的: n); scanf(%f %s, peon.leave=peon.get-peon.out / 输入新的信息到结构体中 N=N+1; / 添加了新的数据所以 N的值

12、加 1 fp=fopen(f:pan.txt,wb); for(i=0;iN;i+) fwite( fclose(fp);/ 将新的一组结构体信息写到 文件里 f) 查询功能:用户可以在此查询以前存有的账户信息 fopen(f:pan.txt,r); for(i=0;iN;i+) fread( if(x=peoi.year / 查看是否有该天的信息存在 break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); f7(); fread(/ 将数据存到结构体数组 中 printf( 收入来源 收入金额 支 出目的 支出金额 余额 n); print

13、f(%5s ,peon.source); printf(%3f ,peon.get); printf(%5s ,peon.motive); printf(%5f ,peon.out); printf(%3f ,peon.leave);/ 输 出您要查询的该天信息 fclose(fp); / 关闭文件防止信息丢失 g) 统计功能:用户可以在此统计一段时间内的收入金额和支出金 额 for(i=0;iN;i+) fread( if(x=peoi.year / 查看是否有该天的信息存在 break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); for(

14、i=0;iN;i+) fread( if(x1=peoi.year / 查看是否有该天的信息存在 break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); 如果存在该段时间信息,那么统计收入 金额: if(nm) for(i=n,sum=0;i=m;i+) sum+=peoi.get; printf(%f,sum); fclose(fp); break; else for(i=m,sum=0;i=n;i+) sum+=peoi.get; printf(%f,sum); fclose(fp); break; 如果统计支出金额, 只需将 peoi.

15、get 改为 peoi.out 就行。 3 、各函数的调用关系图 main 函数 f7()函数 f2()函数 f3() 函数 f4()函数 f7()函数 f5() 函数 f6()函数 四调试分析 1.开始时没有将 N 定义为全局变量,导致在添加函数中 N+1 后,其他函数 中的 N 却没有改变,导致最后查询的信息不完整。 2. 开始时没有将主菜单单独存到一个函数里面,这样就无法一次运行多个功 能,最后将主菜单单独存到一个函数里以后,就可以在运行完一个功能之后, 重新选择,这样就可以在一次调试中,运行所有的功能模块,减少了很多麻烦。 3. 第一次调试运行时,文件中没有存储任何的信息,所以每次进入

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

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

18、息 4: 查询信息 5: 统计信息 a) 请选择: 1 请输入您要修改得日期: 2010 1 1 0. 返回主菜单 1. 修改该天信息 请选择 1 旧的信息为: 2010 1 1 1000.000000 收入 1 100.000000 支出 1 请输入新的信息:收入金额 1100 收入来源 aaa 支出金额 200 支 出目的 bbb 。 修改成功! 新的信息为 2010 1 1 1100.000000 aaa 200.0000000 bbb b) 请选择: 2 请输入您要删除的日期: 2010 1 1 0. 返回主菜单 1. 删除该天信息 请选择: 1 旧的信息为: 2010 1 1 100

19、0.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 支出 2 2010 1 3 3000.000000收入 3 300.000000 支出 3 是否继续 y/n n press any key to continue c) 请选择: 3 0. 返回主菜单 1. 添加一天的账户信息 请选择: 1 旧的信息为 :2010 1 1 1000

20、.000000收入 1 100.000000 支出 1 2010 1 2 2000.000000 收入 2 200.000000 支出 2 2010 1 3 3000.000000 收入 3 300.000000 支出 3 请输入新的信息: 2010 1 4 4000 收入 4 400 支出 4 添加成功! 新的信息为: 2010 1 1 1000.000000 1 2010 1 2 2000.000000 收入 1 100.000000 支出 收入 2 200.000000 支出 2 2010 1 3 3000.000000 收入 3 300.000000 支出 3 2010 1 4 400

21、0.000000 收入 4 400.000000 支出 4 是否继续 y/n n press any key to continue d) 请选择: 4 请输入您要查询得日期: 2010 1 1 0. 返回主菜单 1. 查询该天信息 请选择 1 2010 1 1 1000.000000 收入 1 100.000000 支出 1 是否继续 y/n n press any key to continue e) 请选择 : 5 请输入你要统计的两个日期: 2010 1 1 2010 1 3 0. 返回主菜单 1. 统计该段时间的收入金额 2. 统计该段时间的支出金额 3. 统计该段时间的余额 请选择

22、 1. 6000.000000 2. 600.000000 3. 5400.000000 是否继续 y/n n press any key to continue 七附录 1、源程序函数清单 主函数: f1() 修改函数: f2() 删除函数: f3() 添加函数: f4() 查询函数: f5() 统计函数: f6() 主菜单函数 : f7() 2、源程序代码 f1.cpp: #includestdio.h #includestdlib.h #includestring.h #includef2.h #includef3.h #includef4.h #includef5.h #include

23、f6.h #includef7.h struct people peoSIZE; 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.da y=1; strcpy(peo0.source,d1);peo0.get=10 00; strcpy(peo0.motive,e1);peo0.out=100 peo0.leav

24、e=peo0.get-peo0.out; peo1.year=2010;peo1.month=1;peo1. day=2; strcpy(peo1.source,d2);peo1.get=200 0; 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=300 peo2.leave=peo2.g

25、et-peo2.out; /* 把数据写入文件 */ fp=fopen(f:pan.txt,w); for(i=0;iN;i+) if(fwrite( exit(0); fclose(fp); /* 菜单选择功能 */ printf(= 个人账户管理软 件=n); printf(= 设计人:潘君宇 =n); printf(n); printf(n); printf( 请登录: n); for(;) printf(= 请输入用户名和 密码: =n); printf( 用户名 :); scanf(%d, printf(n); printf( 密码 :); scanf(%d, printf(n);

26、if(a=10201306 printf(= 该软件中已存有 2010 年 1 月 1 号到 3 号的信息 !=n); f7(); else printf( 输 入 错 误 , 请 重 新 输 入!n); f2.cpp: #includestdio.h #includestdlib.h #includestring.h #includef2.h #includef3.h #includef4.h #includef5.h #includef6.h #includef7.h extern struct people peoSIZE; extern N; void f2(int x,int y,i

27、nt z) int b,i,n,flag=1; char c; FILE *fp; /* 检查信息 */ if(fp=fopen(f:pan.txt,r)=NUL L) printf( 无法找到该文件 !n); exit(0); /* 检查是否有该信息 */ for(i=0;iN;i+) fread( if(x=peoi.yearbreak; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); f7(); /* 进入修改程序 */ for(;) printf(= 请 选 择: =n); printf(=0. 返回主菜单 =n); printf(=1.

28、修改该天信 息=n); printf(= = n); scanf(%d, switch(b) default:printf( 无此选项,请重新 输入: n); break; case 0: f7(); case 1: / 修改收入来源 fp=fopen(f:pan.txt,w+); fread( printf( 旧的信息为: n); printf( 收 入 来 源收 入 金 额 支出目的 支出金额余额 n); printf(%5s ,peon.source); printf(%3f ,peon.get); printf(%5s ,peon.motive); printf(%5f ,peon.o

29、ut); printf(%3f n,peon.leave); fscanf(fp,%s, printf( 请输入新的收入来源 n); scanf(%s,peon.source); printf(n); / 修改收入金额 printf( 请输入新的收入金额 n); scanf(%f, printf(n); / 修改支出目的 printf( 请输入新的支出目的 n); scanf(%s,peon.motive); printf(n); / 修改支出金额 printf( 请输入新的支出金额 n); scanf(%f, printf(n); peon.leave=peon.get-peon.out;

30、printf( 新的的信息为: n); printf( 收 入 来 源收 入 金 额 支出目的 支出金额 余额 n); printf(%5s ,peon.source); printf(%3f ,peon.get); printf(%5s ,peon.motive); printf(%5f ,peon.out); printf(%3f n,peon.leave); for(i=0;iN;i+) if(fwrite( exit(0); fclose(fp); break; printf( 是否继续? y/nn); scanf(%s, if(c=n|c=N) exit(0); F3.cpp: #i

31、ncludestdio.h #includestdlib.h #includestring.h #includef2.h #includef3.h #includef4.h #includef5.h #includef6.h #includef7.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); /* 检查是否有该

32、信息 */ for(i=0;iN;i+) if(x=peoi.year break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); f7(); /* 进入删除程序 */ for(;) printf(= 请选择: =n); 主菜单 printf(=0. 返 回 =n); printf( =1. n); 删除该天信息 printf(= =n); scanf(%d, switch(b) default:printf( 无此选项,请重 新输入: n);break; case 0: f7(); case 1: fp=fopen(f:pan.txt,w+);

33、 printf( 旧的信息为: n); for(i=0;iN;i+) printf( 日期 收入来源 收入金额 支出目的 支出金额 余额 n); printf(%d %d %d ,peoi.year,peoi.month,peoi.day); printf(%5s ,peoi.source); printf(%3f ,peoi.get); printf(%5s ,peoi.motive); printf(%5f ,peoi.out); printf(%3f n,peoi.leave); for(i=n;iN;i+) fscanf(fp,%s, strcpy(peoi.source,peoi+1

34、.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.motive,peoi+1.motive); peoi.leave=peoi+1.leave; printf( 删除成功 !n); N=N-1; for(i=0;iN;i+) 支出 %2d printf( 日期 收入来源 收入金额 目的 支出金额 余额 n printf(%2d %2d ,peoi.year,peoi.month,p

35、eoi.day); printf(%5s ,peoi.source); printf(%3f ,peoi.get); printf(%5s ,peoi.motive); printf(%5f ,peoi.out); printf(%3f n,peoi.leave); for(i=0;iN;i+) if(fwrite( exit(0); fclose(fp); break; printf( 是否继续? y/nn); scanf(%s, if(c=n|c=N) exit(0); f4.cpp: #includestdio.h #includestdlib.h #includestring.h #i

36、ncludef2.h #includef3.h #includef4.h #includef5.h #includef6.h #includef7.h extern struct people peoSIZE; extern N; void f4() int i,b,n; char c; FILE *fp; if(fp=fopen(f:pan.txt,a)=NULL ) printf( 无法找到该文件 !n); exit(0); for(;) printf(= =n); printf(=0. 返 回 主 菜单=n); printf(=1. 添 加 信 息=n); printf( =n); sc

37、anf(%d, switch(b) default:printf( 无此选项,请 重新输入: n); break; case 0: f7(); case 1: d ,peoi.year,peoi.month,peoi.day); /* 进入添加程序 */ fp=fopen(f:pan.txt,rb); printf( 旧的信息为: n); for(i=0;iN;i+) fread( printf( 日期 收入来源 收入金额 支出目的 支出金额 余额 n); printf(%2d %2d %2 printf(%5s ,peoi.source); printf(%3f ,peoi.get); pr

38、intf(%5s ,peoi.motive); printf(%5f ,peoi.out); printf(%3f n,peoi.leave); n=N; printf( 请输入新的信息 日期: n); scanf(%d %d %d, printf( 请输入新的信息 收入金额和收入来源: n); scanf(%f %s, printf( 请输入新的信息 支出金额和支出目的: n); scanf(%f %s, peon.leave=peon.get-peon.out; 息: 现在的信 N=N+1; printf(= =n); for(i=0;iN;i+) printf( 日期 收入来源 收入金额

39、 支出目的 支出金额 余额 n); %2 printf(%2d %2d ,peoi.year,peoi.month,peoi.day); printf(%5s ,peoi.source); ,peoi.get); printf(%5s printf(%3f ,peoi.motive); ,peoi.out); printf(%5f printf(%3f n,peoi.leave); fp=fopen(f:pan.txt,wb); for(i=0;iN;i+) fwrite( fclose(fp); break; printf( 是否继续 ?y/nn); scanf(%s, i f(c=n|c=

40、N) exit(0); f5.cpp: #includestdlib.h #includestring.h #includef2.h #includef3.h #includef4.h #includef5.h #includef6.h #includef7.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); /* 检查是否有该信

41、息 */ for(i=0;iN;i+) if(x=peoi.year break; if(i=N) printf( 没有该天信息 !n); printf( 请重新选择 !n); f7(); /* 进入查询程序 */ for(;) printf( 请选择 =n); printf( =0. 返回主 菜单= =n); printf( =1. 查询该 天信息 = =n); printf(= =n); scanf(%d, switch(b) fread( default:printf( 无此选项,请重 新输入: n); break; case 0: f7(); case 1: printf( 收入来源

42、收入金额 支 出目的 支出金额 余额 n); printf(%5s ,peon.source); printf(%3f ,peon.get); printf(%5s ,peon.motive); .MZl.spnpu!# .q-gi.spnpui# .qgi.spnpui# .qW.pnpui# .qCl.spnpui# M 弘 epnQU!# .q-BuiJspnioui# .qqiipspnioui# .qoipspnioui# :ddogj !(dj)9sop j 伽!xe (iNi=0IIiui=)J ! !(.s%u)jueos t.uu/X 2 篦痣显者.)Wuud 冷weq :(

43、e/Eeuoedl J%.)Wuud 0no uoedl jg%11)wuud extern struct people peoSIZE; extern N; void f6(int x,int y,int z,int x1,int y1,int z1) int b,i,n,m,flag=1; float sum; char c; FILE *fp; if(fp=fopen(f:pan.txt,r)=NULL ) printf( 无法找到该文件 !n); exit(0); /* 检查是否有该信息 */ for(i=0;iN;i+) if(x=peoi.year break; if(i=N) printf( 没有该段时间信息 !n); printf( 请重新选择 !n); f7(); for(i=0;iN;i+) if(x1=peoi.year break; if(i=N) printf( 没有该段时间信息 !n); printf( 请重新选择 !n); f7(); /* 进入统计程序 */ fp=fopen(f:pan.txt,r); while(flag=1) printf(= 选择= printf(= 菜单= pri

温馨提示

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

评论

0/150

提交评论