![《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件第10章_第1頁(yè)](http://file4.renrendoc.com/view14/M01/21/06/wKhkGWaSMZiAXV6gAACeeTSCEMw588.jpg)
![《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件第10章_第2頁(yè)](http://file4.renrendoc.com/view14/M01/21/06/wKhkGWaSMZiAXV6gAACeeTSCEMw5882.jpg)
![《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件第10章_第3頁(yè)](http://file4.renrendoc.com/view14/M01/21/06/wKhkGWaSMZiAXV6gAACeeTSCEMw5883.jpg)
![《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件第10章_第4頁(yè)](http://file4.renrendoc.com/view14/M01/21/06/wKhkGWaSMZiAXV6gAACeeTSCEMw5884.jpg)
![《數(shù)據(jù)庫(kù)原理與應(yīng)用》課件第10章_第5頁(yè)](http://file4.renrendoc.com/view14/M01/21/06/wKhkGWaSMZiAXV6gAACeeTSCEMw5885.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)慶節(jié)團(tuán)建主題活動(dòng)方案
- ktv國(guó)慶節(jié)的朋友圈活動(dòng)方案
- 2024-2025學(xué)年新教材高中語文 第三單元 7.1 青蒿素:人類征服疾病的一小步(1)說課稿 部編版必修下冊(cè)
- 2024-2025學(xué)年高中語文 第二單元 七 仁義禮智我固有之說課稿5 新人教版選修《先秦諸子選讀》
- 2025變更勞動(dòng)合同范文
- 2025智能化施工合同
- Unit 12 Weather(說課稿)-2024-2025學(xué)年滬教牛津版(深圳用)英語四年級(jí)上冊(cè)
- 門診手術(shù)策劃方案
- 出資比例 英語合同范例
- 云杉買賣合同范例
- 電動(dòng)工具培訓(xùn)課件
- 《智能網(wǎng)聯(lián)汽車智能傳感器測(cè)試與裝調(diào)》電子教案
- 視頻會(huì)議室改造方案
- 【中考真題】廣東省2024年中考語文真題試卷
- GB/T 32399-2024信息技術(shù)云計(jì)算參考架構(gòu)
- 2025年湖南省長(zhǎng)沙市中考數(shù)學(xué)模擬試卷(附答案解析)
- 五級(jí)人工智能訓(xùn)練師(初級(jí))職業(yè)技能等級(jí)認(rèn)定考試題庫(kù)(含答案)
- 2022年內(nèi)蒙古呼和浩特市中考化學(xué)真題(解析版)
- 血栓性微血管病的診治
- 綜合客運(yùn)樞紐換乘區(qū)域設(shè)施設(shè)備配置要求JTT1066-2016
- 中國(guó)急性缺血性卒中診治指南(2023)解讀
評(píng)論
0/150
提交評(píng)論