自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Wei_Yuan_2012的专栏

不要着急,不要贪心,不要放弃,因为大家都是一步一步向前走的,不管多微薄的事也好。--亚也

  • 博客(52)
  • 资源 (10)
  • 收藏
  • 关注

原创 VisualStudio无法加载符号表“No symbles have been loaded for this document.“

解决VisualStudio无法加载符号表问题

2022-10-19 16:34:34 1741 1

原创 UE4.23 震动反馈(Force Feedback)设置

UE4.23提供三组接口触发震动反馈:PlayHapticEffect/StopHapticEffect,ClientPlayForceFeedback/ClientStopForceFeedback,PlayDynamicForceFeedback。使用方法下图:PlayHapticEffect/StopHapticEffect,ClientPlayForceFeedback/ClientStopForceFeedback两组接口需要提供浮点曲线(Float Curve)来控制震动反馈的强

2021-10-02 20:43:38 1932

原创 TortoiseSVN部分Checkout以及删除本地Checkout目录而不影响仓库

SVN在项目协作和管理上提供了很大的便利,但是在日常使用中我们可能会遇到以下使用困惑:假设有以下工程目录:Project|--.svn|--dir1/|--dir2/|--dir3/|--dir4/|--file1.txt|--file2.txt|--file3.txt项目工程很大,而你只需要使用工程下部分目录(dir1和dir3),此时你又两种做法:一种是整个工程Checkout,但是工程很大需要花费很多时间,同时也占用了磁盘;另外一种是单独只Checkout你需要的目录,但

2021-05-15 11:37:21 5673

原创 UE4打印Log

1.打印Log到屏幕:GEngine->AddOnScreenDebugMessage(-1.0f, -1.0f, FColor::Red, TEXT("Test Func "));2.自定义Log Category:自定义Log Category方便在所有Log中区分和筛选出你想要的所属模块的Log。如果想定义一个私有的只在一个cpp文件中使用的Category,且不希望被...

2020-02-05 20:45:36 675

原创 UE4内存检测工具使用

UE4提供了2个工具用于检测内存使用情况,这里记录下使用方法:1.MemReport命令:直接在UE4编辑器窗口的命令控制台上输入MemReport或MemReport -full即可得到内存分析报告。MemReport -full 会得到更加详细的分析报告。报告保存在Game/Saved/Profiling/MemReports目录下,文件格式为.memreport,使用文本编辑器就能打...

2019-12-17 23:21:47 6981

原创 UE4工程打开快捷方式

打开一个UE4工程有两种方式:一种是通过打开UE4Editor.exe或UE4Editor-Win64-Debug.exe,再选中相应工程打开;另外一种是直接打开工程.uproject文件,但是这种方式必须编译Dev版本的UE4Editor。其实UE4还有一个快捷的打开工程方法:新建一个UE4Editor.exe或UE4Editor-Win64-Debug.exe的快捷方式(取决于你要以Dev...

2019-09-18 15:24:57 2458

原创 红黑树的原理:插入和删除

(被问了好多次红黑树的实现原理,每次都说不太清楚,决定认真整理下。)R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。例如,Java集合中的TreeSet和TreeMa...

2019-04-02 01:27:30 472

原创 Unity3D之DrawCalls、Batches和SetPassCalls的关系

接触过项目优化的人相信对这三个词组不陌生,优化很大部分时间可能最终就是在优化这三个东西,让它们保持在一个相对稳定合理的数值,太高肯定是不好。这三个数值也能直接在Unity上显示出来,在Unity界面Game窗口右上角有一个“Status”按钮,点击打开Statistics窗口,这个渲染统计窗口(或渲染数据统计窗口)展示了图像渲染、网络状况等多种统计信息。在Unity4.x版本,DrawCalls数...

2019-03-20 02:54:42 8484 4

原创 Unity3D中的动态字体和静态字体

Unity3D中支持动态字体和静态字体两种格式字体,动态字体即使用TTF格式字体库,静态字体则需要自己打包字体图集。动态字体和静态字体区别在于,动态字体如果出现字体库中不存在的字体,会使用系统字体,而静态字体则不会,而且静态字体是图片,字体大小通过缩放来改变。Unity3D也有自带的字体,Windows下自带字体为Arial。如果使用Unity3D的自带字体Arial字体,在某些机型上可能显示不全...

2019-02-26 02:54:12 13483 2

原创 游戏中的网络同步

在网络游戏中游戏数据和状态的同步是整个游戏的基础,而游戏中对网络同步要求最高的就是战斗状态的同步,它影响玩家的游戏体验。同时,不同类型游戏的战斗状态同步对网络同步要求又不一样,所以产生了不同的网络同步机制。网络是有延时的,因为每个玩家的网络情况都不尽相同,而且每个玩家机器性能也不尽相同,这还会导致游戏每帧渲染的延迟等,所以要做到真正意义上的完全同步是不大可能的。同步机制最重要的作用就是解决延迟等可...

2019-01-30 16:17:46 563 1

原创 Unity3D打包中优化iOS包大小

有过App Store提审经验的童鞋应该知道,App Store对iOS提审包有一个包体大小的限制,这个限制不仅仅是对Mach-O可执行文件大小限制,还有整包大小的限制,比如“80M”、“150M”,这些包体大小的限制会直接影响到你APP能否成功上传或者玩家方便下载。App Store官方文档中规定,对于整包大小超过150M的App包,可以上传到App Store并发布,但是无法在移动网络下下载,...

2019-01-26 21:23:35 4747

原创 Unity3D引擎跨平台底层原理及为何无法在iOS平台上热更新

Unity3D引擎是一款这几年特别火爆3D游戏引擎,大家都知道Unity3D引擎是跨平台的。所谓跨平台就是说开发者只需要写一套逻辑代码,即可发布到各个平台,如Android,PC,iOS等。那为何Unity3D能够做到跨平台呢?之前没有仔细去研究过,只是大概的知道使用了Mono这么同一个跨平台运行环境。那么Mono为何又能跨平台呢,趁着最近有点时间,把之前看到的一篇写的很不错的文章和一些知识点做个...

2019-01-21 03:20:54 1766

原创 Unity3D中AssetBundle的打包和加载

Unity的资源管理是一个比较复杂的模块,如果管理不好,可能导致最终包体大小偏大,程序运行时候内存居高不下,因此了解并掌握Unity的资源管理显得特别重要。Unity中资源一般存放在两个目录下,一个是Resource目录,另一个是StreamingAsset目录。放在Resource目录下的资源在打包的时候会被压缩并打包到安装包中(assets资源),只读,而在StreamingAsset目录...

2019-01-14 12:46:54 1225

原创 Cocos2dx 3.0下的C/C++和Lua通讯以及Object C与Lua通讯

网上关于Cocos2dx开发过程中Lua的使用以及原理教程已经很多了,结合我的开发经验,我在这里稍微整理下。可以说Cocos2dx-Lua提供了一种很轻便的开发模式,省去了冗长的编译时间,同时让热更成为了很容易的一件事情,不仅仅是在Android上,iOS上也轻易绕开了官方的审查,毕竟Lua在iOS系统看来都只是资源,就像txt文档。然而Cocos2d-x是用C++开发的,那么,Lua究竟...

2019-01-05 17:15:37 495

原创 Unity3D控制Animator播放

有一个需求,要求第一次打开一个界面触发一个动画播放,关闭界面动画播放关闭,再次打开界面继续上次到播放而不是重新开始播放,如果动画播放结束关闭打开界面入口(即无法在此进入该界面)。有两种实现方法:方法1:第一次打开界面开始播放特效动画,调用animator.Play("fx_name")方法,同时获取该动画的播放时长(如果自由一个播放面片的话:animator.GetCurrentAnimatorC...

2018-05-18 20:27:38 10291

原创 自定义TTF多语言版本之台湾繁体

最近做台湾的多语言差异化版本,由于一开始我们都是使用简体中文,不论是配置还是ui,所以如果全部手工去装换,处理起来工作量挺大的。在查看到网上查找了一番,发现是有字库可以把简体字转换成繁字体的,这可以大大减少工作量,不过对于有文字的图片那就没办法了,只能一个个替换。    一开始网上找到的是GB12345,它可以把简体字转换成繁体字。但是台湾的玩家输入的是繁体字,这在游戏中显示就有点奇怪,如果字

2016-07-08 20:01:22 4377

原创 ios开发调用OpenAL的alcOpenDevice(NULL)方法返回NULL的原因之一

我们项目是基于cocos2dx 3.0开发,由于修改了cocos的底层代码,所以不能做到和cocos版本同步更新。但是最近发现我们项目在android 5.0系统上面跑起来特别卡,有些甚至掉帧很厉害。经过种种排查,最终发现是cocos2dx 3.0版本的声音引擎出了问题。    通过查看cocos2dx 3.0代码知道,cocos2dx 3.0提供的音频库接口位于CocosDenshion中,

2015-11-16 01:28:26 2805

原创 python解压函数extractall在windows上报错FileNotFoundError [Errno 2] No such file or directory

今天遇到一个很奇葩的问题,使用pyhon脚本下载服务器上的一个打包工具到本地,然后解压到本地使用,这个脚本在我个人电脑上可以正常运行,但是在别的电脑上就报错,报错信息如下:FileNotFoundError [Errno 2] No such file or directory      一开始以为是我调用python的解压函数用问题,我用的是zipfile的extractall函数,

2015-11-15 17:28:18 11586

原创 coocs2dx-lua在XCode开发时lua和资源热更新问题解决办法

coocs2dx-lua在XCode开发时lua和资源热更新问题解决办法

2015-05-17 14:36:02 1399

原创 关于I/O的一些记录

前段时间做了一个聊天系统,这个系统需要缓存一些聊天的记录,所以用到了IO。首先,简单那说下我定义的聊天消息的数据结构,该结构包括:聊天对象ID,昵称,聊天内容等关键信息。如果是我发送给别人,ID为被聊天对象的ID,由服务端转发(同时)到相应ID的人那里,同时修改ID为我的ID,客户端接收到这个消息之后就可以拿到聊天对象的ID并进行回复了。对于如何区分存储我和不同聊天者的聊天消息,我的做法是

2015-01-17 22:13:37 819

原创 cocos2d-x3.0开发游戏部分机型(显卡类型)闪退问题

拓展cocos2d-x3.0底层支持etc图片格式,把游戏中的模型使用etc格式的图片替换。原先可以运行在联想(lenovo S880,显卡类型是PowerVP SGX 531)的机器上,但是换成etc图片之后进入游戏加载模型的时候就闪退了。目前大部分其他机型上都没不存在这个问题,只有部分机器会闪退。初步判断有可能是显卡的问题,这个机器的显卡类型是PowerVR SGX 531。不

2014-12-25 00:15:27 2528 5

原创 分区数据恢复之ubuntu13.10格式化整个硬盘

折腾了四天,终于搞得差不多了,损失也降到了最低。算上这次,我应该有两次比较大失误导致数据丢失了。第一次因为换电脑,误删10G的资料,过了一个星期才发现;第二次是因为装系统的时候错误选择了覆盖,然后整个windows系统包括硬盘分区全部被ububtu覆盖修改。总的来说,还是比较幸运的,两次的数据都找回来了,不过第二次找回来的数据中虚拟机装的系统都坏掉了,不知道是怎么回事。总之,数据很

2014-01-12 21:31:25 4181 3

原创 Windows 7引导Ubuntu 13.10 双系统安装

之前安装了ubuntu12.04,结果发现这个系统问题百出,不久就弃之不用,过了一段时间的找实习找工作的折腾时间后,安稳下来后突然有想起电脑上的这个系统,于是决定重新装他。按照上次装12.04的步骤安装13.10,却发现出了一些问题,于是写下这篇文章记录下。准备工具:1、当然,就在这个文章的主人公ubuntu13.10系统,官网下载;2、用于系统设置与管理的EasyBCD,当然这个软件

2014-01-11 16:57:18 7300

原创 记载重新回归

这半年没有来这个博客写文章了。   其实不是没写,而是写在了wiz这个笔记上了,挺喜欢这个软件的,之前有用过evernote,大一的时候师兄介绍的,说很好用,对于管理个人的知识库挺有帮助的,但是用了一段时间后发现因为是国外软件的缘故吧,数据的同步不是很好,经常上传不上去。后来发现了wiz,就一直使用到现在,轻量级的笔记软件,也有移动端的,可以电脑编辑后同步到移动端,随时查看,挺方便的,但是移动

2014-01-11 16:44:54 915

原创 求数组中任意n-1个元素的最大乘积

题目描述:给定一个整形数组a[n],求该数组中任意n-1个元素的乘积的最大值,要求不允许用除法,时间复杂度O(n),空间复杂度O(1)。 思路:求出数组中的最大负数和最小正数,然后把其他数的乘起来,如果乘积是负数,则乘以最大负数,如果乘积是正数,则乘以最小正数。  #define MAX 0x7FFFFFFFint maxMulit(int *a ,int n){

2013-05-09 01:01:20 1947 1

转载 do/while(0)的妙用

在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。    但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在

2013-04-23 12:16:29 851

原创 分形曲线实现及扩展:

注意事项:配置好OpenGL环境。1.Cantor曲线://Cantor.h#include #include #define PI 3.1415926void Cantor(float ax, float ay ,float bx, float by ,float n, float d);//Cantor.cpp#include"Cantor.h"/*

2013-03-20 00:27:18 1764

转载 undefined reference to 'pthread_create'问题解决

由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'undefined reference to 'pthread_join'问题原因:    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthrea

2013-03-06 16:48:51 988

原创 安装ADT-20.0.3的时候产生org.eclipse.cdt.feature.group 0.0.0' but it could not be fount错误信息

由于最近换了一台电脑,所以在把资料搬出时文件放置的位置和文件名有所改变,这使得原先在那台电脑上可以运行的eclipse中Android的开发环境被破坏了。在修改SDK位置的时候提示需要更新ADT到版本20以上(我原先的是版本16的),于是在下载完ADT20.0.3准备安装的时候却遇到了一个和奇怪的错误,错误消息如下: Cannot complete the install becaus

2013-01-25 01:26:02 4342 3

原创 如何在win7下装win8以及我的win8之旅

好吧,折腾完了前面的win7后,总觉得应该不是我硬盘或者分区的问题,于是我又选择了装一下win8。恰好在win8正式对外界发布的时候我赶上了当时图书馆的好网速,用了一个下午把win8给下载好了(当时正在紧张的期末复习中,大家都没有怎么上网,哈哈)。根据我的一些了解win8的最大亮点就是Metro化和平面化,就趁此机会也顺便体验下把。   好,接下来废话不多说,直接上正题,如何在win7上安装w

2013-01-14 18:23:27 2365

原创 关于装双Win7系统方法及问题:错误0x80070571:磁盘结构损坏且无法读取

由于前一阶段忙于考试和课程设计,期间由于课程设计需要,渲染时电脑屏幕一下子就黑了,再次开机都开不了,以为显卡烧坏了,送回保修发现显卡没有烧坏,但是电脑系统变得越来越卡,特别是开一些比较大的软件,如3dmax或者Uinty3D的时候经常报“显示器停止响应,并已经修复”等警告。而又苦于不想重装系统,因为配置环境和安装软件实在是麻烦到让人想吐,于是就想着装一个和现在一样的测试系统(双win7系统),该系

2013-01-14 16:13:24 5046

原创 Ubuntu中有关Ftp服务器到架设

google一下Ubuntu下Ftp的软件有好多种,各种的一些大致特点:wu-Ftp:比较老牌,但针对它的攻击比较多,设置比较麻烦,但功能比较强大。(参考)proFtpd:能实现wu-Ftp以及server-U的所有功能。安全性也较高,但比起vcFtpd配置稍显复杂。vsftpd:功能强大,配置也比较简单选vsftod是因为它安全、速度快选proFtpd偶尔看到webmin

2012-11-10 23:49:33 1615

原创 VC2010环境下OpenCV出现“丢失tbb_debug.dll”错误解决办法

出问题原因:你使用opencv的动态库with tbb,但是你的系统没有安装tbb,所以会报错。解决办法:1.建议下载INTELTBB3.0  点击打开链接检查..\\Intel TBB 3.0\bin\ia32\vc10是否已经被加入到环境变量(我的电脑-属性-环境变量)PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以

2012-11-05 19:56:19 1654

转载 第12章 Shell脚本编程

l  Shell命令行的运行l  编写、修改权限和执行Shell程序的步骤l  在Shell程序中使用参数和变量l  表达式比较、循环结构语句和条件结构语句l  在Shell程序中使用函数和调用其他Shell程序12-1   Shell命令行书写规则 u  Shell命令行的书写规则对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令

2012-10-11 17:28:03 2092

原创 VS2010中关于OpenCV 2.3.1开发环境配置及第一个OpenCV程序

1.在OpenCV中文网站(http://www.opencv.org.cn/index.php)上面下载OpenCV-2.3.1-win的安装包。可以下载源码编译版,也可以下载安装包,还有OpenCV的参考手册。我这里下载了安装包(即 OpenCV-2.3.1-win-superpack.exe 文件)。 2.下载完点击安装,设置安装路径(这里的安装,更确切的说应该是解压),解压到C

2012-09-24 11:01:08 5412 1

原创 关于ASP.NET中面包屑(SiteMapPath控件)使用

一、根据站点地图Web.sitemap来显示面包屑(SiteMapPath控件): 1.首先要创建一个站点地图Web.sitemap,最好在根目录下,如果已经创建,那么直接在里面增加你需要添加面包屑的节点就行。SiteMapPath控件由多个节点组成,节点可分为以下3个类型:根节点、父节点、当前节点。站点地图里可随意添加,多少都行,但是要理清节点的“父子关系”!Web.sitemap中的代

2012-07-22 17:42:51 3759

转载 杀毒软件的查杀病毒的原理以及木马、病毒的免杀伎俩(论杀或者不杀 )

无意中在网上看到的,描述通俗易懂,基本全是基础知识,权当了解吧。====================================================================================================你杀或者不杀我,我就在那里不悲不喜 借用黑客防线的名言:在攻与防的对立统一中寻求突破! 小甲鱼从现在开始就厚着脸皮跟大家来谈谈杀

2012-07-22 02:26:13 4036 2

转载 JAVA必须要理解的一些问题

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。问题一:我声明了什么!String s = "Hello world!";许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常

2012-07-10 01:44:25 1351

原创 Win7环境下的Java和Android环境变量配置详解

由于这次的重装系统,忘记了上次关于java和android的环境变量配置方法,所以和很多其他新手一样,每次搭建JDK和SDK的时候,都要百度或者google一下。但是,看到了许多人写过配置环境变量的方法却不尽相同。其中有版本的原因,也有环境变量冗余的原因。环境变量定义的冗余(通常是无实际影响的),对于有小洁癖的我而言,是绝不允许的。经过自己的实际经验,下面我总结了一下我的这次的配置方法,算是一次笔

2012-07-08 18:15:44 4976

原创 关于memset初始化动态数组:

今天在刷题的时候想使用复习一下动态数组的使用,就建了一个,结果运行的时候出了一些问题,就是那个貌似数组没有被初始化,所以我就测试了一下,代码如下:int main(){int n = 10; int *degree1 = new int[n];memset(degree1,0,sizeof(degree1));for(int i =0;i<n;i++) cout<<degree1[

2012-06-15 16:19:24 3261 4

MyRichtextProject.7z

MyRichtextProject.7z

2021-02-26

UE4 Wiki Archive

UE4旧版本教程备份UE4WikiArchive.7z

2021-01-18

VisualAssistX_10.9.2210.7z

番茄助手VisualAssistX_10.9.2210,支持Visual Studio 2010,Visual Studio 2012,Visual Studio 2013,Visual Studio 2015,Visual Studio 2017,内涵Crack说明文旦及程序(替换VA_X.dll即可)

2019-12-25

TextMeshPro_Unity5.3.x(x64)

TextMeshPro最新版本,更新至2017年12月27日15时,官网最新下载。

2017-12-27

Unity4.x地形插件T4M

Unity3D地形插件T4M,支持Unity4.x版本。使用文档参照http://blog.csdn.net/tianmao111/article/details/46482963

2017-09-04

计算机程序设计艺术三卷全

这是计算机程序设计中文版三卷全套,给爱学习的人,免去你在网上找的时间,我就找了很久才找到,也为你免去一笔不小的财富。本人郑重声明,下载完无需其他要求,解压即是三个文档。

2013-02-27

基于记录的应用程序设计

基于记录的应用程序设计 一.问题描述:编写一个应用程序实现程序化教学,程序必须完成以 下功能:  向学生提问题;  从学生处获得答案;  根据学生的答案继续选择下一个问题。 二.在该应用程序的概要设计中,从以下几个方面进行考虑:  如何在你的程序中表示程序化教学课程所需的信息?在设计阶段,需要开发一个合适的数据结构,它可以是记录和数组的结合。  课程的数据文件的格式是怎样的?(数据文件由所教授课程的老师编辑操作而非程序员)  如何将数据文件使用的外部表示转换为内部表示?  如何编写程序对数据库进行操作? 三.问题的框架: 程序运行的基本操作步骤如下:  提出当前的问题:一个问题可以有一行或多行文本组成,这些文本可以用字符串表示;  从学生处获取答案:答案也可以由字符串表示。  查看为该问题准备的一系列答案:如果学生的答案在上述答案中列出,则参考数据结构来选择新的问题。如果学生的答案与提供的答案不符,则告知学生结果并提供另一次机会回答问题。 四.数据的表示 为使该应用程序拥有较好的可移植性,关于某门课程的所有信息必须存入一个数据文件中,而不是直接将它们写入程序。程序的任务是读取数据文件,在内部数据结构中存储信息并处理该结构。设计数据结构的过程包括两个步骤:  首先,需要设计一个供程序使用的内部结构。内部数据结构由自定义结构体类型定义组成,其中结合了数组和记录,因而可以反映真实世界中信息的组成方式。  其次,需要设计能够反映数据文件中信息如何存储的外部结构。 这两个步骤是紧密关联的,主要是因为他们表示同样的信息。但是这两种结构是为了不同目的而设计的,内部结构应便于程序员使用,而外部结构需要为课程设计者服务,不会在程序操作方面遇到太多困难。 (一) 设计内部表示 先设计一个包含了必需信息的数据结构,用自顶向下的方法从最高层的结构开始设计,再逐渐增加细节并完善。数据库的设计中有一个重要概念—封装:将相关的信息结合起来放入结构中,并作为整体处理。对于一个大型数据库来说封装的过程是有层次的,且必须在每一个层次上考虑细节。在最高层,需要将整个数据库作为一个变量考虑,它包含了所需的全部信息。如下图所示,将数据库表示为指向某结构的指针,该结构的内容留待后面考虑。当你需要将整个数据库传递给函数时,你只需传递变量db即可,这是一个易于操作的指针,利用它可以访问其他数据,只有当函数需要对数据库中个别成员进行操作时,才需要查看结构中的细节。 课程数据库由标题和问题组成 问题由文本组成,其中包括多行文件以及一系列可能的答案,这两个结构都可由数组表示,问题的文本是字符串的数组,每一个字符串包含了一行的内容。而答案存储在一个结构较为复杂的数组中 通常情况下,需要提供一个机制来追踪数组的有效大小,通常比所分配的空间小一些。记录有效大小可以利用下面两种方式:  可以在数组的最后一个只后面增加一个标记值;  可以将元素的个数存入一个整型变量,并将其作为记录的一部分。 每个问题的答案通常由下面的内容组成:标准答案以及相应的下一个问题。标准答案为一个字符串,而下一个问题可以有存放了问题编号的变量表示。(二) 设计外部结构 在对数据的内部结构进行定义之后,就要决定如何在数据文件中表示相同的信息。文件只有文本组成,c语言中有数据结构的层次决定的数据组织显示必须通过对文件格式的设计表示出来。文件结构的设计也必须便于编辑,以便在操作人员不是程序员的情况下方便他们的使用。因此必须选择尽可能简单的表示方式。最简单的方法是依次写出每个问题,以及可能的答案。为了使计算机能够将每个问题区分开来,需要定义某些规则来区别每个问答单元。比如使用一个空行,在大多数的文件结构中也都使用空行。这样,有空行隔开的每个单元中,就包含了问题和答案的数据信息。 一个问答单元都包含哪些内容呢?首先,包含问题的文本,文件中的若干行构成了一个问题。我们同样也需要用某种方式表示问题的结束,对程序员和课程编写者来讲,最简单的方法是定义一个标记值,在这个程序中,可以选定用五个 “-”来表示文件结束。另外,程序同样需要允许课程设计者指明答案/下一个问题的配对方式:在一个数据行中先列出答案的文本,然后用冒号分隔,再跟随下一个问题的序号。因此数据文件中的一个问答单元如下图所示: 如果输入“对”,则程序继续提出问题3,如果输入“错”,则程序跳至问题5. 五.编写程序代码 决定了内部数据结构以及外部文件格式后,将整个任务分解成单独的函数,并对他们进行逐步精化就可以了,完整的程序存储在文件teach .cpp中。在设计程序代码注意以下问题:  程序怎样利用外部数据文件中的数据创建内部数据结构?  程序如何运用内部的数据结构处理每个问题? 六.基于数据驱动设计方法的重要性: 程序teach.cpp将从数据文件中接收所需的全部数据,该应用程序所提出的问题,接受的答案以及问题的顺序等信息全部来自外部数据文件,而不是程序本身。根据从数据库中获得信息而运行的程序称为数据驱动程序。与将所有信息包含在程序设计过程中的程序相比,数据驱动的程序通常较短,较灵活,且较容易维护。 我们只需运行程序就可以理解teach.cpp这样的数据驱动系统的灵活性,按照这个项目最初的目标,程序teach.cpp应该用于传统的程序化教学,如文件cs.txt最开始的几个问题见下图: 当程序teach.cpp与这个文件结合应用时,得到结果见下图: 由于这是一个数据驱动的程序,所以同样一个程序可应用于不同的环境中。程序teach.cpp与不同的数据文件结合,该程序的目的与运行结果与cs.txt大相径庭,虽然程序teach.cpp没有任何改变,但程序化教学的课程可以变为一个设计好的游戏或心理测试问卷等,唯一的差别仅在于数据文件不同。

2012-09-24

基于记录应用程序设计

一.问题描述:编写一个应用程序实现程序化教学,程序必须完成以 下功能:  向学生提问题;  从学生处获得答案;  根据学生的答案继续选择下一个问题。 二.在该应用程序的概要设计中,从以下几个方面进行考虑:  如何在你的程序中表示程序化教学课程所需的信息?在设计阶段,需要开发一个合适的数据结构,它可以是记录和数组的结合。  课程的数据文件的格式是怎样的?(数据文件由所教授课程的老师编辑操作而非程序员)  如何将数据文件使用的外部表示转换为内部表示?  如何编写程序对数据库进行操作? 三.问题的框架: 程序运行的基本操作步骤如下:  提出当前的问题:一个问题可以有一行或多行文本组成,这些文本可以用字符串表示;  从学生处获取答案:答案也可以由字符串表示。  查看为该问题准备的一系列答案:如果学生的答案在上述答案中列出,则参考数据结构来选择新的问题。如果学生的答案与提供的答案不符,则告知学生结果并提供另一次机会回答问题。 四.数据的表示 为使该应用程序拥有较好的可移植性,关于某门课程的所有信息必须存入一个数据文件中,而不是直接将它们写入程序。程序的任务是读取数据文件,在内部数据结构中存储信息并处理该结构。设计数据结构的过程包括两个步骤:  首先,需要设计一个供程序使用的内部结构。内部数据结构由自定义结构体类型定义组成,其中结合了数组和记录,因而可以反映真实世界中信息的组成方式。  其次,需要设计能够反映数据文件中信息如何存储的外部结构。 这两个步骤是紧密关联的,主要是因为他们表示同样的信息。但是这两种结构是为了不同目的而设计的,内部结构应便于程序员使用,而外部结构需要为课程设计者服务,不会在程序操作方面遇到太多困难。 (一) 设计内部表示 先设计一个包含了必需信息的数据结构,用自顶向下的方法从最高层的结构开始设计,再逐渐增加细节并完善。数据库的设计中有一个重要概念—封装:将相关的信息结合起来放入结构中,并作为整体处理。对于一个大型数据库来说封装的过程是有层次的,且必须在每一个层次上考虑细节。在最高层,需要将整个数据库作为一个变量考虑,它包含了所需的全部信息。如下图所示,将数据库表示为指向某结构的指针,该结构的内容留待后面考虑。当你需要将整个数据库传递给函数时,你只需传递变量db即可,这是一个易于操作的指针,利用它可以访问其他数据,只有当函数需要对数据库中个别成员进行操作时,才需要查看结构中的细节。 课程数据库由标题和问题组成 问题由文本组成,其中包括多行文件以及一系列可能的答案,这两个结构都可由数组表示,问题的文本是字符串的数组,每一个字符串包含了一行的内容。而答案存储在一个结构较为复杂的数组中 通常情况下,需要提供一个机制来追踪数组的有效大小,通常比所分配的空间小一些。记录有效大小可以利用下面两种方式:  可以在数组的最后一个只后面增加一个标记值;  可以将元素的个数存入一个整型变量,并将其作为记录的一部分。 每个问题的答案通常由下面的内容组成:标准答案以及相应的下一个问题。标准答案为一个字符串,而下一个问题可以有存放了问题编号的变量表示。相应的结构如下图 ans nextQ 参考数据结构设计及函数原型设计如下: #define MaxQuestions 100 #define MaxLinesPerQuestion 100 #define MaxAnswersPerQuestion 10 #define EndMarker "-----" //数据结构 struct answerT {string ans; int nextq; }; struct questionT {string qtext[MaxLinesPerQuestion+1]; answerT answers[MaxAnswersPerQuestion]; int nAnswers; }; struct courseDB {string title; questionT *questions[MaxQuestions+1]; }; //函数声明 courseDB * ReadDataBase(); bool ReadOneQuestion(fstream &infile;, courseDB *course); void ReadQuestionText(fstream &infile;,questionT *q); void ReadAnswers(fstream &infile;, questionT *q); void ProcessCourse(courseDB *course); void AskQuestion(questionT *q); int FindAnswer(string ans,questionT *q); (二) 设计外部结构 在对数据的内部结构进行定义之后,就要决定如何在数据文件中表示相同的信息。文件只有文本组成,c语言中有数据结构的层次决定的数据组织显示必须通过对文件格式的设计表示出来。文件结构的设计也必须便于编辑,以便在操作人员不是程序员的情况下方便他们的使用。因此必须选择尽可能简单的表示方式。最简单的方法是依次写出每个问题,以及可能的答案。为了使计算机能够将每个问题区分开来,需要定义某些规则来区别每个问答单元。比如使用一个空行,在大多数的文件结构中也都使用空行。这样,有空行隔开的每个单元中,就包含了问题和答案的数据信息。 一个问答单元都包含哪些内容呢?首先,包含问题的文本,文件中的若干行构成了一个问题。我们同样也需要用某种方式表示问题的结束,对程序员和课程编写者来讲,最简单的方法是定义一个标记值,在这个程序中,可以选定用五个 “-”来表示文件结束。另外,程序同样需要允许课程设计者指明答案/下一个问题的配对方式:在一个数据行中先列出答案的文本,然后用冒号分隔,再跟随下一个问题的序号。因此数据文件中的一个问答单元如下图所示: 如果输入“对”,则程序继续提出问题3,如果输入“错”,则程序跳至问题5. 五.编写程序代码 决定了内部数据结构以及外部文件格式后,将整个任务分解成单独的函数,并对他们进行逐步精化就可以了,完整的程序存储在文件teach .cpp中。在设计程序代码注意以下问题:  程序怎样利用外部数据文件中的数据创建内部数据结构?  程序如何运用内部的数据结构处理每个问题? 六.基于数据驱动设计方法的重要性: 程序teach.cpp将从数据文件中接收所需的全部数据,该应用程序所提出的问题,接受的答案以及问题的顺序等信息全部来自外部数据文件,而不是程序本身。根据从数据库中获得信息而运行的程序称为数据驱动程序。与将所有信息包含在程序设计过程中的程序相比,数据驱动的程序通常较短,较灵活,且较容易维护。 我们只需运行程序就可以理解teach.cpp这样的数据驱动系统的灵活性,按照这个项目最初的目标,程序teach.cpp应该用于传统的程序化教学,如文件cs.txt最开始的几个问题见下图: 当程序teach.cpp与这个文件结合应用时,得到结果见下图: 由于这是一个数据驱动的程序,所以同样一个程序可应用于不同的环境中。程序teach.cpp与不同的数据文件结合,该程序的目的与运行结果与cs.txt大相径庭,虽然程序teach.cpp没有任何改变,但程序化教学的课程可以变为一个设计好的游戏或心理测试问卷等,唯一的差别仅在于数据文件不同。

2012-09-24

笔记本Wifi热点设置图片详解

给文档是我在设置笔记本电脑wifi的时候做的详细图解笔记,绝对可以帮助你设置完成电脑的Wifi设置,即便你是对电脑刚刚入门的菜鸟,你面详细到我读觉得有点过了。。。希望对你有帮助!

2012-06-03

关于重载的详细讲解

该资源是有关于重载的详细讲解,本人看完后收益匪浅啊。它涵盖了重载的大部分知识点。大部分来自<c++primer>,而又高于他,很不错的一个资源!

2012-05-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除