个人账簿管理系统说明书Word文档格式.docx
- 文档编号:18370052
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:27
- 大小:291.89KB
个人账簿管理系统说明书Word文档格式.docx
《个人账簿管理系统说明书Word文档格式.docx》由会员分享,可在线阅读,更多相关《个人账簿管理系统说明书Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
intstore;
//储蓄费用
intincome;
//收入费用
}Infor;
typedefstruct{//查询用自定义数据类型
intno;
intdata;
}pType;
2.各模块的伪码算法
1.用冒泡排序实现信息的从小到大排序。
voidpaixu(Infor*a)
{
inti=0,j=0,flag=0,t;
pTypepx[8]={{0,0}};
charstr[8][10]={"
记录月份"
"
食品消费"
房租费用"
子女费用"
水电费用"
医疗费用"
储蓄费用"
本月收入"
};
for(;
i<
8;
i++)
px[i].no=i;
px[0].data=a->
month;
px[1].data=a->
food;
px[2].data=a->
house;
px[3].data=a->
edu;
px[4].data=a->
elc;
px[5].data=a->
health;
px[6].data=a->
store;
px[7].data=a->
income;
for(i=1;
i++)//冒泡排序
{
flag=0;
for(j=0;
j<
8-i;
j++)
if(px[j].data>
px[j+1].data)
t=px[j].data;
px[j].data=px[j+1].data;
px[j+1].data=t;
t=px[j].no;
px[j].no=px[j+1].no;
px[j+1].no=t;
flag=1;
}
//输出结果
3.函数的调用关系图
图3.0
4.调试分析
a、调试中遇到的问题及对问题的解决方法
(1)录入、查询、修改、删除数据。
建立一个文件,包括某人5个月的开支情况,对文件中的信息扩充,包括修改,删除等。
所以先确定文件保存路径,接受键盘输入,像文件内写入内容,将dat格式文件转换为txt文件,查询用声明,自定义数据类型,然后返回查询结果及查询状态,继而对查询结果排序。
删除数据时,先调用打开转换的文本文件。
修改数据时,要重写数据,删除源文件,重命名中间文件,显示新的数据。
(2)起泡排序
起泡排序是每趟把当先序列中最小的元素放在开始位置,是交换排序中最简单的排序方法,其基本思想是:
两两比较相邻记录的关键码,如果反序则交换,值到没有反序的记录为止,将整个待排序的记录序列分成为有序区和无序区,初始状态有序区为空,无序区包括所有待排序的记录。
对无序去从前向后依次将相邻记录的关键码进行比较,若反序则交换,从而使得关键码晓得记录向前移,关键码大的记录向后移(像水中的气泡,体积大的先浮上来)。
重复执行,之前无序区中没有反序的记录。
确定每趟范围。
b、算法的时间复杂度和空间复杂度
因为时间复杂度是程序语句调用频度。
故为O(
).
5.测试结果
5.1创建工程并建立文件
(1)启动CFREE
(2)新建工程名为“zj”的Win32控制台应用程序。
(3)建立头文件“Myinfor.h”,在其中定义图类myinfor。
(4)建立源文件“myinfor。
.cpp”,在其中定义图类myinfor。
的构造函数myinfor。
、开支情况输出输出函数PutOutVexInfo。
(5)建立源文件“myinforMain.cpp”,在其中输入开支情况及项目信息,通过主函数调用其它各函数,实现个人帐薄管理系统的设计
5.2个人帐薄管理系统的具体实现
(1)个人帐薄管理主界面如图5.1所示
图5.1
(2)如果输入1,进行录入数据,并且录入某人从1-5月的开支情况如图5.2所示
图5.2
(3)1月份开支情况信息录入如图5.3所示
图5.3
(4)2月份开支情况信息录入如图5.4所示
图5.4
(5)3月份开支情况信息录入如图5.5所示
图5.5
(6)4月份开支情况信息录入如图5.6所示
图5.6
(7)5月份开支情况信息录入如图5.7所示
图5.7
(8)查看数据,输入2.如图5.8所示
图5.8
(9)信息修改如图5.9所示
图5.9
(10)信息查询如图5.10所示
图5.10
(11)5月份开支情况费用排序如图5.11所示
图5.11
(12)开支情况记录删除如图5.12所示
图5.12
(13)个人帐簿管理系统退出如图5.13所示
图5.13
6.源程序(带注释)
#include<
stdio.h>
stdlib.h>
memory.h>
windows.h>
//文件保存路径
#defineFilePath1"
Myinfor.dat"
#defineFilePath2"
Myinfor.txt"
//查询用声明
#defineStatusint
#defineOK1
#defineError0
#defineNotFound2
voidmenu(void);
//菜单
voidinput(Infor*newI);
//接收键盘输入
voidwriteinfor(Infor*newI);
//向文件内写入内容
voidchangeFormat(void);
//将dat格式文件转换为txt文件
Statussearch(Infor*a);
//查询函数[返回查询的结果及查询的状态]
voidpaixu(Infor*a);
//对查询据结果排序
voidmodify(Infor*a,intmon);
//修改数据
voiddelRecord(intmon);
//删除数据
voidmain()
while
(1)
menu();
}
voidmenu(void)
intitem;
intmon;
Infor*a;
a=(Infor*)malloc(sizeof(Infor));
do{
printf("
\n…………个人帐簿管理系统…………\n\n"
);
\t\t1.录入数据。
\n"
\t\t2.查看数据。
\t\t3.修改数据。
\t\t4.查询数据。
\t\t5.排序数据。
\t\t6.删除数据。
\t\t0.退出系统。
\n\n"
请输入要进行的操作:
"
);
scanf("
%d"
&
item);
}while(item>
6||item<
-1);
switch(item)
{//退出程序
case0:
getchar();
//保存界面
exit(0);
break;
//录入数据
case1:
input(a);
writeinfor(a);
//查看数据
case2:
changeFormat();
//修改数据
case3:
item=search(a);
mon=a->
if(item!
=OK)printf("
\n没有符合条件的记录!
else
\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n"
-----------------------------------------------------------------------\n"
%7d%8d%8d%8d%8d%8d%8d%8d\n"
a->
month,a->
food,a->
house,a->
edu,a->
elc,a->
health,a->
store,a->
income);
modify(a,mon);
//查询数据
case4:
else{
}
//排序数据
case5:
paixu(a);
//删除数据
case6:
delRecord(mon);
free(a);
//释放内存空间
voidinput(Infor*newI)
\n请依次输入数据[说明:
中间以空格符隔开]:
\n(本月月份食品消费房租费用子女费用水电费用医疗费用储蓄费用收入费用)\n"
%d%d%d%d%d%d%d%d"
newI->
month,&
food,&
house,&
edu,&
elc,&
health,&
store,&
fflush(stdin);
voidwriteinfor(Infor*newI)
FILE*fp;
fp=fopen(FilePath1,"
ab+"
if(fp==NULL)
无法创建文件:
%s"
FilePath1);
fwrite(newI,sizeof(Infor),1,fp);
//这里可以做特别处理可防止存在同一月份有条以上的记录问题。
这里就不写了。
fclose(fp);
数据录入成功!
voidchangeFormat(void)//暂时只能操作一行文件有待改进
FILE*fp1,*fp2;
fp1=fopen(FilePath1,"
rb+"
if(fp1==NULL)
无法找到文件:
%s\n"
return;
//返回主函数
fp2=fopen(FilePath2,"
wt+"
if(fp2==NULL)
FilePath2);
fputs("
\n……………………………………个人帐簿管理系统……………………………………\n\n"
fp2);
记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n"
rewind(fp1);
fread(a,sizeof(Infor),1,fp1);
while(!
feof(fp1))//从原文件[.dat]中读数据写入显示文件[.txt]中
fprintf(fp2,"
关闭本程序继续原程序!
fclose(fp1);
fclose(fp2);
system(FilePath2);
//调用打开转换的文本文件
remove(FilePath2);
//删除文本文件文件
Statussearch(Infor*a)
FILE*fp1;
intisfound=0;
请正确输入要查询的月份:
"
mon);
//清除缓冲区
returnError;
feof(fp1))//查询操作
if(a->
month==mon)
isfound=1;
isfound=0;
if(isfound)
returnOK;
returnNotFound;
//输出结果
if(flag==0)break;
for(i=0;
%s"
str[px[i].no]);
\n-----------------------------------------------------------------------\n"
%8d"
px[i].data);
voidmodify(Infor*a,intmon)//修改数据
Infor*b;
b=(Infor*)malloc(sizeof(Infor));
rt"
fp2=fopen("
temp.dat"
rewind(fp1);
fread(b,sizeof(Infor),1,fp1);
while(!
feof(fp1))//重写数据
if(b->
fwrite(a,sizeof(Infor),1,fp2);
fwrite(b,sizeof(Infor),1,fp2);
remove(FilePath1);
//删除源文件
rename("
//重命名中间文件
修改数据成功!
//显示数据
voiddelRecord(intmon)//删除数据
feof(fp1))//重写数据
month!
=mon)
删除数据成功!
总结
本次设计给我们带来了很深的感触,C语言的精深以及程序的可爱都深深地吸引了我们,这次设计使我们自身的编程,读程能力得到了提升,也使我们更加深刻的认识到不断学习,努力探索的重要性,本次设计单凭自己的力量真的有些困难,幸亏有同学的帮助以及各种参考资料以供查询,以及自身不断努力和奋进,最终也得到一个令人还算满意的结果,总之,我在这次设计中体会到了自己的不足之处,我会在以后的学习和生活中将自身的水平完善,最终使自己拥有傲人的能力!
参考文献
1严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.
2严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.
3《DATASTRUCTUREWITHC++》.WilliamFord,WilliamTopp.清华大学出版社(影印版).
4谭浩强.《c语言程序设计》.清华大学出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 账簿 管理 系统 说明书