學(xué)生成績(jī)管理系統(tǒng)pb課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  PB課程設(shè)計(jì)</b></p><p><b>  學(xué)</b></p><p><b>  生</b></p><p><b>  成</b></p><p><b>  績(jī)</b></p>

2、<p><b>  管</b></p><p><b>  理</b></p><p><b>  系</b></p><p><b>  統(tǒng)</b></p><p><b>  學(xué) 號(hào):</b></p>

3、<p><b>  姓 名:</b></p><p><b>  指導(dǎo)老師: </b></p><p><b>  引言</b></p><p>  Powerbuilder 是目前最有代表性的數(shù)據(jù)庫前端開發(fā)工具之一。它具有強(qiáng)大的數(shù)據(jù)庫管理功能,以特有的數(shù)據(jù)窗口技術(shù)和簡(jiǎn)單易用功能強(qiáng)大

4、的powerscript語言滿足了快速開發(fā)和實(shí)施的需要。</p><p>  在這個(gè)學(xué)期學(xué)習(xí)的powerbuilder結(jié)合數(shù)據(jù)庫原理進(jìn)行了本系統(tǒng)的設(shè)計(jì),本系統(tǒng)為學(xué)生成績(jī)管理系統(tǒng),制作了一個(gè)小型的系統(tǒng),實(shí)現(xiàn)了基本的學(xué)生成績(jī)管理功能,在實(shí)踐中進(jìn)一步理解和掌握了數(shù)據(jù)庫技術(shù),并使所學(xué)的知識(shí)有一定的應(yīng)用價(jià)值。</p><p>  學(xué)生成績(jī)管理系統(tǒng)能夠有效運(yùn)行,從而完成自動(dòng),高效,科學(xué)的學(xué)生和老師信息

5、的輸入和維護(hù),以及老師對(duì)學(xué)生成績(jī)的錄入。系統(tǒng)開發(fā)的總體任務(wù)是實(shí)現(xiàn)學(xué)生成績(jī)管理的系統(tǒng)化,規(guī)范化和自動(dòng)化,同時(shí)這是對(duì)學(xué)完powerbuilder之后開發(fā)的第一次完整實(shí)踐。</p><p>  本學(xué)生成績(jī)管理系統(tǒng)主要包括三大模塊:</p><p>  一、管理員模塊,管理員可對(duì)教師和學(xué)生的基本信息進(jìn)行輸入和維護(hù),對(duì)學(xué)校課程進(jìn)行錄入、修改,對(duì)學(xué)生成績(jī)的查看等。</p><p&g

6、t;  二、教師模塊,教師可查看自己的基本信息,以及對(duì)錄入學(xué)生成績(jī)和登陸密碼的修改等。</p><p>  三、學(xué)生模塊,學(xué)生可查看自己的基本信息、課表,以及選課、退課和修改登陸密碼等。</p><p>  本系統(tǒng)中,基本滿足對(duì)學(xué)生成績(jī)的管理,沒有對(duì)學(xué)生成績(jī)進(jìn)行統(tǒng)計(jì)分析。通過做這次的學(xué)生成績(jī)管理系統(tǒng),自己受益匪淺,由于水平有限,不當(dāng)之處在所難免,懇請(qǐng)老師批評(píng)指正。</p>&

7、lt;p><b>  目錄</b></p><p>  一、系統(tǒng)分析與設(shè)計(jì)1</p><p>  1.1 系統(tǒng)功能分析1</p><p>  1.2 系統(tǒng)功能模塊設(shè)計(jì)1</p><p>  二、數(shù)據(jù)庫設(shè)計(jì)與實(shí)現(xiàn)4</p><p>  2.1 數(shù)據(jù)庫設(shè)計(jì)4</p>&l

8、t;p>  2.2 創(chuàng)建數(shù)據(jù)庫4</p><p>  2.3 創(chuàng)建應(yīng)用7</p><p>  2.4 創(chuàng)建窗口8</p><p>  2.4.1創(chuàng)建登陸窗口8</p><p>  2.4.2創(chuàng)建學(xué)生窗口11</p><p>  2.4.3創(chuàng)建教師窗口15</p><p>  2

9、.4.4創(chuàng)建管理員窗口21</p><p>  2.5 創(chuàng)建選單25</p><p>  2.5.1創(chuàng)建學(xué)生選單25</p><p>  2.5.2創(chuàng)建教師選單26</p><p>  2.6 創(chuàng)建數(shù)據(jù)窗口28</p><p>  2.6.1創(chuàng)建學(xué)生數(shù)據(jù)窗口28</p><p>  

10、2.6.2創(chuàng)建教師數(shù)據(jù)窗口30</p><p>  2.6.3創(chuàng)建管理員數(shù)據(jù)窗口32</p><p><b>  2.7 小結(jié)34</b></p><p><b>  三、使用說明34</b></p><p>  3.1 學(xué)生模塊使用說明34</p><p>  3

11、.2 教師模塊使用說明34</p><p>  3.3 管理員模塊使用說明35</p><p>  3.4 登陸模塊使用說明35</p><p>  四、系統(tǒng)優(yōu)缺點(diǎn)分析35</p><p>  4.1優(yōu)點(diǎn)分析35</p><p>  4.2 缺點(diǎn)分析35</p><p>  五、 心

12、得體會(huì)35</p><p>  六、 參考文獻(xiàn)35</p><p><b>  系統(tǒng)分析和設(shè)計(jì)</b></p><p>  學(xué)生成績(jī)管理是學(xué)校教務(wù)管理的重要環(huán)節(jié)之一。近年來,隨著高校的不斷擴(kuò)招,學(xué)生人數(shù)越來越多,學(xué)生成績(jī)管理的任務(wù)更加繁重,必須借助現(xiàn)代化的管理工具和手段提高學(xué)生成績(jī)管理效率。學(xué)生成績(jī)管理系統(tǒng)廣泛應(yīng)用于高校教務(wù)管理部門的學(xué)生成

13、績(jī)管理,其作用和功能也是學(xué)生比較熟悉和容易理解的。</p><p>  一個(gè)應(yīng)用系統(tǒng)的開發(fā)過程包括分析、設(shè)計(jì)、實(shí)現(xiàn)、調(diào)試和發(fā)布等階段。以下是分析說明。</p><p><b>  系統(tǒng)功能分析</b></p><p>  本系統(tǒng)可以實(shí)現(xiàn)的功能主要包括以下幾點(diǎn):</p><p>  管理員對(duì)學(xué)生基本信息的輸入和維護(hù),包括學(xué)

14、號(hào)、姓名、性別、專業(yè)、總學(xué)分等。</p><p>  管理員對(duì)教師基本信息的輸入和維護(hù),包括職工號(hào)、姓名、年齡、性別、所授的課程號(hào)等。</p><p>  管理員對(duì)用戶權(quán)限的設(shè)置,包括用戶名、密碼、和登陸權(quán)限等。</p><p>  管理員對(duì)課程信息的輸入和修改,包括課程號(hào)、課程名、開課學(xué)期、學(xué)時(shí)、學(xué)分等。</p><p>  管理員對(duì)學(xué)生成

15、績(jī)的查詢等。</p><p>  教師對(duì)學(xué)生成績(jī)的錄入以及登陸密碼的修改等。</p><p>  學(xué)生對(duì)自己基本信息、課表和成績(jī)查詢,快速選課,修改登陸密碼等。</p><p><b>  系統(tǒng)功能模塊設(shè)計(jì)</b></p><p>  通過對(duì)上述功能的分析、分類、綜合,按照模塊化程序設(shè)計(jì)的要求,得到如圖</p>

16、;<p>  2-1所示的功能模塊圖。</p><p><b>  圖2-1</b></p><p><b>  數(shù)據(jù)庫設(shè)計(jì)與實(shí)現(xiàn)</b></p><p>  數(shù)據(jù)庫在學(xué)生成績(jī)管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構(gòu)的好壞將直接影響到應(yīng)用系統(tǒng)操作效率已經(jīng)能否保證數(shù)據(jù)的一致性、完成性和安全性。</p>

17、;<p><b>  2.1 數(shù)據(jù)庫設(shè)計(jì)</b></p><p>  根據(jù)學(xué)生成績(jī)管理系統(tǒng)的功能要求,通過分析系統(tǒng)要設(shè)計(jì)的相關(guān)實(shí)體一集要收集、存儲(chǔ)和操縱數(shù)據(jù)信息,得到如下圖所示的系統(tǒng)E-R圖。</p><p><b>  關(guān)系模式如下:</b></p><p>  學(xué)生基本信息(學(xué)號(hào),姓名,性別,專業(yè),總學(xué)分

18、)</p><p>  教師基本信息(職工號(hào),姓名,年齡,性別,所授課程)</p><p>  課程(課程號(hào),課程名,開課學(xué)期,學(xué)時(shí),學(xué)分)</p><p>  成績(jī)(學(xué)號(hào),課程號(hào),成績(jī),所獲學(xué)分)</p><p>  用戶(用戶賬號(hào),密碼,權(quán)限)</p><p>  E-R圖如圖3-1:</p><

19、;p><b>  1</b></p><p><b>  n</b></p><p><b>  n</b></p><p><b>  1</b></p><p><b>  1</b></p><p>

20、;<b>  1</b></p><p><b>  圖3-1</b></p><p>  2.2 創(chuàng)建數(shù)據(jù)庫 </p><p>  開始,在E盤根目錄下建立本實(shí)例的工作文件夾“workspace”再在”E:\workspace”文件夾下建立文件夾”data”,用于存儲(chǔ)數(shù)據(jù)文件。</p><p> 

21、 選擇ODB ODBC----Utilities---Create ASA Database,如圖4-1</p><p><b>  圖4-1</b></p><p>  選擇table----new table設(shè)置參數(shù)如圖4-2到圖5-4。</p><p><b>  圖4-2</b></p><p&

22、gt;<b>  圖4-3</b></p><p><b>  圖5-1</b></p><p><b>  圖5-2</b></p><p><b>  圖5-3</b></p><p><b>  圖5-4</b></p&g

23、t;<p><b>  1.“學(xué)生”表</b></p><p>  表名:student</p><p><b>  主鍵:xh</b></p><p><b>  2.“教師”表</b></p><p>  表名:teacher</p><p

24、><b>  主鍵:zgh</b></p><p><b>  外鍵:kch</b></p><p><b>  3.“課程”表</b></p><p><b>  表名:kc</b></p><p><b>  主鍵:kch</b&

25、gt;</p><p><b>  4.“成績(jī)”表</b></p><p><b>  表名:xs_cj</b></p><p><b>  主鍵:xh和kch</b></p><p><b>  外鍵:xh和kch</b></p><

26、p><b>  5.“用戶”表</b></p><p><b>  表名:user</b></p><p><b>  主鍵:id</b></p><p>  表之間的具體聯(lián)系如圖6-1:</p><p><b>  圖6-1</b></p&g

27、t;<p><b>  2.3創(chuàng)建應(yīng)用</b></p><p>  在”E:\workspace”文件夾下建立工作空間命名為“workspace”,如圖7-1和7-2:</p><p><b>  圖7-1</b></p><p><b>  圖7-2</b></p>&l

28、t;p>  創(chuàng)建新的應(yīng)用,打開new,選擇“target”頁中的應(yīng)用“Application”,單擊ok,彈出保存文件對(duì)話框,選擇到新建的目錄E:\workspace,輸入文件名為“project”,單擊finish,具體如圖8-1:</p><p><b>  圖8-1</b></p><p>  創(chuàng)建應(yīng)用之后,在project的open事件中編寫代碼:<

29、;/p><p>  // Profile student</p><p>  SQLCA.DBMS = "ODBC"</p><p>  SQLCA.AutoCommit = False</p><p>  SQLCA.DBParm = "ConnectString='DSN=student;UID=dba;

30、PWD=sql'"</p><p><b>  connect;</b></p><p>  if sqlca.sqlcode<>0 then</p><p>  messagebox("提示","數(shù)據(jù)庫連接失??!")</p><p><b>

31、;  else </b></p><p>  open(w_load)</p><p><b>  end if</b></p><p><b>  2.4 創(chuàng)建窗口</b></p><p>  2.4.1 創(chuàng)建登陸窗口</p><p>  1.單擊new,選擇P

32、B Object,點(diǎn)擊window,然后單擊ok,窗口如下:</p><p>  保存窗口為“w_load”。</p><p>  2.添加控件并設(shè)置屬性</p><p>  在窗口上放置1個(gè)圖片控件,5個(gè)靜態(tài)文本控件,2個(gè)單行編輯控件,1個(gè)</p><p><b>  圖9-1</b></p><p

33、>  下拉列表控件,2個(gè)按鈕控件,各個(gè)控件的位置和大小如圖9-1所示。</p><p><b>  3.編寫腳本</b></p><p><b> ?。?)定義全局變量</b></p><p>  string qj_id,qj_password,qj_qx,qj_kch,qj_xf</p><p

34、>  string s_kch,s_xh</p><p><b> ?。?)定義實(shí)例變量</b></p><p><b>  int l_n;</b></p><p>  string l_id,l_password,l_qx</p><p> ?。?)w_load的open事件腳本為:<

35、;/p><p>  st_4.text=string(today(),"yyyy-mm-dd")</p><p>  st_5.text =string(now(),"hh:mm:ss")</p><p><b>  Timer(1)</b></p><p>  在timer()中腳本

36、為:</p><p>  st_5.text=string(now())</p><p>  (4)在sle_1中的getfocus中的腳本為:</p><p>  this.selecttext(1,len(this.text))</p><p> ?。?)在sle_2中的getfocus中的腳本為:</p><p>

37、;  l_id=trim(sle_1.text)</p><p>  if l_id=""then</p><p>  messagebox("error","用戶名不能為空,請(qǐng)輸入!")</p><p>  sle_1.setfocus();</p><p><b>  

38、else</b></p><p>  select "user"."id"</p><p>  into :qj_id</p><p>  from "user"</p><p>  where ("user"."id"=:l_id

39、);</p><p>  if sqlca.sqlcode<>0 then</p><p>  messagebox("error","用戶名不存在,請(qǐng)重新輸入!")</p><p>  sle_1.setfocus();</p><p><b>  else</b>&

40、lt;/p><p>  sle_2.setfocus();</p><p><b>  end if</b></p><p><b>  end if</b></p><p>  this.selecttext(1,len(this.text))</p><p>  (6)在dd

41、plb_1的selecttionchanged中的腳本為:</p><p>  l_id=trim(sle_1.text)</p><p>  l_password=trim(sle_2.text)</p><p>  if l_password=""then</p><p>  messagebox("erro

42、r","密碼不能為空,請(qǐng)輸入!")</p><p>  sle_2.setfocus();</p><p><b>  else</b></p><p>  select "user"."id","user"."password"<

43、;/p><p>  into :qj_id,:qj_password</p><p>  from "user"</p><p>  where ("user"."id"=:l_id and "user"."password"=:l_password);</p>

44、;<p>  if sqlca.sqlcode<>0 then</p><p>  messagebox("error","密碼錯(cuò)誤,請(qǐng)重新輸入!")</p><p>  sle_2.setfocus();</p><p><b>  else</b></p>&l

45、t;p>  ddplb_1.setfocus();</p><p><b>  end if</b></p><p><b>  end if</b></p><p> ?。?)在cb_1的clicked中的腳本為:</p><p>  l_id=trim(sle_1.text)</p&

46、gt;<p>  l_password=trim(sle_2.text)</p><p>  l_qx=trim(ddplb_1.text)</p><p>  select "user"."id","user"."password","user"."qx"

47、</p><p>  into :qj_id,:qj_password,:qj_qx</p><p>  from "user"</p><p>  where ("user"."id"=:l_id and "user"."password"=:l_password

48、and "user"."qx"=:l_qx);</p><p>  if sqlca.sqlcode<>0 then</p><p>  messagebox("error","用戶類型不匹配,請(qǐng)重新選擇!")</p><p>  ddplb_1.setfocus();<

49、;/p><p><b>  else</b></p><p>  choose case l_qx</p><p>  case "管理員"</p><p>  open(w_admin)</p><p>  close(w_load)</p><p>&l

50、t;b>  case "教師"</b></p><p>  open(w_teacher)</p><p>  close(w_load)</p><p><b>  case "學(xué)生"</b></p><p>  open(w_student)</p>

51、;<p>  close(w_load)</p><p>  end choose</p><p><b>  end if</b></p><p>  (8)給cb_1定義一個(gè)用戶事件u_keydown,事件號(hào)為pbm_keydown,u_keydown中的腳本為:</p><p>  if keydow

52、n(keyenter!) then</p><p>  this.triggerevent(clicked!)</p><p><b>  end if</b></p><p> ?。?)cb_2的clicked腳本為:</p><p>  close(parent)</p><p>  (10)

53、給cb_2定義一個(gè)用戶事件u_2,事件號(hào)為pbm_keydown,u_2中的腳本為:</p><p>  if keydown(keyenter!) then</p><p>  this.event clicked()</p><p><b>  end if</b></p><p>  2.4.2 創(chuàng)建學(xué)生窗口<

54、;/p><p>  1 創(chuàng)建窗口,命名為“w_student”:</p><p><b>  圖11-1</b></p><p><b> ?。?)添加控件</b></p><p>  在窗口上放置一個(gè)數(shù)據(jù)窗口控件,一個(gè)選單,如圖11-1</p><p>  創(chuàng)建學(xué)生快速選課窗口

55、</p><p>  創(chuàng)建學(xué)生選課窗口命名為“w_ksxk”;</p><p><b>  圖12-1</b></p><p><b>  添加控件</b></p><p>  在窗口上放置一個(gè)數(shù)據(jù)窗口控件,2個(gè)靜態(tài)文本控件,1個(gè)單行編輯文本控件,三個(gè)按鈕控件,給數(shù)據(jù)窗口控件添加個(gè)數(shù)據(jù)窗口對(duì)象d_k

56、sxk,如圖12-1。</p><p>  在w_ksxk的open事件中的腳本為:</p><p>  dw_1.settransobject(sqlca)</p><p>  dw_1.retrieve()</p><p>  在cb_1的clicked中的腳本為:</p><p><b>  strin

57、g m</b></p><p>  m=trim(sle_1.text)</p><p>  insert xs_cj(xh,kch)</p><p>  values (:qj_id,:m)</p><p>  using sqlca;</p><p>  if sqlca.sqlcode<>

58、0 then</p><p>  messagebox("error","選課失敗:此課程不是可選課程或已被選,請(qǐng)檢查!")</p><p>  sle_1.setfocus()</p><p>  sle_1.selecttext(1,len(m))</p><p><b>  else&l

59、t;/b></p><p>  messagebox("選課成功","你已成功選定課程號(hào)"+m)</p><p>  sle_1.text=""</p><p><b>  end if</b></p><p>  在cb_2中的clicked的腳本為:&

60、lt;/p><p>  sle_1.text=""</p><p>  在cb_3中的clicked的腳本為:</p><p>  close(parent)</p><p><b>  3創(chuàng)建快速退課窗口</b></p><p>  創(chuàng)建學(xué)生退課窗口,命名為“w_tuike”:&

61、lt;/p><p><b>  圖13-1</b></p><p><b>  (2)添加控件</b></p><p>  在窗口上放置一個(gè)數(shù)據(jù)窗口控件,2個(gè)靜態(tài)文本控件,1個(gè)單行編輯文本控件,三個(gè)按鈕控件,給數(shù)據(jù)窗口控件添加個(gè)數(shù)據(jù)窗口對(duì)象d_kc。如圖13-1.</p><p> ?。?)在w_tui

62、ke的open事件中的腳本為:</p><p>  dw_1.settransobject(sqlca)</p><p>  dw_1.retrieve()</p><p> ?。?)在cb_1的clicked中的腳本為:</p><p>  string m,cj_kch</p><p>  m=trim(sle_1

63、.text)</p><p>  select "xs_cj"."kch"</p><p>  into :cj_kch</p><p>  from "xs_cj"</p><p>  where("xs_cj"."xh"=:qj_id);&

64、lt;/p><p>  if cj_kch<>m then</p><p>  messagebox("error","課程表中沒有此課程,請(qǐng)重新輸入!")</p><p>  sle_1.setfocus()</p><p>  sle_1.selecttext(1,len(m))</p

65、><p><b>  else</b></p><p>  delete from xs_cj</p><p>  where("xs_cj".kch=:m)</p><p>  using sqlca;</p><p>  messagebox("退選成功",

66、"你已成功退選課程號(hào)"+m)</p><p>  w_tuike.dw_1.retrieve(qj_id)</p><p>  sle_1.text=""</p><p><b>  end if</b></p><p>  (5)在cb_2中的clicked的腳本為:</p

67、><p>  sle_1.text=""</p><p> ?。?)在cb_3中的clicked的腳本為:</p><p>  close(parent)</p><p>  4 創(chuàng)建修改密碼窗口</p><p> ?。?)創(chuàng)建學(xué)生登錄密碼修改窗口,命名為“w_password”:</p>

68、<p><b>  圖14-1</b></p><p><b>  添加控件</b></p><p>  在窗口上放置2個(gè)靜態(tài)文本框控件,1個(gè)單行編輯控件,2個(gè)按鈕控件。如圖14-1.</p><p>  在cb_1的clicked事件中的腳本為:</p><p><b>  

69、string l</b></p><p><b>  int n</b></p><p>  l=trim(sle_1.text)</p><p>  n=len(sle_1.text)</p><p>  if l=""or n>10 then</p><p&g

70、t;  messagebox("提示","新密碼為空或長(zhǎng)度大于10,請(qǐng)檢查!")</p><p><b>  else</b></p><p>  update "user"</p><p>  set "user"."password"=:l&

71、lt;/p><p>  where "user"."id"=:qj_id</p><p>  using sqlca;</p><p>  if sqlca.sqlcode = 0 then</p><p>  messagebox("提示","密碼修改成功!請(qǐng)記住新密碼:&q

72、uot;+l)</p><p>  close(w_password)</p><p><b>  else</b></p><p>  messagebox("提示","密碼修改失敗:~n長(zhǎng)度過長(zhǎng)或有特殊字符!")</p><p><b>  return</b&

73、gt;</p><p><b>  end if</b></p><p><b>  end if</b></p><p>  (4) 在cb_2的clicked事件中的腳本為:</p><p>  sle_1.text=""</p><p>  5

74、創(chuàng)建幫助窗口,命名為“w_guanyu”:如圖15-1.</p><p><b>  圖15-1</b></p><p>  2.4.3 創(chuàng)建教師窗口</p><p>  創(chuàng)建窗口,命名為“w_teacher“:</p><p><b>  圖16-1</b></p><p>

75、;  (1) 在窗口上放置1個(gè)數(shù)據(jù)窗口控件,給數(shù)據(jù)窗口控件添加一個(gè)數(shù)據(jù)窗口對(duì) 象。如圖16-1.</p><p>  (2) 在w_teacher的open事件中的腳本為:</p><p>  dw_1.settransobject(sqlca)</p><p>  dw_1.retrieve(qj_id)</p>&

76、lt;p>  2創(chuàng)建進(jìn)入錄入學(xué)生成績(jī)窗口,命名為“w_srkch”:</p><p><b>  圖16-2</b></p><p> ?。?)窗口上放置1個(gè)靜態(tài)文本框控件,一個(gè)單行編輯框控件,2個(gè)按鈕控件。如圖16-2.</p><p> ?。?)在cb_1中的clicked中的腳本為:</p><p><

77、b>  string m</b></p><p><b>  int n</b></p><p>  m=trim(sle_1.text)</p><p>  n=len(sle_1.text)</p><p>  select "teacher"."kch"&l

78、t;/p><p>  into :qj_kch</p><p>  from "teacher"</p><p>  where("teacher"."zgh"=:qj_id);</p><p>  if qj_kch<>m then</p><p>

79、  messagebox("error","你輸入的課程號(hào)不在你的授課范圍!請(qǐng)重新輸入!")</p><p>  sle_1.setfocus()</p><p>  sle_1.selecttext(1,n)</p><p><b>  else</b></p><p>  op

80、en(w_lrcj)</p><p>  close(w_srkch)</p><p><b>  end if</b></p><p> ?。?)在cb_2中的clicked的腳本為:</p><p>  sle_1.text=""</p><p>  3 創(chuàng)建錄入成績(jī)窗口,

81、命名為“w_lrcj”</p><p><b>  圖17-1</b></p><p>  在窗口上放置2個(gè)靜態(tài)文本框控件,2個(gè)單行編輯框控件,3個(gè)按鈕控件。如圖17-1.</p><p>  給sle_2中的getfocus的腳本為:</p><p><b>  string m</b></

82、p><p>  m=trim(sle_1.text)</p><p>  if m="" or len(m)>10 then</p><p>  messagebox("error","學(xué)號(hào)格式不正確,請(qǐng)重新輸入!")</p><p>  sle_1.setfocus()</

83、p><p>  sle_1.selecttext(1,len(m))</p><p><b>  else</b></p><p>  select "xs_cj"."xh","xs_cj"."kch"</p><p>  into :s_xh

84、,:s_kch</p><p>  from "xs_cj"</p><p>  where("xs_cj"."xh"=:m and "xs_cj"."kch"=:qj_kch);</p><p>  if sqlca.sqlcode<>0 then&l

85、t;/p><p>  messagebox("你沒有權(quán)限錄入","此學(xué)生沒有選擇此門課程")</p><p>  sle_1.setfocus()</p><p>  sle_1.selecttext(1,len(m))</p><p><b>  else</b></p>

86、<p>  sle_2.setfocus()</p><p><b>  end if</b></p><p><b>  end if</b></p><p>  給cb_1中的clicked的腳本為:</p><p>  int m,n,chengji</p><

87、;p>  n=integer(sle_2.text)</p><p>  if sle_1.text="" or sle_2.text="" then</p><p>  messagebox("error","學(xué)號(hào)或成績(jī)不能為空")</p><p><b>  else

88、</b></p><p>  select "kc"."xf"</p><p><b>  into :m</b></p><p><b>  from "kc"</b></p><p>  where ("kc&qu

89、ot;."kch"=:s_kch);</p><p>  if n>=0 and n<=100 then</p><p>  select "xs_cj"."cj"</p><p>  into :chengji</p><p>  from "xs_cj&q

90、uot;</p><p>  where("xs_cj"."xh"=:s_xh and "xs_cj"."kch"=:s_kch);</p><p>  if string(chengji)="" then</p><p>  if n>=60 then<

91、/p><p>  update xs_cj set cj=:n,xf=:m</p><p>  where ("xs_cj"."xh"=:s_xh and "xs_cj"."kch"=:s_kch);</p><p>  messagebox("成功","學(xué)號(hào)&

92、quot;+s_xh+"的成績(jī)已錄入!")</p><p><b>  else </b></p><p>  update xs_cj set cj=:n,xf=0</p><p>  where ("xs_cj"."xh"=:s_xh and "xs_cj".&

93、quot;kch"=:s_kch);</p><p>  messagebox("成功","學(xué)號(hào)"+s_xh+"的成績(jī)已錄入!")</p><p><b>  end if</b></p><p>  sle_1.text=""</p>&l

94、t;p>  sle_2.text=""</p><p><b>  else </b></p><p>  messagebox("error","此學(xué)生此門課成績(jī)已存在,不能重復(fù)錄入!")</p><p>  sle_2.setfocus()</p><p&

95、gt;  sle_2.selecttext(1,len(sle_2.text))</p><p><b>  end if</b></p><p><b>  else </b></p><p>  messagebox("error","錄入成績(jī)格式錯(cuò)誤,請(qǐng)檢查!")</p&

96、gt;<p>  sle_2.setfocus()</p><p>  sle_2.selecttext(1,len(sle_2.text))</p><p><b>  end if</b></p><p><b>  end if</b></p><p>  給cb_2的click

97、ed的腳本為:</p><p>  sle_1.text=""</p><p>  sle_2.text=""</p><p>  給cb_3的clicked的腳本為:</p><p>  close(parent)</p><p><b>  創(chuàng)建查詢成績(jī)窗口<

98、/b></p><p>  創(chuàng)建查詢成績(jī)窗口,命名為“w_tcj”</p><p><b>  圖19-1</b></p><p>  在窗口上放置1個(gè)靜態(tài)文本框按鈕,1個(gè)單行編輯框控件,2個(gè)按鈕控件。如圖19-1.</p><p>  給cb_1的clicked的腳本為:</p><p>

99、<b>  string m</b></p><p><b>  int n</b></p><p>  m=trim(sle_1.text)</p><p>  n=len(sle_1.text)</p><p>  select "teacher"."kch&quo

100、t;</p><p>  into :qj_kch</p><p>  from "teacher"</p><p>  where("teacher"."zgh"=:qj_id);</p><p>  if qj_kch<>m then</p><p

101、>  messagebox("error","你的輸入有誤!請(qǐng)重新輸入!")</p><p>  sle_1.setfocus()</p><p>  sle_1.selecttext(1,n)</p><p><b>  else</b></p><p>  w_teach

102、er.dw_1.dataobject="d_tcj"</p><p>  w_teacher.dw_1.settransobject(sqlca)</p><p>  w_teacher.dw_1.retrieve(m)</p><p>  close(w_tcj)</p><p><b>  end if<

103、;/b></p><p>  給cb_2的clicked的腳本為:</p><p>  close(parent)</p><p>  5 創(chuàng)建修改密碼窗口</p><p>  (1)創(chuàng)建教師登錄密碼修改窗口,命名為“w_password”:</p><p><b>  圖20-1</b>&

104、lt;/p><p><b> ?。?)添加控件</b></p><p>  在窗口上放置2個(gè)靜態(tài)文本框控件,1個(gè)單行編輯控件,2個(gè)按鈕控件。如圖20-1.</p><p>  (3)在cb_1的clicked事件中的腳本為:</p><p><b>  string l</b></p>&

105、lt;p><b>  int n</b></p><p>  l=trim(sle_1.text)</p><p>  n=len(sle_1.text)</p><p>  if l=""or n>10 then</p><p>  messagebox("提示",&

106、quot;新密碼為空或長(zhǎng)度大于10,請(qǐng)檢查!")</p><p><b>  else</b></p><p>  update "user"</p><p>  set "user"."password"=:l</p><p>  where &qu

107、ot;user"."id"=:qj_id</p><p>  using sqlca;</p><p>  if sqlca.sqlcode = 0 then</p><p>  messagebox("提示","密碼修改成功!請(qǐng)記住新密碼:"+l)</p><p>  c

108、lose(w_password)</p><p><b>  else</b></p><p>  messagebox("提示","密碼修改失敗:~n長(zhǎng)度過長(zhǎng)或有特殊字符!")</p><p><b>  return</b></p><p><b&g

109、t;  end if</b></p><p><b>  end if</b></p><p>  (4) 在cb_2的clicked事件中的腳本為:</p><p>  sle_1.text=""</p><p>  6創(chuàng)建幫助窗口,命名為“w_guanyu”:如圖21-1</p

110、><p><b>  圖21-1</b></p><p>  2.4.4 創(chuàng)建管理員窗口</p><p>  1 創(chuàng)建管理員窗口,命名為“w_admin”:</p><p><b>  圖21-2</b></p><p>  在窗口上放置1個(gè)按鈕控件和1個(gè)選項(xiàng)卡控件,在選項(xiàng)卡上創(chuàng)

111、建5個(gè)子選項(xiàng),每個(gè)子選項(xiàng)上添加1個(gè)數(shù)據(jù)窗口控件,和5個(gè)按鈕控件。如圖21-2</p><p>  編寫tab_1.tabpage_1(用戶管理)中的代碼:</p><p> ?。?)給tab_1.tabpage_1的constructor中的腳本為:</p><p>  w_admin.tab_1.tabpage_1.dw_1.settransobject(sqlc

112、a)</p><p>  w_admin.tab_1.tabpage_1.dw_1.retrieve()</p><p> ?。?)給tab_1.tabpage_1.dw_1定義一個(gè)用戶事件u_key,事件號(hào)為pbm_dwnprocessenter,當(dāng)焦點(diǎn)落在該控件時(shí),按回車將觸發(fā)u_key,給u_key編寫代碼:</p><p><b>  int co

113、l</b></p><p><b>  long row</b></p><p>  col=getcolumn()</p><p>  row=getrow()</p><p>  if col<3 then</p><p>  setcolumn(col+1)</p&g

114、t;<p><b>  else</b></p><p>  if row<rowcount() then</p><p>  setrow(row+1)</p><p>  scrolltorow(row+1)</p><p>  setcolumn(1)</p><p>&

115、lt;b>  else</b></p><p>  row=insertrow(0)</p><p>  setrow(row)</p><p>  scrolltorow(row)</p><p>  setcolumn(1)</p><p><b>  end if</b>&

116、lt;/p><p><b>  end if</b></p><p>  return 1 </p><p>  (3)給tab_1.tabpage_1.dw_1定義一個(gè)用戶事件u_keyarrow,事件號(hào)為pbm_dwntabdownout,當(dāng)焦點(diǎn)落在該控件時(shí),按回車將觸發(fā)u_keyarrow,給u_keyarrow編寫代碼:<

117、;/p><p><b>  long row</b></p><p>  row=insertrow(0)</p><p>  setrow(row)</p><p>  scrolltorow(row)</p><p> ?。?)給添加記錄的命令按鈕cb_1的clicked事件編寫代碼:</p

118、><p><b>  long row</b></p><p>  row=w_admin.tab_1.tabpage_1.dw_1.insertrow(0)</p><p>  w_admin.tab_1.tabpage_1.dw_1.setrow(row)</p><p>  w_admin.tab_1.tabpage_

119、1.dw_1.scrolltorow(row)</p><p>  w_admin.tab_1.tabpage_1.dw_1.setfocus()</p><p>  (5) 給cb_1定義一個(gè)用戶事件u_1,事件號(hào)為pbm_keydown,當(dāng)焦點(diǎn)落在該焦點(diǎn)時(shí),按任意鍵都將觸發(fā)u_1。給u_1編寫代碼:</p><p>  if keydown(keyenter!)

120、 then</p><p>  w_admin.tab_1.tabpage_1.cb_1.event clicked()</p><p><b>  end if</b></p><p>  (6)給更新記錄的命令按鈕cb_2的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_

121、1.dw_1.update()</p><p>  w_admin.tab_1.tabpage_1.dw_1.reset()</p><p> ?。?)給cb_2定義一個(gè)用戶事件u_2,事件號(hào)為pbm_keydown,當(dāng)焦點(diǎn)落在該焦點(diǎn)時(shí),按任意鍵都將觸發(fā)u_2。給u_2編寫代碼:</p><p>  if keydown(keyenter!) then</p&

122、gt;<p>  w_admin.tab_1.tabpage_1.cb_2.event clicked()</p><p><b>  end if</b></p><p> ?。?)給刪除記錄的命令按鈕cb_3的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_1.dw_1.delet

123、erow(dw_1.getrow())</p><p> ?。?)給cb_3定義一個(gè)用戶事件u_3,事件號(hào)為pbm_keydown,當(dāng)焦點(diǎn)落在該焦點(diǎn)時(shí),按任意鍵都將觸發(fā)u_3。給u_3編寫代碼: </p><p>  if keydown(keyenter!) then</p><p>  w_admin.tab_1.tabpage_1.cb_3

124、.event clicked()</p><p><b>  end if</b></p><p> ?。?0)給插入記錄的命令按鈕cb_4的clicked事件編寫代碼:</p><p><b>  long row</b></p><p>  row=w_admin.tab_1.tabpage_1

125、.dw_1.insertrow(dw_1.getrow())</p><p>  w_admin.tab_1.tabpage_1.dw_1.setrow(row)</p><p>  w_admin.tab_1.tabpage_1.dw_1.scrolltorow(row)</p><p>  w_admin.tab_1.tabpage_1.dw_1.setfocu

126、s()</p><p>  (11)給cb_4定義一個(gè)用戶事件u_4,事件號(hào)為pbm_keydown,當(dāng)焦點(diǎn)落在該焦點(diǎn)時(shí),按任意鍵都將觸發(fā)u_4。給u_4編寫代碼:</p><p>  if keydown(keyenter!) then</p><p>  w_admin.tab_1.tabpage_1.cb_4.triggerevent (clicked!)&l

127、t;/p><p>  end if </p><p>  (12) 給顯示記錄的命令按鈕cb_5的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_1.dw_1.retrieve()</p><p>  (13)給cb_5定義一個(gè)用戶事件u_5,事件號(hào)為pbm_keydown,當(dāng)焦點(diǎn)落在該焦點(diǎn)時(shí)

128、,按任意鍵都將觸發(fā)u_5。給u_5編寫代碼:</p><p>  if keydown(keyenter!) then</p><p>  w_admin.tab_1.tabpage_1.cb_5.event clicked()</p><p><b>  end if</b></p><p>  編寫tab_1.tab

129、page_2(教師管理)中的代碼:</p><p> ?。?)給tab_1.tabpage_2的constructor中的腳本為:</p><p>  w_admin.tab_1.tabpage_2.dw_2.settransobject(sqlca)</p><p>  w_admin.tab_1.tabpage_2.dw_2.retrieve() </p&

130、gt;<p> ?。?)給添加記錄的命令按鈕cb_8的clicked事件編寫代碼:</p><p><b>  long row</b></p><p>  row=w_admin.tab_1.tabpage_2.dw_2.insertrow(0)</p><p>  w_admin.tab_1.tabpage_2.dw_2.se

131、trow(row)</p><p>  w_admin.tab_1.tabpage_2.dw_2.scrolltorow(row)</p><p>  w_admin.tab_1.tabpage_2.dw_2.setfocus() </p><p> ?。?)給更新記錄的命令按鈕cb_10的clicked事件編寫代碼:</p><p>  

132、w_admin.tab_1.tabpage_2.dw_2.update()</p><p>  w_admin.tab_1.tabpage_2.dw_2.reset()</p><p> ?。?)給刪除記錄的命令按鈕cb_11的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_2.dw_2.deleterow(dw_2.g

133、etrow())</p><p> ?。?)給插入記錄的命令按鈕cb_9的clicked事件編寫代碼:</p><p><b>  long row</b></p><p>  row=w_admin.tab_1.tabpage_2.dw_2.insertrow(dw_2.getrow())</p><p>  w_ad

134、min.tab_1.tabpage_2.dw_2.setrow(row)</p><p>  w_admin.tab_1.tabpage_2.dw_2.scrolltorow(row)</p><p>  w_admin.tab_1.tabpage_2.dw_2.setfocus() </p><p>  (6) 給顯示記錄的命令按鈕cb_6的clicked事件編寫

135、代碼:</p><p>  w_admin.tab_1.tabpage_2.dw_2.retrieve()</p><p>  編寫tab_1.tabpage_3(學(xué)生管理)中的代碼:</p><p> ?。?)給tab_1.tabpage_3的constructor中的腳本為:</p><p>  w_admin.tab_1.tabpage

136、_3.dw_3.settransobject(sqlca)</p><p>  w_admin.tab_1.tabpage_3.dw_3.retrieve() </p><p> ?。?)給添加記錄的命令按鈕cb_13的clicked事件編寫代碼:</p><p><b>  long row</b></p><p> 

137、 row=w_admin.tab_1.tabpage_3.dw_3.insertrow(0)</p><p>  w_admin.tab_1.tabpage_3.dw_3.setrow(row)</p><p>  w_admin.tab_1.tabpage_3.dw_3.scrolltorow(row)</p><p>  w_admin.tab_1.tabpag

138、e_3.dw_3.setfocus() </p><p> ?。?)給更新記錄的命令按鈕cb_15的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_3.dw_3.update()</p><p>  w_admin.tab_1.tabpage_3.dw_3.reset()</p><p> ?。?/p>

139、4)給刪除記錄的命令按鈕cb_16的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_3.dw_3.deleterow(dw_3.getrow())</p><p> ?。?)給插入記錄的命令按鈕cb_14的clicked事件編寫代碼:</p><p><b>  long row</b></p

140、><p>  row=w_admin.tab_1.tabpage_3.dw_3.insertrow(dw_3.getrow())</p><p>  w_admin.tab_1.tabpage_3.dw_3.setrow(row)</p><p>  w_admin.tab_1.tabpage_3.dw_3.scrolltorow(row)</p><

141、;p>  w_admin.tab_1.tabpage_3.dw_3.setfocus() </p><p>  (6) 給顯示記錄的命令按鈕cb_12的clicked事件編寫代碼:</p><p>  w_admin.tab_1.tabpage_3.dw_3.retrieve()</p><p>  編寫tab_1.tabpage_4(課程管理)中的代碼:&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論