华中科技大学C++实验总结报告(图形编辑器)

合集下载

华中科技大学计算机学院C语言课设实验报告参考模板

华中科技大学计算机学院C语言课设实验报告参考模板

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计实验报告题目:科研项目信息管理系统专业:计算机班级:学号:姓名:成绩:指导教师:李开完成日期:2009年10 月20 日科研项目信息管理系统一、系统功能结构模块图二、数据结构设计及其用法说明typedef struct lakey{char name[30];/*团队名称*/int total;/*自然科学基金的科研项目数*/float dudu;/*经费数*/struct lakey *next;}*plakey;/*统计3中用到的数据结构*/typedef struct emmey{char name[30];/*团队名称*/int teacher;/*老师人数*/int harden;/*项目数*/float bizhi;/*比值*/struct emmey *next;}*pemmey;/*统计4中用到的数据结构*/typedef struct kPro{char code[15];/*项目编号*/char sort;/*项目种类*/int aking1;char time[8];/*项目时间*/float dudu;/*项目经费*/int aking2;char beiler[15];/*负责人*/int aking3;char keynoName[30];/*所在团队名称*/struct kPro *next;}harden,*pHarden;typedef struct Komo{int teacher;/*老师人数*/char name[20];/*院系名称*/int student;/*学生人数*/float bizhi;/*二者比值*/struct Komo *next;}*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/typedef struct kTea{char name[30];/*团队名称*/char beiler[15];/*负责人*/int stuNum;/*学生人数*/int aking2;int coco;/*老师人数*/char colName[20];/*所在院系的名称*/int aking1;struct kTea *next;pHarden child;}keyno,*pKeyno;typedef struct edward{char name[20];/*院系名称*/int totalnum;/*项目总数*/int num973;/*973项目数*/int num863;/*863项目数*/float amount;/*经费数*/struct edward *next;}*pedward;/*统计2中用到的数据结构*/typedef struct kCol{char name[20];/*院系名称*/int aking;char beiler[15];/*院系负责人*/struct kCol *next;char call[15];/*负责人电话号码*/pKeyno child;}kekey,*pKekey;三、程序结构四、各模块的功能1、pKekey Charge(pKekey alpha)/*这个函数将文件中的内容写入链表中*/2、pKekey temption(int aking,int aking1,int aking2,pKekey item1,pKeynoitem2,pHarden item3,pKekey alpha,int sort)/*这个函数用于向指定位置(aking)添加指定节点(item),alpha是头结点。

华中科技大学c语言课程设计实验报告_图文

华中科技大学c语言课程设计实验报告_图文
struct login_widget {
GtkWidget *window; //主窗体 GtkWidget *label_tips; //用于信息提示的标签 GtkWidget *button_login; //两个按钮,一个点击后登录,一个点击后退出 GtkWidget *button_exit; GtkWidget *entry_username; //两个文本框,用于输入用户名和密码 GtkWidget *entry_pwd; GtkWidget *label_username; // 两 个 标 签 用 于 显 示 username 文 本 框 和 password 文本框提示 GtkWidget *label_pwd; GtkWidget *vbox; //垂直布局盒子,包含以下三个水平布局盒子 GtkWidget *hbox_username; //包含用户名提示标签和用户名文本框,下面 的 HBOX 作用类似 GtkWidget *hbox_pwd; GtkWidget *hbox_button; } wgt;
/*treeview 中对应 treeiter*/
} MEMBER_NODE;
中文字段名 姓名 身份证号 工作单位 性别 年龄 职称 成果排名 所属成果名称
类型及长度 char[20] char[18] char[30] char int char[15] int char[40]
number name dept_name sex age title rank achs_name
华中科技大学计算机科学与技术学院
《C 语言程序设计》课程设计
基础部分实验报告 题目: 科技成果信息管理系统
专业: 班级: 学号: 姓名: 成绩:
计算机科学与技术 1204

华中科技大学C++实验总结报告(图形编辑器)

华中科技大学C++实验总结报告(图形编辑器)

C++实验总结报告研究课题:图形编辑器学校:华中科技大学院系:班级:姓名:指导老师:一、实验目的1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验学习如何对各类图元的属性和方法进行合理的封装2.学习Microsoft的Visual C++编程工具3.掌握MFC的相关知识4.掌握基本的文件保存、读取以及操作封装技术二、实验目的设计一个简单的图形编辑器三、实验所用仪器、设备计算机:PentiumIII 800 以上256M内存操作系统:Windows 2000/XP开发集成环境:Visual C++ 6.0四、软件功能简介(注:此软件是从网上下载得来)该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。

编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图形,可插入文字,可以修改线条的线型、颜色等基本属性。

五、部分代码分析1.直线类代码:class CCreateLine : public CCommand{private:Position m_begin; // 直线的起点Position m_end;// 直线的终点public:CCreateLine() ;~CCreateLine() ;int GetType();int OnLButtonDown(UINT nFlags, const Position& pos) ;int OnMouseMove(UINT nFlags, const Position& pos) ;int OnRButtonDown(UINT nFlags, const Position& pos) ;int Cancel() ;} ;学习C++我们最需要理解的就是它面向对象的设计思想。

这种思想可以在类和对象上得到充分的体现。

类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。

华中科技大学自动化学院C语言课设实验报告

华中科技大学自动化学院C语言课设实验报告

华中科技大学自动化学院《C语言程序设计》课程设计实验报告题目:南海军演模拟系统专业:测控班级: 1301学号: U201314492 U201314494姓名:柳焜剑杨渊超成绩:指导教师:周凯波完成日期:2014年11 月 1 日一系统功能结构模块及程序结构二各模块的功能1、maine();/*这个函数将第一张欢迎图片展示出来*/2、void init();/*画图初始化*/3、process0();process00();process01();process02();process03();process03A();process03B();/*实现各个界面的功能,通过if语句来执行不同的界面切换*/4、abc();form();bfjj1();bfjj2();bfjj3();help();/*画图函数以及返回mouse函数,通过返回到达不同界面下的不同按钮效果*/5、end/*结束函数 */6、outhz ()/*汉字和输入函数*7、menue();/*菜单函数,显示主菜单,四个按钮*/8 ……三试验结果1、主菜单页面2、军舰指导3、军演开始一、体会这是我们第一次做这么大型的且比较复杂的一个C程序,从暑假开始边看书边慢慢尝试到如今全部做出来花费了许多时间与精力。

以前接触到的C程序设计都是最简单、最基本的编程,就连最后的期末考试也只是一些小程序,并不像课程设计这样庞大复杂。

小程序是考察我们对基本概念的熟识,而这种大程序则是考察了我们对整体构架的设计以及各种小程序的拼接,看似不难,实则会遇到许多意想不到的困难,当然,这过程当中我们学到了许多。

后来经过网上的搜索资料以及和其他同学的讨论,对这个军演系统进行一些列分块,拆成几个部分,然后再逐个突破,这样显得有条理且方便。

接下来是真正开始动手写程序,随之而来的是一些列的问题,其中最困扰我的是内存模式。

在所有内核做好之后,接下来就是界面的问题,最开始的时候我考虑做图形界面,但是由于时间比较紧迫,不得不放弃,只好做了一个简易菜单,菜单设计容易,可是将界面和程序结合起来却又是一个难题。

华中科技大学汇编实验报告3

华中科技大学汇编实验报告3

课程实验报告课程名称:汇编语言程序设计实验实验名称:实验三程序执行时间与代码长度优化实验时间: 2016-4-5,14:00-17:30 实验地点:南一楼804室55号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813 姓名:唐礼威同组学生:无报告日期:2016年 4 月6日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。

除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!学生签名:日期:成绩评定指导教师签字:日期:目录1实验目的与要求 (1)2实验内容 (1)3实验过程 (2)3.1任务1 (2)3.1.1设计思想及存储单元分配 (2)3.1.2流程图 (3)3.1.3源程序 (3)3.1.4实验步骤 (7)3.1.5实验记录 (8)3.2任务2 (8)3.2.1设计思想及存储单元分配 (8)3.2.2流程图 (8)3.2.3源程序 (8)3.2.4实验步骤 (12)3.2.5实验记录 (12)3.3任务3 (13)3.3.1设计思想及存储单元分配 (13)3.3.2流程图 (13)3.3.3源程序 (14)3.3.4实验步骤 (14)3.3.5实验记录 (14)4体会 (14)参考文献 (15)1实验目的与要求(1) 熟悉汇编语言指令的特点,掌握代码优化的基本方法;(2) 理解高级语言程序与汇编语言程序之间的对应关系。

2实验内容任务1. 观察多重循环对CPU计算能力消耗的影响若有m个用户在同一台电脑上排队使用实验二的程序,想要查询“wangwu”这个学生的平均成绩,那就相当于将实验二的程序执行了m次。

为了观察从第一个用户开始进入查询至第m个用户查到结果之间到底延迟了多少时间,我们让实验二的功能二和功能三的代码重复执行m次,通过计算这m次循环执行前和执行后的时间差,来感受其影响。

华中科技大学计算机图形学实验报告——画直线、日地月模型

华中科技大学计算机图形学实验报告——画直线、日地月模型

华中科技大学计算机图形学实验报告——画直线、日地月模型计算机图形学基础实验报告专业:班级:姓名:学号:日期:OpenGL简介(1)OpenGL作为一个性能优越的图形应用程序设计界面(API),它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。

它具有以下功能。

1. 模型绘制2. 模型观察在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。

3. 颜色模式的指定OpenGL应用了一些专门的函数来指定三维模型的颜色。

4. 光照应用用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。

5. 图象效果增强OpenGL提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和雾化来增强图象的效果。

6. 位图和图象处理OpenGL还提供了专门对位图和图象进行操作的函数。

7. 纹理映射8. 实时动画9. 交互技术应用软件OpenGL窗口系统操作系统图形硬件图1.1 OpenGL图形处理系统的层次结构(2)OpenGL的操作步骤在OpenGL中进行的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤如下:1. 根据基本图形单元建立景物模型,得到景物模型的数学描述(OpenGL 中把点、线、多边形、图像和位图都作为基本图形单元);2. 把景物模型放在三维空间中的合适的位置,并且设置视点(Viewpoint)以观察所感兴趣的景观;3. 计算模型中所有物体的色彩,同时确定光照条件、纹理粘贴方式等;4. 把景物模型的数学描述及其色彩信息转换至计算机屏幕上的像素,这个过程也就是光栅化(rasterization)。

在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。

另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对象素数据进行操作。

(3)OpenGL的组成OpenGL不是一种编程语言,而是一种API(应用程序编程接口),它实际上是一种图形与硬件的接口,包括了多个图形函数。

华中科技大学C语言课程设计实验报告及源代码

华中科技大学C语言课程设计实验报告及源代码

课程设计报告题目:航班时刻表信息查询系统课程名称: C语言程序设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院毕业设计[论文]任务书姓名:班号:专业:计算机科学与技术同组姓名:指导教师:一、课题名称航班时刻表查询系统二、主要内容建立航班时刻表查询系统,提供创建、编辑和查询等基本功能和服务。

三、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。

四、系统功能系统主要提供航班信息的快速查询、检索和统计。

应该具有①按航班、按机场等查询信息的功能;②模糊条件检索航班信息;③统计航班座次情况等。

五、系统数据系统主要涉及“航班”、“经停机场”和“经停航班” 3类信息。

六、基本要求1)、只能使用C语言,源程序要有适当的注释,使程序容易阅读;2)、要有用户界面,要求至少采用教材p215-p216类似的简易菜单,鼓励采用文本菜单界面甚至采用图形菜单界面;3)、必须使用结构和十字交叉链表等数据结构;4)、使用文件保存数据;5)、至少输出一份报表(屏幕输出即可),鼓励自行增加新功能;6)、设计测试的模拟数据,完成系统测试;7)、写实验报告(要求正规打印,A4幅面)。

前言本C语言程序课程设计报告是由wt编写的。

本课程设计主要内容包括,内容中文摘要、Abstract(英文摘要)、正文、致谢、参考文献以及附录,其中: 正文主要内容有:一、系统功能模块,主要介绍该课程设计的航班时刻表查询系统的组成功能模块有哪些;二、数据结构设计及用法说明,主要是介绍说明本航班时刻表查询系统设计时用到的一些数据信息结构的设计思路和用法;三、程序结构流程图,用流程图的方式解释本课程设计中一些功能函数的设计思路和实现方法;四、各模块的功能,主要展示了本系统最终功能的解释说明;五、试验结果,主要展示了本航班时刻表查询系统最终功能的实现效果;六、体会,讲述作者在制作过程中的一些心得体会。

华中科技大学计算机图形学实验报告解析

华中科技大学计算机图形学实验报告解析

课程实验报告课程名称:计算机图形学专业班级:学号:姓名:指导教师:报告日期:2015-11-11计算机科学与技术学院实验一:分形图形绘制一、实验目的(标题四号黑体)(1)理解OpenGL 中glut 程序框架;(2)掌握二维基本图形绘制算法;(3)利用二维基本图形绘制算法,扩展对其他复杂图形的绘制理解。

二、实验内容1、实验算法(a)中点Bresenham算法画线a)输入直线的两个端点:端点、端点。

必要时交换A、B两点的坐标,使A点不在B点的右边。

令,,,b)讨论直线的斜率的大小及正负,分四种情况分别逐点画线:i.当最大位移方向为x轴。

构建判别公式:其中,初值。

当时,,。

当时,。

ii.当最大位移方向为x轴。

构建判别公式:其中,初值。

当时,,。

当时,。

iii.当最大位移方向为x轴。

构建判别公式:其中,初值。

当时,,。

当时,。

iv.当最大位移方向为x轴。

构建判别公式:其中,初值。

当时,,。

当时,。

c)当直线没有画完时重复b)步骤(b)绘制分形三角形a)输入三角形的三个端点:端点、端点、端点、递归层数n。

b)连接A、B、C三点。

c)当时,连接输入三角形三边的中点,将分割得到的四个三角形中包含顶点的三个、作为输入参数,递归调用本步骤。

2、源程序#include <iostream>#include <math.h>#include <GL/glut.h>#define ROUND(a) ((int )(a+0.5)) //求某个数的四舍五入值using namespace std;//全局变量声明:三角形三顶点及递归层数GLint Global_xa, Global_ya, Global_xb, Global_yb, Global_xc, Global_yc;int Global_n;void init(void){glClearColor(1.0, 1.0, 1.0, 0.0);//指定窗口的背景色为白色glMatrixMode(GL_PROJECTION);//对投影矩阵进行操作gluOrtho2D(0.0, 600.0, 0.0, 600.0);//使用正投影}//绘制直线的函数void lineDDA(GLint xa, GLint ya, GLint xb, GLint yb){GLint dx = xb - xa, dy = yb - ya; //计算x,y方向的跨距int steps, k; //定义绘制直线像素点的步数float xIcre, yIcre, x = xa, y = ya; //定义步长的增量//取X,Y方向跨距较大的值为步数if (abs(dx) > abs(dy)) steps = abs(dx);else steps = abs(dy);//根据步数来求步长增量xIcre = dx / (float)steps;yIcre = dy / (float)steps;//从起点开始绘制像素点for (k = 0; k <= steps; k++){glBegin(GL_POINTS);glVertex2f(x, y);glEnd();x += xIcre;y += yIcre;}}//绘制直线的函数(中点Bresenham算法)void lineBre(GLint xa, GLint ya, GLint xb, GLint yb){GLint dx, dy, d, UpIncre, DownIncre, x, y; //统一规定UpIncre为能使非最大位移方向坐标改变时的Di增量//统一规定DownIncre为不能使非最大位移方向坐标改变时的Di增量if (xa > xb) {/* 确保a点不在b点的右方*/x = xb; xb = xa; xa = x;y = yb; yb = ya; ya = y;}x = xa; y = ya; //计算画线起点dx = xb - xa; dy = yb - ya; //计算dx和dyif (abs(dx) >= abs(dy)){/* 考虑|k|<=1的情况*/if (dy >= 0) {/* 考虑k>=0的情况*/d = dx - 2 * dy; //计算D0UpIncre = 2 * dx - 2 * dy; DownIncre = -2 * dy; //计算UpIncre和DownIncrewhile (x <= xb) {/* 从线起点画到线终点*/glBegin(GL_POINTS);glVertex2i(x, y); // 在(x,y)位置画点glEnd();x++; //移动下一画点位置的x轴坐标if (d < 0) {/* 考虑Di<0的情况*/y++; //移动下一画点位置的y轴坐标d += UpIncre; //迭代d}else {/* 考虑Di>=0的情况*/d += DownIncre; //迭代d}}}else {/* 考虑k<0的情况*/d = -dx - 2 * dy; //计算D0UpIncre = -2 * dx - 2 * dy; DownIncre = -2 * dy; //计算UpIncre和DownIncrewhile (x <= xb) {/* 从线起点画到线终点*/glBegin(GL_POINTS);glVertex2i(x, y); // 在(x,y)位置画点glEnd();x++; //移动下一画点位置的x轴坐标if (d > 0) {/* 考虑Di>0的情况*/y--; //移动下一画点位置的y轴坐标d += UpIncre; //迭代d}else {/* 考虑Di>=0的情况*/d += DownIncre; //迭代d}}}}else {/* 考虑|k|>1的情况*/if (dy > 0) {/* 考虑k>0的情况*/d = 2 * dx - dy; //计算D0UpIncre = 2 * dx - 2 * dy; DownIncre = 2 * dx; //计算UpIncre和DownIncrewhile (y <= yb) {/* 从线起点画到线终点*/glBegin(GL_POINTS);glVertex2i(x, y); // 在(x,y)位置画点glEnd();y++; //移动下一画点位置的y轴坐标if (d > 0) {/* 考虑Di>0的情况*/x++; //移动下一画点位置的x轴坐标d += UpIncre; //迭代d}else {/* 考虑Di>=0的情况*/d += DownIncre; //迭代d}}}else {/* 考虑k<0的情况*/d = -2 * dx - dy; //计算D0UpIncre = -2 * dx - 2 * dy; DownIncre = -2 * dx; //计算UpIncre和DownIncrewhile (y >= yb) {/* 从线起点画到线终点*/glBegin(GL_POINTS);glVertex2i(x, y); // 在(x,y)位置画点glEnd();y--; //移动下一画点位置的y轴坐标if (d < 0) {/* 考虑Di>0的情况*/x++; //移动下一画点位置的x轴坐标d += UpIncre; //迭代d}else {/* 考虑Di>=0的情况*/d += DownIncre; //迭代d}}}}}void Triangle(GLint xa, GLint ya, GLint xb, GLint yb, GLint xc, GLint yc){// 绘制三角形// xa,ya;xb,yb;xc,yc;是三角形的三个顶点lineBre(xa, ya, xb, yb);lineBre(xb, yb, xc, yc);lineBre(xa, ya, xc, yc);}void Fractal(GLint xa, GLint ya, GLint xb, GLint yb, GLint xc, GLint yc, int n){GLint xaa, yaa, xbb, ybb, xcc, ycc; //获取三边中点的坐标xaa = (xb + xc) / 2;yaa = (yb + yc) / 2;xbb = (xa + xc) / 2;ybb = (ya + yc) / 2;xcc = (xa + xb) / 2;ycc = (ya + yb) / 2;if (n >= 1) {//递归Fractal(xa, ya, xbb, ybb, xcc, ycc, n - 1);Fractal(xb, yb, xaa, yaa, xcc, ycc, n - 1);Fractal(xc, yc, xaa, yaa, xbb, ybb, n - 1);Triangle(xaa, yaa, xbb, ybb, xcc, ycc); //连接三边中点}}void Fractal_Call(){// 绘制分形三角形// xa,ya;xb,yb;xc,yc;是三角形的初始顶点// n 是三角形的递归层数glClear(GL_COLOR_BUFFER_BIT);//设定颜色缓存中的值glColor3f(1.0, 0.0, 0.0); //设置直线颜色为红色Triangle(Global_xa, Global_ya, Global_xb, Global_yb, Global_xc, Global_yc);//连接三角形顶点Fractal(Global_xa, Global_ya, Global_xb, Global_yb, Global_xc, Global_yc, Global_n);//递归生成分形图形glFlush(); //立即执行}int main(int argc, char ** argv){glutInit(&argc, argv);//初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(600, 600); //设置窗口的尺寸glutInitWindowPosition(100, 100); //设置窗口的位置glutCreateWindow("分形图形绘制");cout << "分形图形绘制" << endl;//输入直线的起点坐标cout << "please input the first point(xa,ya) of the Triangle(Integer that range from 0 to 600): " << endl;cin >> Global_xa;cin >> Global_ya;//输入直线的终点坐标cout << "please input the second point(xb,yb) of the Triangle(Integer range from 0 to 600): " << endl;cin >> Global_xb;cin >> Global_yb;//输入直线的终点坐标cout << "please input the last point(xc,yc) of the Triangle(Integer range from 0 to 600): " << endl;cin >> Global_xc;cin >> Global_yc;//输入直线的终点坐标cout << "please input the recursion layer(n) of the Triangle(Integer range greater than -1): " << endl;cin >> Global_n;init(); //初始化glutDisplayFunc(Fractal_Call); //执行画图程序glutMainLoop(); //启动主GLUT事件处理循环}3、实验结果图3-1 DDA算法绘制直线结果(k=1)图3-2 DDA算法绘制直线结果(k>1)图3-3 DDA算法绘制直线结果(k<-1)图3-4 DDA算法绘制直线结果(0>k>-1)图3-5 四层分形斜三角形图3-6 六层分形正三角形三、实验心得这次实验真的算是一次比较特殊的体验,因为这是我第一次在程序中完全地依赖数学编写程序。

C实训总结报告doc

C实训总结报告doc
学习C++语言不能停留在学习它的语法规那么,而是利用学到的知识编写C++语言程序,解决实际问题。即把C++语言作为工具,描述解决实际问题的步骤,由运算机帮忙咱们解题。只有通过上机才能查验自己是不是把握C++语言、自己编写的程序是不是能够正确地解题。
自己编好程序上机调试运行时,可பைடு நூலகம்有很多你想不到的情形发生,通过解决这些问题,能够慢慢提高自己对C++语言的明白得和程序开发能力。
1.加深对课堂教学内容的明白得
课堂上要教学许多关于C++语言的语法规那么,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。但是要利用C++语言那个工具解决实际问题,又必需把握它。通过量次上机练习,关于语法知识有了感性的熟悉,加深对它的明白得,在明白得的基础上就会自但是然地把握C++语言的语法规定。关于一些内容自己以为在课堂上听懂了,但上机实践中会发觉原先明白得的误差。
尤其是碰到了自己那时不明白如何编写的C++语言题目如何编写,通过自己的学习和同同窗的交流后,试编和改错,最后能够顺利的编写出来,带来的也有成绩感。并增加了咱们对C++语言的爱好和学好C++语言的信心。
与同窗们交流的进程中,了解了程序的多种解决方式,明白了不同编写方式有不同的特点。总结C++语言实训的几个重要作用:
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。你以为万无一失的程序,事实上机运行时可能不断显现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,可是运行结果显然是错误的。开发环境所提供的编译系统无法发觉这种程序逻辑错误,只能靠自己的上机体会分析判定错误所在。

科技成果信息管理系统C语言课程设计实验报告

科技成果信息管理系统C语言课程设计实验报告

科技成果信息管理系统C语言课程设计实验报告华中科技大学计算机科学与技术学院《C语言程序设计》课程设计基础部分实验报告题目:科技成果信息管理系统专业:计算机科学与技术目录一、系统功能结构设计 (1)二、数据结构设计 (1)三、程序结构 (4)四、函数原型及功能 (9)五、试验结果 (13)六、实验体会 (29)七、附录1:参考文献 (31)八、附录2:程序清单 (31)一、系统功能结构设计航科技成果信息管理系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。

如下图所示:二、数据结构设计1.单位信息链结点结构(DEPT_NODE)及用法typedef struct dept_node{char number[8]; /*单位编号*/char name[30]; /*单位名称*/char PIC[20]; /*负责人*/struct dept_node *next; /*指向下一结点*/struct archs_node *achs; /*指向科技成果信息链结点的指针*/GtkTreeIter iter; /*treeview中对应treeiter*/} DEPT_NODE;2.科技成果信息链结点结构(ACHS_NODE)及用法typedef struct achs_node{char number[12]; /*成果编号*/char name[50]; /*成果名称*/char field[20]; /*所属技术领域*/char first_dept_name[30]; /*第一完成单位*/char first_dept_number[8]; /*第一完成单位编号*/char first_member_name[20]; /*第一完成人*/char award_name[30]; /*获奖名称*/char award_level[10]; /*获奖档次*/char award_grade[10]; /*获奖等级*/struct arhs_node *next; /*指向下一节点*/struct member_node *members; /*指向完成人员信息结点的指*/GtkTreeIter iter; /*treeview中对应treeiter*/ } ACHS_NODE;3.完成人员信息链结点结构(MEMBER_NODE)及用法typedef struct member_node{char number[18]; /*身份证号*/char name[20]; /*姓名*/char dept_name[30]; /*工作单位*/char sex[4]; /*性别*/int age; /*年龄*/char title[15]; /*职称*/int rank; /*成果排名*/char achs_name[40]; /*所属成果名称*/struct member_node *next;/*指向下一个结点*/GtkTreeIter iter; /*treeview中对应treeiter*/ } MEMBER_NODE;4.三方向的十字交叉链表结构5.登陆窗体控件结构体(wgt)及用法struct login_widget{GtkWidget *window; //主窗体GtkWidget *label_tips; //用于信息提示的标签GtkWidget *button_login; //两个按钮,一个点击后登录,一个点击后退出GtkWidget *button_exit;GtkWidget *entry_username; //两个文本框,用于输入用户名和密码GtkWidget *entry_pwd;GtkWidget *label_username; //两个标签用于显示username文本框和password文本框提示GtkWidget *label_pwd;GtkWidget *vbox; //垂直布局盒子,包含以下三个水平布局盒子GtkWidget *hbox_username; //包含用户名提示标签和用户名文本框,下面的HBOX作用类似GtkWidget *hbox_pwd;GtkWidget *hbox_button;} wgt;说明:将登陆窗体相关控件独立成一个结构体6.指向3种节点的指针联合及用法typedef union nodep{struct dept_node *dept;struct achs_node *achs;struct member_node *member;} nodep;说明:用于3种结构都会用到但不会同时用到的情形7.两个传递参数的结构及其用法struct nodecreate{GtkWidget *window;GtkWidget *entry[9];nodep unp;int type;};struct query_judge{GtkWidget *entry;int flag;};说明:GTK信号连接g_signal_connected将函数与信号链接后之内传递一个参数给函数,所以定义这两个结构分别将几个参数结合在一起传递三、程序结构1.主程序运行流程2.数据保存流程3.添加流程4.单位查询流程5.统计50开始Y四、函数原型及功能(所有GtkWidget *button参数均为与消息链接用)1.登陆模块//功能:登录框初始化函数//输入参数://返回值:无void init_login_widget()//功能:登录验证函数,点击login按钮时调用//输入参数://返回值:无void login(GtkWidget *widget,gpointer data)2.图形界面模块/**初始化部分变量,再依次调用各函数初始化界面各部分*/int main( int argc, char *argv[])/**初始化菜单栏*/void init_menubar(GtkWidget *menubar)/**初始化目录*/void create_view_and_model (void)/**初始化显示栏*/void init_show(GtkWidget *list)/**改变状态栏及显示栏*/void on_changed(GtkWidget *widget, gpointer statusbar)//功能:将选中的节点信息在显示栏中显示出来//输入参数:iter//返回值:无int Show_Node(GtkTreeIter iter)//值传递不影响selectediter/**对应3个节点显示的3个函数,返回对应GtkListStore*/GtkListStore *Show_Dept(char *name);GtkListStore *Show_Achs(char *name,char *P_name);GtkListStore *Show_Member(char *name,char *P_name,char *PP_name);3.文件模块//功能:读取数据文件//输入参数://返回值:re 的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadData(GtkWidget *button)//功能:读取数据文件中数据到链表中//输入参数:phead 单位节点头指针的地址//返回值:re 的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadList(DEPT_NODE **phead)//功能:将链表中节点添加到左侧树状列表中//输入参数://返回值:void rebuildtree()//功能:存储数据文件//输入参数://返回值:flag 的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveData(GtkWidget *button)//功能:将链表中数据存储在数据文件中//输入参数:phead单位节点头指针//返回值:flag 的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveList(DEPT_NODE *phead)//功能:推出前提示保存//输入参数://返回值:void quit_save(GtkWidget *button)4.查询模块//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget *button,int type)//功能:查询学院//输入参数:in 包含iter和名称的结构//返回值:无void Query_Dept(GtkWidget *button,struct query_judge *in)//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget *button,int type)//功能:查询完成人员//输入参数:in 包含iter和名称的结构//返回值:无void Query_Member(GtkWidget *button,struct query_judge *in)//功能:展开并跳转至指定iter//输入参数:iter treeview中的一个目标iter//返回值:无void expand_select(GtkTreeIter iter)//功能:按名称搜索单位//输入参数:D_name 单位名称//返回值:单位节点指针DEPT_NODE *DEPT_search(char *D_name)//功能:按名称搜索科技成果节点//输入参数:A_name 科技成果节点名称,ACHS 所在学院头科技成果节点指针//返回值:科技成果节点节点指针ACHS_NODE *ACHS_search(char *A_name,ACHS_NODE *ACHS)//功能:按名称搜索完成人员节点//输入参数:M_name 完成人员节点名称,ACHS 所属科技成果头完成人员节点指针//返回值:完成人员节点节点指针MEMBER_NODE*MEMBER_search(char*M_name,MEMBER_NODE*MEMBER)5.添加模块//功能:弹出一个输入框//输入参数:type对应枚举的几种类型//返回值:无void entry_info(GtkWidget *button,int type)//功能:添加3种节点统一函数,由entry_info确定按钮调用//输入参数://返回值:无void Add_node(GtkWidget *button,struct nodecreate *nodec)//功能:插入科技成果节点函数,由Add_Node中情况3调用//输入参数:pNew 指向新节点的指针//返回值:对应单位节点指针DEPT_NODE *insert_ACHS(ACHS_NODE *pNew)//功能:插入完成人员节点函数,由Add_Node中情况4调用//输入参数:pNew 指向新节点的指针//返回值:对应科技成果节点指针ACHS_NODE *insert_MEMBER(MEMBER_NODE *pNew)6.删除模块//功能:删除3种节点统一函数,由“删除”按钮调用//输入参数://返回值:无void Del_Node(GtkWidget *button)//功能:删除单位节点,由Del_Node函数case 2调用//输入参数:name 单位名称//返回值:int 1为有错,0为正常int Del_Dept(char *name)//功能:删除科技成果节点,由Del_Node函数case 2调用//输入参数:name 科技成果名称,P_name 对应单位名称//返回值:int 1为有错,0为正常int Del_Achs(char *name,char *P_name)//功能:删除完成人员节点,由Del_Node函数case 4调用//输入参数:name 完成人员名称,P_name 对应科技成果名称,PP_name 对应单位名称//返回值:int 1为有错,0为正常int Del_Member(char *name,char *P_name,char *PP_name)7.编辑模块//功能:弹出一个编辑框//输入参数://返回值:无int Edit_info(GtkWidget *button)//功能:编辑节点//输入参数://返回值:无void Edit_Node(GtkWidget *button,struct nodecreate *nodec)8.统计模块//功能:弹出一个统计框,由传入参数设置具体内容//输入参数:title 统计框标题,col1 第一列标题,col2 第二列标题,in 传入的model//返回值:无void Statis_info(char *title,char *col1,char *col2,GtkListStore *in)//功能:统计各单位科技成果数量,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func1(GtkWidget *button)//功能:统计各单位完成人员成果排名,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func2(GtkWidget *button)//功能:统计所有50岁以下第一完成人,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func3(GtkWidget *button)9.帮助模块//功能:弹出软件信息及作者信息//输入参数://返回值:无void help_about(GtkWidget *button)五、试验结果编译环境:Ubuntulinux64位MingwGcc(源代码配置好后可跨平台编译)GTK版本:GTK+2.41开发IDE:Codeblocks 12.111.系统登陆输对自动进入输错显示错误2.登陆成功进入主界面3.全屏模式4.读取数据(标准gnome菜单栏在最上面)5.读取成功点击相应节点右侧显示相关信息6.添加单位(添加成功提示)9.添加错误返回信息10.编辑结点(选中节点后点击左下角编辑按钮)更改生效11.删除节点弹出确认框删除成功12.查询单位查询成功,左侧已跳转至并展开机械学院13.查询科技成果查询成功,左侧已跳转至并展开网络磁盘阵列未查询到时弹出提示14.查询完成人员从头查询,跳转至并展开第一个张江点击查询,跳转至并展开第二个张江15.统计各单位科技成果总数及各类成果数16.统计各单位成果排名17.统计50岁以下第一完成人18.软件信息及作者信息19.退出前提示保存六、实验体会首先我看了一下实验书上的编程规范和几个基本模块的实现思想,但当我开始做的时候我发现光用face.c自己看不懂文本菜单操作肯定会有很多问题的,于是我想同样是学,不如直接学图形界面的开发。

随机过程上机实验报告-华中科技大学--HUST

随机过程上机实验报告-华中科技大学--HUST
流程图:
6、/*函数功能,计算任意分布的随机过程的均值
*/
double CMyRand::Ex(void)
{
double Ex = 0;
//添加均值计算代码
int i;
double sum=0;
for(i=0;i<500;i++)
sum+=AverageRandom(0,2);
Ex=sum/i;
return Ex;
Miu为均值,sigma为标准差
*/
double CMyRand::NormalRandom(double miu, double sigma, double min, double max)
{
double dResult;
dResult = 0;
int i,n;
double sum=0.0;
n=200;
我们在示波器界面上点击一个按钮它就会执行这个按钮所对应功能比如点击正态分布它就会调用crandomdlg中的对应凼数在调用cmyrand中的产生正态分布的凼数再将结果送到cscope类中迚行显示最后我们可以在示波器上看到图形

班级:通信1301班
姓名:郭世康
学号:U201313639
指导教师:卢正新
dResult=dResult*(max-min)+min;//将0~1之间的均匀分布通过乘以倍数放大到到min~max
return dResult;
}
输入参数为min,max,即均匀分布的范围。输出参数为dResult,即为随机序列。
流程图:
3、
/*函数功能,根据大数定律,在min到max范围内产生正态分布的随机数
流程图:

CC语言实验总结与反思(通用3篇)

CC语言实验总结与反思(通用3篇)

CC语言实验总结与反思(通用3篇)(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作报告、合同协议、心得体会、条据书信、规章制度、礼仪常识、自我介绍、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!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 work reports, contract agreements, personal experiences, normative letters, rules and regulations, etiquette knowledge, self introduction, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!CC语言实验总结与反思(通用3篇)C语言实验总结与反思(通用3篇)CC语言实验总结与反思篇1一、需求分析:1.需求概述设计一个员工信息管理系统,使其能够提供以下功能:(1)员工信息录入功能(2)员工信息浏览功能(3)职工信息删除功能(4)职工信息修改功能(5)员工信息查询功能2.需求说明(1)职工信息包括:职工号、姓名、性别、出生年份、学历职务、工资、住址、电话号码要求不重复。

华中科技大学汇编实验报告5

华中科技大学汇编实验报告5

课程实验报告课程名称:汇编语言程序设计实验实验名称:实验五汇编语言与C语言混合编程实验时间: 2016-4-19,14:00-17:30 实验地点:南一楼804室74号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813 姓名:唐礼威同组学生:无报告日期:2016年4月23日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。

除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!学生签名:日期:成绩评定指导教师签字:日期:目录1实验目的与要求 (1)2实验内容 (1)3实验过程 (2)3.1任务1 (2)3.1.1设计思想及存储单元分配 (2)3.1.2流程图 (3)3.1.3源程序 (3)3.1.4实验步骤 (6)3.1.5实验记录 (6)3.2任务2 (7)3.2.1设计思想及存储单元分配 (7)3.2.2流程图 (8)3.2.3源程序 (8)3.2.4实验步骤 (11)3.2.5实验记录 (11)4体会 (11)参考文献 (12)1实验目的与要求(1)掌握汇编语言程序与C语言程序混合编程的方法;(2)熟悉C编译器的基本优化方法;(3)了解C语言编译器的命名方法,主、子程序之间参数传递的机制。

2实验内容任务1:在C 语言程序中嵌入汇编语言指令语句序列对于实验二的程序进行改造,主控程序、以及输入输出等功能用C语言实现,学生姓名搜索和成绩计算用C程序中嵌入汇编指令语句序列的方式实现。

任务2:在C语言程序中调用汇编语言实现的函数对于实验二的程序进行改造,主控程序、以及输入输出等功能用C语言实现,学生姓名搜索和成绩计算用独立的汇编语言子程序的方式实现;在C语言程序中调用汇编语言子程序。

要求:(1)在不同的C语言开发环境中实现与汇编语言程序的混合编程,其操作方法有可能是不同的。

C 实验四总结报告

C 实验四总结报告

实验十常用控件(1)实验目的和要求(1)创建一个默认的对话框应用程序Ex_Ctrls,如图2.1所示。

(2)设计一个如图2.2所示的“课程信息”对话框。

图2.1 Ex_Ctrls对话框图2.2 “课程信息”对话框(3)实现功能:单击图2.1中的“课程信息”按钮,弹出“学生基本信息”对话框,单击“添加”按钮,对话框内容显示在图2.1中的列表框中。

实验准备和说明(1)具备知识:静态控件、按钮、编辑框、旋转按钮控件、列表框和组合框控件。

(2)创建本次实验工作文件夹“…\Visual C++程序\实验\实验2”。

实验内容和步骤1.启动Visual C++ 6.0打开计算机,启动Visual C++ 6.0系统。

2.创建一个默认的对话框应用程序Ex_Ctrls①选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizard (exe),在工程框中输入Ex_Ctrls,并将工程文件夹定位到“…\Visual C++程序\实验\实验2”。

②单击“确定”按钮,在出现的Step 1对话框中选择“基本对话(框)”应用程序类型,单击“完成”按钮。

③在对话框编辑器中,单击对话框工具栏上的切换网格按钮,显示对话框网格,将对话框标题改为“使用控件”。

④调整对话框的大小,删除对话框中间的“TODO: 在这里设置对话控制。

”静态文本控件和“确定”按钮控件,将“取消”按钮标题改为“退出”,并移至对话框的下方。

⑤向对话框中添加组框(Group)控件,标题设为“添加”,然后调整其大小和位置。

⑥添加一个按钮,标题设为“课程信息”,ID设为IDC_BUTTON_COURSE。

⑦添加一个列表框,取其默认ID号,去掉Sort风格属性。

3.添加并设计“课程信息”对话框①按Ctrl+R快捷键,弹出“插入资源”对话框,在资源类型列表中选择Dialog,单击“新建”按钮。

②将该对话框资源的ID设为IDD_COURSE,标题设为“课程信息”,字体设为“宋体,9号”。

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

C++
实验总结报告
研究课题:图形编辑器
学校:华中科技大学
院系:
班级:
姓名:
指导老师:
一、实验目的
1.熟悉C++的一些重要性质,利用封装、继承、虚
函数和多态性等特性,通过实验学习如何对各类
图元的属性和方法进行合理的封装
2.学习Microsoft的Visual C++编程工具
3.掌握MFC的相关知识
4.掌握基本的文件保存、读取以及操作封装技术
二、实验目的
设计一个简单的图形编辑器
三、实验所用仪器、设备
计算机:PentiumIII 800 以上
256M内存
操作系统:Windows 2000/XP
开发集成环境:Visual C++ 6.0
四、软件功能简介
(注:此软件是从网上下载得来)
该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。

编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图
形,可插入文字,可以修改线条的线型、颜色等基本属性。

五、部分代码分析
1.直线类代码:
class CCreateLine : public CCommand
{
private:
Position m_begin; // 直线的起点
Position m_end;// 直线的终点
public:
CCreateLine() ;
~CCreateLine() ;
int GetType();
int OnLButtonDown(UINT nFlags, const Position& pos) ;
int OnMouseMove(UINT nFlags, const Position& pos) ;
int OnRButtonDown(UINT nFlags, const Position& pos) ;
int Cancel() ;
} ;
学习C++我们最需要理解的就是它面向对象的设计思想。

这种思想可以在类和对象上得到充分的体现。

类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。

它是通过抽象数据类型ADT方法来实现的一种数据类型,
将不同类型的数据和与这些数据相关的操作封装在一起形成一个集合体。

因此,它具有更高的抽象性,实现了信息的隐藏和封装。

对象是某种类的一个实例,是类的具体体现。

一个类可以有多个对象。

分析这一段代码,编程者将直线的起始点和终止点设置为私有成员,这样做就对整条直线实现了隐藏和保护,是面向对象中封装特性的一个具
体体现;另外,此函数中还包含了构造函数与析构函数,构造函数完成对
新对象的初始化工作,析构函数是构造函数的配对物,它实现与构造函数
相反的功能。

另外的几个成员函数名称形参返回值都与class Ccommand 中
的几个公有函数相同,而在class Ccommand中,这几个函数都是虚函数,这是函数重载,也是多态性的具体体现。

由这段代码我们可以了解关于类和对象的一些知识,为我们进一步了
解面向对象程序设计的思想精髓奠定了基础。

2.对构造函数和解析函数的分析
构造函数
CCreateLine::CCreateLine()
: m_begin(0,0), m_end(0,0)
{
m_nStep = 0; // 初始化操作步为0
}
此构造函数用初始化列表的方式对直线类的私有成员进行初始化,同时记下操作步m_nStep是直线类从指令类中继承来的成员,它在指令类中属于保护成员,在直线类中则成为私有成员。

这是数据共享与数据保护两者兼顾时的一种处理方法。

析构函数
CCreateLine::~CCreateLine()
{
}
此析构函数中没有任何操作语句,但它并非没有任何操作。

在任何一个对象消失时都要调用本类的析构函数进行扫尾工作。

在构造对象时,构造函数分配资源给程序,在对象作用结束后,这些资源的释放就要靠析构函数。

当然析构函数中也是可以有语句的,当需要在对象消失之前执行某种操作时,可以把语句写在里边。

3.
BOOL Cline::Pick(const Position&pos,const double pick_radius)
{
Position objPos=pos;
BOX2D sourceBox,desBOX;
GetBox(&sourceBox);
desBox.min[0]=sourceBox.min[0]-pick_radius;
desBox.min[1]=sourceBox.min[1]-pick_radius;
desBox.max[0]=sourceBox.max[0]+pick_radius;
desBox.max[1]=sourceBox.min[1]+pick_radius;
if(!objPos.lslnBox(desBox))
return FALSE;
double angle=::GetAngleToXAxis(m_begin,m_end);
Position dp =objPos-m_begin;
Double dist = fabs(dp.x*cos(angle)+dp.y*sin(angle)-objPos.Distance(m_begin));
if(dist<=pick_radius)
return TRUE;
return FALSE;
}
在阅读此函数的源代码过程中,我感觉到对类创建的合理划分对整个程序具有
着十分重要的意义。

正如上段代码,它的前提是对类进行了合理的划分,只有
在对类进行了合理的划分后,我们才能更加高效地处理对象。

所以,我感觉到
在学习面向对象程序设计时,应当尤为注意类的创建与划分。

六、个人学习体会
在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。

正是由于抱了这种错误的思想,使我在一开始学习
C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没
太注意对象分类的重要性。

随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以
解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编
写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试
带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些
调试的小技巧,让我在C语言课程设计中也受用匪浅。

在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个
手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。

另外,我还感觉到一个好的程序编出来需要很多人的团结合作。

我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。

很高兴能够了解到C++的神奇魅力和面向对象程序设计的独特思想,它为我今后的程序设计奠定了基础。

感谢老师对我们的悉心教授!。

相关文档
最新文档