用c++编画板的实训报告
c实训报告总结优质8篇

c实训报告总结优质8篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如总结报告、心得体会、讲话致辞、条据文书、合同协议、策划方案、规章制度、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as summary reports, insights, speeches, written documents, contract agreements, planning plans, rules and regulations, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!c实训报告总结优质8篇我们写报告总结不单是对自己也是对公司的负责,我们写的报告总结是要对自己负责的,一定要实事求是,下面是本店铺为您分享的c实训报告总结优质8篇,感谢您的参阅。
c语言程序设计实训总结

c语言程序设计实训总结C语言程序设计实训总结对于学习C语言程序设计的学生来说,实训是提升自己编程能力和解决问题能力的重要环节。
在本学期的C语言程序设计实训中,我通过一系列的编程项目,学会了如何运用C语言的基本语法和编程思想,同时也培养了自己的动手能力和合作精神。
在这篇总结中,我将结合个人经验和感悟,对这次实训进行详细的总结。
首先,本次实训的内容非常丰富和多样化。
从最简单的基本语法练习,到较为复杂的简易计算器和学生成绩管理系统等实际项目,每个项目都有一定的难度和挑战性。
通过这些项目的实操练习,我逐渐掌握了C语言的基本语法、数组的运用、循环结构和条件语句等基础知识。
在实际操作中,我也深刻领悟到了“实践出真知”的道理。
只有亲自动手去编写和调试代码,才能真正理解和掌握编程语言的精髓。
其次,值得一提的是实训的项目设计十分贴近生活和实际需求。
例如,计算器项目要求我们设计一个简易的计算器程序,能够实现基本的加减乘除运算和取余。
通过这个项目,我不仅加深了对计算机底层运算原理的理解,也提高了我解决实际问题的能力。
除此之外,学生成绩管理系统项目使我更好地理解了如何使用数组和结构体来管理和操作多个学生的信息。
这种真实场景的项目设计,让我感受到了C语言的强大和实用性。
此外,实训的过程也锻炼了我与他人合作的能力。
有一次,我们小组进行了一个有关字符串处理的实验。
在这个实验中,我们通过分工合作,每个人负责一部分代码的编写,最后将代码整合在一起。
通过这次合作,我学会了如何与他人沟通、分工和协作。
虽然在合作的过程中出现了一些问题,但通过相互讨论和改进,我们最终取得了很好的成果。
这种合作经验对今后的工作和生活都有着很大的帮助。
在整个实训过程中,我深刻感受到编程的乐趣和挑战。
每当我解决了一个难题,调试通过了一段代码,感觉都十分自豪和满足。
同时,我也意识到编程过程中的困难与挑战。
有时候代码出现了问题,我需要耐心地进行调试和修改;有时候项目要求很多,我需要面对问题一一解决。
C语言程序设计实训报告

C语言程序设计实训报告
一、简要说明实训内容
这次实训主要是对C语言的编程进行学习,学习完整的C语言编程开
发流程,掌握C语言编程的基本知识和常用编程语句,要求学生能够熟练
运用C语言编程语言,完成相关的程序题。
二、实训体会
在本次C语言程序设计实训中,我学会了很多关于C语言编程的知识,了解到的最重要的是:程序开发的过程和语言的应用要做到规范化,以保
证程序的稳定性和可靠性;在实训中,我更加深入地学习到了C语言编程
的相关知识,对C语言编程有了更好的理解,学会了用C语言编程编写简
单的程序,从实训中学到的内容提高了我的编程能力。
三、实训过程中学到的知识点
1.C语言的基本知识,包括数据类型、常量、变量、程序结构等;
2.C语言编程的基本语句构成,如算术运算符、关系运算符、逻辑运
算符等;
3.C语言的流程控制语句,包括条件判断语句、循环语句等;
4.学习了排序算法,包括冒泡排序、插入排序、选择排序等;
5.C语言函数的使用,包括C语言的内置函数、自定义函数等;
6.学习了C语言的数组操作,包括数组的定义和操作;
7.学习了C语言的文件操作。
【新编】板的实习报告3篇

板的实习报告3篇板的实习报告篇1专业:计算机控制班级:控制1001 学生姓名:学号:实训时间:指导教师:一、PLC控制技术介绍 1 概述可编程控制器(PLC)是以微处理器为基础,综合了计算机技术、自动控制技术和通信技术发展起来的一种通用的工业自动控制装置。
它具有体积小、功能强、灵活通用与维护方便等一系列的优点。
特别是它的高可靠性和较强的适应恶劣环境的能力,受到用户的青睐。
因此在冶金、化工、交通、电力等领域获得了广泛的应用,成为了现代工业控制的三大支柱之一。
可编程控制器是一种存储器控制器,支持控制系统工作的程序存放在存储器中利用程序来实现控制逻辑,完成控制任务。
在可编程控制器构成的控制系统中,要实现一个控制任务,首先要针对具体的被控对象,分析它对控制系统的要求,然后编制出相应的控制程序,利用编程器将控制程序写入可编程控制器的程序存储器中。
系统运行时,可编程控制器依次读取程序存储器中的程序语句,对它们的内容加以解释并执行。
现代PLC已经成为真正的工业控制设备。
可编程序控制器的分类:PLC的种类很多,其实现的功能、内存容量、控制规模、外型等方面均存在较大的差异。
因此,PLC的分类没有一个严格的统一标准,而是按照结构形式、控制规模、实现的功能进行大致的分类。
1.2 PLC的结构及特点PLC实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同1、中央处理单元(CPU)中央处理单元(CPU)是PLC的控制中枢。
它按照PLC系统程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及警戒定时器的状态,并能诊断用户程序中的语法错误。
当PLC投入运行时,首先它以扫描的方式接收现场各输入装置的状态和数据,并分别存入I/O映象区,然后从用户程序存储器中逐条读取用户程序,经过命令解释后按指令的规定执行逻辑或算数运算的结果送入I/O映象区或数据寄存器内。
等所有的用户程序执行完毕之后,最后将I/O映象区的各输出状态或输出寄存器内的数据传送到相应的输出装置,如此循环运行,直到停止运行。
c语言实训报告万能模板

c语言实训报告万能模板C 语言实训报告一、实训目的本次 C 语言实训的主要目的是通过实际的编程实践,加深对 C 语言基础知识的理解和掌握,提高编程能力和解决实际问题的能力。
具体包括:1、熟练掌握C 语言的基本语法、数据类型、控制结构等基础知识。
2、学会运用 C 语言进行程序设计,能够独立完成简单的程序编写和调试。
3、培养良好的编程习惯和代码规范,提高程序的可读性和可维护性。
4、锻炼分析问题和解决问题的能力,培养逻辑思维和创新思维。
二、实训环境本次实训使用的开发环境为具体的开发环境名称和版本,操作系统为具体的操作系统名称和版本。
三、实训内容1、基础语法练习变量和数据类型的使用,包括整型、浮点型、字符型等。
运算符和表达式的运用,如算术运算符、关系运算符、逻辑运算符等。
控制结构的实现,如顺序结构、选择结构(ifelse、switch)和循环结构(for、while、dowhile)。
2、数组和指针数组的定义、初始化和使用,包括一维数组和多维数组。
指针的概念和基本操作,如指针的定义、赋值和指针与数组的关系。
3、函数函数的定义、声明和调用,包括无参函数和有参函数。
函数的参数传递方式,值传递和地址传递。
函数的返回值类型和返回值的使用。
4、结构体和共用体结构体的定义和使用,结构体变量的定义、初始化和成员访问。
共用体的概念和简单应用。
5、文件操作文件的打开、关闭、读写操作。
文本文件和二进制文件的处理。
四、实训步骤1、需求分析仔细阅读实训题目,明确程序要实现的功能和要求。
分析问题的输入和输出,确定所需的数据结构和算法。
2、设计方案根据需求分析,设计程序的总体框架和模块划分。
确定每个模块的功能和接口,绘制程序流程图或编写伪代码。
3、代码实现根据设计方案,使用 C 语言编写程序代码。
遵循良好的编程习惯和代码规范,添加必要的注释。
4、调试测试使用开发环境提供的调试工具,对编写的程序进行调试。
检查语法错误、逻辑错误和运行时错误,并进行修改。
c语言实训报告模板范文

千里之行,始于足下。
c语言实训报告模板范文C语言实训报告模板范文》一、实训目的和背景本次实训的目的是让学生通过实际操作和实践,加深对C语言的理解和运用能力,提升对计算机编程的基本功的掌握程度。
C语言作为一种广泛应用于计算机领域的编程语言,精简而强大,是计算机科学与技术专业的入门必备技能。
二、实训任务和计划本次实训的主要任务是实现一个学生成绩管理系统。
通过该系统,可以方便地输入学生的成绩信息,进行成绩的添加、修改、查询、删除等操作,展示出学生成绩的统计情况,提高学生的学习积极性和教师的成绩管理效率。
具体实训计划如下:1. 学习和复习C语言的基本语法和数据类型,了解输入输出函数的使用方法。
2. 设计学生成绩管理系统的结构和功能,包括输入学生信息、显示学生信息、添加学生成绩、修改学生成绩、查询学生成绩等功能。
3. 使用C语言编写学生成绩管理系统的代码,包括主函数和各个子函数。
4. 进行系统的测试和调试,确保学生成绩管理系统的正常运行。
第1页/共3页锲而不舍,金石可镂。
三、实训过程及心得体会在实训过程中,首先我们需要了解和掌握C语言的基本语法和数据类型,这是编写代码的基础。
我们通过学习教材和参考资料,通过书写简单的代码实例来熟悉C语言的语法规则和运行方式。
然后,我们对学生成绩管理系统进行系统设计和功能划分。
根据需求,我们确定了学生信息的输入和显示功能,以及成绩的添加、修改、查询等功能。
根据这些功能,我们开始编写相应的函数代码,保证系统的正常运行。
在实践中,我们遇到了许多问题和困难。
例如,在输入学生成绩时,如何检查输入的成绩是否合法?在查询学生成绩时,如何展示成绩的排名和统计信息?通过充分的探索和实践,我们运用了C语言的逻辑判断和循环语句,解决了这些问题。
最后,在系统的测试和调试阶段,我们发现了一些代码逻辑上的错误和漏洞,并及时进行了修正。
通过不断地尝试和改进,我们使得学生成绩管理系统达到了我们预期的功能和效果。
C语言编程实训报告绘图

实验说明试验目的:掌握TurboC语言图形函数的使用和学会绘制一般图形。
试验地点:教九楼401 数学系机房实验要求(Direction):1. 每个学生单独完成;2.开发语言为TurboC或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。
实验内容实验题一实验题二2.1实验题目请绘制一个图:屏幕中央有一个半径为R1=160的大圆和一个同心的且半径为R2=120的小圆,同时在大圆和小圆中间均匀分布着12个与大圆和小圆相切的圆。
如下图2所示:要求:(1) 分别用12种不同的颜色和填充模式填充12个小圆;(2)用自定义模式填充中间小圆,且用漫延填充方法填充;(3) 用自定义模式填充中间小圆时,填充模式图案自己设计。
例如,用字母A、字母B、字母C填充图案可设计为:2.2实验目的和意义1.学会运用画圆函数circle(),图形填充函数包括:setfillstyle()、setfillpattern()以及floodfill()来填充圆;2.学会用自定义模式填充指定圆,并且用漫延填充方法填充;3.学会用自定义图案来填充指定圆。
2.3程序制作步骤(包括算法思想、算法流程图等)算法思想:1.输入所要求环绕的小圆的个数n,以及中间圆所需的自定义填充模式m(1-A,2-C,3-D),设置画笔颜色,利用circle()画半径为160的大圆,然后画半径为120的小圆并按照输入的模式m选择相应的填充模式。
2.利用圆内接多边形的算法,算出环绕小圆的各个圆心坐标,公式如下:x[i]=r*cos( (i+1) * 2.0*pi/n)+200.0y[i]=200.0-r*sin( (i+1) * 2.0*pi/n)以20为半径画环绕的n个小圆,并用不同的颜色填充。
C#写字板实验报告--水晶草

实验题目:用C#编写一个简单的写字板实验目的:1.了解C#应用程序的基本结构2.掌握基本代码风格3.进一下掌握类和对象的基本概念、掌握类字段和属性的使用4.学习掌握写字板实现的思想以及编程方法预习内容:一个C#的写字板程序,从编写到运行,要经过哪些步骤?需要用到哪些控件?分别怎么设置属性及触发事件?实验步骤:1.打开C#软件,创建一个Windows应用程序窗口,更改窗口的属性“Text”为“写字板”2.添加menuStrip控件,并增加四大菜单按钮,分别为“文件”“编辑”“格式”“帮助”,其中“文件”的子菜单有新建、打开、保存、另存为、页面设置、打印预览、打印、退出;而“编辑”的子菜单有剪切、复制、粘贴、撤销、恢复、查找和替换;“格式”的子菜单有字体;“帮助”的子菜单为“关于写字板”。
并做好相关的属性设置准备。
3.点击“项目”为主窗体添加2个Windows窗体,分别为formAbout.cs和formFindReplace.cs,并对主窗体增加对话相关的控件。
4.在formAbout.cs中添加2个控件,即一个Text为“版权所有”的label控件一个Text为“确定”的TextBox控件。
5.为formFindReplace.cs添加2个Text分别为“查找字符串”、“替换字符串”的label控件,2个Text分别为“查找下一个”、“替换查到字符串”的Button ,2个Text为空的textBox控件。
6.为各个控件的触发事件编程,写出源程序,实现写字板功能。
7.编绎,运行。
检查结果。
实验内容://主窗体Form1.cs的源代码如下using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO; //处理文件必须引入的命名空间using System.Drawing.Printing;//打印必须引入的命名空间namespace WindowsFormsApplication1{public partial class Form1 : Form{//类开始定义变量string s_FileName="";//文件名变量int FindPostion = 0;//用来记录下一次查找的开始位置bool bsave = false;//标记文本内容是否被修改,为false表不被修改,为true表关闭文件前要询问用户是否保存当前已被修改的文件StringReader streamToPrint=null;Font printFont;//以下是实现查找和替换功能的语句public void FindRichTextBoxString(string FindString)//查找方法{if (FindPostion >= richTextBox1.Text.Length){MessageBox.Show("已到文本底部,再次查找将从文本开始处查找, "提示", MessageBoxButtons.OK);FindPostion = 0;return;}FindPostion = richTextBox1.Find(FindString, FindPostion, RichTextBoxFinds.MatchCase);if (FindPostion == -1){MessageBox.Show("已到文本底部,再次查找将从文本开始处查找, "提示", MessageBoxButtons.OK);FindPostion = 0;}else{richTextBox1.Focus();FindPostion += FindString.Length;}}public void ReplaceRichTextBoxString(string ReplaceString)//替换方法{if (richTextBox1.SelectedText.Length != 0)richTextBox1.SelectedText = ReplaceString;}public bool IfSaveOldFile()//检查当前文件是否被更改,提示保存已被修改的文件{bool ReturnValue = true;if (bsave){System.Windows.Forms.DialogResult dr;dr = MessageBox.Show(thi s, "要保存当前更改吗?", "提示?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Questi on);switch (dr){case System.Windows .Forms .DialogResult .Yes:bsave =false ;if(s_FileName.Length!=0)richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);else{SaveFileDialog saveFileDialog1=new SaveFileDialog ();if(saveFileDialog1.ShowDialog()==DialogResult .OK){s_FileName=saveFileDialog1.FileName;richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);}}ReturnValue=true ;break ;case System.Windows.Forms.DialogResult.No:bsave=fal se ;ReturnValue=true ;break ;case System.Windows.Forms.DialogResult.Cancel:ReturnValue=fal se ;break ;}}return ReturnValue;}public Form1(){InitializeComponent();}//以下是实现编辑功能private void MenuItemEditCut_Click(object sender, EventArgs e)//剪切{richTextBox1.Cut();}private void MenuItemEditCopy_Click(object sender, EventArgs e)//复制{richTextBox1.Copy();}private void MenuItemEditPaste_Click(object sender, EventArgs e)//粘贴{richTextBox1.Paste();}private void MenuItemEditUndo_Click(object sender, EventArgs e)//撤销{richTextBox1.Undo();}private void MenuItemEditRedo_Click(object sender, EventArgs e)//恢复{richTextBox1.Redo();}//以下是实现文件功能private void MenuItemFileExit_Click(object sender, EventArgs e)//关闭{Close();}private void MenuItemFileNew_Click(object sender, EventArgs e)//新建{if (!IfSaveOldFile())return;s_FileName = "";richTextBox1.Clear();}private void MenuItemFileOpen_Click(object sender, EventArgs e)//打开{if (!IfSaveOldFile())return;if (openFileDialog1.ShowDialog() == DialogResult.OK){s_FileName = openFileDialog1.FileName;richTextBox1.LoadFile(openFileDialog1.FileName,RichTextBoxStreamType.PlainText);}}private void MenuItemFileSave_Click(object sender, EventArgs e)//保存{if (s_FileName.Length != 0){bsave = false;richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText);}elseMenuItemFileSaveAs_Click(sender, e);}private void MenuItemFileSaveAs_Click(object sender, EventArgs e)//另存为{SaveFileDialog saveFileDialog1 = new SaveFileDialog();saveFileDialog1.Filter = "纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";saveFileDialog1.FilterIndex = 1;if (saveFileDialog1.ShowDialog() == DialogResult.OK){s_FileName = saveFileDialog1.FileName;richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);bsave = false;}}// 以下是实现字体功能private void MenuItemFormatFont_Click(object sender, EventArgs e)//格式-字体设置{if (fontDialog1.ShowDialog() == DialogResult.OK)richTextBox1.SelectionFont = fontDialog1.Font;}//以下是实现帮助功|能private void MenuItemHelpAbout_Click(object sender, EventArgs e)//关于{formAbout AboutDialog=new formAbout();AboutDialog.ShowDialog(thi s);}private void MenuItemEditFindReplace_Click(object sender, EventArgs e){FindPostion = 0;formFindReplace FindReplaceDialog = new formFindReplace(thi s);FindReplaceDialog.Show();}private void richTextBox1_TextChanged(object sender, EventArgs e){bsave = true;}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (!IfSaveOldFile())e.Cancel = true;}private void printDocument1_PrintPage(object sender, PrintPageEventArgs e){float linesPerPage=0;float yPos=0;int count=0;float leftMargin=e.MarginBounds.Left;float topMargin=e.MarginBounds .Top ;string line=null ;linesPerPage=e.MarginBounds.Height/printFont .GetHeight(e.Graphics);while(count<linesPerPage&&((line=streamToPrint.ReadLine())!=null)){yPos=topMargin+(count*printFont.GetHeight (e.Graphics));e.Graphics .DrawString (line,printFont ,Brushes.Black ,leftMargin ,yPos ,new StringFormat());count++;}if(line!=null )e.HasMorePages =true ;elsee.HasMorePages =false ;}private void printDocument1_Begi nPrint(object sender, PrintEventArgs e)//Beginprint{printFont=richTextBox1.Font ;streamToPrint =new StringReader(richTextBox1 .Text );}private void printDocument1_EndPrint(object sender, PrintEventArgs e){if (streamToPrint != null)streamToPrint.Close();//释放不用的资源}//实现页面设置功能private void MenuItemFileSetUP_Click(object sender, EventArgs e)//页面设置{pageSetupDialog1.Document = printDocument1;pageSetupDialog1.ShowDialog();}//实现打印预览功能的语句private void MenuItemFilePrint_Click(object sender, EventArgs e)//打印预览{printPreviewDialog1.Document = printDocument1;printPreviewDialog1.ShowDialog();}//实现打印功|能的语句private void MenuItemFilePrint1_Click(object sender, EventArgs e)//打印{printDialog1.Document = printDocument1;if (printDialog1.ShowDialog(thi s) == DialogResult.OK)printDocument1.Print();}}}//窗体formAbout.cs的源代码如下using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{public partial class formAbout : Form{public formAbout(){InitializeComponent();}private void button1_Click(object sender, EventArgs e)//关于{ Close();}}}//窗体formFindReplace.cs的源代码如下using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{public partial class formFindReplace : Form{//定义变量Form1 MainForm1;public formFindReplace(Form1 form1){InitializeComponent();MainForm1 = form1;}private void button1_Click(object sender, EventArgs e)//查找下一个{if (textBox1.Text.Length != 0)MainForm1.FindRichTextBoxString(textBox1.Text);elseMessageBox.Show("查找字符串不能为空", "提示", MessageBoxButtons.OK);}private void button2_Click(object sender, EventArgs e)//替换{if (textBox2.Text.Length != 0)MainForm1.ReplaceRichTextBoxString(textBox2.Text);elseMessageBox.Show("查找字符串不能为空", "提示", MessageBoxButtons.OK);}}}实验体会:1.进一步掌握类和对象的基本概念,掌握控件及其属性的设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一实训目的(1)培养分析问题、解决问题的能力(2)培养考虑问题的周密性和逻辑思维能力(3)培养实际动手能力(4)培养C++知识的综合运用能力二实训任务和要求1.图形:带颜色的图形。
(增加选色功能)线粗不同的图形。
(修改线粗的功能)块状图。
(图形的填充色和边线颜色可以不同,由用户选择)等等。
2. 界面工具栏,状态栏,改变鼠标,查看窗口等等3. 编辑在重新打开时和在正常情况下一样画图或者选中图形进行图形编辑。
4. 文件保存EMF文件,导入位图文件成为一个(由位图填充的)矢量矩形等等。
5. 编辑单个图像拖动,改变图形节点位置能够进行基本的图形绘制功能:直线,圆、矩形和多边形;数据保存功能,能够把图形数据保存到文件中;简单的编辑功能:改变线条和填充颜色以及线宽;三实训过程和内容3.1需求分析(1)认识C++编程软件C++是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
C++支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别;C++语言原本不具备面向对象的设计功能,然而随着面向对象编程的概念的提出以及如Java等语言的发展成熟,C++语言也开发出了支持面向对象功能的版本,现在编程者常用的VC++就是一种面向对象的语言;C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。
STL(C++标准模板库,Standard Template Library);随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的native代码低些,但是其安全性与规范性使它大受欢迎。
(2)计算机图形的认识在计算机科学中,图形和图像这两个概念是有区别的:图形一般指用计算机绘制的画面,如直线、圆、圆弧、任意曲线和图表等;图像则是指由输入设备捕捉的实际场景画面或以数字化形式存储的任意画面。
图像是由一些排列的像素组成的,在计算机中的存储格式有BMP、PCX、TIF、GIFD等,一般数据量比较大。
它除了可以表达真实的照片外,也可以表现复杂绘画的某些细节,并具有灵活和富有创造力等特点,而与图像不同,在图形文件中只记录生成图的算法和图上的某些特点,也称矢量图。
在计算机还原时,相邻的特点之间用特定的很多段小直线连接就形成曲线,若曲线是一条封闭的图形,也可靠着色算法来填充颜色。
它最大的优点就是容易进行移动、压缩、旋转和扭曲等变换。
3.2 设计(1)C++程序中的应用程序对象(a)基于窗口的应用程序还是使用MFC比较多,所以主要介绍一下MFC。
CWnd窗口:它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。
CDocument文档,负责内存数据与磁盘的交互。
最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)CView视图:负责内存数据与用户的交互。
包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。
最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。
另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。
CDC设备文本:无论是显示器还是打印机,都是画图给用户看。
这图就抽象为CDC。
CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。
把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。
CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。
CDialog:对话框CWinApp应用程序类:似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。
CGdiObject及子类:用于向设备文本画图。
它们都需要在使用前选进DC。
CPen笔:画线CBrush刷子:填充CFont字体:控制文字输出的字体CBitmap:位图CPalette:调色板CRgn区域:指定一块区域可以用于做特殊处理。
CFile文件:最重要的不外是Open(打开),Read(读入),Write(写)CString字符串:封装了C中的字符数组CPoint点:(x,y)对CRect矩形:(left,top,right,bottom)CSize大小:(cx,cy)对(宽、高)(b) MFC五大群组①General Purpose classes:提供字符串类、数据处理类(如数组与链表),异常情况处理类、文件类等。
②Windows API classes:用来封装Windows API,例如窗口类、对话框类、DC类等。
③Application framework classes:组成应用程序骨干类,即此组类,包括Dcoument/View、消息泵、消息映射、消息传递、动态创建、文件读写等等。
④High level abstractions:包括工具栏、状态栏、拆分窗口、滚动窗口等等。
视觉性UI对象属于此类,例如工具栏CToolBar、状态栏CStatusBar、对话框列CDialogBar。
加强型的View也属此类,如可滚动的ScrollView、以对话框为基础的CFormView、小型文字编辑器CEditView、树状结构的CTreeView,支持RTF文件格式的CRichEditView等等。
⑤operation system extensions:包括OLE、ODBC、DAO、MAPI、WinSock、ISAPI等等。
(2)文档对象、视图对象和框架对象在MFC中引入了文档-视图结构的概念,文档相当于数据容器,视图相当于查看数据的窗口或是和数据发生交互的窗口。
因此一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDocument文档类,CView视类。
在程序运行时CWinApp将创建一个CFrameWnd框架窗口实例,而框架窗口将创建文档模板,然后有文档模板创建文档实例和视实例,并将两者关联。
一般来讲我们只需对文档和视图进行操作,框架的各种行为已经被MFC安排好了而不需人为干预,这也是设计文档-视结构的本意,让我们将注意力放在完成任务上而从界面编写中解放出来。
在应用中一个视图对应一个文档,但一个文档可以包含多个视图。
一个应用中只用一个框架窗口,对多文档界面来讲可能有多个MDI子窗口。
每一个视图都是一个子窗口,在单文档界面中父窗口即是框架窗口,在多文档界面中父窗口为MDI子窗口。
一个多文档应用中可以包含多个文档模板,一个模板定义了一个文档和一个或多个视图之间的对应关系。
同一个文档可以属于多个模板,但一个模板中只允许定义一个文档。
同样一个视图也可以属于多个文档模板。
一般来说用户的输入/输出基本都是通过视图进行,但一些例外的情况下可能需要和框架直接发生作用。
在使用菜单时大家会发现当一个菜单没有进行映射处理时为禁止状态,在多视图的情况下菜单的状态和处理映射是和当前活动视相联系的,这样MFC可以保证视他能正确的接收到各种消息,但有时候也会产生不便。
有一个解决办法就是在框架中对消息进行处理,这样也可以保证当前文档可以通过框架得到当前消息。
在用户进行输入后如何使视的状态得到更新?这个问题在一个文档对应一个视图时是不存在的,但是现在有一个文档对应了两个视图,当在一个视上进行了输入时如何保证另一个视图也得到通知呢?MFC的做法是利用文档来处理的,因为文档管理着当前和它联系的视图,由它来通知各个视图是最合适的。
例如:void CView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint ) void CDocument::UpdateAllViews( CView* pSender, LPARAM lHint = 0L,CObject* pHint = NULL )当文档的UpdateAllViews被调用时和此文档相关的所有视图对象的OnUpdate都会被调用,而参数lHint和pHint都会被传递。
那么还有一个问题:如何在OnUpdate中知道是那个视图发生了改变呢,这就可以利用pHint参数,只要调用者将this指针赋值给参数就可以了,当然完全可以利用该参数传递更复杂的结构。
视图对象的初始化,当一个文档被打开或是新建一个文档时视图的CView::OnInitialUpdate()会被调用,你可以通过重载该函数对视图对象进行初始化,并在结束前调用父类的OnInitialUpdate,因为这样可以保证OnUpdate会被调用。
文档中内容的清除,当文档被关闭时(比如退出或是新建前上一个文档清除)void CDocument::DeleteContents ()会被调用,你可以通过重载该函数来进行清理工作。
在单文档结构中上面两点尤其重要,因为软件运行文档对象和视图对象只会被产生并删除一次。
所以应该将上面两点和C++对象构造和构析分清楚。
文档模板分为两类单文档模板和多文档模板,分别由CSingleDocTemplate和CMultiDocTemplate表示,模板的作用在于记录文档对象,视图对象,框架对象之间的对应关系。
还有一点就是模板可以记录应用程序可以打开的文件的类型,当打开文件时会根据文档模板中的信息选择正确的文档和视图。
当使用者通过视图对象修改了数据时,应该调用GetDocument()->SetModifiedFlag(TRUE)通知文档数据已经被更新,这样在关闭文档时会自动询问用户是否保存数据。
(3)菜单设计(a) 菜单的种类:①生成数据②插入排序③希尔排序④起泡排序⑤快速排序⑥选择排序⑦堆排序⑧归并排序(非递归) ⑨归并排序(递归)⑩退出(b) 工具条的实现例如,24位工具条的实现:①在mainframe.h文件中声明成员变量:CToolBar m_hotToolBar;在 CMainFrame::OnCreate() 中创建工具条,假设你已经创建了一个ToolBar资源和两个工具条位图(Bitmap)资源:IDB_TOOLBAR_COLD 和 IDB_TOOLBAR_HOT,前者表示的是常态按钮,而后者表示的是鼠标移到上面时的状态按钮。
用下面的代码创建工具条:if(!m_hotToolBar.CreateEx(this,TBSTYLE_FLAT|TBSTYLE_LIST,WS_CHILD| WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_hotToolBar.LoadToolBar(IDR_HOTBAR)){TRACE0("Failed to create toolbar\n");return -1; // fail to create}②在CMainFrame::OnCreate()中还要添加如下代码,它们实现对位图资源的存取:// Set up hot bar image lists.CImageList imageList;CBitmap bitmap;// Create and set the normal toolbar image list.bitmap.LoadBitmap(IDB_TOOLBAR_COLD);imageList.Create(21, 20, ILC_COLORDDB|ILC_MASK, 13, 1);imageList.Add(&bitmap, RGB(255,0,255));m_hotToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)imageList.m_hImageList);imageList.Detach();bitmap.Detach();// Create and set the hot toolbar image list.bitmap.LoadBitmap(IDB_TOOLBAR_HOT);imageList.Create(21, 20, ILC_COLORDDB|ILC_MASK, 13, 1);imageList.Add(&bitmap, RGB(255,0,255));m_hotToolBar.SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM)imageList.m_hImageList);imageList.Detach();bitmap.Detach();③添加24位色工具条按钮的消息处理函数,这个工具条有五个按钮,那么在mainframe.h中加入消息处理函数声明:afx_msg void OnBack();afx_msg void OnForward();afx_msg void OnStop();afx_msg void OnRefresh();afx_msg void OnHome();在mainframe.cpp中添加消息处理代码:消息映射ON_COMMAND(ID_BACK, OnBack)ON_COMMAND(ID_FORWARD, OnForward)ON_COMMAND(ID_STOP, OnStop)ON_COMMAND(ID_REFRESH, OnRefresh)ON_COMMAND(ID_HOME, OnHome)以上的结果如下图:图1 工具条示例(4)绘图的实现①窗口消息:WM_CREATE,WM_DESTROY,WM_CLOSE我们创建一个窗口对象的时候,这个窗口对象在创建过程中收到的就是WM_CREATE 消息,对这个消息的处理过程一般用来设置一些显示窗口前的初始化工作,如设置窗口的大小,背景颜色等,WM_DESTROY消息指示窗口即将要被撤消,在这个消息处理过程中,我们就可以做窗口撤消前的一些工作。