资源描述
课 程 设 计 报 告
课程名称 企业资源计划
课题名称 高校学生成绩管理信息系统
专 业 信息管理与信息系统
班 级
学 号
姓 名
指导教师
2016年 11 月 18 日
湖南工程学院
课 程 设 计 任 务 书
课程名称 企业资源计划
课 题 高校学生成绩管理系统
专业班级 信息管理与信息系统1301班
学生姓名
学 号
指导老师
审 批
任务书下达日期 2016 年 11 月 18 日
任务完成日期 2016 年 12 月 31 日
一、设计内容与设计要求
1.设计内容:
高校学生成绩管理信息系统
信管1301班:
1~7号:学生表、系部表、专业表、班级表、课程代码表、教师代码表等基础数据的增、删、改。
8~14号:正常成绩录入。
15~21号:查询某学生某学期成绩,查询某学生全部学期成绩。
22~30号:打印班级花名册、班级成绩综合表。
图书馆管理系统
信管1302班:
1~6号:图书编目、借阅证管理:对图书信息、读者信息进行增加、删除、修改、查询等维护操作,可以使用excel表批量导入读者信息。
7~13号:借还管理:实现图书的流通,包括借还、还书、续借、损失归还、丢失处理等操作,对于异常情况自动弹出罚款窗口,登记图书损坏、丢失等异常情况及罚款金额;借还中输入读者借阅证可查询到读者所在部门、可借阅图书、借阅期限、当前所借图书等信息。
14~19号:图书查询:根据isbn、条形码、姓名、读者证号、ic卡号、正题名、馆藏地、状态等查询当前图书馆所有图书的外借、在库、丢失、损坏等信息,如果是外借的图书可现实读者的信息以及借出时间和归还时间。结果可导出excel表。
20~26号:读者借阅统计:按部门、条形码、借阅证、ic卡号、姓名、正题名、索书号、借书日期、馆藏地等条件查询读者的历史借阅情况,可导出excel表。
27~30号:图书借阅统计:按条形码、分类号、正题名、借书日期、 馆藏地等查询图书的借阅情况,包括每册书的借阅次数、每种书的借阅次数以及每个分类号的借阅次数,可导出excel表。
2.设计要求:
(1)本系统可采用C/S、B/S模式进行开发,采用powerbuilder 、C#、JAVA等语言进行界面及程序设计,后端采用SQL Server 2000数据库系统。
(2)论述课题的性质、内容以及本次课程设计的目的和要求。说明系统对计算机软、硬件环境的基本要求,对所采用的语言和SQL Server数据库管理系统和C/S模式简要的说明。
(3)总体设计方案的分析、比较和论证。
(4)数据库的建立,数据库中表的结构,各表中关键字的设置,表与表之间的关系。
(5)应用程序各功能模块和报表的设计。
(6)编写代码、上机输入、调试、修改并运行通过。
(7)编写课程设计说明书。说明书是总结性的技术文件,应全面叙述整个设计的内容及过程(可参考上述6条),发现的问题及解决方法等。
(9)说明书应采用A4纸张,文字说明不少于5000字。
二、进度安排
第十七周:星期一 下午2:00——6:00,星期二 下午2:00——6:00
星期三 下午2:00——6:00
第十八周:星期一 下午2:00——6:00,星期二 下午2:00——6:00
星期三 下午2:00——6:00
附:
课程设计报告装订顺序:封面、任务书、目录、正文、评分。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;
目 录
1、系统总体分析 1
1.1 系统功能分析 1
1.2 系统功能模块设计 1
2、数据库设计 2
2.1 数据库需求分析 2
2.2 数据库概念设计 3
2.3数据库逻辑结构设计 4
2.4 程序设计连接 5
3、系统详细设计 2
3.1 Workspace的创建 2
3.2应用程序的创建 3
3.2.1 新建应用对象 4
3.2.2 应用程序的程序代码 4
3.3 建立应用程序主窗口 5
3.4 菜单的设计 6
3.5 系统模块的设计 8
3.6 数据窗口建立 10
3.6.1 d_sinfo_grid数据窗口的建立 10
3.6.2 d_sinfo数据窗体的建立 12
3.7 学籍管理 13
3.7.1. 添加学籍信息 13
3.7.2 修改学籍信息 16
3.7.3 查询学籍信息 18
4、系统的实现 20
5、心得体会 23
6、评分表 24
1、系统总体分析
1.1 系统功能分析
系统开发的总体任务是实现学生信息关系的系统化、规范化和自动化。
系统功能分析是在系统开发的总体任务的基础上完成的。该学生成绩管理信息系统需要完成的功能主要有:
l 有关学籍等信息的输入,包括学生基本信息、所在班级、所学课程和成绩等。
l 学生信息的查询,包括学生基本信息、所在班级、已学课程和成绩等。
l 学生信息的修改。
l 班级管理信息的输入,包括班级设置、年级信息等。
l 班级管理信息的查询。
l 班级管理信息的修改。
l 学校基本课程信息的输入。
l 基本课程信息的修改。
l 学生课程的设置和修改。
l 学生成绩信息的输入。
l 学生成绩信息的修改。
l 学生成绩信息的查询。
l 学生成绩信息的统计。
1.2 系统功能模块设计
对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如图1-1所示的系统功能模块图。
用户管理
学生信息管理系统
成绩信息管理
课程信息管理
密码管理
班级信息管理
学籍信息管理
成绩信息查询
课程信息添加
课程信息修改
年级课程设置
成绩信息修改
成绩信息添加
班级信息修改
班级信息添加
学籍信息查询
学籍信息修改
学籍信息添加
系统管理
图1-1 系统功能模块图
2、数据库设计
数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建议中的核心技术。由于数据库应用系统的复杂性,为了支持相关程序运行,数据库设计就变得异常复杂,因此最佳设计不可能一蹴而就,而只能是一种“反复探寻,逐步求精”的过程,也就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。
2.1 数据库需求分析
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入。
针对一般学生管理信息系统的需求,通过对学生学习过程的内容和数据流程分析,设计如下面所示的数据项和数据结构:
l 学生基本信息:包括的数据项有:学生学号、学生姓名、性别、出生日期、班号、地址等。
l 班级信息:包括的数据项有:班级号、班级名、所属系部等。
l 课程基本信息:包括的数据项有:课程号、课程名称、课程类别等。
l 课程设置信息:包括的数据项有:年级信息、所学课程等。
l 学生成绩信息:包括的数据项有:考试编号、所在班号、学生学号、学生姓名、所学课程、考试分数等。
2.2 数据库概念设计
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及他们之间的关系,为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。
根据上面的设计规划出的实体有:学生实体、班级实体、年纪实体、课程实体。各个实体具体的描述E-R图如下。
学生注册
学籍管理
基本信息插入
成绩管理
班级设置
班级管理
课程设置
课程信息
成绩信息输入
班级课程设置
图2-1 学生管理信息系统数据流程图
2.3数据库逻辑结构设计
将数据库概念结构转化为SQL Server 2000数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。
表2-1为学生基本信息表。
列 名
数据类型
可否为空
说 明
student_no
INT(4)
NOT NULL
学生学号(主键)
student_name
CHAR(10)
NULL
学生姓名
student_sex
CHAR(10)
NULL
学生性别
born_date
DATETIME(8)
NULL
出生日期
class_no
INT(4)
NULL
班级号
pol_affiliation
CHAR(10)
NULL
政治面貌
表2-1 student_info 学生基本信息表
表2-2为教师信息表。
列名
数据类型
可否为空
说明
teacher_no
INT(4)
NOT NULL
教师号
teacher_name
CHAR(10)
NULL
教师姓名
teacher_dgree
CHAR(10)
NULL
学历
teacher_position
CHAR(10)
NULL
职称
teacher_unit
CHAR(10)
NULL
单位
表2-2 teacher _info 教师基本信息表
表2-3为课程信息表。
列名
数据类型
可否为空
说明
course_no
INT(4)
NOT NULL
课程号
course_name
CHAR(10)
NULL
课程名
表2-3 coure_info课程信息表
表2-4为课程设置数据表
列名
数据类型
可否为空
说明
course_no
INT(4)
NOT NULL
课程号
course_name
CHAR(10)
NULL
课程名
course_kind
CHAR(10)
NULL
类别
learn_time
INT(4)
NULL
总学时
teacher_no
INT(4)
NULL
教师号
teacher_name
CHAR(10)
NULL
教师姓名
term
CHAR(10)
NULL
学期
class_no
INT(4)
NULL
班级号
record
FLOAT(8)
NULL
学分
表2-4 course_set 课程设置数据表
表2-5为班级信息表
列名
数据类型
可否为空
说明
class_no
INT(4)
NOT NULL
班级号
class_name
CHAR(10)
NULL
班级名
academy
CHAR(10)
NULL
所属系部
表2-5 class_info班级信息表
表2-6为成绩信息表
列名
数据类型
可否为空
说明
student_no
INT(4)
NOT NULL
学号
student_name
CHAR(10)
NULL
姓名
course_no
INT(4)
NULL
课程号
course_name
CHAR(10)
NULL
课程名
term
CHAR(10)
NULL
学期
result
FLOAT(8)
NULL
成绩
record
FLOAT(8)
NULL
学分
表2-6 result_info成绩信息表
表2-7为用户表
列名
数据类型
可否为空
说明
User_id
CHAR(10)
NOT NULL
用户名称(主键)
User_pwd
CHAR(10)
NULL
用户密码
表2-7 系统用户表
2.4 程序设计连接
在程序设计中可以使用“Database Profile”对话框完成配置和连接,没有定义数据库配置时,需要创建新的数据库配置,步骤如下:
1)单击图标,出现“Database Profile”对话框,如图2-2所示。在其中选择要配置的“MSS Microsoft SQL Sever”。
2)单击“New”按钮,打开如图2-3所示的“Database Profile Setup”对话框。在“Profile Name”中输入该Profile的名称Student,在“Login ID”中输入连接到数据库的用户名,在“Password”中输入该用户的连接口令。
23
图2-2 “Database Profile”对话框
图2-3“Database Profile Setup”对话框
3)单击“OK”按钮,返回到“Database Profile”对话框,这时就增加了刚刚配置的Database Profile,如图2-4所示。选中该配置,单击该对话框中的“Connect”按钮,系统将其连接到数据库上。
图2-4 “Database Profile Setup”对话框
3、系统详细设计
3.1 Workspace的创建
创建Powerbuilder 9.0的程序,首先就需要新建WorkSpace对象,具体实现的过程如下:
1)单击打开“New”对话框,然后在“WorkSpace”标签页选择workspace,单击OK按钮,如图3-1所示。
图3-1 New对话框
2)出现如图3-2 所示的对话框,在其中输入新建的workspace的名字。单击保存按钮,Powerbuilder 9.0的界面左上方就多了一个新建的workspace。
图3-2 输入WorkSpace名称
3)Powerbuilder 9.0左边框中列出了新建的WorkSpace对象,如图3-3所示。
图3-3 WorkSpace对象
3.2应用程序的创建
Powerbuilder是个面向对象的开发环境,用它开发的应用程序以对象和事件驱动为基本特征。作为Powerbuilder的对象之一,应用程序对象也有一组事件,当用户运行程序时,首先触发应用程序对象的Open事件,在这个事件的事件处理程序中可以设置应用的初始状态,装入其他对象、连接数据库等。当用户终止应用程序时,应用程序对象的Close事件被触发,在这个事件的事件处理程序中完成必要的系统清理工作。当程序运行过程中发生严重错误时,应用程序对象SystemError事件被触发,这时可以报告错误类型和性质,以便及时排除错误。由此可见,应用程序对象对开发完美的 Powerbuilder应用程序至关重要。
3.2.1 新建应用对象
单击菜单“File|New”或者工具栏上的按钮弹出“New”对话框,如图3-4所示。选择“Target”标签页中的“Application”应用程序对象图标,单击“OK”按钮,在弹出的如图3-5所示对话框中,输入应用程序对象的名字,以及库文件地址和目标文件地址。单击“Finish”按钮,完成应用程序对象的创建。
图3-4 生成应用程序对象框架的“向导”对话框 图3-5 生成应用程序对象对话框
3.2.2 应用程序的程序代码
应用程序对象的事件一共6个,分别是Open、Close、Idel、SystemError、ConnectionEnd事件。
其中Open事件必须编写事件处理程序,否则整个应用程序就会什么也不做就结束了。应用程序对象的Open事件在启动应用程序时发生,且只发生一次。对所有应用程序来说,都必须对该事件编程,否则运行应用程序时系统将出现一个警告对话框,提醒必须对应用程序对象的Open事件编程。
l 完成初始化工作;
l 利用INI文件设置某些属性,或初始化一个事物对象;
l 查询环境,保证运行应用程序所需的所有资源都可以使用;
l 连接要访问的数据库;
l 打开应用程序的第一个窗口;
在本应用程序对象的Open事件中输入如下的程序代码:
// Profile student
SQLCA.DBMS = "MSS Microsoft SQL Server"
SQLCA.Database = "student"
SQLCA.LogPass = ""
SQLCA.LogId = "lx"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
connect using sqlca; //连接事务对象
open(w_main) //打开登录窗口
应用程序运行后第一个出现的窗口是上面语句打开的w_main窗口。在应用程序对象的变量定义窗口中定义学生管理信息系统的4个全局变量,如图3-6所示。
图3-6 定义全局变量
3.3 建立应用程序主窗口
系统应用程序的主要功能都是在主窗口w_main及在其下打开的众多窗口中完成的。主窗口的界面如图3-7所示。
图3-7 主窗口
3.4 菜单的设计
在菜单画面中设计应用程序主窗口所连接的菜单d_mian。该菜单的结构如图3-8所示。
图3-8 菜单的结构
各个菜单中的程序代码如下:
1) “系统”菜单下“登录”子菜单的Clicked事件程序代码:
open(w_login)
其功能是打开主窗口w_login。
2) “系统”菜单下“退出”子菜单的Clicked事件程序代码:
close(w_main)
其功能是关闭主窗口w_main。
3) “学籍管理”菜单下“添加学籍信息”子菜单的Clicked事件程序代码:
open(w_add,w_main)
其功能是在主窗口w_main上打开窗口w_add。
4) “学籍管理”菜单下“查询学籍信息”子菜单的Clicked事件程序代码:
open(w_search,w_main)
其功能是在主窗口w_main上打开窗口w_search。
5) “学籍管理”菜单下“修改学籍信息”子菜单的Clicked事件程序代码:
open(w_sinfo_grid,w_main)
其功能是在主窗口w_main上打开窗口w_sinfo_grid。
6) “班级管理”菜单下“添加班级信息”子菜单的Clicked事件程序代码:
open(w_class_add,w_main)
7) “班级管理”菜单下“查询班级信息”子菜单的Clicked事件程序代码:
open(w_class_lookfor,w_main)
8) “班级管理”菜单下“修改班级信息”子菜单的Clicked事件程序代码:
open(w_class_change,w_main)
3.5 系统模块的设计
登录窗口的设计
登录窗口如图3-9所示。
图3-9 登录窗口
该窗口中放置了 2个静态文本框Static Text 控件,分别显示“帐号”和“密码”。放置2个单行编辑框Single line Edit控件,一个提供用户输入登录的用户(sle_user),另一个供用户输入密码。这4个控件放置在一个GroupBox控件上。另外在窗口的下方放置2个按钮控件,分别是“登录”和“取消”。
在w_login窗口的Open事件中输入如下的程序代码:
int G_input_time=0
environment student_env
int student_scrwidth,student_scrheight
setredraw(false)
getenvironment(student_env)
student_scrwidth=pixelstounits(student_env.screenwidth,xpixelstounits!)
student_scrheight=pixelstounits(student_env.screenheight,xpixelstounits!)
move((student_scrwidth - this.width)/2,(student_scrheight - this.height)/2)
setredraw(true)
p_1.picturename="2.GIF"
“登录”按钮控件的Click事件用于比较sle_1和sle_2控件中输入的用户名和密码与数据库中保存的是否一致。如果一致,则打开应用程序主窗口,并关闭登录窗口;如果不一致,在3次以内可重新输入,超过3次程序结束。程序代码如下:
int G_INPUT_TIME=0
string G_USER,G_PWD,correct_PSWD
if sle_1.text="" then
messagebox("PayAttention!","用户名不能为空")
sle_1.setfocus()
elseif sle_2.text="" then
messagebox("PayAttention!","密码不能为空")
sle_2.setfocus()
else
G_INPUT_TIME=G_INPUT_TIME+1
G_USER=sle_1.text
G_PWD=sle_2.text
SELECT user_pwd INTO: correct_PSWD FROM user_info
WHERE user_id=:G_USER;
if G_PWD=correct_PSWD then
open(w_main)
close(w_login)
else
if G_INPUT_TIME >= 3 then
messagebox("警告","输入用户口令次数太多!")
close(w_login)
else
messagebox("警告","输入用户口令有误,请重新输入")
end if
end if
end if
“退出”按钮控件的Click事件中输入如下的程序代码:
close(w_login)
3.6 数据窗口建立
3.6.1 d_sinfo_grid数据窗口的建立
单击打开“New”对话框,然后在DataWindow标签页选择数据窗口对象的显示风格,在这里选择Grid(网格显示方式)。如图3-9所示。
单击“OK”按钮启动数据窗口对象向导。选择Quick Select数据源,如图3-10所示。
然后单击“Next”按钮,出现Quick Select窗口。在左上方的表格列表中双击要连接的表格student_info。
图3-9 “New”对话框 图3-10 选择数据源
选中该表格后,在参考右上方的列表框中列出了选中表student_info的各个列。单击要选中的多个列,在该窗口下方显示选中的列,如图3-11所示。单击“OK”按钮,出现“Select Color Border Setting”对话框,如图3-12所示。
在其中选择数据窗口的颜色、文字颜色和边框外观,单击“Next”按钮,出现“Ready to Create Grid Data Window”对话框,如图3-13所示。
在其中显示当前数据窗口对象的属性。单击其上的“Finish”按钮显示如图3-14所示的数据窗口对象画笔。
图3-11 “Quick Select”对话框 图3-12 设置颜色和背景框
在其中设置页眉区和细节区的属性。在数据库表中各个列的列名是用英文表示的,在列标题显示的时候将他们设置为中文,具体的属性设置如表所示。
图3-13 Ready to Create Grid Data Window对话框 图3-14d_sinfo_grid数据窗口对象编辑
单击“保存”图标,出现如图3-15所示的保存对话框,在其中输入数据窗口对象的名称,进行保存。
图3-15 保存窗口
通过上面的操作步骤,一个完整的Grid风格的数据窗口对象就创建完毕。应用程序中窗口上的数据窗口控件可以连接和使用这个创建好的数据窗口对象。
3.6.2 d_sinfo数据窗体的建立
d_sinfo数据窗口对象的创建和上面d_sinfo_grid数据窗口对象的方法类似,只不过在这里需要选择数据窗口对象的风格为Freeform。
单击打开“New”对话框,然后在DataWindow标签页选择数据窗口对象的显示风格,在这里选择Freeform(网格显示方式)。如图3-16所示
单击“OK”按钮启动数据窗口对象向导。选择Quick Select数据源,然后单击“N”按扭,出现Quick Select窗口。如图3-17所示
图3-16 “New”对话框 图3-17 设置颜色和背景框
在左上方的表格列表中双击要连接的表格student_info。选中该表格后,在参考右上方的列表框中列出了选中表student_info的各个列。如图3-17所示。单击“OK”按钮,出现“Select Color Border Setting”对话框。在其中显示当前数据窗口对象的属性。单击其上的“Finish”按钮显示如图3-18所示的额数据窗口对象画笔。
图3-18 d_sinfo数据窗口对象的编辑
3.7 学籍管理
3.7.1. 添加学籍信息
单击打开“New”对话框,然后在PB Object标签页选择数据窗口对象的显示风格,在这里选择Window,如图3-19所示。单击“OK”按钮创建新的窗口对象。在窗口最上方放置一个静态文本框控件,显示窗口的用途“添加学籍信息”。删除、确认以及窗口的退出功能。窗体外观如图3-20。该窗口可以通过选择“学籍管理|添加学籍信息”
图3-19 “New”对话框 图3-20 添加学籍信息窗体
在窗口的Open事件中输入他如下的程序代码:
dw_1.settransobject(sqlca)
dw_1.retrieve()
integer G_RowNumber
G_RowNumber=dw_1.InsertRow(0)
dw_1.setfocus()
dw_1.ScrollToRow(G_RowNumber)
dw_1.setColumn(1)
“前一条”按钮控件的Click事件用于记录向前移动一条,也就是显示前一条记录,其程序代码如下:
integer row_current
row_current=dw_1.ScrollPriorRow()
if row_current=1 then
MessageBox("警告","这已经是第一条记录!")
end if
“后一条”按钮控件的Click事件用于显示记录的后一条记录,程序代码如下:
integer row_count
integer row_current
row_current=dw_1.ScrollNextRow()
row_count=dw_1.RowCount()
if row_current=dw_1.RowCount() then
MessageBox("警告","已经是最后一条记录!")
end if
“添加”按钮控件的Click事件用于用户输入新的记录,其程序代码如下:
integer G_RowNumber
G_RowNumber=dw_1.InsertRow(0)
dw_1.setfocus()
dw_1.ScrollToRow(G_RowNumber)
dw_1.setColumn(1)
“删除”按钮控件的Click事件用于删除当前所显示的那条记录。其程序代码如下:
integer G_RowNumber
G_RowNumber=dw_1.getrow()
DeleteRow(dw_1,G_RowNumber)
“保存”按钮控件的Click事件用于提交和确认对该数据库表格中记录所做的修改,包括插入和删除,如果提交失败,则取消修改,程序代码如下:
if update(dw_1,true,false)=1 then
dw_1.resetupdate()
messagebox("提示","数据保存成功")
commit;
else
rollback;
messagebox("错误!!!","数据保存失败")
end if
“退出”按钮的Click事件用于关闭该输入窗口。在关闭窗口之前,首先判断用户
是否对根据窗口中的记录作了修改而没有保存到数据库中,如果有这样的记录,则出现对话框询问用户是否保存所作的修改,程序代码如下:
int MCount
int UpdateOrNot
Mcount=w_add.dw_1.ModifiedCount()
if Mcount=0 then
close(w_add)
elseif Mcount>0 then
UpdateOrNot=MessageBox("保存修改","您更改了数据窗口中的数据,现在是否保存?",Question!,YesNoCancel!)
if UpdateOrNot=1 then
if update(w_add.dw_1,true,false)=1 then
w_add.dw_1.resetupdate()
commit;
else
rollback;
MessageBox("错误!!!","数据保存失败")
end if
close(w_add)
elseif UpdateOrNot=2 then
rollback;
close(w_add)
end if
end if
3.7.2 修改学籍信息
选择“学籍管理|修改学籍信息”菜单,将出现如图3-22所示的窗体。在窗口的上方放置一个数据窗口控件dw_1,该控件连接的数据窗口对象是d_sinfo_grid。
在窗口的最下面放置3个按钮控件,在其Click事件中分别用来实现删除一条记录、确定所做的修改以及关闭窗口的功能。
图3-21 修改学籍信息的窗体
在窗口w_sinfo_grid的Open事件中输入如下的程序代码:
dw_1.settransobject(sqlca)
dw_1.retrieve()
“删除”按钮控件的Click事件用于删除信息表中一条信息,其程序代码如下:
integer G_RowNumber
G_RowNumber=dw_1.getrow()
DeleteRow(dw_1,G_RowNumber)
“保存”按钮控件的Click事件用于保存用户对信息窗口所做的修改。其程序代码如下:
if update(dw_1,true,false)=1 then
dw_1.resetupdate()
messagebox("提示","数据保存成功")
commit;
else
rollback;
messagebox("错误!!!","数据保存失败")
end if
“退出”按钮控件的Click事件用于关闭信息管理窗口,返回到主窗口,其程序代码如下:
int MCount
int UpdateOrNot
Mcount=w_sinfo_grid.dw_1.ModifiedCount()
if Mcount=0 then
close(w_sinfo_grid)
elseif Mcount>0 then
UpdateOrNot=MessageBox("保存修改","您更改了数据窗口中的数据,现在是否保存?",Question!,YesNoCancel!)
if UpdateOrNot=1 then
if update(w_sinfo_grid.dw_1,true,false)=1 then
w_sinfo_grid.dw_1.resetupdate()
commit;
else
rollback;
MessageBox("错误!!!","数据保存失败")
end if
close(w_sinfo_grid)
elseif UpdateOrNot=2 then
rollback;
close(w_sinfo_grid)
end if
end if
3.7.3 查询学籍信息
选择“学籍管理|查询学籍信息”菜单,将出现如图3-23所示的窗体。在这里可以按照各种方式进行查询。
图3-22 查询学籍信息窗体
窗口的上面有一个数据窗口控件,连接了前面创建的数据窗口对象d_sinfo_grid。在数据窗口控件下方有2个下拉列表框DorpDownlistBox控件。其中ddlb_1提供用户选择要查询的列(学号、姓名、性别等),ddlb_2提供给用户选择要查询的符号(>、<、=等)。另外还放置一个单行编辑框控件,提供给用户在其中输入要查询的内容。
ddlb_1的“Items”属性页如图3-23所示。
图3-23 ddlb_1的Items属性页 图3-24 ddlb_2的Items属性页
ddlb_2的“Items”属性页如图3-25所示。查询条件的下面放置有3个按扭控件,在其Click事件中分别用来实现学籍信息的查询、打印以及退出的功能。窗口的Open事件中输入如下的程序代码:
dw_1.settransobject(sqlca)
dw_1.retrieve()
“查询”按钮控件的Click事件用于执行条件查询,并将结果显示在数据窗口中,其程序代码如下:
string lookforwhat1
int current_row
int total_row
int find_row
lookforhow1=ddlb_2.text
if ddlb_1.text="学号" then
lookforitem1="student_id"
elseif ddlb_1.text="姓名" then
lookforitem1="student
展开阅读全文