js个人日记

1概述:

JavaScript是目前web开发中不可缺少的脚本语言,js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。

诞生于1995年,当时的主要目的是验证表单的数据是否合法。

JavaScript本来应该叫Livescript,但是在发布前夕,想搭上当时超热的java顺风车,临时把名字改为了JavaScript。(也就是说js跟java没有关系,当时只是想借助java的名气)。

javaScript 被用来改进设计、验证表单、检测浏览器、创建cookies,等等。JavaScript 是因特网上最流行的脚本语言,并且可在所有主要的浏览器中运行,比如: Internet Explorer、 Maxthon、Mozilla、Firefox、Netscape、Chrome和 Opera等。

常用 1 修改html及css代码 (2)验证表单

  1. 嵌入方法

    1. 内嵌式

理论上js可以写在任何第一个地方 但是一般写在head标签里或者 body下

<script type="application/javascript">

alert("内嵌式");

</script>

<script>alert("内嵌式");</script>

    1. 外链式

首先新建一个文件类型为.js的文件,然后在该文件中写js语句,通过script标签对引入到html页面中。

<script src="js文件路径地址">这里不能写js语句</script>

    1. 行内式

直接书写在标签身上,是一个简写的事件,所以又称之为事件属性。     onclick单击事件

<input type="button" value="点我呀!" onclick="alert('暗月渗透测试培训');">

<button onclick="alert('恭喜你,加入暗月渗透测试培训');">点我呀!</button>

  1. 语句

1.在编程语言中,这些编程指令被称为语句。

JavaScript 程序就是一系列的编程语句。

注释:在 HTML 中,JavaScript 程序由 web 浏览器执行。

2.JavaScript 语句由以下构成:

值、运算符、表达式、关键词和注释。

3.用分号(;)分隔JavaScript语句。

  1. 注释

单行注释: // 注释语句 快捷键ctrl+/

多行注释: /* 注释语句 */    快捷键ctrl+shift+/   

注意:多行注释相互不能嵌套使用,只能在多行注释里面使用单行注释!

  1. 变量

变量是用于存储信息的"容器"

javascript单双引号没区别

var a=’moonsec’;

  1. JavaScript 保留关键字

Javascript 的保留关键字不可以用作变量、标签或者函数名。有些保留关键字是作为 Javascript 以后扩展使用。

  1. JavaScript 作用域
    1. Javascrpt 局部变量

局部作用域 变量在函数内声明,变量为局部作用域。

function myFunction() {

    var carName = "Volvo";

    // 函数内可调用 carName 变量

}

    1. JavaScript 全局变量

变量在函数外定义,即为全局变量。

全局变量有 全局作用域: 网页中所有脚本和函数均可使用。

var carName = " Volvo";

// 此处可调用 carName 变量

function myFunction() {

    // 函数内可调用 carName 变量

}

  1. 数据类型

数值型:number(凡是数字都是数值型,不区分整数和小数)

字符串:string(凡是引号包裹起来的内容全部都是字符串)

布尔:boolean(true、false)

对象类型:object(特殊取值null)

未定义型:undefined

对象类型 数组 字典

    1. 判断类型

var a = "iamstring.";

var b = 222;

var c= [1,2,3];

var d = new Date();

var e = function(){alert(111);};

var f = function(){this.name="22";};

alert(typeof a)  ------------> string

alert(typeof b)  ------------> number

alert(typeof c)  ------------> object

alert(typeof d)  ------------> object

alert(typeof e)  ------------> function

alert(typeof f)  ------------> function

    1. 数字类型(Number)

只有一种数字类型,数字 可以是小数 ,也可以的整数

以0开头 默认使用8进制来表示我的这个数字

以0x开头 默认使用16进制来表述我的这个数字

如果以-开头 默认以负数

如果我带有e:以科学计数法来解析我的这个数字

parseInt(..)    将某值转换成数字,不成功则NaN

parseFloat(..) 将某值转换成浮点数,不成功则NaN

特殊值:

NaN,非数字。可使用 isNaN(num) 来判断。

Infinity,无穷大。可使用 isFinite(num) 来判断。

    1. 字符串型(string)

字符串是存储字符的变量,用来表示文本的数据类型,程序中的字符串是包含单引号/双引号的,由单引号来界定我双引号中包含的字符串

obj.length                           长度

obj.trim()                           移除空白

obj.trimLeft()

obj.trimRight)

obj.charAt(n)                        返回字符串中的第n个字符

obj.concat(value, ...)               拼接

obj.indexOf(substring,start)         子序列位置

obj.lastIndexOf(substring,start)     子序列位置

obj.substring(from, to)              根据索引获取子序列

obj.slice(

, end)                切片

obj.toLowerCase()                    大写

obj.toUpperCase()                    小写

obj.split(delimiter, limit)          分割

obj.search(regexp)                   从头开始匹配,返回匹配成功的第一个位置(g无效)

obj.match(regexp)                    全局搜索,如果正则中有g表示找到全部,否则只找到第一个。

obj.replace(regexp, replacement)     替换,正则中有g则替换所有,否则只替换第一个匹配项,

                                     $数字:匹配的第n个组内容;

                                     $&:当前匹配的内容;

                                     $`:位于匹配子串左侧的文本;

                                     $':位于匹配子串右侧的文本

                                     $$:直接量$符号

    1. 布尔类型(boolean)

一般是用在流程控制语句中,字符串和数字类型都是无穷多个,然而我们的布尔数据类型只有两个:true 和 false

这两个个值一般用于说明某个事物是真或者假

js一般用布尔类型来比较所得到的结果

布尔类型仅包含真假,

==      比较值相等

!=       不等于

===   比较值和类型相等

!===  不等于

||        或

&&      且

    1. null(空)

null

关键字null是一个特殊的值,它表示变量为空值,用来定义空的或者是不存在的引用。

如果试图去引用一个没有定义的值,就会返回一个null。

这里注意一点:null并不等于"" 或者0

    1. undefined(未定义)

这个值表示变量不含有值,没有定义的值,或者被定义了一个不存在的属性值

!null和undefined区别:

null它表示一个变量被赋予一个空值,而undefined是表示变量还没有被赋值

    1. 数组

1、数组内可以存放任意数据类型的数据(本质上它也是对象)

2、数组元素不赋值的情况下 值为undefined

3、如果数组打印的时候,元素不赋值""

4、访问数组范围之外的元素,不会出现越界的问题,undefined

5、定义数组大小,照样可以添加更多元素

      1. 定义数组的方法:

1、var arr=[]//定义一个空数组

2、var arr=[10,20,{"name":"tomy","age":19},0.1,"string",true,["aaa","bbb"]]//定义的同时赋值

3、var arr=new Array();//定义一个空数组

4、var arr = new Array(10,20,{"name":"tomy","age":19},0.1,"string",true,["aaa","bbb"])//定义的同时赋值

5、var arr=new Array(10)//定义一个长度为10的数组

      1. 数组的操作

obj.length          数组的大小

obj.push(ele)       尾部追加元素

obj.pop()           尾部获取一个元素

obj.unshift(ele)    头部插入元素

obj.shift()         头部移除元素

obj.splice(start, deleteCount, value, ...)  插入、删除或替换数组的元素

                    obj.splice(n,0,val) 指定位置插入元素

                    obj.splice(n,1,val) 指定位置替换元素

                    obj.splice(n,1)     指定位置删除元素

obj.slice( )        切片

obj.reverse( )      反转

obj.join(sep)       将数组元素连接起来以构建一个字符串

obj.concat(val,..)  连接数组

obj.sort( )         对数组元素进行排序

  1. 函数

JavaScript 函数语法

JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 ()。

函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。

圆括号可包括由逗号分隔的参数:

var x = myFunction(7, 8);        // 调用函数,返回值被赋值给 x

function myFunction(a, b) {

    return a * b;                // 函数返回 a 和 b 的乘积

}

普通函数:

function func(arg){

return arg+1;

}

var result = func(1);

console.log(result); var result = func(1);

console.log(result);

匿名函数(没有名字的函数称为匿名函数)

setInterval(function(){

console.log(123);

},500)

自执行函数 (创建函数并且自动执行)

(function(arg){

console.log(arg);

})(1);

  1. 字典

字典 是一种以键-值对形式存储数据的数据结构

var dict = {'k1':"moonsec",'k2':'moon','age':18};

输出字典元素

for(var item in dict){

console.log(dict[item]);

}

获取指定元素

dict['age'] 获取key为age的元素

赋值

dict['age']=10

删除元素

delete dict['one'];

delete dict.age;

  1. js的序列化和反序列化

Json与字符串的转换

把对象转为字符串

JSON.stringify()

把字符串转为数组

newli = JSON.parse()

序列化 即js中的Object转化为字符串

使用toJSONString

var last=obj.toJSONString(); //将JSON对象转化为JSON字符  

使用stringify

 var last=JSON.stringify(obj); //将JSON对象转化为JSON字符  

反序列化   即js中JSON字符串转化为Object

  1. 转义
  1. decodeURI( )                   URl中未转义的字符
  2. decodeURIComponent( )   URI组件中的未转义字符
  3. encodeURI( )                   URI中的转义字符
  4. encodeURIComponent( )   转义URI组件中的字符
  5. escape( )                         对字符串转义
  6. unescape( )                     给转义字符串解码
  7. URIError                         由URl的编码和解码方法抛出

  1. eval

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

  1. 时间

Date 对象

var myDate = new Date();  

myDate.getYear(); //获取当前年份(2位)  

myDate.getFullYear(); //获取完整的年份(4位,1970-????)  

myDate.getMonth(); //获取当前月份(0-11,0代表1月) 所以获取当前月份是 myDate.getMonth()+1;   

myDate.getDate(); //获取当前日(1-31)  

myDate.getDay(); //获取当前星期X(0-6,0代表星期天)  

myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)  

myDate.getHours(); //获取当前小时数(0-23)  

myDate.getMinutes(); //获取当前分钟数(0-59)  

myDate.getSeconds(); //获取当前秒数(0-59)  

myDate.getMilliseconds(); //获取当前毫秒数(0-999)  

myDate.toLocaleDateString(); //获取当前日期  

var mytime = myDate.toLocaleTimeString(); //获取当前时间  

myDate.toLocaleString( ); //获取日期与时间  

加一天

var dateTime = new Date();  

dateTime=dateTime.setDate(dateTime.getDate()+1);

dateTime=new Date(dateTime);

dateTime=dateTime.setDate(dateTime.getDate()+1);

  1. 面向对象

JavaScript是一种基于原型的语言,它没类的声明语句,比如C+ +或Java中用的。这有时会对习惯使用有类申明语句语言的程序员产生困扰。相反,JavaScript可用方法作类。定义一个类跟定义一个函数一样简单。在下面的例子中,我们定义了一个新类Person。

第一种方法

function Person(name) {

     //构造函数里面的方法和属性

    this._name = name;

    this.getName = function () {

         console.log(this._name);

     };

     this.setName = function (name) {

         this._name = name;

     };

 }

 var p = new Person("张三");

 p.getName();  // 张三

 p.setName("李四");

 p.getName();  // 李四

对于上述代码需要注意:

Person充当的构造函数

this代指对象

创建对象时需要使用 new

第二方法

// 定义类class Person {

     //类的构造函数,实例化的时候执行,new的时候执行

     constructor(name) {

         this._name = name;

     }

     getName() {

         console.log(this._name);

     }

     setName(name) {

        this._name = name

    }

}

 let p = new Preson('张三')

 p.getName();  // 张三

 p.setName('李四');

 p.getName();  // 李四

  1. 原型

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype

这个属性对应着一个对象,这个对象就是我们所谓的原型对象

如果函数作为普通函数调用时 prototype没有任何作用

当函数以构造函数调用时,它所创建的对象中都会有一个隐含的的属性

指向该构造函数的原型 我们可以通过__proto__来访问该属性

我们可以将对象中公有的内容,统一设置到原型对象中

function Persion(username,age){

}

//console.log(Persion.prototype);

var p = new Persion();

console.log(p.__proto__ == Persion.prototype);

定义原型变量和原型变量

function Persion(username,age){

}

//console.log(Persion.prototype);

Persion.prototype.a = '女';

Persion.prototype.Sayname=function(){

return Persion.name;

}

var p1 = new Persion('moonsec');

var p2 = new Persion();

alert(p1.Sayname());

  1. 运算符

用于执行程序代码运算,会针对一个以上操作数来进行

    1. 算术运算符

+   -   *   /   %  ++  --

字符串拼接使用“+”

    1. 比较运算符

<

>

==

!=

<=

>=

=== 全等于:将数值以及数据类型一并比较

!==不全等于:将数值以及数据类型一并比较

    1. 赋值运算符

=

+=

-=

*=

/=

%=

a=a+2;==>a+=2

a=a-2;==>a-=2

a=a*2;==>a*=2

a=a/2;==>a/=2

a=a%2;==>a%=2

    1. 逻辑运算符

&&  全真为真

||  一个为真就是真

!  取反

    1. 三元运算符(三目运算符)

表达式1?表达式2:表达式3

当我的表达式1成立时  执行表达式2  否则执行表达式3

var max = 2>1?'>':'<';

console.log(max);

  1. 流程控制语句
    1. if语句

if(条件){

函数体

}

    1. if else语句

if(条件){

函数体1

}else{

函数体2

}

    1. if.....else if......else语句

if(条件1){

}else if(条件2){

}else if(条件n){

}else{

}

    1. switch语句:多分支语句

switch(表达式) {

     case n:

        代码块

        break;

     case n:

        代码块

        break;

     default:

        默认代码块

}

switch (new Date().getDay()) {

    case 6:

        text = "今天是周六";

        break;

    case 0:

        text = "今天是周日";

        break;

    default:

        text = "期待周末~";

}

    1. 循环结构:

1、while循环:先判断条件 当条件成立 再执行

while(循环成立条件){

....

}

    1. do...while循环

do...while循环:不论条件成不成立 先执行一遍 再判断

do{

.....

}while(循环成立条件)

    1. for循环

    1. for in循环

continue:

跳过当前循环,直接进入循环的下一个步骤

break:

结束循环

  1. JS操作DOM
    1. 什么是DOM?

DOM(document object model)文档对象模型,是针对HTML和XML的一个API(应用程序接口)。DOM给我们描述了一个具有层次化特点的节点树,允许开发人员增删改查页面的某些部分。

  1. JavaScript 能够改变页面中的所有 HTML 元素
  2. JavaScript 能够改变页面中的所有 HTML 属性
  3. JavaScript 能够改变页面中的所有 CSS 样式
  4. JavaScript 能够对页面中的所有事件做出反应

    1. DOM查找元素

document获取节点的基本方法

document.getElementById('id');  //通过id来获取元素,返回指定的唯一元素。

document.getElementsByName("name"); //通过name来获取元素,返回name='name'的集合。

.document.getElementsByClassName("classname")  //用classname来获取元素,返回的是一个class="classname"的集合(不兼容IE8及以下)。

document.getElementsByTagName('div'); //用元素的标签获取元素,返回所有标签=“div”的集合。

      1. 查找

直接查找

var obj = document.getElementById('id');

间接查找

文件内容操作

innerText 仅文本

innerHTML 全内容

value

input value 获取当前的值

select 获取选中的value的值 document.getElementById('s1').selectedIndex=1

Textarea 获取value的值

      1. 操作

样式操作

className 列出样式 字符串

classList 列出样式 返回数组

classList.add 增加样式

classList.remove 删除样式

<div class='c1 c2' styple='font-size:16px'></div>

obj.style.fontSize='16px';

属性操作

获取属性

getAttribute()

增加设置一个属性

添加属性

setAttribute('xxx','alexe')

删除属性

removeAttribute(value)

创建标签 并添加到html中

第一种方式 字符串方式

insertAdjacentHTML()

<input type="button" value="+" onclick="add();"/>

<div id="div1">

<p><input type="text"/></p>

</div>

<script>

function add(){

var tag="<p><input type='text'></p>"

document.getElementById('div1').insertAdjacentHTML('beforeEnd',tag);

}

</script>

</body>

有四种值可用:

  1. beforeBegin: 插入到标签开始前
  2. afterBegin:插入到标签开始标记之后
  3. beforeEnd:插入到标签结束标记前
  4. afterEnd:插入到标签结束标记后

第二种方式 对象的方式

document.createElement

<input type="button" value="+" onclick="add2();"/>

<div id="div1">

<p><input type="text"/></p>

</div>

<script>

function add(){

var tag="<p><input type='text'></p>"

document.getElementById('div1').insertAdjacentHTML('beforeEnd',tag);

}

function add2(){

var tag =document.createElement('input');

tag.setAttribute('type','text');

tag.style.color='red';

var p =document.createElement('p');

p.appendChild(tag)

document.getElementById('div1').appendChild(p);

}

</script>appendChild 在节点后面增加一个子节点

提交表单

任何标签都可以通过dom提交

getElementById('id').submit()

<form id='f1' action="https://www.moonsec.com/">

<input type="submit" value="提交" />

<input type="button" value="botton" onclick="Sub();" />

<a onclick="Sub();">提交</a>

</form>

<script>

function Sub(){

document.getElementById('f1').submit();

}

</script>

其他

console.log 终端输出

alert 弹出框

confirm 确认框 标题 true false

url和刷新

location.href  获取url

location.href ='url' 重定向

location.reload() 重新加载

定时器

setInterval()

clearInterval()

<input id="i1" type="text" />

<input type="button" value="停止" onclick="stop();">

<script>

function setTime(){

var tag = new Date();

document.getElementById('i1').value=tag;

}

var obj=setInterval('setTime()','500');

function stop(){

clearInterval(obj);

}

只执行一次

setTimeout()

clearTimeout()

<div id="status"></div>

<input type="button" value="删除" onclick="Delele();">

<script>

function Delele(){

document.getElementById('status').innerText="已删除";

setTimeout(function(){

document.getElementById('status').innerText="";

},5000)

}

</script>

事件

绑定事件两种方式

a.直接标签绑定 直接标签绑定 onclick=''

先获取dom对象,然后进行绑定

document.getElementById('xxx').onclick()

第一部分 软件可行性研究与项目开发计划 1. 问题定义 随着时代的进步,网络技术层出不穷信息量急剧膨胀,整个人类社会已成为信息化的社会,人们对信息和数据的处理。管理和加工已经进入自动化、网络化和社会化的阶段。博客的兴起,让更多的人在网络上,建起了展示自己的空间,同时更多的人愿意在网络上,分享个人的心情日记,个人收藏,这些都是普通的博客内容。 本次论文的目的制作网络日记本,我们要实现网络日记本的增加、删除、修改三大部分的内容。设计完成网络日记本,让它具有文章分类、日期时间显示、后台管理等功能。此次论文的开发过程,我们采用asp作为开发语言,Micsoft Access为数据库, 软件运行环境Pentium处理器+IIS+IE6.0+128MB。 2.可行性研究 本论文共分八个章节完成,我们的本次制作任务。在第一章,我们将把我们即将遇到的问题提出来,以便在以后的章节中完成它,并制定项目开发的进程计划;第二章软件需求分析,在本章节中,我们将逐一分析制作过程中遇到的问题,例如:看日记,写日记,删除日记,日记管理等,并且把相关数据做成数据字典;第三章软件概要设计,在这一章节中,我们将把各个问题一一作以详细的分析,并且制定解决的办法,用数据流程图,模拟日记本在使用过程中出现的情况;第四章软件详细设计,在此章节,我们将再次将日记本的各个功能提出,加以详细的分析,完成系统将出现的每一个细节。通过这一部分,我们将完成日记本制作的理论部分;第五章软件编码,顾名思义,在这一章节中,我们将对日记本实行软件编码,在实际中解释每段编码的含义,具体完成日记的增加、删除、数据库连接这几部分;第六章软件测试与调试,在这章里,我们对软件进行测试运行,找到软件的不足,加以修正;第七章 结束语,本章节,是在制作工程中,个人的感受与收获的总结;第八章附录,此章节为本次论文的结尾部分。 3.项目开发计划 本次论文的时间安排如下 (1)需求分析阶段:(2007年4月份---2007年5月份) (2)详细设计阶级:(2007年5月份---2007年6月份) (3)测试阶段:(2007年6月份) 第二部分 软件需求分析 1. 用户功能和数据流图(DFD) 在项目可行性研究的基础之上,我们对系统各项功能进行了初步的分析。 1.1 管理界面登陆 本软件采用的是前台录入方式,所以日记的一切管理无需从后台进入才能进行操作。在前台完成所有操作,这一点我们将在以后的章节详细说明。在登陆到管理界面,我们要输入管理员账号和密码,进入到管理主界面。在主界面进行所要的基本操作。 (1)在登陆界面,我们输入账户信息,账户信息包括管理员登陆名和管理员密码,这些信息经过基本信息库身份验证,如果信息错误将提示“输入错误”提示信息,显示错误界面。如用户不进行任何操作,界面将在5秒后自动返回最初的管理员登陆界面;如果信息正确无误,将进入管理主界面,管理员就可以进行自己所需要的详细操作了。此过程数据图(图2-1),所示 (图2-1) (2)账号的合法性验证,在登陆界面,我们将设置两个按钮,即“确定”和“重置”。当用户在输入密码后发现密码输入错误时,点击“重置”键即可将之前输入的密码清除。在用户输入密码后,点击“确定”键时,计算机将调用身份验证数据库进行身份验证,验证该登陆用户是否是合法的管理员。如果其密码输入正确将进入下一个界面。其数据流程图(图2-2)所示: (图2-2) 1.2 需求选择 当密码验证正确后进入需求界面,在此界面中有浏览、增加、删除、修改密码等功能选项以退出按钮。(图2-3) (图2-3) 在接下来的部分里,我们将用数据流图的形式来表示各个需求选择的功能 1.3 浏览 其数据流程图(图2-4) (图2-4) 注:在浏览文章的时候,我们可以进行选题浏览,即:对自己所知道题目的文章直接浏览。还可以进行分类浏览,即:根据不同分类,选择不同的类别,在一种类别中进行文章浏览。 1.4 修改密码 其数据流程图如下(图2-5) (图2-5) 注:㈠在请输入旧密码、新密码界面,我们在这里要求输入旧密码一次,用于修改用户的合法性验证;输入新密码两次,用于新密码的一致性验证。 ㈡信息处理有三种情况ⅰ. 旧密码输入错误,返回修改密码界面。ⅱ.新密码两次输入,两次输入不符,返回修改密码界面。ⅲ.修改密码成功,显示修改完成界面。 2. 数据字典(DD) 1)登陆名 长度:5-12位 类型:字符型 2)密码 长度:6-14位  类型:整型 3)文章内容 类型:整型 4)日期 __年__月__日 5)名称:基本信息库 登陆名 密码 6)名称:数据中心 文章名称 文章类别 文章写作日期 文章内容 7)名称:基本信息 来源:登陆管理员 去处:身份验证 组成:账号+密码 第三部分 软件概要设计 1.定设计方案 在整个系统中,从功能划分成浏览、增加、删除及修改密码,四个模块,用一个主菜单来承载这四个功能,即每个功能完成后返回的界面。 现在对用户进入系统作详细设计。 在需求分析中已经产明本软件采用的是前台录入方式,日记的一切管理均需从前台进入进行操作,其程序流程图(图3-1)所示: (图3-1) 在这段程序流程中,判断合法性时就要调用客户基本信息库表,将帐号与密码对照,判断其真假并将结果返回。 在用户登录到管理登录界面时,用户根据提示在“帐号”和“密码”处,输入个人信息,并点击“确定”按钮,“重置”按钮作为清除用户输入错误,清除已输入信息使用。 用户在输入了帐号和密码后点击“确定”按钮,说明用户已经确认其输入的帐号和密码无误,确认提交并进行此次操作。系统将把帐号、密码送入数据库与数据库中的原始数据相校对,验证其合法性、可行性。验证过后如果不合法则返回在界面上返回提示信息“您输入的账号或密码错误,请正确输入!”如果帐号和密码验证无误后,则进入下一个界面继续进行用户所需要的操作。如果用户决定结束此次操作,则关闭页面即可结束操作或点击“退出”,返回到帐号与密码输入界面(图3-2) (图3-2) 如果你忘记密码,你可以通过自己设置的问题找回密码。这样增强了程序的可用性。 在帐号密码校验无误后,用户选择进入下一个阶段的操作,则进入了功能选择界面,该界面包括了所有日记本系统所提供给用户的所有操作,包括“看日记(即浏览)”,“添加日记”,“修改删除”。具体如下图(图3-3)所示 (图3-3) 2.模块及软件结构图 2.1 看日记(即浏览文章) 看日记功能是用于完成用户对其个人帐户内已有文章进行浏览,清晰直观的反映给用户其帐户内文章资源的情况。主要在前台进行,具体的流程图如下(图3-4) (图3-4) 用户可以通过用户列表中列出的用户选择用户名,进入浏览页面。在些页面中可以通过日历控件,选择具体的日期查看当前用户的公开的日记。 进入了看日记子功能界面,界面将显示出该功能所提供给用户的一起可操作功能,即用户可以自主选择所需要的类别进行浏览观看,“回返”按钮用于看日记功能操作,返回功能选择界面。“退出”按钮用于结束一切操作,返回到帐号输入界面,从数据库中调用的所有数据经系统重新整理后,返回数据库。其功能界面如(图3-5)所示 (图3-5) 2.2 修改日记参数 修改日记本参数是用户对自己日记本一些基本参数的设置,包括密码修改、忘记密码,找回密码的问题和答案、个人主页等。其数据流程图如下(图3-6)所示 (图3-6) 日记参数,其界面图如下(图3-7)所示 (图3-7) 3.数据库设计 当用户通过日记本系统进行各项操作时,必然要用到对表数据库的调用,在调用的过程中即对数据库进行访问或修改。因此,我们对数据进行设计。 在一个数据库中存放看很多表,这些表之间有的存在必然的联系,我们可以通过这些表间关系对数据库进行查询和修改。 在这个系统中我们设计了两个数据库表即基本信息库和数据中心库,当用户一开始进入日记本系统时为了其安全性就要对用户进行身份验证。因而就要对基本信息库进行调用并查询,而修密就要对该数据库进行修改。 在基本信息库表进行设计时,应包含客户最基本的ID、password;其次客户的一些次要信息(E-mail、注册时间)也就构成了我们数据库表中的字段名。通过对个字段名内容的填写也就构成了我们的基本信息。 接下来对数据中心库表的设计,它的方法与客户基本信息库表一样,也包括一些基本的信息,如ID、分类、题目。这些最基本的信息可设置成为主索引,惟一索引或候选索引,从而建立表间关系。在这个库表中还要有用户的输入内容,删除记录和操作时间等。 基本信息库表如下所示: (1)基本信息库表,详细设计如表3.1 表3.1 日本 Table 3.1 txt 编 号 字段名称 数据结构 说 明 1 ID 自动编号 编号 2 用户 文本 用户 3 年 文本 写日记的年份 4 月 文本 写日记的月份; 5 日 文本 写日记的日期; 6 天气 文本 写日记的天气 7 心情 文本 写日记的心情 8 内容 备注 日记内容 9 addtime 时间 添加时间 10 保密 数字 0,不公开;1,公开 11 see 数字 观看资数 (2)管理员表,详细设计如表3.2 表3.2日本 Table 3.2 txt 编 号 字段名称 数据结构 说 明 1 ID 自动编号 编号 2 name 文本 用户 3 password 文本 密码 4 rj 文本 日记 5 user 文本 日记用户名; 6 usermail 文本 邮箱 7 home 文本 主页地址 8 page 数字 每页显示日记量 9 url 文本 网址址 10 copy 文本 版权 11 orther 文本 其它 12 admin 文本 真实名 13 ver 文本 版本 (3)用户表,详细设计如表3.3 表3.3 用户 Table 3.3 user 编 号 字段名称 数据结构 说 明 1 ID 自动编号 编号 2 user 文本 用户 3 pass 文本 密码 4 mail 文本 邮箱 5 url 文本 主页地址 6 time 日期时间 注册时间 7 sm 数字 日记数量 8 see 数字 使用次数 9 bm 数字 是否公开 10 logo 文本 顶端图片 11 wenti 文本 问题 12 daan 文本 答案 第四部分 软件详细设计 1. 浏览功能模块设计 进入本系统看到的便是本系统的浏览功能模块,本系统的浏览功能模块的设计方案图如(图4-1): 图4-1 进入系统浏览功能模块后,首先看到的是本系统管理员的日记本,然后可以在系统导航条中选择用户列表,选用户。便进选择用户的日记本,进入后可以选择日历,查看具体日期的日历。 2.修改日记功能设计 每个用户进入个人管理中心后,便可以修改个人日记参数,数据流图如图4-2所示: 图4-2 第五部分 软件编码 1. 所选语言 本系统在ASP环境下,利用ASP内置的五大对像,以及ado的使用,加上VBScript、JSscript语言开发。在外观和格式控制上,采用DHTM以及CSS样式表来实现。 2. 源代码(见附录1) 第六部分 软件测试与调试 1. 测试环境与测试方法 本系统在Windows系统 IIS环境下测试。 在测试过程中,首先需要对各子单元过程进行测试。在各子单元过程测试完毕后,再对各模块(包括各子单元过程之间的接口)进行测试,处理好各模块之间的接口,最后对系统进行测试和维护。各子模块测试名称如下: 客户机接受信息模块测试 客户机输出信息模块测试 网络接受和发送模块结构测试 服务器模块(包括数据库)测试 各模块之间的接口测试 系统测试 2.测试实例 ( 测试集 ) 的研究与选择 首先对用户的输入信息进行测试。客户机上的输入信息分别是用户基本信息。输出为处理信息或出错信息。在输入的测试数据中可分为有效输入类.无效输入类。其中的错误种类有: 无效输入类 数据类型不匹配,PErrorType =T;否则=F; 你的昵称 文本 管理密码 文本 你的邮箱 文本 确认密码 文本 忘记密码问题 文本 答案 文本 数据超出规定范围PErrorRank =T; 否则=F;等等 3. 测试过程与调试 第一组数据 你的昵称 输入:“ ” 管理密码 输入:123456 确认密码 输入:123456 你的邮箱 输入:zengfanb@163.com 忘记密码问题 输入:我最好朋友是谁? 答案 输入:小曾 第二组数据 你的昵称 输入:“放大镜看爱” 管理密码 输入:123456 确认密码 输入:123dddd 你的邮箱 输入:zengfanb@163.com 忘记密码问题 输入:我最好朋友是谁? 答案 输入:小曾 第三组数据 你的昵称 输入:“放大镜看爱” 管理密码 输入:zfbmm 确认密码 输入:zfbmm 你的邮箱 输入:zengfanb@163.com 忘记密码问题 输入:我最好朋友是谁? 答案 输入:小曾 4.结果 第一组数据测试结果: 第二组数据测试结果: 第三组数据测试结果: 注册成功 第七部分 结束语 经过本次设计,系统已通过测试完成。回想在这半年的历程中;从选题到系统的实现,再到论文完成,每走一步对我来说都是新的尝试与挑战。在课题设计过程中遇到了很多困难,也走了许多弯路, 但最终通过查阅资料,问老师和同学都得到了解决。在设计过程中经过多次修改,能够较好的把软件工程中的基本原理和方法学运用到系统的具体设计中。 在课题设计过程中由于技术时间等原因,还存在很多有待完善的地方和不足之处, 在此还望老师给出宝贵意见。以便在以后的学习工作中不断提高自我完善自我。 第八部分 附 录 1.代码附录 1.1 整个系统的连接接数据库的文件的代码如下: 1.2.浏览功能模块的代码,index.asp文件,用于分页浏览日记。 <% user=request("user") p=request("page") session("adminuser")="" session("root")="http://blueyr.com/" set conn=server.createobject("ADODB.CONNECTION") conn.open "DBQ="+server.mappath("pfcr1015.asp")+";DRIVER={Microsoft Access Driver (*.mdb)};" set rs1=server.createobject("adodb.recordset") sql1="SELECT * from admin" rs1.open sql1,conn,1,1 if user="" then user=rs1("name") see=-1 set rs2=server.createobject("adodb.recordset") sql2="SELECT * from user where user='"&user&"'" rs2.open sql2,conn,1,1 if not rs2.eof then url=rs2("url") mail=rs2("mail") see=rs2("see") logo=rs2("logo") end if if logo="" or isnull(logo) then logo="images/girl.gif" if session("user")user then sql2="update user set see=see+1 WHERE user='"&user&"'" conn.execute(sql2) session("user")=user end if set rs=server.createobject("adodb.recordset") sql="SELECT * from txt where 用户='"&user&"' order by 年*10000+月*100+日 desc" rs.open sql,conn,1,1 cc=1 if not isempty(request("page")) then pagecount=cint(request("page")) else pagecount=1 end if rs.PageSize=rs1("page") rs.AbsolutePage=pagecount For iPage = 1 To rs.PageSize If rs.EOF Then Exit For %> 1.3. 修改日记参数模块的核心代码,changepass.asp 用于修改日记的相关参数,参数如详细设计章节所列,其主要代码如下: <% add=request("add") user=request("user") set conn=server.createobject("ADODB.CONNECTION") conn.open "DBQ="+server.mappath("pfcr1015.asp")+";DRIVER={Microsoft Access Driver (*.mdb)};" set rs1=server.createobject("adodb.recordset") sql1="SELECT * from admin" rs1.open sql1,conn,1,1 set rs2=server.createobject("adodb.recordset") sql2="SELECT * from user where user='"&user&"'" rs2.open sql2,conn,1,1 if not rs2.eof then pass=rs2("pass") url=rs2("url") mail=rs2("mail") bm0=rs2("bm") logo=rs2("logo") end if if logo="" or isnull(logo) then logo="images/girl.gif" if session("root")pass or pass="" then response.redirect "index.asp?user="&user&"" end if if add="add" then ok="yes" url=request.form("url") mail=request.form("mail") pass1=request.form("password1") pass2=request.form("password2") bm=request.form("bm") wenti=request.form("wenti") daan=request.form("daan") logo=request.form("logo") Set Conn=Server.CreateObject("ADODB.Connection") DBPath=Server.MapPath("pfcr1015.asp") Conn.open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath Set rs=Server.CreateObject("ADODB.RecordSet") rs.open "Select * From user where user='"&user&"'",Conn,2,3 if pass1pass2 then ok="no" end if if ok="yes" and mail"" and url"" then rs("mail")=mail rs("url")=url rs("bm")=bm rs("wenti")=wenti rs("daan")=daan rs("logo")=logo if pass1"" then rs("pass")=pass1 rs.update rs.close set rs=nothing conn.close set conn=nothing if pass1"" then session("root")=pass1 response.redirect "adminindex.asp?user="&user&"" end if end if end if end if end if %> 2. 参考文献: [1] (美)Stephen C.Perry .C#和.NET核心技术[M].北京:清华大学出版社.2006 [2] 曹锰, 舒新峰 .C#与ASP.NET程序设计[M]. 西安:西安交通大学出版社.2006 [3] 田原,李素若,文斌 .C#程序设计[J]. 2005 [4] 曹锰,舒新峰 .C#与ASP.NET程序设计[M].西安:西安交通大学出版社.2006 [5] 刘庆国,屈艳莲 .ASP.NET企业级开发[M].上海:人民邮电出版社.2006 [6] 邹建峰,周山峰,项细威 .C#企业级开发[M] . 上海:人民邮电出版社.2006 [7] (美) Foxall,j.著 陈秋萍 译 .Visual C#N 2005入门经典.[M] 上海:人民邮电出版社 2007
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值