学籍管理系统 数据库程序编写!! 200
一种关系数据库产品实现一个基本的学籍管理程序,程序基本要求如下:1、程序所基于的数据为编程者所在班级所有同学的基本情况(包括:学号、姓名、性别、出生年月、籍贯、家庭住址等...
一种关系数据库产品实现一个基本的学籍管理程序,程序基本要求如下:
1、 程序所基于的数据为编程者所在班级所有同学的基本情况(包括:学号、姓名、性别、出生年月、籍贯、家庭住址等项目)和该班所有同学第一学年所选科目的成绩;
2、 程序应当具备正常的登陆过程;
3、 程序应当具备数据输入功能(输入基本信息和成绩信息);
4、 程序应当具备数据查询功能,其中至少需要实现:
查询指定同学的基本情况;
查询指定同学的学年所有科目成绩;
查询指定同学的指定科目成绩;
查询学习了指定科目的所有同学的成绩;
查询学习了指定科目的同学的指定情况(例如:查询所有选修了高等代数的女同学的姓名);
查询指定科目的指定情况所包括的同学(例如:按照分数段来进行查询)等(例如:查询指定科目的平均成绩);
5、 程序应当具备数据修改功能,(注:请注意修改人身份的确定问题);
6、 程序应当具备数据删除功能;
7、 程序应当具备退出功能。
所有程序需提供完整的源程序清单和开发说明文挡(包括程序运行所需要的环境,程序模块的功能说明以及其他认为需要说明的内容)
本程序要求基于SQL数据库编写,网上COPY的就不要啦~~欢迎原创~分大大的有~~ 展开
1、 程序所基于的数据为编程者所在班级所有同学的基本情况(包括:学号、姓名、性别、出生年月、籍贯、家庭住址等项目)和该班所有同学第一学年所选科目的成绩;
2、 程序应当具备正常的登陆过程;
3、 程序应当具备数据输入功能(输入基本信息和成绩信息);
4、 程序应当具备数据查询功能,其中至少需要实现:
查询指定同学的基本情况;
查询指定同学的学年所有科目成绩;
查询指定同学的指定科目成绩;
查询学习了指定科目的所有同学的成绩;
查询学习了指定科目的同学的指定情况(例如:查询所有选修了高等代数的女同学的姓名);
查询指定科目的指定情况所包括的同学(例如:按照分数段来进行查询)等(例如:查询指定科目的平均成绩);
5、 程序应当具备数据修改功能,(注:请注意修改人身份的确定问题);
6、 程序应当具备数据删除功能;
7、 程序应当具备退出功能。
所有程序需提供完整的源程序清单和开发说明文挡(包括程序运行所需要的环境,程序模块的功能说明以及其他认为需要说明的内容)
本程序要求基于SQL数据库编写,网上COPY的就不要啦~~欢迎原创~分大大的有~~ 展开
13个回答
展开全部
一. 应用实例的分析与开发
---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。
---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。
---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。
---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:
Option Explicit
Private m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
' 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......
' 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
' 建立事务性组件
Dim ObjConn As ADODB.Connection
' 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
' 根据查询要求(查询所有课程、查询特定学期的所有课程、
查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term <> "all") Then
query="select Client_Name,Client.Client_No,Courses.subject,
stu_score.score,stu_score.term,sub_type"
query = query & " from client,stu_score,courses"
query=query&"where client.client_no=stu_score.client_no
and stu_score.subject=courses.subject
and courses.term=stu_score.term
and courses.term='" & m_Term & "'
and Client.Client_no='" & m_StuNo & "'"
End If
......
ObjRecordset.Open query, ObjConn
' 进行数据库查询
ObjContext.SetComplte
' 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
' 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
' 事务失败处理
End Function
' 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
< %@ LANGUAGE="VBSCRIPT" % >
< HTML >
< HEAD >
< META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" >
< TITLE >Show To Teacher< /TITLE >
< /HEAD >
< BODY background="images/bk.GIF" >
< %
dim objResult
set objResult=Server.CreateObject("Display.Score")
dim Term,Subject
Term=Cstr(Request.Form("Term"))
Subject=Cstr(Request.Form("Subject"))
objResult.term=Request.Form("term")
objResult.Subj=RequestForm("Subject")
objresult.class=Request.Form("Class")
dim Scores
set Scores=objResult.RequeryAllScores
% >
' 以下代码为显示处理的结果
< div align="center" >< center >
......
< table border="0" cellpadding="0"
cellspacing="1" width="100" >< tr >
< %For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#004080" >
< strong >< font color="#FFFFFF" > < small >
< %=scores(I).Name% >< /font > < /strong > < /td >
< %NEXT
Do While (Not Scores.EOF)% >
< /tr >< tr >
< % For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#ACE8F9" >< p align="center" >
< %= Scores(I).Value% >< /td >
< %Next
Scores.MoveNext% >< /tr >
< %Loop% >
< %Scores.close
' 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % >
' 释放对象
< /table >< /center >< /div >
< /BODY >
< /HTML >
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:
二. 开发过程中辅助工具的使用
---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。
---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。
---- 1. 利用青鸟CASE工具编写需求分析文档
---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。
---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:
数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。
模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图
---- 2. 利用S-Designer进行数据库设计
---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。
---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。
---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。
---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:
---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。
---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。
---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。
---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。
---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。
---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。
---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:
Option Explicit
Private m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
' 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......
' 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
' 建立事务性组件
Dim ObjConn As ADODB.Connection
' 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
' 根据查询要求(查询所有课程、查询特定学期的所有课程、
查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term <> "all") Then
query="select Client_Name,Client.Client_No,Courses.subject,
stu_score.score,stu_score.term,sub_type"
query = query & " from client,stu_score,courses"
query=query&"where client.client_no=stu_score.client_no
and stu_score.subject=courses.subject
and courses.term=stu_score.term
and courses.term='" & m_Term & "'
and Client.Client_no='" & m_StuNo & "'"
End If
......
ObjRecordset.Open query, ObjConn
' 进行数据库查询
ObjContext.SetComplte
' 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
' 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
' 事务失败处理
End Function
' 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
< %@ LANGUAGE="VBSCRIPT" % >
< HTML >
< HEAD >
< META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" >
< TITLE >Show To Teacher< /TITLE >
< /HEAD >
< BODY background="images/bk.GIF" >
< %
dim objResult
set objResult=Server.CreateObject("Display.Score")
dim Term,Subject
Term=Cstr(Request.Form("Term"))
Subject=Cstr(Request.Form("Subject"))
objResult.term=Request.Form("term")
objResult.Subj=RequestForm("Subject")
objresult.class=Request.Form("Class")
dim Scores
set Scores=objResult.RequeryAllScores
% >
' 以下代码为显示处理的结果
< div align="center" >< center >
......
< table border="0" cellpadding="0"
cellspacing="1" width="100" >< tr >
< %For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#004080" >
< strong >< font color="#FFFFFF" > < small >
< %=scores(I).Name% >< /font > < /strong > < /td >
< %NEXT
Do While (Not Scores.EOF)% >
< /tr >< tr >
< % For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#ACE8F9" >< p align="center" >
< %= Scores(I).Value% >< /td >
< %Next
Scores.MoveNext% >< /tr >
< %Loop% >
< %Scores.close
' 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % >
' 释放对象
< /table >< /center >< /div >
< /BODY >
< /HTML >
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:
二. 开发过程中辅助工具的使用
---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。
---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。
---- 1. 利用青鸟CASE工具编写需求分析文档
---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。
---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:
数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。
模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图
---- 2. 利用S-Designer进行数据库设计
---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。
---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。
---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。
---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:
---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。
---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。
---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。
展开全部
hantao86 助理 二级(264) | 我的提问 | 我的回答 | 个人中心 | 退出 资讯 网页 贴吧 知道 MP3 图片 帮助
百度知道 > 电脑/数码 > 编程快到期问题
• vf学生成绩管理程序
• say ,read ,wtite在使用时有什么区别?
• home appliance firm 是什么
• 用VC++或VB编写出qqcom字母大小写的转换然后打印
• 我想知道美国对股市有影响的经济数据,麻烦详细介绍,例如那些数据的发布时间、评比等级等等
更多>>
订阅该问题
您想在自己的网站上展示百度“知道”上的问答吗?来获取免费代码吧!
--------------------------------------------------------------------------------
如要投诉或提出意见建议,请到
百度知道投诉吧反馈。 待解决
学籍管理系统 数据库程序编写!!
悬赏分:200 - 离问题结束还有 14 天 22 小时
一种关系数据库产品实现一个基本的学籍管理程序,程序基本要求如下:
1、 程序所基于的数据为编程者所在班级所有同学的基本情况(包括:学号、姓名、性别、出生年月、籍贯、家庭住址等项目)和该班所有同学第一学年所选科目的成绩;
2、 程序应当具备正常的登陆过程;
3、 程序应当具备数据输入功能(输入基本信息和成绩信息);
4、 程序应当具备数据查询功能,其中至少需要实现:
查询指定同学的基本情况;
查询指定同学的学年所有科目成绩;
查询指定同学的指定科目成绩;
查询学习了指定科目的所有同学的成绩;
查询学习了指定科目的同学的指定情况(例如:查询所有选修了高等代数的女同学的姓名);
查询指定科目的指定情况所包括的同学(例如:按照分数段来进行查询)等(例如:查询指定科目的平均成绩);
5、 程序应当具备数据修改功能,(注:请注意修改人身份的确定问题);
6、 程序应当具备数据删除功能;
7、 程序应当具备退出功能。
所有程序需提供完整的源程序清单和开发说明文挡(包括程序运行所需要的环境,程序模块的功能说明以及其他认为需要说明的内容)
问题补充:本程序要求基于SQL数据库编写,网上COPY的就不要啦~~欢迎原创~分大大的有~~
提问者:笨狗爱乌龟 - 见习魔法师 二级
答复共 3 条
一. 应用实例的分析与开发
---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。
---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。
---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。
---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:
Option Explicit
Private m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
' 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......
' 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
' 建立事务性组件
Dim ObjConn As ADODB.Connection
' 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
' 根据查询要求(查询所有课程、查询特定学期的所有课程、
查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term <> "all") Then
query="select Client_Name,Client.Client_No,Courses.subject,
stu_score.score,stu_score.term,sub_type"
query = query & " from client,stu_score,courses"
query=query&"where client.client_no=stu_score.client_no
and stu_score.subject=courses.subject
and courses.term=stu_score.term
and courses.term='" & m_Term & "'
and Client.Client_no='" & m_StuNo & "'"
End If
......
ObjRecordset.Open query, ObjConn
' 进行数据库查询
ObjContext.SetComplte
' 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
' 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
' 事务失败处理
End Function
' 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
< %@ LANGUAGE="VBSCRIPT" % >
< HTML >
< HEAD >
< META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" >
< TITLE >Show To Teacher< /TITLE >
< /HEAD >
< BODY background="images/bk.GIF" >
< %
dim objResult
set objResult=Server.CreateObject("Display.Score")
dim Term,Subject
Term=Cstr(Request.Form("Term"))
Subject=Cstr(Request.Form("Subject"))
objResult.term=Request.Form("term")
objResult.Subj=RequestForm("Subject")
objresult.class=Request.Form("Class")
dim Scores
set Scores=objResult.RequeryAllScores
% >
' 以下代码为显示处理的结果
< div align="center" >< center >
......
< table border="0" cellpadding="0"
cellspacing="1" width="100" >< tr >
< %For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#004080" >
< strong >< font color="#FFFFFF" > < small >
< %=scores(I).Name% >< /font > < /strong > < /td >
< %NEXT
Do While (Not Scores.EOF)% >
< /tr >< tr >
< % For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#ACE8F9" >< p align="center" >
< %= Scores(I).Value% >< /td >
< %Next
Scores.MoveNext% >< /tr >
< %Loop% >
< %Scores.close
' 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % >
' 释放对象
< /table >< /center >< /div >
< /BODY >
< /HTML >
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:
二. 开发过程中辅助工具的使用
---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。
---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。
---- 1. 利用青鸟CASE工具编写需求分析文档
---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。
---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:
数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。
模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图
---- 2. 利用S-Designer进行数据库设计
---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。
---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。
---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。
---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:
---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。
---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。
---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。
回答者:希特勒本拉登 - 见习魔法师 二级 5-10 19:26
把握关键渠道,掌握权威信息,这就是我想做的
回答者:匿名 5-10 20:15
;.fhgbthkuku
回答者:sffxhldsc - 试用期 一级 5-10 20:17
我也来回答:
回答即可得2分,回答被采纳则获得悬赏分以及奖励20分。 积分规则
回答字数在10000字以内
参考资料:
如果您的回答是从其他地方引用,请表明出处。
zuijia最佳答案!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
百度知道 > 电脑/数码 > 编程快到期问题
• vf学生成绩管理程序
• say ,read ,wtite在使用时有什么区别?
• home appliance firm 是什么
• 用VC++或VB编写出qqcom字母大小写的转换然后打印
• 我想知道美国对股市有影响的经济数据,麻烦详细介绍,例如那些数据的发布时间、评比等级等等
更多>>
订阅该问题
您想在自己的网站上展示百度“知道”上的问答吗?来获取免费代码吧!
--------------------------------------------------------------------------------
如要投诉或提出意见建议,请到
百度知道投诉吧反馈。 待解决
学籍管理系统 数据库程序编写!!
悬赏分:200 - 离问题结束还有 14 天 22 小时
一种关系数据库产品实现一个基本的学籍管理程序,程序基本要求如下:
1、 程序所基于的数据为编程者所在班级所有同学的基本情况(包括:学号、姓名、性别、出生年月、籍贯、家庭住址等项目)和该班所有同学第一学年所选科目的成绩;
2、 程序应当具备正常的登陆过程;
3、 程序应当具备数据输入功能(输入基本信息和成绩信息);
4、 程序应当具备数据查询功能,其中至少需要实现:
查询指定同学的基本情况;
查询指定同学的学年所有科目成绩;
查询指定同学的指定科目成绩;
查询学习了指定科目的所有同学的成绩;
查询学习了指定科目的同学的指定情况(例如:查询所有选修了高等代数的女同学的姓名);
查询指定科目的指定情况所包括的同学(例如:按照分数段来进行查询)等(例如:查询指定科目的平均成绩);
5、 程序应当具备数据修改功能,(注:请注意修改人身份的确定问题);
6、 程序应当具备数据删除功能;
7、 程序应当具备退出功能。
所有程序需提供完整的源程序清单和开发说明文挡(包括程序运行所需要的环境,程序模块的功能说明以及其他认为需要说明的内容)
问题补充:本程序要求基于SQL数据库编写,网上COPY的就不要啦~~欢迎原创~分大大的有~~
提问者:笨狗爱乌龟 - 见习魔法师 二级
答复共 3 条
一. 应用实例的分析与开发
---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。
---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。
---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。
---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:
Option Explicit
Private m_StuNo As Variant
Private m_Subj As String
Private m_Term As String
Private m_Class As String
' 设置属性为可写入的
Public Property Let StuNo(ByVal vNewValue As Variant)
m_StuNo = vNewValue
End Property
Public Property Let Subj(ByVal vNewValue As Variant)
m_Subj = vNewValue
End Property
......
' 学生查询成绩请求处理
Public Function RequeryScores() As Object
Dim objContext As MTxAS.ObjectContext
Set objContext = GetObjectContext()
' 建立事务性组件
Dim ObjConn As ADODB.Connection
' 利用ADO访问数据库
Dim ObjRecordset As ADODB.Recordset
Set ObjConn = New ADODB.Connection
ObjConn.Open "xia", "sa", ""
Set ObjRecordset = New ADODB.Recordset
Dim query As String
' 根据查询要求(查询所有课程、查询特定学期的所有课程、
查询指定课程、查询特定学期的某一课程)进行不同的查询操作
If (m_Subj = "all" And m_Term <> "all") Then
query="select Client_Name,Client.Client_No,Courses.subject,
stu_score.score,stu_score.term,sub_type"
query = query & " from client,stu_score,courses"
query=query&"where client.client_no=stu_score.client_no
and stu_score.subject=courses.subject
and courses.term=stu_score.term
and courses.term='" & m_Term & "'
and Client.Client_no='" & m_StuNo & "'"
End If
......
ObjRecordset.Open query, ObjConn
' 进行数据库查询
ObjContext.SetComplte
' 若事务成功完成,则提交该事务
RequeryScoresExit:
Set RequeryScores = ObjRecordset
' 返回查询结果集
Exit Function
RequeryScoresErr:
Set RequeryScores=Nothing
' 事务失败处理
End Function
' 教师、教务查询成绩请求处理
Public Function RequeryAllScores() As Object
......
End Function
---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):
< %@ LANGUAGE="VBSCRIPT" % >
< HTML >
< HEAD >
< META NAME="GENERATOR" Content="Microsoft
Visual InterDev 1.0" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb_2312-80" >
< TITLE >Show To Teacher< /TITLE >
< /HEAD >
< BODY background="images/bk.GIF" >
< %
dim objResult
set objResult=Server.CreateObject("Display.Score")
dim Term,Subject
Term=Cstr(Request.Form("Term"))
Subject=Cstr(Request.Form("Subject"))
objResult.term=Request.Form("term")
objResult.Subj=RequestForm("Subject")
objresult.class=Request.Form("Class")
dim Scores
set Scores=objResult.RequeryAllScores
% >
' 以下代码为显示处理的结果
< div align="center" >< center >
......
< table border="0" cellpadding="0"
cellspacing="1" width="100" >< tr >
< %For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#004080" >
< strong >< font color="#FFFFFF" > < small >
< %=scores(I).Name% >< /font > < /strong > < /td >
< %NEXT
Do While (Not Scores.EOF)% >
< /tr >< tr >
< % For I = 0 To Scores.Fields.Count - 1% >
< td bgcolor="#ACE8F9" >< p align="center" >
< %= Scores(I).Value% >< /td >
< %Next
Scores.MoveNext% >< /tr >
< %Loop% >
< %Scores.close
' 关闭数据库连接
set Scores=Nothing
set objResult=Nothing % >
' 释放对象
< /table >< /center >< /div >
< /BODY >
< /HTML >
---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。
---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:
二. 开发过程中辅助工具的使用
---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。
---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。
---- 1. 利用青鸟CASE工具编写需求分析文档
---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。
---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:
数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。
模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。
---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:
---- 系统1层DFD图 系统0层SC图
---- 2. 利用S-Designer进行数据库设计
---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。
---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。
---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。
---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:
---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。
---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。
---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。
回答者:希特勒本拉登 - 见习魔法师 二级 5-10 19:26
把握关键渠道,掌握权威信息,这就是我想做的
回答者:匿名 5-10 20:15
;.fhgbthkuku
回答者:sffxhldsc - 试用期 一级 5-10 20:17
我也来回答:
回答即可得2分,回答被采纳则获得悬赏分以及奖励20分。 积分规则
回答字数在10000字以内
参考资料:
如果您的回答是从其他地方引用,请表明出处。
zuijia最佳答案!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[所有程序需提供完整的源程序清单和开发说明文挡(包括程序运行所需要的环境,程序模块的功能说明以及其他认为需要说明的内容)
问题补充:本程序要求基于SQL数据库编写,网上COPY的就不要啦~~欢迎原创~分大大的有~~]
看你这一段真想晕,要带开发文档的,还不要网上COPY的,你以为百度的200分值好多钱好吧!
问题补充:本程序要求基于SQL数据库编写,网上COPY的就不要啦~~欢迎原创~分大大的有~~]
看你这一段真想晕,要带开发文档的,还不要网上COPY的,你以为百度的200分值好多钱好吧!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
拜托
计算机系计算机科学与技术专业出来的当年在学校都做过的吧,VB+SQL的,随便找找问师兄师姐或者认识的朋友要一个
自己写也不过就是晚上回寝室的时候写点,花上一个星期也搞定了
这种东东不是很难,自己做比较好啊,等你毕业了就有感触了。。。。。。
计算机系计算机科学与技术专业出来的当年在学校都做过的吧,VB+SQL的,随便找找问师兄师姐或者认识的朋友要一个
自己写也不过就是晚上回寝室的时候写点,花上一个星期也搞定了
这种东东不是很难,自己做比较好啊,等你毕业了就有感触了。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vb+sql 因该很容易的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询