畢業(yè)設(shè)計(論文)JAVA+SQL學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)
江蘇大學(xué) 畢業(yè)設(shè)計論文 學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn) THE DESIGN AND REALIZATION OF THE RESULT OF STUDENT ADMINISTRATION MANAGEMENT SYSTEM 學(xué)生姓名: 學(xué) 號: 年級專業(yè):2004 級計算機科學(xué)與技術(shù) 指導(dǎo)老師: 學(xué) 院:應(yīng)用科學(xué)技術(shù)學(xué)院 提 交 日 期 : 年 月 2 目 錄 摘 要 .3 一、 開發(fā)平臺及工具簡介 .5 二、系統(tǒng)分析 .7 (一)學(xué)生成績管理系統(tǒng)概述 .7 (二) 需求分析 .8 1) 功能需求分析 .8 2) 性能需 求分析 .9 3)數(shù)據(jù)庫需求分析數(shù)據(jù)流圖 .9 4) 數(shù)據(jù)結(jié)構(gòu)分析數(shù)據(jù)流圖 .10 (三)系統(tǒng)功能結(jié)構(gòu)設(shè)計 .12 三、 系統(tǒng)設(shè)計 .13 (一)設(shè)計目標(biāo) .13 (二)開發(fā)及運行環(huán)境 .13 (三) 數(shù)據(jù)庫設(shè)計 .14 四、系統(tǒng)的實現(xiàn) .17 (一)學(xué)生查詢成績部分 .17 (二)后臺管理成績部分 .19 登陸模塊 .19 年紀(jì)班級管理模塊 .20 課程管理模塊 .24 評分模塊 .24 學(xué)生信息管理模塊 .27 管理員模塊 .29 五、系統(tǒng)存在的問題及前景展望 .30 (一)系統(tǒng)存在問題 .30 (二)前景展望 .30 參考文獻(xiàn) .31 3 摘要 隨著現(xiàn)代計算機科學(xué)的發(fā)展,計算機信息系統(tǒng)越來越受到重視, 網(wǎng)絡(luò)已經(jīng)成為人們交流信息的重要方式,所以基于網(wǎng)絡(luò)平臺的各種 系統(tǒng)不斷出現(xiàn),B/S 結(jié)構(gòu)的軟件已經(jīng)成為人們生活工作的一種重要 工具。本文將介紹如何使用 java 后臺結(jié)合 RIA 富客戶端技術(shù)制作學(xué) 生管理系統(tǒng),其中涉及到數(shù)據(jù)庫的建立和系統(tǒng)模塊功能的實現(xiàn),并 在最后說明了系統(tǒng)存在問題和前景展望。 關(guān)鍵詞:java,SQL ,TOMCAT,學(xué)生成績管理 4 Abstract Along with the modern computer science development, the computer information system is more and more important, the network already became the people to exchange the information important way, therefore appeared systems that based on network platform, the B/S system already became one kind of important tool which the people exchanged. Now we will introduce how to use java and RIA to develop a student score management system. This part including database creation and the system function realization. Finally expound the matter and shortage of the system, in order to ameliorate better in the future. Keywords: java, SQL, TOMCAT,Student score management 5 一、開發(fā)平臺及工具簡介 1、Java 概述 Java 包括 Java 編程語言、開發(fā)工具和環(huán)境、Java 類庫等。 Java 語言是美國 SUN 公司開發(fā)的一種完全面向?qū)ο蟮某绦蛟O(shè)計語言。 Java 語言由 C+語言發(fā)展而來,但比 C+語言簡單。Java 語言具有簡單、與 平臺無關(guān)、高效、健壯、安全、多線程等特點,它是當(dāng)前網(wǎng)絡(luò)編程中的首選 語言。 JDK 提供了 Java 程序的編譯和運行方式,并且編譯和運行都是命令行方 式。JDK 本身沒有提供源程序編輯環(huán)境,沒有提供可視化的集成開發(fā)環(huán)境 (Integrated Development Environment,IDE) 。有一些其他 Java 開發(fā)工具提供集 成開發(fā)環(huán)境,如 Eclipse、 JCreator、JBuilder 等,它們都是建立在 JDK 的運行 時環(huán)境之上的。 Java 是一門編譯語言(compiled language),但它不直接生成硬件處理器 指令,而是生成一種字節(jié)碼(bytecodes)這種字節(jié)碼由 Java 虛擬機解釋執(zhí)行。 Java 虛擬機(Java Virtual Machine,JVM)實際上是一個程序,它定義了 指令集、寄存器集、類文件結(jié)構(gòu)棧、垃圾收集堆、內(nèi)存區(qū)域等,提供了跨平 臺能力的基礎(chǔ)框架。 Java 虛擬機實現(xiàn)了一臺理想的計算機,并可以優(yōu)化運行 Java 程序。因此, 一個 Java 程序其實是被 Java 虛擬機執(zhí)行的,而 Java 虛擬機運行于實際的處理 器之上。 Java 虛擬機執(zhí)行應(yīng)用程序具有以下三個典型特點: 1)JavaJava 2、SQL Server 2000 SQL Server 2000 是 Microsoft 公司推出的 SQL Server 數(shù)據(jù)庫管理系統(tǒng) 的最新版本該版本繼承了 SQL Server 7.0 版本的優(yōu)點同時又比它增加了許多 更先進(jìn)的功能具有使用方便可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點可跨越 從運行 Microsoft Windows 98 的膝上型電腦到運行 Microsoft Windows 2000 的大型多處理器的服務(wù)器等多種平臺使用。它的優(yōu)點有: 1)上手容易,學(xué)習(xí) SQL Server 是掌握其他平臺及大型數(shù)據(jù),如 Oracle,Sybase,DB/2 的基礎(chǔ)。因為這些大型數(shù)據(jù)庫對于設(shè)備、平臺、人員知識 的要求往往較高,而并不是每個人都具備這樣的條件,且有機會去接觸它們。 但有了 SQL Server 的基礎(chǔ),再去學(xué)習(xí)和使用它們就容易多了。IT 行業(yè)的實踐 經(jīng)驗充分證明了這一點。 2)兼容性良好,由于今天 Windows 操作系統(tǒng)占領(lǐng)著主導(dǎo)地的位,選擇 SQL Server 一定會在兼容性方面取得一些優(yōu)勢。另外,SQL Server 2000 除了 具有擴展性,可靠性以外,還具有可以迅速開發(fā)新的因特網(wǎng)系統(tǒng)的功能。尤 其是它可以直接存貯 XML 數(shù)據(jù),可以將搜索結(jié)果以 XML 格式輸出等特點, 有利于構(gòu)建了異構(gòu)系統(tǒng)的互操作性,奠定了面向互聯(lián)網(wǎng)的企業(yè)應(yīng)用和服務(wù)的 基石。這些特點在.NET 戰(zhàn)略中發(fā)揮著重要的作用。 3)相對于 7.0 的憂越性,Microsoft SQL Server 2000 是在 SQL Server 7.0 的 基礎(chǔ)上對性能、可靠性、質(zhì)量以及易用性進(jìn)行了擴展。SQL Server 2000 中包 6 含許多新特性,這些特性使其成為針對電子商務(wù)、數(shù)據(jù)倉庫和在線商務(wù)解決 方案的卓越的數(shù)據(jù)庫平臺。其增強的特性包括對豐富的擴展標(biāo)記語言 (XML)的支持、綜合分析服務(wù)以及便捷的數(shù)據(jù)庫管理。 4)電子商務(wù),在使用由 Microsoft SQL Server 2000 關(guān)系數(shù)據(jù)庫引擎的情況 下,XML 數(shù)據(jù)可在關(guān)系表中進(jìn)行存儲,而查詢則能以 XML 格式將有關(guān)結(jié)果 返回。此外,XML 支持還簡化了后端系統(tǒng)集成,并實現(xiàn)了跨防火墻的無縫數(shù) 據(jù)傳輸。你還可以使用 Hypertext Transfer Protocol(超文本傳輸協(xié)議, HTTP)來訪問 SQL Server 2000,以實現(xiàn)面向 SQL Server 2000 數(shù)據(jù)庫的安全 Web 連接和無須額外編程的聯(lián)機分析處理( OLAP)多維數(shù)據(jù)集。 5)數(shù)據(jù)倉庫,Microsoft SQL Server 2000 非常明顯的改進(jìn)就是增加了 OLAP(聯(lián)機分析處理)功能,這可以讓很多中小企業(yè)用戶也可以使用數(shù)據(jù)倉庫的 一些特性進(jìn)行分析。OLAP 可以通過多維存儲技術(shù)對大型、復(fù)雜數(shù)據(jù)集執(zhí)行快 速、高級的分析工作。數(shù)據(jù)挖掘功能能夠揭示出隱藏在大量數(shù)據(jù)中的傾向及 趨勢,它允許組織或機構(gòu)最大 限度的從數(shù)據(jù)中獲取價值。通過對現(xiàn)有數(shù)據(jù)進(jìn)行有效分析,這一功能可以對 未來的趨勢進(jìn)行預(yù)測。 6)增強的在線商務(wù),Microsoft SQL Server 2000 簡化了管理、優(yōu)化工作, 并且增強了迅速、成功的部署在線商務(wù)應(yīng)用程序所需的可靠性和伸縮性。其 中,用以提高可靠性的特性包括日志傳送、在線備份和故障切換群集。在伸 縮性方面的改進(jìn)包括對多達(dá) 32 顆 CPU 和 64 GB RAM 的支持。通過自動優(yōu)化 和改進(jìn)后的管理特性-諸如數(shù)據(jù)文件尺寸的自動管理、基于向?qū)У臄?shù)據(jù)庫拷貝、 自動內(nèi)存管理和簡化的故障切換群集安裝與管理,在線商務(wù)應(yīng)用程序能夠被 迅速部署并有效管理。 7)利于構(gòu)筑敏捷性商務(wù) ,所謂敏捷性商務(wù) 就是能夠打破內(nèi)部和外部 的商業(yè)界限,對迅速改變的環(huán)境做出快速反應(yīng)。 。微軟已經(jīng)與關(guān)鍵的合作伙伴 建立起了戰(zhàn)略關(guān)系,創(chuàng)造出了能夠與許多供應(yīng)商的產(chǎn)品實現(xiàn)整合的解決方案, 因而企業(yè)用戶并不需要做出要么完全接受,要么全部不要 的承諾。在部署解 決方案的過程中,企業(yè)用戶不一定要拆除原有的設(shè)備從頭。敏捷商務(wù)讓企業(yè) 用戶能夠充分利用現(xiàn)有的系統(tǒng),自主決定所需的硬件和軟件解決方案以及由 誰來提供,伸縮自如、游刃有余。 3、TOMCAT 簡介 Tomcat 是一個帶有 jsp 環(huán)境的 servlet 容器.servlet 容器是一個根據(jù)用戶的行 為可以管理和激活 servlet 的運行時的 shell. 啟動與關(guān)閉 Tomcat,使用”bin” 目錄中的腳本啟動與關(guān)閉 Tomcat. 啟動: uinx:bin/startup.sh , win32:binstartup 。關(guān)閉: unix:bin/shutdown.sh ,win32:binshutdown 。 Tomcat 目錄結(jié)構(gòu) ,目錄名- 描述: bin 包含啟動/關(guān)閉腳本 ;conf 包含不 同的配置文件, 包括 server.xml(Tomcat 的主要配置文件 )和為不同的 Tomcat 配置的 web 應(yīng)用設(shè)置缺省值的文件 web.xml ; doc 包含各種 Tomcat 文檔 ;lib 包含 Tomcat 使用的 jar 文件.unix 平臺此目錄下的任何文件都被加到 Tomcat 的 classpath 中 ; logs Tomcat 擺放日志文件的地方 ;src ServletAPI 源 文件.先別高興,這些只有些必須在 Servlet 容器內(nèi)實現(xiàn)的空接口和抽象類 ;webapps 包含 web 項目示例 ,此外 Tomcat 會創(chuàng)建如下目錄: work 7 ,Tomcat 自動生成,放置 Tomcat 運行時的臨時文件(如編譯后的 JSP 文件).如 在 Tomcat 運行時刪除此目錄.JSP 頁面將不能運行;classes 可以創(chuàng)建此目錄來 添加一些附加的類到類路徑中.任何加到此目錄中的類都可在 Tomcat 的類路徑 中找到自身. Tomcat 的腳本 ,Tomcat 是一個 Java 程序,因此在設(shè)置好幾個環(huán)境變量后即 可用命令行的方式運行.然而設(shè)置 Tomcat 使用的每個環(huán)境變量和如下的命令行 參數(shù)乏味且易錯.因此,Tomcat 開發(fā)組提供了一些腳本使啟動和關(guān)閉 Tomcat 變 得輕松. 二、系統(tǒng)分析 (一) 學(xué)生成績管理系統(tǒng)概述 1)學(xué)生成績管理系統(tǒng)的發(fā)展背景 學(xué)生成績管理是各大學(xué)的主要日常管理工作之一,涉及到校、系、師、生 的諸多方面,隨著教學(xué)體制的不斷改革,尤其是學(xué)分制、選課制的展開和深入, 學(xué)生成績?nèi)粘9芾砉ぷ骷氨4婀芾砣遮叿敝亍?fù)雜。迫切需要研制開發(fā)一款功 能強大,操作簡單,具有人性化的學(xué)生成績管理系統(tǒng)。 目前研究的現(xiàn)狀在安全性和信息更新化方面存在有一定的不足,各現(xiàn)有系統(tǒng)資 料單獨建立,共享性差;在以管理者為主體的方式中,信息取舍依賴管理者對 于信息的認(rèn)知與喜好,較不容易掌握用戶真正的需求,也因此無法完全滿足用 戶的需求。因此,教務(wù)管理軟件應(yīng)充分依托校園網(wǎng),實現(xiàn)教務(wù)信息的集中管理、 分散操作、信息共享,使傳統(tǒng)的教務(wù)管理朝數(shù)字化、無紙化、智能化、綜合化 的方向發(fā)展,并為進(jìn)一步實現(xiàn)完善的計算機教務(wù)管理系統(tǒng)和全校信息系統(tǒng)打下 良好的基礎(chǔ)。 隨著計算機及網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,Internet/Intranet 應(yīng)用在全球范圍內(nèi)日 益普及,在眾多的網(wǎng)絡(luò)服務(wù)中,Web 給人耳目一新的感覺,而在這其中,網(wǎng)絡(luò) 已經(jīng)日漸普及,任何人可以在網(wǎng)絡(luò)所提供的平臺上進(jìn)行自由的交流,通過網(wǎng)絡(luò), 學(xué)生可以通過在線的網(wǎng)絡(luò)直接查詢程序,而學(xué)校教師也可在網(wǎng)上在線管理學(xué)生 的成績,不需要再去張貼成績單,使用了在線電子系統(tǒng),既便于數(shù)據(jù)查詢不容 易使數(shù)據(jù)丟失,又省去了印刷張貼的麻煩,可謂一舉兩得。 B/S 系統(tǒng)得益于網(wǎng)絡(luò)的興起,采用瀏覽器作為前端用戶操作的平臺,所有 的操作系統(tǒng)都預(yù)裝了網(wǎng)絡(luò)瀏覽器,比如 IE,用戶不用再去費心安裝每個系統(tǒng)的 客戶端就可以通過瀏覽器訪問服務(wù)器上架設(shè)的系統(tǒng) 只是隨著網(wǎng)絡(luò)的發(fā)展,人們不再局限于只查看文字信息圖片這些靜態(tài)信息, 對 B/S 系統(tǒng)的互操作性有了進(jìn)一步的需求,這才興起了 RIA 富客戶端的風(fēng)潮, 使用各種技術(shù)對瀏覽器進(jìn)行功能上的增強,讓它可以滿足現(xiàn)代用戶的需要。 這套學(xué)生成績管理系統(tǒng),就是基于 java 平臺和 ajax 實現(xiàn)的 RIA 富客戶端開發(fā)的, 它包括學(xué)生查詢平臺和后臺管理平臺兩部分,分別為學(xué)生提供成績查詢功能, 8 為老師提供管理學(xué)生成績的功能。 2)方案論證 成績管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺數(shù)據(jù)庫的建 立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個方面。對于前者要求建立起數(shù)據(jù)一致性 和完整性強、數(shù)據(jù)安全性好的庫。而對于后者則要求應(yīng)用程序功能完備,易使用 等特點。 本系統(tǒng)主要完成對學(xué)生成績的管理,包括數(shù)據(jù)庫中表的添加、修改、刪除等。 系統(tǒng)還可以完成對各類信息的瀏覽、查詢、添加、刪除、修改等功能。 3) 開發(fā)工具的選擇 本系統(tǒng)開發(fā)工具:JDK Version1.5+ SQL SERVER 2000 (二) 需求分析 1) 功能需求分析 該學(xué)生成績管理系統(tǒng)具備三方面的功能:一方面是學(xué)生用戶,學(xué)生通過輸入 學(xué)號和密碼進(jìn)下該系統(tǒng)后,可以進(jìn)行一些基礎(chǔ)查詢(學(xué)生信息查詢、班級信息 查詢、課程信息查詢) 、成績管理(成績查詢、計算平均分)重新登陸系統(tǒng);一 方面老師進(jìn)入該系統(tǒng)則比學(xué)生多一些權(quán)限:成績輸入、成績查詢。 具體功能的詳細(xì)描述如下 1 選擇學(xué)生基本維護(hù)菜單命令,即可進(jìn)入 學(xué)生基本維護(hù) 功能窗體,在其中 輸入學(xué)生的相關(guān)信息,如果需要添加或修改學(xué)生信息,則單擊相應(yīng)的按紐,輸 入新信息后單擊添加 就可以了。需要刪除一條信息,則只要選擇這條信息再 點擊 刪除 。在搜索條件中輸入相關(guān)的條件,單擊 查詢就可查找信息。 2 選擇學(xué)生信息查詢菜單命令,即可進(jìn)入學(xué)生信息查詢 功能窗體,在其中的 下拉列表中選擇你要看的信息,則在下面的表格中顯示你要的信息。 3 選擇成績管理 添加成績菜單命令,即可進(jìn)入 添加成績功能窗體,此功 能權(quán)限只有管理員和教師。 4 選擇成績管理 輸入成績 菜單命令,即可進(jìn)入 輸入成績功能窗體, 此功能權(quán)限只有管理員和教師。 5 選擇成績管理 修改成績 界面,此功能規(guī)管理員所有。 6 選擇成績管理 查詢成績界面此界面對學(xué)生也是可見的,它的權(quán)限規(guī)所 有用戶所有。 9 7 選擇登陸 重新登陸 則會返回登陸界面,為用戶提供方便。 8 選擇退出將退出整個系統(tǒng)。 2) 性能需求分析 時間特性要求:在軟件方面,響應(yīng)時間有點慢,因為是用 JBuilder 做的, 它占用內(nèi)存比較大,更新處理時間比較快而且迅速。 安全性:設(shè)立口令號和密碼驗證方式,防止非法用戶登錄進(jìn)行操作。也就 是用戶只有管理員、學(xué)生和教師才能進(jìn)入這個系統(tǒng),用戶憑口令號和密碼進(jìn)入 此系統(tǒng),系統(tǒng)會自動判斷用戶是那種類型,分別擁有不同的權(quán)限。 3) 數(shù)據(jù)庫需求分析數(shù)據(jù)流圖 在教務(wù)系統(tǒng)中功能模塊主要牽涉到的信息包括:是學(xué)生信息(base_info) 、 班級信息(class_info) 、課程信息 (class_info)、成績表 (chengjibiao)、選課表 (xuankebiao)、登陸表(stu) 。 學(xué)生信息:包含學(xué)號(id) 、姓名 (name)、班級(class)、班級(grade) 、性別(sex) 課程信息:包括課程編號(course_id)、課程名稱(coursename) 姓名(name)、成績 (result) 成績表:編號(number) 、學(xué)號 (id)、課程名稱(coursename)、成績(result) 班級信息:班級編號(bjbh)、學(xué)號(id) 、姓名(name) 、班級名稱(bjmc)。 登陸表:口令號(id) 、密碼 (password)。 根據(jù)以上劃分的具體數(shù)據(jù)信息,得到數(shù)據(jù)流圖如 1.1 所示: 1.1 數(shù)據(jù)庫需求分析數(shù)據(jù)流圖 4)數(shù)據(jù)結(jié)構(gòu)分析 學(xué)生信息=組成: 學(xué)號(id)、姓名(name)、班級 (class)、性別(sex) 、地址 (address) 課程信息=組成: 編號(course_id)、課程名稱(coursename)、教師(teacher) 選課信息=組成:編號(select_id) 課程名稱(coursename)、課程編號(course_id) 、 用 戶 登 錄 操 作 登陸信息 錯誤信息 賬號信 息 2 開 發(fā)環(huán)境 與工具 介紹 前端 客戶端我 用的是 Macromedi a Dreamweav er 8 來編 寫 JSP 文 件。中間 業(yè)務(wù)邏輯 層的 JavaBeans 用的是 JBuilderX Enterpris eX 版。數(shù) 據(jù)庫的編 寫是采用 MYSQL 數(shù)據(jù) 庫。 2.1 開發(fā) 環(huán)境 由于 我用的 是 JBuilde rX Enterpri se 版開 發(fā)的這 個系統(tǒng), 這個開 發(fā)軟件 功能十 分強大, 所以自然 對開發(fā)環(huán) 境要求相 對來說比 較高。 1對 系統(tǒng)硬件 的要求: 最小 512M RAM,推薦 786MB RAM。 2. 對 系統(tǒng)平臺 的要求: Windo ws 平臺 CPU:Intel PentiumIII 及以上兼 容系列 500MHz 以上。 操作 系 統(tǒng): M i c r o s o f t W i n d o w s 2 0 0 0 ( S P 4 )、 W i n d o w X P 或 者 W i n d o w s S e r v e r 2 0 0 3 。 Linux 平臺 C P U : I n t e l P e n t i u m I I I 及 以 上 兼 容 系 列 5 0 0 M H z 以 上。 操作 系 統(tǒng): S u n J a v a D e s k t o p S y s t e m R e l e a s e 2 或 者 R e d H a t E n t e r p r i s e L i n u x 3 . 0 2.2 運行 環(huán) 境: 硬件: 適用于數(shù) 據(jù)吞吐量 較大的不 同服務(wù)器; 軟件 :服務(wù)器 端: WINDOWS XP+MySQL 用 戶端: WindowXP+ IE 返回信息 尋找信息 數(shù) 據(jù) 庫 10 學(xué)號(xh)、姓名 (name)、成績 (result) 、教師(teacher) 成績表包括=組成:編號 (number)、學(xué)號(id)、課程名稱(coursename)、成績 (result)、教師(teacher) 課程信息包括=組成:課程編號 (course_id)、課程名稱(coursename)、教師 (teacher) 班級信息=組成:班級編號 (bjbh)、年級(nj)、班級名稱 (bjmc)、人數(shù)(rs)、班主 任(bzr) 登陸表=組成:口令號(id)、密碼(password)、權(quán)限(rightlimit) 1、對圖 1.1 中所涉及的數(shù)據(jù)流描述如下: 1) 數(shù)據(jù)流名:口令號 說明:根據(jù)這個口令號定位到用戶管理數(shù)據(jù)庫,以便進(jìn)行身份驗證。 數(shù)據(jù)流來源:登陸界面輸入的口令號和密碼。 數(shù)據(jù)流去向:其中用戶口令信息將存在于整個操作過程中,防止非法登陸。 數(shù)據(jù)流組成:口令號(文本) ;密碼(文本) 2) 數(shù)據(jù)流名:尋找信息 說明:根據(jù)用戶在學(xué)生信息維護(hù)的時候所填寫的信息。 數(shù)據(jù)流來源:學(xué)生信息維護(hù)界面學(xué)生輸入包含學(xué)號、班級編號、名稱等。 數(shù)據(jù)流去向:學(xué)號將存在整個操作,其它的存入數(shù)據(jù)庫。 數(shù)據(jù)流組成:學(xué)號(文本) ;姓名(文本)等 3) 數(shù)據(jù)流名:尋找信息 說明:根據(jù)用戶在成績管理的時候所填寫的信息。 數(shù)據(jù)流來源:成績輸入、修改、添加等界面用戶輸入包含課程編號、課程 名稱、成績、教師。 數(shù)據(jù)流去向:學(xué)號、班級編號、課程編號將存在整個操作,其它的存入數(shù) 據(jù)庫。 數(shù)據(jù)流組成:課程編號(文本) 、課程名稱(文本) 、教師(文本)等。 4) 數(shù)據(jù)流名:返回信息 說明:根據(jù)用戶在學(xué)生信息維護(hù)的時候所填寫的信息存入了數(shù)據(jù)庫之后。 數(shù)據(jù)流來源:由學(xué)生信息維護(hù)界面學(xué)生輸入的包含學(xué)號、姓名、性別等存 11 入數(shù)據(jù)庫的。 數(shù)據(jù)流去向:學(xué)生信息維護(hù)界面。 數(shù)據(jù)流組成:學(xué)號(文本) 、姓名(文本) 、班級名稱(文本) 、性別(文本) 等。 5) 數(shù)據(jù)流名:返回信息 說明:根據(jù)用戶在成績管理的時候所填寫的信息存入數(shù)據(jù)庫后。 數(shù)據(jù)流來源:由成績管理輸入的包含班級名稱、教師、課程名、成績存入 數(shù)據(jù)庫的。 數(shù)據(jù)流去向:成績管理的各子界面。 數(shù)據(jù)流組成:班級編號(文本) ;班級名稱(文本) ;教師(文本)等 2. 對圖 1.1 中所涉及的處理過程描述如下: 1) 處理過程名:登陸 輸入數(shù)據(jù)流:口令號、密碼 輸出數(shù)據(jù)流:不符合輸入條件的錯誤信息 處理過程邏輯:用 IF 條件進(jìn)行判斷。 2) 處理過程名:班級信息維護(hù) 輸入數(shù)據(jù)流:班級編號、班級名稱、教師等 輸出數(shù)據(jù)流:班級編號、班級名稱等 ,其中班級編號將存在整個操作。 處理過程號:班級編號,其中班級編號將存在整個操作。 3) 處理過程名:學(xué)生信息維護(hù) 輸入數(shù)據(jù)流:學(xué)號、姓名、班級編號、性別等。 輸出數(shù)據(jù)流:學(xué)號、姓名、班級編號、性別等。其中學(xué)號將存在整個操作。 4) 處理過程名:課程查詢 輸入數(shù)據(jù)流:學(xué)號、姓名 輸出數(shù)據(jù)流:學(xué)號、班級名稱、課程名稱、上課時間節(jié)、上課時間天、上 課地點、其中課程編號將存在整個操作。 12 5) 處理過程名:成績輸入 輸入數(shù)據(jù)流:課程編號、課程名稱 輸出數(shù)據(jù)流:編號、學(xué)號、課程名稱、成績 、其中編號和學(xué)號將存在整個 操作。 (三) 系統(tǒng)功能結(jié)構(gòu)設(shè)計 根據(jù)需求分析階段得到的功能需求,管理員、學(xué)生和教師用戶通過輸入口 令號和密碼進(jìn)下該系統(tǒng)后,可以進(jìn)行一些學(xué)生基礎(chǔ)信息查詢(學(xué)生信息查詢、 班級信息查詢、課程信息查詢) 、學(xué)生信息維護(hù)、成績管理(成績查詢、計算平 均分)重新登陸系統(tǒng)、退出。 模塊功能大概可以分為如下 4 個方面:這幾個模塊學(xué)生基礎(chǔ)維護(hù)、成績管 理、登陸、退出。其中基礎(chǔ)維護(hù)還要包括學(xué)生信息維護(hù)、班級信息維護(hù)、課程 信息維護(hù)。成績管理包括成績查詢、添加成績、成績輸入等。綜上所述,得到 客戶端功能模塊圖如下 2.1 所示。 學(xué)生成績管理系統(tǒng) 13 成績管理 重新登陸 三、系統(tǒng)設(shè)計 (一)設(shè)計目標(biāo) 通過對學(xué)生管理工作的調(diào)查和研究,要求系統(tǒng)設(shè)計完成后將達(dá)到以下目標(biāo): 界面設(shè)計友好、美觀,方便管理員的日常操作。 基本信息的全面設(shè)置,數(shù)據(jù)錄入方便、快捷。 具有用戶維護(hù)功能。 最大限度地實現(xiàn)了易維護(hù)性和易操作性。 (二)開發(fā)及運行環(huán)境 硬件平臺: CPU:P41.8GHz; 內(nèi)存:256MB 以上。 軟件平臺: 操作系統(tǒng):Windows2000 Server; 數(shù)據(jù)庫:SQL Server 2000; 開發(fā)工具包:JDK Version1.5 建立環(huán)境,這個過程如下: 在 http:/ JDK(Java2SDK、StandardEdition、v6.0)。JDK 的安裝是首先運行下載得到的 jdk-6u5-windows-i586-p.exe,然后修改系統(tǒng)環(huán)境 管理員模塊 學(xué)生基本信息 登陸 退出 學(xué)生信息維護(hù) 學(xué)生信息查詢 成績查詢 成績修改 成績輸入 圖 2.1 客戶模塊系統(tǒng)功能模塊圖 退出成績添加 學(xué)生模塊 成績 查詢 14 變量,新建 JAVA_HOME=x:jdk6.0,并在 PATH 參數(shù)中加入% JAVA_HOME%bin;,其中x:是安裝 JDK 的硬盤符(c:、d:等) 。 在 http:/jakarta.apache.org/處下載 Tomcat6.0。tomcat 的安裝僅需將 apache- tomcat-5.5.26.zip 帶目錄釋放到硬盤根目錄下(c: 、d:等) ,然后就可以在硬盤 上找到 apache-tomcat-5.5.26 目錄。 啟動則在 apache-tomcat-5.5.26/bin 目錄下執(zhí)行 startup.bat,就可啟動 tomcat 中 一個支持 JSP 網(wǎng)頁技術(shù)的 Web 服務(wù)器。為了不與現(xiàn)有的 Web 服務(wù)器(例如 IIS、PWS 等)沖突,tomcat 的 Web 服務(wù)器使用了 8080 端口。 在瀏覽器的地址欄中鍵入 http:/localhost:8080 或者 http:/127.0.0.1:8080 后,如 果能看到 tomcat 的歡迎頁就說明 JSP 實驗環(huán)境已經(jīng)建成,可進(jìn)入下一步實驗。 要關(guān)閉 Web 服務(wù)器則運行 shutdown.bat。 (三)數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫連接數(shù)據(jù)庫連接對動態(tài)網(wǎng)站來說是最為重要的部分,從 JSP 中訪 問數(shù)據(jù)通常是通過 Java Bean 來實現(xiàn)的。Java 中連接數(shù)據(jù)庫的技術(shù)是 JDBC(Java Database Connectivity)。很多數(shù)據(jù)庫系統(tǒng)帶有 JDBC 驅(qū)動程序,Java 程序就通過 JDBC 驅(qū)動程序與數(shù)據(jù)庫相連,執(zhí)行查詢、提取數(shù)據(jù)等等操作。Sun 公司還開發(fā) 了 JDBC-ODBC bridge,用此技術(shù) Java 程序就可以訪問帶有 ODBC 驅(qū)動程序的 數(shù)據(jù)庫,目前大多數(shù)數(shù)據(jù)庫系統(tǒng)都帶有 ODBC 驅(qū)動程序,所以 Java 程序能訪問 諸如 Oracle、Sybase 、MSSQL Server 和 MS Access 等數(shù)據(jù)庫。 1 JavaBean JavaBeans 是基于 java 的組件模型,由屬性,方法和事件 3 個部分組成。 在該模型中,Javabeans 可以被修改或與其他組件結(jié)合生成新組件或完成的程序。 它是一種 Java 類,通過封裝成為具有某種功能或者處理某個業(yè)務(wù)的對象。因此, 也可以通過嵌在 JSP 頁面內(nèi)的 Java 代碼訪問 Bean 及其方法。Bean 的含義是可 重復(fù)使用的 Java 組件。所謂組件就是一個由可以自行進(jìn)行內(nèi)部管理的一個或幾 個類所組成,外界了解其內(nèi)部信息和運行方式的群體。使用它的對象只能通過 接口來操作。 Bean 實際上是根據(jù) JavaBeans 技術(shù)標(biāo)準(zhǔn)所指定的 Bean 的命名和設(shè)計規(guī)范而 編寫的 Java 類。Bean 并不需要繼承特別的基類(base class)或事項特定的接口 (Interface) 。JavaBeans1.01-A 規(guī)范定義了該組件的 5 種重要的機制: 1) 內(nèi)?。↖ntrospection) :組件可發(fā)表其支持的操作和屬性,同時也支持在其他 組件中發(fā)現(xiàn)重復(fù)利用的對象庫,例如用戶權(quán)限和電子自動回復(fù)等。 2) 通信(Communication ):生成和收集組件的消息事件 3) 持續(xù)(Persistence ):存放組件的狀態(tài)。 4) 屬性(Properties):支持組件布局的控制,包括組件占用的空間和組件的相 對位置。 5) 定制(Customization):開發(fā)者可控制組件所需的改變機制。 6) Javabeans 可實現(xiàn)在設(shè)計平臺被規(guī)定的操作,一般可表示為簡單的圖形界面, 如按鈕,光標(biāo)和菜單等,也可以是不可見的接受并處理事件的操作,如數(shù) 15 據(jù)庫連接 Bean。JSP 吸引人之處很大程度上在于它使用了 Javabeans 組件技 術(shù),但 JSP 中只支持不可見的 Javabeans。 2 jdbc 創(chuàng)建一個簡單的數(shù)據(jù)庫連接 Bean 需要 5 個步驟:導(dǎo)入 JDBC 標(biāo)準(zhǔn)類庫,注 冊數(shù)據(jù)庫驅(qū)動程序,建立數(shù)據(jù)庫連接,數(shù)據(jù)庫操作和關(guān)閉。 1)導(dǎo)入 JDBC 標(biāo)準(zhǔn)類庫 JDBC(Java DataBase Connectivity, Java 數(shù)據(jù)庫連接)是一種可用于執(zhí)行 SQL(Structured Query Language ,結(jié)構(gòu)化查詢語言) 語句的應(yīng)用程序接口,為了將 服務(wù)器從客戶端接受信息存入數(shù)據(jù)庫,需要使用 JDBC 標(biāo)準(zhǔn)類庫,所以需要在 程序的開始加入以下 import 語句: Import java.sql.*; 2)注冊數(shù)據(jù)庫驅(qū)動程序 在一個 JDBC 的驅(qū)動程序被用來建立數(shù)據(jù)庫連接之前,必須向數(shù)據(jù)庫驅(qū)動 程序管理器注冊該驅(qū)動程序。管理器的主要職責(zé)是保證所有的驅(qū)動程序?qū)ο罂?被 JDBC 的用戶程序訪問。當(dāng)一個 JDBC 驅(qū)動程序被載入時,它將自動地在驅(qū) 動程序管理器上注冊。 可以調(diào)用 Class.forName()方法載入一個 JDBC 驅(qū)動程序: String strDBDriver=sun.jdbc.odbc.JdbcOdbcDriver; Class.forName(“strDBDriver ”); Class.forName()是 Java 的 Class 類的靜態(tài)方法,它使 Java 虛擬機動態(tài)的尋找, 載入并連接指定的類。 一個 JDBC 的驅(qū)動程序就是一個可以通過 classpath 找到一個 Java 類。這里 載入的 JDBC_ODBC 橋驅(qū)動程序就在 sun.jdbc.odbc 包中 3)建立數(shù)據(jù)庫連接 載入一個正確的驅(qū)動程序后,就可以用它來建立與數(shù)據(jù)庫的連接了。一個 JDBC 的數(shù)據(jù)庫連接是用數(shù)據(jù)庫 URL 來標(biāo)記的。連接標(biāo)記將告訴驅(qū)動程序管理 器使用哪個驅(qū)動程序和連接哪個數(shù)據(jù)庫。數(shù)據(jù)庫 URL 的基本形式: jdbc:: URL 的第一部分表示使用 JDBC 建立數(shù)據(jù)庫連接。第 2 部分表示所使用的 JDBC 驅(qū)動程序名或網(wǎng)絡(luò)協(xié)議名。第 3 部分是數(shù)據(jù)源標(biāo)記,它映射所需連接的 數(shù)據(jù)庫。例如數(shù)據(jù)庫的數(shù)據(jù)源標(biāo)記是 firm 則同 JDBC-ODBC 橋連接該數(shù)據(jù)庫所 用的數(shù)據(jù)庫 URL 為 jdbc:odbc:firm. 可以通過 DriverManager 類的靜態(tài)方法 getConnection()來建立一個數(shù)據(jù)庫連 接: String strDBUrl=jdbc:odbc:firm; conn=DriverManager.getConnection(strDBUrl,sa,); 一旦建立數(shù)據(jù)庫連接,就可以打開該目標(biāo)數(shù)據(jù)庫,并通過該連接向目標(biāo)數(shù) 據(jù)庫 SQL 指令。SQL 指令通常會執(zhí)行查詢,插入,更新和刪除等數(shù)據(jù)庫操作。 要執(zhí)行 SQL 指令,必須通過 Connection 對象的 createStatement()方法來創(chuàng)建一 個 STMT 對象。STMT 對象提供了許動方法來執(zhí)行不同的數(shù)據(jù)庫操作??梢?通 過以下方式創(chuàng)建 STMT 對象: 16 private Connection conn=null; private Statement stmt=null; ResultSet rs=null; stmt=conn.createStatement(); 4)數(shù)據(jù)操作 與數(shù)據(jù)庫建立了連接后,接著就要進(jìn)行數(shù)據(jù)操作了。數(shù)據(jù)操作包括查詢, 插入,更新和刪除等操作。要對數(shù)據(jù)庫精心操作可以使用 STMT 對象的 executeQuery()方法。executeQuery()方法接受一個 SQL 指令字符串作為參數(shù), 返回結(jié)果信息是 ResultSet 對象。具體如下: rs=stmt.executeQuery(sql); 5)關(guān)閉 因為數(shù)據(jù)庫連接是寶貴和有限的資源,因此必須在數(shù)據(jù)庫操作完畢后即使 釋放數(shù)據(jù)庫連接。Connection 對象提供了一個簡單的關(guān)閉數(shù)據(jù)庫連接的方法 close()。例如: conn.close(); stmt.close。 利用數(shù)據(jù)庫原理相關(guān)知識,對數(shù)據(jù)庫設(shè)計和每個模塊、每個界面的具體設(shè) 計。此系統(tǒng)采用的數(shù)據(jù)庫軟件是 sqldb。 以下是系統(tǒng)需要的六張主要數(shù)據(jù)表的結(jié)構(gòu)。 字段名 字段類型 null default 描述 主鍵 外鍵 id bigint 主鍵 increment code varchar(100) 年級代碼 name varchar(200) 年級名稱 School_grade 年級 字段名 字段類型 null default 描述 主鍵 外鍵 id bigint 主鍵 increment code varchar(100) 班級代碼 name varchar(200) 班級名稱 school_grade bigint 所在年級 school_grade School_class 班級 字段名 字段類型 null default 描述 主鍵 外鍵 id bigint 主鍵 increment code varchar(50) 課程編碼 name varchar(200) 課程名稱 credit_hour float 學(xué)分 pass float 及格線 school_grade bigint 所在學(xué)期 school_grade Lesson 課程 17 字段名 字段類型 null default 描述 主鍵 外鍵 id bigint 主鍵 increment username varchar(200) 用戶名 password varchar(200) 密碼 truename varchar(200) 真實姓名 sex integer 性別 school_class bigint 所在班級 school_class Student 學(xué)生 字段名 字段類型 null default 描述 主鍵 外鍵 id bigint 主鍵 increment score float 成績 student bigint 用戶 student lesson bigint 課程 lesson Score 成績 字段名 字段類型 null default 描述 主鍵 外鍵 id bigint 主鍵 increment username varchar(200) 用戶名 password varchar(200) 密碼 Admin 管理員 四、 系統(tǒng)的實現(xiàn) (一) 學(xué)生查詢成績部分 訪問 http:/localhost:8080/ST/index.html。 測試用戶名:test 測試密碼:test 學(xué)生需要先登錄才能進(jìn)入查詢程序的界面, 進(jìn)入系統(tǒng)前要對用戶和密碼進(jìn)行 校驗,即用戶名和密碼正確才能進(jìn)入系統(tǒng)。并且若用戶連續(xù)三次密碼輸入錯誤, 則不能再次輸入。 18 輸入用戶 ID 后,按鍵,系統(tǒng)校驗該用戶是否存在 .在公共方法 jTuser_keyPressed()中,定義一個 String 類型變量 sqlSelect 用來生成 SQL 查詢語 句,再定義一個公共類 PetrieveObject 類型變量 retrieve,然后調(diào)用 retrieve 的 getObjectRow()方法,其參數(shù)為 sqlSelect,用來判斷該用戶是否存在。 如果用戶名與密碼不正確,就會彈出警告信息,要求用戶重新輸入。 19 登錄成功后就可以看到登錄學(xué)生的個人信息和相關(guān)學(xué)科的分?jǐn)?shù)。 (二) 后臺管理成績部分 訪問 http:/localhost:8080/st/admin.html,進(jìn)入后臺管理界面。 測試管理員帳號:admin 測試密碼:admin 20 輸入用戶 ID 之后,按鍵,系統(tǒng)校驗該用戶是否存在。在公共方法 jTuser_keyPressed()中,定義一個 String 類型變量 sqlSelect 用來生成 SQL 查詢 語句,再定義一個公共類 RetrieveObject 類型變量 retrieve,然后調(diào)用 retrieve 的 getObjectRow()方法,其參數(shù)為 sqlSelect,用來判斷該用戶是否存在。該方法的 詳細(xì)代碼如下: Public void jTextField1_keyPressed(KeyEvent keyEvent) If(keyEvent.getKeyCode()=KeyEvent.VK_ENTER) String sqlSelect=null; Java.util.Vector vdata=null; sqlSelect=”select username from tb_user where userid=”+jTextField1.getText().trim()+”; appstu.util.RetrieveObject retrieve=new appstu.util.RetrieveObject(); vdata=retrieve.getObjectRow(sqlSelect); if (vdata.size()0) jPasswordField1.requestFocus(); else Javax.swing.JOptionPane.showMessageDialog(null,”該用戶不存在”,”錯誤” ,javax.swing.JOptionPane.ERROR_MESSAGE); jTextField1.requestFocus(); 如果用戶存在,再輸入對應(yīng)的口令,輸入的口令正確時,單擊“登錄”按 鈕,進(jìn)入系統(tǒng)。公共方法 jTuser_keyPressed()的設(shè)計與 jTextField1_keyPressed 21 的設(shè)計方法相似,其關(guān)鍵代碼如下: Public void jBlogin_actionPerformed(ActionEvent e) String sqlSelect=null; sqlSelect=”select count(*)from tb_user where userid=”+jTextField1.getText().trim() +”and pass=”+pass+”; Java.util.Vector vdata=null; appstu.util.RetrieveObject retrieve=new appstu.util.RetrieveObject(); vdata=retrieve.getObjectRow(sqlSelect); if(Integer.parseInt(String.valueOf(vdata.get(0)0) AppMain frame=new AppMain(); This.setVisible(false); else Javax.swing.JOptionPane.showMessageDialog(null,”密碼錯誤”,” 錯誤”, Javax.swing.JOptionPane.ERROR_MESS AGE); jPasswordField1.requestFocus(); return; 登錄成功可以選擇功能模塊進(jìn)行操作。其中包括有年級班級管理模塊、課 程管理模塊、學(xué)生管理模塊、系統(tǒng)管理模塊。這些模塊都只有管理人員才能使 用。 22 管理年級信息,年級管理模塊可以添加、修改、刪除各年級的 ID、年級編 碼及年級名稱。 23 管理班級信息,班級信息設(shè)置用來維護(hù)班級的基本情況,包括對班級信息 的添加、修改和刪除等操作。 通過調(diào)用 Jdbcadapter,完成對班級表的相應(yīng)操作。執(zhí)行該模塊程序,首先從 數(shù)據(jù)表中檢索出班級的基本信息,如果存在數(shù)據(jù)用戶單擊某一條數(shù)據(jù)之后可以 對其進(jìn)行修改、刪除等操作。單擊 jf_view_sysset_class.java 文件的 source 代碼, 編輯窗口首先導(dǎo)入 UTIL 公共包下的相應(yīng)類文件;定義一個 BOOLEAN 實例變 量 INSERTFLAG,用來標(biāo)志操作數(shù)據(jù)庫的類型,然后定義一個私有方法 BUILDTABLE() ,用來檢索班級數(shù)據(jù)。代碼如下: private void buildTable() DefaultTableModel=null; String name =“班級編號”,” 年級編號”,”班級名稱”; String sqlstr=”select*from tb_classinfo”; Appstu.util.retrieveObject bdt=new appstu.util.RetrieveObject(); Tabemodel=bdt.getTableModel(name,sqlstr); jTable.setModel(tablemodel); jTable.setRowHeight(24); 單擊“新增”按鈕,用來增加一條新的數(shù)據(jù)信息。在公共方法 jBadd_actionPerformed()中定義局部字符串變量 sqlgrade,用來生成年級 sql 的查 詢語句,然后調(diào)用公共類 RetrieveObject 的 getObjectRow()方法,其參數(shù)為 sqlgrade,將返回結(jié)果數(shù)據(jù)解析后添加到 jComboBox1 組件中。其 jBadd_actionPerformed()方法的代碼如下: Public void jBadd_actionPerformed(ActionEvent e) /獲得年級名稱 /if(jComboBox1.getItemCount()=0) Insertflag=true; RetrieveObject bdt=new RetrieveObject(); String sqlgrade=”select gradeName from tb_gradeinfo”; Java.util.Vector vdata=new java.util.Vector(); Vdata=bdt.getObjectRow(sqlgrade); jComboBox1.removeAllItems(); for (int i=0;ivdata.size();i+) jComboBox1.addItem(vdata.get(i); ItemEvent item=new ItemEvent(jComboBox1,0,jComboBox1, jComboBox1.getSelectedIndex(); jComboBox1_itemStateChanged(item); jTextField2.setText(“”); jTextField2.requestFocus(); 24 用戶單擊表格上的某條數(shù)據(jù)后,程序會將這條數(shù)據(jù)填寫到 jPanel2 面板上的 相應(yīng)組件上,以方便用戶進(jìn)行相應(yīng)的操作,在公共方法 jTable1_mouseClicked() 中定義一個 string 類型的局部變量 sqlStr,用來生成 sql 查詢語句,然后調(diào)用公共 類 RetrieveObject 的 getObjectPow()方法,進(jìn)行數(shù)據(jù)查詢,如果找到數(shù)據(jù)則將該 數(shù)據(jù)解析顯示給用戶,代碼如下: Public void jTable1_mouseClicked(MouseEvent e) Insertflag=false; String id=null; String sqlStr=null; Int selectrow=0; Selectrow=jTable1.getSelectedRow(); If(selectrow0)return; Id=jTable1.getValueAt(selectrow,0).toSwing(); sqlStr=”SELECT c.classID,d.gradeName FROM tb_classinfo c INNER JOIN” +”tb_gradeinfo d ON c.gradeID=d.gradeID” + “where c.classID=”+id+”; Java.util.Vector vdata=null; RetrieveObject retrive=new RetrieveObject(); Vdata=retrive.getObjectRow(sqlStr); jComboBox1.removeAllItems(); jTextField1.setText(vdata.get(0).toString(); jComboBox1.addItem(vdata.get(1); jTextField2.setText(vdata.get(2).toString(); 25 管理課程信息,課程管理模塊可增加、修改、刪除學(xué)院各班級開設(shè)的課程 數(shù)據(jù),包括課程的 ID、課程代碼、課程名稱、課程學(xué)分、該課程的及格分?jǐn)?shù)線 及開設(shè)該課程的年級信息。 26 評分模塊主要是給學(xué)習(xí)某一課程的學(xué)生評分,通過選擇課程的名稱,可錄 入、修改、刪除和查看學(xué)習(xí)該門課程所有學(xué)生的成績。 this.tbar = new Ext.Toolbar(選擇課程:, filter, -, id: addMenu, text: 添加, iconCls : add, tooltip : 添加, disabled: true, handler: function() if (this.filter.getValue() = ) Ext.Msg.alert(提示, 請先選擇課程 ); else var initValue = id: null, student.truename: null, student.id: null, score: 0 ; var p = new this.dataRecord(initValue); this.stopEditing(); this.store.insert(0, p); this.startEditing(0, 0); p.dirty = true; p.modified = initValue; if(this.store.modified.indexOf(p) = -1) this.store.modified.push(p); if (this.insertedRecords.indexOf(p) = -1) this.insertedRecords.push(p); .createDelegate(this) , id: deleteMenu, text: 刪除, iconCls : delete, tooltip : 刪除, disabled: true, handler: function() if (this.filter.getValue() = ) Ext.Msg.alert(提示, 請先選擇課程 ); 27 else Ext.Msg.confirm(信息, 確定要刪除?, function(btn) if (btn = yes) var sm = this.getSelectionModel(); var cell = sm.getSelectedCell(); var record = this.store.getAt(cell0); if(this.store.modified.indexOf(record) != -1) this.store.modified.remove(record); / 記錄刪除了哪些 id var id = record.get(id); if (id = null else if (id != null this.store.remove(record); , this); .createDelegate(this) , id: saveMenu, text: 提交修改 , iconCls : edit, tooltip : 提交修改, disabled: true, handler: function() if (this.filter.getValue() = ) Ext.Msg.alert(提示, 請先選擇課程 ); else var m = this.store.mo