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

下載本文檔

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

文檔簡(jiǎn)介

第10章前臺(tái)數(shù)據(jù)庫(kù)應(yīng)用及設(shè)計(jì)文檔10.1前臺(tái)數(shù)據(jù)庫(kù)應(yīng)用10.2設(shè)計(jì)文檔【小結(jié)】【習(xí)題】【課程要求】

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

2.能讀懂設(shè)計(jì)文檔。

【課程內(nèi)容】

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

10.1前臺(tái)數(shù)據(jù)庫(kù)應(yīng)用

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

因?yàn)槠按a類似的原因,本書中只對(duì)“學(xué)生信息”管理部分進(jìn)行設(shè)計(jì)說明。10.1.1表示層的創(chuàng)建

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

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

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

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

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

2.主界面

在JBuilder2005環(huán)境下,選擇【File】→【New】選項(xiàng),新建Appliction應(yīng)用程序,命名為MainApplication。單擊【Next】按鈕,新建Frame窗體,命名為MainFrame。單擊【Design】選項(xiàng)卡,在窗體上添加SwingContainers中的JMenuBar控件。單擊【Menu】選項(xiàng)卡,輸入如圖10-2所示的各個(gè)菜單項(xiàng)。圖10-2主界面

3.查詢界面

選擇【File】→【New】選項(xiàng),新建Frame窗體,命名為SelStudentInfoFrame。單擊【Design】選項(xiàng)卡,在窗體上添加Swing中的JPanel、ButtonGroup、JRadioButton、JTextField、JButton、JScrollPanel、JTable控件,如圖10-3所示。圖10-3查詢學(xué)生信息界面

4.添加界面

新建Frame窗體,命名為InsertStudentInfoFrame。單擊【Design】選項(xiàng)卡,在窗體上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如圖10-4所示。圖10-4添加學(xué)生信息界面

5.修改界面

新建Frame窗體,命名為UpdateStudentInfoFrame。單擊【Design】選項(xiàng)卡,在窗體上添加Swing中的JPanel、JLabel、JTextField、JButton控件,如圖10-5所示。文本框的Text屬性設(shè)為空;文本框的Name屬性設(shè)為txtNo?!靶薷摹卑粹o的Name屬性設(shè)為btnUpdate;“取消”按鈕的Name屬性設(shè)為btnCancel。新建Frame窗體,命名為UpdateStudentInfoOkFrame。單擊【Design】選項(xiàng)卡,在窗體上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如圖10-6所示。文本框的Text屬性設(shè)為空?!澳小眴芜x按鈕的Selected屬性設(shè)為True?!皩W(xué)號(hào)”后文本框的Name屬性設(shè)為txtNo,“姓名”后文本框的Name屬性設(shè)為txtNo;“男”單選按鈕的Name屬性設(shè)為rdoMan,“女”單選按鈕的Name屬性設(shè)為rdoWoman;“修改”按鈕的Name屬性設(shè)為btnUpdate,“取消”按鈕的Name屬性設(shè)為btnCancel。圖10-5修改學(xué)生信息錄入界面圖10-6修改學(xué)生信息修改界面

6.刪除界面

新建Frame窗體,命名為DeleteStudentInfoFrame。單擊【Design】選項(xiàng)卡,在窗體上添加Swing中的JPanel、JLabel、ButtonGroup、JRadioButton、JTextField、JButton控件,如圖10-7所示。文本框的Text屬性設(shè)為空。文本框的Name屬性設(shè)為txtNo;“修改”按鈕的Name屬性設(shè)為btnDelete,“取消”按鈕的Name屬性設(shè)為btnCancel。圖10-7刪除學(xué)生信息界面10.1.2數(shù)據(jù)訪問層的創(chuàng)建

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

在“StudentInfoManager”包上右擊,選【New】選項(xiàng),在彈出的選項(xiàng)卡中選【Package】選項(xiàng),如圖10-8所示。將新建的包命名為DAO。圖10-8新建包右擊DAO包,選【New】選項(xiàng),在彈出的選項(xiàng)卡中選【Class】選項(xiàng),新建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。完成對(duì)學(xué)生信息的增刪查改。StudentInfoDAO類的代碼如下:

packagestudentscoremanage.DAO;

importjava.util.*;

importjava.sql.*;

importstudentscoremanage.Entity.*;

publicclassStudentInfoDAO{

publicStudentInfoDAO(){

}

/***查詢所有的學(xué)生

*@returnArrayList返回記錄集

*/

publicArrayListgetAllStudent(){

Stringsql="select*fromStudentInformation";

ArrayListlist=find(sql);

returnlist;

}/**

*按學(xué)號(hào)查詢

*@paramsnoString已知學(xué)號(hào)

*@returnArrayList返回記錄集

*/

publicArrayListgetStudentBySNo(Stringsno){

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

ArrayListlist=find(sql);

returnlist;

}/**

*按班級(jí)查詢

*@paramsclassString已知班級(jí)

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

}

/**

*按學(xué)號(hào)刪除,本應(yīng)在刪除學(xué)生信息表中的學(xué)生時(shí),

*同時(shí)刪除用戶表、成績(jī)表中該學(xué)生的學(xué)號(hào)。

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

*因篇幅原因,此處略去。只完成對(duì)學(xué)生信息表的刪除。

*@paramsnoString學(xué)號(hào)

*/publicvoiddeleteStudentInfo(Stringsno){

try{

Connconn=newConn();

Connectioncon=conn.getOdbcConnection();

Statementst=con.createStatement();

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

st.close();

con.close();

}catch(SQLExceptionex){

ex.toString();

}

}/**

*修改學(xué)生信息

*@paramstuStudentInfo已知一個(gè)學(xué)生

*/

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

}

}

/**

*添加學(xué)生,本應(yīng)在添加學(xué)生信息表中的學(xué)生時(shí),

*同時(shí)添加用戶表、成績(jī)表中該學(xué)生的學(xué)號(hào)。

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

*因篇幅原因,此處略去。只完成對(duì)學(xué)生信息表的添加。

*@paramstuStudentInfo已知一個(gè)學(xué)生*/

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è)務(wù)邏輯層的創(chuàng)建

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

業(yè)務(wù)實(shí)體類的創(chuàng)建方法如下:在“StudentInfoManager”包上右擊,選【New】選項(xiàng),在彈出的選項(xiàng)卡中選【Package】選項(xiàng)。將新建的包命名為Entity。

在Entity包中新建Class類,命名為StudentInfo。完成對(duì)學(xué)生信息表各個(gè)字段的讀取。StudentInfo類的代碼如下:packagestudentscoremanage.Entity;

publicclassStudentInfo{

/**

*字段

*/

StringSNo;//學(xué)號(hào)

StringSName;//姓名

StringSSex;//性別

publicStudentInfo(){

}/**

*取學(xué)號(hào)的值

*@returnString

*/

publicStringgetSNo(){

returnthis.SNo;

}

/**

*設(shè)置學(xué)號(hào)的值

*@paramsnoString

*/

publicvoidsetSNo(Stringsno){

this.SNo=sno;

}/**

*取姓名的值

*@returnString

*/

publicStringgetSName(){

returnthis.SName;

}

/**

*設(shè)置姓名的值

*@paramsnoString

*/

publicvoidsetSName(Stringsname){

this.SName=sname;

}/**

*取性別的值

*@returnString

*/

publicStringgetSSex(){

returnthis.SSex;

}

/**

*設(shè)置性別的值

*@paramsnoString

*/

publicvoidsetSSex(Stringssex){

this.SSex=ssex;

}

}創(chuàng)建業(yè)務(wù)邏輯類,完成數(shù)據(jù)訪問層與表示層之間的數(shù)據(jù)傳遞。在“StudentInfoManager”包上右擊,選【New】選項(xiàng),在彈出的選項(xiàng)卡中選【Package】選項(xiàng)。將新建的包命名為Service。

在Service包中新建Class類,命名為StudentInfoService。完成對(duì)學(xué)生信息表各個(gè)字段的讀取。StudentInfoService類的代碼如下:packagestudentscoremanage.Service;

importjava.util.*;

importstudentscoremanage.DAO.*;

importstudentscoremanage.Entity.*;

publicclassStudentInfoService{

/**

*對(duì)DAO實(shí)例化

*/

StudentInfoDAOstuDAO=newStudentInfoDAO();publicStudentInfoService(){

}

/**

*查詢

*/

/**

*查詢所有的學(xué)生

*@returnArrayList

*/

publicArrayListgetAllStudent(){

returnstuDAO.getAllStudent();

}

/**

*根據(jù)學(xué)號(hào)查詢學(xué)生信息

*@paramsnoString學(xué)號(hào)

*@returnArrayList

*/

publicArrayListgetStudentBySNo(Stringsno){

returnstuDAO.getStudentBySNo(sno);

}

/**

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

*@paramsclassString班級(jí)

*@returnArrayList

*/

publicArrayListgetStudentByClass(Stringsclass){

returnstuDAO.getStudentByClass(sclass);

}/**

*添加學(xué)生信息

*@paramstuStudentInfo一個(gè)學(xué)生信息

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

*/

publicStringinsertStudent(StudentInfostu){

Stringsno=stu.getSNo();

Stringmessage="";

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

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

}

else{

stuDAO.insertStudentInfo(stu);

message="該學(xué)生添加成功!";

}

returnmessage;

}/**

*刪除學(xué)生信息

*@paramsnoString一個(gè)學(xué)生的學(xué)號(hào)

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

*/

publicStringdeleteStudent(Stringsno){

Stringmessage="";

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

message="該學(xué)生不存在,不能刪除!請(qǐng)重新輸入!";

}

else{

stuDAO.deleteStudentInfo(sno);

message="該學(xué)生刪除成功!";

}

returnmessage;

}/**

*修改學(xué)生信息

*@paramstuStudentInfo要修改學(xué)生信息

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

*/

publicStringupdateStudent(StudentInfostu){

Stringsno=stu.getSNo();

Stringmessage="";

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

message="該學(xué)生不存在,不能修改!請(qǐng)重新輸入!";

}

else{

stuDAO.updateStudentInfo(stu);

message="該學(xué)生修改成功!";

}

returnmessage;

}

}10.1.4表示層數(shù)據(jù)綁定

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

StudentInfoServicestuService=newStudentInfoService();

1.主界面

主界面各菜單項(xiàng)的代碼如下。

(1)“退出”菜單項(xiàng)代碼:

voidjMenuFileExit_actionPerformed(ActionEventactionEvent){

System.exit(0);

}(2)“添加學(xué)生信息”菜單項(xiàng)代碼:

publicvoidjMenuItem1_actionPerformed(ActionEvente){

InsertStudentInfoFrameinsStuFrame=newInsertStudentInfoFrame();

insStuFrame.setTitle("添加學(xué)生信息");

insStuFrame.show();

}

(3)“修改學(xué)生信息”菜單項(xiàng)代碼:

publicvoidjMenuItem3_actionPerformed(ActionEvente){

UpdateStudentInfoFrameupStuFrame=newUpdateStudentInfoFrame();

upStuFrame.setTitle("修改學(xué)生信息");

upStuFrame.show();

}(4)“刪除學(xué)生信息”菜單項(xiàng)代碼:

publicvoidjMenuItem2_actionPerformed(ActionEvente){

DeleteStudentInfoFramedelStuFrame=newDeleteStudentInfoFrame();

delStuFrame.setTitle("刪除學(xué)生信息");

delStuFrame.show();

}

(5)“查詢學(xué)生信息”菜單項(xiàng)代碼:

publicvoidjMenuItem4_actionPerformed(ActionEvente){

SelStudentInfoFrameselStuFrame=newSelStudentInfoFrame();

selStuFrame.setTitle("查詢學(xué)生信息");

selStuFrame.show();

}

2.查詢界面

查詢界面各菜單項(xiàng)的代碼如下。

(1)設(shè)置表格的表頭方法:

publicVectorsetColName(){

VectorcolName=newVector();

colName.addElement(“學(xué)號(hào)”);

colName.addElement(“姓名”);

colName.addElement(“性別”);

returncolName;

}(2)設(shè)置表格的內(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("按班級(jí)查詢");

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("按學(xué)號(hào)查詢");

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號(hào)");else{

StudentInfostu=newStudentInfo();

stu.setSNo(sno);

stu.setSName(sname);

stu.setSSex(ssex);

message=stuService.insertStudent(stu);

JOptionPane.showMessageDialog(null,message);

this.dispose();

}

}4.修改界面

(1)修改學(xué)生信息“錄入界面”代碼如下。

“修改”按鈕的代碼:

publicvoidbtnUpdate_actionPerformed(ActionEvente){

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

if(sno=="")

JOptionPane.showMessageDialog(null,"學(xué)號(hào)不能為空");

else{

ArrayListlist=stuService.getStudentBySNo(sno);

if(list.size()==0)

JOptionPane.showMessageDialog(null,"該學(xué)號(hào)不存在!");else{

UpdateStudentInfoOkFrameupStuOkFrame=new

UpdateStudentInfoOkFrame(sno);//傳遞學(xué)號(hào)到修改界面

upStuOkFrame.setTitle("修改學(xué)生信息");

upStuOkFrame.show();

this.dispose();

}

}

}(2)修改學(xué)生信息“修改界面”代碼如下。

①界面的同名構(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("學(xué)號(hào)");

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,"學(xué)號(hào)不能為空!");

else{

message=stuService.deleteStudent(sno);

JOptionPane.showMessageDialog(null,message);

}

this.dispose();

}

10.2設(shè)計(jì)文檔

設(shè)計(jì)過程中會(huì)產(chǎn)生“項(xiàng)目計(jì)劃書”“需求分析說明書”“概要設(shè)計(jì)說明書”“數(shù)據(jù)庫(kù)設(shè)計(jì)說明書”“用戶界面設(shè)計(jì)說明書”“詳細(xì)設(shè)計(jì)說明書”“測(cè)試文檔”“用戶手冊(cè)”等文檔?!靶枨蠓治稣f明書”請(qǐng)參照附錄A。這里對(duì)主要的“概要設(shè)計(jì)說明書”、“數(shù)據(jù)庫(kù)設(shè)計(jì)說明書”和“詳細(xì)設(shè)計(jì)說明書”進(jìn)行說明。10.2.1概要設(shè)計(jì)說明書

此處僅有正文部分,完整的概要設(shè)計(jì)報(bào)告見附錄B或光盤中的示例。

I.文檔介紹

I.1文檔目的

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

根據(jù)客戶需求分析報(bào)告,進(jìn)行項(xiàng)目概要設(shè)計(jì),以便于進(jìn)一步地詳細(xì)分析設(shè)計(jì)。

I.2文檔范圍

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

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

I.3讀者對(duì)象

本文檔供詳細(xì)分析設(shè)計(jì)人員參考。

I.4參考文獻(xiàn)

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

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

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

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

設(shè)計(jì)及編程中應(yīng)參考并遵循:Java編碼規(guī)范。

III.模塊匯總

III.1模塊匯總表

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

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

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

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

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

IV.業(yè)務(wù)邏輯

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

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

I.文檔介紹

I.1文檔目的

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

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

I.2文檔范圍

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

I.3讀者對(duì)象

總體設(shè)計(jì)人員、詳細(xì)分析設(shè)計(jì)人員、各窗體模塊代碼編寫人員。

I.4參考文獻(xiàn)

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

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

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

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

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

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

設(shè)計(jì)工具:SSMS。

(2)詳細(xì)配置。

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

登錄賬戶:sa。

登錄密碼:123。

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

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

數(shù)據(jù)庫(kù)表規(guī)則:?jiǎn)蝹€(gè)英文單詞首字母大寫。如:學(xué)生信息表:StudentInformation。

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

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

IV.邏輯設(shè)計(jì)

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

V.物理設(shè)計(jì)

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

VI.安全性設(shè)計(jì)

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

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

VI.2用戶賬號(hào)密碼的加密方法

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

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

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

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

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

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

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

數(shù)據(jù)庫(kù)

StudentScoreManager

服務(wù)器

(Server)

優(yōu)化

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

執(zhí)行下列操作:

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

INTEGRITYCHECKS

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

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

執(zhí)行下列操作:

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

完全備份

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

備份媒體:磁盤。

將備份文件存儲(chǔ)在默認(rèn)的SQLServer備份目錄中。

完成后驗(yàn)證備份。事務(wù)日志備份

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

備份媒體:磁盤。

將備份文件存儲(chǔ)在默認(rèn)的SQLServer備份目錄中。

完成后驗(yàn)證備份。

生成并存儲(chǔ)報(bào)表的目錄為:C:\Progr

溫馨提示

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

評(píng)論

0/150

提交評(píng)論