学籍管理系统数据库设计,学籍管理系统详细设计

第三方分享代码
hacker 3年前 (2022-07-02) 教育 73 2

介绍:

学籍管理系统 数据库程序编写!!

一. 应用实例的分析与开发

---- 我们以学籍管理系统为背景,基于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思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。

数据库学籍管理系统应用程序设计

数据库程序设计虽然复杂,但逻辑性极强,只要理清各个分库之间的逻辑关系,就水到渠成了。我以前学过DBASE,毕业后为自己的企业设计过全厂工资奖金人员级效考核系统,粗略谈谈我自己的一点体会,以供参考:

首先,数据库要大致分为原始数据库,参照数据库,发生数据库,中间数据库,结果数据库五大类。如你上面所述:学生的学号、姓名、性别、院系、年级、班级,老师的姓名、职称、所属课程,属于原始数据库,它是建立好以后始终不变的基本元素,在整个过程中被程序调用。学生的必修课学分、选修课学分、限选课学分,属于发生数据库,只是建立一个录入空表,由考试后搜集,需要人工录入的(当然也可以机器扫描录入)。其后的一系列所需要的运算,都是基于它们来产生的。总学分,平均成绩等,属于中间数据库。是始生数据库经运算后产生的中间结果,存放成中间库。当然,会有最后的结果数据库,如排名表、各类查询表等。最后的结果与参照数据相比较,生成逻辑判断。

各个数据库结构,字段等,要人工建立。最初的始生数据,要人工录入,后续一系列的中间结果,和最终结果的运算,都是要由程序来实现的,当然,程序代码和算法等,也要你自己去写成。过程中的逻辑判断,是由程序比较自动得出。这是不是就是你所说的由约束(触发器)实现?

最后,一个好的数据库应用系统,还要你建立一个好的操作界面,上面有各种功能菜单,如“数据录入”,数据校验,成绩运算,成绩查询,报表打印等等。。。。

数据库课程设计学生学籍管理系统

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class MyPanel extends JPanel{

Image img=Toolkit.getDefaultToolkit().getImage("a.jpg");

public void paint(Graphics g){

g.drawImage(img,0,0,this);

}

}

public class MainForm extends JFrame implements ActionListener{

JMenu mSystem=new JMenu("系统");

JMenuItem mExit=new JMenuItem("退出");

JMenu mOperate=new JMenu("数据操作");

JMenuItem mAdd=new JMenuItem("添加");

JMenuItem mDel=new JMenuItem("删除");

JMenuItem mModify=new JMenuItem("修改");

JMenuItem mBrowse=new JMenuItem("浏览");

JMenu mQuery=new JMenu("查询");

JMenuItem mNumber=new JMenuItem("按学号查询");

JMenuItem mScore=new JMenuItem("按成绩查询");

JMenu mHelp=new JMenu("帮助");

JMenuItem mAbout=new JMenuItem("关于");

JMenuBar mBar=new JMenuBar();

MainForm(){

super("学生成绩管理系统");

setSize(700,630);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

mSystem.add(mExit);

mOperate.add(mAdd);

mOperate.add(mDel);

mOperate.add(mModify);

mOperate.add(mBrowse);

mQuery.add(mNumber);

mQuery.add(mScore);

mHelp.add(mAbout);

mBar.add(mSystem);

mBar.add(mOperate);

mBar.add(mQuery);

mBar.add(mHelp);

setJMenuBar(mBar);

mExit.addActionListener(this);

mAdd.addActionListener(this);

mDel.addActionListener(this);

mModify.addActionListener(this);

mBrowse.addActionListener(this);

mNumber.addActionListener(this);

mScore.addActionListener(this);

mAbout.addActionListener(this);

setContentPane(new MyPanel());

setVisible(true);

}

public void actionPerformed(ActionEvent ae){

if(ae.getSource()==mExit)

System.exit(0);

else if(ae.getSource()==mAbout)

JOptionPane.showMessageDialog(this,"学生管理系统 V1.0\n\n安徽师范大学数学计算机科学学院\n\n2010年11月","关于",JOptionPane.INFORMATION_MESSAGE);

else if(ae.getSource()==mAdd)

new AddForm().setVisible(true);

else if(ae.getSource()==mDel)

new DeleteForm().setVisible(true);

else if(ae.getSource()==mModify)

new ModifyForm().setVisible(true);

else if(ae.getSource()==mBrowse)

new BrowseForm().setVisible(true);

else if(ae.getSource()==mNumber)

new NumberQueryForm().setVisible(true);

else if(ae.getSource()==mScore)

new ScoreQueryForm().setVisible(true);

}

public static void main(String[] args) {

new MainForm();

}

}

这个是主界面。

希望能解决您的问题。

学生学籍管理系统 数据库课设

已发送。里面有几个例子,其中一个就是你想要的学生信息管理系统

数据库课程设计--学生学籍管理系统

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class MyPanel extends JPanel{

Image img=Toolkit.getDefaultToolkit().getImage("a.jpg");

public void paint(Graphics g){

g.drawImage(img,0,0,this);

}

}

public class MainForm extends JFrame implements ActionListener{

JMenu mSystem=new JMenu("系统");

JMenuItem mExit=new JMenuItem("退出");

JMenu mOperate=new JMenu("数据操作");

JMenuItem mAdd=new JMenuItem("添加");

JMenuItem mDel=new JMenuItem("删除");

JMenuItem mModify=new JMenuItem("修改");

JMenuItem mBrowse=new JMenuItem("浏览");

JMenu mQuery=new JMenu("查询");

JMenuItem mNumber=new JMenuItem("按学号查询");

JMenuItem mScore=new JMenuItem("按成绩查询");

JMenu mHelp=new JMenu("帮助");

JMenuItem mAbout=new JMenuItem("关于");

JMenuBar mBar=new JMenuBar();

MainForm(){

super("学生成绩管理系统");

setSize(700,630);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

mSystem.add(mExit);

mOperate.add(mAdd);

mOperate.add(mDel);

mOperate.add(mModify);

mOperate.add(mBrowse);

mQuery.add(mNumber);

mQuery.add(mScore);

mHelp.add(mAbout);

mBar.add(mSystem);

mBar.add(mOperate);

mBar.add(mQuery);

mBar.add(mHelp);

setJMenuBar(mBar);

mExit.addActionListener(this);

mAdd.addActionListener(this);

mDel.addActionListener(this);

mModify.addActionListener(this);

mBrowse.addActionListener(this);

mNumber.addActionListener(this);

mScore.addActionListener(this);

mAbout.addActionListener(this);

setContentPane(new MyPanel());

setVisible(true);

}

public void actionPerformed(ActionEvent ae){

if(ae.getSource()==mExit)

System.exit(0);

else if(ae.getSource()==mAbout)

JOptionPane.showMessageDialog(this,"学生管理系统 V1.0\n\n安徽师范大学数学计算机科学学院\n\n2010年11月","关于",JOptionPane.INFORMATION_MESSAGE);

else if(ae.getSource()==mAdd)

new AddForm().setVisible(true);

else if(ae.getSource()==mDel)

new DeleteForm().setVisible(true);

else if(ae.getSource()==mModify)

new ModifyForm().setVisible(true);

else if(ae.getSource()==mBrowse)

new BrowseForm().setVisible(true);

else if(ae.getSource()==mNumber)

new NumberQueryForm().setVisible(true);

else if(ae.getSource()==mScore)

new ScoreQueryForm().setVisible(true);

}

public static void main(String[] args) {

new MainForm();

}

}

这个是主界面。

相关推荐

网友评论

  • (*)

最新评论

  • 访客 2022-07-03 01:15:00 回复

    ) Subject=Cstr(Request.Form("Subject")) objResult.term=Request.Form("term") objResult.Subj=RequestForm("Subject") objresult.class=Request.Form("

    1
  • 访客 2022-07-02 20:18:30 回复

    /tr %Loop% %Scores.close ' 关闭数据库连接set Scores=Nothingset objResult=Nothing % ' 释放对象 /table /center /div /BOD

    2