SQL Server数据类型
数据类型
|
类型
|
描 述
|
bit
|
整型
| bit 数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或Fa lse 、On 或Off |
int
|
整型
| int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节 |
smallint
|
整型
| smallint 数据类型可以存储从- 215(-32768)到215(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间 |
tinyint
|
整型
| tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 这种数据类型在数据库中占用1 个字节 |
numeric
|
精确数值型
| numeric数据类型与decimal 型相同 |
decimal
|
精确数值型
| decimal 数据类型能用来存储从-1038-1到1038-1的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 范围是小数点左右所能存储的数字的总位数。精度是小数点右边存储的数字的位数 |
money
|
货币型
| money 数据类型用来表示钱和货币值。这种数据类型能存储从-9220亿到9220 亿之间的数据,精确到货币单位的万分之一 |
smallmoney
|
货币型
| smallmoney 数据类型用来表示钱和货币值。这种数据类型能存储从-214748.3648 到214748.3647 之间的数据,精确到货币单位的万分之一 |
float
|
近似数值型
| float 数据类型是一种近似数值类型,供浮点数使用。说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308到1.79E+308 之间的任意数 |
real
|
近似数值型
| real 数据类型像浮点数一样,是近似数值类型。它可以表示数值在-3.40E+38到3.40E+38之间的浮点数 |
datetime
|
日期时间型
| datetime数据类型用来表示日期和时间。这种数据类型存储从1753年1月1日到9999年12月3 1日间所有的日期和时间数据, 精确到三百分之一秒或3.33毫秒 |
Smalldatetime
|
日期时间型
| smalldatetime 数据类型用来表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟 |
cursor
|
特殊数据型
| cursor 数据类型是一种特殊的数据类型,它包含一个对游标的引用。这种数据类型用在存储过程中,而且创建表时不能用 |
timestamp
|
特殊数据型
| timestamp 数据类型是一种特殊的数据类型,用来创建一个数据库范围内的唯一数码。 一个表中只能有一个timestamp列。每次插入或修改一行时,timestamp列的值都会改变。尽管它的名字中有“time”, 但timestamp列不是人们可识别的日期。在一个数据库里,timestamp值是唯一的 |
Uniqueidentifier
|
特殊数据型
| Uniqueidentifier数据类型用来存储一个全局唯一标识符,即GUID。GUID确实是全局唯一的。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID 函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列 |
char
|
字符型
| char数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列为此类型时,你必须指定列长。当你总能知道要存储的数据的长度时,此数据类型很有用。例如,当你按邮政编码加4个字符格式来存储数据时,你知道总要用到10个字符。此数据类型的列宽最大为8000 个字符 |
varchar
|
字符型
| varchar数据类型,同char类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。当定义一列为该数据类型时,你要指定该列的最大长度。 它与char数据类型最大的区别是,存储的长度不是列长,而是数据的长度 |
text
|
字符型
| text 数据类型用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231-1或20亿个字符 |
nchar
|
统一编码字符型
| nchar 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,而不是用单字节(普通文本中的情况)。它允许大量的扩展字符。此数据类型能存储4000种字符,使用的字节空间上增加了一倍 |
nvarchar
|
统一编码字符型
| nvarchar 数据类型用作变长的统一编码字符型数据。此数据类型能存储4000种字符,使用的字节空间增加了一倍 |
ntext
|
统一编码字符型
| ntext 数据类型用来存储大量的统一编码字符型数据。这种数据类型能存储230-1或将近10亿个字符,且使用的字节空间增加了一倍 |
binary
|
二进制数据类型
| binary数据类型用来存储可达8000 字节长的定长的二进制数据。当输入表的内容接近相同的长度时,你应该使用这种数据类型 |
varbinary
|
二进制数据类型
| varbinary 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,你应该使用这种数据类型 |
image
|
二进制数据类型
| image 数据类型用来存储变长的二进制数据,最大可达231-1或大约20亿字节 |
2012/06/14--更新
SQL数据类型----字符型数据分析
字符型数据类型可用来存储数字符号、字母以及特殊符号。一般,使用字符型数据时,要给数据加上单引号或双引号。1.char---char数据类型使用固定长度来存储字符,最长可以容纳8000char数据类型的定义形式为:char[n]
其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~8000之间的数值。若不指定n值,则系统默认为1。利用char数据类型来定义表列或者定义变量时,应该给定数据的最大长度。如果实际数据的字符长度短于给定的最大长度,则多余的字节会被以空格填充。如果实际数据的字符长度超过了给定的最大长度,则超过的字符将会被截断。在使用字符型常量为字符数据类型赋值时,必须使用双引号或单引号将字符型常量括起来。例如:'loving','舞'。
注意:使用char数据类型的最大好处就在于可以精确计算数据占有的空间。计算机占用的空间非常重要。在一些非常庞大的系统里定义一些表列长度时,几个字节的差距也许意味着上百兆数据空间的节省或浪费。
2.nchar---nchar用来定义固定长度的Unicode数据,最大长度为4000个字符。与char类型相似,nchar数据类型的定义形式为:nchar[n]
其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~4000之间的数值。因为nchar类型采用UNICODE标准的数据类型,所以它比char多占用一倍的存储空间。使用UNICODE标准的好处是因其使用两个字节作为存储单位,故其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都包括在内,在一个数据列中就可以同时出现中文、英文、法文、德文等,而不会出现编码冲突。
3.varchar SQL利用varchar数据类型来存储最长可以达到8000个字符的变长字符数据。
与char数据类型不同,varchar数据类型的存储空间,随存储在表列中每一个数据的字符数的不同而变化。例如,如果定义表列为varchar20),那么存储在该列的数据最多可以长达20个字节。但是,在每列数据没有达到20个字节时,并不会在多余的字节上填充空格。
varchar数据类型的定义形式为:varchar[n]
其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~8000之间的数值。若输入的数据过长,SQL将会截掉其超出部分。
说明:当存储在列中数据的值的大小经常变化时,使用varchar数据类型可以有效地节省空间。
4.nvarchar
用来定义可变长度的二进制数据,最大长度为4000nvarchar数据类型的定义形式为:nvarchar[n]
其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~4000之间的数据。nvarchar与nchar的区别和varchar与char的区别类似。
via
MFC数据库编程
数据库开发技术简介
DAOODBC
OLE DB
ADO
数据库开发实例
实例说明和程序框架编程利用DAO开发本地Access数据库
利用ADO开发本地Access数据库
利用ODBC开发远程服务器端的SQL/MySql数据库
为了能用同样的方法访问不同的数据库,许多大公司提出“通用数据库接口标准”,如微软的ODBC、DAO、RDO、OLEDB、ADO、Borland公司的BDE等等。
这些接口封装了各类数据库驱动,应用程序通过标准接口编程,程序就会根据数据类型调用不同驱动。
微软早期提出的数据库接口为DAO,并且封装到MFC中。目前流行的数据库接口:ODBC、ADO。
数据库简介------DAO
数据库开发技术简介——DAO
DAO(Database Access Object,数据访问对象)使用Microsoft Jet引擎来访问数据库,允许开发者直接连接到 Access 表。DAO 适用于单系统应用程序开发Access数据库。
MFC 的DAO类封装了DAO的大部分功能,适合数据库编程初学者。
数据库开发技术简介——ODBC
ODBC(Open Data Base Connectivity 开放式数据互联),提供访问多种基于SQL 的数据库的接口。能够以统一的方式去处理所有数据库:将具体的数据库抽象为“数据源”,数据源与ODBC接口之间,通过数据库的ODBC驱动程序连接。
如:在安装SQL Driver for ODBC和SQLite Driver for ODBC后,程序可以通过同样的代码去访问两者。
ODBC连接数据库的示意图
数据库开发技术简介——OLE DB
概念:OLE DB——是微软的战略性的数据源低级程序接口,是一组读写数据的方法。将传统的数据库系统划分为多个逻辑组件:
Data Providers 数据提供者:即各类数据库
Data Consumers 数据使用者 :即使用数据库的应用程序
Service Components 服务组件 :提供数据库操作
OLE DB 和ODBC 标准都提供统一的数据库接口,但ODBC 标准基于SQL 数据源,而OLE DB 支持任何数据存储。
因此可以说,ODBC标准 是OLE DB 标准子集。
数据库开发技术简介——ADO
ADO,(ActiveX Data Objects),是一种特殊的OLE DB接口,以OLEDB为基础而封装的,它提供了编程语言和OLE DB的一个中间层。ADO 是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,也是微软大力推荐使用的一种接口。
实例说明和程序框架
建立一个学生信息管理系统,具有添加、删除、修改、查找功能
查找具有多种方式
框架:采用SDI结构,主视图为FormView,数据库采用Access2000格式(*.mdb)(源代码下载)
分别用DAO和ADO两种接口实现编程,数据库结构参考W13_StudentInfo.mdb
利用DAO开发Access数据库
MFC封装的DAO类
MFC通过封装了一套DAO类来实现DAO的功能,在afxdao.h头文件中,包括:
CDaoWorkspace类
CDaoDatabase类
CDaoRecordset类
前三个类是重点
使用DAO,首先要在stdafx.h中添加引用afxdao.h头文件
CDaoTableDef类
CDaoQueryDef类
CDaoException类
(1) CDaoWorkspace类——DAO工作区类
工作区是数据库处理事务管理器,它管理在同一个“事务”区里的一系列打开的数据库。CDaoWorkspace类在MFC DAO体系结构中处于最顶层,负责管理从登录到断开连接过程中的所有数据库会话的全过程。
CDaoWorkspace类从CObject类里派生而来。
(2) CDaoDatabase类——数据库对象
代表一个数据库连接,通过它程序可操作数据库中的数据。每个CDaoDatabase对象都拥有自己的表定义、查询定义、记录集和关系对象的集合,并提供操作方法。
重要的两个操作函数:Open和Create,分别打开一个数据库,和创建一个数据库。
CDaoWorkspace和CDaoDatabase的关系:在定义CDaoDatabase对象时,如果在构造函数中没有指定工作区指针,程序会自动创建一个“默认工作区”。
(3)CDaoRecordset类——数据记录集对象
对DAO记录集对象的封装,它代表从数据源中选择的一组记录。CDaoRecordset可分成3种类型:
表记录集(dbOpenTable):代表一个数据库中的表,通过它可以从单个数据库的表中检索、添加、删除和修改记录。
动态记录集(dbOpenDynaset):是对数据库执行查询操作的结果,它可能包含一个或者多个数据库的所有或者某些特定的字段。
快照记录集(dbOpenSnapshot):是一组记录的静态拷贝通过快照记录集可以查找数据或者生成报表,但是不能对其中的记录进行操作。
CDaoTableDef类——表定义类,用来对数据库中的表进行操作。需掌握打开一个表的方法
CDaoQueryDef类——记录查询定义对象
CDaoException类——处理异常的类
CDaoFieldInfo类——获取表的结构信息
DAO编程准备工作
Step1:为所有相关控件添加变量、按钮响应函数,初始化控件,包括性别、班级、List显示。(略)Step2:预备工作
在stdafx.h中,包含afxdao.h头文件;
在View类中添加CDaoDatabase和CDaoRecordset 对象指针。添加数据库文件名和当前表名称变量。
在MainFrm.cpp里的OnCreate函数中,添加如下语句:
AfxGetModuleState()->m_dwVersion = 0x0601; // 更新mfc为6.01版本Step3:在view类中重载菜单“打开”按钮,调用“打开文件”通用对话框,选择数据库文件
Step4.1:打开数据库文件
//step4.1打开数据库,创建记录集合对象 m_pDatabase = new CDaoDatabase; try{ m_pDatabase->Open(m_DBFileName); m_pRecordset = new CDaoRecordset(m_pDatabase); m_List.EnableWindow(true); } catch (CDaoException* e){ e->ReportError(); delete m_pDatabase; m_pDatabase = NULL; e->Delete(); return; }Step4.2:读取Student_Info表结构显示在CListCtrl控件中。
//step4.2 读取数据库中的“Student_Info”表的结构 //写入FormView中的CListCtrl控件中。 m_strTableName = _T("Student_Info"); // 设置当前操作的数据库表名称 int nFields; CDaoFieldInfo fieldInfo; // 取表的结构信息 CDaoTableDef td(m_pDatabase); // 表对象 try{ td.Open(m_strTableName); //打开指定名称的表 nFields = td.GetFieldCount(); //获取该表的栏数 for (int j=0; j < nFields; j++){ td.GetFieldInfo(j,fieldInfo); //获取每个栏的信息 int nWidth = m_List.GetStringWidth(fieldInfo.m_strName) + 15; m_List.InsertColumn(j,fieldInfo.m_strName,LVCFMT_LEFT, nWidth); } }catch (CDaoException* e){ e->ReportError(); e->Delete(); return false; } td.Close();Step4.3:读取数据并显示
//step 4.3 读取表的数据,写入FormView中的CListCtrl控件中。 int nItem = 0; try{ //拼一个SQL查询语句:select * from [Student_Info] CString strSelect(_T("Select * From [")); strSelect += m_strTableName; strSelect += _T("]"); //指定m_pRecordset类型为动态类型,同时查询 m_pRecordset->Open(dbOpenDynaset,strSelect); while (!m_pRecordset->IsEOF()) { COleVariant var; var = m_pRecordset->GetFieldValue(0); //第0列 m_List.InsertItem(nItem,strVARIANT(var)); for (int i=0; i < nFields; i++){ var = m_pRecordset->GetFieldValue(i); CString strItem = strVARIANT(var); int width1 = m_List.GetColumnWidth(i); int width2 = m_List.GetStringWidth(strItem)+15; if (width2 > width1){ m_List.SetColumnWidth(i,width2); } m_List.SetItemText( nItem,i,strItem); } nItem++; m_pRecordset->MoveNext(); } } catch (CDaoException* e) { e->ReportError(); e->Delete(); return false; }由于显示数据库内容在程序其他地方也要用,因此单独做成函数OnUpdateView,详见代码.
操作数据库的一般方法:用CString拼一个SQL语句,然后调用程序去执行该语句,解析返回的结果,显示结果。
DAO编程-----添加数据
Step5.1:编写OnAddButton函数,核心就是拼一个SQL语句,如下void CW13_1View::OnAddButton() { //检查数据是否完整 UpdateData(true); if (m_strName1.GetLength()<2 || m_strNum1.GetLength()<1) { MessageBox("必须填写姓名和学号"); return; } CString strGender,strClass; m_Combo1.GetWindowText(strGender); m_Combo2.GetWindowText(strClass); //数据准备完毕,开始写入数据 m_strTableName = "Sdudent_Info"; if(!m_pDatabase->IsOpen()) return; // 测试DAO数据库对象的有效性 if(!m_pRecordset) return; if(m_pRecordset->IsOpen()) m_pRecordset->Close(); // 拼一个SQL语句 CString strSql; strSql.Format("insert into Student_Info(学号,姓名,性别,班级,EMail) \ values('%s','%s','%s','%s','%s')",\ m_strNum1,m_strName1,strGender,strClass,m_strEmail); try{ if(m_pDatabase->CanUpdate()) m_pDatabase->Execute(strSql, dbDenyWrite|dbConsistent); } catch(CDaoException* e){ e->ReportError(); e->Delete(); return; } //写入完成,更新view UpdateView(); }在添加数据后,调用 UpdateView();完成数据库更新。
这里注意两个bug:
程序并没有实现“学号重复”的判断。
程序每次添加数据都要重新读取数据库里所有内容,当数据量很大时,显然不现实,还需要改进,比如,通过添加翻页机制,将刷新范围局限在一页内。
DAO编程------编辑数据
Step6: 编辑数据不再给出代码,只给出一个思路:添加ListView的双击事件,将对应条目数据推入控件显示,并将Add按钮名称改为“编辑”。
记录要修改的条目的索引,即“ID”, 修改控件中的数据,完成后点击按钮,编写SQL语句,根据记录的ID,将控件数据“更新”而非“添加”到数据库
最后更新界面。
DAO编程----删除数据
在ListCtrl中按下delete按键后,删除对应的条目
Step7.1: 在View类中重载PreTranslateMessage,实现对键盘事件的响应
BOOL CW13_1View::PreTranslateMessage(MSG* pMsg) { CWnd *pwnd = GetDlgItem(IDC_LIST1); if( pMsg->message == WM_KEYDOWN ) { switch( pMsg->wParam ){ case VK_DELETE: if(GetFocus() == pwnd){ //判断焦点在不在IDC_LIST1上 DeleteItem();//将删除代码放在这里,做成一个函数 } break; default: break; } } return CFormView::PreTranslateMessage(pMsg); }Step7.2: 编写DeleteItem函数,实现删除数据
bool CW13_1View::DeleteItem() { m_strTableName = "Student_Info"; if(!m_pDatabase->IsOpen()) return false; if(!m_pRecordset) return false; if(m_pRecordset->IsOpen()) m_pRecordset->Close(); //获取当前选择的项的索引 int nSelect = m_List.GetSelectedCount(); if (nSelect > 0) { CString strID; // 获取ID,根据ID拼删除SQL命令 strID = m_List.GetItemText(nSelect, 0); CString strSQL; strSQL.Format("delete from %s where ID=%s", m_strTableName, strID); try{ m_pDatabase->Execute(strSQL); } catch (CDaoException* e) { e->ReportError(); e->Delete(); return false; } m_List.DeleteItem(nSelect); UpdateData(false); } return true; }
DAO编程----查找数据
查找数据的核心,是建立一个SQL查询语句,根据查询结果建立一个记录集,并将记录集中的检索结果显示在视图里。首先看精确查找
精确查找允许按照姓名或者学号进行匹配,两者有一即可。
Step8.1 查找代码,根据不同情况拼SQL语句
void CW13_1View::OnFind1Button() { //精确查找代码 if(!m_pDatabase->IsOpen()) return; if(!m_pRecordset) return; if(m_pRecordset->IsOpen()) m_pRecordset->Close(); UpdateData(true); CString strSelect; if (m_strName2.GetLength()==0 && m_strNum2.GetLength()==0) { MessageBox("请补充数据"); return; } m_List.DeleteAllItems(); if (m_strName2.GetLength()==0){ strSelect.Format("SELECT * FROM Student_Info WHERE 学号 like '%s'", m_strNum2); }else if (m_strNum2.GetLength()==0){ strSelect.Format("SELECT * FROM Student_Info WHERE 姓名 like '%s'", m_strName2); }else{ strSelect.Format("SELECT * FROM Student_Info WHERE 姓名 like '%s' AND 学号 like '%s'", m_strName2,m_strNum2); } int nItem = 0; try{ // 取记录集的数据 m_pRecordset->Open(dbOpenDynaset,strSelect); while (!m_pRecordset->IsEOF()) { COleVariant var; var = m_pRecordset->GetFieldValue(0); m_List.InsertItem(nItem,strVARIANT(var)); for (int i=0; i < 5; i++){ var = m_pRecordset->GetFieldValue(i); m_List.SetItemText( nItem,i,strVARIANT(var)); } nItem++; m_pRecordset->MoveNext(); } } catch (CDaoException* e){ e->ReportError(); e->Delete(); return; } }模糊查找
原理与精确查找一样,只是稍微复杂一点:
要查找所有列,一旦有类似的,就显示出来。
小结
利用DAO编程,基本思路非常清晰:拼写SQL语句,调用execute方法执行该语句,分析结果并且显示。类似,所有数据库编程接口,都采用该方式设计。
下篇给大家介绍ADO和ODBC的编程方法。
解决W13_1中的遗留问题,包括:
向程序中添加“学号重复”的判断,如果学号重复,则更新而非添加。
实现模糊查询,输入字符串,显示出所有匹配的字符。如输入abey,则显示所有叫abey的学生的信息,以及邮件中出现abey字符的项。
该程序仍然不完善,尽可能修改其中的逻辑bug
向程序中添加“学号重复”的判断,如果学号重复,则更新而非添加。
实现模糊查询,输入字符串,显示出所有匹配的字符。如输入abey,则显示所有叫abey的学生的信息,以及邮件中出现abey字符的项。
该程序仍然不完善,尽可能修改其中的逻辑bug
解決VC6.0"Error spawning link.exe"問題
解決"Error spawning link.exe"錯誤最近用VC6.0編寫MFC程序突然出現"Error spawning link.exe"這樣的問題,無論編譯任何程序全部都是這個錯誤,有的時候直接整個VC6.0崩潰,害得我我自己都快崩潰了.
查"Google",查資料,終於找到了可行的解決方案,不過在之前參考了很多很多網站,才慢慢知道這個問題所在,一開始還以為是我的電腦系統盤空間不足的原因.
解決方案:
點擊 "Tools" -> "Options" ->"Directories",按下圖重新設置"Excutable Files、Include Files、Library Files、Source Files"
C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin C:/Program Files/Microsoft Visual Studio/VC98/BIN C:/Program Files/Microsoft Visual Studio/Common/TOOLS C:/Program Files/Microsoft Visual Studio/Common/TOOLS/WINNT
Executable Files
C:/Program Files/Microsoft Visual Studio/VC98/INCLUDE C:/Program Files/Microsoft Visual Studio/VC98/MFC/INCLUDE C:/Program Files/Microsoft Visual Studio/VC98/ATL/INCLUDE
Include files
C:/Program Files/Microsoft Visual Studio/VC98/LIB C:/Program Files/Microsoft Visual Studio/VC98/MFC/LIB
Library Files
C:/Program Files/Microsoft Visual Studio/VC98/MFC/SRC C:/Program Files/Microsoft Visual Studio/VC98/MFC/INCLUDE C:/Program Files/Microsoft Visual Studio/VC98/ATL/INCLUDE C:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC
Source files
至此,OK.重新運行VC6.0,應該一切OK了.
方法二:
最简便的方法: 启动VC时不要用图形界面,通过在命令提示符下输入:Msdev /useenv运行(注意啦/前面有个空格).它会强制使系统环境变量全高设置成正确值.而且,只需要使用一次这样的方式运行VC,以后再次通过双击图标的方式启动也不会有问题.
参考:http://fengzidong.blog.51cto.com/4508685/832260
2012/6/9 更新
今天又有同学遇到相同的问题,经过排查,发现原因出在他的Visual Studio装在了非系统盘,而要在非系统盘找到以上你个目录是很难的事情,所以我直接建议重装了.
Google Calendar使用
Google Calendar是一个用来管理时间,提高效率的工具,我第一听说这个工具还是在校际选修课,WEB2.0资料与获取,课上听老师推荐的.自此以后就一发不可收拾,一直用到今天.写这篇文章,我也就不多讲Google Calendar的技巧了,因为Google搜一下这样的技巧太多了.我就直接讲讲我是怎么使用这一工具的.
##ReadMore##
一.用来当课程表
每当一学期开课,我都会新建一张日程表,把课程表完整的输入到Google Calendar中,然后设置提醒方式为手机短信,这样每当上课前10min,Google都会发短信过来,提醒我要上课了,地点在,哪个教室.这样即使忘记在哪个教室上课,也能在短信通知到后及时的赶去.当然,把课表输入进去的时候千万小心,设置单双周课的时候记得发生频率是两个星期.
二.用来规划时间
每当有事情过来限定时间内完成的,我都会在上面标注,并选择提醒方式,以免到时候忘记.就比如说现在我设定过一个每星期五晚上要查看一下有没有Java作业,因为我们老师不会在上完课后立即给出题目,总要到固定时间放出题目来,所以没办法只能这样设定一下了.所以现在我养成了一个习惯,每当有一件事情要交给我做的时候,我要检查一下Calendar,这个时间段内,我有没有其他的事情.
三.团队的合作
团队间极好的沟通交流的方式,完全可以替代短信,电话通知的功能,却没有多少人用,可悲之极.这个功能我也不大用,因为身边的人,可能连Google Calendar是什么都不知道呢!!如何谈团队..具体的方法可以看这里
四.同步
如果你有一台Android手机,或者任何的智能一点的手机,电脑上所有的操作完全同步到手机,方便查看,手机上的操作,同样同步到WEB端,这样无论走到哪里,都能方便的查看自己的日程.
五.Labs
深度的Google用户一定都知道Google的每一项服务总会有那么几个Labs实验项目,我就说说我开启的那些Labs
1)Hide morning and night
这个实验功能是隐藏那些出现事情很少的时间段,就比如我,隐藏了早上0点到7点,因为这段时间根本不能有多少事情发生,拜拜浪费了很多空间,还不如隐藏了.
2)Background image
这个实验项目顾名思义,给日程表加一个背景
2)Background image
这个实验项目顾名思义,给日程表加一个背景
六.......
要是想看技巧,可以查看一下几篇文章.
為什麼我熱愛Google
身邊總是有很多人问我为什么喜歡Google,喜歡到無可救藥?那接下来我就说说我为什么如此执着于Google.
從我用上網絡起,就看很多博客的標籤雲中最大的就是Google,我原先不懂,真的不懂,那時天真的我還以為,上網就是上扣扣.現在回想起來,我感到沒有早一點接觸Google是我人生的一大憾事.
##ReadMore##
現在回憶起來,什麼原因使我一步一步愛上Google,還真是一個複雜的過程.高三的時候,高考前,爸爸跟我提了一件事----Google要推出中國----當時我的第一反應就是不可能,我已經忘記了我當時為什麼會有這樣的判斷.但是後來發生的事情大家都知道了.2010年3月23日,Google宣布推出中國.想起這個日子,我絕對不會知道這個對於我現在產生多大的影響.而那些Google退出中國的事情,我也是後來陸續翻看可能吧博客的舊文才知道.
我真心的想到Google中國北京總部門前去和那個"文物"去和一張影.
可能吧博主在文章中也寫的很清楚,Google退出中國可能致使中國互聯網倒退了十年.我現在寫這篇文章,時間已經過去了兩年了.我看到了身邊的人一點一點忘記Google,偶爾和他們提一點Google,他們總是理智氣壯的說,我們不是有Bai毒嘛.
已經回憶了很多當年的事情了,回到現在.幾點我離不開Google的理由:
一.如果你是一個熱愛自由的人,你就會喜歡上Google
Google會告訴你任何你想知道的事情,因為Google有著一個非常美好的理想----組織全球信息,並使每個人都能從中獲利(英文版 中文版),Google是一個美好的象徵.Google為多少國人提供了越過長城,走向自由的渠道.Google為多少國人提供了自學成才的途徑.Google為多少人提供了一個又一個實用的工具.這些工具讓我們一點一點從效率低下中走出.讓我們知道了互聯網是平等的,或者說互聯網又是民主的.
二.Google的服务实用,高效
下面这张图是我用的所有的Google服务.(到截图的日期为止,我总共使用40项服务).当然还有很多的服务我没有体验到,Google就已经将他们砍掉了.
四.Google已經從一個純粹的搜索引擎變成了一個設計Web方方面面的巨頭
雖然Larry Page主政以來,Google變了很多----其實我很慶幸我自己在Google交到Page手裡才真正的開始使用各大服務,我害怕當我沉浸在一個好的服務中的時候,那個服務被Google砍掉----Page在上台後,要做的事情就是把Google這個品牌打響亮,Google不再是分散的Google,Google的所有服务将会有统一的名字,将会一个帐号通用所有一切服务,并且Google的重心明显被放到了Google+上,Google+是Google发展的重中之重,所以才有Google+上的一次又一次更新(界面的更新,Hangout的更新,iOS设备上Google+的更新)
笑来老师 我爱Google 谁也挡不住对自由的向往。这就是为什么我们热爱Google。
二.Google的服务实用,高效
下面这张图是我用的所有的Google服务.(到截图的日期为止,我总共使用40项服务).当然还有很多的服务我没有体验到,Google就已经将他们砍掉了.
Google每一項服務拿出來就是一篇很長的文章,我在各大博客,網站上看了不少,只是還沒有來得及總結.Gmail一個在一般人眼里普普通通的郵箱服務都有很多的技巧,更不必說其他更複雜的服務.值得一提的還有Google的大部分服務都有快捷鍵,我很喜歡快捷鍵,因為這樣能節省很多的時間.
三.Google是值得尊敬的公司(沒有之一)
Google創造的公司文化,成為矽谷的經典,以至於後來的公司都要去學習這一套模式.Google會為自己的理想而拋棄能為她盈利的市場.沒有一個公司願意這樣做.也沒有一個公司會這麼做.但是Google做了.Google是不一樣的.
四.Google已經從一個純粹的搜索引擎變成了一個設計Web方方面面的巨頭
雖然Larry Page主政以來,Google變了很多----其實我很慶幸我自己在Google交到Page手裡才真正的開始使用各大服務,我害怕當我沉浸在一個好的服務中的時候,那個服務被Google砍掉----Page在上台後,要做的事情就是把Google這個品牌打響亮,Google不再是分散的Google,Google的所有服务将会有统一的名字,将会一个帐号通用所有一切服务,并且Google的重心明显被放到了Google+上,Google+是Google发展的重中之重,所以才有Google+上的一次又一次更新(界面的更新,Hangout的更新,iOS设备上Google+的更新)
笑来老师 我爱Google 谁也挡不住对自由的向往。这就是为什么我们热爱Google。
SQL Server的糾結
最近學數據庫,我們教材使用的是SQL Server做實驗,所以不得已需要下載SQL Server,以前一直知道一個叫MSDN itellyou 的網站,這上面有所有MS的軟件,系統,可是最近卻不能訪問了.無奈之中找到了一個備份網站.在那裡找到了下載鏈接.現在分享一下.
SQL Server 2012
文件是下好了.卻不知道怎麼用了.沒有圖形化界面,開始菜單裡都找不到一個啟動的圖標.查網絡,還需要什麼圖形化的界面.於是無意中找到了一個Microsoft Download Center貌似在這裡能找到官方的安裝文件.
網上有人推薦 具有高级服务的 Microsoft® SQL Server® 2008 Express 看上去還可以,這個安裝文件是直接帶圖形化界面的.所以可能要簡單一點.
文件是下好了.卻不知道怎麼用了.沒有圖形化界面,開始菜單裡都找不到一個啟動的圖標.查網絡,還需要什麼圖形化的界面.於是無意中找到了一個Microsoft Download Center貌似在這裡能找到官方的安裝文件.
網上有人推薦 具有高级服务的 Microsoft® SQL Server® 2008 Express 看上去還可以,這個安裝文件是直接帶圖形化界面的.所以可能要簡單一點.
韩寒:亲爱的祖国,请你不要继续堕落
韩寒:亲爱的祖国,请你不要继续堕落我的祖国已经越来越显现出浮躁,狂热,悲哀,迷茫的气息。社会在财富的迅速积累下,糜烂与堕落,国富民衰的迹象越来越明显,各级政府处处想着与民争利,社会两极分化异常严重。富人们肆无忌惮的忘乎所以,穷人们走投无路般的苟延残喘,青年人的思想在社会的约束中扼杀,中年人的幸福被居高不下的房价击碎,老年人的健康被日益污染的环境毁灭。学术界一潭死水,文化界死水一潭,政治界腐败堕落,娱乐界本着娱乐至死的精神,麻痹所有还有一丝想要抗争与改变的人们,所有中国人都在争骗抢夺,生怕自己被别人挤下去。高油价,高房价,与民争利的地方政府绑架了整个中国的向前发展,弱小的人民只有在网上穿着马甲,搞笑娱乐,无奈自嘲,解构雷人。这便是如今国家最大的可悲。看似表面的欢声笑语一团和气掩盖着深深的悲哀。看似繁荣向上的祖国,却处处充满了不可预测的危机。作为一名普通的中国年轻人,我担心未来的国家会像虚幻的巴比伦之城一样在顷刻间坍塌毁灭。所以,我亲爱的祖国,请你不要继续堕落了。
##ReadMore##
2004年左右是中国人的集体幸福年代,那时物价尚低,人民收入稳中有升,食堂半勺肉菜1块2毛5,93汽油3块2毛3,伊利芦荟味酸奶也曾经1块5毛,北京三环以内房价才万元不到,个税起征点调到2000元。但之后随着2007年的猪肉上涨,中国物价就像坐云霄飞车一样,直奔九天。至今的三年时间里,各类物价至少上涨30%,而此时,中国人的平均工资并没有上涨30%,更有大学生毕业那天我们一起失业,每个月挣1000元不到,在大城市中贷款租房,贷款买公交月票,死死挣扎在生活底线的边缘。不是我们不去心怀理想,而是这个社会不允许我们心怀理想。傻逼脑残超级不反应中国社会现状的《一起去看流星雨》没有被封杀,反而是打动感动每个80后,反应房价居高不下的《蜗居》准备开始封杀了。说什么,剧中言语不符合社会主义精神文明建设!我就不明白了,大家都是成年人,又不是释迦摩尼,谁没看过A片,谁没有过圈圈叉叉,谁心里没想过这个那个。要知道孔夫子也是有儿有女的。说明什么?说明孔子也是被激情燃烧过的...
亲爱的广电总局,把好片子好电影禁播后,留下一群毫无内涵的文化垃圾,污染已经被严重污染的祖国花朵…山西黑砖窑,陕西华南虎,云南躲猫猫,贵州俯卧撑,湖北捞尸船,湖南小白宫,重庆黑社会,杭州欺实马,北京圈地运动,上海钓鱼执法,广州飞车抢劫,纵观中国天下,社会已经浑成了这样,广电总局还管什么“马上回去给你吃棒棒糖。”吃怎么了,草莓口味,香草口味的又怎么了!都当婊子好多年了,还立什么精神文明大牌坊。
说罢总局,让我们看看令人蛋疼的中国油价。中石化、中石油近两年的行径已经失信于整个国人。有几十亿美金投资非洲南美的油田,有几千万人民币装修自己公司的大吊灯,就不知道体谅百姓们的苦衷。去年国际油价最高的时候,美国油价4美元一加仑,中国油价6块钱一升。后来国际油价暴跌,美国油价2美元一加仑,中国油价6块钱一升。最近国际油价略有升高,美国油价是2.5美元一加仑,中国油价竟一口气冲破了6块钱。说什么与国际接轨,中国油价压根涨上去就没落下过来。偶尔落下来,又迅速涨回去!中石油股票就圈了亿万中国人的钱,油价又抢了亿万中国人的钱,最近天然气还要逼宫涨价。还说什么民族企业要支持。要不是垄断经营,谁他娘的支持这么不善良这么贪婪的中国企业。美国企业想着社会责任,信誉形象,回报民众,持续发展。中国国有企业就想着千方百计的从老百姓里抢钱,牌子大的大抢,牌子小的小抢。后来中石化有人站出来辟谣,其实吧,我们屋里的大吊灯没有花1000万,你们实在是误解毫不利己,专门利人的国有企业了,我们很疼很受伤,这个吊灯也就值800万……
对于这些善良的中国大企业,我已经无话可说,让我们看看更令人蛋疼的中国房价。最近看到一篇文章谈论如今中国疯狂的房价,确实不能不让人担忧。原来,中国的房地产业已经把地方政府、国家经济及民众利益捆绑在一起,要挟着整个中国内地经济。国务院发展研究中心宏观经济研究部部长余斌近日表示,房地产业占到GDP的6.6%和四分之一投资,直接相关产业达60个,已成为中国经济的直接命脉。一旦房地产市场出现大的波动,现阶段依靠房地产发展生产的几十个行业,如钢筋水泥生产商等,还有那些投资房地产业的大中型企业都将受到无法估量的损失,甚至可能因为大量资金的丧失,让失血严重的中国实体经济崩溃。更重要的是那些给房地产业巨量信贷的银行将陷入数以万亿计的坏账、死账当中,对中国金融业造成毁灭性的打击。
美国一套房子的平均售价是20-30万美元,大约是100多万人民币,而且美国所指的这些房子都是国内所说的的上下两层带车库的别墅(House)。但京沪深三市,随便50-60平米的小户型,一百好几十万就跟说着玩一样。中国虽然2012还要拯救地球,但是谁都知道,如今的中国没有超过美国的经济实力,更没有美国完善的社会保障,以百姓硬性需求的房屋当做国家经济前进的动力,危险系数实在太高了。美国人平均工资2000-3000美金,人家攒钱买20万美金的房子。我们中国人平均工资2000-3000人民币,我们也攒钱买20万美金的房子。这个比较大家很容易看清楚了吧。
换种说法,中国房价现在不能跌,因为一旦跌了,政府、银行、各大企业都会遭受重大的损失。政府从中牟利是不容否认的。所以,如果与民争利的政府利益不能被侵害,只能牺牲老百姓的利益了。房价2万块一平米,一个月2500元的工资都不够被中国移动、中国石油抢的,喝着毒牛奶,吃着注水肉,去餐馆点盘凉菜花个百八十,去医院看个感冒花个百八千,孩子上幼儿园还要每个月交3000元的赞助费,这要省吃俭用到何年何月才能买得起一套房子啊!中国企业还有一点是非常抢钱的,虽然如今人民币兑美元是6.8比1,但是中国引进的所有美国商品物价,全都是按照8比1换算计价的。中国百姓一点也没有享受人民币升值带来的那一丝好处。而且政府近期还要计划征收企业发放给员工的生活补贴费。使本来就捉襟见肘的青年人,生活更加艰辛。
CNN,发现美国人一报道国内,就是美国经济水深火热,无数美国人挣扎在生活底线,早上5点出去上班,晚上10点下班,要养三个孩子。爷爷都70岁了,还天天扫大街,不能退休,因为跟股市挂钩的养老金全都跌光了,房子没有了,他只能住在清洁车上,怎一个惨字了得。但是CNN一报道中国,就是中国内地富豪采购团又在香港置地,买高档用品。因为中国最有能力的消费阶层年龄偏低,外国都是47岁左右,而中国大约只有35岁左右。(外国靠奋斗,中国靠继承)所以国外的奢侈品牌都改变自己的营销策略,设计符合年轻富豪审美的商品。CNN接着报道中国北京、上海某地举办超级跑车大赛,这些高档跑车,在中国的售价都比国外高上2到3倍,但中国富豪们还是蜂拥而至的前来购买。炫富的程度一点不逊于中国魏晋南北朝时期的士族阶级。这可把欧洲美国的奢侈品公司高兴坏了,因为中国富人为他们濒临破产的公司全部买单。看到这些新闻,我作为一个中国人一点喜悦之感都没有,只有深深的悲哀。
社会脏了,人心散了,大家就像参加最后的狂欢一样,在不知不觉中娱乐至死。娱乐新闻就是貌美大明星嫁了才俊大富豪,大富豪家有车有房有奶,买一个包包要花多少钱,一群珠光宝气的傻大姐参加什么慈善晚会,去什么高档会所,又走光露点了。学术新闻就是某某教授抄袭了,剽窃了,潜规则了,被人砍了。政治新闻就是祖国很牛很强大,人民很好很幸福。经济新闻就是股市有望触底反弹,房价继续稳中有升。原来,我们中国人的自信心就建立在这些虚妄的空中楼阁之上,一点科技含量也没有。跑车、别墅、明星、流星雨、嫁豪门,大众媒体的导向让中国人都去向钱看齐,还有谁去思考如何建设一个人心向上的中国社会。
人无远虑,必有近忧。生于忧患,而死于安乐。得民心者得天下。中国,请你擦亮双眼!不要被短期的利益,西方国家的恶意吹捧,虚假的繁荣所蒙蔽,其实百姓们的生活还是辛苦的,他们劳累的心灵还是需要被温暖的。亲爱的祖国!我真想改变些什么,改变这即将堕落的人心,改变这只为名利钱财而运转的社会。但是我无能为力,国家都混乱了,我们个人生活得再好又能怎样呢?想想《乔家大院》的最后结局,乔致庸最终实现了他天下通银的梦想,但这是靠乔家给各地官府运送耻辱的“庚子赔款”来实现的,这叫发国难财。所以,我们个人的奋斗要和国家的前进融合在一起才行。国不幸,家不幸,人不幸。只有中国的大环境充满希望,我们每个中国人才能真正的看到希望。这不是用娱乐搞笑来麻痹自己,而是勇敢追求我们应得的幸福。国际社会如何捧我们,说我们蓬勃发展不重要,关键是我们自己是否感觉幸福的像花儿一样。日本快速发展后的迅速衰落,值得所有国人警惕。
我是一只不招人喜欢的流浪之猫,我可以选择默默消失在人群,喝得醉生梦死,绝尘而去。但是我的祖国,你不能!因为你寄托了十三亿人的希望!你不应该让你的人民绝望哭泣,为了房价油价艰难的活在这个不公平的世间!恶性竞争,相互猜忌,急功近利,炫富自大,冷酷无情,心无大爱,这不是一个负责任的大国国民应该做的事情。“娱乐至死”伤害的只是我们那颗本来纯洁而又充满希望的内心。不是满声牢骚,杞人忧天,只是已到危机之时。我们能够做的唯有认清现实。”
对话框编程
创建和使用对话框
在程序中创建和使用对话框向现有程序中插入一个新的对话框资源(Ctrl+R)
添加新对话框后,资源管理器中就会出现新的对话框,并且有一个空对话框界面。
在对话框上右键属性(alt+Enter),修改ID和各项属性。
拖动控件到新的对话框内,与之前控件使用方法完全一致。
为新创建的对话框添加对应的Dlg类
在MyDlg1对话框中启动类向导(Ctrl+W),弹出询问
为新创建的对话框添加对应的Dlg类
在这里起名字的时候,最好以"C"开头
布置新的对话框中的控件,
启动类向导:添加控件变量,处理所有控件的消息响应
启动类向导:为类添加WM_INITDIALOG消息响应,添加默认的初始化函数OnInitDialog()。
到此,就已经在程序中添加了一个新的对话框。程序原有的对话框,一般称为主/父对话框,新建的对话框又称为子对话框。
新添加的对话框,实际上是一个类,需要在主对话框中声明一个对话框变量,然后启动该对话框,才能使用。
回顾:Dlg程序运行的步骤:
MFC的WinMain函数中,通过多态找到当前程序的App对象,调用其InitInstance函数,并且在其中实现如下代码:
CW6_1Dlg dlg; m_pMainWnd = &dlg; Int nResponse = dlg.DoModal(); If(nRespone == IDOK){ //TODO: Place code here to han
类似,通过在父对话框中使用MyDlg类对象,执行DoModal()方法,就可以显示出对话框。
然后在一个按钮控件的响应函数中写代码,就可以显示出新的对话框。#include “stdafx.h” #include “W6_1.h” #include “W6_1Dlg.h” #include “MyDlg1.h”首先,在主窗口的Dlg.cpp文件中 #include 新建对话框的头文件
Void CW6_1Dlg::OnButton1(){ CMyDlg1 dlg; If(dlg.DoModal()==IDOK){ MessageBox(“OK”): }else{ MessageBox(“Cancel”); }主窗口通过DoModal方法启动子窗口后 ,失去消息循环,进入等待。直到用户点击子窗口中的确定或者取消后,子窗口关闭,主窗口恢复到前台。
点击子窗口的确定按钮,会自动执行updatedata(true),并向DoModal返回IDOK。
当点击取消按钮时,子窗口直接关闭,返回IDCANCLE。
主窗口首先判断DoModal的返回值,然后数据读取。
对话框之间的数据传输
第一种模式:从主窗口中读取子窗口的数据
对于Value类型的控件数据,如编辑框,在子窗口点击“确定”按钮后,能够自动更新,因此可以直接读取CMyDlg1 dlg1; If(dlg1.DoModal()==IDOK){ Cstring dlgstring=dlg1.m_strEdit; MessageBox(dlgstring); }对于Control类型的控件,如滑块,可以在子窗口类中添加一个成员变量,在关闭窗口前手动保存该数据,即可。
例子:在子对话框中建立一个滑块控件,点击确定后,主窗口中读取该滑块值。
Step1:在子窗口类中,声明一个public类型的 int变量
Step2:在滑块的消息响应函数中,实时修改该int变量
Step3:在主窗口中直接读取int变量。
第二种模式:在子窗口中修改父窗口数据(把数据填入主窗口)
观察窗口类的构造函数,其带有一个参数,该参数指明了其父窗口的窗口类指针。
class CMyDlg1 : public CDialog { // Construction public: CMyDlg1(CWnd* pParent = NULL); // standard constructor创建子窗口时,如果指定了该参数,那么在子窗口中就可以根据该指针调用父窗口的各类对象。
Step1: 在子窗口类中添加父窗口类的指针:
子窗口中修改父窗口数据(把数据填入主窗口)CWnd* m_pParent;Setp2: 在子窗口的构造函数中,初始化该指针:
CMyDlg1::CMyDlg1(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg1::IDD, pParent) { //{{AFX_DATA_INIT(CMyDlg1) m_strMyEdit = _T(""); m_nCurSliderPos = 0; m_pParent = pParent; //}}AFX_DATA_INIT }
Step3: 在父窗口中,利用this指针创建子窗口对象,
CMyDlg dlg(this);Step4:遍写子窗口代码,在一个按钮响应函数中,将编辑框内容读出,写入主窗口中的列表框。
void CMyDlg1::OnButton1() { UpdateData(true); if (m_pParent != NULL) { CListBox *pListBox ; pListBox = (CListBox*)m_pParent->GetDlgItem(IDC_LIST1); pListBox->AddString(m_strMyEdit); } m_strMyEdit = ""; UpdateData(false); }思考如下问题:
假如程序的主窗口中,启动了一项工作(如定时器),需要消耗一些时间。现在希望通过子窗口中的进度条来显示这项工作执行的进度,应该怎样实现?分哪几个步骤?
提示:利用子窗口中的定时器
模式对话框和无模式对话框
所谓“模式对话框”,是指当对话框被弹出时,用户必须在对话框作出相应的操作,在退出对话框前,其父窗口无法操作。
模式对话框一般需要有“确定”和“取消”两个按钮,通知其父窗口,用户在对话框内的操作是否有效。
我们之前使用的dlg程序,其实就是一个模式对话框。本节课介绍的dlg.DoModal() 方法,是在程序中生成一个模式对话框的标准方法。
与模式对话框相对应,“无模式对话框”是指当对话框被弹出后,一直保留在屏幕中,可以随时被激活,不影响其父窗口的使用。
无模式对话框,相当于一个程序拥有了多个可操作界面。灵活性增加,但也容易造成混乱。
与使用模式对话框的区别:
创建方法不同:需要自己编写对话框创建、显示代码
void CW6_1Dlg::OnButton1(){ CMyDlg1* pMydlg = new CMyDlg1;//创建一个类对象 pMydlg->m_pParent = this;//指定其父指针 pMydlg->Create(IDD_MY_DIALOG1);//创建对话框 pMydlg->Showwindow(SW_NORMAL);//显示对话框退出方法不同:需要自己处理内存,删除对象
void CMyDlg1::OnOK() { DestroyWindow(); delete this; //CDialog::OnOK(); } void CMyDlg1::OnCancel() { // TODO: Add extra cleanup here DestroyWindow(); delete this; //CDialog::OnCancel(); }
在子对话框中双击确定、退出按钮,添加默认的响应函数,在其中添加两行代码,实现退出时的内存清理。
由于不是通过DoModal方法创建窗口,因此主窗口仍然可以操作。
在任何时候,主窗口中都可以通过所创建的对话框对象指针来读取窗口内控件数据和变量数据。
反之,在子窗口中也同样可以通过指定其父窗口指针来实现数据写入和读取。
由于不是通过DoModal方法创建窗口,因此主窗口仍然可以操作。
在任何时候,主窗口中都可以通过所创建的对话框对象指针来读取窗口内控件数据和变量数据。
反之,在子窗口中也同样可以通过指定其父窗口指针来实现数据写入和读取。
各國語文教什麼
各國語文教什麼
全国中小学开学不久,一条关于语文教材删改内容的新闻引发热议:有消息称,全国多地的中学语文教材都有所调整,其中鲁迅的《阿Q正传》、《纪念刘和珍君》等多篇经典作品被删除。事实上,语文教材的变动在世界各国、各地区都是深受关注的社会议题。观察每个国家和地区不同的教材,能看出它们在教学思维、理念和宗旨上的差别。
美国:把语文课上成阅读课

美国一所中学正在试验“工作坊”式的语文教学。
语文课更像阅读课,13岁孩子要读6、7种风格英文作品
美国中学实行宽松的选课制,语文课也更像是“阅读分享课”。虽然美国大学入学对写作要求非常高,但很多中学都不设有专门的写作课程,而是通过阅读各种体例的作品、写书评等锻炼出来。至于语文课上读什么书,也由任课教师自己来开书单,无论教育部还是学校,都不会印发统一教材。尽管中学语文课深浅是可选的,但无论哪种课程,大量的阅读都逃不掉:刚上初中的13岁孩子,一个学期下来可能必须读6-7种风格的英文作品;而希望上好一点大学的高中生,平均一学期也要完整啃下10本左右名著。读《特洛伊》和《罪与罚》等大量小说,但不怎么读诗
与中国学生多少能吟诵几首唐诗宋词不同,美国教育工作者经常抱怨美国学生已不懂诗。几十年前,能读诗曾被美国人认为是一个“受过良好教育的人所应该具备的能力”。相反,小说、传记类阅读材料在美国中学语文课上所占比例却很大。从古希腊故事《特洛伊》、《奥德赛》,到莎士比亚的《哈姆雷特》,再到《安妮日记》、《罪与罚》和《蝇王》等,都是学生最经常被布置阅读的著作。与中国语文课本主要收录选段不同,美国中学生还要完整阅读整本著作,按进度在课堂上进行讨论。“读书会”语文课是传统模式,《哈利波特》也能作教材
一个班的学生同时读一本作品、并且进度也相当,是美国人熟悉的“读书会”式语文教育。但美国一些学区却大胆地引进了“工作坊”式的语文课,这意味着学生自己选择想读的书,并跟同学们分享。曾主张学生只该读“精华读物”英文文学教授Mark Bauerlein就表示,学生读《哈利波特》还是狄更斯(英国著名批判现实主义作家)都无所谓,关键是在信息时代保持阅读的习惯。
法国:“通识教育式”的语文课
图为法国中学生在参加会考。
被法国作为教学用途的200部电影之一《轻蔑》的剧照。
图为法国中学生在参加会考。
被法国作为教学用途的200部电影之一《轻蔑》的剧照。
受精英主义传统影响,纯文学作品深受教师青睐
与美国类似,法国中学的文学课程没有统一的国家教材,学校根据教育部定立的大纲自主选择课本。受多年的精英主义教育观念影响,法国的语文教育曾长期被等同于文学教育,16至20世纪的经典纯文学作品,尤其是法国和法语区的经典小说、诗歌和戏剧,都是法国中学教师热衷选择的教材。从巴尔扎克到雨果、从拉封丹到拉伯雷,几乎每一个法国文学分支都可能涉猎,文科的学生还要完整阅读如(意大利作家)兰佩杜萨的《豹》和莎士比亚的《罗密欧朱丽叶》等译作。
经典电影被作为语文教材,不避讳性和爱情
为了应对中学生越来越不愿意上文学课的现象,法国教育部今年5月宣布把电影引入文学课程,将学生感兴趣的性、浪漫和反叛精神引入日常课堂。法国教育部官员认为,他们选择的电影能帮助正经历青春期的学生更好地理解这些问题。在已公布的200部经典电影中,中学生将能在老师陪同下观看法国电影《轻蔑》(Le Mépris)中的男女主角“调情”,以及《赤胆威龙》(Rio Bravo)的枪战,并以自己的角度进行解读。每个法国人都要学哲学,会考作文要求解释《利维坦》
在法国,有个流行的说法,“每个法国人一生中都要过哲学这一关”。虽然法国高中生在高中阶段将分科(主修文科、经济社会或理科),但中学毕业会考时都需要考哲学作文(类似高考语文作文)。因此,法国中学生的“语文课阅读材料”涉猎非常广,除了经典法国文学作品,还须阅读萨特和加缪等看上去对中学生而言过于艰深的哲学作品。而这很可能还不够,2010年,法国中学会考作文,要求考生解释霍布斯《利维坦》(英国政治哲学巨著)和托马斯·阿奎那(中世纪意大利神学家、哲学家)的《神学大全》节录。
德国:将语文课上成公民教育

教材加入社会阴暗面,《伽利略传》讲述另一个版本的故事
20世纪90年代,德国曾对基础教育课程进行改革,目的是为了让教育“更适应社会发展”。在包括语文在内的科目,教材选取还专门加入了更多展现社会“阴暗面”(如种族歧视、违法犯法)的内容,以引导学生主动思考和解释社会现象。
台湾作家龙应台在一次谈到教育的访谈中,曾列举儿子安德烈上德文课的一个例子:安德烈的德文老师让学生在课上讨论布莱希特(Bertolt Brecht,德国作家)的剧本《伽利略传》,该剧本讲述的是科学家伽利略发现了地球的原理,但原理不被教会所接受。与多数学生熟悉的、伽利略如何坚持自己的理论不同,布莱希特的剧本却表现了伽利略面临选择的两难:硬碰硬、然后被教会迫害而死,或暂时屈服以保存自己。剧本的结尾是,伽利略选择了后者。
以“人与国家机器关系”的高度讨论文学作品
允许不一样的东西,仅仅展现了德国中学语文课的一面。在“不在吃饭就在思考”的德国,中学生的德文课的讨论更是与别不同。据龙应台的儿子安德烈回忆,对这部文学作品的理解远不仅到其“映射法西斯”的背景,课堂上的讨论甚至涉及到人与群体之间的关系、个人与国家机器间的关系,可以说已脱离了纯粹的语文教育。本身身为大学教授的龙应台称,这样语文课让人听着“惊心动魄”,因为它实际上已触及了“公民教育”的范畴。
中国台湾:最重视古文的语文课
台湾中学里老师讲授国文课的视频截图。
刚改不久的台湾语文教材被称为“重拾经典”,却因为文言文没有明显减少而引起一些绿营人士的不满。
刚改不久的台湾语文教材被称为“重拾经典”,却因为文言文没有明显减少而引起一些绿营人士的不满。
课本内容65%是文言文,中学生就读《古文观止》
在台湾,“教育部”会汇编供中学生统一使用的课本,但不少学校也在采用自编教材。文言文超过白话文比例,一直是台湾语文课本(台称“国文课本”)一大特色。在文言文比例被调低到45%之前(今年9月份又刚调整为45~65%的“弹性比例”),台湾学生高中三年学习的文言文比例逐渐递增,大约为高一的60%、高二70%和高三80%,其中选自先秦诸子的比例很重,但“教育部”最近又将选材范围拓宽至《诗经》、《左转》和《礼记》等文献。
文言散文集《古文观止》几乎是每一个台湾中学生都精读过的教材,大陆学生所熟悉的陶渊明《归去来辞》、王勃《滕王阁序》等散文,也在台湾学生最为熟悉的篇章之列。台湾国文科教材的白话部分,一部分选自余光中等有影响力的现当代台湾本土作家作品,而曾被列为禁忌的鲁迅和沈从文的作品,也被列入语体文部分。
教材曾用国民党要员著作内容,被指企图推行“党国教育”
《中国文化基本教材》是台湾中学国文科课程教材之一,原本只摘选孔孟篇章,但历史上经过几次版本修订。上世纪80年代,教材曾一度改用陈立夫(两蒋时期国民党政府要员)《四书道贯》为诠释核心,注释又大量采用孙中山和蒋介石的语录。这一版本被批评为将国文教育作为“党国教育”一环,甚至因被指企图传达执政者的政治意图、与孔孟的原意割裂而引起过争议,日后又改为被广泛采用的朱熹《四书集注》上的注释。
每个时代都有自己的文学经典,也有超越时代的不朽名篇,但经典和名篇并不是选取语文教材的唯一标准。美国人将流行文学引入语文教材,法国人考虑引进电影,中国台湾地区始终强调高比例的文言文阅读──而这里,并不存在孰是孰非的判断。好的语文教育,必然不为服从政治需求、也出于教化目的,同时有助于塑造完整的灵魂和独立的人格。
结语
每个时代都有自己的文学经典,也有超越时代的不朽名篇,但经典和名篇并不是选取语文教材的唯一标准。美国人将流行文学引入语文教材,法国人考虑引进电影,中国台湾地区始终强调高比例的文言文阅读──而这里,并不存在孰是孰非的判断。好的语文教育,必然不为服从政治需求、也出于教化目的,同时有助于塑造完整的灵魂和独立的人格。感謝:獨角獸資訊備份 互動百科備份
Java中Vector用法
java.util 类 Vector<E>boolean add(E o)将指定元素追加到此向量的末尾。
void add(int index, E element)
在此向量的指定位置插入指定的元素。
boolean addAll(Collection<? extends E> c)
将指定 Collection 中的所有元素追加到此向量的末尾,按照指定集合的迭代器所返回的顺序追加这些元素。
boolean addAll(int index, Collection<? extends E> c)
在指定位置将指定 Collection 中的所有元素插入到此向量中。
void addElement(E obj)
将指定的组件添加到此向量的末尾,将其大小增加 1。
int capacity()
返回此向量的当前容量。
void clear()
从此向量中移除所有元素。
Object clone()
返回向量的一个副本。
boolean contains(Object elem)
测试指定的对象是否为此向量中的组件。
boolean containsAll(Collection<?> c)
如果此向量包含指定 Collection 中的所有元素,则返回 true。
void copyInto(Object[] anArray)
将此向量的组件复制到指定的数组中。
E elementAt(int index)
返回指定索引处的组件。
Enumeration<E> elements()
返回此向量的组件的枚举。
void ensureCapacity(int minCapacity)
增加此向量的容量(如有必要),以确保其至少能够保存最小容量参数指定的组件数。
boolean equals(Object o)
比较指定对象与此向量的相等性。
E firstElement()
返回此向量的第一个组件(位于索引 0 处的项)。
E get(int index)
返回向量中指定位置的元素。
int hashCode()
返回此向量的哈希码值。
int indexOf(Object elem)
搜索给定参数的第一个匹配项,使用 equals 方法测试相等性。
int indexOf(Object elem, int index)
搜索给定参数的第一个匹配项,从 index 处开始搜索,并使用 equals 方法测试其相等性。
void insertElementAt(E obj, int index)
将指定对象作为此向量中的组件插入到指定的 index 处。
boolean isEmpty()
测试此向量是否不包含组件。
E lastElement()
返回此向量的最后一个组件。
int lastIndexOf(Object elem)
返回指定的对象在此向量中最后一个匹配项的索引。
int lastIndexOf(Object elem, int index)
向后搜索指定的对象,从指定的索引处开始搜索,并返回一个索引。
E remove(int index)
移除此向量中指定位置的元素。
boolean remove(Object o)
移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。
boolean removeAll(Collection<?> c)
从此向量中移除包含在指定 Collection 中的所有元素。
void removeAllElements()
从此向量中移除全部组件,并将其大小设置为零。
boolean removeElement(Object obj)
从此向量中移除变量的第一个(索引最小的)匹配项。
void removeElementAt(int index)
删除指定索引处的组件。
protected void removeRange(int fromIndex, int toIndex)
从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素。
boolean retainAll(Collection<?> c)
在此向量中仅保留包含在指定 Collection 中的元素。
E set(int index, E element)
用指定的元素替换此向量中指定位置处的元素。
void setElementAt(E obj, int index)
将此向量指定 index 处的组件设置为指定的对象。
void setSize(int newSize)
设置此向量的大小。
int size()
返回此向量中的组件数。
List<E> subList(int fromIndex, int toIndex)
返回此 List 的部分视图,元素范围为从 fromIndex(包括)到 toIndex(不包括)。
Object[] toArray()
返回一个数组,包含此向量中以正确顺序存放的所有元素。
<T> T[]
toArray(T[] a)
返回一个数组,包含此向量中以正确顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。
String toString()
返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。
void trimToSize()
对此向量的容量进行微调,使其等于向量的当前大小。
Vector是同步的。Array是不同步的。但是Array运行速度要比Vector要快。。但是一般我们都用Vector比较稳定而且安全
实例:
- import java.util.*;
- public class Test {
- public static void main(String args[]) {
- Vector vecFields = new Vector();
- String goods_name = "aaaaa";
- vecFields.addElement(new Field("goods_name", goods_name));
- vecFields.addElement(new Field("goods_test", "bbbbbb"));
- vecFields.addElement("string_test_sample");
- System.out.println(vecFields.size());//显示vecFields的长度(这里为3)
- Field field=(Field)vecFields.elementAt(0);
- System.out.println(field.getFieldName()+": "+field.getFieldValue());
- field=(Field)vecFields.elementAt(1);
- System.out.println(field.getFieldName()+": "+field.getFieldValue());
- System.out.println(vecFields.elementAt(2));
- }
- }
- class Field {
- private String fieldName;
- private String fieldValue;
- public Field(String fieldName, String fieldValue) {
- this.fieldName = fieldName;
- this.fieldValue = fieldValue;
- }
- public String getFieldName() {
- return this.fieldName;
- }
- public String getFieldValue() {
- return this.fieldValue;
- }
- }
引用:http://developer.51cto.com/art/200906/128499.htm