asp.net,c#,visual studio,sql酒店房间预约系统设计,毕业论文,课程设计,PPT,开题报告

3995
    


来源:
Licence:
联系:
分类:
平台:
环境:
大小:
更新:
标签:
免费下载 ×

下载APP,支持永久资源免费下载

限免产品服务请联系qq:1585269081

下载APP
免费下载 ×

下载APP,支持永久资源免费下载

下载APP 免费下载
下载 ×

下载APP,资源永久免费


如果出现不能下载的情况,请联系站长,联系方式在下方。

免费下载 ×

下载论文助手APP,资源永久免费

免费获取

如果你已经登录仍然出现不能下载的情况,请【点击刷新】本页面或者联系站长


目录



摘要

随着国内经济形势持续发展,国内酒店业进入难得的发展高峰期,使得中外资本家纷纷将目光投向中低端市场。然而,中国酒店业的区域结构不合理、竞争手段不足和市场对经济型酒店的需求日益显露,以及2008年北京奥运会、2010年上海世界博览会对酒店业的积极影响等诸多力量的交织,使得中国酒店市场演变成了一个淘金圣地。
在信息高度发达的今天,酒店制度的改革已经成为一种更广泛、全面的潮流。该“酒店房间预约系统设计”是基于Access 2003数据库、ASP程序设计的基础上实现的。该系统可以保存和处理多个酒店的名称、星级和地址等基本信息以及每个酒店的房间信息,同时可以保存和处理客户的订单信息,并且对于这些系统提供了相应的查询功能,而且有完善的多用户安全功能。保证在我国经济持续发展、信息时代日益更新的今天,服务行业依然蒸蒸日上。

前言

随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。酒店客房管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。无疑,使用网络信息化管理使酒店客房管理更先进、更高效、更科学,信息交流更迅速。

酒店房间预约系统是酒店经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要,所以酒店房间预约系统应该能够为用户提供充足的信息和快捷的预约手段。酒店预约基本都是需要通过电话或客户直接到酒店进行,由于预约记录多是人为完成,容易造成失误和遗漏,管理效率比较低,特别是顾客比较多的季节,传统的预约方式已经基本不能满足要求。

远程预约系统是一种全新的网络预约方式,通过互联网突破了时间和空间限制实现了便捷快速的预约与管理功能。本系统具有房间信息查询、预约房间和取消预约等功能。



第二章 编程环境基础知识

2.1 ASP基础概述

ASP,全称ActiveX Server Page,它提供了一个在服务器端执行脚本指令(包括HTML、VBScript、JavaScript等),通过这种环境,用户可以创建和运行Web应用程序。
ASP文件就是在普通的HTML文件中嵌入VBScript或JavaScript脚本语言。

ASP是一个服务器端脚本编写环境,用于创建动态的交互式Web服务器应用程序。在ASP动态网页中,不仅可以包含服务器端代码,也可以使用ASP内建对象和服务器组件,此外还可以包含服务器端文件。

2.2 ASP脚本语言——VBScript

2.2.1 VBScript的概述

VBScript是程序开发语言Visual Basic家族的最新成员,可以将灵活的脚本应用于更广泛的领域,包括Microsoft Internet Explorer中的Web客户端脚本和Microsoft Internet Information Server中的Web服务器端脚本。
   VBScript脚本语言有以下主要特点:
   (1) 易学易用。
   (2) ActiveX脚本。
   (3) 其他应用程序和浏览器中的VBScript。

2.2.2 VBScript 代码的基本格式

一般的ASP程序都是将VBScript代码放在服务器端执行的,有两种方法:

方法一:<% VBScript 代码 %>

方法二:

2.2.3 条件语句

1.If ……Then…… Else语句用于判断条件是Ture或False,并且根据判断结果指定要运行的语句。

2.Select Case 语句是If…… Then…… Else…… EndIf 语句多条件时的另外一种形式,其语句的语法如下:

Select Case变量或表达示

2.2.4循环语句

1.For……Next 循环是一种强制型的循环,用语将语句块运行指定的次数。在循环体中使用计数器变量,该变量随每次循环增加或减少。

2.Do ……Loop循环

Do循环也是根据某个条件是否成立来决定能否执行相应的循环体部分。与while循环不同的是:While循环只能在初始位置检查条件是否成立;而Do循环可以有两种格式,既可以在初始位置检验条件是否成立,也可以在执行一遍循环体后的结束位置判断条件是否成立,能否进入下一次循环。

3.While……Wend语句

While循环用于对条件进行判断,如果条件成立,可以循环执行循环体,直到循环结束为止。结束循环的条件是用于判断的条件不成立。与For循环最大的差别在于:For循环用于循环次数己知的情况,执行一定次数后即可结束循环;而While循环用于不知道循环次数,但可以用一个条件来进行判断是否结束。所以对于循环次数有限,可以用条件限制的情况,使用While循环较好,且使用比较灵活。

4.For Each...Next循环

该语句对集合中的每个元素进行一次循环,直到集合中无更多的元素时,执行Next后面的语句。

2.2.5 过程

在VBScript中将过程分为两类:子过程和函数过程。子过程也称为Sub过程,函数过程也称为 Function过程。二者的区别在于:Sub过程没有返回值,相当于其他程语言中的过程;Function过程有返回值,相当于其他编程语言中的函数。

1.Sub过程的声明

Sub过程的声明语法:
   [Public][Private] Sub 过程名[(参数表)]
    [语句块]
   [Exit Sub]
    [语句块]
   End Sub

2.Function过程                

是由一系列VBScript语句所组成,这些语句是以Function语句作为该过程的开头标记,以End Function语句作为结束。

Function过程的声明语法:

[Public] [ Private] Function 过程名[(参数表)]
    [语句块]
    [过程=表达式]
   [Exit Function]
    [语句块]
    [过程=表达式]
   End Function

与Sub过程的基本相同,不同之处是:
  1) 函数有返回值。它的返回值就是通过 “过程=表达式”语句传递的。
  2) 可以在函数内部任何地方把返回值赋给函数名,而且允许存在任意次这样的赋值。如果不指定返回值,那么数值函数返回0,字符串函数返回“ ”,对象函数返回Nothing。

ASP内置基本对象

Request 负责从用户端接收信息

Response负责传送信息给用户

Session 负责存储个别用户的信息,以便重复使用

Application 负责存储数据以供多个用户重复使用

Server 负责控制ASP的运行环境

ObjectContext 供ASP程序直接配合 Microsoft Transaction Server进行分布式的事务处理

需求分析

3.1 功能需求

酒店预约基本都是需要通过电话或客户直接到酒店进行,由于预约记录多是人为完成,容易造成失误和遗漏,管理效率比较低,特别是顾客比较多的季节,传统的预约方式已经基本不能满足要求。

远程预约系统是一种全新的网络预约方式,通过互联网突破了时间和空间限制实现了便捷快速的预约与管理功能。本系统具有房间信息查询、预约房间和取消预约等功能。

本酒店房间预约系统按照用户部分和管理员部分划分了两块,它们所实现的功能如下。

用户部分

用户注册:检测用户提供的信息并注册用户。

用户登陆:通过用户名和密码核实登陆用户身份。

预约房间:预约某个时间的某一房间。

查询预约信息:查询该用户的预约信息。

取消房间预约:取消某一到期且未付款的有效预约。

查询房间信息:按照用户提出的条件列出查询结果。

给站长留言:检查用户留言的正确性并保存。

注销用户:结束用户会话,保证安全。



管理员部分

阅览用户留言:调用用户留言并显示。

删除无用留言:删除需要处理的留言。

添加房间:添加新的房间,注册详细信息。

删除房间:根据用户提交的信息删除指定的房间。

修改房间信息:对于存在的某房间信息进行修改更新。

确认已付款用户的预约:当用户付款后对指定预约进行标记。

删除无用或错误的预约信息。

房间预约统计和用户统计。

安全注销。

3.2 性能需求

a 硬件环境:Windows 2000 server 是一个功能强大的操作系统,要让系统发挥应有的良好的性能,安装Windows 2000 server的计算机所需的最小配置应为:

CPU: 要求是奔腾以上处理器。

内存: 建议最少有256MB内存。

硬盘:硬盘分区有足够的可用空间来执行安装程序

b 软件环境:

操作系统:Windows XP

服务器平台:IIS5.0

浏览器:IE5.0

应用软件DreamweaverMX

c开发语言:Vbscript



总体设计

4.1系统模块结构设计

系统设计主要包括功能模块的划分和系统流程的分析。根据客户的需求总结系统主要完成的功能,以及将来拓展需要完成的功能,然后根据设计好的功能划分出系统的功能模块,这样方便程序员管理和维护,最后设计出系统的流程。接下来,就详细介绍系统设计的前期准备。

4.1.1 功能模块划分

酒店房间预约系统应该具有用户注册登录、查看预约房间、留言、管理员综合管理等功能。根据对该系统的功能需求分析可以画出系统功能模块图。本系统将功能划分为用户和管理员两部分,图1所示是用户部分的功能模块图。





用户模块包括注册、登录和注销3个功能子模块,注册模块提供用户注册成为酒店房间预约系统的会员,拥有预约房间的功能,而只有登录的用户方可以进行房间的预约,因此登录模块提供会员登录功能。为了防止其他用户私自修改用户信息,同时又设计了注销功能模块。

房间模块包括查看房间、查询房间、查看预约、预约房间和取消预约等功能。通过查看或者输入条件查询房间,可以获得房间的具体信息,如果为登录用户,此时可以进行房间的预约操作,用户觉得不满意,可以通过取消预约模块取消预约,同时用户可以通过查看预约模块查看用户所有的预约信息。

留言模块为用户提供一个发表自己看法的场所,如果遇到什么困难或者不满意的地方。可以通过该模块发表。

管理端部分的功能如图2所示。



管理员登录模块提供管理员登录的入口,只有成功登录后,才可以执行管理员操作。

添加房间功能模块为管理员提供添加新的房间的功能,此时,管理员可以输入详细的房间信息。

如果房间出现问题或者该房间已经不存在,管理员可以通过删除房间模块把该房间删除。

当房间信息发生改变时,管理员可以通过修改房间信息模块对房间的信息进行修改。

管理员可以通过阅读留言模块查看用户发表的留言,并可以进行回复和删除等操作。

用户的预约只有等管理员确认后方可生效,管理员就是通过预约管理模块对用户的预约信息进行管理的,包括确定预约和删除预约等。

管理员操作结束时需要通过注销登录模块注销登录,防止系统信息被篡改。

4.2 数据库设计

数据库结构设计的好坏直接影响到信息管理系统的效率和实现的效果。合理地设计数据库结构可以提高数据库存储的效率,保证数据的完整和统一。数据库设计一般包括如下几个步骤:

数据库需求分析

数据库概念结构设计

数据库逻辑结构分析

4.2.1数据库需求分析

酒店房间预约系统的数据库功能主要体现在对各种信息的提供、保存、查询和更新操作上,包括用户信息、管理员信息、房间信息、预约信息和留言信息,各个部分的数据有着内在的联系。

通过前面对系统功能模块的分析,总结出该数据库需要满足以下信息需求:

用户和管理员具有不同的身份。

用户信息记录用户的资料。

房间信息包括房间类型和费用等。

预约信息包括预约时间、预约用户等信息。

留言包括标题、内容等信息。



综合上面对酒店房间预约的数据库的需求分析,考虑到未来功能上的扩展,设计如下的数据项和数据结构。

管理员信息包括的数据项:管理员名和密码。

用户信息包括的数据项:用户名、密码等。

房间信息包括的数据项:房间ID、房间名称、类型等。

预约信息包括的数据项:预约ID、预约用户名、房间ID等。

留言信息包括的数据项:留言用户名、留言标题、内容等。

4.2.2数据库概念结构设计

得到上述的数据项和数据结构以后,就可以设计出满足客户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计做好铺垫。

该系统的实体有管理员信息实体、用户信息实体、房间信息实体、预约信息实体、预约信息实体和留言信息实体,它们之间的关系如图3所示。





信息实体之间的关系示意图

用户信息试题的E-R图,如图4所示。





管理员信息试题E-R图,如图5所示。







房间信息实体E-R图,如图6所示。





预约信息实体E-R图,如图7所示。





留言信息实体E-R图,如图8所示。





4.3 数据库逻辑结构设计

数据库的概念结构设计之后,就可以将上面的数据库概念转化为某种数据库系统所支持的实际数据模型,也就是数据库的逻辑结构

本系统采用的数据库软件是Microsoft Access.首先打开Microsoft Access,新建一个新空的数据库,命名为golfers.mdb。然后通过表设计器创建本系统的几个表。下面分别介绍各个表的内容。

1.管理员信息表

管理员信息包括管理员帐号和管理员密码,其属性如表1所示。设置管理员帐号Admin-name为主键。

列 名

数据类型

字段大小

必填字段

默认值

备注

Admin-name

文本

12





主键,管理员帐号

Admin-pwd

文本

16





密码

管理员信息表(Admin)

2.用户信息表

用户信息表记录了用户的详细信息,包括用户名、密码、和有关的个人信息,设置用户名为该表主键,如表2所示。

用户信息表(user-reg)

列 名

数 据 类 型

字 段 大 小

必 填 字 段

默 认 值

备 注

User-name

文本

12





主键,用户名

Pas

文本

16





密码

Sex

文本

2





性别

Age

数字

1





年龄

Email

文本

50





电子邮件

Tel

文本

15





电话

Byear

数字

2





出生年

Bmonth

数字

1





出生月

Bday

数字

1





出生日

3.房间信息表

房间信息表记录了房间的编号、房间名称、房间类型和费用等信息,设置房间编号为该表主键,如表3所示。

房间信息表(room)

列 名

数 据 类 型

字 段 大 小

必 填 字 段

默 认 值

备 注

Room-id

自动编号

2





主键,房间编号

Name

文本

30





房间名称

Type

文本

12





房间类型

Cost

货币

2





费用

4.预约信息表

预约信息表记录了用户预约房间的详细信息,包括预约帐号、预约编号、预约时间、房间编号、使用费用、是否付款和何时使用等信息,如表4所示。

预约信息表(preengage)

列 名

数 据 类 型

字 段 大 小

必 填 字 段

默 认 值

备 注

Preengage-id

自动编号

2





主键,预约编号

User-name

文本

12





用户名

Room-id

文本

2





房间编号

Datetime

日期/时间

8





预约时间

Cost

货币

2





费用

Pyear

数字

2





开始年

Pmonth

数字

1





开始月

Pday

数字

1





开始日

Beginhour

数字

1





开始时间

Paid

数字

1





是否付款

5.留言信息表

留言信息表记录了留言的标题、留言编号、留言内容、留言用户等信息,如表5所示。设置留言编号为该表主键。

留言信息表(word)

列 名

数 据 类 型

字 段 大 小

必 填 字 段

默 认 值

备 注

Word-id

自动编号

2





主键,留言编号

User-name

文本

12





用户名

Title

文本

50





标题

Word

文本

250





内容

Datetime

日期/时间

8





时间



4.4 数据库的实现

酒店房间预约系统使用ASP+Access的工作模式,为了是系统正常工作,需要建立与数据库系统的连接来读取和写入数据。

使用数据库文件的语法为:〈!--#include file=”../Include/conndb.asp”--〉.使用过程中,file后面的路径应该根据实际文件的位置稍微调整。该文件代码的实现参见程序清单1

程序清单1 数据库连接代码 hotel.asp



<%

Dim hotel_conn



db = "database/hotel.mdb"

connstr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)

Set hotel_conn = Server.CreateObject("ADODB.Connection")

if err Then

err.clear

end if



hotel_conn.Open connstr



'关闭数据库连接,在每页中调用此函数,将连接放入连接池

sub CloseConn()

hotel_conn.Close()

Set hotel_conn = Nothing

end sub



'替换单引号

function RealString(strSrc)

RealString = Replace(Trim(strSrc), "'", "''")

end function

%>

第五章、编写公共模块文件

公共模块主要包括以下几个部分:

页面头文件。

页面尾文件。

管理员登陆判断代码。

用户登录判断模块。

注销模块。

用户名判断函数。

电子邮件地址判断函数。

错误提示页面。

1. 页面头文件

本系统的每个可显示的页面都有固定的页面头和页面尾,页面头包括图片和导航菜单,页面尾文件包括版权信息和联系方式。为了减少代码的重复编写,将它们分别单独作为一个文件来操作,使用时使用include命令来调用它们。程序清单2为页面头文件的实现代码。

程序清单 2 页面头文件实现代码 include/head.asp









asp.net,c#,visual studio,sql酒店房间预约系统设计,毕业论文,课程设计,PPT,开题报告


















该头文件指定了页面头部图片,并在图片上设置了“热点”,即用鼠标单击图片某一区域后进入相应的网页。

2.页面尾文件

程序清单3是页面文件的实现代码。使用该代码采用〈!--#include file=”../Include/foot.asp”--〉语句。



程序清单3 页面尾文件实现代码 Include/foot.asp































天空酒店管理系统 ©2005
E-mail:
电话:
010-12345678


3.管理员登录判断代码

为了防止非管理员用户任意修改系统数据,在页面中需要加入管理员登录判断,其实现代码见程序清单4

程序清单4 管理员登录判断代码 include/is-admin.asp

<%

'判断管理员登陆------------------

if isempty(session("admin_name")) then

response.Redirect("error.asp")

response.End()

end if

%>

用户登录判断代码

酒店房间预约系统是一个多用户系统,某些页面只有用户登录后方可开通,如留言等。为了防止非注册用户直接调用页面的这些功能,需要在页面中加入用户登陆判断代码。程序清单5是用户登录判断代码,和管理员登录判断代码类似。

程序清单5 用户登录判断代码 include/is-user.asp

<%

if isempty(session("user_name")) then

response.Redirect("error.asp")

response.End()

end if

%>

注销模块

当用户或者管理员完成操作后,为保证系统安全,系统提供了安全注销功能,它是通过程序清单6所示的代码实现的。

程序清单6 安全注销 logout.asp

<%

session("user_name")=empty

session("admin_name")=empty

response.Redirect("index.asp")

%>

安全注销代码的使用,首先把用户名清空,进入首页。当用户再次进入该系统时通过用户判断或者管理员判断代码进行安全确认。这样就实现了安全注销功能。

6. 用户名判断函数

注册某些网站用户的时候,会得到这样的提示“您的用户名出现非法字符”。在本系统中,规定用户名只能使用字母、数字和下划线,其实现过程见程序清单7

程序清单7 判断合法用户名 include/is-name.asp

<%

'用户名规则判定函数------------------

function is_name(name)

dim i, c

is_name = true

for i = 1 to len(name)

c = Lcase(Mid(name, i, 1))

if InStr("abcdefghijklmnopqrstuvwxyz_", c) <= 0 and not IsNumeric(c) then

is_name = false

exit function

end if

next

end function

%>



7. 电子邮件地址判断函数

与用户名类似,电子邮件地址也需要判断合法性。程序清单8就是电子邮件地址合法性判断函数。

程序清单8 电子邮件合法性判断函数 include/is-email.asp

<%

'判断管理员登陆------------------

if isempty(session("admin_name")) then

response.Redirect("error.asp")

response.End()

end if

%>



8.错误提示页面

当用户违规操作是,系统会跳转到错误提示页面,如图9所示。





第六章、管理功能模块

有关管理员操作的各个页面必须在管理员登入后方可进入,因此,在这些页面的头部都加入了管理员登入验证代码。

1.登入模块

登入模块是管理员进入管理系统的入口,通过核实管理员名和密码来核实管理员身份,图10所示管理员页面。



图10 管理员登录页面

提交的用户名和密码文件由admin.asp进行处理,并由它完成判断和跳转,程序清单9是admin.asp文件的实现代码。

程序清单9 管理员登录验证admin.asp

<%

dim admin_name,admin_psw,rs_admin

admin_name=request.Form("admin_name")

admin_psw=request.Form("admin_psw")

Set rs_admin = Server.CreateObject("ADODB.Recordset")

sql = "SELECT * FROM admin where admin_name='" & admin_name & "'" & "and admin_psw='" & admin_psw & "'"

rs_admin.Open sql,hotel_conn,3,2

if rs_admin.eof or rs_admin.bof then

response.Redirect("adminerr.asp")

response.End()

else

session("admin_name")= rs_admin("admin_name")

response.Redirect("administrator.asp")

rs_admin.close

end if

%>

如果管理员验证成功则进入查看留言模块administrator.asp文件,反之则转至提示管理员错误登录页面adminerr.asp文件。

2.查看和管理留言页面模块

留言功能是为了提供与用户的交互活动而设计的,它包括生成留言列表、阅读留言和删除留言3大部分。

生成留言列表

为了使管理员及时了解用户意见和建议,该系统把查看留言列表页面设置为管理员登录后的首页面,如图11所示。该功能由administrator.asp文件实现,见程序清单10



图11 留言列表

见程序清单10 生成留言列表核心代码administrator.asp

<%

dim rs_word,sql,readurl

set rs_word=server.CreateObject("adodb.recordset")

sql = "select * from word "

rs_word.open sql,hotel_conn,3,2

rs_word.movefirst

while (not rs_word.eof)

readurl="admin_rword.asp?word_id=" & rs_word("word_id")

%>



<%= rs_word("user_name") %>


<%= rs_word("word_id") %>


<%= rs_word("datetime") %>










<%

rs_word.movenext

wend

rs_word.close

set rs_word = nothing

%>

(2)阅读留言模块

当管理员在留言列表中单击留言标题时会弹出阅读流言界面,如图12所示。

阅读留言代码的实现比较简单,直接读取数据库留言表word中的留言信息,并构造删除留言链接,其实现代码见程序清单11



图12 阅读留言

程序清单11 阅读留言核心代码admin_rword.asp

<%

dim word_id,rs_word,sql

word_id=request("word_id")

if word_id="" then response.Redirect("error.asp")

set rs_word=server.CreateObject("adodb.recordset")

sql = "select * from word where word_id =" & word_id

rs_word.open sql,hotel_conn,3,2

delurl="delword.asp?word_id=" & word_id

%>

(3)删除留言模块

删除功能基本上是每个含有数据库的网站的必要功能。当管理员需要删除无用留言时,就会使用文件delword.asp,程序清单12是其实现代码。

<%

dim word_id,rs_del,sql

word_id=request("word_id")

if word_id="" then response.Redirect("error.asp")

set rs_del=server.CreateObject("adodb.recordset")

sql = "delete from word where word_id = " & word_id

rs_del.open sql,hotel_conn,3,2

set rs_del=nothing

%>

3.维护房间信息模块

维护房间模块包括显示房间列表、删除房间和修改房间信息3个功能。

显示房间列表

图13所示为房间列表的显示页面。从图中可以看出,可以对房间进行删除或修改操作。

房间列表的功能实现是由文件damin_room.asp完成的,其代码见程序清单14





图13 房间列表

程序清单13 房间列表实现核心代码damin_room.asp

<%

dim rs_room,sql,delurl,editurl

set rs_room=server.CreateObject("adodb.recordset")

sql = "select * from room "

rs_room.open sql,hotel_conn,3,2

rs_room.movefirst

while (not rs_room.eof)

delurl="del.asp?room_id=" & rs_room("room_id")

editurl="admin_edit.asp?room_id=" & rs_room("room_id")

%>



<%= rs_room("room_id") %>


<%= rs_room("name") %>


<%= rs_room("type") %>


<%= rs_room("cost") %>










<%

rs_room.movenext

wend

%>

删除房间

当酒店因为某种原因不能提供预约时,管理员可以将该房间从数据库中删除,删除功能的实现是文件del.asp来实现的,程序清单14是实现删除功能的代码。



图15删除房间成功页面

程序清单14 删除房间实现代码

<%

dim room_id,sql,rs_del

room_id=request("room_id")

if room_id="" then response.Redirect("error.asp")

set rs_del=server.CreateObject("adodb.recordset")

sql = "delete from room where room_id=" & room_id

rs_del.open sql,hotel_conn,3,2

%>

当管理员成功删除指定房间后会显示删除成功界面,如图15所示。

修改房间信息

修改房间信息的功能是修改存在于数据库中的房间信息,包括房间名称、房间类型和费用,但是不能修改房间ID。

修改房间信息功能有admin_edit.asp和admin_editchk.asp两个文件来完成。第一个文件用来接受管理员填写的更新信息,第二个用来检查数据并写入数据库中。图16所示是填写房间信息表单的页面。



图16 修改房间信息

程序清单15 修改房间信息核心代码admin_editchk.asp

<%

dim err(4)

dim room_id,room_name,room_type,cost,haveerr,rs_edit,sql

room_id=request.Form("room_id")

room_name=request.Form("name")

room_type=request.Form("type")

cost=request.Form("cost")

if len(room_name) > 30 then err(1)="房间名称不能超过30个字符"

if len(room_name) < 2 then err(1)="房间名称不能少于2个字符"

if not IsNumeric(cost) then err(2)="费用必须是数字"

if room_type="" then err(3)="房间类型不能位为空"

if len(cost) >4 then err(4)="费用不能多于4位数"

for i=1 to 4

if err(i)<>"" then haveerr=1

next

If haveerr = 0 Then

set rs_edit=server.CreateObject("adodb.recordset")

sql = "select * from room where room_id=" & room_id

rs_edit.open sql,hotel_conn,3,2

rs_edit("name")=room_name

rs_edit("type")=room_type

rs_edit("cost")=cost

rs_edit.update

%>

4.添加房间模块

该功能模块的实现是由文件admin_addnew.asp完成的。添加房间的页面如图17所示。其实实现代码比较简单就不再详细论述。



当管理员正确提交了要添加新房间的信息后就会出现如图18所示的成功提示,该功能是由文件admin_addnewchk.asp完成的,其实现代码见程序清单16



图17 添加新房间

程序清单16 添加房间页面关键代码admin_addnewchk.asp

<%

dim err(3)

dim haveerr,room_name,room_type,cost,i

dim rs_add,sql

room_name=request.Form("name")

room_type=request.Form("type")

cost=request.Form("cost")

if len(room_name) > 30 then err(1)="房间名称不能超过30个字符"

if len(room_name) < 2 then err(1)="房间名称不能少于2个字符"

if not IsNumeric(cost) then err(2)="费用必须是数字"

if len(cost) >4 then err(3)="费用不能多于4位数"

for i=1 to 3

if err(i)<>"" then haveerr=1

next

If haveerr=0 Then

set rs_add=server.CreateObject("adodb.recordset")

sql = "select * from room"

rs_add.open sql,hotel_conn,3,2

rs_add.addnew

rs_add("name")=room_name

rs_add("room_id")=room_name

rs_add("type")=room_type

rs_add("cost")=cost

rs_add.update

%>

<%

for i=1 to 3

if err(i) <> "" then response.Write("●" & err(i) & "
")

next

%>

<% End If %>

<%

set rs_add=nothing

%>

5.预约管理模块

预约管理模块包括确认预约和删除预约两部分,确认预约是指在用户已经对指定的预约付款后,管理员在预约数据库中将对应的预约信息修改为为已付款操作;删除预约用于在数据库预约表中出现错误预约或恶意预约后,由管理员强制将其删除。

确认预约页面

酒店房间预约系统规定,用户不能取消已经付款的预约,因为这些预约已经被认为是有效预约。同样,管理员不能删除已经付款的预约。预约列表界面是确认预约页面的一部分,它将为管理员显示所有为付款的预约,并提供“确认预约”和“删除”超链接。

图19所示是显示预约列表页面,图20所示是预约确认成功提示信息页面,它们的实现都由文件admin_chk.asp完成,它们的实现代码见程序清单17



图19 预约列表



图20 预约确认

程序清单17 确认预约功能核心代码admin_chk.asp

<%

dim preengage_id,rs_preengage,sql,rs_room,datetime

preengage_id=request("preengage_id")

set rs_preengage=server.CreateObject("adodb.recordset")

If preengage_id="" Then

sql = "select * from preengage where paid = 0"

rs_preengage.open sql,hotel_conn,3,2

rs_preengage.movefirst

%>








































<%

while (not rs_preengage.eof)

%>

















<%

rs_preengage.movenext

wend

%>













 
预约确认
 
预约用户
房间名称
预约日期
预约时间
费用
操作
<%= rs_preengage("user_name") %>




<%

set rs_room=server.CreateObject("adodb.recordset")

sql = "select * from room where room_id=" & rs_preengage("room_id")

rs_room.open sql,hotel_conn,3,2

response.Write(rs_room("name"))

rs_room.close

%>

<%= rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday") %>
<%= rs_preengage("beginhour") & ":00-" & (rs_preengage("beginhour")+1) & ":00" %>
<%= rs_preengage("cost") %>
 
 


<%

Else

'已提交preengage_id数据,开始更新预约表preengage的paid字段---------

sql = "select * from preengage where preengage_id=" & preengage_id

rs_preengage.open sql,hotel_conn,3,2

rs_preengage("paid")=1

rs_preengage.update

datetime= rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday")

datetime=datetime & " " & rs_preengage("beginhour") & ":00-" & (rs_preengage("beginhour")+1) & ":00"

%>




































 
预约确认成功
 
成功确认ID为<%= rs_preengage("preengage_id") %>的预约,它是在<%= datetime %>的预约,费用为<%= rs_preengage("cost") %>元
 


<% End If %>

删除预约页面

图21所示是删除页面成功的提示信息。该功能的实现是由文件chkcancel.asp完成的,在用户面取消预约模块中还会看到该文件的出现,它们的实现都是由该文件完成的。详细代码见程序清单18



程序清单18 删除和取消预约功能的实现chkcancel.asp

<%

dim preengage_id,rs_cancel,rs_del,delok

preengage_id=request("preengage_id")

if preengage_id="" then

response.Redirect("error.asp")

response.End()

end if

if session("user_name")="" and session("admin_name")="" then

response.Redirect("error.asp")

response.End()

end if

set rs_cancel=server.CreateObject("adodb.recordset")

sql = "select * from preengage where preengage_id=" & preengage_id

if session("user_name") <> "" then

sql = sql & "and user_name = '" & session("user_name") &"'"

end if

rs_cancel.open sql,hotel_conn,3,2

if rs_cancel.eof or rs_cancel.bof then

response.Redirect("error.asp")

response.End()

end if

if datediff("h",now,rs_cancel("pyear") & "-" & rs_cancel("pmonth") & "-" & rs_cancel("pday") & " " & rs_cancel("beginhour") & ":00:00") > 24 then

rs_cancel.close

set rs_del=server.CreateObject("adodb.recordset")

sql = "delete from preengage where preengage_id=" & preengage_id

rs_del.open sql,hotel_conn,3,2

delok=1

else

delok=0

end if

%>

6.统计模块

统计模块的功能分为用户统计和预约统计两部分,主要是方便管理员对该酒店运行合理管理。这些功能的实现都是由文件admin_total.asp完成的,请参考程序清单19

程序清单19 统计功能实现核心代码admin_total.asp

<%

set rs_preengage=server.CreateObject("adodb.recordset")

sql = "select count(*) as total from preengage "

rs_preengage.open sql,hotel_conn,3,2

preengage_total=rs_preengage("total")

rs_preengage.close

sql = "select count(*) as total from preengage where paid =1 "

rs_preengage.open sql,hotel_conn,3,2

preengage_paid=rs_preengage("total")

rs_preengage.close

preengage_notpaid = preengage_total - preengage_paid

sql = "select sum(cost) as total from preengage where paid =1"

rs_preengage.open sql,hotel_conn,3,2

money = rs_preengage("total")

rs_preengage.close

sql = "select sum(cost) as total from preengage where paid =0"

rs_preengage.open sql,hotel_conn,3,2

notmoney =rs_preengage("total")

rs_preengage.close

Set rs_user = Server.CreateObject("ADODB.Recordset")

sql = "select count(*) as male from user_reg where sex = '男'"

rs_user.Open sql,hotel_conn,3,2

rs_user_male = rs_user("male")

rs_user.close

sql = "select count(*) as female from user_reg where sex = '女'"

rs_user.Open sql,hotel_conn,3,2

rs_user_female = rs_user("female")

rs_user.close

rs_user_total = rs_user_male + rs_user_female

%>

用户统计实现了统计用户总数和计算男女用户比例的功能,其界面如图22所示。预约统计实现了对预约总数、已付款预约数、实际收入和未付清预约款的统计功能,如图23所示。



图5-22 预约统计



图23 用户统计

第七章、.用户功能模块

用户功能模块主要包括用户登录、用户注册、发表留言、浏览房间信息、查看房间信息、预约房间、取消预约等功能。

1.首页设计

图24所示用户进入网站看到的界面,包括了简单的房间统计,及用户登录系统等功能。



图24 网站首页

程序清单20所示是首页实现的核心代码,即文件index.asp

<%

dim rs_user,room

dim rs_user_total,room_total

Set rs_user = Server.CreateObject("ADODB.Recordset")

sql = "SELECT user_name FROM user_reg"

rs_user.Open sql,hotel_conn,3,2

Set room = Server.CreateObject("ADODB.Recordset")

sql = "SELECT room_id FROM room"

room.Open sql,hotel_conn,3,2

If (rs_user.RecordCount = -1) Then

rs_user_total=0

rs_user.movefirst

While (Not rs_user.EOF)

rs_user_total = rs_user_total + 1

rs_user.MoveNext

Wend

else

rs_user_total = rs_user.RecordCount

End If

If (room.RecordCount = -1) Then

room_total=0

room.movefirst

While (Not room.EOF)

room_total = room_total + 1

room.MoveNext

Wend

else

room_total = room.RecordCount

End If

%>

<%

If (room_total = -1) Then

room_total=0

While (Not room.EOF)

room_total = room_total + 1

room.MoveNext

Wend

If (room.CursorType > 0) Then

room.MoveFirst

Else

room.Requery

End If

If (room_numRows < 0 Or room_numRows > room_total) Then

room_numRows = room_total

End If

room_first = 1

room_last = room_first + room_numRows - 1



If (room_first > room_total) Then

roomd_first = room_total

End If

If (room_last > room_total) Then

room_last = room_total

End If



End If

%>

<%

if not isempty(session("user_name")) then

set rs_user_name=server.CreateObject("adodb.recordset")

sql="select * from user_reg where user_name ='" & session("user_name") &"'"

rs_user_name.open sql,hotel_conn,3,1

response.Write("欢迎您,"&session("user_name") &"  
")

end if

%>

<%

set rs_user_name = Nothing

rs_user.Close()

Set rs_user = Nothing

room.Close()

Set room = Nothing

%>

2.注册登录模块

该模块分为注册和登录两个功能模块。

注册模块

图25所示用户注册页面,是由文件reg.asp来实现的。他不需要连接数据库,主要功能是收集信息并传递给reg2.asp文件进行数据有效性验证。



图25 用户注册页面

程序清单21 生成年、月、日序列reg.asp部分代码













文件reg.asp接收到的信息传递给reg2.asp文件进行验证,其实现代码见程序清单22所示

<%

dim err(9)

dim name,psw,psw2,sex,byear,bmonth,bday,tel,email

dim rs_test_name,rs_user

name=request("name")

psw=request("psw")

psw2=request("psw2")

sex=request("sex")

byear=request("byear")

bmonth=request("bmonth")

bday=request("bday")

tel=request("tel")

email=request("email")

if is_name(name) then

set rs_test_name=server.CreateObject("adodb.recordset")

sql = "select * from user_reg where user_name='" & name & "'"

rs_test_name.open sql,hotel_conn,3,2

if not(rs_test_name.eof or rs_test_name.bof) then err(2)="这个用户名已经存在"

else

err(1)="用户名只能使用字母、数字和下划线"

end if

if len(name)>12 then err(3)="用户名不能超过12个字符"

if len(name)<4 then err(3)="用户名不能少于4个字符"

if psw <> psw2 then err(4)="两次输入的密码不一致"

if len(psw)>16 then err(5)="密码不能超过16位"

if len(psw)<4 then err(5)="密码不能少于4位"

if len(tel)>15 then err(6)="电话号码不能超过15个字符"

if len(tel)<7 then err(6)="电话号码不能少于7个字符"

if len(email)>50 then err(7)="Email最多只能有50个字符"

if not is_email(email) then err(8)="Email地址错误"

if not(isdate(byear & "-" & bmonth & "-" & bday)) then err(9)="生日您没有选择或生日日期无效"

for i=1 to 9

if err(i)<>"" then haveerr="yes"

next

%>

<%

set rs_user=server.CreateObject("adodb.recordset")

rs_user.open "select * from user_reg",hotel_conn,3,2

rs_user_total=(rs_user.RecordCount)+1

If (rs_user.RecordCount = -1) Then

rs_user_total=0

While (Not rs_user.EOF)

rs_user_total = rs_user_total + 1

rs_user.MoveNext

Wend

end if

rs_user.addnew

rs_user("user_name")=name

rs_user("psw")=psw

rs_user("sex")=sex

rs_user("age")=datediff("yyyy",byear & "-" & bmonth & "-" & bday,date)

rs_user("email")=email

rs_user("tel")=tel

rs_user("byear")=byear

rs_user("bmonth")=bmonth

rs_user("bday")=bday

rs_user.update

session("user_name") = name

%>

登录模块

登录模块主要是由文件login.asp来实现的。其登录核心代码见程序清单23.通过user_id和psw接收用户在首页填写的用户和密码,并打开数据库在user_reg用户信息表中查询,如果找到了相应的记录则将用户名写入session(“user_name”),并给变量haverr赋值为0作为显示正确登录的标识。

程序清单23 用户登录验证login.asp部分代码

<%

user_id=request.Form("user_name")

psw=request.Form("psw")

set rs_user=server.CreateObject("adodb.recordset")

sql="select * from user_reg where user_name = '" & user_id & "' and psw='" & psw & "'"

rs_user.open sql,hotel_conn,3,2

if not(rs_user.eof or rs_user.bof) then

session("user_name")=rs_user("user_name")

haveerr=0

else

haveerr=1

end if

%>

3.查看房间模块

查看房间信息是酒店应该提供一个必要功能。图26所示是查看房间页面的示意图,从图中可以看出在该页面显示了房间名称、房间类型、费用和预约操作。



图26 查看房价

在查看房间页面room.asp中首先要打开房间信息表room来获取信息,然后通过循环来逐条列出房间信息,见程序清单24

见程序清单24 显示房间信息核心代码room.asp

<%

set rs_room=server.CreateObject("adodb.recordset")

sql = "select * from room"

rs_room.open sql,hotel_conn,3,2

rs_room.movefirst

while (not rs_room.eof or rs_room.bof)

%>



<%= rs_room("room_id") %>


<%= rs_room("name") %>


<%= rs_room("type") %>


<%= rs_room("cost") %>






<%

rs_room.movenext

wend

%>

4.查询房间模块

当房间信息过多的时候,用户为了快速获得满足自己要求的房间就比较麻烦。本系统设计了查询功能,方便用户输入条件获得需求房间。图27所示为了一个简单查询结果的页面。实现代码见程序清单25



图27 查询房间

程序清单25 查询功能实现代码search.asp

<%

set_room=request.Form("set_room")

set_cost=request.Form("set_cost")

%>





































 
请给出查询条件:
 


查看所有费用上限







房间



 








<%

if set_room="" and set_cost="" then

response.End()

else

%>

<%

set rs_search=server.CreateObject("adodb.recordset")

sql = "select * from room "

'如果输入查询条件,构造where结构-----------

if not (set_cost = "不作要求" and set_room = "所有" )then

sql = sql & "where "

end if



if set_room <> "所有" then

sql = sql & "type = '" & set_room& "'"

end if

if set_cost <> "不作要求" and set_room <> "所有" then

sql = sql & " and "

end if

if set_cost = "50元" then

sql = sql & "cost <= 50"

elseif set_cost = "200元" then

sql = sql & "cost <= 200"

elseif set_cost = "400元" then

sql = sql & "cost <=400"

elseif set_cost = "600元" then

sql = sql & "cost <= 600"

elseif set_cost = "600元以上" then

sql = sql & "cost > 600"

end if

'response.Write(sql)

'打开房间数据库---------------

rs_search.open sql,hotel_conn,3,2

if rs_search.eof or rs_search.bof then

searchok=0

else

searchok=1

end if

%>





















<% If searchok=0 Then %>







<% Else %>













<%

rs_search.movefirst

while (not rs_search.eof)

%>



<% urltext="preengage.asp?room_id="& rs_search("room_id") %>











<%

rs_search.movenext

Wend

%>

5预约房间和取消预约模块

预约是本系统的核心所在,该模块接收用户提交的房间编号和预约时间,并判断房间在指定时间内是否空闲,最后给出用户预约结果,如果预约成功则要将信息写入数据库。

图28所示是预约房间界面,图29显示房间预约成功



图28 预约房间



图29 预约成功界面

由preengage.asp文件获取的表单信息给chkpre.asp文件处理。本系统要求用户提出预约时刻要比开始使用时间提前24小时,因此首先由chkpre.asp判断用户提交的时刻是否符合要求,然后查询数据库中该房间在这个时间是否空闲,最后给出预约成功的提示,并将预约信息写入数据库,代码见程序清单26

<%

dim room_id,pyear,pmonth,pday,ptime,chkok,err

dim rs_preengage,rs_room,rs_save

room_id=request.Form("room_id")

pyear=request.Form("pyear")

pmonth=request.Form("pmonth")

pday=request.Form("pday")

ptime=request.Form("ptime")

%>

<%

if not isdate(pyear & "-" & pmonth & "-" & pday) then

err=1



end if



if err=1 then

%>

<%= "出现错误!" %>

<%

set rs_preengage=server.CreateObject("adodb.recordset")

sql = "select * from preengage where room_id =" & room_id & " and beginhour =" & ptime

sql = sql & "and pyear= " & pyear & "and pmonth=" & pmonth & "and pday=" & pday

rs_preengage.open sql,hotel_conn,3,2

if rs_preengage.eof or rs_preengage.bof then

chkok=1

else

chkok=0

end if

if chkok=1 then

set rs_save=server.CreateObject("adodb.recordset")

sql = "select * from preengage"

rs_save.open sql,hotel_conn,3,2

set rs_room=server.CreateObject("adodb.recordset")

sql = "select * from room where room_id=" & room_id

rs_room.open sql,hotel_conn,3,2

rs_save.addnew

rs_save("user_name")=session("user_name")

rs_save("room_id")=room_id

rs_save("datetime")=now()

rs_save("cost")=rs_room("cost")

rs_save("pyear")=pyear

rs_save("pmonth")=pmonth

rs_save("pday")=pday

rs_save("beginhour")=ptime

rs_save.update

rs_save.movelast

%>

<%= "预约成功" %>

<%= "预约未被接受!" %>

取消预约模块的实现和管理端删除模块使用一个文件,这里就不再详细论述。

6.查看预约模块

用户在预约房间后会有查询预约情况的需求,查询页面主要由文件mine.asp实现,如图30所示。程序清单27是查看预约信息的核心代码。



图30 查看预约

程序清单27 查看预约的关键代码

<%

dim rs_preengage,rs_ground

dim time_out

set rs_preengage=server.CreateObject("adodb.recordset")

sql = "select * from preengage where user_name='" & session("user_name") & "'"

rs_preengage.open sql,hotel_conn,3,2

%>







 
查询结果:

<%

if searchok=1 then

response.Write("查看所有开放于"& set_time &"的"& set_room &"房间,费用上限"& set_cost)

end if

%>

 
●没有找到符合要求的房间
房间名称
房间类型
费用(元/小时)
使用时间
<%= rs_search("type") %>
<%= rs_search("cost") %>
24小时































<% If rs_preengage.eof or rs_preengage.bof Then %>







<% Else %>



















<%

rs_preengage.movefirst

while (not rs_preengage.eof)

set rs_room=server.CreateObject("adodb.recordset")

sql = "select * from room where room_id=" & rs_preengage("room_id")

rs_room.open sql,hotel_conn,3,2

%>



















<%

rs_preengage.movenext

wend

%>

<% End If %>

7.留言模块

留言模块是给用户发表意见和看法的场所。图31所示为发表留言界面。程序清单28是留言功能实现的代码主要部分。



图31 发表留言界面

程序清单28 留言功能实现部分代码lword.asp

<%

dim title,word,check,lword

title=request.Form("title")

word=request.Form("word")

if title="" and word="" then

lword=1

else

check=""

if title="" then check="●没有输入留言标题
"

if word="" then check=check & "●没有输入留言内容
"

if len(title) > 50 then check=check & "●标题超过50个字符
"

if len(word) > 250 then check=check & "●留言超过250个字符
"

end if

%>







 
我的预约信息
 
您还没有进行任何预约!
房间名称
房间类型
费用
预约日期
预约时间
状态
操作
<%= rs_room("name") %>
<%= rs_room("type") %>
<%= rs_room("cost") %>
<%= rs_preengage("pyear")&"-"&rs_preengage("pmonth")&"-"&rs_preengage("pday") %>
<%= rs_preengage("beginhour")&":00-"&(rs_preengage("beginhour")+1)&":00" %>


<%

If rs_preengage("paid")=1 Then

response.Write("已经付款 ")

else

response.Write("尚未付款 ")

end if

time_out=datediff("d",now,rs_preengage("pyear") & "-" & rs_preengage("pmonth") & "-" & rs_preengage("pday") & " " & rs_preengage("beginhour") & ":00:00")

if time_out < 0 then

response.Write("已经过期")

else

response.Write("尚未到期")

end if

%>



<% if rs_preengage("paid")=0 and time_out > 0then %>

">取消预约

<% end if %>









<% If lword=1 Then %>


































































 
站长留言
 
标题:




内容:




 
   




 




<% Else %>

<% If check<>"" Then %>










































 


留言错误!
 
<%= check %>
 


<% Else %>

<%

set rs_word=server.CreateObject("adodb.recordset")

sql="select * from word where user_name ='" & session("user_name") & "'"

rs_word.open sql,hotel_conn,3,2

num=rs_word.recordcount

rs_word.close

sql="select * from word"

rs_word.open sql,hotel_conn,3,2

rs_word.addnew

rs_word("user_name")=session("user_name")

rs_word("datetime")=now()

rs_word("title")=title

rs_word("word")=word

rs_word.update

rs_word.close

%>










































 
留言成功
 
<%= "您给站长的留言一共有" & (num+1) & "条" %> 
 


<% End If %>

<% End If %>

结束语

本设计在叶剑春老师的悉心指导和严格要求下业已完成,从课题选择、方案论证到具体设计和调试,无不凝聚着叶老师的心血和汗水,在三年的专科学习和生活期间,也始终感受着老师的精心指导和无私的关怀,我受益匪浅。在此向叶老师表示深深的感谢和崇高的敬意。
    不积跬步何以至千里,本设计能够顺利的完成,也归功于各位任课老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了他们的悉心帮助和支持,才使我的工作顺利完成,在此向山西工商学院,计算机系的全体老师表示由衷的谢意。感谢他们三年来的辛勤栽培。

致谢

在系统开发的两个月里,我受到了指导老师叶剑春老师的细心指导,叶老师严谨的指导态度与深厚的理论知识都让我受益非浅,从她身上我学到了很多的东西,无论是理论还是实践都使我的知识有很大的提高.借此我特提出感谢.

同时我还感谢母校的老师,谢谢他们为本系统提供的帮助.让我能够顺利地完成本系统的开

发.也感谢那些对我提供帮助的同学,没有他们就不会现在的系统.

参考文献

1. ASP数据库系统开发完全手册 人民邮电出版社 2006年3月

2. Visual Basic数据库系统开发完全手册 人民邮电出版社 2006年3月

3. ASP 信息系统开发实例精选 机械工业出版社 王国辉、牛强、李南南等 2006年7月

4. Visual Basic信息系统开发实例精选 机械工业出版社 宋坤、赵智勇、刘强等 2005年7月

5. Access数据库开发实例解析 机械工业出版社 李俊民、高春燕等 2006年1月

6. Visual Basic精彩编程200例 机械工业出版社 赛奎春、高春艳等 2002年1月

7. ASP数据库开发实例解析 机械工业出版社 李严、于亚芳、王国辉 2004年12月

8. Visual Basic工程应用与项目实践 机械工业出版社 高春艳、李俊民等 2005年1月

9. ASP工程应用与项目实践 机械工业出版社 陈威、白伟明、李楠 2005年2月

10. ASP工程应用与项目实践 机械工业出版社 王国辉、牛强、李南南 2005年4月

11. Visual Basic 信息系统开发实例精选 机械工业出版社 高春艳、李俊民、张耀庭等

毕业设计排版要求

纸张大小:A4

大标题:小二号、黑体。包括目录、章、结束语、致谢、参考文献。

副标题:三号、黑体。包括节,如:6.1测试方法。

小标题:小四号、黑体。如5.2.1 ××模块详细设计、 1.模块功能

正文:小四号、宋体

免费下载 ×

下载APP,支持永久资源免费下载

下载APP 免费下载
温馨提示
请用电脑打开本网页,即可以免费获取你想要的了。
扫描加我微信 ×

演示

×
登录 ×


论文助手网
论文助手,最开放的学术期刊平台
				暂无来源信息			 
回复
来来来,吐槽点啥吧

作者联系方式

×

向作者索要->