《数据库应用系统》
课程设计报告
专业 计算机科学与技术 班级 一 班 姓名 汪 泉 学号 120310108 指导老师 郭学俊
河海大学文天学院 2014年12月
第一章 引言
通过学习第二章的全部内容,总结概括抽象数据库的关键技术。课程设计的目的就是选择一个简单的应用系统,经过系统分析设计实现,用报告的形式整理出结果,最后在PowerBuilder下实现,验证分析设计的正确性、可行性。 (1)本次课程设计任务选择学生档案管理系统,经过分析、设计,分析并设计出软件结构、数据结构、功能的需求模型的需求模型,在PowerBuilder中实现。 (2)阅读文献资料,了解数据库所需的应用,在PowerBuilder中制作原型实例,围绕表数据的增、删、改,探索数据库的各项操作,突出关键技术试验。 对学生档案管理系统进行数据分析,为数据需求和功能需求给出E-R图和结构图
(3)运行环境有两种:互联网和局域网。而此次课程设计的运行环境为局域网。
(4)开展系统设计,为该系统的软件结构,数据库的结构、系统功能设计方案。
(5)采用PowerBuilder进行系统实现,要求有主控界面、菜单驱动,永远安全控制数据的增、删、改、查询等功能的实现。
根据现有的现有的管理过程中的不足和管理人员的要求,我们确定了所要开发的学生管理系统的主要优势有: 1、提高信息查询的速度和准确性。 2、提高工作效率,减少差错率。
3、信息输入管理和查询层次清晰,灵活方便。
第二章 数据应用系统的实现
2.1嵌入式SQL关键技术
在pb开发的应用程序中,利用嵌入式sql语句和动态sql语句,可以在程序中灵活的操纵数据库。
嵌入式SQL(英文: Embedded SQL)是一种将SQL语句直接写入C语言,COBOL,FORTRAN, Ada等编程语言的源代码中的方法。借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。在这一方法中,将SQL文嵌入的目标源码的语言称为宿主语言。在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所以SQL语句都必须加前缀EXEC SQL。SQL语句的结束标准则随主语言的不同而不同。
2.2数据库连接技术
使用connect语句建立数据库的链接,connect是每个访问数据库的pb程序必须使用语句,它的功能是通过事务对象将应用程序与数据库链接,链接成功后,其他sql语句和数据窗口才能通过事务对象操作数据库。 常用的连接方法有:ODBC、OLB DB、ADO、JDBC。
2.3数据库动态SQL
动态SQL是指在运行PL/SQL块时动态输入SQL语句。在PL/SQL块中只能执行DDL(create、alter、drop)、DCL(grant、revoke)或比较灵活的SQL语句(如select子句不带where条件);动态SQL的性能不如静态SQL,但是比较灵活;在PL/SQL块中编写动态SQL语句时需要将SQL语句存放到字符串变量中而且SQL语句可以包含占位符(以冒号开始)。 PB的动态SQL有四种类型: (1)既无参数也无返回结果; (2)有参数但无返回结果;
(3)有参数也有返回结果,并且参数的类型和返回结果的字段在编译时已定;
(4)有参数也有返回结果,但参数和返回结果的字段在编译时是味知的。
2.4数据库事务控制
数据库事务有严格的定义,它必须同时满足四个特性:原子性、一致性、隔离性和持久性。
在这些事务特性中,数据“一致性”是最终目标,其它的特性都是为达到这个目标的措施、要求或手段。 数据库管理系统一般采用重执行日志保证原子性、一致性和持久性。重执行日志记录了数据库变化的每一个动作,数据库在一个事务中执行一部分操作后发生错误退出,数据库即可以根据重执行日志撤销已经执 行的操作。此外,对于已经提交的事务,即使数据库崩溃,在重启数据库时也能够根据日志对尚未持久化的数据进行相应的重执行操作。和Java程序采用对象锁机制进行线程同步类似,数据库管理系统采用数据库锁机制保证事务的隔离性。当多个事务试图对相同的数据进行操作时,只有持有锁的事务才能操作数据,直到前一个事务完成后,后面的事务才有机会对数据进行操作。
2.5应用软件架构
软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。 软件体系结构是构建计算机软件实践的基础。一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。
2.6事件驱动程序设计
取代传统上一次等待一个完整的指令然后再做运行的方式,事件驱动程序模型下的系统,基本上的架构是预先设计一个事件循环所形成的程序,这个事件循环程序不断地检查目前要处理的信息,根据要处理的信息运行一个触发函数进行必要的处理。其中这个外部信息可能来自一个目录夹中的文件,可能来自键盘或鼠标的动作,或者是一个时间事件。
第三章 系统的分析
3.1数据需求
本学生档案管理系统有两个实体,系统用户和学生档案,可以给出以下E-R图:
图3.1 分E-R图
图3.2 总E-R图
3.2功能需求:
数据库应用系统中众多功能几乎相似,就是对数据库表当中的数据进行查询、增、删、改、保存等操作。本次课程设计针对学生档案管理系统功能分析有(主控界面和主控菜单): 系统功能分3个模块:(1)维护查询模块:有学生的基本信息等查询操作; (2)修改信息模块:可以对学生的档案进行增删改操作;
(3)退出:当鼠标单击退出按钮,则退出该系统主界面。
功能结构图:
图3.3 功能结构图
3.3运行环境
局域网环境下,在PowerBuilder 8.0下实现。
PB比其他的工具功能强大,它是一个强有力的开发环境,开发人员不仅能够利用它来开发各种具有友好界面的应用程序,它还可以通过PB修改数据库,400多个预定义的内置函数为开发适应各种需要的应用程序提供极大的方便,PB可以使开发人员的工作更快,成本更低,质量更高,功能更强,PB为应用开发提供了全面的支持,可以概括为以下几点: . 1、事件驱动的应用程序
2、功能强大的编程语言与函数 3、面向对象的编程
4、跨平台开发开放的数据库连接系统
第四章 系统设计与实现
4.1 主控界面设计(系统结构设计)
根据系统分析当中的运行环境需求分析,本次课程设计学生档案管理系统,采用PB进行实现,系统的结构由两层clickserver构成,应用程序端集中精力实现数据库。
图4.1 主控界面设计
1、增删记录:
OpenSheet(w_d_zsjl,ParentWindow,1,Original!) f_czrz(\"信息维护:增删记录\")
2、修改数据
OpenSheet(w_d_edit,ParentWindow,1,Original!) f_czrz(\"信息维护:修改数据\")
3、查询
OpenSheet(w_serch_q,ParentWindow,1,Original!)
4.2 登录界面设计
图4.2 登录界面设计
1、确认按钮代码:
string s_kl //口令 string s_dlsj //登陆时间 DateTime sys_datetime string s_dt //取用户名
s_yh=ddlb_1.text //全局变量 //取用户口令、级别
SELECT \"dic_yhkl\".\"kl\ \"dic_yhkl\".\"yhjb\" INTO :s_kl,
:s_yhjb //全局变量 FROM \"dic_yhkl\"
WHERE \"dic_yhkl\".\"yhm\" = :s_yh; //检查口令
If sle_2.text<>s_kl Then MessageBox(\"错误\用户口令有错,请重新输入。\") sle_2.SetFocus() Return End If
//记载登陆日期时间(记录最近用户) sys_datetime=DateTime(Today(), Now())
s_dt=String(sys_datetime, \"yyyy-mm-dd hh:mm:ss\") UPDATE \"dic_yhkl\" SET \"dlsj\" = :s_dt
WHERE \"dic_yhkl\".\"yhm\" = :s_yh ; //登记日志
f_czrz(\"进入系统\") close(parent)
2、取消按钮代码:
Halt Close //应用程序结束前执行close事件代码 RETURN //返回
3、open Integer li_SH, li_SW String s_mc Environment le_Env //获得屏幕高宽
GetEnvironment(le_Env)
li_SH=PixelsToUnits(le_Env.ScreenHeight, YPixelsToUnits!) li_SW=PixelsToUnits(le_Env.ScreenWidth, XPixelsToUnits!) //根据屏幕调整本窗口大小 this.Height=li_SH * 0.085 his.Width=li_SW * 0.7 //调整本窗口位置
This.Y=(li_SH - this.Height)*0.72 This.X=(li_SW - this.Width)/2 - 15 //定义游标(提取用户名) DECLARE yb CURSOR FOR SELECT \"dic_yhkl\".\"yhm\" FROM \"dic_yhkl\"
ORDER BY \"dic_yhkl\".\"dlsj\" ASC ;
//将各用户名添加到下拉列表框(按登录时间) ddlb_1.reset()
OPEN yb; //打开游标 FETCH yb into :s_mc ;
DO While SQLCA.SQLCode=0
ddlb_1.InsertItem(s_mc,1) ddlb_1.text=s_mc FETCH yb into :s_mc ; Loop
CLOSE yb; //关闭游标
4.3 查询功能设计
图4.3 查询功能设计
1、Open:
f_center(this) //窗口居中
integer i //循环变量(数组下标) s_tn=\"xsda\" //指定表名 tab_1.tabpage_1.lb_1.reset() //复位列表框 tab_1.tabpage_2.lb_2.reset() tab_1.tabpage_3.lb_3.reset()
tab_1.tabpage_1.sle_1.text=\"\" //清“输出字段” tab_1.tabpage_2.sle_3.text=\"\" //清“排序字段” tab_1.tabpage_3.sle_4.text=\"\" //清“检索条件” DECLARE tab_col CURSOR FOR //定义游标 SELECT \"pbcatcol\".\"pbc_tnam\ //表名 \"pbcatcol\".\"pbc_cnam\ //列名 \"pbcatcol\".\"pbc_jtfy\ //列类型 \"pbcatcol\".\"pbc_hdr\" //列标题 FROM \"pbcatcol\"
WHERE \"pbcatcol\".\"pbc_tnam\" = :s_tn ;
OPEN tab_col; //打开游标 i=1
FETCH tab_col into :s_tn,:t_c[i,1],:t_c[i,2],:t_c[i,3]; //列名、类型、标题送数组 DO While SQLCA.SQLCode=0 tab_1.tabpage_1.lb_1.AddItem(t_c[i,3]) //设置列表信息(中文) tab_1.tabpage_2.lb_2.AddItem(t_c[i,3])
tab_1.tabpage_3.lb_3.AddItem(t_c[i,3]) i++
FETCH tab_col into :s_tn,:t_c[i,1],:t_c[i,2],:t_c[i,3]; //列名、类型、标题送数组 Loop
CLOSE tab_col; //关闭游标
2、查询按钮
String s_sql,s_err,s_syn,s_sty //声明局部变量 s_sql=\"SELECT \"+tab_1.tabpage_1.sle_1.text+\" FROM \"+s_tn s_sty=\"Style(Type=Grid)\"
s_syn=SQLCA.SyntaxFromSQL(s_sql,s_sty,s_err) //形成SQL句法
dw_1.Create(s_syn) //建立数据窗口对象 dw_1.SetTransObject(SQLCA)
dw_1.Retrieve() //输出结果 dw_1.SetFilter(tab_1.tabpage_3.sle_4.text)
dw_1.Filter( ) //进行过滤 dw_1.SetSort(tab_1.tabpage_2.sle_3.text) //进行排序 dw_1.Sort()
sle_2.text=string(dw_1.RowCount()) //显示记录数
3、选中按钮
int k //循环计数器 For k=1 to lb_1.totalitems() //列表项目数 If lb_1.state(k)=1 then //该项被选中 If sle_1.text=\"\" then sle_1.text=t_c[k,1] //得到列名 Else sle_1.text=sle_1.text+\拼接列名 End If End If Next
4、退出
close(parent)
4.4 编辑功能设计
图4.4 编辑功能设计 4.5 系统用户管理设计
图4.5 系统用户管理设计
1、增添按钮: int li_RowNo
li_RowNo = dw_1.InsertRow(0) //追加一空记录 If li_RowNo=-1 Then
MessageBox(\"错误\新行的插入失败\") Else
dw_1.ScrollToRow(li_RowNo) //指向新记录 End If
2、删除按钮:
dw_1.deleteRow(0) //删除当前记录 3、保存按钮:
integer li_ReturnCode
li_ReturnCode=dw_1.Update() //保存数据
If li_ReturnCode>0 then
COMMIT USING SQLCA; //提交 f_czrz(\"系统服务:用户管理\") Else
ROLLBACK USING SQLCA; //还原 End If 4、退出按钮 close(w_user)
4.6 字典管理设计 以学生类型为例:
图4.6 字典管理设计
第五章 系统实现
数据库连接策略
1. 使用已有DSN的连接字符串进行连接(ODBC) //导入命名空间
using System.Data.Odbc;
protectedvoid Page_Load(Object sender,EventArgs e) {
//设置连接字符串
String connstr=@\"DSN=sample\"; //实例化Connection对象
OdbcConnection myConnection =new OdbcConnection(connstr); //执行Open方法打开连接 myConnection.Open();
//执行SQL语句
OdbcCommandmyCommand =new OdbcCommand(\"select*fromsampletable\将查询的结果 赋给GridView的数据源 gv.DataSource = myCommand.ExecuteReader(); //绑定GridView gv.DataBind(); //关闭连接
myConnection.Close(); }
2. 使用无DSN的连接字符串进行连接(ODBC)
//导入命名空间
using System.Data.Odbc;
protectedvoid Page_Load(Object sender,EventArgs e) {
//设置连接字符串
String connstr=@\"Driver=Microsoft Access Driver (*.mdb);Dbq=c:\\sample.mdb;\"; //实例化Connection对象
OdbcConnection myConnection =new OdbcConnection(connstr); //执行Open方法打开连接 myConnection.Open(); //执行SQL语句
OdbcCommand myCommand =new OdbcCommand(\"select * from sampletable\//将查询的结果赋给GridView的数据源
gv.DataSource = myCommand.ExecuteReader(); //绑定GridView gv.DataBind(); //关闭连接
myConnection.Close(); }
5.1 主控界面窗口
图5.1 主控界面设计
5.2 登录界面窗口
打开系统,进入登录界面。如下图所示:
图5.2 登录界面窗口
如果输入的密码正确,则进入主控界面,若输入的密码错误,则进行错误提示,显示以下界面:
图5.2 登录错误提示窗口 5.3 查询功能窗口
图5.3 查询功能窗口
5.4 编辑功能设计
图5.4 编辑功能窗口
5.5 系统用户管理窗口
图5.5 系统用户管理窗口
5.6 字典管理窗口
图5.6 字典维护窗口
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务