《數(shù)據(jù)庫原理與應用》課件第10章_第1頁
《數(shù)據(jù)庫原理與應用》課件第10章_第2頁
《數(shù)據(jù)庫原理與應用》課件第10章_第3頁
《數(shù)據(jù)庫原理與應用》課件第10章_第4頁
《數(shù)據(jù)庫原理與應用》課件第10章_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第10章前臺數(shù)據(jù)庫應用及設計文檔10.1前臺數(shù)據(jù)庫應用10.2設計文檔【小結(jié)】【習題】【課程要求】

1.知道用三層架構(gòu)思想完成數(shù)據(jù)庫應用系統(tǒng)設計。

2.能讀懂設計文檔。

【課程內(nèi)容】

數(shù)據(jù)庫應用系統(tǒng)是軟件開發(fā)中的一個重要分支。目前因為Java軟件平臺無關(guān)性的優(yōu)點,所以被越來越多地應用于軟件開發(fā)中。在典型的數(shù)據(jù)庫應用系統(tǒng)中,一般分為表示層、業(yè)務邏輯層和數(shù)據(jù)訪問層。本章主要介紹用Java開發(fā)前臺數(shù)據(jù)庫應用程序以及設計中的主要文檔:概要設計說明書、數(shù)據(jù)庫設計說明書、詳細設計說明書。

10.1前臺數(shù)據(jù)庫應用

本書中“××學院××專業(yè)學生成績管理系統(tǒng)”前臺數(shù)據(jù)庫應用軟件采用Java設計。Java是由Sun公司推出的面向?qū)ο蟮某绦蛟O計語言,集平臺無關(guān)性、支持多線程、安全性、健壯性、簡單性、易用性于一身,并且適于網(wǎng)絡環(huán)境下編程使用。Java已成為當今主流的編程語言。本書所述軟件采用三層架構(gòu)思想來完成。三層架構(gòu)是指表示層、業(yè)務邏輯層和數(shù)據(jù)訪問層。表示層只涉及用戶界面功能的代碼;業(yè)務邏輯層只涉及業(yè)務邏輯功能的代碼;數(shù)據(jù)訪問層只涉及對數(shù)據(jù)庫中數(shù)據(jù)的存取操作。這樣一來,當用戶只需要修改用戶界面時,只需修改表示層即可,不會影響到業(yè)務邏輯部分的代碼。

因為篇幅及代碼類似的原因,本書中只對“學生信息”管理部分進行設計說明。10.1.1表示層的創(chuàng)建

表示層位于最外層,是離用戶最近的層,用于顯示數(shù)據(jù)和接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作界面。

1.項目的創(chuàng)建

在JBuilder2005環(huán)境下,選擇【File】→【NewProject】選項,新建項目。

在彈出的項目創(chuàng)建向?qū)У谝豁摰摹綨ame】文本框中輸入StudentScoreManager,【Directory】下拉框中選擇存放項目的路徑,這里選擇“C:/JavaExp/StudentScoreManager”,如圖10-1所示。

單擊【Next】按鈕繼續(xù)下一步,或單擊【Finish】按鈕完成創(chuàng)建項目。圖10-1項目創(chuàng)建向?qū)У谝豁?/p>

2.主界面

在JBuilder2005環(huán)境下,選擇【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?!靶薷摹卑粹o的Name屬性設為btnUpdate;“取消”按鈕的Name屬性設為btnCancel。新建Frame窗體,命名為UpdateStudentInfoOkFrame。單擊【Design】選項卡,在窗體上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如圖10-6所示。文本框的Text屬性設為空?!澳小眴芜x按鈕的Selected屬性設為True?!皩W號”后文本框的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數(shù)據(jù)訪問層的創(chuàng)建

數(shù)據(jù)訪問層主要實現(xiàn)對數(shù)據(jù)的保存和讀取操作,即增刪查改。數(shù)據(jù)訪問層通常為類庫。這里涉及到的數(shù)據(jù)庫驅(qū)動和連接的類是java.sql包中的類,且只能在數(shù)據(jù)訪問層使用,而不能在界面層和業(yè)務邏輯層使用,否則將不是三層結(jié)構(gòu)。

在“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;

}

/**

*按學號刪除,本應在刪除學生信息表中的學生時,

*同時刪除用戶表、成績表中該學生的學號。

*也就需要相應的實體類和數(shù)據(jù)訪問層,業(yè)務邏輯層代碼。

*因篇幅原因,此處略去。只完成對學生信息表的刪除。

*@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();

}

}

/**

*添加學生,本應在添加學生信息表中的學生時,

*同時添加用戶表、成績表中該學生的學號。

*也就需要相應的實體類和數(shù)據(jù)訪問層,業(yè)務邏輯層代碼。

*因篇幅原因,此處略去。只完成對學生信息表的添加。

*@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業(yè)務邏輯層的創(chuàng)建

業(yè)務邏輯層是表示層和數(shù)據(jù)訪問層之間通信的橋梁,主要負責數(shù)據(jù)的傳遞和處理,例如數(shù)據(jù)的有效性的檢查、業(yè)務邏輯描述等相關(guān)功能。業(yè)務邏輯層通常為類庫。

業(yè)務實體類的創(chuàng)建方法如下:在“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;

}

}創(chuàng)建業(yè)務邏輯類,完成數(shù)據(jù)訪問層與表示層之間的數(shù)據(jù)傳遞。在“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();

}

/**

*根據(jù)學號查詢學生信息

*@paramsnoString學號

*@returnArrayList

*/

publicArrayListgetStudentBySNo(Stringsno){

returnstuDAO.getStudentBySNo(sno);

}

/**

*根據(jù)班級查詢學生信息

*@paramsclassString班級

*@returnArrayList

*/

publicArrayListgetStudentByClass(Stringsclass){

returnstuDAO.getStudentByClass(sclass);

}/**

*添加學生信息

*@paramstuStudentInfo一個學生信息

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

*/

publicStringinsertStudent(StudentInfostu){

Stringsno=stu.getSNo();

Stringmessage="";

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

message="該學生已經(jīng)存在!請重新輸入!";

}

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表示層數(shù)據(jù)綁定

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

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)設置表格的內(nèi)容方法:

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()表格行數(shù)

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

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

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

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

}

//取查詢值文本框的值

Stringtextsel=txtSelSNo.getText();

ArrayListlist=null;

//查詢

//判斷查詢內(nèi)容,并取查詢結(jié)果集

if(rdoSNo.isSelected())

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

elseif(rdoClass.isSelected())

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

else

list=stuService.getAllStudent();

//向表格添加查詢結(jié)果

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,"還未曾輸入過姓名或?qū)W號");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)修改學生信息“修改界面”代碼如下。

①界面的同名構(gòu)造方法代碼:

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設計文檔

設計過程中會產(chǎn)生“項目計劃書”“需求分析說明書”“概要設計說明書”“數(shù)據(jù)庫設計說明書”“用戶界面設計說明書”“詳細設計說明書”“測試文檔”“用戶手冊”等文檔。“需求分析說明書”請參照附錄A。這里對主要的“概要設計說明書”、“數(shù)據(jù)庫設計說明書”和“詳細設計說明書”進行說明。10.2.1概要設計說明書

此處僅有正文部分,完整的概要設計報告見附錄B或光盤中的示例。

I.文檔介紹

I.1文檔目的

眾所周知,隨著信息化的逐漸推廣,近些年隨著學生人數(shù)的增多、教學工作的需要,一些院校對通過軟件管理信息化的學生成績的工作要求也呈現(xiàn)出增加的趨勢,他們也希望通過軟件來完成繁重的學生成績管理工作,以取代以前的人工工作,提高工作效率,以達到學校信息化管理的目的。

根據(jù)客戶需求分析報告,進行項目概要設計,以便于進一步地詳細分析設計。

I.2文檔范圍

本文檔用于軟件設計階段的概要設計,它的上游(依據(jù)的基線)是《需求分析報告》,它的下游是《詳細設計報告》。

軟件概要設計的范圍是:設計系統(tǒng)的總體架構(gòu),分模塊之間的邏輯關(guān)系。

I.3讀者對象

本文檔供詳細分析設計人員參考。

I.4參考文獻

尉鵬博.學生成績管理系統(tǒng)需求分析報告.某學院計算機工程系“數(shù)據(jù)庫原理與應用”課題組,2008,6,8

I.5術(shù)語與縮寫解釋

本文檔涉及術(shù)語與縮寫解釋見表10-3。

II.模塊命名規(guī)則

設計及編程中應參考并遵循:Java編碼規(guī)范。

III.模塊匯總

III.1模塊匯總表

按功能模塊劃分,見表10-4。按邏輯劃分,見表10-5。

III.2模塊關(guān)系圖

系統(tǒng)擬采用C/S架構(gòu)。服務器布置SQLServer2005數(shù)據(jù)庫管理系統(tǒng);客戶端擬采用純Java開發(fā)Application應用,使客戶端能夠?qū)崿F(xiàn)跨平臺應用;數(shù)據(jù)連接采用JDBC-ODBC橋連接遠端的SQLServer,連接方式采用長連接方式。

邏輯結(jié)構(gòu)如圖10-9所示。

表示層通過SWING的事件處理機制連接業(yè)務邏輯層;而業(yè)務邏輯層則通過數(shù)據(jù)接口訪問數(shù)據(jù)庫。圖10-9模塊關(guān)系圖

IV.業(yè)務邏輯

首次登錄使用如圖10-10所示。圖10-10首次登錄使用日常管理員維護操作如圖10-11所示。圖10-11日常管理員維護操作業(yè)務邏輯流程圖日常學生查詢操作如圖10-12所示。圖10-12日常學生查詢業(yè)務邏輯流程圖日常班主任查詢操作如圖10-13所示。圖10-13日常班主任查詢操作業(yè)務邏輯流程圖日常教師查詢錄入操作如圖10-14所示。圖10-14日常教師查詢錄入操作業(yè)務邏輯流程圖10.2.2數(shù)據(jù)庫設計說明書

此處僅有正文部分,完整的數(shù)據(jù)庫設計報告見附錄C或光盤中的示例。

I.文檔介紹

I.1文檔目的

眾所周知,隨著信息化的逐漸推廣,近些年隨著學生人數(shù)的增多、教學工作的需要,一些院校對通過軟件管理信息化的學生成績的工作要求也呈現(xiàn)出增加的趨勢,他們也希望通過軟件來完成繁重的學生成績管理工作,以取代以前的人工工作,提高工作效率,以達到學校信息化管理的目的。

根據(jù)系統(tǒng)總體設計要求,本文檔是對該系統(tǒng)中的數(shù)據(jù)庫進行設計,以便于進一步地詳細分析設計。

I.2文檔范圍

數(shù)據(jù)庫用戶表設計、字段設計、約束設計。

I.3讀者對象

總體設計人員、詳細分析設計人員、各窗體模塊代碼編寫人員。

I.4參考文獻

[1]尉鵬博.學生成績管理系統(tǒng)用戶需求分析報告.某學院計算機工程系“數(shù)據(jù)庫原理與應用”課題組,2008,6,8

[2]尉鵬博.學生成績管理系統(tǒng)概要設計報告.某學院計算機工程系“數(shù)據(jù)庫原理與應用”課題組,2008,6,9

I.5術(shù)語與縮寫解釋

本文檔涉及術(shù)語與縮寫解釋見表10-6。

II.數(shù)據(jù)庫環(huán)境說明

(1)數(shù)據(jù)庫系統(tǒng):MicrosoftSQLServer2005Professional。

設計工具:SSMS。

(2)詳細配置。

數(shù)據(jù)庫名稱:StudentScoreManager。

登錄賬戶:sa。

登錄密碼:123。

數(shù)據(jù)源名:StudentScore。

III.數(shù)據(jù)庫的命名規(guī)則

數(shù)據(jù)庫表規(guī)則:單個英文單詞首字母大寫。如:學生信息表:StudentInformation。

字段命名規(guī)則:第一個字母是表名的首字母大寫,從第一個單詞開始,首字母大寫。如:學生信息表中學號:SNo。

約束命名規(guī)則:約束名簡寫大寫字母后加下畫線,然后加被約束的表名加列名。如:學生信息表學號為主鍵約束:PK_StudentInformation_SNo。

IV.邏輯設計

根據(jù)概要設計,該系統(tǒng)的數(shù)據(jù)庫實體關(guān)系如圖10-15所示,數(shù)據(jù)庫關(guān)系如圖10-16所示。圖10-15實體關(guān)系圖圖10-16數(shù)據(jù)庫關(guān)系圖

V.物理設計

匯總表如表10-7所示。學生基本信息表StudentInformation如表10-8所示。教師信息表TeacherInformation如表10-9所示。班級信息表ClassInformation如表10-10所示。專業(yè)信息表ProfessionInformation如表10-11所示。課程信息表CourseInformation如表10-12所示。用戶信息表UserInformation如表10-13所示。教師任課表TeacherCourse如表10-14所示。學生成績表StudentScore如表10-15所示。

VI.安全性設計

VI.1防止用戶直接操作數(shù)據(jù)庫的方法

用戶只能用賬號登錄到應用軟件,通過應用軟件訪問數(shù)據(jù)庫,而沒有其他途徑操作數(shù)據(jù)庫。

VI.2用戶賬號密碼的加密方法

提示:對用戶賬號的密碼進行加密處理,確保在任何地方都不會出現(xiàn)密碼的明文。

用戶賬號密碼加密方法:可使用密碼框來對輸入密碼進行保護,避免出現(xiàn)密碼的明文。如界面需要顯示密碼,則密碼用“********”代替。

VI.3角色與權(quán)限

確定每個角色對數(shù)據(jù)庫表的操作權(quán)限,如添加、檢索、更新、刪除等。每個角色擁有剛好能夠完成任務的權(quán)限,不多也不少。在應用時再為用戶分配角色,則每個用戶的權(quán)限等于他所兼角色的權(quán)限之和。

角色與權(quán)限如表10-16所示。

VII.數(shù)據(jù)庫管理與維護說明

提示:在設計數(shù)據(jù)庫的時候,及時給出管理與維護本數(shù)據(jù)庫的方法,有助于將來撰寫出正確完備的用戶手冊。

數(shù)據(jù)庫

StudentScoreManager

服務器

(Server)

優(yōu)化

每1周在星期日發(fā)生,在1:00:00。

執(zhí)行下列操作:

重新組織數(shù)據(jù)頁和索引頁,將可用空間更改為原始空間的10%。

INTEGRITYCHECKS

每1周在星期日發(fā)生,在0:00:00。

備份數(shù)據(jù)庫之前執(zhí)行完整性檢查。

執(zhí)行下列操作:

檢查數(shù)據(jù)庫。

完全備份

每1周在星期日發(fā)生,在2:00:00。

備份媒體:磁盤。

將備份文件存儲在默認的SQLServer備份目錄中。

完成后驗證備份。事務日志備份

每1周在星期一,星期二,星期三,星期四,星期五,星期六發(fā)生,在0:00:00。

備份媒體:磁盤。

將備份文件存儲在默認的SQLServer備份目錄中。

完成后驗證備份。

生成并存儲報表的目錄為:C:\Progr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論