pb课程设计报刊订阅系统Word文件下载.docx
- 文档编号:17183877
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:18
- 大小:254.67KB
pb课程设计报刊订阅系统Word文件下载.docx
《pb课程设计报刊订阅系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《pb课程设计报刊订阅系统Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
1.需求分析
1.1系统需求和功能
设计一个报刊订阅应用系统,使系统满足以下功能和需求:
1)
a一个订户可订多种报刊;
一种报刊可被多个用户订阅;
订单只能订阅现有报刊目录内容;
b投递时,必须根据订单的情况进行投递,不得超出订单的订阅品种、数量;
2)、系统功能包括:
A订户管理:
订户添加、修改、删除;
b
目录管理:
目录添加、修改、删除;
c订单管理:
完成订户订阅数据的管理(包括添加、修改、删除);
d
订单查询:
按订户或者订单号查询订单详细情况;
e统计查询:
按报刊目录统计各类报刊的订阅数量及金额;
f表单生成:
根据统计查询结果导出统计信息到文件(.xls)
1.2安全性要求
访问数据库时需要输入登陆帐号和密码。
在数据库内设有管理员表,登陆系统时会要求输入管理员帐号和密码。
登陆模块根据输入帐号和密码查管理员表,查到匹配记录则允许其登陆系统。
管理员帐号和密码可以在系统中添加和修改。
1.3一致性要求
在管理系统相关的表之间,有较强的关联性。
为了实现一致性的需求,各个表之间均建立起了相应的一致性约束。
1.4完整性要求
根据报刊订阅管理系统的要求,为保持数据的完整性,采用了数据库的事务机制,防止出现操作故障引起的数据不一致。
2.数据库概念设计
2.1设计方法和步骤
基本项构思ERD的四条基本原则:
①原则1(确定实体):
能独立存在的事物,例如人、物、事、地、团体、机构、活动、事项等等,在其有多个由基本项描述的特性需要关注时,就应把它作为实体。
②原则2(确定联系):
两个或多个实体间的关联与结合,如主管,从属,组成,占有,作用,配合,协同等等,当需要予以关注时,应作为联系。
实体间的联系可分为一对一、一对多、多对多等三类,在确定联系时还要确定其类型。
③原则3(确定属性):
实体的属性是实体的本质特征。
实体应有标识属性(能把不同个体区分开来的属性组),并指定其中一个作为主标识。
联系的属性是联系的结果或状态。
④原则4(一事一地):
信息分析中得到的基本项要在且仅在实体联系图中的一个地方作为属性出现。
2.2E-R图设计
经过上述系统功能分析和需求总结,设计如下面所示的数据项和数据结构。
●管理员表(Adminuser):
用于存放管理员的数据记录,包括数据项:
管理员名、密码。
●部门表(Department):
用来存放部门的相关记录,包括数据项:
部门号,部门名。
●用户表(Users):
用于存放注册用户的记录,包括数据项:
用户账号、密码、真实姓名、身份证号、联系电话,联系地址,部门号(和部门表有关)等。
●报刊类别表(NewspaperClass):
用于存放初始的报刊类别记录,包括数据项:
分类编号、分类名称。
●报刊信息表(Newspaper):
用于存放报刊记录,包括数据项:
报刊代号、报刊名称、出版报社、出版周期、季度报价、内容介绍、分类编号(和报刊类别表有关)等。
●订单表(Order):
用于存放用户下达的订阅报刊的基本信息,包括数据项:
订单编号、用户编号(用户表的主码)、报刊代号(报刊信息表的主码)、订阅份数、订阅月数等。
根据上面的设计规划出来的实体有部门实体、管理员实体、用户实体、报刊类别实体、报刊信息实体和订单实体。
部门实体的E-R图如下图所示:
管理员实体的E-R图如下图所示:
用户实体的E-R图如下图所示:
报刊信息实体的E-R图如下图所示:
订单实体的E-R图如下图所示:
报刊类别实体的E-R图如下图所示:
所有实体之间的的关系E-R图如下图所示:
3.数据库逻辑设计
3.1一般逻辑模型设计
关系模型的逻辑结构是一组关系模式的集合。
将E-R图转换为关系模型就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。
由ERD导出一般关系模型的四条原则;
①一个1:
1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
如果软换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。
如果与某一端实体对应的关系模式何明,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
②一个1:
n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
③一个m:
n联系转换为一个关系模式。
与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
④3个或3个以上实体间的一个多元联系可以转换为一个关系模式。
与该多元联系项链呢的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
根据以上原则将E-R图转换成的关系模式如下:
部门(部门号,部门名称)
用户(用户账号,密码,用户真实姓名,联系电话,联系地址,部门号)
管理员(管理员名,密码)
报刊类别(分类编号,分类名称)
报刊(报刊代号,报刊名称,出版报社,出版周期,每月订价,内容介绍,分类编号)
订单(用户编号,报刊代号,订阅份数,订阅月数,订阅总额)
3.2模块设计
使用本系统,首先它会自动弹出“欢迎使用本系统”的欢迎界面,然后跳转到用户身份验证界面,选择管理员的身份进入,有录入(录入报刊信息、录入用户信息),查询,统计(统计用户、统计、报刊订单),系统维护(备份数据库、恢复数据库),注销,退出等菜单可使用,没注册的用户可进入注册界面进行注册,然后返回登录界面登录,进入后有欢迎界面,有订阅、查询、统计、修改、注销、退出等菜单可使用。
4.数据库物理设计与数据库保护设计
4.1设计索引
我们可以在最经常查询的列上建立索引以提高查询效率。
而在这个系统中,我们经常要按用户账号,按报刊代号,按部门查询,所以,我们可以为这三个表建立索引,建立所以的SQL语句如下,这几个都是字符型
CreateuniqueindexuserNumonusers(userNo)
CreateuniqueindexdepartNumondepartment(depNumber)
CreateuniqueindexnewsNumonnewspaper(newsNO)
4.2设计表间关系
4.3完整性设计
列出主要字段完整性的字段名、完整性约束条件;
列出记录完整性约束及其约束条件;
列出参照完整性表。
主要字段的完整性字段名和参照完整性表可以参照上图各个表之间的关系来看。
比如建立报刊表newspaper时,要求报刊代号在100~99999之间,报刊名称和每月定价不能取空值,报刊类别是报刊类别表的主键,则
Createtableuser
(userNochar(10)constraintC1check(newsNobetween100and99999),
newsNamechar(40)constraintC2notnull,
classidint(4)constraintC3notnull,
publishchar(150),pubPeriodchar(30),contentchar(4000),
pricefloat(8)notnull,
constraintC4foreignkey(classid)referencesnewspaperclass(classid))
4.4用户授权与安全性控制。
因为这个报刊订阅系统由多个用户使用,分为管理员和用户,他们拥有不同的权限和安全性控制。
所以在权限设置方面,采用管理员和用户分别使用用户名和密码进入他们能使用权限范围里的界面。
管理员登陆系统后,可以添加、修改用户和报刊的信息,可以对订单进行查询和统计,并且可以把查询统计的结果进行预览和打印出来,还要对数据库系统进行维护,适时备份数据库,一旦数据库遇到问题,可以恢复到最近备份的状态,减少不必要的损失。
用户登录,用户使用该系统前需要进行注册,他应该是该企业某个部门下面的员工,所以他需要输入他的部门号等信息,注册成功后,登录到系统,可以修改自己的信息还有订阅报刊,但由于权限的限制,他只能查看和统计自己的订单信息.
5.详细设计
以下是我负责设计的部分,以及登录注册页面
5.1系统设计过程
(1)打开PowerBuilder,新建一个工作区,命名为newspaper
(2)新建一个Application,取名newspaper,然后点击工具栏上的DBProfile,新建一个MSSMicrosoftSQLServer,填入ProfileName,服务器名,用户名,密码,数据库,如下图,然后输入连接数据库的主要代码:
open(w_welcome)
//Profilenewspaper
SQLCA.DBMS="
MSSMicrosoftSQLServer"
SQLCA.Database="
newspaper"
SQLCA.ServerName="
CHINA-41CD782EF"
SQLCA.LogId="
sa"
SQLCA.LogPass="
"
SQLCA.AutoCommit=False
SQLCA.DBParm="
connect;
ifsqlca.sqlcode<
>
0then
messagebox("
错误"
"
数据库连接错误,程序将关闭!
stopsign!
)
return
endif
close(w_welcome)
open(w_login)
(3)制作登录页面w_login,在“登录”按钮输入如下:
stringid,password,checkpass,checkid
id=trim(sle_1.text)
password=trim(sle_2.text)
ifid="
orid='
'
orpassword="
orpassword='
then
MessageBox("
系统提示"
请输入用户名和密码!
endif
ifrb_1.checked=truethen
selectadminUser,adminPassinto:
checkid,:
checkpassfromadminuserwhereadminUser=:
id;
ifsqlca.sqlcode<
0then
messagebox("
无此管理员!
sle_2.text="
sle_1.text="
sle_1.setfocus()
return
endif
ifpassword<
checkpassthen
警告"
密码错误!
)
sle_2.setfocus()
open(w_adminview)
close(w_login)
elseifrb_2.checked=truethen
selectuserNo,passwordinto:
checkpassfromuserswhereuserNo=:
无此用户!
open(w_userview)
gs_userid=checkid
w_userview.st_2.text=checkid
(4)制作注册窗口w_register,在“注册”按钮的代码如下:
stringname,realname,password,copypassword,number,phone,address,number1
stringn
name=trim(sle_1.text)
realname=trim(sle_2.text)
password=trim(sle_3.text)
copypassword=trim(sle_4.text)
number=trim(sle_5.text)
phone=trim(sle_6.text)
address=trim(sle_7.text)
ifname="
orname='
then
对不起!
请输入用户名!
否则无法注册!
sle_1.setfocus()
selectuserNo
into:
n
fromusers
whereuserNo=:
name;
ifsqlca.sqlcode=0then
对不起,此用户名已被注册!
请另选一个试试!
sle_1.text="
ifpassword="
请输入登录密码!
sle_3.setfocus()
ifcopypassword="
orcopypassword='
请再次输入登录密码!
sle_4.setfocus()
ifpassword<
copypasswordthen
两次输入密码必须一致!
ifnumber="
ornumber='
请输入部门号!
sle_5.setfocus()
selectdepNumber
number1
fromdepartment
wheredepNumber=:
number;
您输入的部门号无效!
无此部门!
sle_5.text="
INSERTINTOusers
(userNo,userName,passWord,address,phone,depNumber)
VALUES(:
name,:
realname,:
password,:
address,:
phone,:
number);
MessageBox("
恭喜!
注册成功!
close(parent)
(5)制作管理员主菜单w_adminview,建管理员主界面w_adminview,将该菜单放到窗口中
(6)制作用户主菜单w_userview,建用户主界面w_userview,将菜单放到窗口中
(7)制作管理员主菜单里的录入部门信息窗口w_indepartment,制作数据窗口dw_departgrid,dw_departfree,在数据窗口调整好外观,添加控件,并设定相应的动作,分别放到这两个窗口中
这两个窗口功能相识,在窗口中输入:
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_2.settransobject(sqlca)
dw_2.retrieve()
(8)制作管理员主菜单中的查询订阅信息窗口w_searchorder,制作数据窗口dw_booksearch,将其放入窗体中,在窗口中输入代码:
dw_1.settransobject(sqlca)
sle_1.setfocus()
在“查询”按钮中输入代码:
stringordern,usern,newsn,a,b,c
longll_row
iftrim(sle_1.text)="
ortrim(sle_1.text)='
输入不能为空!
ordern=trim(sle_1.text)
selectdepNumberinto:
afromdepartment
ordern;
无此记录!
dw_1.setfilter("
department_depnumber='
+ordern+"
dw_1.filter()
usern=trim(sle_1.text)
selectuserNointo:
bfrombook
usern;
users_userNo='
+usern+"
elseifrb_3.checked=truethen
newsn=trim(sle_1.text)
selectnewsNointo:
cfrombook
wherenewsNo=:
newsn;
book_newsNo='
+newsn+"
“预览”按钮的代码:
ifthis.text="
预览"
dw_1.object.datawindow.print.preview="
yes"
this.text="
取消预览"
else
no"
5.3运行结果及调试
首先进入“欢迎界面”:
登陆界面:
录入部门信息界面:
按部门查询订单:
按部门统计订单:
6.认识体会
本次设计查阅了很多案例,学习到了很多知识,原先很多不懂的东西、都有了初步的了解。
这次课程设计我觉得收获挺大的。
之前的学习仅限于书本,很多东西都只知道其然而不知道其所以然。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力同时也加深了我对PB和SQLServer2000的理解,掌握了一种新的编程技术并提高了我的应用能力和动手实践能力。
本次设计是一次自我学习的过程。
开始的时候就遇到了困难。
因为需求分析是整个设计的纲领,只有搞好了这个纲领下面才有思路往下继续。
课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
7.参考文献
[1]王珊、陈虹编著,数据库系统原理教程,清华大学出版社,2003.
[1]金银秋主编,数据库原理与设计,科学出版社,2000.
[2]李建中王珊,数据库系统原理,电子工业出版社,1998.
[3]李大友,数据库原理及应用(第二版),清华大学出版社,2000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pb 课程设计 报刊 订阅 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)