数据结构课程设计报告-集合的并、交和差运算.doc_第1页
数据结构课程设计报告-集合的并、交和差运算.doc_第2页
数据结构课程设计报告-集合的并、交和差运算.doc_第3页
数据结构课程设计报告-集合的并、交和差运算.doc_第4页
数据结构课程设计报告-集合的并、交和差运算.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

编号 课程设计报告20152016学年 第一学期集合的并、交和差运算The operation of a set of parallel,instresection and difference实 习 类 别课程设计学 生 姓 名专 业软件工程学 号指 导 教 师学 院计算机科学技术学院二一五年十二月 - 17 -长春理工大学计算机科学技术学院课程设计报告起 止 周1718周数2实习地点南研1213/1208/1201实验室课程设计目的:l 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;l 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;l 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;l 训练学生用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。课程设计要求:1、独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。2、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。3、实践设计以实际应用中的小型题目为主,要求学生独立完成或合作完成。要求学生能根据不同的题目类型选择一种或两种开发模式,完成从系统定义,指定开发计划,需求分析,设计,编码/测试,直至运行/维护的软件生存期的全过程。完成课程设计题目集合的并、交和差运算进度安排及主要内容:(一) 第一天构思,并设计出如何实现各功能;(二) 第二天和第三天编写出程序的大体功能;(三) 第四天调试程序并且实现程序中的细小功能;(四) 第五天开始撰写设计报告;成绩:指导教师(签字)年 月 日一、概述1.1任务编制一个能演示执行集合的并、交和差运算的程序。演示程序以用户和计算机的对话方式执行。1.2解决的主要问题(1)构建三个集合,其中两个集合用于用户输入集合元素,另外一个用于两个集合交、并和差的运算后的存储。(2)在向集合中输入元素时需以字符串的形式(3)设定集合的大小为27,即字符串的长度为27。(4)在输入字符串时,可以输入键盘上的任意字符,但最后保留下来的需只有小写的字母(5)对输入的字符串中的非法字符进行过滤。(6)对输入的字符串中的相同的字符进行筛选,只留下不同的元素,即保证集合中元素的互异性。(7)在输入字符串结束时设置为按回车键结束二、需求分析1.1题目可行性此题目中的要求都能实现,能够运用所学知识解题,完全未超出学生所学内容之外且题目难度系数不是很大,学生有能力去完成;而且这样的题对学生能力的锻炼很有帮助,更是能够检验学生对所学内容的掌握情况。1.2题目功能(1)在控制台上读入字符串。(2)程序能够自动过滤读入字符串中的非法字符。(3)程序能够自动删选相同小写字母,删除相同字母中的一个;保证集合的互异性。(4)程序能够将读入字符串中的小写字母进行排序,以从小到大的顺序输出集合。(5)程序能够实现集合的交运算、并运算和差运算。1.3用例分析编制集合的并、交和差运算的程序需理解集合的并、交和差运算:设A、B分别为实数域的两个集合,A=q,w,e,B=a,b,c,w(1)集合的并运算集合的并运算是找出两个集合所能包含的最大元素个数的集合。即=a,b,c,e,w,q(2)集合的交运算集合的并运算是找出两个集合所能包含的最大元素个数的集合。即=w(3)集合的差运算集合的并运算是找出两个集合所能包含的最大元素个数的集合。即=q,e三、技术方案1.1软硬件环境(1)硬件环境CPU:INTEL 酷睿I5-4210U内存:4GB硬盘:1TB系统:WIN8(2)软件环境编译器:Visual Studio 2012类型:Visual C+项目:Win32控制台应用程序1.2配置方案启动Visual Studio 2012 -点击File - New - Java project-在Project name里填写项目名称-右键选择新建class写上包名与类名 -点击确定。上述完成后即可开始编写程序,程序编写完成后,点击右键选择run as-java application,调试完成单击文件-保存。1.3关键技术依据数据结构的知识以线性表的顺序表(存储数据类型和长度)为存储结构,数据元素类型为字符型,创建两个顺序表La和Lb作为集合运算的主体,构建一个辅助顺序表Lc用来保存集合运算后的结果。1.4部署计划依据集合的并、交和差运算设计合理的函数体,分别实现顺序表的创建、初始化、输出元素、并运算、交运算和差运算。使用上述实例运行调试程序,并通过调用输出函数输出运算结果,查看是否准确无误的实现想要的运算结果。四、总体设计主函数调用各功能函数设计各函数实现各功能确定实现该程序的知识点1.1目标程序实现架构程序运行(控制台的形式)控制台上显示运算结果用户与计算机对话(输入)图-11.2构建模型定义数据结构(顺序表)创建集合元素集合运算输出集合运算内容图-2五、详细设计1.1整体详细模块字符元素顺序表长度数据结构空间大小使用循环语句获取输入元素初始化顺序表调用创建顺序表函数调用初始化顺序表函数目标程序调用并、交和差的功能函数主函数调用输出顺序表函数使用交互操作对不同的顺序表选择是否创建元素创建顺序表顺序表La复制到Lc,筛选Lb中的运算添加到Lc集合并操作对比La与Lb表中的元素,相同则赋值到Lc集合交操作Lc=La-Lb,La与Lb中的元素不同则赋值到Lc集合差操作使用循环语句输出;过滤非法字符;对元素排序;删除相同元素,保证集合互异性输出顺序表图-31.2主要功能模块(1)集合的交集运算,该模块主要实现:找出集合La与集合Lb中相同的元素,借助Status Jiao(Sqlist *La,Sqlist *Lb,Sqlist *Lc)函数来实现。(2)集合的并集运算,该模块主要实现:将集合La与集合Lb中互不相同的元素赋值到集合Lc,借助Status Bing(Sqlist *La,Sqlist *Lb,Sqlist *Lc)函数来实现。(3)集合的差集运算,该模块主要实现:集合La减去集合Lb所得结果赋值给Lc,借助Status Cha(Sqlist *La,Sqlist *Lb,Sqlist *Lc)函数实现。(4)输出集合内容,该模块主要实现:将Lc中的元素进行排序,筛选最后再输出,借助Status printlist(Sqlist *L)函数实现。1.3模块层次调用关系图Listinsert(L,k)Initsqliat(Lc)printList(Lc)Bing(La,Lb,Lc)main( )Jiao(La,Lb,Lc)Cha(La,Lb,Lc)图-41.4算法流程图开始构建集合输入1或22输出集合为空1输入字符串输出集合输入2输出集合差运算结果输出集合交运算结果输出集合并运算结果结束图-5六、软件测试1.1测试流程(1)基本功能测试描述:根据程序输出提示正常输入每个集合的长度,正常输入两个集合中的字符串(合法的字符串),再查看集合运算结果,并且分析结果是否正确以此来证明题目中的大体功能是否实现。(2)程序过滤非法字符功能测试描述:根据程序输出提示正常输入每个集合的长度,在输入集合中字符串时输入一些非法字符和一些合法字符;然后看程序运行的集合结果中是否已经过滤掉了非法字符保留下来了合法字符;最后再看集合运行结果。(3)程序筛选不同字符功能测试描述:根据程序输出提示正常输入每个集合的长度,在输入集合中字符串时输入一些相同且合法的字符,然后看程序运行的集合结果中是否筛选出的都是不同的合法字符;最后再看集合运行结果。(4)程序输入异常时的功能测试描述:根据程序输出提示,在提示输出集合长度时输入超出提示长度的范围;在输入字符串中元素的个数时超出字符串的长度;在求集合运算结果时不输入程序提示的正确内容;以此来查看该程序对异常处理的功能。1.2测试用例(1)基本功能用例测试按照操作提示语:1、按1 对创建的第一个顺序表La赋值,按5 设置La的长度为5 ,并正确输入合法字符串(字符串中元素的个数满足字符串的长度)作为La的元素:qwert2、按1 对创建的第二个顺序表Lb赋值,按4 设置La的长度为4 ,并正确输入合法字符串(字符串中元素的个数满足字符串的长度)作为Lb的元素:asdf。执行如上两步之后终端显示结果如下图:3、按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用并操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用交操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用差操作子函数和输出元素函数给出运算结果。执行完上述操作终端显示如下图:(2)过滤非法字符功能用例测试按照操作提示语:1、按1 对创建的第一个顺序表La赋值,按12设置La的长度为12 ,输入字符串(字符串中元素的个数满足字符串的长度)中包含一部分合法字符和一部分非法字符La的元素:qwe123,;ASD2、按1 对创建的第二个顺序表Lb赋值,按10设置La的长度为10 ,输入字符串(字符串中元素的个数满足字符串的长度)中包含一部分合法字符和一部分非法字符Lb的元素:=-+?1df%3、按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用并操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用交操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用差操作子函数和输出元素函数给出运算结果。执行完上述操作终端显示如下图:(3)筛选不同字符功能用例测试按照操作提示语:1、按1 对创建的第一个顺序表La赋值,按13设置La的长度为13,输入字符串(字符串中元素的个数满足字符串的长度)中包含一部分相同合法字符La的元素:adsdassqtreev2、按1 对创建的第二个顺序表Lb赋值,按10设置La的长度为10 ,输入字符串(字符串中元素的个数满足字符串的长度)中包含一部分相同合法字符Lb的元素:qrqtewtqyu3、按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用并操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用交操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用差操作子函数和输出元素函数给出运算结果。执行完上述操作终端显示如下图:(4)输入异常时的功能用例测试1、在每次程序操作提示后都输入数字2;2、按1 对创建的第二个顺序表L赋值,输入大于27的数字(例如28)设置La的长度为28;按1给顺序表Lc输入元素,字符串长度输入为12;输入元素为qwertyuiopas。主函数调用并操作子函数和输出元素函数给出运算结果。按1给顺序表Lc输入元素,字符串长度输入为10;输入元素为sdfghjklzx。主函数调用交操作子函数和输出元素函数给出运算结果。按1给顺序表Lc输入元素,字符串长度输入为5;输入元素为mnbvc。主函数调用差操作子函数和输出元素函数给出运算结果。执行完上述操作终端显示如下图:1.3测试结论通过上述对程序分别进行的基本功能用例测试、过滤非法字符功能用例测试、筛选不同字符功能用例测试、输入异常时的功能用例测试可知该程序大致实现了题目中所要求的功能,该程序还增加了给集合中的元素进行排序的功能。但此程序还存在着一些不尽如人意的地方,比如:一是它不能实现用户选择性的计算集合的运算功能,每次运行出来的集合运算结果都是设置好的集合并运算、集合交运算、集合差运算。二是不能实现将第二次输入的集合与第一次输入的集合元素作差运算。故此程序还有待改进。七、总结1.1在实现程序功能的过程中遇到的问题(1)在实现了程序输出用户能在控制台输入合法字符串且能正确运算出两个集合的运算结果后却不能实现过滤用户输入非法字符。(2)实现了过滤非法字符后又出现了不能筛选出不同的字符,计算结果里总是含有相同字符。1.2针对相关问题寻找解决办法(1)在输出集合运算结果的功能函数中设定了输出界限,将顺序表中的元素使用for循环一一与与范围a-z作比较,若是在这个范围则输出该字符。(2)在网上查询了如何删除数组中相同元素的相关问题,找到了以先给顺序表中的元素进行排序,然后再将前一个元素与后一个元素进行比较;若是相同就输出相同元素的其中一个。我将这种方法写进程序里,可当测试程序时发现这样会使运算结果中出现非法字符。继而又在网上寻找了另一种方法:也是先排序,然后再采用标记法标记元素。把相同字符中的一个标记为-1;当用循环标记完成后,再用循环语句输出元素,在输出过程中条件限制为元素不等于-1.以此达到了筛选不同元素的目的。1.3心得体会两周的课程设计结束了,通过此次课程设计,使我更加扎实的掌握了有关数据结构设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检验修改环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在不懈的努力下,终于迎刃而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计不仅是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思路,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了数据结构课程设计的基础原理。我认为,在这两周的的课程设计中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在课程设计过程中,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在数据结构课程设计结束之后变的更加成熟,会面对需要面对的事情。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,

温馨提示

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

评论

0/150

提交评论