南邮程序设计个人财务系统实验报告.docx
《南邮程序设计个人财务系统实验报告.docx》由会员分享,可在线阅读,更多相关《南邮程序设计个人财务系统实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
![南邮程序设计个人财务系统实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/10/2f6cbf82-9f85-413b-b9dd-41122019e3dc/2f6cbf82-9f85-413b-b9dd-41122019e3dc1.gif)
南邮程序设计个人财务系统实验报告
个人财务系统
一.实验内容和要求:
课题:
个人财务系统的设计
内容和要求:
(1)定义个人财务相关的结构体。
(2)进行个人财务明细信息录入修改删除。
(3)可以进行相关信息查询。
(4)能够进行财务信息分类汇总统计。
二.需求分析
(1)刚运行出来的界面是个人财务管理系统主界面,里面有四个主要功能1财务数据管理财务数据查询3财务数据统计0退出返回。
通过输入序号分别进入其中一个子菜单内。
(2)比如输入1财务数据管理,进入另一个界面,里面又有三个子功能分别是财务录入、修改、删除。
输入2时进入财务数据查询界面,共有三个方法进行查询,可以查所有财务数据,按年月查询,按收入和支出查询。
输入3进入财务数据统计界面,里面有两个功能,可分别按年月统计和收支统计。
三.概要设计
(1).程序中有四个头文件
#include标准io库头文件,只要用到printf(输出)和scanf(输入)时都要引入该头文件。
#include也是库头文件,主要用syetem(),exit(),等函数时要引用该头文件;
#include是旧的C头文件,对应的是基于char*的字符串处理函数;
#include是定义类型函数时要引用该头文件。
(2)定义各函数变量,如:
voidmainlist();
voiddatalist();
voiddatain();//输入信息
voiddatamo();//信息修改
voiddatadel();//删除信息
voidquelist();
voidalldata();//查询所有信息
voidtdata();//按年月查询
voidsz();//按收支查询
voidstalist();
doublesta(inty,intm);//按月份或年份统计收支
voidszsta();//收支统计
charshuru();//判断输入是否为数字
intreadfile();//读取财务信息
voidwritefile(intx);//记录财务信息
(3)进行各个函数功能的运用
voidmainlist()主菜单定义个人财务系统的管理,查询,统计,其中用到switch();{case0,case1,case2,case3}语句进行选择功能,for语句限制输入数据的长度并判断数据是否要存档,并通过printf,scanf语句进行相关数据的输入输出。
在定义主函数中,进行文件的定义readfile()进行读取文件writefile()进行写入文件。
并判断能否读取和写入,charshuzi()判断输入的是否是数字,如果不是数据重新输入或返回。
(4)实验中主要用到的函数和主要语句
1#defineN100宏指令,定义100个数据变量。
2structfinance//财务数据结构体定义finance为结构名
{
intnum;结构体成员别列
intyear;
intmonth;
intday;
charname[30];
doubleamount;
}FIN,pro[N];FIN为结构别名
3FILE*fp;文件指针
4system("colorf1\n");改变运行界面为白色
system("color48\n");改变运行界面为红色
system("cls");清屏语句
5switch(…..){case0:
…….;case1:
………..};
四源程序相关主要代码
structfinance//财务数据结构体
{
intnum;
intyear;
intmonth;
intday;
charname[30];
doubleamount;
}FIN,pro[N];
typedefstructdata//月度统计
{
intsort_year;
intsort_month;
doublecount;
structdatasort*next;
}DSORT,*DSORTP;DSORTdsort[N];
voidmainlist()//主菜单,可选功能数据管理、查询、统{
intb;
system("colorf1\n");
printf("\t\t******************************************\n");
printf("\t\t\t10001125徐成双个人财务管理系统\n\n");
printf("\t\t******************************************\n");
printf("\t1.财务数据管理\n");
printf("\t2.财务数据查询\n");
printf("\t3.财务数据统计\n");
printf("\t0.退出返回\n");
printf("请输入选择的序号:
");
scanf("%d",&b);
system("cls");
switch(b)
{
case1:
datalist();break;
case2:
quelist();break;
case3:
stalist();break;
case0:
exit(0);break;
}
}
voiddatain()//数据录入
{
inti,word=1,x,k=0;
for(;datalong{printf("请输入编号:
\n");
scanf("%d",&pro[datalong].num);
printf("请输入年:
\n");
scanf("%d",&pro[datalong].year);
printf("请输入月:
\n");
scanf("%d",&pro[datalong].month);
printf("请输入日:
\n");
scanf("%d",&pro[datalong].day);
printf("请输入收支项目名称:
\n");
scanf("%s",pro[datalong].name);
printf("请输入收支金额:
\n");
scanf("%lf",&pro[datalong].amount);
printf("要继续吗?
\n1.是2.退出\n");
scanf("%d",&word);
}
for(i=0;i{
printf("%-5d%-5d%-5d%-5d%-10s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,pro[i].name,pro
[i].amount);
}
printf("\n档案需要存档吗?
\t1.是2.否\n");
scanf("%d",&x);
writefile(x);
}voiddatamo()
{
intch,i;
printf("请输入要修改的收支编号:
\n");
scanf("%d",&ch);
for(i=0;i{
if(pro[i].num==ch)
{
printf("请输入修改信息:
\n");
printf("请输入编号:
\n");
scanf("%d",&pro[i].num);
printf("请输入年:
\n");
scanf("%d",&pro[i].year);
printf("请输入月:
\n");
scanf("%d",&pro[i].month);
printf("请输入日:
\n");
scanf("%d",&pro[i].day);
printf("请输入收支项目名称:
\n");
scanf("%s",pro[i].name);
printf("请输入收支金额:
\n");
scanf("%lf",&pro[i].amount);
writefile
(1);
}
}
}
voiddatadel()//数据删除
{
intch,i;
printf("请输入要修改的收支编号:
\n");
scanf("%d",&ch);
for(i=0;i{
if(pro[i].num==ch)
{
pro[i].num=pro[i+1].num;
pro[i].year=pro[i+1].year;
pro[i].month=pro[i+1].month;
pro[i].day=pro[i+1].day;
strcpy(pro[i].name,pro[i+1].name);
pro[i].amount=pro[i+1].amount;
datalong=datalong-1;
writefile
(1);
}
}
}
voiddatalist()
{
intb;
system("cls");
system("color48\n");
printf("\t\t************************************\n");
printf("\t\t\t\t财务数据管理\n\n");
printf("\t\t************************************\n");
printf("-----1.财务录入\n");
printf("-----2.财务修改\n");
printf("-----3.财务删除\n");
printf("-----0.退出返回\n");
printf("请输入选择的序号:
");
scanf("%d",&b);
system("cls");
switch(b)
{
case1:
datain();mainlist();break;
case2:
datamo();mainlist();break;
case3:
datadel();mainlist();break;
case0:
mainlist();break;
}
}
voidalldata()//输出所有信息
{
inti;
printf("编号\t年\t月\t日\t收支信息\t金额\n");
for(i=0;i{
printf("%-10d%-9d%-5d%-5d%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,pro[i].name,pro
[i].amount);
}
}
voidtdata()//按年月搜索
{
inty,m,i;
printf("请输入年份");
scanf("%d",&y);
printf("请输入月份");
scanf("%d",&m);
printf("编号\t年\t月\t日\t收支信息\t金额\n");
for(i=0;i{
if(pro[i].year==y&&pro[i].month==m)
{
printf("%-10d%-9d%-5d%-5d%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,pro
[i].name,pro[i].amount);
}
}
}
voidquelist()//数据查询菜单功能所有数据、按年月、按收支查询
{
intb;
system("color48\n");
printf("\t\t***************************************\n");
printf("\t\t\t\t财务数据查询\n\n");
printf("\t\t***************************************\n");
printf("\t$$1.所有财务数据\n");
printf("\t$$2.按年月查询\n");
printf("\t$$3.按收入和支出查询\n");
printf("\t$$0.退出返回\n");
printf("\t请输入选择的序号:
");
scanf("%d",&b);
system("cls");
switch(b)
{
case1:
alldata();mainlist();break;
case2:
tdata();mainlist();break;
case3:
sz();mainlist();break;
case4:
mainlist();break;
}
}
doublesta(inty,intm)//按年月统计
{
inti;
doublesum=0;
for(i=0;i{
if(pro[i].year==y&&pro[i].month==m)
{
sum+=pro[i].amount;
}
}
returnsum;
}
voidstalist()//统计菜单功能按时间、收支统计
{
intb;
inty,m;
system("cls");
system("color48\n");
printf("\t\t**************************************\n");
printf("\t\t\t\t财务收支统计\n\n");
printf("\t\t**************************************\n");
printf("\t--1.按年月统计\n");
printf("\t--2.收支统计\n");
printf("\t--0.退出返回\n");
printf("\t请输入选择的序号:
");
scanf("%d",&b);
switch(b)
{
case1:
{
printf("请输入年份");
scanf("%d",&y);
printf("请输入月份");
scanf("%d",&m);
printf("该月份金额为:
%lf\n",sta(y,m));mainlist();break;
}
case2:
szsta();mainlist();break;
case3:
mainlist();break;
}
}
voidmain()//数据处理菜单功能数据录入、修改、删除
{
datalong=readfile();
mainlist();
}
intreadfile()//财务信息读取
{
intk=0;
if((fp=fopen("data.txt","r"))==NULL)//读取客房信息
{
printf("建立文件。
\n");
if((fp=fopen("data.txt","w"))==NULL)
{
printf("无法进行存储信息。
重新登录。
\n");exit(0);
}
}
do
{
fread(&pro[k],sizeof(FIN),1,fp);
k++;
}while(pro[k-1].num!
=0);
returnk-1;
fclose(fp);
}
voidwritefile(intx)//财务信息写入
{
inti=0;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("写文件失败!
\n");exit(0);
}
if(x==1)
{
for(i=0;i{
fwrite(&pro[i],sizeof(FIN),1,fp);
}
printf("文件修改成功。
\n");
fclose(fp);
}
}
charshuzi()//判断输入的是否是数字
{
charx;
if(isdigit(x=getchar()))
{
printf("%c\n",x);
getchar();
return(x);
}
else
{
printf("%c\n",x);
printf("请输入数字!
\n");
printf("请重新选择序号:
");
shuzi();
}
return0;
}
五.测试数据和结果分析
编号
年份
月份
日份
收支
金额
001
2011
11
1
收入
4000
002
2011
11
1
支出
4500
003
2011
12
1
收入
5000
004
2011
12
1
支出
3500
005
2012
1
1
收入
4000
006
2012
1
1
支出
3500
1主菜单
2财务数据录入
3录入完成
4按收入查询
5支出查询
6按年月统计
7按收入统计
六调试过程中的问题
1调试过程中发现屏幕比较单一,通过system("colorf1\n");system("color48\n");可以更改屏幕颜色,使其变的美观大方,井井有条。
2通过清屏语句system("cls");进行屏幕更改界面,使屏幕变得简单,清爽,不再那么杂乱。
3程序中不断调用函数进行相关功能的运算使用,每个函数需要进仅仅相扣,有时函数联系不紧密会出现错误,无法执行相关功能。
进行文件的读取写入时,并需要判断文件能否读取和写入。
七课题设计总结
实验中,刚开始我无从下手,经历了这次程序设计的整个过程,我们才发现我们知识的贫乏和知识面的狭窄。
主要原因是我很少编程序,对编程序我没有足够的实践经验,这也注定了我在编程序时会遇到好多困难,面对这样不可逃避的困难,我只能迎头勇敢面对,我找同学讨论,询问许多关于C语言的问题,从中我学到了关于结构体,文件,单链表等知识。
我不断查询资料,包括书本上的,网上的。
对于个人财务系统的资料有好多相关内容,然而这些都不是我想要,因为其中好多我都没学过,我只能选取一些学过的内容进行编程,当然我一个人完成编程是有困难的,在我好同学帮助下,最后我终于完成了编程,对于质量的好坏,就看老师来评论了。
这次程序设计,我对C语言有了更深的了解,原来自己编程的经历并不是很多,许多时候自己是纸上谈兵,但是通过此次编程让我将过去的所学的理论知识真正用到实践中,加深了我对所学知识的理解。