数据库选课管理系统课程设计Word格式文档下载.docx
《数据库选课管理系统课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库选课管理系统课程设计Word格式文档下载.docx(93页珍藏版)》请在冰豆网上搜索。
消除冗余:
合并相关类型实体,消除冗余属性、冗余联系。
消除冗余的方法:
数据字典中数据项间逻辑关系的说明,规范化理论。
逻辑模型设计阶段:
关系模型
⏹ER模型向关系模型的转换
学生(学号,姓名,性别,班级,出生日期,地址,电话,email)
课程(课程号,课程名,学分)
选课(课程号,学号,成绩)
⏹数据模型的优化和规范处理
数据库物理设计阶段:
数据库
数据库实施阶段:
程序调试
数据库运行和维护阶段:
程序运行
二.数据库设计
使用工具:
SQLServer2000
目的要求:
掌握SQLServer2000数据库、表的创建
操作步骤:
1.建立数据库
(1)启动数据库服务管理器。
(2)启动企业管理器。
(3)以登录账户sa注册数据库服务器“59.74.104.180”,密码为sa。
(4)使用SQL-EM:
SQL-EM→数据库→右键→新建数据库:
数据库名xx1420,设计数据库文件.MDF和.ndf文件
2.建立表结构
(5)启动数据库服务管理器。
(6)启动企业管理器。
(7)以登录账户sa注册数据库服务器“59.74.104.180”,密码为zzj。
(8)在“xx1420”数据库中创建学生表,表名为“xx1420_29_s”,包括列:
sno、char(4),class、char(20),sname、char(8),sex、char
(2),birthday、datatime,address、varchar(50),telephone、char(20),email、char(40)。
其中,sno为主键,要求class、sname非空,sex默认值为“男”,email惟一完整性约束。
(9)在“xx1420”数据库中创建课程表,表名为“xx1420_29_c”,包括列:
cno、char(4),cname、char(20),credit、tinyint。
其中,cno为主键。
(10)在“xx1420”数据库中创建选课表,表名为“xx1420_29_sc”,包括列:
sno、char(4),cno、char(4),score、smallint。
其中,sno、cno为主键。
(11)在“xx1420”数据库中创建选课表,表名为“xx1420_29_u”,包括列:
uno、char(10),uname、char(10),password、char(6),u、tinyint,s、tinyint,c、tinyint,sc、tinyint。
(12)在“xx1420”数据库中创建选课表,表名为“xx1420_29_tj”,包括列:
cno、char(4),fsd、char(10),rs、smallint。
(13)新建数据库关系图,指定选课表sno为外键参照学生表的sno,指定选课表cno为外键参照课程表的cno,数据库关系图名要求为“xx1420_29”。
(14)启动查询分析器,使用insert语句将表s、c、sc中的数据分别插入表“xx1420_29_s”、“xx1420_29_c”、“xx1420_29_sc”。
SELECT*FROMsINTOxx1420_29_s
SELECT*FROMcINTOxx1420_29_c
SELECT*FROMscINTOxx1420_29_sc
(15)创建登录账户“xx1420_29”,密码自行设定。
(16)将登录账户“xx1420_29”指定为“xx1420”数据库用户。
(17)设置数据库用户“xx1420_29”对表“xx1420_29_s”、“xx1420_29_c”、“xx1420_29_sc”的select、insert、delete、update权限。
(18)删除注册的数据库服务器,以登录账户“xx1420_29”注册数据库服务器,测试其权限。
三.软件设计
PowerBuilder9.0
掌握PowerScript程序设计方法
1.创建应用程序并连接数据库
(2)注册数据库服务器:
服务器名59.74.104.180
用户名sa密码sa
(3)启动PowerBuilder9.0
开始→程序→Sybase→PowerBuilder9.0→PowerBuilder9.0
(4)创建工作区,工作区名为“xx1420_29”
File→New→Workspace:
xx1420_29
(5)创建应用对象、应用库和目标,应用对象、应用库及目标名均为“xx1420_29”,并存放在D盘“xx1420_29”文件夹中。
工作区→右键→New→Target→Application:
应用对象名xx1420_29、目标名xx1420_29、应用库名xx1420_29
(6)创建数据库配置。
(7)连接数据库服务器。
(8)将数据库配置代码复制到应用对象Open事件中。
ProfileName→右键→Properties→Preview:
copy
应用对象名→右键→Edit→open事件:
Ctrl+V
然后使用嵌入式SQL语句CONNECT建立连接,书写脚本:
connectusingsqlca;
ifsqlca.sqlcode=-1then
messagebox(”xx1420_29警告”,”连接失败!
”)
return
else
messagebox(”xx1420_29提示”,”连接成功!
endif
(9)编写连接数据库以及显示连接数据库结果的脚本,messagebox对话框标题为“xx1420_29”。
(10)运行应用程序。
2.主窗口和主菜单设计
(1)启动PowerBuilder9.0,打开工作区,配置并连接数据库。
(2)创建登录窗口
(File→)New→PBObject→Window→保存:
通常窗口命名为“w_<
窗口名>
”。
(3)设计登录窗口。
I窗口的构成:
使用控件:
图片按钮“p_1“——图片xx1420_29.JPEG
静态文本”st_”——账号、密码;
单行编辑框“sle_1,sle_2“——账号和密码输入框
命令按钮“cb_“——确定、退出
属性:
p_1PictureName下拉列表中指定图片为“文件路径\xx1420_29.JPG”
sle_1,sle_2password属性
事件:
设置全局变量
stringg_uno
设置实例变量
Inti_n=0
“确定”按钮触发事件脚本
selectunointo:
g_uno
fromxx1420_29_u
whereuno=:
sle_1.textandpassword=:
sle_2.text;
i_n=i_n+1
ifsqlca.sqlcode=0then
open(w_main)
close(parent)
elseifi_n=3then
messagebox("
xx1420_29"
"
对不起您是非法用户!
"
)
账号或密码错误,请重新输入!
sle_1.text="
sle_2.text="
“退出”按钮触发事件脚本
close(parent)
(4)修改应用对象脚本,将应用对象与登录窗口连接。
//Profilexx1420_29
SQLCA.DBMS="
MSSMicrosoftSQLServer"
SQLCA.Database="
xx1420"
SQLCA.LogPass="
123456"
SQLCA.ServerName="
59.74.104.180"
SQLCA.LogId="
SQLCA.AutoCommit=False
SQLCA.DBParm="
connectusingSQLCA;
ifSQLCA.SQLCode=-1THEN
MessageBox("
连接失败!
open(w_login)
(5)运行应用程序。
(6)菜单的创建
i.创建菜单
(File→)New→PBObject→Menu:
右击Untitled,InsertSubmenuItem建菜单项,右击菜单,InsertSubmenuItem建命令项,通常菜单命名为“m_<
菜单名>
ii.修改菜单
指定窗口→单击右键→Edit或双击指定菜单。
iii.删除
指定菜单→单击右键→Delete。
(7)设计主菜单。
菜单的属性:
1定义菜单外观
General选项卡:
Name(名称)、MicroHelp(微帮助)、Enabled(可用性)等。
2定义菜单项快捷键
Shortcutkey(快捷键,包括组合键:
Alt、Ctrl、Shift)。
3定义菜单工具栏中修改密码、帮助、退出系统的显示图片
Toolbar选项卡:
ToolBarItemText(指向该图标时文字提示)、ToolBarItemName(图标所显示图片)、ToolBarItemDownName(按住图标所显示图片)、ToolBarItemOrder(图标在工具栏中位置)等。
(8)设计主窗口并捆绑主菜单。
创建窗口w_main,在“MenuName”框中指定捆绑的菜单名m_main,在“WindowType”下拉列表选中“mdihelp!
”,在“WindowState”下拉列表选中“maximized!
(9)编写主菜单菜单项“退出”脚本。
.
close(parent)
(10)编写登录窗口clicked事件脚本,将登录窗口与主窗口连接。
(11)运行应用程序。
3.系统维护菜单各项的设计与实现
(1)修改密码项
1.1修改密码窗口设计
1.2事件脚本
⏹确定脚本
intret
SELECTunoINTO:
g_unoFROMxx1420_29_uWHEREuno=:
g_unoandpassword=:
sle_1.text;
IFSQLCA.SQLCode=0THEN
IFsle_2.text=sle_3.textTHEN
UPDATExx1420_29_uSETpassword=:
sle_2.textWHEREuno=:
g_uno;
COMMITUSINGSQLCA;
保存成功!
Close(PARENT)
RETURN
ELSE
ret=MessageBox("
新密码有误,继续吗?
Question!
YesNo!
2)
IFret=1THEN
sle_3.text="
ELSE
ENDIF
ELSE
旧密码有误,继续吗?
ENDIF
⏹关闭脚本
⏹“系统维护”菜单标题下“修改密码”项的触发事件脚本
Open(w_password)
1.3运行应用程序
(2)帮助项
2.1系统帮助窗口设计
窗口属性:
Title中输入“帮助”,在“WindowType”下拉列表选中“main!
”,在“WindowState”下拉列表选中“normal!
工具栏—OLE控件,设置“帮助”。
2.2事件脚本
“系统维护”菜单标题下“帮助”项的触发事件脚本
Open(w_help)
2.3运行应用程序
(3)退出系统项
“系统维护”菜单标题下“退出”项的“关闭”事件脚本
Close(w_main)
4.“学生选课管理系统”数据窗口的设计与实现
<
1>
“课程管理”菜单栏中的“课程查询”项
1.创建数据窗口对象
1选择显示风格
(File→)New→DataWindow:
选择显示Grid风格。
2定义数据源
OK:
定义数据源。
3控制数据
Next→选择xx1420_29_c→Open
选择列:
单击列名。
指定排序:
单击Sort选项卡,拖动xx1420_29_o列至右部,复选框Ascending表示升序。
4保存
对象名:
d_c_locate
5数据对象
2.设计课程查询窗口
(1)创建窗口
事件脚本:
Open事件脚本
dw_1.SetTransObject(sqlca)
dw_1.Retrieve()
检索事件脚本
stringcx
IFTrim(sle_1.text)="
then
cx="
cnamelike'
%"
+Trim(sle_1.text)+"
%'
dw_1.SetSort("
cnoa"
dw_1.Sort()
dw_1.SetFilter(cx)
dw_1.Filter()
关闭事件脚本
Close(parent)
(2)系统主菜单中响应“课程查询”窗口的脚本。
Open(w_c_locate)
(3)运行应用程序。
2>
“课程管理”菜单栏中的“课程删除”项
1.创建数据窗口对象
6选择显示风格
7定义数据源SQLselect
8控制数据
9保存
d_c_delete
10数据对象
3.设计课程删除窗口
(4)创建窗口
Open事件脚本:
检索脚本:
cx="
cno>
='
+sle_1.text+"
'
andcno<
+sle_2.text+"
snoa"
删除脚本:
longn
stringcno,s
cno=dw_o[dw_1.GetRow()]
selectcount(*)into:
nfromxx1420_29_scwherecno=:
cno;
ifn>
0then
xx1420_29警告"
该课程在选课表中已存在,不能删除!
dw_1.deleterow(0)
确定脚本:
intret,ret1
IFdw_1.DeletedCount()>
0THEN
xx1420_29提示"
数据已更新,是否保存?
ret1=dw_1.Update()
IFret1=1THEN
ROLLBACKUSINGSQLCA;
xx1420_29错误"
保存失败!
关闭脚本:
Close(PARENT)
(5)系统主菜单中响应“课程删除”窗口脚本。
Open(w_c_delete)
(6)运行应用程序。
3>
“课程管理”菜单栏中的“课程修改”项
4.创建数据窗口对象
11选择显示风格
12定义数据源
13控制数据
Next→选择一个或多个表→Open
14保存
d_c_edit
15数据对象
5.设计课程修改窗口
(7)创建窗口
Open事件脚本:
closequery事件:
dw_1.AcceptText()
IFdw_1.ModifiedCount()>
YesNoCancel!
3)
ELSEIFret=3THEN
RETURN1
Close(THIS)
取消脚本:
(8)系统主菜单中响应“课程修改”窗口脚本。
Open(w_c_edit)
(9)运行应用程序。
4>
“课程管理”菜单栏中的“课程增加”项
6.创建数据窗口对象
16选择显示风格
17定义数据源
18控制数据
19保存
对象名:
d_c_insert
20数据对象
7.设计课程增加窗口
(10)创建窗口
dw_1.InsertRow(0)
closequery事件脚本:
增加脚本:
inti
i=dw_1.GetRow()
IFIsNull(dw_o[i])orTrim(dw_o[i])="
THEN
课程编号不能为空!
dw_1.InsertRow(0)
dw_1