银行财务实时处理系统.docx
《银行财务实时处理系统.docx》由会员分享,可在线阅读,更多相关《银行财务实时处理系统.docx(21页珍藏版)》请在冰点文库上搜索。
银行财务实时处理系统
第一章课程设计的目的
数据结构是计算机专业的必修、主干课程之一,它旨在使我们学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的算法(操作),把现实世界中的问题转化为计算机内部的表示和处理,这是一个良好的程序设计技能训练的过程,本次课程设计是为更好帮助和指导我们更好地学习数据结构这门课程。
这次我们这组做的课程设计是简单的银行财务实时处理系统,主要运用二叉树知识给银行的账户的记录号及分户号数据整理、排序和查询,限于我们的能力,本系统功能比较单一而简单,实践证明,理解课程内容与较好地解决实际问题之间存在明显差距,而算法设计完成的质量与基本的程序设计素质的培养是密切相关的,通过这次设计,我们知道了自己的许多不足,我们会继续努力的,今后数据结构的学习还要持续很长时间。
从寻找题目到完成整个编程,从理论到实践可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在课程设计中也难免会遇到过各种各样的问题,同时在设计的过程中也发现了自己的不足之处,对所学过的知识理解得不够深刻,掌握得不够牢固,我想这也是开设课程设计的目的——要我们在实践中思考发现问题解决问题,收获经验。
在程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输错一个标点或打错一个字母,编译就不能通过,程序也无法正常运行,在调试时要特别小心谨慎。
这考验了我们的耐心,培养严谨治学态度。
总之,课程设计有效培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力,是对我们实际工作能力的具体训练和考察过程.
第二章课程设计题目问题描述和要求
2.1题目的问题描述
题目名称:
二叉树的应用——银行财务实时处理系统
题目内容:
银行账户的账号由科目表和分户号组成。
此系统要求把属于一个科目的分户表文件的记录全部找出来,并按记录中的分户号从小到大的顺序排列,以便于按顺序逐户处理信息并查找某一个分户号的记录。
科目表文件每个记录包括科目表及该科目表分户二叉树根结点的指针。
分户表文件每个记录的形式为记录号、分户号、左链和右链。
2.2题目的要求
根据题意,本系统应能够实现以下三个功能:
(1)构造分户二叉排序树;
(2)中序遍历分户二叉排序树;
(3)查找某一分户号记录。
第三章系统分析与设计
3.1系统的总体设计
如图3.1,为银行财务实时处理系统结构,它包括创建根结点、插入作为左孩子、插入作为右孩子、中序遍历二叉排序树和查询结点共五个部分。
图3.1银行财务实时处理系统结构
3.2系统的详细设计
1.如下图3.2,为创建分户表根结点的流程图,该函数比较简单,没有什么复杂的循环语句,轻易地创建了二叉树根结点。
图3.2创建根结点流程图
2.如下图3.3,为分户号插入排序二叉树中作为左孩子的流程图,包含了两个if语句,其中第二个if语句是为保证插入后还是排序二叉树,由于插入作为右孩子的流程图与此流程图大同小异,在此便不再画出了。
图3.3插入作为左孩子流程图
3.如下图3.4,为中序遍历二叉排序流程图,该函数为典型的递归调用函数,第二个和第三个if语句的后的inorder()为调用函数本身。
图3.4中序遍历二叉排序树流程图
4.如下图3.5,为根据分户号查找结点的流程图,用到了while里嵌套if,图中“输出找到的信息”中其实包含了好几个if语句来区别输出不同类信息(因为有可能结点无左右孩子的情况),限于纸张此处没详细画出流程来,但不影响看整个函数。
图3.5查找结点流程图
3.3源程序编制
如下所示,为所有我写的源程序代码,功能函数都详细列于此了,一目了然:
右孩子的插入函数就没有列出来了,基本上和左孩子的插入
bnode*ins_lchild(bnode*p,intrecorder,intnumber)/*插入作为左孩子*/
{
bnode*q;
if(p==NULL)
printf("非法插入!
");
else
{
q=(bnode*)malloc(sizeof(bnode));
q->recorder=recorder;
q->number=number;
q->lchild=NULL;
q->rchild=NULL;
if(p->lchild!
=NULL)
q->rchild=p->lchild;
p->lchild=q;
}
returnq;
}
中序遍历后就成为了从小到大的有序的数了,因为开始存储的是以有序存储的。
intinorder(bnode*p)/*中序遍历二叉排序树*/
{
if(p==NULL)
return0;
if(p->lchild!
=NULL)
inorder(p->lchild);
printf("%d",p->number);
if(p->rchild!
=NULL)
inorder(p->rchild);
return0;
}
主函数重点就是如何是输入的数据构建为一个有序二叉树,主要思想就是大的数作为右孩子,小的作为左孩子。
intmain()
{
bnode*bt,*p,*q;
intrecorder,number,a,c;
server();
printf("步骤1:
请输入记录号,分户号,记住以输入-1-1结束:
\n");
scanf("%d",&recorder);
scanf("%d",&number);
p=creat(recorder,number);
bt=p;
scanf("%d",&recorder);
scanf("%d",&number);
while(number!
=-1&&recorder!
=-1)
{
p=bt;
q=p;
while(number!
=p->number&&q!
=NULL)
{
p=q;
if(numbernumber)
q=p->lchild;
else
q=p->rchild;
}
if(number==p->number)
{
printf("Thedataisexit.");
return0;
}
else
if(numbernumber)
ins_lchild(p,recorder,number);//小的作为左孩子
else
ins_rchild(p,recorder,number);//大的作为右孩子
scanf("%d",&recorder);
scanf("%d",&number);
}
printf("\n分户号二叉排序树建立成功!
\n");
p=bt;
printf("\n步骤2:
中序遍历二叉排序树(分户号)结果:
");
inorder(p);
printf("\n步骤3:
请输入要查找的分户号:
");
scanf("%d",&number);
search(p,number);
printf("\n继续查找请输入0:
");
scanf("%d",&c);
a=c;
while(!
a)
{
printf("\n请输入要查找的分户号:
");
scanf("%d",&number);
search(p,number);
printf("\n继续查找请输入0:
");
scanf("%d",&c);
a=c;
}
printf("\n步骤4:
退出\n");
exit(-1);
return0;
}
第四章系统运行报告
4.1如下图4.1所示,为该系统界面(即server())的运行截图,由图可知是本系统操作过程的说明。
图4.1系统界面运行图
4.2如下图4.2所示,为该银行系统分户号二叉排序树建立的运行截图,由图可见,二叉树成功建立。
图4.2建立分户号二叉排序树运行截图
4.3如下图4.3所示,为中序遍历二叉排序树、查找及退出运行截图,由图可见中序遍历结果得到银行账号分户号的升序,达到本系统要求;查找中,输出有好几种情况,在图中一一清晰可见;退出较简单,就不做解释了。
图4.3中序遍历、查找及退出运行截图
第五章总结
在本次数据结构设计中,又收获不少。
自己对课本知识上的小的知识点把握不够,在这次课程设计中很多错误都是一些小问题,只要写程序的时候注意点就可以避免,以后写程序时一定会注意。
遇到了困难,首先自己找,实在不能解决的话就请教老师和同学。
其实很多问题都是我们自己可以解决的,只要我们用心去找,同时相信自己能解决问题。
刚开始的时候,对做什么题目很是头痛,在网上搜了很多题目,简单的又觉得太容易,难的又不会做,找了很久后来终于在图书馆找资料书中意于这个银行财务实时处理系统了,这才确定了我们的课程设计题目。
其实这个系统还称不上是系统,因为功能简单,只是二叉树的简单应用,较为单一。
但因为要找难度适宜的有些困难,再简单的也要回灵活运用才是,所以最终还是决定了这个题目。
后来调试程序时,发现越是容易越容易大意,刚开始程序不能运行,一直找不到原因,后面耐心又细心地慢慢查看才发现是小问题作祟,编程细心很重要啊。
本次课程设计中发现,数据结构真的很重要,熟话说编程等于算法加操作,数据结构作为计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,我们定要重视,好好学好它。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故才行。
这次课程设计终于顺利完成了,过程不是那么顺利愉快,也碰到不少困难,但一切解决后,收获不少,感到非常高兴。
人生的道路是曲折的,但正是因为曲折人生才光彩夺目,在人生的路上,总遇到重重困难,但正是因为困难我们才变的更坚强。
参考文献
[1]严蔚敏,吴伟民编著·数据结构(C语言版)·(第4版)·清华大学出版社,2007:
118~155
[2]苏仕华等编著·数据结构课程设计·(第3版)·机械工业出版社,2006:
75~94
[3]谭浩强,张基温编著·C语言程序设计教程·(第3版)·高等教育出版社,2008:
123~187
[4]胡元义,邓亚玲,罗作民,胡明星编著·数据结构实践教程·(第3版)·西安电子科技大学出版社,2008:
121~154
[5]张晓莉,王苗,罗文劼编著·数据结构与算法·(第2版)·机械工业出版社,2008:
85~103
致谢
感谢这次程序设计中给予我们帮助的赵健,钟泽银,王荣等同学,你们为我们三个人提供了无偿的技术支持。
当然更要感谢同组的颜景,杨东两位同学,在最艰苦的时候,你们二位给了我莫大的支持。
谢谢你们!
附录
程序源码:
#include
#include
typedefstructbtreenode
{
intrecorder;
intnumber;
structbtreenode*lchild;
structbtreenode*rchild;
}bnode;
bnode*creat(intrecorder,intnumber)
{
bnode*p;
p=(bnode*)malloc(sizeof(bnode));
p->recorder=recorder;
p->number=number;
p->lchild=NULL;
p->rchild=NULL;
return(p);
}
bnode*ins_lchild(bnode*p,intrecorder,intnumber)
{
bnode*q;
if(p==NULL)
printf("非法插入!
");
else
{
q=(bnode*)malloc(sizeof(bnode));
q->recorder=recorder;
q->number=number;
q->lchild=NULL;
q->rchild=NULL;
if(p->lchild!
=NULL)
q->rchild=p->lchild;
p->lchild=q;
}
returnq;
}
bnode*ins_rchild(bnode*p,intrecorder,intnumber)
{
bnode*q;
if(p==NULL)
printf("非法插入!
");
else
{
q=(bnode*)malloc(sizeof(bnode));
q->recorder=recorder;
q->number=number;
q->lchild=NULL;
q->rchild=NULL;
if(p->rchild!
=NULL)
q->lchild=p->rchild;p->rchild=q;
}
returnq;
}
intinorder(bnode*p)
{
if(p==NULL)
return0;
if(p->lchild!
=NULL)
inorder(p->lchild);
printf("%d",p->number);
if(p->rchild!
=NULL)
inorder(p->rchild);
return0;
}
search(bnode*p,intnumber)
{
while(p!
=NULL)
{
if(p->number==number)
{
if(p->rchild!
=NULL&&p->lchild!
=NULL)
{
printf("记录号\t分户号\t左孩子\t右孩子\n");
printf("%d\t%d\t%d\t%d",p->recorder,p->number,
p->lchild->number,p->rchild->number);
}
if(p->rchild==NULL&&p->lchild!
=NULL)
{
printf("记录号\t分户号\t左孩子\n");
printf("%d\t%d\t%d",p->recorder,p->number,
p->lchild->number);
}
if(p->lchild==NULL&&p->rchild!
=NULL)
{
printf("记录号\t分户号\t右孩子\n");
printf("%d\t%d\t%d",p->recorder,p->number,
p->rchild->number);
}
if(p->lchild==NULL&&p->rchild==NULL)
{
printf("记录号\t分户号\n");
printf("%d\t%d",p->recorder,p->number);
}
return0;
}
if(number>p->number)
p=p->rchild;
else
p=p->lchild;
}
return0;
}
intserver()
{
system("cls");
printf("\n\n\n");
printf("\t\t※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\t\t※※\n");
printf("\t\t※银行财务实时处理系统※\n");
printf("\t\t※※\n");
printf("\t\t※操作步骤:
※\n");
printf("\t\t※1.建立分户号二叉排序树※\n");
printf("\t\t※2.中序遍历分户号二叉排序※\n");
printf("\t\t※3.查找分户号※\n");
printf("\t\t※4.退出系统※\n");
printf("\t\t※※\n");
printf("\t\t※※※※※※※※※※※※※※※※※※※※※※※※\n");
return0;
}
intmain()
{
bnode*bt,*p,*q;
intrecorder,number,a,c;
server();
printf("步骤1:
请输入记录号,分户号,记住以输入-1-1结束:
\n");
scanf("%d",&recorder);
scanf("%d",&number);
p=creat(recorder,number);
bt=p;
scanf("%d",&recorder);
scanf("%d",&number);
while(number!
=-1&&recorder!
=-1)
{
p=bt;
q=p;
while(number!
=p->number&&q!
=NULL)
{
p=q;
if(numbernumber)
q=p->lchild;
else
q=p->rchild;
}
if(number==p->number)
{
printf("Thedataisexit.");
return0;
}
else
if(numbernumber)
ins_lchild(p,recorder,number);
else
ins_rchild(p,recorder,number);
scanf("%d",&recorder);
scanf("%d",&number);
}
printf("\n分户号二叉排序树建立成功!
\n");
p=bt;
printf("\n步骤2:
中序遍历二叉排序树(分户号)结果:
");
inorder(p);
printf("\n步骤3:
请输入要查找的分户号:
");
scanf("%d",&number);
search(p,number);
printf("\n继续查找请输入0:
");
scanf("%d",&c);
a=c;
while(!
a)
{
printf("\n请输入要查找的分户号:
");
scanf("%d",&number);
search(p,number);
printf("\n继续查找请输入0:
");
scanf("%d",&c);
a=c;
}
printf("\n步骤4:
退出\n");
exit(-1);
return0;
}