PB数据库应用课程设计学生信息管理系统Word格式.docx
《PB数据库应用课程设计学生信息管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《PB数据库应用课程设计学生信息管理系统Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
1.3系统运行环境
硬件平台:
cpu:
p41.8GHZ
内存:
256MB
软件平台:
数据库:
SQLSERVER2000
开发工具:
PowerBuilder9.0
2系统模块设计
2.1数据库整体设计
2.1.1数据库设计
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。
合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
同时,合理的数据库结构也将有利于程序的实现。
设计数据库时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。
2.1.2数据库需求分析
用户的需要具体体现在各种信息的提供、保存、更新和查询,这就要求数据
库结构能充分满足各种信息的输入和输出。
收集数据、数据结构以及处理数据的流程,可以为以后的设计打下基础。
图2-1系统数据流程图
2.1.3数据库逻辑结构设计
图2-2系统功能模块图
在数据库中建立表格,为了系统的安全,有必要建立一个登录页面,所以在数据库中还应建立一个密码表。
各个表的具体设计:
密码表(users):
字段名称
数据类型
备注
username
Char(10)
用户名
mypassword
Varchar(50)
用户密码
usetype
用户类型
学生信息表(student):
StudentID
学生学号
StudentName
学生姓名
nation
籍贯
sex
性别
birthday
datetime
生日
ClassID
班级编号
telephone
电话
address
家庭地址
remark
老师信息表(teacher):
teacherID
老师编号
teacherName
老师姓名
departmentID
学院编号
technicalPost
职称
homeAddr
rematk
班级信息表(class):
classID
className
班级名字
specialityID
专业编号
specialityName
专业名字
enteanceYear
入学时间
MonitorID
班长学号
课程信息表(course):
courseID
课程编号
coursename
课程名字
coursetypeID
课程类型编号
totalperiod
Tinyint
(1)
总学时
weekperiod
周学时
credithour
学分
成绩信息表(garde)
studentID
grade
分数
课程类别信息表(coursetype):
typename
类型名字
学生专业信息表(speciality):
学院信息表(department):
DepartmentID
DepatmentName
学院名字
departmentHead
院主任
2.2应用系统的对象
在应用程序对象的Open事件中输入如下代码:
//从配置参数文件中读取连接数据库所需的参数
//ProfileSMSstudent
SQLCA.DBMS="
MSSMicrosoftSQLServer"
SQLCA.Database="
SMSstudent"
SQLCA.LogPass="
88888888"
SQLCA.ServerName="
G-PC"
SQLCA.LogId="
sa"
SQLCA.AutoCommit=False
SQLCA.DBParm="
"
//连接数据库
ConnectUsingSQLCA;
IfSQLCA.SQLCODE<
>
0THEN
messagebox("
数据库连接出错"
SQLCA.SQLerrtext)
else
open(w_login)
endif
应用程序运行后直接连接数据库直至数据库连接成功.在应用程序对象的变量定义窗口中,定义全局变量stringgs_username,gs_usertype,gs_mypassword用于应用程序不同对象间参数的传递。
2.3登陆模块
2.3.1功能概述
为了系统的安全,在进入系统之前首先会出现一个登录模块,用户只有在输入正确的用户名和正确的密码之后,才能进入系统。
用户登录页面用来输入用户名和密码。
图2-3用户登陆窗口
图2-4登陆页面流程图
用户登录系统窗口的是用户和管理员进入系统的唯一通道,它是进入应用系统的喉舌,在安全保密、系统维护中占有重要的地位,登录系统在外观界面上一定要美观、友好,登录系统就是要验证当前的用户名是否与该用户密码一致,保留登录痕迹等工作。
2.3.2主要技术要点
保留登录痕迹:
根据操作局部性原理,一般情况下用户上次登录之后还会继续登录,因此在程序中可以依照人机交互界面友好性原则保留用户登录时的用户名,控件sle_1用来显示用户名,profilestring是一个函数,用来读取profile文件中一组参数,核心代码如下:
sle_1.text=profilestring("
publish.ini"
"
user"
username"
)
iftrim(sle_1.text)<
then
sle_2.setfocus()
2.4学生管理模块
2.4.1功能概述
学生管理模块可以查看学生的学号、姓名、性别、出生日期、电话等学生的基本信息,并能进行添加、修改和删除。
在新增状态可以添加新的学生基本信息。
设计时我尽可能设想各种边界条件,如记录为空,输入为空,输入出错等,当输入的信息满足这些边界条件时,将会弹出一个提示框提醒用户,以便用户能及时地做出修改。
添加的信息将全部存储到数据库中。
图2-5学生信息窗口
2.4.2主要技术要点
(1)显示数据窗口选中的数据到相应的编辑框
由于数据窗口是不允许数据进行直接修改,因此首先选中数据双击鼠标到相应的编辑框,再进行修改。
核心代码如下ifrow>
0then
sle_1.text=dw_1.object.sid[row]
……
gb_2.text="
修改"
(2)数据库插入、修改及删除数据
运用数据库的INSERT、UPDATE及DELETE子句进行操作。
首先通过dw_1.GetItemString、dw_1.GetItemNumber等函数读出数据窗口对象一一对应放置数据库中位置。
核心代码如下:
selectstudentIDinto:
li_idfromstudent
wherestudentID=:
li_id;
ifgb_2.text="
新增"
ifSQLCA.SQLCODE=0then
messagebox("
提示"
学号重复"
endif
INSERTINTOstudent(studentID,……)
VALUES(:
sle_1.text,……);
else
//修改信息
lyesno=messagebox('
提示'
'
是否修改当前信息?
'
question!
yesno!
iflyesno=2thenreturn
li_id=trim(sle_1.text);
UPDATEstudent
SETstudentName=:
sle_2.text,……,
WHEREstudentID=:
//删除信息
lyesno=messagebox('
提示:
删除下列信息?
sle_1.text+"
:
+sle_2.text,question!
iflyesno=2thenreturn
DELETEFROMstudent
WHEREstudentID=:
sle_1.text;
(3)学生信息优化过滤条件查询
过滤条件是通过and逻辑关系进行连接的,那么会存在这样的情况,第一个过滤之前是没有其他的条件与其进行连接的,不应该存在and逻辑关系,主要方法是对ls_filter的前面4个字符进行判断,如果是and则去掉即可。
//检索数据
dw_1.SetTransObject(sqlca)
ls_filter="
1=1"
//学生检索
ifsle_11.text<
thenls_filter=ls_filter+"
andsid='
+sle_11.text+"
//过滤数据
dw_1.setfilter(ls_filter)
dw_1.filter()
2.5教师管理模块
2.5.1功能概述
教师管理模块可以查看教师的编号、姓名、性别等基本信息并能进行添加、修改和删除。
图2-6教师信息窗口
2.5.2主要技术要点
(1)数据库插入、修改及删除数据
selectteacherIDinto:
li_idfromTeacher
whereteacherID=:
ifSQLCA.SQLCODE=0then
教师编号重复"
)endif
INSERTINTOTeacher(teacherID,……)
VALUES(:
sle_1.text,……);
li_id=trim(sle_1.text);
UPDATETeacher
SETteacherName=:
sle_2.text,……
WHEREteacherID=:
//删除信息
DELETEFROMTeacher
WHEREteacherID=:
(2)教师信息优化过滤条件查询
同学生查询技术一样,核心代码:
ifsle_12.text<
andteachername='
+sle_12.text+"
2.6院系资料
2.6.1功能概述
点击菜单中的院系信息,在该窗口中我们可以院系信息进行修改和删除。
图2-7院系资料窗口
2.6.2主要技术要点
实现数据窗口对象的动态修改,核心代码如下:
//保存
dw_1.AcceptText()
ifdw_1.ModifiedCount()=0anddw_1.DeletedCount()=0then
MessageBox("
提示信息"
尚无增加、删除或修改,无须保存!
Returnendif
ifdw_1.Update()=1then
Commit;
MessageBox("
保存成功!
)else
RollBack;
保存失败!
//增加
longn_row
n_row=dw_1.insertrow(0)
dw_1.scrolltorow(n_row)
dw_1.setrow(n_row)
dw_1.setcolumn
(1)
dw_1.setfocus()
//删除
dw_1.deleterow(0)
n_row=dw_1.getrow()
dw_1.selectrow(1,false)
dw_1.selectrow(n_row,true)