版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《數(shù)據(jù)庫(kù)原理及應(yīng)用》</p><p><b> 課</b></p><p><b> 程</b></p><p><b> 設(shè)</b></p><p><b> 計(jì)</b></p><p><b&
2、gt; 報(bào)</b></p><p><b> 告</b></p><p><b> 一、設(shè)計(jì)目的 </b></p><p> 《數(shù)據(jù)庫(kù)原理及應(yīng)用》是一門實(shí)踐性很強(qiáng)的課程,為了學(xué)好這門課程,必須在掌握理論知識(shí)的同時(shí),加強(qiáng)上機(jī)實(shí)踐。本課程設(shè)計(jì)的主要目的在于:</p><p> 1、
3、加深對(duì)數(shù)據(jù)庫(kù)基礎(chǔ)理論和基本知識(shí)的理解,培養(yǎng)學(xué)生運(yùn)用所學(xué)理論知識(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行組織、管理和使用的能力。 </p><p> 2、掌握數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的整個(gè)設(shè)計(jì)過(guò)程(包括需求分析、概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)與物理設(shè)計(jì)與實(shí)施),提高運(yùn)用數(shù)據(jù)庫(kù)解決實(shí)際問題的能力。 </p><p><b> 二、設(shè)計(jì)要求</b></p><p> 1、要求學(xué)生熟練掌
4、握相關(guān)數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),獨(dú)立完成設(shè)計(jì)任務(wù),并完成課程設(shè)計(jì)報(bào)告。</p><p> 2、學(xué)生必須仔細(xì)研讀數(shù)據(jù)庫(kù)課程設(shè)計(jì)任務(wù)書,課程設(shè)計(jì)以學(xué)生自學(xué)為主、指導(dǎo)教師指導(dǎo)為輔。</p><p> 3、本次課程設(shè)計(jì)按照教學(xué)要求需要在一周半時(shí)間內(nèi)獨(dú)立完成,學(xué)生要發(fā)揮自主學(xué)習(xí)的能力,充分利用時(shí)間,安排好課設(shè)的時(shí)間計(jì)劃,并在課設(shè)過(guò)程中不斷檢測(cè)自己的計(jì)劃完成情況,及時(shí)地向指導(dǎo)教師匯報(bào)。</p>
5、<p> 4、使用工具不限,可以使用.net C#、Delphi、PB、VB等。</p><p> 5、可以做成C/S或者B/S。</p><p> 6、使用軟件工程的思想和方法進(jìn)行工程設(shè)計(jì)。</p><p><b> 三、設(shè)計(jì)任務(wù)</b></p><p><b> 學(xué)生成績(jī)管理系統(tǒng)&l
6、t;/b></p><p> 該系統(tǒng)至少應(yīng)包含如下功能:</p><p><b> 1、身份驗(yàn)證模塊</b></p><p> 進(jìn)入系統(tǒng)時(shí)首先進(jìn)行身份驗(yàn)證。只有用戶名和密碼正確才能進(jìn)入系統(tǒng)。若身</p><p> 份驗(yàn)證時(shí)間超過(guò)20秒則停止身份驗(yàn)證。</p><p><b>
7、; 2、用戶管理</b></p><p> 對(duì)使用本系統(tǒng)的用戶進(jìn)行添加、查詢、修改密碼、刪除等操作。</p><p><b> 3、學(xué)生信息錄入</b></p><p> 本系統(tǒng)能夠錄入學(xué)生的學(xué)號(hào)、姓名、性別、班級(jí)等信息,并且能夠判斷是否有不符合信息項(xiàng),如有不符合的則給出提示。</p><p><
8、;b> 4、學(xué)生成績(jī)查詢</b></p><p> 可以根據(jù)學(xué)號(hào)、姓名、班級(jí)、學(xué)期等信息項(xiàng)中的一項(xiàng)或多項(xiàng)的組合,進(jìn)行模糊查詢和精確查詢,從而高效地找到您想要的信息。</p><p><b> 5、學(xué)生成績(jī)更新</b></p><p> 可以根據(jù)學(xué)號(hào)、姓名等信息項(xiàng)中的一項(xiàng),進(jìn)行模糊查詢和精確查詢,找到要修改的學(xué)生記錄,最
9、后是對(duì)單個(gè)記錄進(jìn)行逐個(gè)的修改。也可以把錄錯(cuò)或不再有用的信息刪除掉。</p><p><b> 6、學(xué)生成績(jī)排序</b></p><p> 可以按照學(xué)號(hào)、姓名、性別、班級(jí)、成績(jī)的升序/降序(包括各科成績(jī)、總分、平均分)來(lái)進(jìn)行排序。</p><p><b> 7、統(tǒng)計(jì) </b></p><
10、p> 可以按照課程、班級(jí)、專業(yè)等進(jìn)行統(tǒng)計(jì),形成報(bào)表。 </p><p><b> 學(xué)生自選課題</b></p><p> 學(xué)生原則上可以結(jié)合個(gè)人愛好自選課題,要求自選課題必須覆蓋數(shù)據(jù)庫(kù)的主要內(nèi)容,有一定的深度與難度,。學(xué)生自選課題需提前報(bào)課程設(shè)計(jì)指導(dǎo)教師批準(zhǔn)方可生效。</p><p><b> 四、成績(jī)考核<
11、/b></p><p> 根據(jù)完成任務(wù)的情況(必須進(jìn)行系統(tǒng)驗(yàn)收 + 答辯)、課程設(shè)計(jì)報(bào)告書的質(zhì)量和課程設(shè)計(jì)過(guò)程中的工作態(tài)度等按照50%、30%、20%加權(quán)綜合打分。成績(jī)?cè)u(píng)定實(shí)行優(yōu)秀、良好、中等、及格和不及格五個(gè)等級(jí)。</p><p><b> 五、設(shè)計(jì)報(bào)告</b></p><p> 1、主要內(nèi)容及裝訂順序:封面(封面用學(xué)校的統(tǒng)一封面
12、)、目錄、正文、參考文獻(xiàn)、附錄等。</p><p> 2、正文部分應(yīng)該包括:需求分析、總體設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)(含概念設(shè)計(jì)、邏輯設(shè)計(jì)、物理設(shè)計(jì),設(shè)計(jì)報(bào)告要有ER圖。)、程序模塊設(shè)計(jì)(含功能需求、用戶界面設(shè)計(jì)、程序代碼設(shè)計(jì)與分析、運(yùn)行結(jié)果)等。</p><p> 3、不交設(shè)計(jì)報(bào)告或抄襲者,按不及格論。</p><p><b> 六、指導(dǎo)教師</b&g
13、t;</p><p> 計(jì)05: 杜獻(xiàn)峰 高艷霞</p><p> 計(jì)06: 杜獻(xiàn)峰 徐飛</p><p><b> 正文 </b></p><p><b> 需求分析:</b></p><p><b> 身份驗(yàn)證模塊</b></
14、p><p> 此程序要求允許不同級(jí)別的用戶登錄,級(jí)別不同,擁有的權(quán)限不同,可以進(jìn)行的操作亦不同。進(jìn)入系統(tǒng)時(shí)首先進(jìn)行身份驗(yàn)證。只有用戶名和密碼正確才能進(jìn)入系統(tǒng)。若身份驗(yàn)證時(shí)間超過(guò)20秒則停止身份驗(yàn)證。</p><p><b> 2、用戶管理</b></p><p> 對(duì)使用本系統(tǒng)的用戶進(jìn)行添加、查詢、修改密碼、刪除等操作。其中,管理員權(quán)限的可以
15、執(zhí)行全部操作,普通用戶登錄時(shí)不允許查詢用戶,用戶添加時(shí)通過(guò)程序只能添加普通類型的用戶。</p><p><b> 3、學(xué)生信息錄入</b></p><p> 本系統(tǒng)能夠錄入學(xué)生的學(xué)號(hào)、姓名、性別、班級(jí)等信息,并且能夠判斷是否有不符合信息項(xiàng),如有不符合的則給出提示。</p><p><b> 4、學(xué)生成績(jī)查詢</b>&
16、lt;/p><p> 可以根據(jù)學(xué)號(hào)、姓名、班級(jí)、學(xué)期等信息項(xiàng)中的一項(xiàng)或多項(xiàng)的組合,進(jìn)行模糊查詢和精確查詢,從而高效地找到您想要的信息。</p><p><b> 5、學(xué)生成績(jī)更新</b></p><p> 可以根據(jù)學(xué)號(hào)、姓名等信息項(xiàng)中的一項(xiàng),進(jìn)行模糊查詢和精確查詢,找到要修改的學(xué)生記錄,最后是對(duì)單個(gè)記錄進(jìn)行逐個(gè)的修改。也可以把錄錯(cuò)或不再有用的
17、信息刪除掉。</p><p><b> 6、學(xué)生成績(jī)排序</b></p><p> 可以按照學(xué)號(hào)、姓名、性別、班級(jí)、成績(jī)的升序/降序(包括各科成績(jī)、總分、平均分)來(lái)進(jìn)行排序。</p><p><b> 7、統(tǒng)計(jì) </b></p><p> 可以按照課程、班級(jí)、專業(yè)等進(jìn)行統(tǒng)計(jì),形成
18、報(bào)表。</p><p><b> 總體設(shè)計(jì):</b></p><p> 系統(tǒng)總體框架采用Frame框架,將主frame用分隔符分成左右兩部分,左半部分設(shè)置一導(dǎo)航(用Tree控件實(shí)現(xiàn)),右半部分使用Panel卡片布局,右半部分共設(shè)置了9個(gè)Panel,分別實(shí)現(xiàn)用戶登錄后的歡迎界面,用戶添加界面,用戶查詢界面,用戶修改界面,學(xué)生信息添加界面,分?jǐn)?shù)查詢界面,分?jǐn)?shù)排序界面,
19、分?jǐn)?shù)修改添加刪除界面,信息統(tǒng)計(jì)界面。點(diǎn)擊左側(cè)的葉子節(jié)點(diǎn),在右側(cè)顯示相對(duì)應(yīng)的Panel。程序另外單獨(dú)添加一個(gè)OracleSQL類,在此類定義所有的需要操作數(shù)據(jù)庫(kù)的函數(shù),各個(gè)頁(yè)面需要調(diào)用數(shù)據(jù)庫(kù)時(shí),只需要調(diào)用此類中的函數(shù)就可以了,這樣就將界面和數(shù)據(jù)處理分開在不同的類中,是代碼更易可讀和修改,增加或者修改功能時(shí)只需修改SQL語(yǔ)句就可以了。</p><p><b> 數(shù)據(jù)庫(kù)設(shè)計(jì):</b></p
20、><p> 此程序按照要求使用的是Oracle數(shù)據(jù)庫(kù)。程序共設(shè)計(jì)了4張表,分別是用戶表,學(xué)生信息表,課程信息表,學(xué)生成績(jī)表。</p><p><b> ER圖設(shè)計(jì)</b></p><p><b> m</b></p><p> n
21、 </p><p> 由ER圖轉(zhuǎn)化為關(guān)系:</p><p> USERMANAGER(username,password,type)</p><p> STUDENT(cno,sn
22、ame,ssex,sage,sdept,sclass,sspec)</p><p> SC(cno,cname,grade,term)</p><p> 在數(shù)據(jù)庫(kù)中創(chuàng)建的表實(shí)際如下:</p><p><b> 四:程序模塊設(shè)計(jì)、</b></p><p><b> 登錄模塊設(shè)計(jì):</b><
23、;/p><p> 登錄窗體使用Frame,在Frame里添加兩個(gè)JTable用于提示輸入信息,兩個(gè)編輯框用于輸入用戶名和密碼,兩個(gè)單選按鈕用于選擇用戶登錄類型,兩個(gè)按鈕用于確認(rèn)和取消,一個(gè)JTable用于顯示限制用戶登錄時(shí)間,效果圖如下:</p><p> 其中設(shè)計(jì)倒計(jì)時(shí)模塊代碼:</p><p> 在UserLogin類中定義兩個(gè)Timer類型的變量</p
24、><p> Timer secondTime2 = new Timer(1000,this);/*將定時(shí)器設(shè)定為每秒執(zhí)行一次actionPerformed的方法*/ </p><p> Timer secondTime = new Timer(20000,this);/*將定時(shí)器設(shè)定為每秒執(zhí)行一次actionPerformed的方法*/</p><p> 在
25、UserLogin類的構(gòu)造函數(shù)中啟動(dòng)這兩個(gè)定時(shí)器變量</p><p> secondTime.start();/*定時(shí)器啟動(dòng)*/ secondTime2.start();/*定時(shí)器啟動(dòng)*/</p><p><b> 在監(jiān)聽其中進(jìn)行監(jiān)聽</b></p><p> if(e.getSource()==secondTime){</
26、p><p> System.exit(0);</p><p><b> }</b></p><p> else if(e.getSource()==secondTime2){ </p><p> label1.setText("登錄倒數(shù)計(jì)時(shí) : "+n--+" s");
27、</p><p><b> }</b></p><p><b> 用戶登錄驗(yàn)證模塊:</b></p><p> 首先連接數(shù)據(jù)庫(kù),連接上數(shù)據(jù)庫(kù)后查詢Usermanager表,若能查到,返回true,允許登錄,調(diào)用主頁(yè)面,同時(shí)計(jì)時(shí)器停止,將登錄窗口隱藏。</p><p> OracleSQL o
28、racle = new OracleSQL();</p><p> if(oracle.ConnectSQL(name, pwd, type)){</p><p> StudentSystem studentSystem = new StudentSystem(type);</p><p> secondTime.stop();</p><
29、p> secondTime2.stop();</p><p> this.setVisible(false);</p><p><b> 主系統(tǒng)頁(yè)面設(shè)計(jì):</b></p><p> 主頁(yè)面分左右兩塊,左面為樹控件,左邊為各功能顯示頁(yè)面,效果圖如下:</p><p><b> 樹控件模塊設(shè)計(jì):&l
30、t;/b></p><p> 在StudentSystem類中定義葉子節(jié)點(diǎn)</p><p> private DefaultMutableTreeNode stRoot =</p><p> new DefaultMutableTreeNode(new MyNode("操作選項(xiàng)","0"));</p>
31、<p> private DefaultMutableTreeNode st1 =</p><p> new DefaultMutableTreeNode(new MyNode("用戶管理","1"));</p><p> private DefaultMutableTreeNode st2 =</p><p&g
32、t; new DefaultMutableTreeNode(new MyNode("學(xué)生信息管理","2"));</p><p> private DefaultMutableTreeNode st3 =</p><p> new DefaultMutableTreeNode(new MyNode("學(xué)生成績(jī)查詢",&quo
33、t;3"));</p><p> private DefaultMutableTreeNode st4 =</p><p> new DefaultMutableTreeNode(new MyNode("更新","4"));</p><p> private DefaultMutableTreeNode st5
34、 =</p><p> new DefaultMutableTreeNode(new MyNode("學(xué)生成績(jī)排序","5"));</p><p> private DefaultMutableTreeNode st6 =</p><p> new DefaultMutableTreeNode(new MyNode(&q
35、uot;統(tǒng)計(jì)","6"));</p><p> private DefaultMutableTreeNode st11 =</p><p> new DefaultMutableTreeNode(new MyNode("用戶添加","11"));</p><p> private Defau
36、ltMutableTreeNode st12 =</p><p> new DefaultMutableTreeNode(new MyNode("用戶查詢","12"));</p><p> private DefaultMutableTreeNode st13 =</p><p> new DefaultMutable
37、TreeNode(new MyNode("修改密碼","13"));</p><p> private DefaultMutableTreeNode st21 =</p><p> new DefaultMutableTreeNode(new MyNode("學(xué)生信息錄入","21"));</p>
38、;<p> private DefaultMutableTreeNode st31 =</p><p> new DefaultMutableTreeNode(new MyNode("查詢成績(jī)","31"));</p><p> private DefaultMutableTreeNode st32 =</p>&l
39、t;p> new DefaultMutableTreeNode(new MyNode("按學(xué)號(hào)+班級(jí)查詢","32"));</p><p> private DefaultMutableTreeNode st41 =</p><p> new DefaultMutableTreeNode(new MyNode("學(xué)生成績(jī)更新&q
40、uot;,"41"));</p><p> private DefaultMutableTreeNode st51 =</p><p> new DefaultMutableTreeNode(new MyNode("升序","51"));</p><p> private DefaultMutable
41、TreeNode st52 =</p><p> new DefaultMutableTreeNode(new MyNode("降序","52"));</p><p> 其中MyNode是定義的一個(gè)內(nèi)部類,其構(gòu)造函數(shù)public MyNode(String values,String id){</p><p> this
42、.values=values;</p><p> this.id=id;</p><p><b> }</b></p><p> 通過(guò)id值可以確定單擊的是哪一個(gè)節(jié)點(diǎn)。</p><p> 構(gòu)造樹的時(shí)候根據(jù)登錄用戶的類型的不同為樹添加不同的葉子節(jié)點(diǎn)。以此來(lái)實(shí)現(xiàn)不同的用戶擁有不同的功能。</p><
43、;p><b> 構(gòu)造樹的函數(shù):</b></p><p> public void initialTree(int login_id){</p><p> if(login_id==0){</p><p> st1.add(st12);</p><p><b> }</b></p
44、><p> stRoot.add(st1);</p><p> stRoot.add(st2);</p><p> stRoot.add(st3);</p><p> stRoot.add(st4);</p><p> stRoot.add(st5);</p><p> stRoot.a
45、dd(st6);</p><p> st1.add(st11);</p><p> st1.add(st13);</p><p> st2.add(st21);</p><p> st3.add(st31);</p><p> st3.add(st32);</p><p> st4.
46、add(st41);</p><p> st5.add(st51);</p><p> st5.add(st52);</p><p><b> }</b></p><p> 定義各個(gè)功能模版類的對(duì)象</p><p> public void initialPanel(){</p&g
47、t;<p> welcome = new Welcome();</p><p> useradd = new UserAdd();</p><p> userchangePwd = new UserChangePwd();</p><p> userquery= new UserQuery();</p><p> ne
48、wstudentadd= new NewStudentAdd();</p><p> gradequery= new GradeQuery();</p><p> graderank = new GradeRank();</p><p> gradeupdate= new GradeUpdate();</p><p> statist
49、ical= new Statistical();</p><p><b> }</b></p><p><b> 初始化右半邊的模版</b></p><p> public void initialJpy(){</p><p> jpy.setLayout(new CardLayout())
50、;</p><p> cl = (CardLayout)jpy.getLayout();</p><p> jpy.add(welcome,"welcome");</p><p> jpy.add(useradd,"useradd");</p><p> jpy.add(userchangePw
51、d,"userchangePwd");</p><p> jpy.add(userquery,"userquery");</p><p> jpy.add(newstudentadd,"newstudentadd");</p><p> jpy.add(gradequery,"gradequ
52、ery");</p><p> jpy.add(graderank,"graderank");</p><p> jpy.add(gradeupdate,"gradeupdate");</p><p> jpy.add(statistical,"statistical");</p&g
53、t;<p><b> }</b></p><p> 在監(jiān)聽函數(shù)中根據(jù)不同的節(jié)點(diǎn)響應(yīng)對(duì)應(yīng)的面板</p><p> public void addListener(){</p><p> jt.addMouseListener(</p><p> new MouseAdapter(){</p&g
54、t;<p> public void mouseClicked(MouseEvent e){</p><p> DefaultMutableTreeNode dmtntemp= </p><p> (DefaultMutableTreeNode)jt.getLastSelectedPathComponent();</p><p> MyNode
55、 mynode = (MyNode)dmtntemp.getUserObject();</p><p> String id = mynode.getId();</p><p> if(id.equals("0")){</p><p> cl.show(jpy, "welcome");</p><p&
56、gt; System.out.println("歡迎頁(yè)面");</p><p><b> }</b></p><p> else if(id.equals("11")){</p><p> cl.show(jpy, "useradd");</p><p>
57、;<b> }</b></p><p> else if(id.equals("12")){</p><p> cl.show(jpy, "userquery");</p><p> //userquery.setVisible(true);</p><p><b&g
58、t; }</b></p><p> else if(id.equals("13")){</p><p> cl.show(jpy, "userchangePwd");</p><p> //userchangePwd.setVisible(true);</p><p> userc
59、hangePwd.setFocus();</p><p><b> }</b></p><p> else if(id.equals("21")){</p><p> cl.show(jpy, "newstudentadd");</p><p><b> }<
60、;/b></p><p> else if(id.equals("31")){</p><p> //gradequery.setVisible(true);</p><p> cl.show(jpy, "gradequery");</p><p><b> }</b>
61、;</p><p> else if(id.equals("41")){</p><p> //gradeupdate.setVisible(true);</p><p> cl.show(jpy, "gradeupdate");</p><p><b> }</b><
62、;/p><p> else if(id.equals("51")){</p><p> //graderank.setVisible(true);</p><p> cl.show(jpy, "graderank");</p><p><b> }</b></p>
63、<p> else if(id.equals("6")){</p><p> //graderank.setVisible(true);</p><p> cl.show(jpy, "statistical");</p><p><b> }</b></p><p&
64、gt;<b> }</b></p><p><b> }</b></p><p><b> );</b></p><p> jt.setToggleClickCount(1);//將展開節(jié)點(diǎn)的鼠標(biāo)點(diǎn)擊次數(shù)設(shè)置為1</p><p><b> }&
65、lt;/b></p><p><b> 設(shè)計(jì)操作數(shù)據(jù)庫(kù)類:</b></p><p> 對(duì)數(shù)據(jù)庫(kù)的連接,數(shù)據(jù)的查詢,更新函數(shù)都寫在這一個(gè)類中。</p><p> 連接數(shù)據(jù)庫(kù)函數(shù):連接成功則返回true,否則返回false;</p><p> public boolean ConnectSQL(){//連接數(shù)據(jù)
66、庫(kù)</p><p> if(stmt!=null){</p><p><b> try {</b></p><p> stmt.close();</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated cat
67、ch block</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p> if(conn!=null){</p><p><b> try {</b&g
68、t;</p><p> conn.close();</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }
69、</b></p><p><b> }</b></p><p><b> try { </b></p><p> /** 使用Class.forName()方法自動(dòng)創(chuàng)建這個(gè)驅(qū)動(dòng)程序的實(shí)例且自動(dòng)調(diào)用DriverManager來(lái)注冊(cè)它*/</p><p> Class.forName
70、(DB_DRIVER).newInstance(); </p><p> //與url指定的數(shù)據(jù)源建立連接 </p><p> conn = DriverManager.getConnection(DB_URL, DB_User, DB_Pwd); </p><p> //采用Statement進(jìn)行查詢 </p><p> stmt
71、= conn.createStatement(); </p><p> System.out.println("連接成功");</p><p> return true;</p><p> } catch (Exception e) { </p><p> e.printStackTrace(); </p&g
72、t;<p> return false;</p><p><b> } </b></p><p><b> }</b></p><p><b> 驗(yàn)證用戶登錄函數(shù):</b></p><p><b> //驗(yàn)證用戶登錄</b><
73、/p><p> public boolean ConnectSQL(String username,String userpassword,int usertype) throws SQLException{</p><p> String sql="select *from USERMANAGER where" +</p><p> &quo
74、t; USERNAME='"+username+"'and PASSWORD='"+userpassword+"'and TYPE='"+usertype+"'";</p><p> if(ConnectSQL()){</p><p> //System.out.pri
75、ntln("連接成功");</p><p> return execute(sql);</p><p><b> }</b></p><p><b> else </b></p><p> return false; </p><p><
76、;b> }</b></p><p> //執(zhí)行查詢 驗(yàn)證登陸</p><p> public boolean execute(String sql) throws SQLException{</p><p> boolean is_login =false;</p><p><b> try{</b
77、></p><p> rs = stmt.executeQuery(sql);</p><p> }catch (SQLException e) { </p><p> e.printStackTrace(); </p><p><b> } </b></p><p> if(rs
78、.next())</p><p> is_login=true;</p><p> rs.close();</p><p><b> close();</b></p><p> return is_login;</p><p><b> }</b></p>
79、;<p> 數(shù)據(jù)查詢函數(shù),其中把查詢到的數(shù)據(jù)用Vector保存。</p><p> public boolean executeQuery(String sql) throws SQLException { //數(shù)據(jù)查詢</p><p> if(!ConnectSQL())</p><p> return false;</p>&
80、lt;p> rs = null; </p><p> columnHeads=new Vector();</p><p> Rows=new Vector();</p><p><b> try { </b></p><p> rs = stmt.executeQuery(sql); </p>
81、<p> } catch (SQLException e) { </p><p> e.printStackTrace(); </p><p> return false;</p><p><b> } </b></p><p> if(!rs.next()){</p><p&
82、gt; rs.close();</p><p><b> close();</b></p><p> return false;</p><p><b> }</b></p><p><b> try{</b></p><p> Result
83、SetMetaData rsmd = rs.getMetaData();</p><p> for(int i =1;i<=rsmd.getColumnCount();i++)</p><p> columnHeads.addElement(rsmd.getColumnName(i));//得到列的頭</p><p><b> do{</
84、b></p><p> Rows.addElement(getNextRow(rs,rsmd));</p><p> }while(rs.next());</p><p> rs.close();</p><p> return true;</p><p> }catch(SQLException e)
85、{</p><p> e.printStackTrace();</p><p> return false;</p><p><b> }</b></p><p> // return true;</p><p><b> }</b></p><
86、p> private Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd)</p><p> throws SQLException{</p><p> Vector currentRow = new Vector();//用于存放每行的記錄</p><p> for(int i =1;i<
87、=rsmd.getColumnCount();++i)</p><p> currentRow.addElement(rs.getString(i));</p><p> return currentRow;</p><p><b> }</b></p><p><b> 數(shù)據(jù)更新函數(shù):</b&g
88、t;</p><p> public boolean executeUpdate(String sql){//數(shù)據(jù)更新</p><p> if(!ConnectSQL())</p><p> return false;</p><p><b> try { </b></p><p> s
89、tmt.executeUpdate(sql);</p><p><b> close();</b></p><p> return true;</p><p> } catch (SQLException e) { </p><p> e.printStackTrace(); </p><p&
90、gt; return false;</p><p><b> }</b></p><p> //return true;</p><p><b> }</b></p><p><b> 用戶添加頁(yè)面設(shè)計(jì):</b></p><p> 在程序中添
91、加用戶只允許添加普通用戶。</p><p><b> 頁(yè)面設(shè)計(jì)圖如下</b></p><p> 在確認(rèn)按鈕的監(jiān)聽里面添加代碼如下</p><p> String user_name=jtf.getText().trim();</p><p> String user_pwd = jpwdfArray[0].get
92、Text().trim();</p><p> String user_pwd2 = jpwdfArray[1].getText().trim();</p><p> if(user_name.equals("")||user_pwd.equals("")||user_pwd2.equals("")){</p>
93、<p> JOptionPane.showMessageDialog(this,"用戶名或密碼不能為空");</p><p><b> return;</b></p><p><b> }</b></p><p> if(!user_pwd.equals(user_pwd2)){<
94、;/p><p> JOptionPane.showMessageDialog(this,"兩次輸入的密碼不一致");</p><p><b> return;</b></p><p><b> }</b></p><p> String type ="1"
95、;</p><p> sql="insert into usermanager values('"+user_name+"','"+user_pwd+"','"+type+"')";</p><p> if(oracle.executeUpdate(sql))
96、{</p><p> JOptionPane.showMessageDialog(this,"添加成功"); </p><p> System.out.println("插入成功");</p><p><b> return;</b></p><p>&
97、lt;b> }</b></p><p><b> else{</b></p><p> JOptionPane.showMessageDialog(this,"該用戶名已存在"); </p><p> System.out.println("插入失敗");&
98、lt;/p><p><b> return;</b></p><p><b> }</b></p><p><b> 用戶查詢頁(yè)面設(shè)計(jì):</b></p><p> 在編輯框中若輸入為空則查詢?nèi)?,否則查詢指定用戶</p><p><b>
99、 設(shè)計(jì)頁(yè)面如下:</b></p><p> 當(dāng)監(jiān)聽器監(jiān)聽到查詢按鈕時(shí),添加的代碼如下</p><p> String stu_id=jtf.getText().trim();</p><p> OracleSQL oracle1= new OracleSQL();</p><p> String sql=null;<
100、/p><p> if(stu_id.equals(""))//查詢?nèi)?lt;/p><p><b> {</b></p><p> sql="select *from turing.usermanager";</p><p><b> }<
101、;/b></p><p><b> else</b></p><p><b> {</b></p><p> sql="select *from turing.usermanager where username like '"+stu_id+"'%";&
102、lt;/p><p><b> }</b></p><p><b> try {</b></p><p> if(!oracle1.executeQuery(sql)){</p><p> JOptionPane.showMessageDialog(this,"未查詢到結(jié)果",
103、"",</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p><p> } catch (HeadlessException | SQLException
104、e1) {</p><p> // TODO Auto-generated catch block</p><p> e1.printStackTrace();</p><p><b> }</b></p><p> v_data=oracle1.Rows;</p><p> v_hea
105、d=oracle1.columnHeads;</p><p><b> //更新表格模型</b></p><p> DefaultTableModel dtm=new DefaultTableModel(v_data,v_head);</p><p> jt.setModel(dtm);</p><p> //更
106、新顯示((DefaultTableModel)jt.getModel()).fireTableStructureChanged();</p><p><b> 用戶修改頁(yè)面設(shè)計(jì):</b></p><p><b> 界面設(shè)計(jì)圖如下:</b></p><p> 在確認(rèn)按鈕的監(jiān)聽函數(shù)中添加代碼如下</p&
107、gt;<p> String user_name=jtf.getText().trim();</p><p> String user_pwd = jpfArray[0].getText().trim();</p><p> String user_pwdnew = jpfArray[1].getText().trim();</p><p>
108、String user_pwdnew2 = jpfArray[2].getText().trim();</p><p> String type ="1";</p><p> if(user_name.equals("")||user_pwd.equals("")||user_pwdnew.equals(""
109、;)||user_pwdnew.equals("")){</p><p> JOptionPane.showMessageDialog(this,"用戶名和密碼不能為空","",</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b> return
110、;</b></p><p><b> }</b></p><p> if(!user_pwdnew.equals(user_pwdnew2)){</p><p> JOptionPane.showMessageDialog(this,"兩次輸入的密碼不一致");</p><p>&l
111、t;b> return;</b></p><p><b> }</b></p><p> sql="update usermanager set password='"+user_pwdnew+"'where username='"+user_name+"'&qu
112、ot;;</p><p> if(oraclesql.executeUpdate(sql)){</p><p> System.out.println("修改成功");</p><p> JOptionPane.showMessageDialog(this,"修改成功","",</p>
113、<p> JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p><p><b> else{</b></p><p> System.out.pri
114、ntln("修改失敗");</p><p> JOptionPane.showMessageDialog(this,"修改失敗","",</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p>
115、<p><b> }</b></p><p> 學(xué)生信息添加頁(yè)面設(shè)計(jì):</p><p><b> 該頁(yè)面設(shè)計(jì)圖如下:</b></p><p> 提交按鈕監(jiān)聽消息的核心代碼如下</p><p> sql="insert into turing.student valu
116、es" +</p><p> "('"+std_id+"','"+std_name+"','"+std_sex+"','"+std_age+"','"+std_sdep+"','"+std_spe
117、c+"','"+std_class+"')";</p><p> if(!oraclesql.executeUpdate(sql)){</p><p> JOptionPane.showMessageDialog(this,"未查詢到結(jié)果","",</p>&l
118、t;p> JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p><p><b> else{</b></p><p> JOptionPane.showMes
119、sageDialog(this,"插入成功");</p><p> return;</p><p><b> }</b></p><p> 其中sql語(yǔ)句中的('"+std_id+"','"+std_name+"','"
120、+std_sex+"','"+std_age+"','"+std_sdep+"','"+std_spec+"','"+std_class+"'分別是輸入的值。</p><p> 分?jǐn)?shù)查詢頁(yè)面設(shè)計(jì)如下:</p><p> 查詢按
121、鈕監(jiān)聽器函數(shù)主要代碼如下</p><p> if(stu_term.equals(""))</p><p><b> {</b></p><p> sql = "select student.sno,student.sname,cname,grade " +</p><p>
122、 "from turing.student,turing.course,turing.sc " +</p><p> "where student.sno=sc.sno and course.cno = sc.cno and student.sno like '"+stu_id+"'%";</p><p>
123、// sql="select sno,cno,grade,term from turing.sc where sno='"+stu_id+"'";</p><p><b> }</b></p><p><b> else</b></p><p> sql =
124、"select student.sno,student.sname,cname,grade " +</p><p> "from turing.student,turing.course,turing.sc " +</p><p> "where student.sno=sc.sno and course.cno = sc.cno an
125、d sc.term like '"+stu_term+"'% and student.sno like '"+stu_id+"'%";</p><p><b> try {</b></p><p> if(!oraclesql.executeQuery(sql)){</p>
126、;<p> JOptionPane.showMessageDialog(this,"未查詢到結(jié)果","",</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b&
127、gt;</p><p> } catch (HeadlessException | SQLException e1) {</p><p> // TODO Auto-generated catch block</p><p> e1.printStackTrace();</p><p><b> }</b><
128、;/p><p> v_data=oraclesql.Rows;</p><p> //v_head=oraclesql.columnHeads;</p><p><b> //更新表格模型</b></p><p> DefaultTableModel dtm=new DefaultTableModel(v_data,
129、v_head);</p><p> jt.setModel(dtm);</p><p> //更新顯示((DefaultTableModel)jt.getModel()).fireTableStructureChanged();</p><p><b> }</b></p><p> 其中學(xué)號(hào)必須輸入,
130、學(xué)期可以為空,當(dāng)學(xué)期為空時(shí)查詢?cè)搶W(xué)號(hào)下的所有成績(jī)。</p><p><b> 成績(jī)更新頁(yè)面設(shè)計(jì):</b></p><p><b> 頁(yè)面效果圖:</b></p><p> 其中查詢按鈕和之前的查詢頁(yè)面設(shè)計(jì)一樣,</p><p><b> 添加按鈕函數(shù):</b></
131、p><p> 單擊一次,信息一欄四個(gè)編輯框中的值設(shè)置為空,在編輯框中設(shè)置相應(yīng)的值后再次單擊執(zhí)行添加操作,代碼如下</p><p> if(i%2==0){</p><p> jtfArray[2].setText("");</p><p> jtfArray[3].setText("");</
132、p><p> jtfArray[4].setText("");</p><p> jtfArray[5].setText("");</p><p><b> i++;</b></p><p> jb3.setText("確認(rèn)");</p>&l
133、t;p><b> }</b></p><p><b> else{</b></p><p> String sno=jtfArray[2].getText().trim();</p><p> String cno=jtfArray[3].getText().trim();</p><p&
134、gt; String grad=jtfArray[4].getText().trim();</p><p> String term=jtfArray[5].getText().trim();</p><p> Integer grade = Integer.valueOf(grad);</p><p> OracleSQL oracle2= new Ora
135、cleSQL();</p><p> sql="insert into turing.sc values('"+sno+"','"+cno+"','"+grade+"','"+term+"')";</p><p> if(o
136、racle2.executeUpdate(sql)){</p><p> jb3.setText("添加");</p><p><b> i++;</b></p><p> JOptionPane.showMessageDialog(this,"添加成功","",</p&g
137、t;<p> JOptionPane.ERROR_MESSAGE);</p><p><b> return;</b></p><p><b> }</b></p><p><b> else{</b></p><p> jb3.setText(&qu
138、ot;添加");</p><p><b> i++;</b></p><p> JOptionPane.showMessageDialog(this,"添加失敗");</p><p> return;</p><p><b> }</b></p&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)(學(xué)生成績(jī)管理系統(tǒng))
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)-數(shù)據(jù)庫(kù)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)數(shù)據(jù)庫(kù)課程設(shè)計(jì)
- 數(shù)據(jù)庫(kù)學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)——學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)----學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--- 學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)----學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)-數(shù)據(jù)庫(kù)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)-數(shù)據(jù)庫(kù)課程設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)----學(xué)生成績(jī)管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論