




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、个人财务管理软件报告目录一、需求分析2二、概要设计2三、详细设计3四、调试分析8五、用户手册8六、测试数据9七、附录111、 需求分析 1.首先个人的财务信息里包括收支日期,收入金额、支出金额还有收入和支出的目的,还有账户余额。因为是包括多个信息所以考虑到用结构体数组来储存这些信息,然后再把这些信息一起储存到文件中。2. 该软件需要有六个功能,首先是登录功能,必须输入正确的用户名和密码才能使用软件。第二是收支记录的管理,该部分包括添加功能,删除功能和修改功能。第三是查询某天或某月的收支情况。第四是统计一段时间的信息。3. 后面的收支功能,查询功能和统计功能都是从文件中读取,读取后存到结构体数组
2、中,然后再进行操作,操作完后关闭文件,以免信息丢失。4. 当用户名和密码输入错误,会提示你输入错误,请重新输入。5. 如果是操作过程中输入错误,会回到最菜单重新操作。6. 运行时用户可以根据提示进行操作,每进行一步操作,就会有相应的提示。2 概要分析 1.程序中存储个人每天的财务信息用的是结构体数组,其中结构体中包括:日期(年月日),收入金额,支出金额,收入目的。 struct peopleint year; /年份int month; /月份int day; /日期float get; /收入金额float out; /支出金额char motive100; /支出目的char source
3、100;/收入来源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(),然后再调用f3()
4、函数。 4.主函数:添加信息到文件中和执行登录功能。 其他调用函数分别执行其他五大功能。3 详细设计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。 start2、 流程图 main函数:int i,a,b i=0i<Nny将信
5、息存到文件中 i+输入用户名和密码输入正确nF7()函数进入添加函数f4()进入删除函数f3()进入修改函数f2()菜单选择函数f7()y进入查询函数f5() end进入统计函数f6()3、基本操作的算法描述 a)登录功能:用户只有在输入正确的用户名和密码后才能进入系统进行操作。 for(;) printf("=请输入用户名和密码:=n");printf("用户名:"); scanf("%d",&a); /a表示用户名printf("n");printf("密码:"); /b表示密码sc
6、anf("%d",&b);printf("n"); if(a=10201306&&b=1) /输入和条件一致的情况下进入if语句中 printf("=恭喜输入正确,登录成功!=n");printf("该软件中已存有2010年1月1号到3号的信息!n"); else /输入和条件不一致就进入else语句printf("输入错误,请重新输入!n"); b)主菜单功能:用户可以自行选择要进行的操作 printf("=1:修改信息=n"); printf(&q
7、uot;=2:删除信息=n"); printf("=3:添加信息=n"); printf("=4:查询信息=n"); printf("=5:统计信息=n"); printf("请选择:");/在屏幕上输出,指示用户操作 scanf("%d",&flag); /输入用户的选项并存在flag中 while( flag != 0) switch(flag) default: printf("此选项不存在,请重新输入:n");break; case 1: f2(x,
8、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;i<N;i+)fread(&peoi,sizeof(struct people),1,fp);if(
9、x=peoi.year&&y=peoi.month&&z=peoi.day) n=i; /查看是否有该天的信息存在 break;if(i=N)printf("没有该天信息!n");printf("请重新选择!n");f7();fread(&peoi,sizeof(struct people),1,fp);/先从文件中读出printf("请输入新的收入来源n"); scanf("%s",peon.source); printf("请输入新的收入金额n");
10、scanf("%f",&peon.get); printf("请输入新的支出目的n"); scanf("%s",peon.motive); printf("请输入新的支出金额n"); scanf("%f",&peon.out);peon.leave=peon.get-peon.out;/输入新的信息 for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(struct people),1,fp)!=1)printf("无法打开!n&qu
11、ot;);exit(0);fclose(fp);/把新的信息存储到文件当中,并关闭文件 d) 删除功能:用户可以在此删除不需要的信息 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")
12、;printf("请重新选择!n");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.motive,peoi+1.motive); peoi.leave=peoi+1.leave;/
13、用后面的信息覆盖前面的信息N=N-1;/删除后信息减少一组,所以N要减1for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(struct people),1,fp)!=1)printf("无法打开!n");exit(0); fclose(fp);/将现有信息重新存回到文件中 e)添加功能:用户可以在此添加新的账户信息fp=fopen("f:pan.txt","rb");/先打开文件fread(&peoi,sizeof(struct people),1,fp);/将文件信息存到结构体数组里n
14、=N; /添加到结构体数组的末尾printf("请输入新的信息日期:n");scanf("%d %d %d",&peon.year,&peon.month,&peon.day); printf("请输入新的信息收入金额和收入来源:n"); scanf("%f %s",&peon.get,peon.source); printf("请输入新的信息支出金额和支出目的:n"); scanf("%f %s",&peon.out,peon.mot
15、ive); peon.leave=peon.get-peon.out; /输入新的信息到结构体中 N=N+1; /添加了新的数据所以N的值加1 fp=fopen("f:pan.txt","wb"); for(i=0;i<N;i+)fwite(&peoi,sizeof(struct people),1,fp);fclose(fp);/将新的一组结构体信息写到文件里 f) 查询功能:用户可以在此查询以前存有的账户信息fopen("f:pan.txt","r"); for(i=0;i<N;i+)fre
16、ad(&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");f7();fread(&peon,sizeof(struct people),1,fp);/将数据存到结构体数组中printf("收入来源 收入金额 支出目的 支出金额 余额n");printf(
17、"%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;i<N;i+)fread(&peoi,sizeof(struct people),1,fp)
18、;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(struct people),1,fp);if(x1=peoi.year&&y1=peoi.month&&z1=peoi.day) m=i; /查看是否有该天的信息存在 break;if(
19、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;else for(i=m,sum=0;i<=n;i+)sum+=peoi.get; printf("%f",sum);fclose(fp);break;如果统计支出金额,只需将peoi.get改为peoi.out就行
20、。 3、各函数的调用关系图 main函数 f7()函数 f2()函数 f3()函数 f4()函数 f5()函数 f6()函数 f7()函数 4 调试分析1. 开始时没有将N定义为全局变量,导致在添加函数中N+1后,其他函数中的N却没有改变,导致最后查询的信息不完整。2. 开始时没有将主菜单单独存到一个函数里面,这样就无法一次运行多个功能,最后将主菜单单独存到一个函数里以后,就可以在运行完一个功能之后,重新选择,这样就可以在一次调试中,运行所有的功能模块,减少了很多麻烦。3. 第一次调试运行时,文件中没有存储任何的信息,所以每次进入都必须先要输入一定量的数据,然后才能进行下面的操作,后来加以改善
21、,先在文件中存储几天的账户信息,这样在运行时就可以直接进行查询,修改,删除等操作了。4. 第一次检查时,由于对文件的操作不是很熟练,发现了添加的数据并没有存储到文件之中,最后经过修正,加入了一个fwrite将信息写到了文件里。五用户手册 1、本程序的运行环境为DOS操作系统,执行文件为f1.dsw; 2、 进入演示程序后,即显示对话形式的提示操作过程, 如:请输入用户名和密码,输入正确后便进入菜单选择 请输入你的选项, 输入选项后,如果选项不存在,会提示你选项不存在,请重新选择。 输入正确选项后,便会提示你输入日期。如果进入的是修改函数,就会继续提示你输入新的信息;如果进入的时添加函数,会让你
22、输入新的账户信息;如果进入的是删除函数,再删除完后会提示你删除成功;如果进入的时查询函数,会输出你要查询的当天账户信息;如果进入的统计函数,会提示你选择将要统计的信息。3、 如果用户不小心进错了功能,可以输入0来返回主菜单,重新选择。4、进行完上面的操作之后,会提示用户是否继续运行该程序来进行其他的功能操作 按n或N键 stop或其它键继续六测试数据 =请输入用户名和密码:= 用户名:10201306密码:1恭喜输入正确,登录成功!1:修改信息 2:删除信息3:添加信息 4:查询信息 5:统计信息 a)请选择:1 请输入您要修改得日期:2010 1 1 0.返回主菜单 1.修改该天信息 请选择
23、 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 1000.000000 收入1 100.000000 支出1 2010 1 2 2000.000000 收入2 200.000000 支出2 2010 1 3 3000.000
24、000 收入3 300.000000 支出3 删除成功!新的信息为: 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.000000 收入1 100.000000 支出1 2010 1 2 2000.000000 收入2 200.000000 支出2 2010 1 3 3000.000000 收入3 300.
25、000000 支出3 请输入新的信息:2010 1 4 4000 收入4 400 支出4添加成功!新的信息为:2010 1 1 1000.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.000000 收入4 400.000000 支出4 是否继续 y/n n press any key to continued)请选择:4 请输入您要查询得日期:2010 1 1 0.返回主菜单 1.查询该天信息 请选择
26、12010 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. 统计该段时间的余额 请选择 1. 6000.000000 2. 600.000000 3. 5400.000000是否继续 y/n n press any key to continue七附录 1、源程序函数清单 主函数:f1() 修改函数:f2()删除函数:f3()添加函数:f4()查
27、询函数: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 peoSIZE;int N=3
28、;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);peo0.out=100; peo0.l
29、eave=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=3000; strcpy(peo2.motive,e3);peo2.out=300; peo2.leave=peo2.ge
30、t-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("n&q
31、uot;); printf("请登录:n"); for(;) printf("=请输入用户名和密码:=n");printf("用户名:"); scanf("%d",&a);printf("n");printf("密码:");scanf("%d",&b);printf("n"); if(a=10201306&&b=1) printf("=恭喜输入正确,登录成功!=n");printf(&
32、quot;=该软件中已存有2010年1月1号到3号的信息!=n"); f7(); elseprintf("输入错误,请重新输入!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"f6.h"#inclu
33、de"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(struct people),1,fp);if(x=peoi.y
34、ear&&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",&b); switch(b) de
35、fault:printf("无此选项,请重新输入:n"); break;case 0:f7(); case 1:/修改收入来源fp=fopen("f:pan.txt","w+");fread(&peoi,sizeof(struct people),1,fp);printf("旧的信息为:n");printf("收入来源 收入金额 支出目的 支出金额 余额n");printf("%5s ",peon.source);printf("%3f ",peo
36、n.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"
37、,&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("
38、;收入来源 收入金额 支出目的 支出金额 余额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;i<N;i+)if(fwrite(&peoi,sizeof(struct people),1,fp)!=1)printf("无法打开!n&
39、quot;);exit(0);fclose(fp); break; printf("是否继续?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"#in
40、clude"f5.h"#include"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.ye
41、ar&&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",&b);switch(b)d
42、efault:printf("无此选项,请重新输入: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.
43、source); printf("%3f ",peoi.get); printf("%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=pe
44、oi+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;i<N;i+)printf("日期 收入来源 收入金额 支出目的 支出金额 余额n"printf("%2d %2d %2d ",peoi.year,peoi.month,peoi.day);printf("%5s ",peoi.so
45、urce);printf("%3f ",peoi.get);printf("%5s ",peoi.motive);printf("%5f ",peoi.out);printf("%3f n",peoi.leave);for(i=0;i<N;i+)if(fwrite(&peoi,sizeof(struct people),1,fp)!=1)printf("无法打开!n");exit(0);fclose(fp);break; printf("是否继续?y/nn");
46、 scanf("%s",&c); if(c='n'|c='N') exit(0); f4.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
47、"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"); scanf("%d
48、",&b); switch(b) default:printf("无此选项,请重新输入:n");break;case 0:f7(); case 1: /*进入添加程序*/fp=fopen("f:pan.txt","rb");printf("旧的信息为:n");for(i=0;i<N;i+)fread(&peoi,sizeof(struct people),1,fp); printf("日期 收入来源 收入金额 支出目的 支出金额 余额n");printf(&quo
49、t;%2d %2d %2d ",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);n=N; printf("请输入新的信息日期:n"); scanf("%d %d %d",&peon.year,&peon.month,&peon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三晋卓越联盟·2024-2025学年高三5月质量检测卷(25-X-635C)语文(B)
- 物流配送中心合作协议
- 2025年某校小学数学教师个人总结模版
- 临床诊疗指南相关知识培训考试试题
- 校园义卖活动策划与执行方案
- 油田消防考试题及答案
- 医院消防安全试题及答案
- 一建注册消防试题及答案
- 急诊科医生岗前培训
- 新疆消防笔试题目及答案
- 生死擂台免责协议书
- 试管婴儿合格协议书
- 事业单位公开招聘分类考试公共科目笔试考试大纲(2025版)
- 高考考务人员培训系统试题答案
- 【MOOC】设计的力量-湖南大学 中国大学慕课MOOC答案
- 车辆技术档案
- 2019译林版高中英语全七册单词总表
- 人工智能导论智慧树知到课后章节答案2023年下哈尔滨工程大学
- 燃气公司绩效考核表格大全(共61页)
- 室外配套工程监理实施细则
- 英语教学课件Unit-4-Lions-and-Tigers-and-Bears
评论
0/150
提交评论