修正基本结束,节日计划搁浅

利用在家短暂的2天时间基本完成了网站的整修工作,不过却错过了中秋节游戏专题的制作时间…因而此计划被迫中止,以后有什么节且闲下来了再说。

Comments

首页更新工作初步完成

新更新的首页flash配置添加了应用系统入口,正在尝试利用xml摘取部分信息作为首页调用。另外sccs源码的重写和优化工作将于近期启动,同样会有新版的项目计划书出炉,目前正在恶补javascript…

另也不能忘了学校的课啊…还有cet6…

Comments

C++/C实习报告——基于Win32 Console App的民航订票系统

源码、演示ppt及测试结果待续…

               索创软件项目实习报告 V1.3 Final

 

项目名称:民航飞机订票系统

项目组成员:

韩翼  王毅飞

完成日期:2008年8月28日

学校名称;西北大学 软件工程2班

1.需求分析

民航订票系统允许用户自由注册、登陆,用户权限分为三种级别,分别是一般浏览用户、注册用户、民航售票员和系统管理员。

(1) 所有模块程序均使用c++/c语言编写,使用Microsoft Visual C++ 6.0编译,运行环境需Windows98操作系统或以上。

(2) 本系统采用菜单操作方法,每个菜单都有相应的帮助,用户分三种权限:一般的浏览用户,注册用户、民航机票售票员,系统管理员。 根据登陆方式,选择相应的操作方式;如果是一般的浏览用户,只能按照各种方式查看航班信息。如果是一般的注册用户,不但具有一般的浏览用户所有功能,还具有查看自己的信息和订票情况,可以网上订票、退票,修改自己的信息等;如果是民航机票售票员,可以查看数据和编辑航班信息。如果是系统管理员,他拥有管理航班的所有功能,并可创建民航机票售票员,授权用户权限等功能。登录的用户名和密码应该存储在单独的文件中,有加密算法可以进行统计,查找,排序等功能。

 

 

2.概要设计

 

3.详细设计

程序主要有3个模块,机票模块FTicket.cpp/FTicket.h,用户模块FUser.cpp/FUser.h和航班模块FLight.cpp/FLight.h。

各自有一个文件来储存各自内容(用户表 users.txt航班表 flight.txt订票信息 ticket.txt).。以链表形式在文件中存储。

航班模块实现功能有

//航班链表初始化

FlightNode* Flight::InitialFlightNode(FlightNode* head)

//输入链表从文件

FlightNode* Flight::ReCheck(FlightNode* head)

//添加航班

bool Flight::InputFlight(FlightNode* head)

//输出链表到文件

bool Flight::OutPutFlight(FlightNode* head)

//航班查询

bool Flight::FlightQuery(FlightNode* head) 

//修改航班

bool Flight::UpdateFlight(FlightNode* head)

//删除航班,级联删除票务信息

bool Flight::DeleteFlight(FlightNode* head,TicketNode* thead)

//航班统计

bool Flight::FlightStat(FlightNode* head)

//订票情况统计

bool Flight::TicketQueryStat(FlightNode* head)

//热门航班统计

bool Flight::HotFlight(FlightNode* head)

//冷门航班统计

bool Flight::ColdFlight(FlightNode* head)

//打折航班统计

bool Flight::DiscountFlightStat(FlightNode* head)

其中

[//输入链表从文件]与[//输出链表到文件]为文件操作,同文件航班表flight.txt相关连,功能为欲将内存中的链表存入文件中和将文件中的链表存入内存。

[//航班链表初始化]为链表操作。功能是在内存中新建一个链表,为之后操作作准备。

[//添加航班][ //航班查询][ //修改航班]为链表操作,功能是增加链表节点,查询链表节点,与修改链表节点内容。  

[//删除航班,级联删除票务信息]也为链表操作。功能为删除列表节点。同时连接函数ticket.DeleteTicket(Idtmp,thead),当删除航班时同时删除被删航班得订票信息,借此避免数据的非一致性错误。

[//航班统计] [//订票统计] [//热门航班统计][//冷门航班统计][//打折航班统计]为统计部分。[//航班统计]为累加器统计,利用累加器来统计航班数量。

[//热门航班统计]和[//冷门航班统计]首先使列表按订票排序,然后为输出排序后前十得航班。如果按升序排列,前十就是冷门航班,降序前十就是热门航班。其中冷门航班添加判断语句,当入座率都在50%以上时无冷门航班。

[//订票情况统计]与[//打折航班统计]为链表内容输出,当指定航班时输出相应航班内容。

 

用户模块实现功能有

//用户链表初始化

UserNode* User::InitialUserNode(UserNode* head)

//输入链表从文件

void User::ReCheck(UserNode* head) 

//添加用户

bool User::RegisterUser(UserNode* head)

//输出链表到文件

bool User::OutPutUser(UserNode* head)

//用户登录

int User::CheckAdmin(UserNode* head)

//更改密码

bool User::UpdatePass(UserNode* head)

//用户授权

bool User::GrantUser(UserNode* head)

//删除用户(级联删除订票信息)

bool User::DeleteUser(UserNode* head,TicketNode* thead)

//用户列表

bool User::UserList(UserNode* head)

//用户消费查询

bool User::UserConsumption(UserNode* head)

其中

[//输入链表从文件]与[//输出链表到文件]为文件操作,同文件用户表user.txt相关连,功能为欲将内存中的链表存入文件中和将文件中的链表存入内存。

[//航班链表初始化]为链表操作。功能是在内存中新建一个链表,为之后操作作准备。

[//添加用户] [//用户列表] [ //更改密码] [//用户授权]为链表操作,功能是增加链表节点,查看链表全部节点与修改链表节点内容。其中[//添加用户]由用户本人注册来实现,[//更改密码]由用户自己来更改,需要权限较低。[//用户列表]与[//用户授权]由管理员完成。需要权限较高。

[//用户登录]对比链表节点,当用户名与密码对应上时可以进行下一步操作。由用户本人来实现。

[//删除用户(级联删除订票信息)]为链表操作。功能为删除列表节点。同时连接函数ticket.DeleteuTicket(Idtmp,thead),当删除用户时,同时删除此用户得订票信息,借此避免数据的非一致性错误。此功能也为管理员功能,需要权限为高。

[//用户消费查询] 首先使列表按消费排序,然后为输出排序后前5的用户,作为本月消费前5名输出,此功能也为管理员功能。需要权限较高。

 

机票模块实现功能有

//机票链表初始化

TicketNode* Ticket::InitialTicketNode(TicketNode* head)

//输入链表从文件

TicketNode* Ticket::ReCheck(TicketNode* head)

//级联删除订票信息(删除航班时)

bool Ticket::DeleteTicket(char* Idtmp,TicketNode* head)

//级联删除订票信息(删除用户时)

bool Ticket::DeleteuTicket(char* Idtmp,TicketNode* head)

//输出链表到文件

bool Ticket::OutPutTicket(TicketNode* head)

//网上订票

bool Ticket::InputTicket(TicketNode* head,UserNode* uhead,FlightNode* fhead)

//退订机票

bool Ticket::TicketQuery(TicketNode* head,UserNode* uhead,FlightNode* fhead)

//订票查询

bool Ticket::TicketStat(TicketNode* head)

其中

[//输入链表从文件]与[//输出链表到文件]为文件操作,同文件订票信息 ticket.txt相关连,功能为欲将内存中的链表存入文件中和将文件中的链表存入内存。

[//机票链表初始化]为链表操作。功能是在内存中新建一个链表,为之后操作作准备。

[//网上订票] [//退订机票]为链表操作,功能是增加链表节点与删除链表节点。[//网上订票][//退订机票]皆由用户本人进行操作。权限较低。

[//级联删除订票信息(删除航班时)][//级联删除订票信息(删除用户时)]都为级联删除的一部分,嵌套在用户模块与航班模块中,减少由于数据不一致而产生的错误。

[//订票查询] 为链表内容输出,当指定用户时输出相应用户订票内容。

排序功能FSort.cpp用函数实现。查找功能整合在各自模块中。    

密码部分调用SHA1加密模块实现加密。

   程序运行时首先先将用户表 user.txt航班表 flight.txt订票信息 ticket.txt这3个文件中得内容读取到内存中去,一切链表计算全在内存中,运行完成后,将新的链表存储到文件中覆盖旧的文件,达到更改数据的目的。需要注意的是关于有联系的相应项目的删除要注意级联删除相应项目,防止程序出错。

 

4.测试分析

算法分析

1、冒泡排序算法

使用了C++链表形式的冒泡排序方法,具体实现方法例:

while(head->link != tail)

{

p = head;

while( p -> link ->link != tail && p ->link->link !=NULL)

{

p = p -> link;

strcpy(Id,p->Id);

strcpy(Id0,p->link->Id);

if(Id[0]>=Id0[0])

{

q = new FlightNode;

节点数据交换

delete q;

}

}

tail = p->link;

}

 

 其中tail为尾部监视指针,类似于计数器,在首轮冒泡结束后tail会自动提前一位,确保外部循环进行到总结点数减1轮次时结束排序。结点交换方法为结点交换或是数据交换,本例中采取的是数据交换方法,形式较为繁琐,不过达到了冒泡排序的目的。

 

2、统计算法——直接插入排序

由于统计功能与排序有相似之处,故统计中采用了一定的排序算法,具体方法是链表的直接插入排序。

例如统计热门航班前十名的算法:

FlightNode *p,*q,*h,*t;

p=head;

q=new FlightNode;

q->link = NULL;

p=p->link;

h=new FlightNode;

strcpy(h->Id,p->Id);

strcpy(h->TicketNum,p->TicketNum);

strcpy(h->MaxNum,p->MaxNum);

h->link = q->link;

q->link=h;

// bool a=false;

while( p->link != NULL)

{

p=p->link;

t=q;

// t=t->link;

while(atoi(p->TicketNum) < atoi(t->link->TicketNum))

{ if(t->link==NULL)

goto loop;

t=t->link;

if(t->link==NULL)

break;

}

h=new FlightNode;

strcpy(h->Id,p->Id);

strcpy(h->TicketNum,p->TicketNum);

strcpy(h->MaxNum,p->MaxNum);

h->link=t->link;

t->link=h;

continue;

loop: h=new FlightNode;

strcpy(h->Id,p->Id);

strcpy(h->TicketNum,p->TicketNum);

strcpy(h->MaxNum,p->MaxNum);

t->link->link=h;

h=t->link;

continue;

}

直接插入排序形式上比冒泡排序较为复杂,但时间复杂度有很大降低,同时可以方便地进行限制范围的排序,降低空间复杂度。事实上本算法在形式上也有很大的提升空间。

 

5.用户使用说明

主界面(本部分图均略)

 

 

 

可以使用括号中的大写字母来选择自己所要的功能。

一般浏览用户可以直接点Q来查询航班信息。

 

这时点击任意键确认

 

可以按要求查询航班。按B可以返回上一界面

 

想要订票首先要成为注册用户登录。如果不是注册用户要先注册

在主菜单中点R注册进入注册界面。

然后按要求输入你想要的用户名与密码。如果提示用户名重复请重新输入一个新的用户名与密码如下图

 

成功后进入用户登录界面进行订票等操作

 

购票员与管理员可以进入管理员登录界面进入各自登录界面

 

购票员界面

 

管理员界面

 

进行各自的操作

 

源程序清单附电子版后

 

Comments

新的网站结构和风格

 最近实习的任务已经基本上提前完工了,虽然还得每天按时打卡,但总算可以闲下来了。

 秉承micropotato系多年来的“传统”,我们将利用最近几天宝贵的空余时间全面更新网站的内容,预计包括本blog在内的几乎所有的设施都将统一风格,并进行最大限度的整合,这可能也是2008年最后一次较大的网站改版了。

 新的风格仍将延续过去独立制作的方式,力求新鲜原创,同时还要为接下来的若干个网站项目预留入口和风格空间。

Comments

C++/C实习设计文档——基于Win32 Console App的民航订票系统

源码、演示ppt及测试结果待续…

民航订票系统项目计划书

V2.0 Final 韩翼 王毅飞

 一、系统简介

 声明:本设计书最终版与配套源代码的实现有一定差距,这将在测试文档中详细说明,本文档仅在开发之前进行了整体的修改和完善,基本上展现了本系统的结构化设计.

 民航订票系统允许用户自由注册、登陆,用户权限分为三种级别,分别是一般浏览用户、注册用户、民航售票员和系统管理员,具体权限如下:

1、一般浏览用户(默认权限为r即只读),按照各种方式查看航班信息。

2、一般的注册用户(默认权限为r即只读),按照各种方式查看数据。并且能查看自己的信息和订票情况,并且可以网上订票、退票,修改自己的信息等等功能

3、民航机票售票员,除了可以查看数据外还能编辑航班信息。

4、系统管理员,他可以拥有管理航班的所有功能,并且可以创建民航机票售票员,授权用户权限等功能

二、流程图设计

三、界面设计

 1、 主菜单

Register 用户注册

Login   用户登录

Flight query   航班查询

Quit    退出系统

2、 用户注册

……

Success 返回主菜单

Fail    返回主菜单

3、 用户登录

User name 用户名

User password 用户密码

Back 返回上级

4、 登陆界面

Flight query 航班查询

Ticket info 订票信息

Update info 修改信息

Back 退出

5、 航班查询

Id 航班代号

Company 航空公司

Initial station 起始站

Destination 终点站

Price 票价

Discount 打折信息

Time 飞行时间

Back 返回上级

6、 管理登陆

Admin login 系统管理员

Conductor 售票员

Back 返回上级

7、 系统管理员

Flight query 航班查询

Update flight 编辑航班

Grant user  用户授权

Back 返回上级

8、 售票员

Flight query 航班查询

Update flight 编辑航班

Back 返回上级

9、 编辑航班

Id 航班代号

Company 航空公司

Initial station 起始站

Destination 终点站

Price 票价

DIscount 打折信息

Time 飞行时间

Back 返回上级

10、用户授权

User name 用户名

Grant level 授权级别

Back 返回上级

11、订票信息

Back 返回上级

12、网上订票

I航班代号

Time 飞行时间

Back 返回上级

13、修改信息

……

四、模块设计

0、链表操作

1、 //航班模块

class Flight

//航班号

string Id

//航线起始站

string Initial

//航线终点站

string Destinition

//飞行时间

string Time

//成员订额

int maxcount

//票价

float Price

//折扣信息

int Discount

//添加航班

AddFlight()

&id,&Initial,&Destinition,&Time,&maxcount,&Price,&Discount

//编辑航班

UpdateFlight()

&id,&Initial,&Destinition,&Time,&maxcount,&Price,&Discount

2、 //用户模块

Class Users

//用户名 

string Username

//密码 

string Password

//权限

rank

3、//普通用户模块 

User:Users,Flight

//用户名

string Username

//密码

string Password

//性别

string Sex

//民族

string People

//身份证号码

long Id

//护照号码

string VisaId

//级别

int Rank

//注册用户

Register()

//用户登陆

Login()

//修改信息

UpdateInfo()

//网上订票

Tickets()

//订票信息

TicketsInfo()

//附加密模块:

Md5()

3、 查询模块

Class Query

//查询函数

FlightIdQuery(&id)

FlightInitialQuery(&Initial)

FlightDestinitionQuery(&Destinition)

FlightTimeQuery(&Time)

FlightMaxcountQuery(&maxcount)

FlightPriceQuery(&price)

FlightDiscountQuety(&discount)

7、 排序模块

Class sort:

//排序函数

8、 统计模块

结合入各模块中

五、文件设计

1、 用户表 user.txt

2、 航班表 flight.txt

3、 订票信息 ticket.txt

 

 

 

Comments

Mp77的Internet代码收集系统测试公告

 近期实在忙于软工实习,一个人写代码累得半死,就很少来更新blog。

 另外我站的新功能“Mp77的Internet代码收集系统”已经同步开放测试,由于首页受限且尚无精力去做新的设计,因而系统入口就只能贴在这里了:

 点此进入

忙过这一段时间后我会考虑重写该系统的源代码,同时增强网站的整体美观性,但这期间数据库架构不会做任何破坏性更动,故用户大可放心上传数据的安全性。

Comments

“Mp77的Internet代码收集系统”项目计划书(上)

“Mp77的Internet代码收集系统”项目计划书

本系统将作为各类编程语言常用代码的网络收集解决方案。现已考虑在内的语言有C/C++、JAVA、PHP、HTML,并考虑为未来语种扩容留出接口,系统采用LAMP构架。前台使用PHP和HTML编写,后台数据库系统使用MySQL AB公司的知名数据库产品MySQL的The Open Source License版本,网页整合采用Namo WebEditor 2006 suite Trial(考虑到版权问题将不使用Adobe Dreamweaver开发)。预计功能包含函数查询、语法查询、常用数据结构以及部分用户讨论。

这套系统的特点是,通过限量授权的方式,使多数用户能参与代码收集整理工作,从而扩大数据库容量。

由于系统初步构架庞大,计划将采用分步开发的方法逐步进行。预计开发将分为五个阶段:

第一阶段,需求分析,系统架构设计,文档编写以及系统对硬件配置要求的评估。

第二阶段,完成模版规划,制作会员管理模块,代码收集、整理和查询模块,并进行相应测试。

第三阶段,完善用户界面,扩展编程语种种类,完善PHP和HTML两个代码数据库的基础数据,进行本地Alpha测试。

第四阶段,有限度地进行界面的美工设计,完善已容纳的编程语言代码数据库的基础数据,开放用户注册,采取搜索引擎优化等宣传措施,制作SQL script脚本和系统安装引导文件,进行Internet上的beta测试。

第五阶段,全面开放所有既定功能,进入运行维护阶段。

项目的成本考虑是不计成本,人力资源使用为1人,开发时间为学校假期,资金消耗主要在主机选用、域名等,但由于已考虑依托现有的hanyi.name平台,因此该部分将不计入最终成本。

本项目不含任何盈利计划,但考虑到可能由于资金有限的问题,主机条件将远不能及大型商用主机的配置,因此最终所达到的效果可能会有所折扣。

本项目的目的是学习使用Apache、MySQL、PHP进行internet应用开发,因此只要达到这一目的,本项目即宣告成功。

附件1:系统整体架构-流程图

附件2:数据表字段

附件3:模块设计说明

附件1 系统整体架构-流程图

用户权限分级:

Rank=0 未注册用户 可以使用查询功能

Rank=20 普通用户 可以使用查询和评论功能

Rank=40 中级用户 可以使用代码添加功能和包括下级用户所拥有的功能

Rank=60 高级用户 可以使用代码编辑功能和包括下级用户所拥有的功能

Rank=80 超级用户 可以使用审批代码、编辑评论功能和包括下级用户所拥有的功能

Rank=100 管理员  可以使用编辑用户功能和包括下级用户所拥有的功能

附件2 数据表字段:

create table users(

id bigint(20) unsigned auto_increment primary key ,

user_login varchar(60),

user_pass varchar(64),

user_nickname varchar(50),

user_email  varchar(100),

user_registered datetime,

user_rank int unsigned

);

create table comments(

comment_id bigint(20) UNSIGNED auto_increment primary key,

comment_code_name varchar(60),

comment_author varchar(50),

comment_date datetime,

comment_content text

);

create table link(

link_id bigint(20) primary key,

link_url varchar(255),

link_name varchar(255),

primary key(link_id)

);

create table code_type

(code_type_id bigint(20) UNSIGNED auto_increment primary key,

code_type_name varchar(50),

code_type_admin bigint(20)

);

create table code

(code_id bigint(20) UNSIGNED auto_increment primary key,

code_name varchar(255),

code_content longtext,

code_type_name varchar(50),

code_author varchar(60)

code_des longtext

);

create data_structure(

data_structure_id bigint(20) UNSIGNED auto_increment primary key,

data_structure_name varchar(50),

data_structure_content longtext,

data_structure_type varchar(50),

);

create table affiche(

affiche_id bigint(20) UNSIGNED auto_increment primary key,

affiche_title varchar(255) ,

affiche_author varchar(50),

affiche_date datetime,

affiche_content longtext,

);

附件3 模块设计说明

To be continued.

Comments

掩帘向学

  古有闭关修炼,今有掩帘向学。

Comments

深度解密——旋转的舞女

 近期事务又开始多起来,利用空余时间写了下面这篇文章,接下来就不能持续更新了。

 前一阵看到一张图片,大概是一名舞女在灰白色的空间里旋转。起初没有感觉到什么异样,后来讨论的人多了,才逐渐发现:该舞女时而顺时针转,时而逆时针转,似乎观察的人都不清楚她是如何变换方向的。

 旋转的舞女

 当初对这张图很感兴趣,亦和坛友们讨论了一番,但其实都不知道个所以然,顶多讲一些自己注意到的细节,后来就没有深究了。

 哪知近期本图似乎又死灰复燃,标上《心理测试:一张图分出你是用左脑还是右脑》的题目,在各大论坛上再次引起广泛讨论。我很感兴趣网友们是否较前阶段有了新的认识,看了大多数的回帖评论后发现,大家对本图的理解依然止步不前。这就使我增加了对其研究的动力。

 首先将这张208kb的gif动画导入到Flash cs3,分解成34张静态位图。先是按照2fps的速度慢镜头测试影片,发现作者在手臂部分的处理上做的并不好。具体表现为:

 1、整个gif动画是由34幅图片连续拼成,最后一张图和第一张恰能衔接起来,形成一个循环。手臂的交替主要表现在第7、24两帧附近,此时舞女正旋转至侧面。

 2、一般来说,景物在人的视野中总是近大远小,较远侧的物体由于视角过小,其在视网膜上的像也就相应变小。将第7、24帧的静态图像截取出来(下图),我们可以发现,图中圈出的手臂都比相应的一只略小,那么这就和图像竭力所想表现的情况有所不符了。

test

 有网友指出,仔细观察几乎始终保持垂直于地面的下肢后发现,这只脚只是在做180度范围内的钟摆运动。经分析后我认为亦然,不仅如此,脚的摆动既可以认为是正对屏幕、也可以认为是背对屏幕(下图)。有时即容易被看作是在做360度旋转,且既可看成顺时针转、也可看成是逆时针转,这种情况在盖住图片膝部以上部分再观察后尤为明显。

 feet

 由此想到观察其它部位,包括头部、躯干部以及另一只始终保持凌空的下肢,在静态图片中都可以被看出可能面向的两个方向的。下面仅举一例:(其中黄色箭头表示该舞女分别面向的可能的两个方向)

 girl

 静态图片出现这种情况,主要是因为人体使用了纯黑色,其本身并没有光线层次的渲染,整体的立体感主要是由背景和阴影部分加以支撑的。这种纯色就有可能产生两种甚至多种不同的观察结果。

 那么为何人们观察本幅图普遍的第一感觉是舞女在做“顺时针”或是“逆时针”的旋转呢?医学已经证明人体具有“视觉暂留”的特性,这大家可能都有所体会,因为24格电影的效果就是依据这一原理产生的,一般认为视网膜上“保留图像”的存在时间为0.1秒-0.4秒之间。那么34格、12fps的连续图像就足以形成一个人眼中完整的动作,由于视觉惰性的原因,假设你看到第一帧的感觉是舞女正面向A、B两个方向中的A方向,那么来不及你反应时在0.08秒以内已经切换到下一帧,你就会自然地认为A方向是唯一正确的方向,这也就是一般只会看到一个方向旋转的原因。

 还有一种情况,就是可能会有一些人观察到舞女是在一个类似180度范围内的空间里来回旋转的(笔者在观察到第二阶段时亦曾出现这种情况),这种交替的分界在两个仅有的侧面图像后产生,其实应该是同前面一样的道理:因为无论如何,任何时间里的舞女都是存在向两个方向旋转的可能的。

Comments

PowerBuilder丛谈

 我们知道,数据库应用是当前计算机应用的一个非常重要的方面,而在目前的数据库应用技术中普遍采用的就是客户机/服务器体系结构,在这种体系结构中,所有的数据和数据库管理系统都在服务器上,客户机通过采用标准的SQL语句等方式来访问服务器上数据库中的数据。由于这种体系结构把数据和对数据的管理都统一放在了服务器上。就保证了数据的安全性和完整性,同时也可以充分利用服务器高性能的特点。正因为客户机/服务器体系结构的这些优点,因而得到了非常广泛的应用。

 PowerBuilder是著名的数据库应用开发工具生产厂商PowerSoft公司推出的产品(PowerSoft现已被数据库厂商Sybase所收购),它完全按照客户机/服务器体系结构研制设计,在客户机/服务器结构中,它使用在客户机中,作为数据库应用程序的开发工具而存在。由于PowerBuilder采用了面向对象和可视化技术,提供可视化的应用开发环境,使得我们利用PowerBuilder,可以方便快捷地开发出利用后台服务器中的数据和数据库管理系统的数据库应用程序。

 在当前,网络技术迅速发展,随之发展的还有OLE,OCX,跨平台等技术,而在PowerBuilder的最新版PowerBuilder 6.0中提供了对这些技术的全面支持。总之在数据库开发工具领域,PowerBuilder是其中非常优秀的一个,利用它我们可以开发出功能强大的数据库应用程序。

 PowerBuilder的特点

 PowerBuilder提供了对目前流行的大多数关系数据库管理系统的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言SQL,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。也就是说用PowerBuilder开发的应用程序是独立于服务器上的数据库管理系统的。

 和大多数的WINDOWS应用程序一样,PowerBuilder也是事件驱动工作方式。在这种工作方式中,程序的运行没有固定的流程,程序中的代码也是为各种可能发生的事件编写的,当程序开始运行之后,它就可以接受来自系统,用户或者其它应用程序触发的事件,然后执行相应的事件代码。事件驱动的工作方式与面向对象技术是紧密相关的,在PowerBuilder应用程序中,接受发生的事件的往往就是程序界面中的各种可视化对象。

 PowerBuilder是一种面向对象的开发工具,各种WINDOWS应用程序中常见的窗口、菜单、控件等在PowerBuilder中都是一个个的对象。在PowerBuilder中我们还可以创建自己的用户对象。特别要指出的是PowerBuilder提供了对面向对象方法中的各种技术的全面支持,我们可以利用面向对象方法中的对象的封装性、继承性、多态性等特点使得我们开发的应用程序具有极大的可重用性和可扩展性,而这一点正是软件工程中对应用程序所提出的重要目标。

 在当前,由于网络技术的发展,许多种不同的操作系统平台在INTERNET网上同时被使用,这对开发的应用程序的跨平台性提出了更高的要求,而PowerBuilder就提供了良好的跨平台性,比如在PowerBuilder中,利用WINDOWS平台开发的各种对象可以方便地应用到UNIX平台中,因为PowerBuilder支持对象的跨平台性。这样使得把应用程序从一个平台移到另一个平台变得并不复杂。

 为了给用户提供各个方面的支持,PowerBuilder具有自己的编程语言POWERSCRIPT,这个语言除了提供基本的流程控制语句,还提供了几百个函数来操纵各种对象和提供诸如DDE,OLE等方面的支持。此外我们还可以定义自己的函数,处理特定的事件。学习PowerBuilder时相当一部分的时间就是用来了解和熟悉PowerBuilder提供的各种函数。

 PowerBuilder一个很大的特点就是提出了数据窗口对象的概念。数据窗口对象也是PowerBuilder中的一种对象类型,与其它对象不同的是数据窗口对象是专门为了访问后台的数据库服务的,在数据窗口对象中我们定义了数据的来源和数据的显示风格,这样在应用程序中我们就可以把精力完全放在程序的运行流程控制上,而不用关心具体数据的来源,因为我们在数据窗口对象中已经定义好了数据的来源。如果需要使用数据库中不同的数据也只要对数据窗口对象进行修改就可以了。特别要指出的是PowerBuilder在数据窗口对象中提供了丰富的数据显示方式,可以满足各种不同的需要。

 在PowerBuilder较新的版本中提供了基础类库PFC,它为应用程序的开发提供了许多可重用的预定义类和对象,利用基本类库PFC可以快速开发出高质量重用性好的应用程序。真正发挥面向对象编程的巨大威力。

 最后要指出的是PowerBuilder有三个不同的版本,分别为DESKTOP型,PROFESSIONAL型,和ENTERPRISE型,DESKTOP型是为个人使用的桌面型应用程序,在这里可以利用PowerBuilder内置的数据库管理系统SYBASE SQL ANYWHERE来创建和使用本地数据库,为个人的应用服务;PROFESSIONAL型的PowerBuilder最重要的一点就是提供了对MICROSOFT ODBC(数据库标准连接接口)的支持,在PROFESSIONAL版本中我们就可以使用PowerBuilder的继承,多态等绝大多数特性;在ENTERPRISE版本中最重要的一点就是提供了对开发大型的数据库应用程序的全面的支持,提供了开发大型应用程序的许多辅助的工具,比如C++ CLASS BUILDER等。

 PowerBuilder与数据库的连接

 数据库前端开发工具与后台数据库管理系统的连接方式是一个很重要的课题。PowerBuilder提供了两种访问后台数据库的方式,一种是通过ODBC标准接口的方式,第二种是通过专用的接口与后台的数据库相连。

 ODBC的中文名字是开放式数据库连接,它是微软公司提出的数据库连接标准,使用ODBC方式连接数据库的第一步是创建数据源,比如我们可以利用WINDOWS下控制面板中的“32 BIT ODBC”选项来创建驱动某种数据库的数据源,创建好数据源之后,我们就可以在本地计算机中利用定义好的数据源存取后台数据库中的数据了。

 我们还可以通过专用接口同后台的数据库相连,由于专用接口是针对特定的后台数据库管理系统而设计,因此这种方式存取数据的速度要比采用ODBC方式存取数据的速度要快一些,如果我们的应用程序只是针对特定类型的后台数据库,当然是采用专用接口访问后台数据更快一些。

Comments