C++面向对象程序设计结课论文

合集下载

面向对象程序设计论文

面向对象程序设计论文

面向对象程序设计论文题目:出版物CPublication类的定义与实现学院(系):年级专业:学号:学生姓名:指导教师:教师职称:一、问题分析根据出版物CPublication类的定义,该类包括出版物名称、价钱、出版日期和可供出借否等数据成员,以及构造函数、析构函数、设置出版物属性的成员函数、打印数据成员的函数、借出和归还的成员函数等。

完成该类的实现,并编写一主函数对其进行测试。

二、代码实现#include<iostream.h>#include<string.h>#include<stdlib.h>class CPublication{private:char *p_title;float price;char data[20];bool on_loan;bool on_loan1;public:CPublication(char *p_t,float p,char *p_d);void set(char *p_t,float p,char * p_d);bool borrowIt();bool returnIt();void print()const;~CPublication();};CPublication::CPublication(char *p_t,float p,char *p_d){p_title=new char[strlen(p_t)+1];if(p_title==NULL)exit(1);strcpy(p_title,p_t);price=p;strcpy(data,p_d);on_loan=CPublication::borrowIt();on_loan1=CPublication::returnIt();}void CPublication::set(char *p_t,float p,char * p_d) {p_title=new char[strlen(p_t)+1];if(p_title==NULL)exit(1);strcpy(p_title,p_t);price=p;strcpy(data,p_d);}bool CPublication::borrowIt(){return true;}bool CPublication::returnIt(){return false;}void CPublication::print()const{int i=0,j=0;cout<<"The book's name is ";cout<<p_title<<endl;cout<<"The book's price is "<<price<<endl;cout<<"The book's date of publication is on ";cout<<data<<endl;if(on_loan){if(on_loan1)cout<<"The book has been borrowed and has been returned"<<endl;elsecout<<"The book has been borrowed and hasn't been returned"<<endl;}elsecout<<"The book hasn't been borrowed yet"<<endl; }CPublication::~CPublication(){cout<<"destructing"<<endl;delete p_title;}void main(){char *name="Science",*time="20101024",b;float bookprice=25;char name1[40],time1[20];float bookprice1;CPublication book(name,bookprice,time);book.print();cout<<"if need to rewrite the information?"<<endl;cin>>b;switch (b){case 'y':{cout<<"Please input new information" <<endl;cout<<"The name is :";cin>>name1;cout<<"The price is :";cin>>bookprice1;cout<<"The date is :";cin>>time1;book.set(name1,bookprice1,time1);book.print();break;}case 'n':{cout<<"No new information"<<endl;break;} default:cout<<"ERROR"<<endl;}}结果截图:。

学科教育论文 《面向对象程序设计》课程实践教学方法的研究与讨论

学科教育论文 《面向对象程序设计》课程实践教学方法的研究与讨论

学科教育论文《面向对象程序设计》课程实践教学方法的研究与讨论0 引言培养应用型人才是现在各大高校人才培养的重点。

而作为计算机专业的学生,培养其具备良好的实践动手能力则会对其今后的就业有着非常重要的意义。

现在各大高校都会将《面向对象程序设计》作为一门计算机专业基础课程开设。

这门课程在讲述编程理论的同时,对学生建立编程思想和实际软件编写及调试等方面的能力也将打下基础。

该课程的教学目的是让学生在掌握理论知识的同时提高个人的实践能力,尤其是利用面向对象的编程语言进行设计开发的能力。

然而很多学生在学完该课程以后只掌握了基本的知识点,没有软件工程的思想,实践动手能力明显不足,远远不能达到应用型人才培养方案的培养目的。

所以,对该课程教学模式的改革已经是势在必行。

必须通过对该课程的相关实验实训及实践教学环节等进行改革,以提高学生独立开发项目及动手能力。

1 问题的分析这门课程在各大高校已经开设多年。

目前大多数教师在教学过程中会花费大量的时间用于讲解课程中的概念、语法等在逻辑上不容易理解的内容。

在实践课上,老师只会花费较少的时间进行简单演示,致使学生仍然只能掌握死板抽象的理论知识。

学生对于这种传统的教学模式常会感觉枯燥无味,没有学习乐趣。

学生没有学习积极性,也就很难达到课程的教学目的。

另外,由于现在的实践教学中,实验的内容针对性不强,实验中验证性的比较多,而综合性的就比较少,就导致了学生遇到实际问题后不知该如何解决,时间久了以后必然会使学生丧失学习的信心。

而且教师在实践教学的过程中,对学生独立开发项目能力的培养重视度就不够,针对性也不够强,效果当然就不会好。

针对以上问题,对该课程的教学模式进行改革已经是迫在眉睫,通过改革实验和实训及相关实践教学环节,提高学生的综合实践能力和动手能力。

2 实践教学体系内容分析以理论和实践相结合的目光来审视《面向对象程序设计》这门课的实验教学体系,它应该由以下五个方面构成:基础型实验、设计型实验、综合型实验、课程设计以及实习实践。

c语言程序设计课程设计论文

c语言程序设计课程设计论文

c语言程序设计课程设计论文一、课程目标知识目标:1. 理解C语言的基本语法和程序结构,掌握变量定义、数据类型、运算符、表达式等基本概念。

2. 学会使用C语言进行顺序结构、分支结构和循环结构的编程,并能运用到实际问题中。

3. 熟悉函数的定义、声明和调用,掌握模块化编程的方法。

4. 掌握数组和字符串的基本操作,理解指针的概念和使用方法。

5. 了解结构体和文件操作的基础知识,为后续课程打下基础。

技能目标:1. 培养学生运用C语言解决实际问题的编程能力,提高逻辑思维能力。

2. 培养学生阅读和分析C语言代码的能力,提高编程技巧。

3. 培养学生调试程序、查找并解决问题的能力。

4. 培养学生团队协作和沟通能力,通过分组讨论和实践,共同完成课程任务。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣和热情,培养探究精神和自主学习能力。

2. 培养学生面对困难时的坚持和毅力,树立克服编程难题的信心。

3. 强调编程规范和良好的编程习惯,培养学生的职业道德和责任感。

4. 培养学生分享知识和经验,乐于助人,形成团结协作的良好氛围。

课程性质:本课程为高年级学生的专业基础课,旨在使学生掌握C语言编程的基本知识和技能,为后续学习其他编程语言和计算机专业课程打下基础。

学生特点:学生已具备一定的计算机基础知识和逻辑思维能力,但对C语言编程尚处于入门阶段,需要系统学习和实践。

教学要求:结合课程目标和学生的实际情况,采用理论教学与实践教学相结合的方法,注重启发式教学,鼓励学生主动探索、实践和交流。

通过本课程的学习,使学生能够达到预定的知识、技能和情感态度价值观目标。

二、教学内容本课程教学内容分为以下五个部分,确保科学性和系统性:1. C语言基础- 变量定义、数据类型、常量与变量- 运算符、表达式和语句- 顺序结构程序设计2. 控制结构- 分支结构(if、switch)- 循环结构(for、while、do-while)3. 函数与模块化编程- 函数的定义、声明和调用- 递归函数- 模块化编程方法4. 数据结构与算法- 数组、字符串- 指针的概念、使用和数组操作- 排序算法(冒泡、选择、插入)5. 复合数据类型与文件操作- 结构体- 共用体、枚举- 文件操作基础(打开、关闭、读写)教学大纲安排如下:- 第1周:C语言概述、数据类型与变量- 第2周:运算符、表达式和语句- 第3周:顺序结构程序设计- 第4周:分支结构程序设计- 第5周:循环结构程序设计- 第6周:函数的定义与调用- 第7周:模块化编程、递归函数- 第8周:数组、字符串- 第9周:指针、排序算法- 第10周:结构体、共用体、枚举- 第11周:文件操作基础- 第12周:课程复习、实践与总结教学内容与教材章节紧密关联,注重理论与实践相结合,引导学生逐步掌握C 语言编程的基本方法和技巧。

c++面向对象程序设计结课总结

c++面向对象程序设计结课总结

c++面向对象程序设计结课总结C++面向对象程序设计是计算机科学与技术专业中非常重要的一门课程,对于培养学生的编程思维、代码能力和实践能力具有非常重要的作用。

在本次C++面向对象程序设计结课总结中,我将会就这门课程的学习体验、所获得的成果以及提高自己的方法进行详细的阐述。

首先,从学习体验的角度来看,本次C++面向对象程序设计的课程教学非常好。

老师的授课方式生动有趣,没有枯燥的理论知识,而是通过大量的实例讲解,使我们深入了解了面向对象程序设计的概念和基础知识。

同时,老师还布置了许多实践任务和课后作业,让我们能够更好地巩固和拓展所学知识,提高了我们的编程水平。

在学习过程中,我获得了许多宝贵的成果。

首先,我掌握了C++面向对象程序设计的核心概念和语法规则,如类与对象、继承与多态等。

其次,我通过多种实例和项目实践,锻炼了自己的编程思维和代码能力,提高了我的编程实践能力。

最后,我还学会了如何使用各种工具和软件来辅助我的编程工作,比如Git、GitHub等。

在今后的学习和工作中,我将继续不断提高自己的编程能力。

首先,我将继续深入学习C++面向对象程序设计的知识,不断拓展自己的编程技能和实践经验。

其次,我将加强对数据结构与算法的学习,这样可以更好地理解程序的本质和运行原理。

最后,我还计划参加一些相关的学术或行业会议,以便于与其他专家学者交流和分享自己的编程心得体会,提高自己的学术水平和职业素养。

总之,C++面向对象程序设计是一门非常重要的课程,它对于培养我们的编程思维和实践能力具有至关重要的作用。

通过这门课程,我不仅掌握了C++面向对象程序设计的核心概念和语法规则,并且锻炼了自己的编程实践能力和团队协作能力,这将对我日后的学习和工作产生积极的影响。

《C#面向对象程序设计》教学改革之论文

《C#面向对象程序设计》教学改革之论文

《C#面向对象程序设计》教学改革之初探摘要:对c#面向对象程序设计课程教学现状进行分析,阐述了教学方法、教学手段和考核方式的改革,从而推动教学质量的全面提高。

关键词:c#程序设计;教学改革;教学方法;教学手段;考核方式中图分类号:g42 文献标识码:a文章编号:1009-0118(2012)07-0106-02c#是从c和c++演变而来的一种新的面向对象的编程语言,是目前主流的编程语言之一,可以实现跨平台操作,功能强大。

c#借鉴了c和c++的很多东西,同时也抛弃了c和c++中的指针和多重继承等复杂难懂的知识点,简单易学。

c#课程是计算机和软件技术专业的一门基础课程,是后续程序开发、数据库等专业课的前导课程。

课程对理论知识及实践环节的要求都较高,该课程的教学目标是使学生掌握使用c#设计应用程序的基本技能,了解面向对象和结构化程序设计方法,能够在.net环境下编写、调试和运行实用、规范、可读性好的c#程序。

笔者根据c#课程的特点,结合教学过程中遇到的实际情况,从教学方式、教学内容、考核方式等方面做了一定的探索,与大家共勉,以求集思广益,共同提高本课程的教学效果。

一、教学现状分析(一)实践教学环节薄弱对于程序设计语言课程而言,上机实验课是教学中一个重要的环节,通过上机实验可以有效增强学生的实际编程能力,增加对所学知识点的理解和掌握。

学习c#程序设计课程的最终目的是培养学生的实际动手能力,重在技能培养,理论教学以“必需、够用”为原则,应尽量避免过深过繁的理论探讨。

但是现在仍然有很多教师一般只布置一些在理论课堂上讲解过的类似习题让学生去验证,没有或很少针对学生实际专业技能的实训。

学生实际动手能力不强,技能培养目标难以实现。

(二)学生知识水平参差不齐该门课程要求学习的对象一般要有c和c++作为基础,由于每个学习对象所学专业不同、课时不同等原因,导致对c和c++的掌握程度不一样。

这样就向教师提出了如何才能做到统筹兼顾的问题。

浅谈面向对象的程序设计c面向对象程序设计

浅谈面向对象的程序设计c面向对象程序设计

浅谈面向对象的程序设计c面向对象程序设计软件开发过程就是使用计算机语言将人们关心的现实世界的问题映射到计算机世界进行求解的过程。

开发的软件具有良好的可扩充性,软件模块具有可重用性,才能够在激烈的竞争中得以不断发展、完善、生存。

实际上,要设计出好的软件,就要运用好的程序设计方法和程序设计语言。

面向对象技术是一种全新设计和构造软件的技术,它尽可能的模拟人类习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识世界解决问题的方法与过程,把数据和信息相结合,通过增加代码的可重用性、可扩充性和程序自动生成功能来提高编程效率,大大减少了软件维护的开销。

现这种技术已被越来越多的软件设计人员所青睐,成为了当今计算机应用开发领域的主流技术。

1面向过程和面向对象的技术对比 1.1面向过程在面向对象程序设计方法出现之前,开发程序时采用面向过程的方法。

面向过程的程序设计注重高质量的数据结构,注重算法的描述,回答的是“做什么、怎么做”的问题。

基本过程是:采用结构化思想,自顶而下,按功能把一个复杂的系统分解成许多内聚性强、耦合较少的功能模块,最后用代码组合模块,从而实现系统的功能。

例如要编写一个求解矩形面积和周长的程序,采用面向过程的设计方法的一般设计步骤为:①将任务分解为求解矩形面积和求解矩形周长两个子任务。

②编写求解矩形面积和矩形周长的函数。

③在主程序中调用求解矩形面积和矩形周长的函数,完成程序功能。

这种设计方法使得数据和运算相分离,程序被描述为:程序=模块+模块+…,模块=算法+数据结构。

1.2面向对象面向对象的基本思想是把程序看作是相互协作的对象集合,它是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。

侧重于描述系统结构,注重需求分析和设计反复,回答的是“用何做、为何做”的问题。

采用面向对象的设计方法求解矩形面积和周长的设计步骤为:1.2.1通过分析确定系统的核心对象为矩形。

1.2.2编写描述矩形对象的类,包括描述矩形长、宽等属性和求解矩形面积和周长的方法。

c语言程序设计论文模板(10篇)

c语言程序设计论文模板(10篇)

c语言程序设计论文模板(10篇)1.1教学设计概述所谓教学设计,就是为了达到一定的教学目的,对教什么(课程、教学内容等)和怎么教(组织、方法、媒体的使用等)进行设计。

教学设计不等同于传统的备课写教案。

教学设计有利于教学工作的科学化,使教学活动纳入科学的轨道。

教学设计的意义就在于追求教学效果的最优化,不仅关心教师如何教,更关心学生如何学,注重将人类对教与学的研究结果和理论综合应用于教学实践。

教学设计主要包括确定教学目标、组织教学内容、分析教学对象、选择教学形式和方法及教学媒体、设计教学过程、教学质量评价设计等基本环节,其中,设计教学过程是课程教学设计的核心。

1.2该课程教学设计的内容2教学设计的实践及效果[2]李迎秋.C语言程序设计项目教程[M].大连:东软电子出版社,2023.1.引言2.教学中充分调动学生学习的积极性学生只有对C语言程序有浓厚的兴趣,才会积极和创造性地学习。

可从以下几个方面探讨:(1)强调学生学习C语言的重要性。

突出教学重点,使学生明确学习任务。

在首次课堂教学中,教师一定要向学生讲解清楚C语言课程的教学目标(为什么学习编程或程序设计)。

对于C语言程序设计课程的教学目标,可有如下三方面的讲解,学习基本的编程知识、培养求解问题的能力和具备一定的创新素质。

知识的传授和学习应融入问题求解中;问题求解能力是创新的基础。

(2)结合《C语言全国计算机等级考试》的试题库进行教学,学生学习起来更有动力。

试题库包括笔试试题库和上机试题库。

试题库按章节分类,题目类型以程序设计为主。

笔试题型有单项选择、程序分析、程序填空、程序改错和程序设计,上机题型有程序改错、程序填空和程序设计。

(3)利用Visual c++6.0工具进行C语言程序教学,培养学生的学习兴趣。

VC是一种基于Windows操作系统的可视化集成开发环境,是广泛使用的一种开发工具。

VC程序的两种模式是WINAPI方式和MFC方式。

应用这两种模式能够有效提高教学质量,激发学生的学习兴趣。

c语言程序设计课程设计总结(通用6篇)

c语言程序设计课程设计总结(通用6篇)

c语言程序设计课程设计总结一、什么是总结总结,汉语词语,读音为zǒng jié,意思是总地归结。

二、c语言程序设计课程设计总结(通用6篇)总结是在一段时间内对学习和工作生活等表现加以总结和概括的一种书面材料,写总结有利于我们学习和工作能力的提高,为此要我们写一份总结。

但是总结有什么要求呢?以下是小编为大家整理的c语言程序设计课程设计总结(通用6篇),仅供参考,大家一起来看看吧。

c语言程序设计课程设计总结1课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管PNP管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在梁强老师的辛勤指导下,终于游逆而解。

同时,在梁强老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!c语言程序设计课程设计总结2经过一个星期的上机实践学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

面向对象程序设计课设论文-模拟自动售货机

面向对象程序设计课设论文-模拟自动售货机

《面向对象程序设计》课程设计题目:模拟自动售货机院系:数学与计算科学专业:信息与计算科学姓名学号: 1指导老师:日期:2015年 1 月8 日摘要随着社会的发展和不断进步,人们的物质文化与精神文化都在明显的提高,各种各样的高科技产品也应运而生并慢慢融入人们的生活,如信用卡支付、手机、地铁等等,当然,还有随处可见的自动售货机。

我基于自己所学,设计了一款饮料自动售货机。

该售货机操作简单,适合广大民众生活。

这个自动售货机是在Windows 环境下用 Microsoft Visual Studio 2008工具,基于MFC框架设计的,可以实现初始化界面,让界面美观简洁。

程序通过CRC 卡分析,建立UML类图,把程序功能具体化,用需求分析与方案论证,从而实现自动售货机的开发过程。

关键字:自动售货机MFC CRC卡UML类图AbstractWith the development of society and progress,people's material culture and spiritual culture are obviously improved,a variety of high-tech products also arises at the historic moment and slowly into people's lives,such as credit card payments, mobile phone,the subway and so on,of course,and the everywhere vending machine.I use my learned knowledge,designed a drinks vending machine.The vending machine operation is simple, so it is suitable for the general public life.This vending machine is in the Windows environment using Microsoft Visual Studio 2008 tools, and based on the MFC framework to design,it can implement initialization interface, and let the interface beautiful and concise.The program through the analysis of CRC card to establish a UML class diagram, let the program function is specific,it also using demand analysis and scheme comparison to realize the development process of the vending machine.Key words:The vending machine MFC CRC card UML class diagrams目录摘要 (2)Abstract (3)目录 (4)引言 (5)一、课程设计内容 (5)1.1、题目要求 (5)1.2、课程设计目的 (6)1.3、CRC分析过程陈述 (6)1.4、UML类图 (7)二、设计分析 (7)2.1、界面初始化 (7)2.1.1、关于对话框设置 (7)2.1.2、关于按钮设置 (8)2.2、出售商品设置 (9)2.3、售货机工作员设置 (15)三、运行结果 (16)3.1、投币操作 (16)3.1.1、金额充足显示 (16)3.1.2、金额不足显示 (16)3.2、继续投币操作 (17)3.3、退币操作 (18)3.4、停止售卖 (18)3.4.1、金额上限停止显示 (19)3.4.2、商品售完显示 (19)四、心得体会 (20)五、参考文献 (21)引言本次课设是用C++语言编写一个模拟自动售货机程序,要求用户从售货机商品列表选择某一商品并投入硬币。

c语言程序设计课程设计总结(菁选6篇

c语言程序设计课程设计总结(菁选6篇

c语言程序设计课程设计总结(菁选6篇c语言课程设计个人总结篇一当前,计算机已经成为人们工作、学习和生活中必不可少的工具,整个社会对计算机的高度依赖促使一个崭新的文化形态的形成――计算机文化。

随着高等教育从精英教育阶段进入大众教育阶段,教育部高等学校计算机科学与技术教学指导委员会在计算机基础课程教学基本要求中提出了1+X的课程设置方案[1],理工类学生在学学计算机基础课程后,接下来就要学习C语言程序设计,C语言程序设计已经成为各高校普遍开设的基础课程。

本文总结了我们在教学和实践中的一些做法和体会。

C语言功能强大,使用灵活方便,应用面广,可移植性好,兼有高级语言的优点和低级语言的特点[2],这也使得初学者较难学习和掌握,在教学中我们发现,学生往往对编程解决实际问题感到困难,不知从何下手,而一些考试题目往往重视考查语法的细节,而对编程能力考查得不多。

对于C语言程序设计的教学,我们从培养学生的兴趣和能力,以及计算机思维能力出发,进行了一系列教学的探索与实践。

一、教学师资团队建设人才培养师资队伍是关键,教学团队的建设是保障教学效果和实施教学的基础和支撑[3]。

根据本课程的特点和大一学生的基础,学院确定了一支老中青相结合的骨干教师组成本课程教学团队,团队由一位教授、一位副教授、四位讲师和三位助教组成,分别承担理论教学和实验教学任务,这支队伍年龄、职称结构合理,团队中的教师在每学期的教学督导和学生评教中,成绩都在良好以上,从根本上保证了课程的教学质量。

坚持教学团队的凝聚力建设,定期研讨,统一思想。

每周教研时间及时交流教学中出现的问题及解决方法,对教学过程进行总结反思,坚持互相听课,集体研究讨论教案、课件制作,对每个实验内容、案例的选用、考核的内容和方式等都经过团队的统一讨论确定。

重视教学团队中教师自身的进修和提高,团队中的多名教师先后参加了国家精品课程师资培训、全国高等学校计算机实验与实践教学研讨会、全国高等院校程序设计精品课程教学专题研讨会等,教师都很珍惜每一次与兄弟院校的教师、专家交流与学习的机会,教师及时把学习体会传达到团队的每一位教师,汲取其他院校的一些好的做法运用到我们的教学实践中,这些做法对促进教师的知识更新、教育理论的学习、教学方法的改进和教学能力的提高起到积极的作用,也保证了课程的教学能不断向前推进。

面向对象程序设计毕业设计论文

面向对象程序设计毕业设计论文

00000摘要当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。

目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行Java的编译与运行很少,不能更好的适应当前用户的要求。

本设计所完成的文本编辑器功能是针对学习Java程序语言,因此我们利用Java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。

本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构,还有链接Java虚拟机实现编译与运行。

使用SUN公司的Java中的GUI作为开发技术,利用其提供的各种类与接口,首先建立系统应用原型。

本文本编辑器的开发采用JDK6.0和 UltraEdit为开发工具,操作系统为Windows98/Windows 2000/Windows XP等。

关键词:面向对象程序设计,GUI,文本编辑器,编译,运行00000南昌航空大学毕业设计(论文)说明书AbstractNow, computer and internet are experience a sharp development, the information automatic function is more and more powerful, and our society is stepping in the information age. So, more Intelligence and more specialized soft are needed to help us improve the efficiency in job.At present the text editor type are many, the function provided are also many too, But can satisfy the user for many kinds of functions and can use Java for the translation and debug are very few, so can not adapt current user's request much better. This design completes the text editor function is aims at the Java beginner who study the Java program language, Therefore we use the Java programming hypothesized machine and software form an entire set of complete compilation code to the formation user's application process, translation, debug.This text editor's development mainly includes the contact of surface menu of the window and the tool fence as well as the tree structure, also links to the java hypothesized machine to the translation and debug. Use Java GUI API, and the classes of SUN Corporation to found the initial prototype system, then, carries on the demand iteration to the initial prototype system, unceasingly reversing and improvement, until forms the feasible system.This text editor's development uses JDK6.0 and Ultra Edit as the development kit, operate system for Windows98/ Windows 2000/ Windows/XP Keywords: OOP, java, GUI(Graphical User Interface),text editor, translation, debug.00000目录1 前言 02 问题的提出及可行性研究 (1)2.1问题的提出及定义 (1)2.2可行性研究 (2)2.2.1 对现行文本编辑器的分析 (2)2.2.2 新文本编辑器的可行性研究分析 (2)3 用户需求分析 (4)3.1用户调查 (4)3.2确定目标系统的功能 (4)4 系统设计与开发环境 (5)4.1系统相关类的设计 (5)4.2开发语言及其开发环境 (9)4.2.1开发语言概述 (9)4.2.2 Java开发环境——JDK的介绍 (11)4.3环境变量的设置 (12)4.3.1.环境变量的作用 (12)4.3.2 如何设置环境变量 (13)5 关键技术和源代码的实现 (15)5.1关键技术剖析 (15)5.2源码分析 (16)6 系统测试 (43)6.1测试方案 (43)6.2测试项目 (43)6.3编辑器截图演示 (44)0南昌航空大学毕业设计(论文)说明书致谢 (45)参考文献 (46)1 前言Java可以方便的开发GUI程序,在Java语言提供的GUI构建工具中,可以分为“组件(component)”和“容器”(container)两种。

C#面向对象程序设计性教学方法论文

C#面向对象程序设计性教学方法论文

C#面向对象程序设计探究性教学方法初探摘要:c#是一门引入了可视化图形用户界面的程序设计方法和面向对象机制的程序设计语言,因其简单易学、开发快捷、功能强大等特点深受广大程序爱好者的青睐。

同时它也是中等职业学校计算机专业学生学习程序设计的一门必修课程,不但可以培养学生的程序设计能力、实践操作能力,还可以为以后更深一步的学习计算机专业知识奠定基础。

在新课程标准中,强调了“探究”这一概念,结合当前职业院校的发展趋势,本人觉得将探究性教学方法引入课堂势在必行。

本文仅针对c#面向对象程序设计课程中冒泡排序这一章节进行探究性教学方法初探。

关键词:探究性教学方法 c#面向对象程序设计冒泡排序一、什么是探究性教学方法美国国家科学教育标准中对探究的定义是:“探究是多层面的活动,包括:①观察②提出问题③通过浏览书籍和其他信息资源发现什么是已经知道的结论,制定调查研究计划④根据实验证据对已有的结论做出评价⑤用工具收集、分析、解释数据⑥提出解答,解释和预测⑦以及交流结果。

探究要求确定假设,进行批判的和逻辑的思考,并且考虑其他可以替代的解释。

”探究性学习是指在学习过程中,运用类似科学探究的方法和途径,通过主动的探究、发现和体验,学会对大量信息的收集、分析和判断,从而提升创新能力和实践能力,增强发现问题、提出问题、解决问题的能力。

探究性教学,就是学生在教师的引导下,通过教师在教学过程中创设问题情境,以问题的提出和问题的解决,激发学生的求知欲,引导学生主动学习,做学习的主人。

以此达到培养学习创新意识和实践能力的一种教学模式。

在新课程标准中,“自主、合作、探究”是从学生角度提出的一种学习方式。

这种学习方式基于全面提高学生综合素质为基本理念,以各专业课程的性质、教育的特点为基本前提。

自新课标实施以来,无论是从教材编写、教学内容、教学方法、课堂结构上,还是从教师观念、评价方式上,都得到了大家的一致好评,都在向形成这种学习方式而努力着,学生也很快适应并逐步掌握了这种学习方式。

c语言课程设计优秀论文

c语言课程设计优秀论文

c语言课程设计优秀论文c语言课程设计优秀论文(精选6篇)C语言程序设计课程是高等院校计算机专业基础课程之一,其教学效果直接影响学生在计算机方面的应用。

今天小编为大家准备了c语言课程设计优秀论文,欢迎阅读!c语言课程设计优秀论文篇1摘要:现代化的图书管理需要有现代化的管理系统,采用计算机管理信息系统已成为图书管理科学化和现代化的一个重要特征,给图书管理带来极大的便利.近年来图书事业的发展,以及软件开发的逐步成熟,图书管理系统使得原来繁重而易出错的图书管理变得简单而有条理,我所开发这一图书管理系统的目的在于能够节省大量的人员成本,使得管理变得方便可靠。

关键词:图书管理系统关系模型功能模块随着社会的进步与发展,资源高效利用提高效率越来越受到人们的关注.图书管理也提出这样的要求,因此图书管理的数字化越来越受到大众的青睐.图书管理系统是现代图书管理工具中的重要组成部分。

它广泛应用于图书馆管理,力求开发出一套严谨、可靠、功能完整的管理系统。

使用图书管理系统能够很好的解决了传统图书管理的问题.人员需求能够减少,工作效率明显提高,管理更加便利。

一、系统介绍此图书管理系统主要采用的是VisualStudio2008做为前台开发工具以及SQL Server 2005做为后台支持。

以操作便捷、界面友好、灵活、实用为出发点,设计采用了模块化设计方法。

系统实现了以下基本功能:日常操作:此功能实现图书的借阅、归还。

读者管理:可以实现读者的添加、修改、查询等操作。

图书管理:实现图书的添加、修改、查询等操作。

系统管理:实现了对管理员的添加、修改、查询等操作。

开发工具:Microsoft Visual Studio2008(C#) 和SQL Server2005。

图书管理系统具有如下一些特点:方便性:读者以及工作人员能够及时了解图书情况,以便完成需要的工作。

稳定性:系统性能稳定。

操作性强:由于系统及面简洁,使用容易很便于用户操作。

面对对象课程设计论文

面对对象课程设计论文

面对对象课程设计论文一、教学目标本课程的教学目标是使学生掌握面向对象编程的基本概念、原理和技巧,培养学生独立思考、解决问题和编程实践的能力。

具体来说,知识目标包括让学生了解面向对象编程的基本概念,如类、对象、封装、继承和多态等;掌握面向对象编程的基本语法和常用类库。

技能目标则是培养学生能够运用面向对象编程思想进行程序设计和开发,能够独立解决实际问题。

情感态度价值观目标则是培养学生对编程的兴趣和热情,提高学生独立思考和团队协作的能力。

二、教学内容本课程的教学内容主要包括面向对象编程的基本概念、原理和技巧。

具体包括以下几个部分:1.面向对象编程的基本概念,如类、对象、封装、继承和多态等;2.面向对象编程的语法和常用类库,如类的定义、对象的创建、成员函数、继承和多态等;3.面向对象编程的实践应用,如设计模式、软件工程等。

三、教学方法为了达到本课程的教学目标,我们将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。

通过这些方法,我们将引导学生从理论到实践,逐步掌握面向对象编程的知识和技能。

具体来说,我们将通过讲授法向学生传授基本概念和原理,通过讨论法引导学生进行思考和讨论,通过案例分析法让学生了解面向对象编程的实际应用,通过实验法让学生进行编程实践,巩固所学知识。

四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备多种教学资源,包括教材、参考书、多媒体资料和实验设备等。

教材和参考书将作为学生学习的基本资源,多媒体资料将用于辅助讲解和演示,实验设备将用于学生的编程实践。

我们将确保这些资源的质量和适用性,以丰富学生的学习体验。

五、教学评估本课程的教学评估将采用多元化的评估方式,包括平时表现、作业、考试等,以全面、客观、公正地评估学生的学习成果。

具体来说,平时表现将占30%的比重,主要评估学生的课堂参与度、提问和回答问题的情况等;作业将占20%的比重,主要评估学生的编程实践能力和解决问题的能力;考试将占50%的比重,主要评估学生对面向对象编程知识的掌握程度。

面向对象程序设计课设论文模拟自动售货机

面向对象程序设计课设论文模拟自动售货机

面向对象程序设计课设论文模拟自动售货机面向对象程序设计课程设计论文:模拟自动售货机一、引言自动售货机是日常生活中常见的自助购物设备,本文旨在使用面向对象程序设计(OOP)的方法,设计和实现一个模拟自动售货机的系统。

通过此次课程设计,我们旨在加深对OOP基本原则和主要技术的理解,包括类、对象、封装、继承和多态等。

二、背景自动售货机是一种根据消费者投入的货币或卡内金额,通过机器自动销售商品的设备。

其运营原理包括识别货币、商品选择、出货等过程。

面向对象程序设计是一种以对象为基础的程序设计范式,它使用类和对象作为基本构造块,通过对现实世界的抽象,建立对应的类和对象,实现系统的模型化。

三、相关技术在本次课程设计中,我们主要使用了Java语言进行编程。

Java语言具有跨平台性和面向对象的特点,适合用于实现这种模拟自动售货机的系统。

同时,我们将使用Java的GUI库Swing,以实现用户界面部分。

四、系统设计1、类设计:我们设计了三个主要类,分别是货币识别器、商品选择器和出货器。

货币识别器类具有识别货币面值的能力,商品选择器类具有根据投入货币的数量和金额选择商品的功能,出货器类则负责将所选商品出货。

2、对象设计:根据自动售货机的实际需求,我们创建了多个货币识别器、商品选择器和出货器的实例。

同时,我们还创建了代表不同商品的对象,包括可乐、雪碧、矿泉水等。

3、方法设计:在类中定义各种方法,如货币识别器中的“识别货币”方法、商品选择器中的“选择商品”方法和出货器中的“出货”方法等。

五、实现在实现阶段,我们将按照设计的结构,使用Java编写各个类的代码。

其中,货币识别器将根据用户投入的货币进行面值识别,并将金额传递给商品选择器;商品选择器将根据金额从库存中选取相应的商品,并通知出货器出货;出货器则负责执行出货操作。

我们将使用Java的GUI库Swing创建用户界面,包括一个文本框用于接收用户投入的货币,一个下拉列表用于选择商品,以及一个按钮用于确认购买。

《面向对象的程序设计方法》论文

《面向对象的程序设计方法》论文

《面向对象的程序设计方法》论文《面向对象的程序设计方法》面向对象的程序设计方法(Object-Oriented Programming, OOP)是一种有效的编程解决方案,它将软件的开发过程建立在基于对象的抽象概念之上。

大多数OOP语言,如C++、Java和Python,都基于类和实例化,以便保护程序员免受低级内存和资源管理错误的困扰。

与结构化编程方法(Structured Programming)相比,面向对象的编程具有更好的可维护性和更高的弹性,可以缩短开发软件所需的时间。

面向对象编程的基本概念是类和实例化。

类是一种抽象的概念,像是比特币,而实例化则是一个特定的比特币。

一个类可以有很多的实例,每个实例可以有不同的属性,比如颜色、价值和地址等等。

类也可以有方法,方法是用来描述对象如何行动的函数。

比如,一个类可能有用来处理货币转换的方法,或者操作比特币交易的方法等。

还可以有一些属性是私有的,它们不能由外部代码直接访问,但通过调用类的公共方法却可以间接访问它们。

最后,类可以有构造函数(constructors)和析构函数(destroying functions)来创建、释放和初始化对象。

在面向对象的编程中,封装(encapsulation)也是一个重要概念。

封装意味着将类的数据和它们的行为封闭起来,以限制外部代码对它们的访问。

这样做有助于保护数据不被意外更改,并且只有在特定情况下,外部代码才能访问它们。

另外,在面向对象编程中,多态性也是一个重要的概念。

多态性意味着类的多种形式可以处理同样的操作,这种技术使得类可以具有多种状态和行为。

从而提高了程序的可维护性和弹性,并能够很容易地添加新功能。

总而言之,面向对象的程序设计方法是一种有效的软件开发方法,它可以提高程序的可维护性和可扩展性,减少开发软件所需的时间。

OOP需要一定的编程技巧,但这些技巧可以帮助程序员更有效地实现他们的想法,有助于提高软件的效率,同时也帮助避免许多常见的错误。

C++面向对象程序设计总结

C++面向对象程序设计总结

第一部分面向对象编程原理●近五十年间,软件技术经历了多个阶段的发展演变●面向过程编程采用了自顶向下的设计方案,问题被看做多个执行任务的序列.为完成这些任务,须实现一些函数。

●面向过程有两大不足,即:(1)数据可在程序内自由迁移,程序内任何函数都会引起数据的更改,增加了数据的脆弱性。

(2)它并不能很好地建模现实世界。

●为了克服面向过程编程中的不足,人们发明了面向对象编程(OOP)。

它采用自底向上的编程方案,在程序开发中,把数据视为重要元素,不允许数据在系统内自由迁移。

它还将数据和函数紧密绑定于成为类的数据结构中,函数可操作类中的数据。

此特性称为数据封装。

●在面向对象编程中,问题被视为一系列称为对象的实体的集合。

对象是类的实例;●将数据与程序的直接访问隔绝,这称为数据隐藏。

●数据抽象指的是,将各种必要特性合并,而不引入背景细节。

●继承是这样的一个过程,即某类的对象得到另一类对象的属性.●多态指的是,一个名称,多种形态。

在程序中,我们可以借此定义多个同名函数.此特性亦可重载运算符,这样一来,同一个运算符在不同的实例下,会有不同的行为。

●动态绑定指的是,给定过程的代码,直到运行期被调用时才确定。

●消息传递涉及对象名,函数(消息)名以及发送的信息。

●与传统的编程技术相比,面向对象技术具有诸多优势-—最显著的当属重用技术。

●在实时系统等几乎所有的计算机领域,面向对象编程的应用程序都已受到重视。

●不少语言都支持面向对象编程,流行的语言包括C++、Smalltalk和Java。

第二部分C++入门●C++是C语言的超级●C++在C语言的基础上,添加了一些面向对象的特性,诸如对象、继承、函数重载和运算符重载。

这些特性加强了程序的清晰性,可扩展性,使程序容易维护.●C++可用于开发各种系统,诸如编辑器、编译器、数据库、通信系统以及其他更多复杂的实际系统.●C++支持交互式输入输出,并引入了新的注释符号//,可用于注释单句。

课题研究论文:面向对象程序设计(C++)教学方法探讨

课题研究论文:面向对象程序设计(C++)教学方法探讨

120812 学科教育论文面向对象程序设计(C++)教学方法探讨文章编号:1672-5913(20xx年龄和成绩(包括数学、语文和英语3门课程)3种,要求对每位学生的总成绩和平均成绩进行计算统计,试通过使用结构体和类两种方式对学生进行成绩分析,并观察两者之间的区别。

1)使用结构体方式。

(1)声明结构体类型。

struct stud {char name[10]; int age; float score[3];};(2)定义计算函数,以计算每位学生的总成绩和平均成绩并输出。

void CalSum_Avg( struct Stud *s){ …… //中间过程略 }(3)在主函数中定义学生结构体数组并赋值。

struct stud s[N];……//赋值过程略(4)对每位学生分别进行函数调用计算结果。

for( int i=0; iCalSum_Avg( &s[i] );2)使用类方式。

(1)声明学生类。

class stud {protected:char name[10];int age;float score[3];public:void InitStud();//为成员赋值void CalSum(); //计算自己的总成绩void CalAvg(); //计算自己的平均成绩};……//成员函数实现部分略(2)在主函数中定义学生对象数组并赋值。

stud s[N];for( int i=0; is[i]. InitStud ();(3)让每位学生分别调用相应成员函数计算结果。

for( int i=0; is[i].CalSum();s[i].CalAvg();教师可让学生观察上述两种程序设计方法在思路上的区别,体会面向过程与面向对象两种程序设计思想的不同之处,并讨论这两种设计思想中哪种方法更接近人们的行为方式,理解类的定义及使用方法,解释类的访问控制方式;此外,还可以融入以下示例作为过渡。

3 用结构体实现类的概念的?^渡在C++编译器中,使用结构体代替类,以实现上述类的功能,让学生在应用中体会从结构体向类的过渡过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

燕山大学结课论文说明书课程:C++面向对象程序设计B题目:排序问题学院(系):理学院年级专业:2010计算数学学号: ************学生姓名:***指导教师:***教师职称:目录摘要...................................................................... (2)一、论文背景简介 (2)二、程序代码............................................................................... (3)三、结果及分析......................................................................... (11)四、参考文献............................................................................... (12)摘要随着科技的不断发展,计算机的应用领域越来越广,但由于计算机硬件的速度和存储空间的有限性,如何提高计算机速度并节省存储空间一直成为软件编制人员努力的方向,在众多措施中,排序操作成为程序设计人员考虑的因素之一,排序方法选择得当与否直接影响程序执行的速度和辅助存储空间的占有量,进而影响整个软件的性能。

课程背景一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。

当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题。

然而,假设以下的数对将要以他们的第一个数字来排序。

(4,1)(3,1)(3,7)(5,6)在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的次序,而另外一个则没有:(3,1)(3,7)(4,1)(5,6)(维持次序) (3,7)(3,1)(4,1)(5,6)(次序被改变) 不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。

不稳定排序算法可以被特别地实现为稳定。

作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个对象间之比较,就会被决定使用在原先数据次序中的条目,当作一个同分决赛。

然而,要记住这种次序通常牵涉到额外的空间负担。

在计算机科学所使用的排序算法通常被分类为:a)计算的复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。

一般而言,好的性能是O(nlog n),且坏的性能是O(n平方)。

对于一个排序理想的性能是O(n)。

仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(nlog n)。

b)存储器使用量(空间复杂度)(以及其他电脑资源的使用)c)稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。

d)一般的方法:插入、交换、选择、合并等等。

交换排序包含冒泡排序和快速排序。

插入排序包含希尔排序,选择排序包括堆排序等。

排序的算法有很多,对空间的要求及其时间效率也不尽相同。

下面列出了一些常见的排序算法。

这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳定;而后面三种排序相对于简单排序对空间的要求稍高一点,但时间效率却能稳定在很高的水平。

基数排序是针对关键字在一个较小范围内的排序算法。

插入排序冒泡排序选择排序快速排序堆排序归并排序基数排序希尔排序。

程序代码#include<iostream>using namespace std;const int maxsize=100;int num=0;//定义全局变量,为每一趟的输出做准备int x=0;template<class type>class sortlist{private:int currentsize;//数据表中数据元素的个数public:type *arr;//存储数据元素的向量(排序表)sortlist():currentsize(0){arr=new type[maxsize];}//构造函数sortlist(int n){arr=new type[maxsize];currentsize=n;}void insert(int i,type x){arr[i]=x;}~sortlist(){delete []arr;}//析构函数void swap(type &x,type &y)//数据元素x和y交换位置{type temp=x;x=y;y=temp;}void bubblesort();//冒泡排序void quicksort(int low,int high);//快速排序void insertionsort();//直接插入排序void binaryinsertsort();//折半插入排序void selectsort();//简单选择排序void heapsort();//堆排序void mergesort(sortlist<type> &table);//归并排序void filterdown(const int start);//建立最大堆void mergepass(sortlist<type>&sourcetable,sortlist<type>&mergedtable,const int len);//一趟归并void merge(sortlist<type>&sourcetable,sortlist<type>&mergedtable,const int left,const int mid,const int right);//两路归并算法};template <class type>//直接插入排序void sortlist<type>::insertionsort(){type temp;int j;for(int i=1;i<=currentsize-1;i++){temp=arr[i];j=i-1;while(j>=0&&temp<arr[j]){arr[j+1]=arr[j];j--;}arr[j+1]=temp;cout<<"第"<<++num<<"趟排序结果为:";for(int t=0;t<currentsize;t++)cout<<arr[t]<<" ";cout<<endl;}num=0;}template <class type>//折半插入排序void sortlist<type>::binaryinsertsort(){type temp;int left,right;for(int i=1;i<currentsize;i++){left=0;right=i-1;temp=arr[i];while(left<=right)//找插入位置{int mid=(left+right)/2;if(temp<arr[mid])right=mid-1;else left=mid+1;}for(int k=i-1;k>=left;k--)//向后移动arr[k+1]=arr[k];arr[left]=temp;cout<<"第"<<++num<<"趟排序结果为:";for(int t=0;t<currentsize;t++)cout<<arr[t]<<" ";cout<<endl;}num=0;}template <class type>//冒泡排序void sortlist<type>:: bubblesort(){int i=1;int finish=0;//0表示还没有排好序while(i<currentsize &&!finish){finish=1;//排序结束标志置为,假定已经排好序for(int j=0;j<currentsize-i;j++)if(arr[j]>arr[j+1])//逆序{swap(arr[j],arr[j+1]);//相邻元素交换位置finish=0;}//排序结束标志置为,表示本趟发生了交换,说明还没有排好序i++;cout<<"第"<<++num<<"趟排序结果为:";for(int t=0;t<currentsize;t++)cout<<arr[t]<<" ";cout<<endl;}num=0;}template <class type>void sortlist<type>::selectsort()//简单选择排序{int k;for(int i=0;i<currentsize-1;i++){k=i;for(int j=i+1;j<currentsize;j++)if(arr[j]<arr[k])k=j;//k 指示当前序列中最小者的位置if(k!=i)//最小关键字的数据元素位置不等于iswap(arr[i],arr[k]);cout<<"第"<<++num<<"趟排序结果为:";for(int t=0;t<currentsize;t++)cout<<arr[t]<<" ";cout<<endl;}num=0;}template <class type>//快速排序void sortlist<type>::quicksort(int low,int high)//在待排序区间[low,high]上,递归地进行快速排序{int i=low,j=high;type temp=arr[low];//取区间第一个位置为基准位置if(i<j){while(i<j){while(i<j&&temp<arr[j])j--;if(i<j){swap(arr[i],arr[j]);i++;}while(i<j&&temp>=arr[i])i++;if(i<j){swap(arr[i],arr[j]);j--;}}arr[i]=temp;//将基准元素就位cout<<"第"<<++x<<"趟排序结果为:";for(int t=0;t<currentsize;t++)cout<<arr[t]<<" ";cout<<endl;quicksort(low,i-1);//在左子区间递归进行快速排序quicksort(i+1,high);//在右子区间递归进行快速排序}}template <class type>//建立最大堆void sortlist<type>::filterdown(const int start){//向下调整使从start开始到currentsize-1为止的子表成为最大堆int i=start,j=2*i+1;//j为i的左孩子int tablesize=currentsize;type temp=arr[i];while(j<=currentsize-1){if(j<currentsize-1 && arr[j]<arr[j+1])j++;//在两个孩子中选关键字较大者if(temp>=arr[j])break;else{arr[i]=arr[j];i=j;j=2*j+1;}}arr[i]=temp;}template <class type>void sortlist<type>::heapsort(){int tablesize=currentsize;for(int i=(currentsize-2)/2;i>=0;i--)filterdown(i); //初始建堆for(int j=currentsize-1;j>=1;j--){swap(arr[0],arr[j]);//堆顶元素和最后一个元素交换currentsize--;filterdown(0);//重建最大堆cout<<"第"<<++num<<"趟排序结果为:";for(int t=0;t<tablesize;t++)cout<<arr[t]<<" ";cout<<endl;}num=0;currentsize=tablesize;}template <class type>void sortlist<type>::merge(sortlist<type>&sourcetable,sortlist<type>&mergedtable,const int left,const int mid,const int right){int i=left,j=mid+1,k=left;//指针初始化//i是前一段的当前元素位置,j是后一段的当前元素位置,k是辅助数组的当前位置while(i<=mid&&j<=right)if(sourcetable.arr[i]<=sourcetable.arr[j]){mergedtable.arr[k]=sourcetable.arr[i];i++;k++;}else{mergedtable.arr[k]=sourcetable.arr[j];j++;k++;}if(i<=mid)for(int p=k,q=i;q<=mid;p++,q++)mergedtable.arr[p]=sourcetable.arr[q];//把前一段复制到mergedtable elsefor(int p=k,q=j;q<=right;p++,q++)mergedtable.arr[p]=sourcetable.arr[q];//把后一段复制到mergedtable}template <class type>void sortlist<type>::mergepass(sortlist<type>&sourcetable,sortlist<type>&mergedtable,const int len){int i=0;while(i+2*len<=currentsize-1)//表示至少有个子序列{merge(sourcetable,mergedtable,i,i+len-1,i+2*len-1);i+=2*len;}if(i+len<=currentsize-1)//若只有最后两个子序列merge(sourcetable,mergedtable,i,i+len-1,currentsize-1);else//若只有最后一个子序列for(int j=i;j<=currentsize-1;j++)mergedtable.arr[j]=sourcetable.arr[j];if(len<=currentsize-1){if(num<currentsize){cout<<"第"<<++num<<"趟排序结果为:";for(int t=0;t<currentsize;t++)cout<<mergedtable.arr[t]<<" ";cout<<endl;}}}template <class type>void sortlist<type>::mergesort(sortlist<type> &table ){//按数据元素关键字非递减的顺序对排序表table中数据元素进行递归排序sortlist<type> temptable;int len=1;while(len<currentsize){mergepass(table,temptable,len);len*=2;mergepass(temptable,table,len);len*=2;}num=0;}int main()//主函数{cout<<"***********************************************************************"<<en dl;cout<<" 排序问题"<<endl; cout<<"********************************************************************* **"<<endl<<endl<<endl;int c=1;char ch;int n1=0;while(c!=0){cout<<"\n================================================================= ======"<<endl;cout<<"======================可供选择的排序方法=============================="<<endl;cout<<" 1 直接插入排序 2 折半插入排序"<<endl; cout<<" 3 冒泡排序 4 简单选择排序"<<endl; cout<<" 5 快速排序 6 堆排序"<<endl; cout<<" 7 归并排序0 退出排序程序"<<endl; cout<<"=================================================================== ===="<<endl;cout<<"\n 请输入您需要的排序种类:";cin>>ch;if(ch=='0') {cout<<" 您已成功退出该系统!"<<endl;system("pause"); return 0;} int n,number;if(ch>='0'&&ch<='7'){cout<<"\n 输入您要进行排序的数的个数:";cin>>n;cout<<"\n 请输入"<<n<<"个数:";sortlist<int>table(n);for(int i=0;i<n;i++){cin>>number;table.insert(i,number);}switch(ch){case '1':cout<<"\n *******您选择的是直接插入排序*******\n"<<endl;table.insertionsort();break;system("pause");break;case '2':cout<<"\n *******您选择的是折半插入排序*******\n"<<endl;table.binaryinsertsort();break;system("pause");break;case '3':cout<<"\n *******您选择的是冒泡排序*******\n"<<endl;table.bubblesort();break;system("pause");break;case '4':cout<<"\n *******您选择的是简单选择排序*******\n"<<endl;table.selectsort();break;system("pause");break;case '5':cout<<"\n *******您选择的是快速排序*******\n"<<endl;table.quicksort(0,n-1);break;system("pause");break;case '6':cout<<"\n *******您选择的是堆排序*******\n"<<endl;table.heapsort();break;system("pause");break;case '7':cout<<"\n *******您选择的是归并排序*******\n"<<endl;table.mergesort(table);break;system("pause");break;}}}system("pause");return 0;}结果及分析:参考文献[1]王晓东 C++程序设计简明教程中国水利水电出版社 2008。

相关文档
最新文档