数据结构课程设计-二叉树生成家谱_第1页
数据结构课程设计-二叉树生成家谱_第2页
数据结构课程设计-二叉树生成家谱_第3页
数据结构课程设计-二叉树生成家谱_第4页
数据结构课程设计-二叉树生成家谱_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

二叉树生成家谱3/24数学与计算机学院课程设计说明书课程名称:数据结构与算法课程设计课程代码:6014389题目:二叉树生成家谱年级/专业/班:2021级/软件工程/2班学生姓名:陈凯雄学号:312021080611223开始时间:2021年12月09日完成时间:2021年12月29日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书(计算书、图纸、分析报告)撰写质量(45)总分(100)指导教师签名:年月日目录(小三黑体,居中)TOC\o"1-2"\h\z\u1需求分析 61.1任务与分析 61.2测试数据 62概要设计 72.1ADT描述 72.2程序模块结构 82.3各功能模块 93详细设计 103.1结构体定义 103.2初始化 113.3插入操作 133.4查询操作 154调试分析 185用户使用说明 186测试结果 18结论 23附录 24参考文献 25

摘要随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会的各个领域。计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声音、图像、表格等各种各样的信息。对于信息的处理也不再是单纯的计算,而是一些如信息存储、信息检索等非数值的计算。那么,现实世界的各种数据信息怎样才能够存储到计算机的内存之中,对存入计算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和算法设计问题。为解决现实世界中某个复杂问题,总是希望设计一个高效适用的程序。这就需要解决怎样合理地组织数据、建立合适的数据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效率。“数据结构”就是在此背景下逐步形成、发展起来的。 在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直至得到正确结果。所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。这属于数值计算的一类问题。而现实生活中,更多的是非数值计算问题,如中的通讯录,人们对它的操作主要是查找、增加、删除或者修改记录。再如,人们经常在互联网上查阅各种新闻,或查阅电子地图,人们可以在某城区地图上查找自己所需的街道或店铺,其操作主要是搜索和查询。下面再来分析几个典型实例,它们的主要特点是:不同实例的数据元素之间存在不同的关系;对数据信息的处理主要有插入、删除、排序、检索等。关键词:网络化;计算机;对策;二叉树

引言课程设计的目的:通过本项课程设计,培养学生独立思考、综合运用所学有关相应知识的能力,使学生巩固《数据结构》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关;为了培养学生综合运用所学知识、独立分析和解决实际问题的能力,培养创意识和创新能力,使学生获得科学研究的基础训练。为后续各门计算机课程的学习和毕业设计打下坚实基础。同时,可以利用这次机会来检验自己的c/c++/数据结构水平,提高自己的写作水平,锻炼自己的动手能力。而此次课程设计的意义在于:增强自己的动手能力,熟悉和掌握二叉树各种遍历的算法,以及递归在遍历二叉树中的应用,增强自己的调试程序和测试程序的能力。1需求分析1.1任务与分析1.建立输入文件以存放最刜家谱中各成员的信息。2.成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。3.能对修改后的家谱存盘以备以后使用。4.能从文件中读出已有的家谱,形成树状关系。5.家谱建立好之后,以图形方式显示出来。6.显示第n代所有人的信息。7.按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。8.按照出生日期查询成员名单。9.输入两人姓名,确定其关系。10.给某人添加孩子。11.删除某人(若其还有后代,则一并删除)。12.修改某人信息。13.用括号法输出家谱成员信息1.2测试数据1徐朝嬴m1938-1-201彭代芳0此人相当的热心02345100002徐廷文m1964-8-32李太群1此人相当有责任心067100003徐素华w1966-4-62李奉光1此人很好0100004徐军华m1969-7-82曲舞1此人很有正义感0100005徐廷国m1972-9-22木玛1此人心的很善良0100006徐光勇m1989-1-273Nomarry2此人很牛逼0100007徐光超m1992-9-53Nomarry2此人亦很牛逼0100002概要设计2.1ADT描述1.ADTPerson{数据对象:D={Pj|Pj={姓名、出生日期、婚否、地址、健在否(如过世,还应有其死亡日期)},j=0,1,2,……n,其中n>=0}数据关系:R={}基本操作:无。}ADTPerson2.ADTFamilytreeFile{数据对象:D={Aj|Aj属于Person,j=1,2,3,……,n其中n>=1}数据关系:D中每个对象用换行符隔开,R={

|Aj属于D,j=1,2,3,……,n其中n>=1,String属于字符串类型,为Aj父亲姓名(若String=-1,Aj无父亲,若String=Aj的姓名,表示家谱文件结束)}基本操作:1.打开家谱类型文件,并建立兄弟、孩子二叉树。2.从内存中读取兄弟、孩子二叉树,并建立家谱类型文件。}ADTFamilytreeFlie3.ADTFamilytree{数据对象:D={Aj|Aj属于Person,j=1,2,3,……,n其中n>=0}数据关系:V={

|Aj-1,Aj属于D,j=2,3,……,n其中n>=2,且Aj-1与Aj为祖先与后代关系(parent)、后代与祖先关系(child)、兄弟之间关系(sibling)}基本操作:1.显示某人信息。2.修改某人信息。3.增加某人孩子。4.删除某人。5.通过某人查找其双亲、孩子、兄弟。}ADTFamilytree2.2程序模块结构2.2.1结构体定义structPeople//定义结构体People{intnum;charname[20];charsex;charborndate[15];intgeneration;charmatename[20];intparent;charinfor[100];LinkListchild;};structNode//定义结构体Node{inta;structNode*next;};structLinkList//定义链表{NodePointLa;};structTree//定义树{PeoplePointTr;intLength;intTREE_INIT_SIZE;};全部功能模块2.3各功能模块全部功能模块输出成员模块保存家谱模块件读取文件读取模块新建家谱模块读取家谱模块退出程序模块修改婚姻信息添加成员模块输出成员模块保存家谱模块件读取文件读取模块新建家谱模块读取家谱模块退出程序模块修改婚姻信息添加成员模块查找功能模块voidPrintTree(TreeTR);voidSave(TreeTR);voidOpen(Tree&TR);voidInitTree(Tree&TR);Exit(1)voidMarryChange(TreeTR,charname[20]);voidAddPeople(Tree&TR);voidPrintTree(TreeTR);voidSave(TreeTR);voidOpen(Tree&TR);voidInitTree(Tree&TR);Exit(1)voidMarryChange(TreeTR,charname[20]);voidAddPeople(Tree&TR);voidPrintPeople(PeoplePointp);voidInitTree(Tree&TR);//在树已定义的情况下,初始化树TRLinkListInitLinkList(void);//在什么都没有的情况下,初始化一个带头结点的链表并返回链表LvoidAddLinkList(LinkListp);//对带头结点的链表pl,添加一个节点为m的节点在表头voidCreatFamilyTree(Tree&TR);//在什么都没有的情况下,创建一个家谱TR。并返回TRvoidPrintPeople(PeoplePointp);//已知某节点的指针p,输出peoplep的相关信息voidPrintLinkList(LinkListp);//已知链表p,输出链表p中的信息intCompareNum(PeoplePointp,intnum);//已知某节点的指针p和一个编号num,比较p的num和num,如果相等返回1,否则返回0intCompareName(PeoplePointp,chara[]);//已知某节点的指针p和一个姓名a,比较p的name,如果两者相等返回1,否则返回0voidTraveTreePrint(TreeTR);//已知树TR,按规定输出节点信息,根据编号、姓名、孩子输出voidAddPeople(Tree&TR);//已知树TR,当有人出生时,添加一个节点voidMarryChange(TreeTR,charname[20]);//已知树TR和一个人的姓名name,因为结婚需要改变节点中的配偶一栏voidOpen(Tree&TR);//打开保存家谱信息的文件voidSave(TreeTR);//保存家谱信息到指定文件voidPrintTree(TreeTR);//输出家谱中所有成员的信息3详细设计3.1结构体定义structPeople//定义结构体People{intnum;charname[20];charsex;charborndate[15];intgeneration;charmatename[20];intparent;charinfor[100];LinkListchild;};structNode//定义结构体Node{inta;structNode*next;};structLinkList//定义链表{NodePointLa;};structTree//定义树{PeoplePointTr;intLength;intTREE_INIT_SIZE;};3.2初始化voidInitTree(Tree&TR)//在树已定义的情况下,初始化树TR{Peoplepeop[INIT_SIZE];TR.Tr=peop;TR.Length=0;TR.TREE_INIT_SIZE=INIT_SIZE;}LinkListInitLinkList(void)//在什么都没有的情况下,初始化一个带头结点的链表并返回链表L{LinkListL;NodePointHead;Head=(NodePoint)malloc(sizeof(Node));Head->a=0;Head->next=NULL;L.La=Head;return(L);}voidCreatFamilyTree(Tree&TR)//在什么都没有的情况下,创建一个家谱TR。并返回TR{LinkListlp; TR.Tr=peop;TR.Length=0;TR.TREE_INIT_SIZE=INIT_SIZE;inti=0,n,j,k,c;cout<<"请输入家谱中一共有多少人\n";cin>>n;TR.Length=n;for(i=0;i<n;i++){(peop[i].num)=i+1;cout<<"请输入该人的姓名:\n";cin>>peop[i].name;cout<<"请输入该人的性别:\n";cin>>peop[i].sex;cout<<"请输入该人的出生日期:\n";cin>>peop[i].borndate;cout<<"请输入该人是第几代人:\n";cin>>peop[i].generation;cout<<"请输入其配偶的姓名,如无则输入Nomarry\n";cin>>peop[i].matename;cout<<"请输入其双亲的编号:\n";cin>>peop[i].parent;cout<<"请输入该人相关的备注信息:\n";cin>>peop[i].infor;LinkListL;NodePointHead;Head=(NodePoint)malloc(sizeof(Node));Head->a=0;Head->next=NULL;L.La=Head;peop[i].child=L;lp=peop[i].child;cout<<"请输入其孩子的个数:\n";cin>>k;for(j=0;j<k;j++){cout<<"请输入孩子的编号:\n";cin>>c;AddLinkList(lp,c);}}}开始3.3插入操作开始输入成员信息输入成员信息判断格式是否正确判断格式是否正确是是AddLinkList(L1,c);AddLinkList(L1,c);否否结束结束voidAddPeople(Tree&TR)//已知树TR,当有人出生时,添加一个节点{intk,c,j,m;LinkListL,L1,L2;NodePointHead;PeoplePointp1,p2,p3;if(TR.Length>=TR.TREE_INIT_SIZE){TR.Tr=(PeoplePoint)realloc(TR.Tr,(TR.TREE_INIT_SIZE+TREEINCREMENT)*LEN);if(!TR.Tr)exit(OVERFLOW);}p1=peop;p2=p1+(TR.Length);p2->num=TR.Length+1;cout<<"请输入该人的姓名:\n";gets(p2->name);cout<<"请输入该人的性别:\n";cin>>p2->sex;cout<<"请输入该人的出生日期:\n";cin>>p2->borndate;cout<<"请输入该人是第几代人:\n";cin>>p2->generation;cout<<"请输入其配偶的姓名,如无则输入Nomarry\n";gets(p2->matename);cout<<"请输入其双亲的编号:\n";cin>>p2->parent;cout<<"请输入该人相关的备注信息:\n";gets(p2->infor);gets(p2->infor);Head=(NodePoint)malloc(sizeof(Node));Head->a=0;Head->next=NULL;L.La=Head;p2->child=L;L1=p2->child;cout<<"请输入其孩子的个数:\n";cin>>k;for(j=0;j<k;j++){cout<<"请输入孩子的编号:\n";cin>>c;AddLinkList(L1,c);}m=p2->parent-1;p3=p1+m;L2=p3->child;AddLinkList(L2,p2->num);TR.Length=TR.Length+1;cout<<"添加成功\n";}3.4查询操作进入进入函数选择功能选择功能A=1A=3A=1A=3AA=2PrintPeople((p+(peop[j].parent-1)))PrintPeople((p+j));PrintPeople((p+j));PrintPeople((p+(peop[j].parent-1)))PrintPeople((p+j));PrintPeople((p+j));输出信息输出信息输出信息输出信息输出信息输出信息结束结束voidTraveTreePrint(TreeTR)//已知树TR,按规定输出节点信息,根据编号、姓名、孩子输出{PeoplePointp;inti,j,k,Flag;charname1[15],name2[15];p=TR.Tr;printf("根据编号查找请输入1,根据姓名查找请输入2,根据孩子查找请输入3:\n");scanf("%d",&i);if(i==1){printf("请输入该节点的编号:\n");scanf("%d",&k);for(j=0;j<TR.Length;j++){Flag=CompareNum((p+j),k);if(Flag)PrintPeople((p+j));}}if(i==2){printf("请输入该人的姓名:\n");gets(name1);gets(name1);for(j=0;j<TR.Length;j++){Flag=CompareName((p+j),name1);if(Flag)PrintPeople((p+j));}}if(i==3){printf("请输入其孩子的姓名:\n");gets(name2);gets(name2);for(j=0;j<TR.Length;j++){if(strcmp(peop[j].name,name2)==0)PrintPeople((p+(peop[j].parent-1)));}}}4调试分析在调试时,遇到的几个问题如下:1)建立树时,由于新申请结点的孩子指针、兄弟指针、及双亲指针均未赋空值。而在以后的函数中对树迚行递归操作时均以这些指针值中的一个或几个是否为空作为递归结束条件。从而导致调用这些函数时出现系统保护异常(使用了不安全的指针)。2)刚开始初除结点时,只考虑到初除其本身结点的情况,而初除其孩子结点的情况未考虑到,故在初除某些结点时使树出现了“断链”现象。故在程序代码中对初除某一结点迚行操作时,首先要刞断此结点是否有孩子及兄弟,然后迚行相应操作。本程序的编译环境为MicrosoftVisualC++6.0,在Windows8下编译通过。5用户使用说明用户在打开软件后即可使用本软件,傻瓜式操作,界面简单易懂,用户在使用本软件过程中若出现隐私泄露或受到任何损失,与作者无关。6测试结果部分测试结果:图1:初始状态图1:初始状态图2:创建家谱图2:创建家谱图3:添加成员图3:添加成员

图4:添加一个孩子图4:添加一个孩子图5:修改成员的婚姻状态图5:修改成员的婚姻状态图6:输出所有家谱中的成员图6:输出所有家谱中的成员图7:从文件读取并输出图7:从文件读取并输出结论通过一个学期以来的数据结构的学习,加深了我对C++程序设计语言的认识,使得我对程序的开发过程有了更深的认识,这一次的数据结构课程设计是对我学习的检验,在这次实验中,我利用了各种开发工具以及建模工具,还在图书馆查过不少资料,最终解决了一个个难题。通过这次的实验,我得出了一个结论,任何一门语言的学习都是空洞的,只有在自己实验验证后才能让自己学到真正的知识。以上便是我对《数据结构课程设计》这门课的总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进!

附录源码文件如下:

参考文献[1]杨宝刚.开展企业管理信息化工作的步骤[J].企业管理.2021.(11).12~15[2]Islamabad.Softwaretoolsforforgerydetection[J].Businessline.2021.(5).29~32[3]《数据结构(C语言版)》——清华大学出版社——严蔚敏、吴伟民编著[4]《C至VisualC++程序设计语言》——科学出版社——蔡常丰、林小苹编著[5]《MicrosoftVisualC++6.0高手速成》——兵器工业出版社——步行者工作室编著[6]《C++程序设计》——清华大学出版社——谭浩强编著

咖啡店创业计划书第一部分:背景在中国,人们越来越爱喝咖啡。随之而来的咖啡文化充满生活的每个时刻。无论在家里、还是在办公室或各种社交场合,人们都在品着咖啡。咖啡逐渐与时尚、现代生活联系在一齐。遍布各地的咖啡屋成为人们交谈、听音乐、休息的好地方,咖啡丰富着我们的生活,也缩短了你我之间的距离,咖啡逐渐发展为一种文化。随着咖啡这一有着悠久历史饮品的广为人知,咖啡正在被越来越多的中国人所理解。第二部分:项目介绍第三部分:创业优势目前大学校园的这片市场还是空白,竞争压力小。而且前期投资也不是很高,此刻国家鼓励大学生毕业后自主创业,有一系列的优惠政策以及贷款支持。再者大学生往往对未来充满期望,他们有着年轻的血液、蓬勃的朝气,以及初生牛犊不怕虎的精神,而这些都是一个创业者就应具备的素质。大学生在学校里学到了很多理论性的东西,有着较高层次的技术优势,现代大学生有创新精神,有对传统观念和传统行业挑战的信心和欲望,而这种创新精神也往往造就了大学生创业的动力源泉,成为成功创业的精神基础。大学生创业的最大好处在于能提高自己的潜力、增长经验,以及学以致用;最大的诱人之处是透过成功创业,能够实现自己的理想,证明自己的价值。第四部分:预算1、咖啡店店面费用咖啡店店面是租赁建筑物。与建筑物业主经过协商,以合同形式达成房屋租赁协议。协议资料包括房屋地址、面积、结构、使用年限、租赁费用、支付费用方法等。租赁的优点是投资少、回收期限短。预算10-15平米店面,启动费用大约在9-12万元。2、装修设计费用咖啡店的满座率、桌面的周转率以及气候、节日等因素对收益影响较大。咖啡馆的消费却相对较高,主要针对的也是学生人群,咖啡店布局、格调及采用何种材料和咖啡店效果图、平面图、施工图的设计费用,大约6000元左右3、装修、装饰费用具体费用包括以下几种。(1)外墙装饰费用。包括招牌、墙面、装饰费用。(2)店内装修费用。包括天花板、油漆、装饰费用,木工、等费用。(3)其他装修材料的费用。玻璃、地板、灯具、人工费用也应计算在内。整体预算按标准装修费用为360元/平米,装修费用共360*15=5400元。4、设备设施购买费用具体设备主要有以下种类。(1)沙发、桌、椅、货架。共计2250元(2)音响系统。共计450(3)吧台所用的烹饪设备、储存设备、洗涤设备、加工保温设备。共计600(4)产品制造使用所需的吧台、咖啡杯、冲茶器、各种小碟等。共计300净水机,采用美的品牌,这种净水器每一天能生产12l纯净水,每一天销售咖啡及其他饮料100至200杯,价格大约在人民币1200元上下。咖啡机,咖啡机选取的是电控半自动咖啡机,咖啡机的报价此刻就应在人民币350元左右,加上另外的附件也不会超过1200元。磨豆机,价格在330―480元之间。冰砂机,价格大约是400元一台,有点要说明的是,最好是买两台,不然夏天也许会不够用。制冰机,从制冰量上来说,一般是要留有富余。款制冰机每一天的制冰量是12kg。价格稍高550元,质量较好,所以能够用很多年,这么算来也是比较合算的。5、首次备货费用包括购买常用物品及低值易耗品,吧台用各种咖啡豆、奶、茶、水果、冰淇淋等的费用。大约1000元6、开业费用开业费用主要包括以下几种。(1)营业执照办理费、登记费、保险费;预计3000元(2)营销广告费用;预计450元7、周转金开业初期,咖啡店要准备必须量的流动资金,主要用于咖啡店开业初期的正常运营。预计2000元共计: 120000+6000+5400+2250+450+600+300+1200+1200+480+400+550+1000+3000+450+2000=145280元第五部分:发展计划1、营业额计划那里的营业额是指咖啡店日常营业收入的多少。在拟定营业额目标时,必须要依据目前市场的状况,再思考到咖啡店的经营方向以及当前的物价情形,予以综合衡量。按照目前流动人口以及人们对咖啡的喜好预计每一天的营业额为400-800,根据淡旺季的不同可能上下浮动2、采购计划依据拟订的商品计划,实际展开采购作业时,为使采购资金得到有效运用以及商品构成达成平衡,务必针对设定的商品资料排定采购计划。透过营业额计划、商品计划与采购计划的确立,我们不难了解,一家咖啡店为了营业目标的达成,同时有效地完成商品构成与灵活地运用采购资金,各项基本的计划是不可或缺的。当一家咖啡店设定了营业计划、商品计划及采购计划之后,即可依照设定的采购金额进行商品的采购。经过进货手续检验、标价之后,即可写在菜单上。之后务必思考的事情,就是如何有效地将这些商品销售出去。3、人员计划为了到达设定的经营目标,经营者务必对人员的任用与工作的分派有一个明确的计划。有效利用人力资源,开展人员培训,都是我们务必思考的。4、经费计划经营经费的分派是管理的重点工作。通常能够将咖啡店经营经费分为人事类费用(薪资、伙食费、奖金等)、设备类费用(修缮费、折旧、租金等)、维持类费用(水电费、消耗品费、事务费、杂费等)和营业类费用(广告宣传费、包装费、营业税等)。还能够依其性质划分成固定费用与变动费用。我们要针对过去的实际业绩设定可能增加的经费幅度。5、财务计划财务计划中的损益计划最能反映全店的经营成果。咖啡店经营者在营运资金的收支上要进行控制,以便做到经营资金合

温馨提示

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

评论

0/150

提交评论