《数据库原理与应用》课件第10章_第1页
《数据库原理与应用》课件第10章_第2页
《数据库原理与应用》课件第10章_第3页
《数据库原理与应用》课件第10章_第4页
《数据库原理与应用》课件第10章_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章前台数据库应用及设计文档10.1前台数据库应用10.2设计文档【小结】【习题】【课程要求】

1.知道用三层架构思想完成数据库应用系统设计。

2.能读懂设计文档。

【课程内容】

数据库应用系统是软件开发中的一个重要分支。目前因为Java软件平台无关性的优点,所以被越来越多地应用于软件开发中。在典型的数据库应用系统中,一般分为表示层、业务逻辑层和数据访问层。本章主要介绍用Java开发前台数据库应用程序以及设计中的主要文档:概要设计说明书、数据库设计说明书、详细设计说明书。

10.1前台数据库应用

本书中“××学院××专业学生成绩管理系统”前台数据库应用软件采用Java设计。Java是由Sun公司推出的面向对象的程序设计语言,集平台无关性、支持多线程、安全性、健壮性、简单性、易用性于一身,并且适于网络环境下编程使用。Java已成为当今主流的编程语言。本书所述软件采用三层架构思想来完成。三层架构是指表示层、业务逻辑层和数据访问层。表示层只涉及用户界面功能的代码;业务逻辑层只涉及业务逻辑功能的代码;数据访问层只涉及对数据库中数据的存取操作。这样一来,当用户只需要修改用户界面时,只需修改表示层即可,不会影响到业务逻辑部分的代码。

因为篇幅及代码类似的原因,本书中只对“学生信息”管理部分进行设计说明。10.1.1表示层的创建

表示层位于最外层,是离用户最近的层,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面。

1.项目的创建

在JBuilder2005环境下,选择【File】→【NewProject】选项,新建项目。

在弹出的项目创建向导第一页的【Name】文本框中输入StudentScoreManager,【Directory】下拉框中选择存放项目的路径,这里选择“C:/JavaExp/StudentScoreManager”,如图10-1所示。

单击【Next】按钮继续下一步,或单击【Finish】按钮完成创建项目。图10-1项目创建向导第一页

2.主界面

在JBuilder2005环境下,选择【File】→【New】选项,新建Appliction应用程序,命名为MainApplication。单击【Next】按钮,新建Frame窗体,命名为MainFrame。单击【Design】选项卡,在窗体上添加SwingContainers中的JMenuBar控件。单击【Menu】选项卡,输入如图10-2所示的各个菜单项。图10-2主界面

3.查询界面

选择【File】→【New】选项,新建Frame窗体,命名为SelStudentInfoFrame。单击【Design】选项卡,在窗体上添加Swing中的JPanel、ButtonGroup、JRadioButton、JTextField、JButton、JScrollPanel、JTable控件,如图10-3所示。图10-3查询学生信息界面

4.添加界面

新建Frame窗体,命名为InsertStudentInfoFrame。单击【Design】选项卡,在窗体上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如图10-4所示。图10-4添加学生信息界面

5.修改界面

新建Frame窗体,命名为UpdateStudentInfoFrame。单击【Design】选项卡,在窗体上添加Swing中的JPanel、JLabel、JTextField、JButton控件,如图10-5所示。文本框的Text属性设为空;文本框的Name属性设为txtNo。“修改”按钮的Name属性设为btnUpdate;“取消”按钮的Name属性设为btnCancel。新建Frame窗体,命名为UpdateStudentInfoOkFrame。单击【Design】选项卡,在窗体上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如图10-6所示。文本框的Text属性设为空。“男”单选按钮的Selected属性设为True。“学号”后文本框的Name属性设为txtNo,“姓名”后文本框的Name属性设为txtNo;“男”单选按钮的Name属性设为rdoMan,“女”单选按钮的Name属性设为rdoWoman;“修改”按钮的Name属性设为btnUpdate,“取消”按钮的Name属性设为btnCancel。图10-5修改学生信息录入界面图10-6修改学生信息修改界面

6.删除界面

新建Frame窗体,命名为DeleteStudentInfoFrame。单击【Design】选项卡,在窗体上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如图10-7所示。文本框的Text属性设为空。文本框的Name属性设为txtNo;“修改”按钮的Name属性设为btnDelete,“取消”按钮的Name属性设为btnCancel。图10-7删除学生信息界面10.1.2数据访问层的创建

数据访问层主要实现对数据的保存和读取操作,即增删查改。数据访问层通常为类库。这里涉及到的数据库驱动和连接的类是java.sql包中的类,且只能在数据访问层使用,而不能在界面层和业务逻辑层使用,否则将不是三层结构。

在“StudentInfoManager”包上右击,选【New】选项,在弹出的选项卡中选【Package】选项,如图10-8所示。将新建的包命名为DAO。图10-8新建包右击DAO包,选【New】选项,在弹出的选项卡中选【Class】选项,新建Class类,命名为Conn。添加连接方法。Conn类的代码如下:

packagestudentscoremanage.DAO;

importjava.sql.DriverManager;

importjava.sql.Connection;

publicclassConn{

/**

*初始化连接

*/

publicConn(){

}/**

*建立JdbcOdbc连接,方法名getOdbcConnection

*@returnConnection

*/

publicConnectiongetOdbcConnection(){

Connectioncon=null;

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

con=DriverManager.getConnection(

"jdbc:odbc:StudentScore","sa","123");

}catch(Exceptionex){

ex.toString();

}

returncon;

}/**

*建立SqlServer2005直连,方法名getSqlServerConnection

*@returnConnection

*/

publicConnectiongetSqlServerConnection(){

Connectioncon=null;

try{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

con=DriverManager.getConnection(

"jdbc:microsoft:sqlserver://localhost:1433;"

+"DatabaseName=StudentScoreManager");

}catch(Exceptionex){

ex.toString();

}

returncon;

}

}新建Class类,命名为StudentInfoDAO。完成对学生信息的增删查改。StudentInfoDAO类的代码如下:

packagestudentscoremanage.DAO;

importjava.util.*;

importjava.sql.*;

importstudentscoremanage.Entity.*;

publicclassStudentInfoDAO{

publicStudentInfoDAO(){

}

/***查询所有的学生

*@returnArrayList返回记录集

*/

publicArrayListgetAllStudent(){

Stringsql="select*fromStudentInformation";

ArrayListlist=find(sql);

returnlist;

}/**

*按学号查询

*@paramsnoString已知学号

*@returnArrayList返回记录集

*/

publicArrayListgetStudentBySNo(Stringsno){

Stringsql="select*fromStudentInformationwhereSNo='"+sno+"'";

ArrayListlist=find(sql);

returnlist;

}/**

*按班级查询

*@paramsclassString已知班级

*@returnArrayList返回记录集

*/

publicArrayListgetStudentByClass(Stringsclass){

Stringsql="select*fromStudentInformationwhereleft(SNo,6)='"

+sclass+"'orderbyleft(SNo,6)";

ArrayListlist=find(sql);

returnlist;

}/**

*查询

*@paramsqlString查询的命令

*@returnArrayList返回记录集

*/

publicArrayListfind(Stringsql){

ArrayListlist=newArrayList();

Connectioncon=null;

Statementst=null;

ResultSetrs=null;

try{

Connconn=newConn();

con=conn.getOdbcConnection();

st=con.createStatement();

rs=st.executeQuery(sql);

while(rs.next()){

StudentInfostu=newStudentInfo();

stu.setSNo(rs.getString(“SNo”));

stu.setSName(rs.getString(“SName”));

stu.setSSex(rs.getString(“SSex”));

list.add(stu);

}

rs.close();

st.close();

con.close();

}catch(SQLExceptionex){

ex.toString();

}

returnlist;

}

/**

*按学号删除,本应在删除学生信息表中的学生时,

*同时删除用户表、成绩表中该学生的学号。

*也就需要相应的实体类和数据访问层,业务逻辑层代码。

*因篇幅原因,此处略去。只完成对学生信息表的删除。

*@paramsnoString学号

*/publicvoiddeleteStudentInfo(Stringsno){

try{

Connconn=newConn();

Connectioncon=conn.getOdbcConnection();

Statementst=con.createStatement();

st.executeUpdate("deletefromStudentInformationwhereSNo='"+sno+"'");

st.close();

con.close();

}catch(SQLExceptionex){

ex.toString();

}

}/**

*修改学生信息

*@paramstuStudentInfo已知一个学生

*/

publicvoidupdateStudentInfo(StudentInfostu){

Stringsno=stu.getSNo();

Stringsname=stu.getSName();

Stringssex=stu.getSSex();

try{

Connconn=newConn();

Connectioncon=conn.getOdbcConnection();

Statementst=con.createStatement();

st.executeUpdate("updateStudentInformationsetSName='"+sname

+"',SSex='"+ssex+"'whereSNo='"+sno+"'");

st.close();

con.close();

}catch(SQLExceptionex){

ex.toString();

}

}

/**

*添加学生,本应在添加学生信息表中的学生时,

*同时添加用户表、成绩表中该学生的学号。

*也就需要相应的实体类和数据访问层,业务逻辑层代码。

*因篇幅原因,此处略去。只完成对学生信息表的添加。

*@paramstuStudentInfo已知一个学生*/

publicvoidinsertStudentInfo(StudentInfostu){

Stringsno=stu.getSNo();

Stringsname=stu.getSName();

Stringssex=stu.getSSex();

try{

Connconn=newConn();

Connectioncon=conn.getOdbcConnection();

Statementst=con.createStatement();

st.executeUpdate("insertintoStudentInformationvalues('"+sno+"','"+sname+"','"+ssex+"')");

st.close();

con.close();

}catch(SQLExceptionex){

ex.toString();

}

}

}10.1.3业务逻辑层的创建

业务逻辑层是表示层和数据访问层之间通信的桥梁,主要负责数据的传递和处理,例如数据的有效性的检查、业务逻辑描述等相关功能。业务逻辑层通常为类库。

业务实体类的创建方法如下:在“StudentInfoManager”包上右击,选【New】选项,在弹出的选项卡中选【Package】选项。将新建的包命名为Entity。

在Entity包中新建Class类,命名为StudentInfo。完成对学生信息表各个字段的读取。StudentInfo类的代码如下:packagestudentscoremanage.Entity;

publicclassStudentInfo{

/**

*字段

*/

StringSNo;//学号

StringSName;//姓名

StringSSex;//性别

publicStudentInfo(){

}/**

*取学号的值

*@returnString

*/

publicStringgetSNo(){

returnthis.SNo;

}

/**

*设置学号的值

*@paramsnoString

*/

publicvoidsetSNo(Stringsno){

this.SNo=sno;

}/**

*取姓名的值

*@returnString

*/

publicStringgetSName(){

returnthis.SName;

}

/**

*设置姓名的值

*@paramsnoString

*/

publicvoidsetSName(Stringsname){

this.SName=sname;

}/**

*取性别的值

*@returnString

*/

publicStringgetSSex(){

returnthis.SSex;

}

/**

*设置性别的值

*@paramsnoString

*/

publicvoidsetSSex(Stringssex){

this.SSex=ssex;

}

}创建业务逻辑类,完成数据访问层与表示层之间的数据传递。在“StudentInfoManager”包上右击,选【New】选项,在弹出的选项卡中选【Package】选项。将新建的包命名为Service。

在Service包中新建Class类,命名为StudentInfoService。完成对学生信息表各个字段的读取。StudentInfoService类的代码如下:packagestudentscoremanage.Service;

importjava.util.*;

importstudentscoremanage.DAO.*;

importstudentscoremanage.Entity.*;

publicclassStudentInfoService{

/**

*对DAO实例化

*/

StudentInfoDAOstuDAO=newStudentInfoDAO();publicStudentInfoService(){

}

/**

*查询

*/

/**

*查询所有的学生

*@returnArrayList

*/

publicArrayListgetAllStudent(){

returnstuDAO.getAllStudent();

}

/**

*根据学号查询学生信息

*@paramsnoString学号

*@returnArrayList

*/

publicArrayListgetStudentBySNo(Stringsno){

returnstuDAO.getStudentBySNo(sno);

}

/**

*根据班级查询学生信息

*@paramsclassString班级

*@returnArrayList

*/

publicArrayListgetStudentByClass(Stringsclass){

returnstuDAO.getStudentByClass(sclass);

}/**

*添加学生信息

*@paramstuStudentInfo一个学生信息

*@returnString返回插入是否成功消息

*/

publicStringinsertStudent(StudentInfostu){

Stringsno=stu.getSNo();

Stringmessage="";

if(!stuDAO.getStudentBySNo(sno).isEmpty()){

message="该学生已经存在!请重新输入!";

}

else{

stuDAO.insertStudentInfo(stu);

message="该学生添加成功!";

}

returnmessage;

}/**

*删除学生信息

*@paramsnoString一个学生的学号

*@returnString返回删除是否成功消息

*/

publicStringdeleteStudent(Stringsno){

Stringmessage="";

if(stuDAO.getStudentBySNo(sno).isEmpty()){

message="该学生不存在,不能删除!请重新输入!";

}

else{

stuDAO.deleteStudentInfo(sno);

message="该学生删除成功!";

}

returnmessage;

}/**

*修改学生信息

*@paramstuStudentInfo要修改学生信息

*@returnString返回修改是否成功消息

*/

publicStringupdateStudent(StudentInfostu){

Stringsno=stu.getSNo();

Stringmessage="";

if(stuDAO.getStudentBySNo(sno).isEmpty()){

message="该学生不存在,不能修改!请重新输入!";

}

else{

stuDAO.updateStudentInfo(stu);

message="该学生修改成功!";

}

returnmessage;

}

}10.1.4表示层数据绑定

在除了“主界面”的界面上添加以下属性:

StudentInfoServicestuService=newStudentInfoService();

1.主界面

主界面各菜单项的代码如下。

(1)“退出”菜单项代码:

voidjMenuFileExit_actionPerformed(ActionEventactionEvent){

System.exit(0);

}(2)“添加学生信息”菜单项代码:

publicvoidjMenuItem1_actionPerformed(ActionEvente){

InsertStudentInfoFrameinsStuFrame=newInsertStudentInfoFrame();

insStuFrame.setTitle("添加学生信息");

insStuFrame.show();

}

(3)“修改学生信息”菜单项代码:

publicvoidjMenuItem3_actionPerformed(ActionEvente){

UpdateStudentInfoFrameupStuFrame=newUpdateStudentInfoFrame();

upStuFrame.setTitle("修改学生信息");

upStuFrame.show();

}(4)“删除学生信息”菜单项代码:

publicvoidjMenuItem2_actionPerformed(ActionEvente){

DeleteStudentInfoFramedelStuFrame=newDeleteStudentInfoFrame();

delStuFrame.setTitle("删除学生信息");

delStuFrame.show();

}

(5)“查询学生信息”菜单项代码:

publicvoidjMenuItem4_actionPerformed(ActionEvente){

SelStudentInfoFrameselStuFrame=newSelStudentInfoFrame();

selStuFrame.setTitle("查询学生信息");

selStuFrame.show();

}

2.查询界面

查询界面各菜单项的代码如下。

(1)设置表格的表头方法:

publicVectorsetColName(){

VectorcolName=newVector();

colName.addElement(“学号”);

colName.addElement(“姓名”);

colName.addElement(“性别”);

returncolName;

}(2)设置表格的内容方法:

privateVectorsetColData(ArrayListlist){

Vectordata=newVector();

StudentInfostu=null;

for(inti=0;i<list.size();i++){

VectoraValue=newVector();

stu=(StudentInfo)list.get(i);

aValue.add(stu.getSNo());

aValue.add(stu.getSName());

aValue.add(stu.getSSex());

data.add(aValue);

}

returndata;

}

btnSel.addActionListener(newSelStudentInfoFrame_btnSel_actionAdapter(this));

jTable1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

jTableHeader1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

jTableHeader1.setBounds(newRectangle(31,97,398,16));

btnSel.addActionListener(newSelStudentInfoFrame_btnSel_actionAdapter(this));

jScrollPane1.setBounds(newRectangle(30,113,316,177));

this.getContentPane().add(jPanel1,java.awt.BorderLayout.CENTER);

rdoClass.setText("按班级查询");

rdoClass.setBounds(newRectangle(29,55,105,31));

jPanel1.add(rdoClass);

jPanel1.add(rdoSNo);

jPanel1.add(txtSelSNo);

jPanel1.add(btnSel);

jPanel1.add(jTableHeader1);

jPanel1.add(jScrollPane1);

jScrollPane1.getViewport().add(jTable1);

rdoSNo.setText("按学号查询");

rdoSNo.setBounds(newRectangle(30,20,114,25));

jPanel1.setLayout(null);

btnGSel.add(rdoSNo);

btnGSel.add(rdoClass);

}

(4)“查询”按钮的代码:

publicvoidbtnSel_actionPerformed(ActionEvente){

//清空表格,jTable1.getRowCount()表格行数

for(inti=0;i<jTable1.getRowCount();i++){

jTable1.setValueAt(“”,i,0);

jTable1.setValueAt(“”,i,1);

jTable1.setValueAt(“”,i,2);

}

//取查询值文本框的值

Stringtextsel=txtSelSNo.getText();

ArrayListlist=null;

//查询

//判断查询内容,并取查询结果集

if(rdoSNo.isSelected())

list=stuService.getStudentBySNo(textsel.trim());

elseif(rdoClass.isSelected())

list=stuService.getStudentByClass(textsel.trim());

else

list=stuService.getAllStudent();

//向表格添加查询结果

for(inti=0;i<list.size();i++){

StudentInfostu=(StudentInfo)list.get(i);

jTable1.setValueAt(stu.getSNo(),i,0);

jTable1.setValueAt(stu.getSName(),i,1);

jTable1.setValueAt(stu.getSSex(),i,2);

}

this.repaint(); //重画窗体

}

}3.添加界面

添加界面代码如下。

“添加”按钮代码:

publicvoidbtnAdd_actionPerformed(ActionEvente){

Stringmessage="";

Stringsname=txtName.getText().trim();

Stringsno=txtNo.getText().trim();

Stringssex="男";

if(rdoWoman.isSelected())

ssex="女";

if(sname==""||sno=="")

JOptionPane.showMessageDialog(null,"还未曾输入过姓名或学号");else{

StudentInfostu=newStudentInfo();

stu.setSNo(sno);

stu.setSName(sname);

stu.setSSex(ssex);

message=stuService.insertStudent(stu);

JOptionPane.showMessageDialog(null,message);

this.dispose();

}

}4.修改界面

(1)修改学生信息“录入界面”代码如下。

“修改”按钮的代码:

publicvoidbtnUpdate_actionPerformed(ActionEvente){

Stringsno=txtNo.getText().trim();

if(sno=="")

JOptionPane.showMessageDialog(null,"学号不能为空");

else{

ArrayListlist=stuService.getStudentBySNo(sno);

if(list.size()==0)

JOptionPane.showMessageDialog(null,"该学号不存在!");else{

UpdateStudentInfoOkFrameupStuOkFrame=new

UpdateStudentInfoOkFrame(sno);//传递学号到修改界面

upStuOkFrame.setTitle("修改学生信息");

upStuOkFrame.show();

this.dispose();

}

}

}(2)修改学生信息“修改界面”代码如下。

①界面的同名构造方法代码:

publicUpdateStudentInfoOkFrame(StringsNo){

try{

this.sNo=sNo;

//初始化传值

jbInit();

}catch(Exceptionexception){

exception.printStackTrace();

}

}②初始化事件代码:

privatevoidjbInit()throwsException{

setSize(newDimension(339,266));

getContentPane().setLayout(borderLayout1);

jPanel1.setLayout(null);

txtName.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

txtName.setBounds(newRectangle(120,33,169,35));

txtNo.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

txtNo.setBounds(newRectangle(120,81,168,33));

rdoMan.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

rdoMan.setSelected(true);

rdoMan.setText("男");

rdoMan.setBounds(newRectangle(119,133,91,25));

jLabel1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

jLabel1.setText("学号");

jLabel1.setBounds(newRectangle(57,76,122,45));

btnCancel.setBounds(newRectangle(178,169,90,38));

btnCancel.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

btnCancel.setText("取消");

btnCancel.addActionListener(new

UpdateStudentInfoOkFrame_btnCancel_actionAdapter(this));

jLabel2.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

jLabel2.setText("姓名");

jLabel2.setBounds(newRectangle(57,34,99,35));

btnUpdate.setBounds(newRectangle(61,169,90,38));

btnUpdate.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

btnUpdate.setText("修改");

btnUpdate.addActionListener(new

UpdateStudentInfoOkFrame_btnUpdate_actionAdapter(this));

jLabel3.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

jLabel3.setText("性别");

jLabel3.setBounds(newRectangle(58,126,115,36));

rdoWoman.setFont(newjava.awt.Font("Dialog",Font.PLAIN,15));

rdoWoman.setText("女");

rdoWoman.setBounds(newRectangle(222,131,61,27));

txtNo.setText(this.sNo);

txtNo.setEnabled(false);

btnUpdate.addActionListener(new

UpdateStudentInfoOkFrame_btnUpdate_actionAdapter(this));jPanel1.add(txtNo);

jPanel1.add(rdoMan);

jPanel1.add(jLabel1);

jPanel1.add(btnCancel);

jPanel1.add(jLabel2);

jPanel1.add(btnUpdate);

jPanel1.add(jLabel3);

jPanel1.add(rdoWoman);

buttonGroup1.add(rdoMan);

buttonGroup1.add(rdoWoman);

}③“修改”按钮的代码:

publicvoidbtnUpdate_actionPerformed(ActionEvente){

Stringsname=txtName.getText();

Stringssex="男";

if(rdoWoman.isSelected())

ssex="女";

StudentInfostu=newStudentInfo();

stu.setSNo(sNo);

stu.setSName(sname);

stu.setSSex(ssex);

Stringmessage=stuService.updateStudent(stu);

JOptionPane.showMessageDialog(null,message);

}5.删除界面

删除界面的代码如下。

“删除”按钮的代码:

publicvoidbtnDelete_actionPerformed(ActionEvente){

Stringsno=txtSno.getText();

Stringmessage="";

if(sno.length()==0||sno.equals(null))

JOptionPane.showMessageDialog(null,"学号不能为空!");

else{

message=stuService.deleteStudent(sno);

JOptionPane.showMessageDialog(null,message);

}

this.dispose();

}

10.2设计文档

设计过程中会产生“项目计划书”“需求分析说明书”“概要设计说明书”“数据库设计说明书”“用户界面设计说明书”“详细设计说明书”“测试文档”“用户手册”等文档。“需求分析说明书”请参照附录A。这里对主要的“概要设计说明书”、“数据库设计说明书”和“详细设计说明书”进行说明。10.2.1概要设计说明书

此处仅有正文部分,完整的概要设计报告见附录B或光盘中的示例。

I.文档介绍

I.1文档目的

众所周知,随着信息化的逐渐推广,近些年随着学生人数的增多、教学工作的需要,一些院校对通过软件管理信息化的学生成绩的工作要求也呈现出增加的趋势,他们也希望通过软件来完成繁重的学生成绩管理工作,以取代以前的人工工作,提高工作效率,以达到学校信息化管理的目的。

根据客户需求分析报告,进行项目概要设计,以便于进一步地详细分析设计。

I.2文档范围

本文档用于软件设计阶段的概要设计,它的上游(依据的基线)是《需求分析报告》,它的下游是《详细设计报告》。

软件概要设计的范围是:设计系统的总体架构,分模块之间的逻辑关系。

I.3读者对象

本文档供详细分析设计人员参考。

I.4参考文献

尉鹏博.学生成绩管理系统需求分析报告.某学院计算机工程系“数据库原理与应用”课题组,2008,6,8

I.5术语与缩写解释

本文档涉及术语与缩写解释见表10-3。

II.模块命名规则

设计及编程中应参考并遵循:Java编码规范。

III.模块汇总

III.1模块汇总表

按功能模块划分,见表10-4。按逻辑划分,见表10-5。

III.2模块关系图

系统拟采用C/S架构。服务器布置SQLServer2005数据库管理系统;客户端拟采用纯Java开发Application应用,使客户端能够实现跨平台应用;数据连接采用JDBC-ODBC桥连接远端的SQLServer,连接方式采用长连接方式。

逻辑结构如图10-9所示。

表示层通过SWING的事件处理机制连接业务逻辑层;而业务逻辑层则通过数据接口访问数据库。图10-9模块关系图

IV.业务逻辑

首次登录使用如图10-10所示。图10-10首次登录使用日常管理员维护操作如图10-11所示。图10-11日常管理员维护操作业务逻辑流程图日常学生查询操作如图10-12所示。图10-12日常学生查询业务逻辑流程图日常班主任查询操作如图10-13所示。图10-13日常班主任查询操作业务逻辑流程图日常教师查询录入操作如图10-14所示。图10-14日常教师查询录入操作业务逻辑流程图10.2.2数据库设计说明书

此处仅有正文部分,完整的数据库设计报告见附录C或光盘中的示例。

I.文档介绍

I.1文档目的

众所周知,随着信息化的逐渐推广,近些年随着学生人数的增多、教学工作的需要,一些院校对通过软件管理信息化的学生成绩的工作要求也呈现出增加的趋势,他们也希望通过软件来完成繁重的学生成绩管理工作,以取代以前的人工工作,提高工作效率,以达到学校信息化管理的目的。

根据系统总体设计要求,本文档是对该系统中的数据库进行设计,以便于进一步地详细分析设计。

I.2文档范围

数据库用户表设计、字段设计、约束设计。

I.3读者对象

总体设计人员、详细分析设计人员、各窗体模块代码编写人员。

I.4参考文献

[1]尉鹏博.学生成绩管理系统用户需求分析报告.某学院计算机工程系“数据库原理与应用”课题组,2008,6,8

[2]尉鹏博.学生成绩管理系统概要设计报告.某学院计算机工程系“数据库原理与应用”课题组,2008,6,9

I.5术语与缩写解释

本文档涉及术语与缩写解释见表10-6。

II.数据库环境说明

(1)数据库系统:MicrosoftSQLServer2005Professional。

设计工具:SSMS。

(2)详细配置。

数据库名称:StudentScoreManager。

登录账户:sa。

登录密码:123。

数据源名:StudentScore。

III.数据库的命名规则

数据库表规则:单个英文单词首字母大写。如:学生信息表:StudentInformation。

字段命名规则:第一个字母是表名的首字母大写,从第一个单词开始,首字母大写。如:学生信息表中学号:SNo。

约束命名规则:约束名简写大写字母后加下画线,然后加被约束的表名加列名。如:学生信息表学号为主键约束:PK_StudentInformation_SNo。

IV.逻辑设计

根据概要设计,该系统的数据库实体关系如图10-15所示,数据库关系如图10-16所示。图10-15实体关系图图10-16数据库关系图

V.物理设计

汇总表如表10-7所示。学生基本信息表StudentInformation如表10-8所示。教师信息表TeacherInformation如表10-9所示。班级信息表ClassInformation如表10-10所示。专业信息表ProfessionInformation如表10-11所示。课程信息表CourseInformation如表10-12所示。用户信息表UserInformation如表10-13所示。教师任课表TeacherCourse如表10-14所示。学生成绩表StudentScore如表10-15所示。

VI.安全性设计

VI.1防止用户直接操作数据库的方法

用户只能用账号登录到应用软件,通过应用软件访问数据库,而没有其他途径操作数据库。

VI.2用户账号密码的加密方法

提示:对用户账号的密码进行加密处理,确保在任何地方都不会出现密码的明文。

用户账号密码加密方法:可使用密码框来对输入密码进行保护,避免出现密码的明文。如界面需要显示密码,则密码用“********”代替。

VI.3角色与权限

确定每个角色对数据库表的操作权限,如添加、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。

角色与权限如表10-16所示。

VII.数据库管理与维护说明

提示:在设计数据库的时候,及时给出管理与维护本数据库的方法,有助于将来撰写出正确完备的用户手册。

数据库

StudentScoreManager

服务器

(Server)

优化

每1周在星期日发生,在1:00:00。

执行下列操作:

重新组织数据页和索引页,将可用空间更改为原始空间的10%。

INTEGRITYCHECKS

每1周在星期日发生,在0:00:00。

备份数据库之前执行完整性检查。

执行下列操作:

检查数据库。

完全备份

每1周在星期日发生,在2:00:00。

备份媒体:磁盘。

将备份文件存储在默认的SQLServer备份目录中。

完成后验证备份。事务日志备份

每1周在星期一,星期二,星期三,星期四,星期五,星期六发生,在0:00:00。

备份媒体:磁盘。

将备份文件存储在默认的SQLServer备份目录中。

完成后验证备份。

生成并存储报表的目录为:C:\Progr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论