一个小型管理系统的pb实现

 

一、用户需求分析

 

该实习完成的是一个简单的学生学籍管理系统,功能比较简单,要在实际中应用还需进一步的改进和功能的进一步的扩充,它实现的功能如下

 

1、完成数据的录入和修改,并提交数据库保存。其中的主要数据包括学生的基本信息以及操作员管理等。

 

2、实现学生信息的简单查询、高级查询及人数的统计。

 

3、信息具有一定的安全性。对操作员要有口令管理

 

使用的开发工具:PowerBuilder9.0

 

二、设计数据库

 

在下面的表的结构的描述中 ,遵循以下规则:

表的中文含义(表名),如 “学生档案表(student)”。

列的中文含义:列名(数据类型及宽度)[能否为空] [pk]

如“学号:student_id(C12) [n][pk]”表示该列的中文含义是“学号,列名是 “student_id” 数据类型是“char”,宽度是12,不能为空,[pk]说明该列作为主键。各个表的结构如下

1、学生档案表(student

   学号:student_id(C12) [n] [pk]

   姓名:student_name(C12) [y]

   性别:sex(C2) [y]

   生日:birthdaydate[y]

   民族:nationC10[y]

   政治面貌:background C10[y]

   学院:department_name C40[y]

   专业:major_name (C40) [y]

   班级:class C4[y]

   籍贯:hometown  (C20) [y]

   联系地址:address (C30) [y]

   电话:telephone (C20) [y]

   备注:remark(C30) [y]

2、操作员表(operator

   编号:operator_id C20[n] [pk]

   姓名:operator_name  (C20) [y]

   密码:password  (C10) [y]

 

然后在PowerBuilder9.0中创建ASA本地数据库,操作步骤如下

1、 从“Tools”菜单中选择“Database Profile…”菜单项,系统显示“Database Profiles”对话框,单击“ODBC”项目中“Utilities”图标左边的“+”。

2、 双击“Utilities”项目下的“Create ASA Database”项 ,系统显示“Create ASA Database”对话框。

3、配置数据库的属性。用户名和密码都取默认值,数据库名为student

4、配置好其他属性后单击OK按钮。

这样就完成了ASA本地数据库的创建。然后在student数据库重创建上面的表。完成了数据库及表的创建,然后连接到数据库,这样子数据库的连接参数都保存在注册表中。以后就可以使用了。

 

三、系统设计

 

1、创建应用库和应用对象

   工作区名为student.dbw

   应用库名为student.dbl

   应用对象名为 student,注释名为学生学籍管理系统

   对应用对象的open事件进行编程,包括:打开应用程序的封面窗口,设置数据库的连接参数并连接数据库,然后打开登陆窗口。我只使用了一个数据库,用的数据库事务对象是默认的SQLCA

   Open事件中的程序代码:

 

open(m_welcome)//打开应用程序启动封面窗口

// Profile student

SQLCA.DBMS = "ODBC"

SQLCA.AutoCommit = False

SQLCA.DBParm = "ConnectString='DSN=student;UID=;PWD='"

connect ;

if sqlca.sqlcode<>0 then

messagebox("提示","数据库连接错误,请检查后重试!",stopsign!)

close(m_welcome)

else

messagebox("提示","数据库已经连接上,点击确定进入",information!)

close(m_welcome)

open(w_login)

end if

 

2、创建全局变量

string  gs_password//操作员的口令

string  gs_operator_id//操作员的编号

3、创建菜单

  

菜单名称为m_menu ,各菜单项及相应的Clicked事件中的代码如下:

   学生档案管理 (m_file

       更新(m_input):open(w_input)

       学号查询(m_query):    open(w_query)

w_query.sle_query_id.setfocus()

       高级查询(m_querymore):open(w_querymore)

   系统设置(m_system

       口令更改(m_chagepassword):open(w_changepassword)

       重新登陆(m_relogin):      w_main.visible=false

open(w_login)

       关于(m_about

退出(m_quit):disconnect;halt

4、创建数据窗口

   1d_student:学生档案数据窗口。

      创建选项:Grid

显示风格;Quick Select

数据源 student表,选择所有列;

student_id排序;

       2d_studentshort:学生学号显示窗口。

      创建选项:Grid

显示风格;Quick Select

数据源 student表,选择学号属性列;

student_id排序;

  

5、创建窗口并在窗口中放置所需的控件

   1w_welcome:封面窗口。

      创建选项    Title=“欢迎(欢迎使用学生学籍管理系统测试版)”

                  WindowType=popup

                  st_welcome.Text=“欢迎使用学生档案管理系统”

st_connect.Text=“正在连接数据库...

       2w_login  :登陆窗口。

         创建选项   Title=“登录”

WindowType=response!”

                Icon= Window!

  st_remind.Text =“请在下面填入您的用户名和口令”

st_id.Text =“用户名”

sle_id.Text =“”

st_password.Text =“口令”

sle_password.Text =“”

sle_password.Password =TRUE

p_login= D:/学生学籍管理系统/login.GIF

cb_ok.Text =“确定”

cb_cancel.Text =“取消”

 

“确定”按钮的Clicked 事件的代码为

 

string ls_operator_id

string ls_getpassword,ls_password

ls_operator_id=sle_id.Text

ls_operator_id=trim(ls_operator_id)

ls_getpassword=sle_password.Text

select operator.password

into :ls_password

from operator

where operator.operator_id=:ls_operator_id ;

if sqlca.sqlcode <> 0 then

  messagebox("提示","该用户不存在")

  sle_id.Text="" 

  sle_password.Text=""   

 sle_id.setfocus()

return

end if

if ls_password <> ls_getpassword then

  messagebox("提示","口令不正确")

  sle_password.Text=""

  sle_password.setfocus()

  return

end if

gs_operator_id = ls_operator_id

gs_password = ls_password

close(w_login)

open(w_main)

w_main.visible=true

“退出”按钮的Clicked事件的代码为:

disconnect;

halt

  3、w_main:主窗口。

   创建选项:

          Title=“学生档案管理系统”

WindowType=main!

MenuName=m_menu

st_name.Text =“数据库系统概论实习”

st_vertion.Text =“学生学籍管理系统测试版”

st_me.Text =“欢迎您的测试”

p_main= D:/学生学籍管理系统/main.jpg

   4w_changepassword: 更改口令窗口。

创建选项:

Title=“更改口令”

WindowType=response!”

p_changepassword= D:/学生学籍管理系统/login.GIF

 st_oldpassword.Text =“原口令”

sle_oldpassword.Text =“”

 st_newpassword.Text =“新口令”

sle_newpassword.Text =“”

st_newpassword_sure.Text =“确认”

sle_newpassword_sure.Text =“”

cb_ok.Text =“更改”

cb_cancel.Text =“取消”

“更改”按钮的Clicked 事件的代码为

string ls_oldpassword

string ls_newpassword

ls_oldpassword=sle_oldpassword.Text

if ls_oldpassword <> gs_password then

   messagebox("提示","口令不正确!")

    return

end if

if sle_newpassword.Text <> sle_newpassword_sure.Text then

   messagebox("提示","两次输入口令不一致!")

return

end if

ls_newpassword = sle_newpassword.Text

update operator

set password = :ls_newpassword

where operator_id = :gs_operator_id ;

messagebox("提示","修改成功!")

close(w_changepassword)

“取消”按钮的Clicked 事件的代码为

close(w_changepassword)

5w_input:更新窗口。

 

创建选项:

Title=“学生基本资料”

WindowType=response!

dw_student.DataObject=d_student

cb_add.Text =“增加”

cb_delete.Text =“删除”

 cb_save.Text =“保存”

cb_cancel.Text =“退出”

st_hello.Text = *修改资料后要记得保存哦…”

Open事件中的程序代码:

 

dw_student.setTransObject(SQLCA)

dw_student.Retrieve()

“增加” 按钮的Clicked事件的代码为:

open(w_add)

“删除” 按钮的Clicked事件的代码为:

 

int li_ret

li_ret=MessageBox("提示","确实要删除吗?如果确定删除后请保存结果",exclamation!,yesno!)

if(li_ret = 1) then

  dw_student.DeleteRow(0)

end if

“保存” 按钮的Clicked事件的代码为:

if dw_student.update()=1 then

commit;

   messagebox("提示","保存成功!")

else

rollback;

messagebox("提示","保存失败!")

end if

“退出” 按钮的Clicked事件的代码为:

close(w_input)

 

6m_add: 添加一个学生记录窗口。

   创建选项:

Title=“添加一个学生记录”

   WindowType=response!

   st_input.Text =“请输入学生信息”

st_add_id.Text =“学号”

sle_add_id.Text=“”

st_add_name.Text =“姓名”

sle_add_name.Text=“”

st_add_sex.Text =“性别”

ddlb_add_sex.text=“”,Items为“男”“女”

st_ad_birthday.Text =“出生日期”

sle_add_birthday.Text=“”

st_add_nation.Text =“民族”

sle_add_nation.Text=“”

st_add_background.Text =“政治面貌”

sle_add_background.Text=“”

st_add_departmen.Text =“学院”

sle_add_department.Text=“”

st_add_major.Text =“专业”

sle_add_major.Text=“”

st_add_class.Text =“班级”

sle_add_class.Text=“”

st_add_hometown.Text =“籍贯”

sle_add_hometown.Text=“”

st_add_address=.Text “联系地址”

sle_add_address.Text=“”

st_add_telephone.Text =“电话”

sle_add_telephone.Text=“”

st_add_remark.Text =“备注”

sle_add_remark.Text=“”

cb_add_ok.Text =“保存”

cb_add_cancel.Text =“退出”

Open事件中的程序代码:

w_input.visible=false

“保存” 按钮的Clicked事件的代码为:

long l

string ls_student_id

string ls_student_name

string ls_sex

date ls_birthday

string ls_nation

string ls_background

string ls_department_name

string ls_major_name

string ls_class

string ls_hometown

string ls_address

string ls_telephone

string ls_remark

ls_student_id=sle_add_id.Text

ls_student_name=sle_add_name.Text

ls_sex=ddlb_add_sex.text

ls_birthday=date(sle_add_birthday.Text)

 

ls_nation=sle_add_nation.Text

ls_background=sle_add_background.Text

ls_department_name=sle_add_department.Text

ls_major_name=sle_add_major.Text

ls_class=sle_add_class.Text

ls_hometown=sle_add_hometown.Text

ls_address=sle_add_address.Text

ls_telephone=sle_add_telephone.Text

ls_remark=sle_add_remark.Text

if ls_student_id = "" then

messagebox("提示","学号不能为空!",stopsign!)

   return

end if

w_input.dw_student.setfilter("student_id='"+ls_student_id+"'")

w_input.dw_student.filter()

l=w_input.dw_student.retrieve()

if l <> 0 then

  messagebox("提示","该学号已经存在!",stopsign!)

  return

end if

insert into student

values( :ls_student_id,

        :ls_student_name,

        :ls_sex,

        :ls_birthday,

        :ls_nation,

        :ls_background,

        :ls_department_name,

        :ls_major_name,

        :ls_class,

        :ls_hometown,

        :ls_address,

        :ls_telephone,

        :ls_remark) ;

if sqlca.sqlcode <> 0 then

rollback;

messagebox("提示","保存失败!",stopsign!)

   return

end if

commit;

messagebox("提示","保存成功!")

w_input.dw_student.setfilter("")

w_input.dw_student.filter()

w_input.dw_student.retrieve()

 

//清空各个控件

sle_add_id.Text=""

sle_add_name.Text=""

ddlb_add_sex.text=""

sle_add_birthday.Text=""

sle_add_nation.Text=""

sle_add_background.Text=""

sle_add_department.Text=""

sle_add_major.Text=""

sle_add_class.Text=""

sle_add_hometown.Text=""

sle_add_address.Text=""

sle_add_telephone.Text=""

sle_add_remark.Text=""

sle_add_id.setfocus()

“退出” 按钮的Clicked事件的代码为:

close(w_add)

w_input.visible=true

7w_query: 按学号查询的窗口。

 

   创建选项:

Title=“查询”

   WindowType=response!

st_student_id.Text =“学号”

sle_student_id.Text=“”

st_student_name.Text =“姓名”

sle_student_name.Text=“”

st_sex.Text =“性别”

sle_sex.text=“”

st__birthday.Text =“出生日期”

sle_birthday.Text=“”

st_nation.Text =“民族”

sle_nation.Text=“”

st_background.Text =“政治面貌”

sle_background.Text=“”

st_departmen.Text =“学院”

sle_department.Text=“”

st_major.Text =“专业”

sle_major.Text=“”

st_class.Text =“班级”

sle_class.Text=“”

st_hometown.Text =“籍贯”

sle_hometown.Text=“”

st_address.Text =“联系地址”

sle_address.Text=“”

st_telephone.Text =“电话”

sle_telephone.Text=“”

st_remark.Text =“备注”

sle_remark.Text=“”

   dw_student_short.DataObject= d_student_short

   st_suery_id.Text =“请输入学号”

sle_query_id.Text =“”

 cb_query.Text =“查询”

cb_reset.Text =“清空”

cb_cancel.Text =“退出”

Open事件中的程序代码:

dw_student_short.setTransObject(SQLCA)

dw_student_short.Retrieve()

“查询” 按钮的Clicked事件的代码为:

string ls_query_id

string ls_student_name

string ls_sex

string ls_birthday

string ls_nation

string ls_background

string ls_department_name

string ls_major_name

string ls_class

string ls_hometown

string ls_address

string ls_telephone

string ls_remark

ls_query_id=sle_query_id.Text

 

select student_name,

       sex,

      birthday,

      nation,

      background,

      department_name,

      major_name,

      class,

      hometown,

      address,

      telephone,

      remark

into  :ls_student_name,

      :ls_sex,

      :ls_birthday,

      :ls_nation,

      :ls_background,

      :ls_department_name,

      :ls_major_name,

      :ls_class,

      :ls_hometown,

      :ls_address,

      :ls_telephone,

      :ls_remark

from   student

where  student_id = :ls_query_id ;

if SQLCA.sqlcode <> 0 then

messagebox("提示","没有找到,请核查学号后重新输入!",stopsign!)

sle_query_id.Text=""

return

end if

sle_student_id.Text=ls_query_id

sle_student_name.Text=ls_student_name

sle_sex.Text=ls_sex

sle_birthday.Text=ls_birthday

sle_nation.Text=ls_nation

sle_background.Text=ls_background

sle_department_name.Text=ls_department_name

sle_major.Text=ls_major_name

sle_class.Text=ls_class

sle_hometown.Text=ls_hometown

sle_address.Text=ls_address

sle_telephone.Text=ls_telephone

sle_remark.Text=ls_remark

messagebox("提示","查询完毕",information!)

sle_query_id.Text=""

“清空” 按钮的Clicked事件的代码为:

sle_student_id.Text=""

sle_student_name.Text=""

sle_sex.Text=""

sle_birthday.Text=""

sle_nation.Text=""

sle_background.Text=""

sle_department_name.Text=""

sle_major.Text=""

sle_class.Text=""

sle_hometown.Text=""

sle_address.Text=""

sle_telephone.Text=""

sle_remark.Text=""

sle_query_id.Text=""

“退出” 按钮的Clicked事件的代码为:

close(parent)

 8w_querymore:高级查询的窗口。

 

   创建选项:

Title=“分类查询”

WindowType=response!

dw_querymore .DataObject=d_student

st_name.Text =“姓名”

sle_name.Text =“”

st_sex.Text =“性别”

ddlb_sex.Text =“” Items为“男”“女”

st_department_query.Text =“学院”Items为“计算机学院”“电信学院”“文学院 ”等等

ddlb_department.Text =“”

cb_query.Text =“开始查询”

cb_quit.Text =“退出查询”

st_num.Text =“”

Open事件中的程序代码:

dw_querymore.setTransObject(SQLCA)

dw_querymore.Retrieve()

“开始查询” 按钮的Clicked事件的代码为

string ls_department

string ls_name

string ls_sex

//查询条件

string ls_condition1

string ls_condition2

string ls_condition3

int num

//第一个条件 查询的学院

ls_department=trim(ddlb_department.Text)

ls_condition1="department_name='"+ls_department+"'"

if ls_department = "" then

  ls_condition1=""

end if

//第二个条件 查询的姓名

ls_name=trim(sle_name.Text)

ls_condition2="student_name like '%"+ls_name+"%'"

if ls_name ="" then

  ls_condition2=""

end if

//第三个条件 查询的性别

ls_sex=trim(ddlb_sex.Text)

ls_condition3="sex='"+ls_sex+"'"

if ls_sex = "" then

  ls_condition3=""

end if

// 三个条件都有的情况

if ls_condition1 <> "" and ls_condition2 <> "" and ls_condition3 <> "" then

  ls_condition1=ls_condition1+" and "

   ls_condition3=" and "+ls_condition3

end if

//两个条件的情况

if ls_condition1 = "" and ls_condition2 <> "" and ls_condition3 <> "" then

   ls_condition2=ls_condition2+" and "

end if

if ls_condition1 <> "" and ls_condition2 = "" and ls_condition3 <> "" then

  ls_condition1=ls_condition1+" and "

end if

if ls_condition1 <> "" and ls_condition2 <> "" and ls_condition3 = "" then

  ls_condition1=ls_condition1+" and "

end if

//过滤查询

dw_querymore.setfilter(ls_condition1+ls_condition2+ls_condition3)

dw_querymore.filter()

num=dw_querymore.retrieve()

//统计满足条件的人数

st_num.Text="查询完毕,满足条件的学生共有"+string(num)+""

“退出查询” 按钮的Clicked事件的代码为

close(parent)

 

四、小结

       通过这个小应用系统的学习,掌握数据库系统的基本原理,初步尝试用PowerBuilder开发数据库的技术。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                     

  

 

 

 

 

 

 

数据库系统概论实习报告

—学生学籍管理系统

      

 

 

                                       

 

 

 

 

学院 计算机学院

学号 200232530020

姓名 成肖

                                  

 

 

 

发布了33 篇原创文章 · 获赞 3 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章