學生成績管理系統(tǒng)PB課程設(shè)計_第1頁
學生成績管理系統(tǒng)PB課程設(shè)計_第2頁
學生成績管理系統(tǒng)PB課程設(shè)計_第3頁
學生成績管理系統(tǒng)PB課程設(shè)計_第4頁
學生成績管理系統(tǒng)PB課程設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學生成績管理系統(tǒng)程序分析一 系統(tǒng)分析與設(shè)計1)系統(tǒng)功能分析系統(tǒng)功能分析階段的任務(wù)就是確定該系統(tǒng)所要解決的問題及其具體要求。學生成績管理系統(tǒng)需要完成的主要功能如下:(1) 班級信息的輸入和存儲,包括班級編號、班級名稱、所屬專業(yè)、入學時間和學制等。(2) 對已經(jīng)輸入的班級信息的修改、查詢。(3) 學生基本信息的輸入和存儲、包括學號、姓名、性別、出生日期、班級等。(4) 學生基本信息的修改和查詢。(5) 每學期初各班所開設(shè)課程的輸入,包括課程名、學期、學時等。(6) 各班所開設(shè)課程信息的修改和查詢。(7) 學期末輸入每個學生的考試成績。(8) 學生成績的修改。(9) 查詢某個學生。(10) 查詢并打

2、印某班某學期所有學生的各科成績。(11) 查詢并打印某班某學期某課成績。(12) 系統(tǒng)具有用戶和密碼的管理。2)系統(tǒng)功能模塊分析通過上面各項功能的分析、分類、綜合,按照模塊化程序設(shè)計的要求,得到它的模塊結(jié)構(gòu):(1)系統(tǒng)管理 它包括密碼修改,用戶管理,登錄控制。(2)班級信息管理 它包括班級信息修改,班級信息查詢,班級信息輸入。(2)學生基本信息管理 包括學生基本信息查詢,學生基本信息修改,學生基本信息輸入。(3)課程信息管理 包括課程信息查詢修改,課程信息輸入。(4)成績信息管理 包括成績查詢,成績修改,成績輸入。二、數(shù)據(jù)庫設(shè)計和實現(xiàn)1)創(chuàng)建數(shù)據(jù)庫在PowerBuilder開發(fā)環(huán)境中打開數(shù)據(jù)庫

3、畫板,使用ODB ODBC接口建立Adaptive Server Anywhere 8.0(ASA 8.0)的數(shù)據(jù)庫,然后建立5個表和1個視圖。分別為“班級”表、“學生基本信息”表、“課程”表、“成績”表、“用戶”表。各表之間的關(guān)系如下圖1所示:圖1 各表的關(guān)聯(lián)關(guān)系2) 創(chuàng)建應(yīng)用對象(1) 創(chuàng)建新的工作空間。(2) 創(chuàng)建應(yīng)用對象,應(yīng)用對象名設(shè)為“app_xscj”。(3) 打開新的對象畫板.為應(yīng)用對象app_xscj的Open事件編寫代碼如下:/ Profile liudiSQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DB

4、Parm = "ConnectString='DSN=liudi;UID=;PWD='"CONNECT;if SQLCA.sqlcode<>0 thenmessagebox("提示","數(shù)據(jù)庫連接失敗!")elseopen(w_login)end if執(zhí)行此應(yīng)用時,首先鏈接數(shù)據(jù)庫“xscj”,成功后打開登錄窗口。三、設(shè)計系統(tǒng)管理模塊1) 設(shè)計登錄窗口登錄窗口如圖2所示:圖2 登錄窗口為登錄窗口編寫腳本。(1)定義全局變量string gs_username,gs_password,gs_admin 分別存儲

5、登錄用戶的姓名、密碼和權(quán)限。(2)定義實例變量 int li_n 存儲登錄時用戶輸入密碼錯誤的嘗試次數(shù),控制在最多3次機會。(3)登錄窗口w_login的open事件腳本如下 li_n=3 初始化變量li_n,限制出錯次數(shù)為3次。(4)確定按鈕cb_1的Clicked事件腳本如下。string ls_username,ls_passwordls_username=trim(sle_1.text)ls_password=trim(sle_2.text)if ls_username="" or ls_password="" thenmessagebox(&q

6、uot;提示","用戶名和密碼不能為空")elseSELECT "users"."name","users"."password","users"."admin"INTO :gs_username,:gs_password,:gs_adminFROM "users"WHERE ("users"."name" = :ls_username ) AND ("users".

7、"password" = :ls_password ); if sqlca.sqlcode=0 then open(w_main) close(w_login) else li_n=li_n - 1 if li_n<>0 then messagebox("提示","用戶名或密碼錯誤") else messagebox("提示","錯誤超過3次,自動退出") halt end if end ifend if(5)放棄按鈕cb_2的Clicked事件腳本如下.halt 2) 設(shè)計密碼修改

8、窗口創(chuàng)建窗口并設(shè)置屬性創(chuàng)建密碼修改窗口w_mmxg,調(diào)整其大小,在窗口上放置3個靜態(tài)文本控件(st_1,st_2,st_3)、2個命令按鈕控件(cb_1,cb_2),設(shè)計完后如圖3所示:圖3 密碼修改窗口為密碼窗口編寫腳本(1)確定按鈕cb_1的Clicked事件腳本如下。 string ls_passwordif trim(sle_1.text)<>gs_password thenmessagebox("提示","舊密碼錯誤")elseif trim(sle_2.text)=(sle_3.text) thenls_password=trim

9、(sle_2.text)UPDATE "users" SET "password" = :ls_password WHERE ("users"."name" = :gs_username ) AND ("users"."password" = :ls_password); if sqlca.sqlcode<>0 then messagebox("提示","密碼修改不成功")elseclose(parent)messagebo

10、x("提示","密碼修改完成")end ifelsemessagebox("提示","兩次密碼不相同")end if end if(2)取消按鈕cb_2的Clicked事件腳本如下。 Close(parent)2) 設(shè)計用戶管理的數(shù)據(jù)窗口和窗口設(shè)計數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口“d_yhgl”,顯示風格為“Grid”,數(shù)據(jù)源類型為“Quick Select”,布局如圖4所示。圖4 數(shù)據(jù)窗口d_yhgl數(shù)據(jù)窗口d_yhgl生成的SQL Select語句為:SELECT"users". "name&

11、quot;, "users". "password", "users". "admin" FROM "users" 創(chuàng)建窗口并設(shè)置屬性創(chuàng)建用戶管理窗口w_yhgl,調(diào)整其大小,在窗口上放置1個數(shù)據(jù)窗口控件(dw_1)、4個命令按鈕控件( cb_1、cb_2、cb_3、cb_4),設(shè)計完后的窗口如圖5所示:圖5 用戶管理窗口為窗口編寫腳本(1)用戶管理窗口w_yhgl的Open事件腳本如下。dw_1.settransobject( sqlca )dw_1.retrieve()(2)用戶管理窗口w_

12、yhgl的Closequery事件腳本如下。integer rtdw_1.accepttext()if dw_1.modifiedcount() =0 and dw_1.deletedcount()=0 thenreturn 0elsert=messagebox("提示","添加修改內(nèi)容未保存,確實退出嗎?",Question!,YesNo!)if rt=1 then return 0end ifend ifreturn 1(3)數(shù)據(jù)窗口控件dw_1的Itemechanged事件腳本如下。cb_3.enabled=true /激活“保存”按鈕(4)添加按

13、鈕控件cb_1的Clicked事件腳本如下。integer rowrow=dw_1.insertrow(0)dw_1.scrolltorow(row)(5)刪除按鈕控件cb_2的Clicked事件腳本如下。dw_1.deleterow(0)cb_3.enabled=true(6)保存按鈕控件cb_3的Clicked事件腳本如下。if dw_1.update(true,false)=1 thendw_1.resetupdate()commit;cb_3.enabled=falseelserollback;messagebox("提示","保存數(shù)據(jù)失敗!")

14、end if(7)退出按鈕控件cb_4的Clicked事件腳本如下。close(parent)四、設(shè)計主窗口和菜單1)創(chuàng)建菜單對象菜單結(jié)構(gòu)如圖6所示。菜單對象名為“m_main”,菜單欄中的菜單項設(shè)置了訪問鍵(AccessKey),常用的菜單項設(shè)置了快捷鍵(如退出系統(tǒng)的快捷鍵為Alt+F4,最常用的菜單項在工具條上建立了按鈕。)下面編寫各個菜單項的腳本。對于這些代碼,在對應(yīng)的窗口沒有建立之前先注釋掉,在建立之后再去掉注釋。(1)系統(tǒng)菜單下密碼修改菜單的Clicked事件腳本如下。Open(w_mmxg)(2)系統(tǒng)菜單下用戶管理菜單的Clicked事件腳本如下。Open(w_yhgl)(3)系統(tǒng)

15、菜單下退出系統(tǒng)菜單的Clicked事件腳本如下。Close(parentwidow)(4)班級管理菜單下錄入班級信息 菜單的Clicked事件腳本如下。opensheet(w_banji_shuru,w_main,6,Original!)5)班級管理菜單下修改班級信息菜單的Clicked事件腳本如下。opensheet(w_banji_xiugai,w_main,6,Original!)(6)班級管理菜單下瀏覽班級信息菜單的Clicked事件腳本如下。opensheet(w_banji_liulan,w_main,6,Original!)(7)學生管理菜單下錄入學生信息菜單的Clicked事件

16、腳本如下。opensheet(w_jiben_shuru,w_main,6,Original!)(8)學生管理菜單下修改學生信息菜單的Clicked事件腳本如下。opensheet(w_jiben_xiugai,w_main,6,Original!)(9)學生管理菜單下查詢學生信息菜單的Clicked事件腳本如下。opensheet(w_jiben_chaxun,w_main,6,Original!)(10)課程管理菜單下錄入修改開設(shè)課程菜單的Clicked事件腳本如下。opensheet(w_bjkc_shurnxiugai,w_main,6,Original!)(11)課程管理菜單下查詢開

17、設(shè)課程菜單的Clicked事件腳本如下。opensheet(w_bjkc_chaxun,w_main,6,Original!)(12)成績管理菜單下錄入修改成績菜單的Clicked事件腳本如下。opensheet(w_xscj_shuru,w_main,6,Original!) (13)成績管理菜單下查詢個人成績菜單的Clicked事件腳本如下。opensheet(w_xscj_chaxun,w_main,6,Original!)(14)成績管理菜單下查詢班級成績菜單的Clicked事件腳本如下。opensheet(w_xscj_bjcx,w_main,6,Original!)(15)成績管理

18、菜單下查詢課程成績菜單的Clicked事件腳本如下。opensheet(w_xscj_kccx,w_main,6,Original!)(16)窗口菜單下層疊窗口菜單的Clicked事件腳本如下。w_main.arrangesheets (cascade!)(17)幫助菜單下關(guān)于菜單的Clicked事件腳本如下。 open(w_about) 圖6 菜單結(jié)構(gòu)(18)幫助菜單下聯(lián)機幫助菜單的Clicked事件腳本如下。ShowHelp("d:xscjhelpxscjhelp.chm",index!)2) 設(shè)計窗口本次學生成績管理系統(tǒng)的主窗口界面如圖7所示:圖7 主窗口界面創(chuàng)建窗口

19、對象w_main,其Open事件腳本如下。if gs_admin='n' thenm_main.m_系統(tǒng).m_用戶管理.enabled=falseend if其功能是非管理員用戶進入系統(tǒng)時關(guān)閉【用戶管理】菜單項。五、設(shè)計班級管理模塊1) 設(shè)計訪問班級信息的數(shù)據(jù)窗口設(shè)計輸入班級信息的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_banji_shuru,顯示風格為“Freeform”,數(shù)據(jù)源類型為“Quick Select”,其布局如圖8所示。圖8 數(shù)據(jù)窗口d_banji_shuru數(shù)據(jù)窗口d_banji_shuru生成的SQL Select語句為:SELECT "banji".&q

20、uot;bjbh", "banji"."bjmc", "banji"."zymc", "banji"."xz", "banji"."rxsj", "banji"."rs" FROM "banji" 設(shè)計修改班級信息的數(shù)據(jù)信息創(chuàng)建數(shù)據(jù)窗口d_banji_xiugai,顯示風格為“Grid”,數(shù)據(jù)源類型為“Quick Select”,其布局如圖9所示圖9 數(shù)據(jù)窗口d_ba

21、nji_xiugai數(shù)據(jù)窗口d_banji_xiugai生成的SQL Select語句為:SELECT "banji"."bjbh", "banji"."bjmc", "banji"."zymc", "banji"."xz", "banji"."rxsj", "banji"."rs" FROM "banji" ORDER BY "

22、;banji"."bjbh" ASC 2)設(shè)計訪問班級信息的窗口設(shè)計輸入窗口創(chuàng)建窗口對象w_shuru,調(diào)整其大小,放置1個數(shù)據(jù)窗口控件(dw_1)、8個命令按鈕控件(cb_1cb_8),窗口布局如圖10所示。圖10 輸入窗口設(shè)置完屬性后開始編寫腳本代碼,其中窗口w_shuru的Open事件、命令按鈕(添加、刪除、保存、退出)的Clicked事件同窗口w_yhgl的相應(yīng)事件腳本。其他命令按鈕的事件腳本如下:(1)|<<按鈕的Clicked事件腳本如下。dw_1.scrolltorow(1)(2)<按鈕的Clicked事件腳本如下。dw_1.scr

23、ollpriorrow()(3)>按鈕的Clicked事件腳本如下。dw_1.scrollnextrow()(4)>>|按鈕的Clicked事件腳本如下。設(shè)計修改窗口創(chuàng)建窗口對象w_xiugai,調(diào)整其大小,放置1個數(shù)據(jù)窗口控件(dw_1)、4個命令按鈕控件(cb_1cb_4),窗口布局如圖11所示:圖11 修改窗口窗口和控件的事件腳本與以上輸入窗口的對應(yīng)部分相同。設(shè)計輸入班級信息窗口通過繼承輸入窗口w_shuru生成輸入班級信息窗口w_banji_shuru,將數(shù)據(jù)控件dw_1的DataObject屬性設(shè)置為d_banji_shuru,將窗口的Tile屬性改為“錄入班級信息

24、”,此窗口設(shè)計便完成了。如圖12所示:圖12 錄入班信息級窗口設(shè)計修改班級信息窗口通過繼承輸入窗口w_xiugai生成輸入班級信息窗口w_banji_xiugai,將數(shù)據(jù)控件dw_1的DataObject屬性設(shè)置為d_banji_xiugai,將窗口的Tile屬性改為“修改班級信息”,此窗口設(shè)計便完成了。如圖13所示:圖13 修改班級信息窗口設(shè)計瀏覽班級信息窗口創(chuàng)建窗口對象w_banji_liulan,調(diào)整其大小,放置一個數(shù)據(jù)窗口控件dw_1,調(diào)整窗口布局如圖14所示。圖14 瀏覽班級信息窗口窗口的Open事件腳本如為:dw_1.settransobject(sqlca)dw_1.retrie

25、ve()六、設(shè)計學生基本信息管理模塊1)設(shè)計訪問學生基本信息的數(shù)據(jù)窗口設(shè)計輸入學生基本信息的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_jiben_shuru,顯示風格為“Freeform”,數(shù)據(jù)源類型為“Quick Select”,其布局如圖15所示:圖15 數(shù)據(jù)窗口d_jiben_shuru數(shù)據(jù)窗口的d_jiben_shuru生成的SQL Select語句為: SELECT "jiben"."xh", "jiben"."xm", "jiben"."xb", "jiben"

26、."csrq", "jiben"."jtzz", "jiben"."bjbh" FROM "jiben" 設(shè)計修改學生基本信息的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_jiben_xiugai,顯示風格為“Grid”,數(shù)據(jù)源類型為“Quick Select”,其布局如圖16所示:圖16 數(shù)據(jù)窗口d_jiben_xiugai數(shù)據(jù)窗口d_jiben_xiugai生成的SQL Seleect語句為: SELECT "jiben"."xh", "ji

27、ben"."xm", "jiben"."xb", "jiben"."csrq", "jiben"."jtzz", "jiben"."bjbh" FROM "jiben" ORDER BY "jiben"."xh" ASC 設(shè)計查詢學生基本信息的數(shù)據(jù)窗口 創(chuàng)建數(shù)據(jù)窗口d_jiben_chaxun,顯示風格為“Grid”,數(shù)據(jù)源類型為“SQL Sele

28、ct”,其布局如圖17所示:圖17 數(shù)據(jù)窗口d_jiben_chaxun其中,定義3個String型的檢索參數(shù)變量mxh、mxm、mbj,分別表示學號、姓名、班級,形成帶檢索參數(shù)的數(shù)據(jù)窗口。2)設(shè)計訪問學生基本信息的窗口設(shè)計輸入學生基本信息的窗口 通過繼承窗口輸入窗口w_shuru生成輸入學生基本信息窗口w_jiben_shuru,將數(shù)據(jù)控件dw_1的DataObject屬性設(shè)置為 d_jiben_shuru,將窗口的Title屬性改為“錄入學生基本信息”,如圖18。圖18 錄入學生基本信息窗口2設(shè)計輸入學生基本信息的窗口通過繼承窗口輸入窗口w_xiugai生成修改學生基本信息窗口w_jibe

29、n_xiugai, 將數(shù)據(jù)控件dw_1的DataObject屬性設(shè)置為 d_jiben_xiugai,將窗口的Title屬性改為“修改學生基本信息”,如圖19: 3設(shè)計查詢學生基本信息的窗口 要求此窗口中能夠根據(jù)學生的姓名或?qū)W號查詢出學生的基本信息,能夠根據(jù)班級名稱查詢出該班所有學生的基本信息。窗口如圖20所示:圖19 修改學生基本信息窗口圖20 查詢學生基本信息窗口查詢按鈕的Open事件腳本如下。dw_1.settransobject(sqlca)if ddplb_1.text="" or sle_1.text="" thenmessagebox(&q

30、uot;提示","查詢列和查詢內(nèi)容不能為空!")returnend if string strstr=trim(sle_1.text)choose case ddplb_1.textcase "學號"dw_1.retrieve(str,"%","%")case "姓名"dw_1.retrieve("%",str,"%")case "班級名稱"dw_1.retrieve("%","%",s

31、tr)end choose代碼中根據(jù)查詢依據(jù)的不同,以不同參數(shù)方式檢索。七、設(shè)計課程管理模塊1)設(shè)計訪問課程信息的數(shù)據(jù)窗口設(shè)計輸入班級課程信息的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_bjkc_shuru,顯示風格為“Grid”,數(shù)據(jù)源類型為“Quick Select”,其布局如圖21所示:圖20 數(shù)據(jù)窗口d_bjkc_shuru數(shù)據(jù)窗口d_bjkc_shuru生成的SQL Seleect語句為: SELECT "bjkc"."bjbh", "bjkc"."xq", "bjkc"."kcmc"

32、;, "bjkc"."xs", "bjkc"."jsxm" FROM "bjkc" .設(shè)計查詢班級課程信息的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_bjkc_chaxun,顯示風格為“Grid”,數(shù)據(jù)源類型為“Quick Select”,其布局如圖21所示。圖21 數(shù)據(jù)窗口d_bjkc_chaxunn其中,定義2個 String型檢索參數(shù)變量mxq、mbjmc,分別表示學期、班級,形成帶檢索參數(shù)的數(shù)據(jù)窗口。 該數(shù)據(jù)窗口的修改屬性為默認值即“不允許修改”。數(shù)據(jù)窗口d_bjkc_chaxun生成的SQL Selec

33、t語句為:SELECT "bjkc"."kcmc", "bjkc"."xs", "bjkc"."jsxm", FROM "bjkc" , "banji""WHERE ("banji". "bjbh"= "bjkc". "bjbh") AND ("bjkc". "xq"=:mxq) AND("banj

34、i "." bjmc"=:mbjmc)2)設(shè)計訪問課程信息的窗口設(shè)計輸入修改班級課程信息的窗口班級課程的輸入和修改都通過此窗口完成,輸入修改班級課程信息的窗口布局如圖22所示。圖22 輸入修改班級課程信息的窗口首先,從祖先窗口w_xiugai繼承生成窗口對象w_bjkc_shuruxiugai,調(diào)整其大小。然后將數(shù)據(jù)窗口控件dw_1的DataObject屬性設(shè)置為d_bjkc_shuru,此窗口設(shè)計即完成。設(shè)計查詢班級開設(shè)課程的窗口 首先創(chuàng)建一個窗口對象w_bjkc_chaxun,調(diào)整大小,在窗口中放置2個靜態(tài)文本控件(st_1,st_2)、2個下拉列表框控件(d

35、dlb_1,ddlb_2)、1個命令按鈕(cb_1)、1個數(shù)據(jù)窗口控件(dw_1),調(diào)整各個控件的位置和大小。如圖23所示:(1)窗口w_bjkc_chaxun的open事件腳本如下dw_1.settransobject(sqlca) int li_xq,li_bjmc,nstring ls_xq,ls_bjmcselect count(distinct xq)into :li_xq圖23 查詢班級開設(shè)課程的窗口from 課程;declare xqcursor cursor forselect xq from 課程 group by xq;open xqcursor;for n=1 to li

36、_xqfetch next xqcursor into :ls_xq;ddplb_1.additem(ls_xq)nextclose xqcursor;select count(distinct bjmc) into :li_bjmcfrom 班級;declare bjmccursor cursor forselect 班級.bjmcfrom 課程, 班級where 課程.bjbh=班級.bjbh group by 班級.bjmc;open bjmccursor;for n=1 to li_bjmcfetch next bjmccursor into :ls_bjmc;ddplb_2.addi

37、tem(ls_bjmc)nextclose bjmccursor; (2)查詢按鈕的Clicked事件腳本如下。dw_1.retrieve(ddplb_1.text,ddplb_2.text) 八、設(shè)計成績管理模塊1)設(shè)計訪問成績信息的數(shù)據(jù)窗口設(shè)計輸入成績信息的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_xscj_shuru,顯示風格為“Grid”,數(shù)據(jù)源類型為“SQL Select”,其布局如圖19所示。數(shù)據(jù)來源與成績表xscj和視圖xsjb,其中,學號、學期、課程名稱和成績?yōu)槌煽儽韝scj的列,姓名是視圖xscj的列。選則Roes|Updata Properties命令,打開數(shù)據(jù)窗口的修改屬性對話框,如圖24

38、所示:圖24 數(shù)據(jù)窗口d_xscj_shuru選擇Rows|Update Properties命令,打開數(shù)據(jù)窗口的修改屬性對話框,設(shè)置數(shù)據(jù)窗口的修改屬性,即只有成績表xscj的成績列可以在數(shù)據(jù)窗口中修改,關(guān)鍵字為成績表xscj的主關(guān)鍵字(xh,xq,kcmc)。然后,單擊工具條上的Tab Order圖標,將列控件sxcj_cj的Tab Order值設(shè)為10,在單擊Tab Order圖標回到原設(shè)計狀態(tài)。如圖25:圖25 數(shù)據(jù)窗口d_xscj_shuru的修改屬性設(shè)計查詢某班級某學期全體學生各科成績的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_xscj_bjcx,顯示風格為 “Cross Tab”,數(shù)據(jù)源類型為 “S

39、QL Select”,數(shù)據(jù)來源于成績表xscj和視圖xsbj。如圖26:圖26 數(shù)據(jù)窗口d_xscj_grcx設(shè)計查詢某班級某學期全體學生各科成績的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_xscj_bjcx,顯示風格為 “Cross Tab”,數(shù)據(jù)源類型為 “SQL Select”,數(shù)據(jù)來源于成績表xscj和視圖xsbj。如圖27:圖27 數(shù)據(jù)窗口d_xscj_bjxc在Headeer1條中添加2個計算域控件,對應(yīng)的表達式分別為mbjmc和mxq,3個文本控件,其文本分別為 “成績單”、 “班級” 、和 “學期”.數(shù)據(jù)窗口的檢索參數(shù)為mxq和mbjmc,分別對應(yīng)于學期和班級名稱,修改屬性取默認值(不允許修改)

40、。設(shè)計查詢某班級某學期全體學生各科成績的數(shù)據(jù)窗口創(chuàng)建數(shù)據(jù)窗口d_xscj_kccx,顯示風格為 “N_Up”,攔數(shù)為2,數(shù)據(jù)源類型為 “SQL Select”,數(shù)據(jù)來源于成績表xscj和視圖xsbj.如圖28:圖28 數(shù)據(jù)窗口d_xsch_kccx在Header條中添加2個計算域控件對應(yīng)的表達式分別為mbcme,3個文本控件,其文本分別為 “成績單”、 “班級” 、和 “課程”.數(shù)據(jù)窗口的檢索參數(shù)為mxq、mbjmc、mkcme,分別對應(yīng)于學期、班級名稱和課程名稱,修改屬性取默認值(不允許修改)。2)設(shè)計訪問成績信息的窗口設(shè)計輸入成績的窗口首先創(chuàng)建窗口對象w_xscj_shuru,在窗口上放置

41、1個分組框控件、3個靜態(tài)文本控件、3個下拉列表框控件、3個命令按鈕控件和1個數(shù)據(jù)窗口控件。如圖29:圖29 輸入成績的窗口各個窗口和控件的事件腳本如下。(1)窗口的open事件腳本如下。 dw_1.settransobject(sqlca)int li_xq,li_bjmc,li_kcmc,nstring ls_xq,ls_bjmc,ls_kcmcselect count(distinct xq)into :li_xqfrom bjkc;declare xqcursor cursor forselect xq from bjkc group by xq;open xqcursor;for n=

42、1 to li_xq fetch next xqcursor into :ls_xq; ddlb_1.additem(ls_xq)nextclose xqcursor;/生成班級下拉列表框的列表項select count(distinct bjbh) into :li_bjmcfrom bjkc;declare bjmccursor cursor forselect banji.bjmcfrom bjkc, banjiwhere bjkc.bjbh=banji.bjbh group by banji.bjmc;open bjmccursor;for n=1 to li_bjmc fetch n

43、ext bjmccursor into :ls_bjmc; ddlb_2.additem(ls_bjmc)nextclose bjmccursor;(2)窗口的closequery事件腳本如下。 integer rt dw_1.accepttext()if dw_1.modifiedcount()=0 then return 0else rt=messagebox("提示","添加修改內(nèi)容未保存,確實退出嗎?",question!,yesno!)if rt=1 thenreturn 0 end if end ifreturn 1(3)課程的下拉列表框的g

44、etfocus事件腳本如下。int li_kcmc,nstring ls_kcmc,ls_xq,ls_bjmcls_xq=ddlb_1.textls_bjmc=ddlb_2.textif not(ls_xq=""or ls_bjmc="") thenselect count(distinct bjkc.kcmc)into :li_kcmcfrom bjkc,banjiwhere(bjkc.bjbh=banji.bjbh)and (banji.bjmc=:ls_bjmc)and(bjkc.xq=:ls_xq);declare kcmccursor curs

45、or forselect bjkc.kcmcfrom banji,bjkcwhere(bjkc.bjbh=banji.bjbh)and (banji.bjmc=:ls_bjmc)and(bjkc.xq=:ls_xq)group by bjkc.kcmc;ddlb_3.reset()open kcmccursor;for n=1 to li_kcmcfetch next kcmccursor into :ls_kcmc;ddlb_3.additem(ls_kcmc)nextclose kcmccursor;end if (4)確定按鈕的clicked事件腳本如下。 int li_xh,nstri

46、ng ls_kcmc,ls_xq,ls_bjmc,ls_xhls_xq=ddlb_1.textls_bjmc=ddlb_2.textls_kcmc=ddlb_3.textif ls_xq="" or ls_bjmc="" or ls_kcmc="" thenmessagebox("提示","選擇項不能空!")elseselect count(distinct xh)into :li_xhfrom xsbjwhere xsbj.bjmc=:ls_bjmc;declare xhcursor curs

47、or forselect xhfrom xsbjwhere xsbj.bjmc=:ls_bjmc;open xhcursor;for n=1 to li_xhfetch next xhcursor into:ls_xh;insert into"xscj"("xh","xq","kcmc","cj")values(:ls_xh,:ls_xq,ls_kcmc,null);nextclose xhcursor;dw_1.retrieve(ls_xq,ls_bjmc,ls_kcmc)end if設(shè)計查詢

48、學生個人成績窗口 查詢學生個人成績的窗口如圖30所示。數(shù)據(jù)窗口控件連接的數(shù)據(jù)窗口對象為d_xscj_grcx.(1)查詢按鈕的clicked事件腳本如下dw_1.settransobject(sqlca)if sle_1.text=""or sle_2.text="" then messagebox("提示","班級學期和課程不能為空")else dw_1.retrieve(sle_1.text,sle_2.text) cb_2.enabled=trueend if(2)打印按鈕的clicked事件腳本如下dw_1

49、.print(true)(3)退出按鈕的clicked事件腳本如下close(parent)圖30 查詢學生個人成績的窗口設(shè)計查詢班級成績的窗口查詢班級成績的窗口如圖31所示。數(shù)據(jù)窗口控件的dataobject屬性為d_xscj_bjcx。此窗口的open 事件腳本與輸入成績窗口的open事件腳本相同。打印按鈕和退出按鈕的clicked事件腳本與d_xscj_grcx中的一樣。(1)查詢按鈕的clicked事件腳本如下dw_1.settransobject(sqlca)if ddplb_1.text=""or ddplb_2.text="" then messagebox("提示","班級學期和課程不能為空")else dw_1.retrieve(ddplb_1.text,ddplb_2.text) cb_2.enabled=trueend if圖31 查詢班級成績的窗口設(shè)計查詢課程成績的窗口查詢課程成績的窗口如圖32所示。數(shù)據(jù)窗口控件的dataobject屬性為d_xscj_kccx。此窗口的open事件腳本、“課程”的下拉列框的getfocus事件腳本與輸入成績窗口的對

溫馨提示

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

評論

0/150

提交評論