第一篇:C语言简易教程
C语言简易教程
变量(Variable)
现实生活中我们会找一个小箱子来存放物品,一来显得不那么凌乱,二来方便以后找到。计算机也是这个道理,我们需要先在内存中找一块区域,规定用它来存放整数,并起一个好记的名字,方便以后查找。这块区域就是“小箱子”,我们可以把整数放进去了。C语言中这样在内存中找一块区域: int a;int又是一个新单词,它是 Integer 的简写,意思是整数。a 是我们给这块区域起的名字;当然也可以叫其他名字,例如 abc、mn123 等。
这个语句的意思是:在内存中找一块区域,命名为 a,用它来存放整数。
注意 int 和 a 之间是有空格的,它们是两个词。也注意最后的分号,int a表达了完整的意思,是一个语句,要用分号来结束。
不过int a;仅仅是在内存中找了一块可以保存整数的区域,那么如何将 123、100、999 这样的数字放进去呢?
C语言中这样向内存中放整数: a=123;=是一个新符号,它在数学中叫“等于号”,例如 1+2=3,但在C语言中,这个过程叫做赋值(Assign)。赋值是指把数据放到内存的过程。把上面的两个语句连起来: int a;a=123;就把 123 放到了一块叫做 a 的内存区域。你也可以写成一个语句: int a=123;a 中的整数不是一成不变的,只要我们需要,随时可以更改。更改的方式就是再次赋值,例如:
int a=123;a=1000;a=9999;第二次赋值,会把第一次的数据覆盖(擦除)掉,也就是说,a 中最后的值是9999,123、1000 已经不存在了,再也找不回来了。
因为 a 的值可以改变,所以我们给它起了一个形象的名字,叫做变量(Variable)。
int a;创造了一个变量 a,我们把这个过程叫做变量定义。a=123;把 123 交给了变量 a,我们把这个过程叫做给变量赋值;又因为是第一次赋值,也称变量的初始化,或者赋初值。你可以先定义变量,再初始化,例如: int abc;abc=999;也可以在定义的同时进行初始化,例如: int abc=999;这两种方式是等价的。
变量定义的位置 在VC或VS下,变量定义要放在函数的开头;也就是说,在定义变量之前不能有其他代码。数据类型(Data Type)
数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。但问题是,该如何使用呢?
我们知道,诸如数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么,00010000 该理解为数字16呢,还是图像中某个像素的颜色呢,还是要发出某个声音呢?如果没有特别指明,我们并不知道。
也就是说,内存中的数据有多种解释方式,使用之前必须要确定;上面的int a;就表明,这份数据是整数,不能理解为像素、声音等。int 有一个专业的称呼,叫做数据类型(Data Type)。顾名思义,数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和程序员不会产生歧义。在C语言中,有多种数据类型,例如:
说
明
字符型
短整型
整型
长整型
单精度浮点型
双精度浮点型
无类型 数据类型 char short int
long
float
double
void 这些是最基本的数据类型,是C语言自带的,如果我们需要,还可以通过它们组成更加复杂的数据类型,后面我们会一一讲解。
连续定义多个变量
为了让程序的书写更加简洁,C语言支持多个变量的连续定义,例如:
int a, b, c;
float m = 10.9, n = 20.56;
char p, q = '@';
连续定义的多个变量以逗号,分隔,并且要拥有相同的数据类型;变量可以初始化,也可以不初始化。
数据的长度(Length)所谓数据长度(Length),是指数据占用多少个字节。占用的字节越多,能存储的数据就越多,对于数字来说,值就会更大,反之能存储的数据就有限。
多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。例如我们保存了一个整数 1000,它占用4个字节的内存,而读取时却认为它占用3个字节或5个字节,这显然是不正确的。
所以,在定义变量时还要指明数据的长度。而这恰恰是数据类型的另外一个作用。数据类型除了指明数据的解释方式,还指明了数据的长度。因为在C语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。
在32位环境中,各种数据类型的长度一般如下:
说
明
字符型
短整型
整型
长整型
单精度浮点型
双精度浮点型 数据类型
char short int long float double 长
度 2 4 4 4 8
C语言有多少种数据类型,每种数据类型长度是多少、该如何使用,这是每一位C程序员都必须要掌握的,后续我们会一一讲解。最后的总结
数据是放在内存中的,在内存中存取数据要明确三件事情:数据存储在哪里、数据的长度以及数据的处理方式。
变量名不仅仅是为数据起了一个好记的名字,还告诉我们数据存储在哪里,使用数据时,只要提供变量名即可;而数据类型则指明了数据的长度和处理方式。所以诸如int n;、char c;、float money;这样的形式就确定了数据在内存中的所有要素。
最后需要说明的是:数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。
这一节主要讲解C语言中的几个基本概念。标识符
定义变量时,我们使用了诸如“a”“abc”“mn123”这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用,这叫做标识符(Identifier)。
标识符就是程序员自己起的名字,除了变量名,后面还会讲到函数名、宏名、结构体名等。不过,名字也不能随便起,C语言规定,标识符只能由字母(A~Z, a~z)、数字(0~9)和下划线(_)组成,并且第一个字符必须是字母或下划线。
以下标识符是合法的: a, x, x3, BOOK_1, sum5
以下标识符是非法的: 3s
不能以数字开头 s*T
出现非法字符*-3x
不能以减号(-)开头
bowy-1
出现非法字符减号(-)
在使用标识符时还必须注意以下几点:
C语言虽然不限制标识符的长度,但是它受到不同编译器的限制,同时也受到具体机器的限制。例如在某个编译器中规定标识符前128位有效,当两个标识符前128位相同时,则被认为是同一个标识符。
在标识符中,大小写是有区别的,例如BOOK和book 是两个不同的标识符。
标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号,因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。
关键字 关键字(Keywords)是由C语言规定的具有特定意义的字符串,通常也称为保留字,例如 int、char、long、float、unsigned 等。我们定义的标识符不能与关键字相同,否则会出现错误。
你也可以将关键字理解为具有特殊含义的标识符,它们已经被系统使用,我们不能再使用了。
标准C语言中一共规定了32个关键字,大家可以参考C语言关键字及其解释[共32个],后续我们会一一讲解。注释
注释(Comments)可以出现在代码中的任何位置,用来向用户提示或解释程度的意义。程序编译时,会忽略注释,不做任何处理,就好像它不存在一样。C语言支持单行注释和多行注释:
单行注释以//开头,直到本行末尾(不能换行);
多行注释以/*开头,以*/结尾,注释内容可以有一行或多行。
运算符
C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表。
加法
减法
乘法
除法
求余数 数学
+
×
÷
无 C语言
+
*
/
% 加号、减号与数学中的一样,乘号、除号不同,另外C语言还多了一个求余数的运算符。
一个整数自身加一可以这样写: a+=1;它等价于a=a+1。
但是在C语言中还有一种更简单的写法,就是a++;或者++a。这种写法叫做自加或自增;意思很明确,就是自身加一。
相应的,也有a--和--a,叫做自减,表示自身减一。++和--分别称为自增和自减运算符。
自增自减完成后,会用新值替换旧值,并将新值保存在当前变量中。自增自减只能针对变量,不能针对数字,例如10++是错误的。
值得注意的是,++ 在变量前面和后面是有区别的:
++ 在前面叫做前自增(例如 ++a)。前自增先进行自增操作,再进行其他操作。
++ 在后面叫做后自增(例如 a++)。后自增先进行其他操作,再进行自增操作。自减(--)也一样,有前自减和后自减之分。int a=10, a1=++a;int b=20, b1=b++;结果: a=11, a1=11 b=21, b1=20
C语言提供了以下关系运算符:
关系运算符 含 义 数学中的表示 < <= > >= ==!= 小于 大于 等于 不等于
< > = ≠ 小于或等于 ≤ 大于或等于 ≥
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。
在C语言中,有的运算符有两个操作数,例如 10+20,10和20都是操作数,+ 是运算符。我们将这样的运算符称为双目运算符。同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符称为三目运算符。
常见的双目运算符有 +、-、*、/ 等,单目运算符有 ++、--等,三目运算符只有一个,就是 ? :,我们将在《C语言条件运算符》中详细介绍。
关系运算符的两边可以是变量、数据或表达式,例如: 1)a+b > c-d 2)x > 3/2 3)'a'+1 < c 4)-i-5*j == k+1
关系运算符的运算结果只有 0 或 1。当条件成立时结果为 1,条件不成立结果为 0。例如:
5>0 成立,其值为 1;
34-12>100 不成立,其值为 0;
(a=3)>(b=5)由于3>5不成立,故其值为 0。
我们将运算结果 1 称为“真”,表示条件成立,将 0 称为“假”,表示条件不成立。需要提醒的是,==才表示等于,而=表示赋值,大家要注意区分,切勿混淆。
在C语言中,也有类似的逻辑运算: 运算符
说明
结合性
举例 && 与运算,双目,对应数学中的“且”
左结合 1&&0、(9>3)&&(b>a)||
或运算,双目,对应数学中的“或”
左结合1||0、(9>3)||(b>a)!
非运算,单目,对应数学中的“非”
右结合!a、!(2<5)逻辑运算的结果
在编程中,我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假”,“真”对应的值为 1,“假”对应的值为 0。
1)与运算(&&)参与运算的两个表达式都为真时,结果才为真,否则为假。例如:
5&&0 5为真,0为假,相与的结果为假,也就是 0。
(5>0)&&(4>2)5>0 的结果是1,为真,4>2结果是1,也为真,所以相与的结果为真,也就是1。2)或运算(||)参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。例如: || 0 10为真,0为假,相或的结果为真,也就是 1。
(5>0)||(5>8)5>0 的结果是1,为真,5>8 的结果是0,为假,所以相或的结果为真,也就是1。3)非运算(!)参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:
!0 0 为假,非运算的结果为真,也就是 1。
!(5>0)5>0 的结果是1,为真,非运算的结果为假,也就是 0。
优先级
逻辑运算符和其它运算符优先级从低到高依次为:
赋值运算符(=)< &&和|| < 关系运算符 < 算术运算符 < 非(!)&& 和 || 低于关系运算符,!高于算术运算符。
前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条„„一直到最后一条语句,这称为顺序结构。
但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用,儿童因为年龄不够,没有权限使用。这时候程序就需要做出判断,看用户是否是成年人,并给出提示。
在C语言中,使用if和else关键字对条件进行判断。
if 和 else 是两个新的关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:
if(判断条件){
语句块1 } else {
语句块2 } 意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2。其执行过程可表示为下图:
所谓语句块(Statement Block),就是由{ }包围的一个或多个语句的集合。如果语句块中只有一个语句,也可以省略{ },例如:
if(age>=18)printf(“恭喜,你已经成年,可以使用该软件!n”);
else printf(“抱歉,你还未成年,不宜使用该软件!n”);
由于if else 语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构
只使用if语句
有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用 if 语句。也就是说,if else 不必同时出现。
单独使用 if 语句的形式为:
if(判断条件){
语句块 } 意思是,如果判断条件成立就执行语句块,否则直接跳过。其执行过程可表示为下图:
多个if else语句
if else 语句也可以多个同时使用,构成多个分支,形式如下:
if(判断条件1){
语句块1 } else if(判断条件2){
语句块2 }else if(判断条件3){
语句块3 }else if(判断条件m){
语句块m }else{
语句块n } 意思是,从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个 if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。
也就是说,一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。
在C语言中,共有三大常用的程序结构:
顺序结构:代码从前往后执行,没有任何“拐弯抹角”;
选择结构:也叫分支结构,重点要掌握 if else、switch 以及条件运算符;
循环结构:重复执行同一段代码。
前面讲解了顺序结构和选择结构,本节开始讲解循环结构。所谓循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+„„+99+100 的值,就要重复进行99次加法运算。
while循环
while循环的一般形式为:
while(表达式){
语句块 } 意思是,先计算“表达式”的值,当值为真(非0)时,执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”„„这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。
我们通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。
用 while 循环计算1加到100的值:
#include
int main(){
int i=1, sum=0;
while(i<=100){
sum+=i;
i++;
}
printf(“%dn”,sum);
return 0;
}
运行结果: 5050
代码分析:
1)程序运行到 while 时,因为 i=1,i<=100 成立,所以会执行循环体;执行结束后 i 的值变为 2,sum 的值变为 1。
2)接下来会继续判断 i<=100是否成立,因为此时 i=2,i<=100 成立,所以继续执行循环体;执行结束后 i 的值变为 3,sum 的值变为3。
3)重复执行步骤 2)。
4)当循环进行到第100次,i 的值变为 101,sum 的值变为5050;因为此时 i<=100 不再成立,所以就退出循环,不再执行循环体,转而执行while循环后面的代码。
while 循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了。
如果循环条件中不包含变量,会发生什么情况呢?
1)循环条件成立时的话,while 循环会一直执行下去,永不结束,成为“死循环”。例如:
#include
int main(){
while(1){
printf(“1”);}
return 0;
}
运行程序,会不停地输出“1”,直到用户强制关闭。
2)循环条件不成立的话,while 循环就一次也不会执行。例如:
#include
int main(){
while(0){ printf(“1”);}
return 0;
}
运行程序,什么也不会输出。
do-while循环
除了while循环,在C语言中还有一种 do-while 循环。do-while循环的一般形式为:
do{
语句块 }while(表达式);do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。
用do-while计算1加到100的值:
#include
int main(){
int i=1, sum=0;
do{
sum+=i;
i++;
}while(i<=100);
printf(“%dn”, sum);
return 0;
}
运行结果: 5050
注意while(i<=100);最后的分号;,这个必须要有。
while循环和do-while各有特点,大家可以适当选择,实际编程中使用while循环较多。
除了while循环,C语言中还有 for 循环,它的使用更加灵活,完全可以取代 while 循环。
上节我们使用 while 循环来计算1加到100的值,代码如下:
#include
int main(){
int i, sum=0;
i = 1;//语句①
while(i<=100 /*语句②*/){
sum+=i;
i++;//语句③
}
printf(“%dn”,sum);
return 0;
}
可以看到,语句①②③被放到了不同的地方,代码结构较为松散。为了让程序更加紧凑,可以使用 for 循环来代替,如下所示:
#include
int main(){
int i, sum=0;
for(i=1/*语句①*/;i<=100/*语句②*/;i++/*语句③*/){
sum+=i;
}
printf(“%dn”,sum);
return 0;
}
在 for 循环中,语句①②③被集中到了一起,代码结构一目了然。for 循环的一般形式为:
for(表达式1;表达式2;表达式3){
语句块 } 它的运行过程为: 1)先执行“表达式1”。
2)再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3)执行完循环体后再执行“表达式3”。
4)重复执行步骤 2)和 3),直到“表达式2”的值为假,就结束循环。
上面的步骤中,2)和 3)是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2)和 3)。
“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。
for循环的执行过程可用下图表示:
break关键字
在《C语言switch语句》一节中,我们讲到了break,用它来跳出 switch 语句。
当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
continue语句
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。
第二篇:网站留言板留言板简易教程
用Dreamweaver MX设计超简留言本
初学者在学ASP的时候往往是无从学起,学理论的时候又太抽象不好懂,实践的时候又找不到合适的例子来分析练习,有时候找到一个源程序学习的时候,功能太繁杂,涉及到的ASP模块太多,也附带了不少的函数,这样使初学者一头雾水,知难而退,实际上ASP是比较容易掌握的,今天就是为了这个目的,剥茧抽丝做了一个非常简单的留言板,只有留言,删除和回复的功能,没有管理权限功能(站长登录,修改密码等)、判断功能(表单验证等)及分页功能,简洁干炼,主要是为了初学者掌握最重要的知识,就是如何抓取数据库以及如何查看、删除、修改记录的操作,我们先从这个超级简单的留言板开刀吧,此关只要能过,恭喜您了,将来即可步入ASP应用的行列了!:)本教程
完成后会提供下载!
首先我们先做准备工作,先做一下策划,看看我们可能要做哪些页面,所谓说好的开始就是成功的一半,所以大家不要急着做,听我慢慢讲来。为了让大家都能制作出自己的留言板,尽量实现一个网页一个功能模块,我们就做以下六个网页:
一、index.asp----首页即显示留言页
二、conn.asp----公共网页,每个网页都要包含它,是连接打开数据库的操作。
三、write.asp和save.asp----分别是发表留言的表单网页和保存留言页。
四、del.asp----删除留言页
五、reply.asp----回复当前留言页
做好的留言板效果图如下:
< P>
好了,说到这里我们可以动工了,首先做一个最重要的工作,就是建立起一个数据
库,将来存放网友的留言所用。
1、数据库名:db1.mdb
2、数据库表:只有一个表:book
3、数据表book里增设以下字段,见图1
说明:·任一字段的数据类型中的“常归”项中的“允许空字符串”最好填“是”
·日期/时间的“常归”项中默认值为Now();站长回复里的“常归”项中的默认值为“暂没有回复”,注意此处要加双引号,是半角而不是全角。
数据库建好后开始做公共网页,用来打开数据库,打开Dreamweaver MX,按如下方
法新建动态ASP网页:
并保存为CONN.ASP,在编辑区里切换到显示代码视图里,注意把第一行自动生成的代码删掉。
这次主要是写连接数据库和参数设置的ASP代码,不用输出什么HTML标签,所以把代码全部删掉,用DREAWMEAVER插入栏自带的ASP对象写入以下代码,ASP栏里没有的代码只能自己手写输入了。
注意要把所有要编译的ASP代码放在<% %>之间,这样才能正常运行,否则会出错!这是基本常识哦。让我解释以上代码的意思吧:
代码第一行: 用来建立connection对象,connection对象扮演着十分重要的前期连接工作,连接成功数据库才会有以后的数据操作功能。
代码第二行:设置数据库连接参数。包括有数据库驱动程序和数据库文件名。
代码第三行:用conn连接对象打开数据库。
这些是通用连接数据库的方法,任何需要打开数据库的动态网页都可以照搬以上代码就行了,只把数据库的名字换成你的数据库名字就行了,注意路径要正确。所以可以把这些代码用Dreawmeaver里的代码片断复制下来,以后直接插入就可以用了,比较方
便,也不用记忆,这是一个小技艺吧!
好了,今天就先说到这里。
有什么错误和更好的建议也希望你能到腾风在线论谈提出来。
现在我们继续前面的内容。
新建动态网页index.asp:先在设计视图里排版好一个留言板的界面,设计好的页
面效果图如下:
下面表格规划和显示都很清楚,一目了然,什么排版的我就不说了吧:),这可是基本功啊,如果不行的话可先学好Dreamweaver,再来学ASP哦!稳打稳进,至理名言^_^.如果想偷懒的话,可以直接下载源代码,学习研究ASP代码也可以啊,我不反对哦,至少我也是这么懒的,理解万岁!:)
排好版后再进入代码视图里,在不同的位置插入以下ASP代码:如下图:
在网页代码的最上面第一行,点击用红线圈起来的标志可以插入第一行的代码,并可以浏览到具体文件上,比较方便,注意选择file文件类型的,不是virtual虚拟类型的。这样就插入了conn.asp数据库连接代码页,此代码被包含在当前网页位置中进行正常编译,不用重复写数据库连接代码,它的好处很大哦,使页面结构化,容易修改和维护,如果数据库连接错误,或数据库文件变动,只需更改conn.asp即可,不必要修改每一页的代码。要善于用这个方法啊,会使你的程序简单化,清晰化,这是常用的编程方法。
然后再输入以上第二行到第六行的划红线的代码块,此代码块的意义让我一一讲
来:
第三行代码:既然网页和数据库用connection建立连接打开关系了,之后最重要的工作就是读取数据了。建立rs对象变量为recordset对象,这样以后可以用rs对象
变量来存取数据库操作。
第四行代码:把从数据表book里查询的结果放到sql变量上。它的意思是把book里所有的数据都取出来,并按id从大到小排序。desc表示从大到小排序,如果不加的话,最新的留言可是在最后面哦,不方便了。
第五行代码:表示用rs对象变量open方法来打开数据表book,取出结果按sql的查询方法。
以上是通用的读取记录的方法,到其它地方都可以举一反三,要熟悉使用!
接着我们要做无留言记录的判断显示代码出来,我们要定位到“暂无留言”这个表格标签代码的开头,加上第29行如下划红线的代码即可,此代码表示判断语句:如果RS记录指针的EOF结尾和BOF开头都为空,就返回真,执行以下标签,即输入暂无留言这个表格,而不输出下面的其它标签了。再定位到“暂无留言”表格标签的结尾,输入以下37、38行划红线的代码完成判断条件,Response.end表示输出结束,不再输出以
下的代码。
其次再做如果记录不为空的情况下输入留言的表格出来,分别定位在输出留言表格标签的前面和后面,插入ASP代码块如下图输入:
此代码块的意思为:将RS记录指针指向第一个记录,然后开始判断移动记录时,记录结尾是否为空,如果不为空接着移动指针,把所有数据都读取出来。直到结尾为空
时,退出循环。
然后我们做最重要的也是最频繁使用的工作了,就是把数据表里各字段的记录分别读取出来放在表格的不两路位置上,例姓名,QQ,邮箱及留言等。先转换到设计视图和
代码视图的环境下,如下图:
我们发现上图多了很多
标记,这就是刚才在代码视图中输入的ASP代码,方便我们在设计视图中进行修改,输出预览是不影响排版的。我们把光标定位在姓名旁边的表格里,点击插入栏ASP里的,自动插入代码区里指定位置,比较方便,不容易搞错,如下图:
然后选中姓名旁边的标记,点属性栏里的Edit编辑按钮,输入rs(“name”)即可。<%= %>表示输出变量值,相当于response.write的简化版。rs是上次已建过的recordset对象,可以直接读取字段里的内容,name是数据表里book里的姓名字段。
同理按以上方法再插入ASP代码留言内容、发表者、发表时间及回复内容在不同位
置,分别是:
留言内容:<%=server.htmlencode(rs(“content”))%>
发表者:<%= rs(“name”)%>
发表时间:<%= rs(“time”)%>
站长回复:<%= rs(“repcontent”)%>
大家可能发现了,留言内容插入的代码和别的稍微不一样,多了server.htmlencode这个对象,这是为了安全问题设置的,是HTML编码对象,可以使带有HTML标签的文本不被解释为HTML标记,这样可以防止被恶意者来写入特殊执行代码,造成不
必要的损失。
这样就写好了,如下图所示:
接着再做OICQ,EMAIL,HOMEPAGE的链接设置,这个和上述不太一样,它不是直接显示出记录即可,而是将鼠标移到QICQ上浮现留言者的QQ号码,点击EMAIL自动给留言者发信,点击HOMEPAGE直接到达留言者的网站。
选中OICQ,加上“#”空链接,同样的也给EMAIL和HOMEPAGE加上“#”空链接。
如下图所示:
大家都知道给图片加提示比较简单,直接在ALT里设置文字说明就可以了,但文字却没有ALT,没关系,我们的Dreamweaver早就想到了,很强大哦!在代码区里OICQ的空链接#后,按空格(注意是英文输入法才有效)会出现智能提示参数出来,我们选择“title”,然后接着打上“<%= rs(”oicq“)%>”即可!如下图所示:
同样的方法给EMAIL和HOMEPAGE加上啊,方法如下图划红线所示:
一切OK了!!^_^发现设计视图里的OICQ,EMAIL和HOMEPAGE的背景变成了浅蓝色,这说明我们在链接上给它们加了ASP代码,这样不同的提示是否很体贴啊:)
你肯定等不及了,看看效果吧!但还没有记录啊,没有做留言提交页和回复页,删除页,只好暂时在数据库里手动添加记录吧。
经过一些时间,千呼万唤始出来,不好意思,让大家久等了。
上次做的留言板只能显示数据,让我们赋于它生命吧,让这个留言板把网友们互动起来,大家可以积极发言,讨论侃山。首先要做一个写留言的网页,为了简单化,我们把写入留言的网页和提交保存留言的网页分成两个,这样容易看懂,方便学员分析。
我们先做写入留言的网页,静态或动态网页均可,不需要任何ASP代码,最好建个静态文件,这样浏览速度快,不增加服务器负担,也不是说全是ASP网页就好哦,有必要的时候该出手就出手!:)只需提供写留言的界面让网友填均可,新建write.htm,排版如下图:
注意给各个文本域命名,最好和数据表里的各个字段相同,这样赋值的时候容易对应,不会出错。然后选中红色虚线的表单,在属性栏里action栏里填入save.asp,这是将来接收网友的留言并保存到数据库里,我们后面会接着做这个网页。如下图:
写留言的表单页很简单,就这样制作完了,大家不要以为有多麻烦啊:)
下一步我们开始制作接收网友留言并处理的网页,新建save.asp网页,将上次做的表单提交的网页名称要一致啊,不能随便命名了。在网页HTML标签的最上面加入以
下红线框起来的代码,如下图:
以上代码分几个段落,并说明了每一块代码的意思,都是通用的基本操作,比较简单,如果有点困难的话,先放一放,先学好ASP基础再说哦.注意在划红线的地方我们增加了两个函数使用.一个是Trim函数,是用来帮助我们除去不必要的空格符,有很多人习惯多打几个空格出来,我们用这个函数来去掉空格就行了。
还有一个是Replace函数,我们在留言内容写了很多字,它到了边上会自动换行,或生成段落会生成回车符,这在提交前表单文本区域是正常的,但提交后数据库不能正常识别这两个特殊符号,在显示留言页只会生成一行,这可不得了啊,把表格撑得宽宽的,很不舒服。而Replace帮助我们来解决这个问题,它可以把文字段落里所有的自动换行符和回车符找出来(vbCrLf是自动换行符和回车符的代码),并自动转换为
字符串,这样HTML就可以正常解释了。
提交保存留言页基本上就完成了,为了更加友好一点,表示提交成功,我们再多做一点工作,一切为了网友方便嘛!我们回到设计视图环境中,插入大表格在正中央,写入“留言成功!2秒后自动返回首页”,在返回首页加入链接到 index.asp网页里。如
下图:
提交成功后2秒钟后自动返回首页,是不是很难啊??其实一点都不难!用Dreamweaver自带的功能就轻松解决这个问题,我们操作如下图:
插入栏中切换到head栏里,点击Refresh按钮,会弹出对话框,如下图:
按以上内容填好,就万岁了,是不是太简单了,别太得意了啊^_^
我们的发表提交留言页就到此结束了,大家是不是很激动,可以留言了,赶紧拉人来试试吧,猛灌水过把自己的瘾吧:),这关我们顺利过了,就要一鼓作气做完其它的工作,就是回复页和删除页,有了以上的基础,就更加轻松了,相信我,是真的!
人总是不满足现状的,我们要永无止步,拿下最后的任务吧。
上次做的留言板有了生命力,可以互动提交留言了,但不能这么泛滥下去,我们还要做个删除页,删除无用的垃圾,网上也需要环保哦^_^.废话少说吧,我们开始建删除页,命名为del.asp。切换到代码视图中,把所有的HTML标签全部删掉,加入如下代码,见下图:
写完这些代码即完成了删除页的制作。让我们分析一下上面代码块的意思:
代码第三行:是删除语句,WHERE后面跟的是条件语句,只删除接受传递过来ID值的数据,这个很关键,一定要设好,否则会把数据表里的全部字段全部清空了,这也
太恐怖了吧。
代码第四行:CONN对象执行DELESQL删除语句结果。
代码第五行和第六行:关闭CONN对象并设为空释放资源。
代码第七行:response.redirect是输出转向对象,表示删除后自动转向到首页去。
接着我们还要再做回复页,总得有来有回嘛,否则别人再大的热情你不回复,也会冷却下来的。所以很有必要哦:),新建reply.asp网页,在设计视图里先排好版,如
下图:
注意红线的地方要加隐藏域,这样的目的是为了防止表单未提交但页面刷新却执行
代码的错误,设置如上图.排好后再切换到代码视图里,定位到HTML标签的最上面,加入如下红线框起来的代码,见下图:
以上代码块的意思有部分我已经在上面反复讲过了,不在重复了,如有不懂请在论谈提出来,我会补充的。这里我再说明一下回复的模块代码:
代码第四行:定位回复的位置,WHERE后面跟的是回复条件,只接受我们传递过来的留言ID值,并赋值到当前的ID变量上,这样我们只会对当前回复的留言页来回复,这个很关键,不然都乱套了。
代码第六行:用来判断是表单提交还是刷新页面,如果是提交表单,那么隐藏域的值肯定被提交,这样Request.Form(“active”)不为空,就执行以下回复语句.如果没提交表单,而是刷新页面,那么那么隐藏域的值没有提交,Request.Form(“active”)
肯定为空,就跳过不执行.
代码第八行:注意此代码前没有加rsedit.addnew,因为这是更新原有的记录,在原有的留言中在追加回复内容,而不是再添加一条新记录。
回复的代码设置好,我们再回到设计视图环境中,先定位到要回复的留言旁边的单元格里,点击后再点属性栏里的edit编辑按钮,弹出编辑框后填写代码“rsedit(“content”)”确定即可。如下图:
选中红色虚线表单,在action栏里填写如下:“reply.asp?id=<%=request(“id”)%>”,如下图:
回复页我们也做好了,是不是完事了?先别激动,还有一件事呢,忘了给首页index.asp的删除和回复还有发表新主题这三个加链接了,那不是空谈嘛,赶紧补上吧!
链接设置见下图:
< P>
超简留言板的教程就到此结束了,是不是非常超简啊:),不知道大家收获怎么样?希望能反馈给我哦。在这里我把本教程的源代码提供出来,给大家一个方便,可以直接
对照一下,祝你成功了!
编辑后话:幻想曲 还可以更人性化一点!比如如果用户没有填写OICQ或是EMAIL地址就不显示出来!当然,回复和删除是要经过登录验证的!这些东东我相信是作者留下来让朋友们自行完成的吧!鼓励一下这篇不错的教程!
作者虽然是在用DW,但没有依赖于DW自动生成的代码.这对于那些想学ASP而又一直借助于DW的朋友们来说确是一个不小的帮助!另外:提交留言时是不是要把单引号屏蔽掉呢?不然SQL语句是很容易出错的!作者后话:我已经有了完善版的大飞猪留言板,但考虑到是让学生更能入门,所以没有加上去,免得起不到效果,完善版的主要是加了权限功能,登录系统,主要是版主才能回复和删除才行的.这个会更多的,怕吓跑了初学者,有经验的学习者可以向我索要源代码!
改日我再发布完善版的教材出来!
第三篇:简易窗花剪纸图案教程
手工剪纸是我国的民间传统文化。每逢过年过节,家家户户都有贴窗花对联的习俗。窗花剪纸花样有很多种,现在我们来学习一种简单窗花剪纸的方法。下面是小编整理的简易窗花剪纸图案教程,希望对你有所帮助!
准备好笔、剪刀,还有一张正方形的纸。
把正方形的纸对边对折。
然后再左右对边对折。折叠成一个小的正方形。
然后把口袋处朝上,再对角对折。左边的短边和右边的长边是封口的。
然后画上心的形状。
在里面再画一个心。
然后把阴影的部分减下来。还有最下面角尖剪去一点点。
慢慢展开第一层,第二层,一个漂亮的心形窗花就完成了。
第四篇:简易英语配音秀制作教程
准备:
1.Adobe After Effects,和Adobe premiere安装包 2.录制好的音频以及视频片段
3.Adobe After Effects字幕模板以及片头模板
操作:
1.安装Adobe After Effects,和Adobe premiere 2.将录制好的音频和电影片段导入Adobe premiere(将文件直接拖入左下角素材区)
3.将视频拖入左上交的编辑区
4.通过标记入点和出点选择要用的视频片段
5.将选择好的区域插入预览区
6.点击右键,选择“解除音视频链接”,之后删掉视频原声(选择单击音轨之后,右键单击音轨,单击“清除”)
7.如果需要多段视频则重复该操作
8.将音频托入左上角编辑区,同样操作,标记出入点,删掉开始和结尾不需要的声音和噪声,插入到右边序列,操作同视频操作
9.将音频和视频对齐,需要手动微调操作,拖动音轨,直到视频中的口型和音频配音相符合为止。
10.选择“文件”-“导出”-“媒体”
11.格式选择H.264,预设根据需要选择,高清选择1080P,标清720P 12.单击输出名称选择导出路径,就是把导出文件放在哪个地方(导出时间和电脑配置,文件大小有关,普遍十分钟左右,大的文件半小时以上,请耐心等待不要进行其他操作)13.这样,一个没有字幕和片头的配音秀就完成了
关于加字幕和片头
1.打开Adobe After Effects 2.导入字幕模板 3.导入刚刚生成的视频
4.编辑字幕,比如”指导老师”“刘莉” 5.将字幕拖入你想让字幕出现的地方
6.单击空格预览,预览的速度和电脑配置有关,如果卡顿或者非常卡顿是正常情况。
7.反复拖入,即可加入多个字幕
8.点击渲染,即可听到声音,之前的操作没有声音是正常情况
9.Ctrl+M进行渲染(导出时间和电脑配置,文件大小有关,普遍十分钟左右,大的文件半小时以上,请耐心等待不要进行其他操作)
片头
1.打开Adobe After Effects 2.导入片头模板
3.找到片头中文字的项目,将文字改为你需要的文字
4.找到片头中图片的项目,将文字改为你需要的图片(模板中没有图片可以忽略这一步)
5.预览,渲染导出,操作和加字幕一样(导出时间和电脑配置,文件大小有关,普遍半小时左右,大的文件一小时以上或者更久,请耐心等待不要进行其他操作)
6.加音乐,将生成好的片头导入PR,混入声音,操作和对配音秀的操作一样 7.将加好字幕的配音秀导入PR,放在片头的后面。(如果发现没有音轨或者没有声音可以重新加声音)
导出(导出时间和电脑配置,文件大小有关,普遍半小时左右,大的文件一小时以上或者更久,请耐心等待不要进行其他操作)(5分钟的文件大约20G左右,请准备好预留空间)8.完成
第五篇:VR视频动画录制简易教程
视频动画录制简易教程
AVI录制
1、确认AVI录制选项如下设置
2、点击
点击工具栏下的“开始AVI录像”,当AVI录制结束后,再次点击工具栏下的“结束AVI录像”。
3、软件安装目录下找到“UCwinRoad.AVI”文件,这样就完成AVI录制过程。
4、VR展现的AVI录制时间建议控制在2至3分钟内,这样文件不会很大,在上传提交作品时,可以顺利完成。
AVI文件转FLV文件
网络上有很多免费的视频转换器,我这里推荐一款Adobe Media Encoder,方便大家学习。
1、打开软件,点击添加,选中需要转换的AVI文件
2、点击“导出设置”,选择“多路复用器”,选中FLV;通过控制比特率来控制转换后的文件大小。详见下图
3、点击开始列队,转换完成后,可以在与AVI相同文件夹下找到转换完成的FLV文件。