




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录第一章、设计题目1第二章、问题分析22.1问题描述22.2需求分析3第三章、总体设计31、功能分析42、数据抽象43、结构关系5第四章、详细设计7一、头文件定义7二、基类7三、派生与继承类7四、流程图8第五章、功能测试12一、输入、计算、显示测试:12二、查询、删除的操作18小结12参考文献21致谢21附录:源代码清单22第一章、 设计题目Design a program, which could be used as a tool in a logic circuit design.Assume that the circuit could have up to the three layers of gates as follows:1) First layer:up to 4 gates2) Second layer:up to 2 gates3) Third layer:1gateThe program should prompt the user to choose the types of the gates from the following types:AND,NAND,OR,NOR,XOR,XNOR,and NOT as well as to enter input values 1s and 0s for the first layer of gates.There should be two inputs per gate with the exception of the NOT gate.The program will display the value of the output generated by the circuit at the end.逻辑电路程序设计一个程序,可作为一种工具在一个逻辑电路设计。假设电路可以有多达三个层次的盖茨如下:1)第一层:4个门2)第二层:两个门3)三层:1门程序应该提示用户选择不同类型的从以下类型:AND,NAND,OR,NOR,XOR,XNOR,并不如进入输入值的1和0第一层的门。应该有两个输入每门除了没有门。这个程序将显示的价值产生的输出电路在最后面。第二章、问题分析2.1问题描述C+这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C+是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。根据Effective C+第三版第一条款的描述,现在C+由以下四个“子语言”组成: 1、C子语言。C+支持C语言的几乎全部功能,主要是c89的部分,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C+标准文献)。 2、面向对象的C+语言。C+语言原本不具备面向对象的设计功能,然而随着面向对象编程的概念的提出以及如Java等语言的发展成熟,C+语言也开发出了支持面向对象功能的版本. 3、泛型编程语言。C+强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。 4、STL(C+标准模板库,Standard Template Library)。随着STL的不断发展,它已经逐渐成为C+程序设计中不可或缺的部分,其效率可能比一般的native代码低些,但是其安全性与规范性使它大受欢迎。 此外,包含在TR1等中的C+0x将实现的新功能在开发和测试中。 C+语言发展大概可以分为三个阶段: 第一阶段从80年代到1995年。这一阶段C+语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额; 第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C+中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击; 第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C+出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C+已经成为当今主流程序设计语言中最复杂的一员。 C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 C+设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。 C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 C+设计成尽可能与C兼容,籍此提供一个从C到C+的平滑过渡。 C+避免平台限定或没有普遍用途的特性。 C+不使用会带来额外开销的特性。 C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,Bjarne Stroustrup的C+语言的设计和演化(1994)里做了详尽的陈述本课程设计要求的功能如下:1、建立门: 建立几个门用来几次运算。2、第一层:来决定用什么运算。3、第二层:继续选择运算方式运算。4、第三层:运算之后结果算出。2.2 需求分析根据题目要求,做出如下的具体分析:一继承是面向对象语言的重要特征之一,它是指从一个或多个基类中继承数据和操作,形成新的派生类的一种机制。该机制自动地为一个类提供来自另一个类的操作和数据,使程序员只需在新类中定义已有类中所没有的成分。 “继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为B的子类,而把B称为A的父类。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能.继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的父亲,而这些子实体则是汽车的孩子。二类是构成面向对象系统的最基本的单位,是面向对象系统中最基本的概念之一。类是创建对象的模板,以操作、表示和算法的形式完整地定义了一组对象的行为,被认为是一种用户自定义的数据类型,它完整地描述了规范说明和实现。类可以作为面向对象系统的具有特定功能一个模块,可以作为模块划分的一种手段和依据。类还是代码共享的手段,在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象:矩形、雇用记录、视频剪辑等。可以利用这些对象的相同特征为它们建立一个蓝图。对象的软件蓝图称为类。类是定义同一类所有对象的变量和方法的蓝图或原型。例如,可以建立一个定义包含当前档位等实例变量的自行车类。这个类也定义和提供了实例方法(变档、刹车)的实现。实例变量的值由类的每个实例提供。因此,当你创建自行车类以后,必须在使用之前对它进行实例化。当创建类的实例时,就建立了这种类型的一个对象,然后系统为类定义的实例变量分配内存。然后可以调用对象的实例方法实现一些功能。相同类的实例共享相同的实例方法。 除了实例变量和方法,类也可以定义类变量和类方法。可以从类的实例中或者直接从类中访问类变量和方法。类方法只能操作类变量 - 不必访问实例变量或实例方法。系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝 - 这个类的所有实例共享它的类变量。第三章、总体设计1、功能分析AND类,继承于Gates类,用于计算和返回两个数值相与后的结果,例如:1&0=0、1&1=1;NAND类,继承于Gates类,用于计算和返回两个数值相与非后的结果,例如:!(1&0)=1、!(1&1)=0;OR类,继承于Gates类,用于计算和返回两个数值相或后的结果,例如:1|0=1、0&0=0;NOR类,继承于Gates类,用于计算和返回两个数值相或非后的结果;XOR类,继承于Gates类,用于计算和返回两个数值相异或后的结果,例如:10=1、11=0、00=0;XNOR类,继承于Gates类,用于计算和返回两个数值相同或后的结果,例如:!(10)=0、!(11)=1、!(00)=1;2、数据抽象class Gates定义一个基类为Gatesprotected:int input1,input2,output;定义两个输入和一个输出public:Gates()不带参的函数Gates(int x1)input1=x1;非门时用到的只有单目的参数初始Gates(int x1,int x2)input1=x1;input2=x2;其他6门都有两个参数初始virtual int Logical()=0;设定一个纯虚函数; class AND:public Gates定义与门类,继承于基类Gatespublic:AND(int x1,int x2):Gates(x1,x2);获取两个输入并调给Gates类int Logical()output=input1&input2;return output;计算两个输入;剩余5门同理int calculate(Gates &obj)通过次函数块来实现调用Logical函数计算结果return obj.Logical();void gate()用于提示用户选择门couttt1.ANDendl;couttt2.NANDendl;couttt3.ORendl;couttt4.NORendl;couttt5.EXORendl;couttt6.EXNORendl;接下来就是void main()主函数块,具体执行:用do while语句提示选择2门或4门用do while语句提示输入第一层门的8个输入int choice4,x34;定义两个数组,choice4输入两层里门的选择,x34将x1和x2计算结果赋给它for循环提示选择第一层的门的类型int x42;定义第一层门的第2第4门的输出结果的赋给if(num1=4)如果第一层的门有四个num2=2;第二层的门就有两个x40=x31;第一层的第二个门的输出结果赋给x40x41=x33;第一层的第四个门的输出结果赋给x41x31=x32;第一层的第三个门的输出结果赋给x31else if(num1=2)否则如果第一层的门只有2个num2=1;第二层就只有1个门x40=x31;第一层的第二个门的输出结果赋给x40int x52;定义第二层门的第1第2门的输出结果的赋给for循环提示选择第二层的门的类型gate();再次调用提示信息选择门的类型使用if else语句判断第二层门的数量,是2个还是不是;是的情况下do while继续选择门的类型,不是直接视为非门计算。最后给出输出结果和提示继续与否的提示信息3、结构关系每层分别调用提示选择门的类型的提示信息void gate()Void main()主调函数do while循环提示输入第一层的几个门的个数每层分别调用提示选择门的类型的提示信息void gate()计算第一、二层门的输入将结果赋值给数组switch(choicei)每层的几个门类型的选择if else判断第二层门是否是2个,是则做第三层的门的类型选择的提示信息的调用与选择,计算并将结果赋值给output,不是则将第二层的门的结果再做非计算显示最终的输出结果第四章、详细设计一、头文件定义#include#include二、基类protected:int input1,input2,output;public:Gates()Gates(int x1)input1=x1;Gates(int x1,int x2)input1=x1;input2=x2;virtual int Logical()=0;三、派生与继承类class AND:public Gatespublic:AND(int x1,int x2):Gates(x1,x2);int Logical()output=input1&input2;return output;class NAND:public Gatespublic:NAND(int x1,int x2):Gates(x1,x2);int Logical()output=!(input1&input2);return output;class OR:public Gatespublic:OR(int x1,int x2):Gates(x1,x2);int Logical()output=(input1|input2);return output;class NOR:public Gatespublic:NOR(int x1,int x2):Gates(x1,x2);int Logical()output=!(input1|input2);return output;class XOR:public Gatespublic:XOR(int x1,int x2):Gates(x1,x2)int Logical()output=(input1input2);return output;class XNOR:public Gatespublic:XNOR(int x1,int x2):Gates(x1,x2)int Logical()output=!(input1input2);return output;class NOT:public Gatespublic:NOT(int x1):Gates(x1)int Logical()output=!input1;return output;四、流程图STARTcoutnum1;int x14,x24; Nwhile(num1!=2)&(num1!=4); Yi=0;ix1i;coutx2i;coutplease input the first layers 2nd data(0/1):;int choice4,x34; Ywhile(x2i!=0&x2i!=1);i=0;inum1? Ni+; Ywhile(choicei!=1 to 6);call gate(); YcoutChoose the type of the first layers (i+1)choicei; Ni+;int x42;switch(choicei)if(num1=4)num2=2; x40=x31; x41=x33; x31=x32;i=0;if(num1=2)num2=1; x40=x31;int x52;coutn;call gate();inum2? YcoutChoose the type of the second layers (i+1)choicei;Pre Pagei+;while(choicei!=1 to 6); N Yint choice3;call gate();coutChoose the type of the third layers (i+1)choice3; Ywhile(choice3!=1 to 6); Nswitch(choice3)coutttJust do the NOT gateendl;NOT not(x50);output=calculate(not);coutThe logic circuits output is:outputendl;coutDo you want do again?endl;coutIf you input y or Y means do againendl;coutIf you input n or N means exit exeendl;Next PagePre Pagewhile(answer=getch()=y|(answer=getch()=Y); YEND第五章、功能测试一、二门运算:1、运行程序,按与门输入方式运行 2、运行程序,按与非门和非门输入方式运行 3、运行程序,按或门输入方式运行4、运行程序,按或非门输入方式运行5、运行程序,按异或门输入方式运行 6、运行程序,按同或门输入方式运行 二、四门运算:运行程序,四门运算第一层分别运算与门,与非门,或门,或非门。第二层运算异或门,同或门。第三层运算与门。小结本次C+课程设计,收获还是很多的,从刚刚拿到课程设计题目后,我就先分析这个程序的一些基本的功能,从这些基本功能出发来定下一个程序的大致框架结构,这里面主要包括程序中所设计的类,类与类之间的继承关系以及一些主要的函数的设计思想。这次的课程设计,是自己独立完成了一个相对比较大的程序,报告我们分工撰写的。通过一番实践,很好的总结、强化了之前学习过的知识要点,并且也发现了自己还没好好掌握的知识点,对于没掌握的,我查阅了参考书籍及时补上。感觉代码写到也是后来,状态越好,我感觉是由于自己对于一些基本的知识的比较好的掌握了。有些问题虽然没遇到过,但是通过查阅资料,只要了解了它们的用法,自己就可以很快的模仿下来,不是照抄。这一点我觉得在今后的程序设计中也是蛮重要的,因为我发现要写出好程序,首先应该去学习人家的程序,看懂他们的程序并且转化为自己的。其次才有可能去创新。对于程序的编写,用的时间还是蛮多的,这期间有的是写代码、有的是查阅资料、有的是和同学一起探讨问题。在和同学讨论问题的过程中,我发现了合作带来的效率,彼此自己要善于沟通,让对方了解自己编程的方法和大致的思想,然后大家一起讨论,这样问题会解决的比较快。程序.最主要的是实践,我所学过的语言来说,C+应该是其中最难的。这不仅在复杂的语法上, 而且还有就是怎么样用这种语言来表达“面向对象”也就是面向对象的基本原理。当然可能关于面向对象、设计模式、重构、敏捷开发,等比较少。C+中,语言仅是一种表达方式而已,学了语法,就要经常锻炼,写不好没关系。 哪怕再小的程序,你写写改改慢慢地,就会提高的。还有,不要死攻一门语言,多看看其他的,触类旁通。不过要记住的就是:不要放了基础,多实践。学程序时养成好习惯,这包括程序要写得清晰、明了,就像写作一样。最后,最终完成的程序,也要知道怎么去使用,那才是最重要的。参考文献面向对象程序设计思想和方法C/C+语言参考手册主要参考文献:1 谭浩强C语言程序设计(第二版)清华大学出版社,2003年2吴文虎程序设计基础 清华大学出版社,2003年3钱启平C语言程序设计基础辅导教程 铁道出版社,2000年4钱能C+程序设计教程 清华大学出版社,1999年5刘斌,王忠面向对象程序设计Visual C + 清华大学出版社,2003年致谢:这次c+的课程设计,得到了陈群贤老师的帮助,在这里表示感谢!附录:源代码清单#include#includeclass Gatesprotected:int input1,input2,output;public:Gates()Gates(int x1)input1=x1;Gates(int x1,int x2)input1=x1;input2=x2;virtual int Logical()=0;/int Logical;class AND:public Gatespublic:AND(int x1,int x2):Gates(x1,x2);int Logical()output=input1&input2;return output;class NAND:public Gatespublic:NAND(int x1,int x2):Gates(x1,x2);int Logical()output=!(input1&input2);return output;class OR:public Gatespublic:OR(int x1,int x2):Gates(x1,x2);int Logical()output=(input1|input2);return output;class NOR:public Gatespublic:NOR(int x1,int x2):Gates(x1,x2);int Logical()output=!(input1|input2);return output;class XOR:public Gatespublic:XOR(int x1,int x2):Gates(x1,x2)int Logical()output=(input1input2);return output;class XNOR:public Gatespublic:XNOR(int x1,int x2):Gates(x1,x2)int Logical()output=!(input1input2);return output;class NOT:public Gatespublic:NOT(int x1):Gates(x1)int Logical()output=!input1;return output;int calculate(Gates &obj)return obj.Logical();void gate()couttt1.ANDendl;couttt2.NANDendl;couttt3.ORendl;couttt4.NORendl;couttt5.EXORendl;couttt6.EXNORendl;void main()int i,num1,num2,output;char answer;do/The first screen:/coutIf not 2 or 4,you will input the number again.endl;docoutnum1;while(num1!=2)&(num1!=4);/The input and output has two at leastint x14,x24;/The second screen:for(i=0;inum1;i+)/coutIf not 0 or 1,you will input the data again.endl;do/coutplease input the first layers (i+1) data(0/1):;coutx1i;while(x1i!=0&x1i!=1);do/coutplease input the first layers (i+1) data(0/1):;coutx2i;while(x2i!=0&x2i!=1);int choice4,x34;for(i=0;inum1;i+)/The third screen:gate();/coutIf not 1 to 6,you will input the choose again.endl;docoutChoose the type of the first layers (i+1)choicei;while(choicei!=1&choicei!=2&choicei!=3&choicei!=4&choicei!=5&choicei!=6);switch(choicei)case 1:AND AND(x1i,x2i);x3i=calculate(AND);break;case 2:NAND NAND(x1i,x2i);x3i=calculate(NAND);break;case 3:OR OR(x1i,x2i);x3i=calculate(OR);break;case 4:NOR NOR(x1i,x2i);x3i=calculate(NOR);break;case 5:XOR XOR(x1i,x2i);x3i=calculate(XOR);break;case 6:XNOR XNOR(x1i,x2i);x3i=calculate(XNOR);break;int x42;if(num1=4)num2=2;x40=x31;x41=x33;x31=x32;else if(num1=2)num2=1;x40=x31;int x52;for(i=0;inum2;i+)gate();coutn;/coutIf not 1 to 6,you will input the choose again.endl;docoutChoose the type of the second layers (i+1)choicei;while(choicei!=1&choicei!=2&choicei
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 争雁文言文课件
- 留园单位申请报告(3篇)
- 领酒申请报告样本(3篇)
- 房屋居间销售合同(标准版)
- 争当少先队员课件
- Dioctanoyl-PI-3-5-P2-sodium-生命科学试剂-MCE
- 消防员进入受限空间救援应急预案
- 临电安全使用培训课件
- 黑龙江省佳木斯市富锦市第九小学等校2024-2025学年五年级下学期4月期中数学试题含答案
- 2025年宪法知识竞赛活动考试题库100题(含答案)
- 《LED灯具培训资料》课件
- 山东济南高新区2024-2025学年七年级英语第一学期期中考试试题(含答案)
- 《宁夏闽宁镇:昔日干沙滩-今日金沙滩》课件-高教版中职语文职业模块
- 拓染课件教学课件
- 人教版小学一年级上册道德与法治教案全册
- 吉利EV450车型电动汽车控制系统及检修
- 销售沟通技巧课件企业培训
- 办公楼物业服务 投标方案(技术方案)
- AQ 1095-2014 煤矿建设项目安全预评价实施细则(正式版)
- CJJ105-2005 城镇供热管网结构设计规范
- 眼的解剖结构与生理功能课件
评论
0/150
提交评论