• 案例庫
    您當(dāng)前的位置: 首頁>案例庫

    綜合案例七
    學(xué)生成績管理系統(tǒng)

    發(fā)布時間: 2019-01-16      信息來源:       閱讀次數(shù):

    綜合案例七  學(xué)生成績管理系統(tǒng)

    【實驗?zāi)康呐c要求】  

    1.熟練使用VFP的操作環(huán)境

    2.熟練使用項目管理器管理各種文件

    3.掌握數(shù)據(jù)庫的設(shè)計方法和步驟

    4.熟練掌握數(shù)據(jù)庫表及其表之間關(guān)系的創(chuàng)建與使用

    5.掌握查詢與視圖的創(chuàng)建與使用

    6.掌握程序設(shè)計的基本方法

    7.掌握表單及其表單中各種控件的設(shè)計與使用

    8.掌握菜單的創(chuàng)建和使用

    【實驗要求】

    根據(jù)實際需要,編寫班級學(xué)生成績管理系統(tǒng),解決傳統(tǒng)手工方式的成績管理,達到減少工作量、方便進行成績查詢、實現(xiàn)自動的成績統(tǒng)計,提高效率的目的。

    具體如下:

    1 班級學(xué)生基本信息維護:包括班級學(xué)生基本信息的錄入、修改、刪除、查詢等

    2 班級學(xué)生成績信息維護:包括班級學(xué)生成績信息的錄入、修改、刪除等

    3 成績查詢:包括按學(xué)號、姓名兩種方式進行成績查詢

    4 成績統(tǒng)計:包括個人成績、課程成績、班級成績統(tǒng)計

    【系統(tǒng)功能模塊】

       本系統(tǒng)設(shè)計了一個簡單的數(shù)據(jù)庫,學(xué)生基本信息、學(xué)生成績信息,即能基本滿足班級成績管理的要求。系統(tǒng)主要分為五個模塊:

    (1) 學(xué)生基本信息維護模塊:在此模塊中,班級成績管理員可以對學(xué)生基本信息如學(xué)號、姓名、性別等進行維護,可以新增、修改、刪除或查詢學(xué)生基本信息。

    (2) 成績錄入模塊:在此模塊中,班級成績管理員可以進行班級學(xué)生成績的錄入。

    (3) 成績查詢模塊:每個學(xué)生可以在此模塊中通過學(xué)號或姓名來進行個人成績的查詢。

    (4) 成績修改模塊:班級成績管理員可以在此模塊中進行學(xué)生成績的修改。

    (5) 成績刪除模塊:班級成績管理員在此模塊中刪除學(xué)生成績信息。

    (6) 成績統(tǒng)計模塊:每個學(xué)生可以在此模塊中查看個人成績、課程成績、班級成績的統(tǒng)計結(jié)果。

    /xcxxgc_jpkc/upload/images/2019/1/1610839520.jpg

    【實驗內(nèi)容】

    1、 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計

    按照系統(tǒng)不同的功能模塊,需要不同的表來存儲信息,數(shù)據(jù)庫設(shè)計如下:

    (1) 學(xué)生基本信息表STUINFO

    名稱

    字段名稱

    數(shù)據(jù)類型

    主鍵

    非空

    學(xué)號

    XH

    Char3

    Yes

    Yes

    姓名

    XM

    Char8

    No

    Yes

    性別

    XBr

    Char2

    No

    (2) 學(xué)生成績信息表SCORE

    名稱

    字段名稱

    數(shù)據(jù)類型

    主鍵

    非空

    學(xué)號

    XH

    Char3

    Yes

    Yes

    語文

    YUWEN

    Numeric3,0

    NO

    Yes

    數(shù)學(xué)

    SHUXUE

    Numeric3,0

    NO

    Yes

    英語

    YINGYU

    Numeric3,0

    NO

    Yes

    平均分

    PINGJUNFEN

    Numeric5,1

    NO

    一、詳細(xì)設(shè)計

    1、 主界面模塊

    /xcxxgc_jpkc/upload/images/2019/1/1610839832.jpg

     

    2、 學(xué)生基本信息維護

    該模塊實現(xiàn)學(xué)生基本信息的維護,包括增加、刪除、修改等維護數(shù)據(jù)的操作。由于學(xué)生的基本信息僅僅是成績管理系統(tǒng)中的輔助數(shù)據(jù),信息內(nèi)容簡單,數(shù)據(jù)變動不大,維護操作較簡單,故直接使用VFP中的表單向?qū)稍摫韱?,運行界面如下:

    /xcxxgc_jpkc/upload/images/2019/1/1610839926.jpg

    3 成績錄入

    該模塊實現(xiàn)班級學(xué)生成績的錄入。一個學(xué)生一條成績記錄。已錄入成績的學(xué)生不能再進行成績的錄入,只能做修改等其它操作。所以在錄入成績時,只能在學(xué)號下拉框中進行未曾錄入成績的學(xué)生學(xué)號的選擇,同時在姓名文本框中確認(rèn)是否待錄入成績的學(xué)生。確認(rèn)該生后,錄入其成績數(shù)據(jù)。運行界面如下:

    /xcxxgc_jpkc/upload/images/2019/1/161084019.jpg

    程序代碼:

    FrmsrLoad事件代碼:

    public dimension no(100)

    for i=1 to 100

    no(i)=.f.

    endfor

    open data student

    select 1

    use stuinfo

    select 2

    use score

    select 1

    i=1

    scan

    select 2

    locate for xh=a.xh

    if not found()

     no(i)=a.xh

     i=i+1

    endif

    select 1

    endscan

    FrmsrInit事件代碼:

    thisform.combo1.clear

    i=1

    do while type('no(i)')!='L'

    thisform.combo1.additem(no(i))

    i=i+1

    enddo

    FrmsrRelease事件代碼:

    select 1

    use

    select 2

    use

    close database

    CmdokClick事件代碼:

    select 2

    append blank

    replace xh with thisform.combo1.value

    if len(alltrim(thisform.text3.value))>0

    replace yuwen with val(thisform.text3.value)

    else

    replace yuwen with 0

    endif

    if len(alltrim(thisform.text4.value))>0

    replace shuxue with val(thisform.text4.value)

    else

    replace shuxue with 0

    endif

    if len(alltrim(thisform.text5.value))>0

    replace yingyu with val(thisform.text5.value)

    else

    replace yingyu with 0

    endif

    replace pingjunfen with (yuwen+shuxue+yingyu)/3

    thisform.release

    CmdcancelClick事件代碼:

    thisform.release

    4 成績查詢

       該模塊實現(xiàn)班級學(xué)生各門課程成績的查詢??梢园磳W(xué)號、姓名兩種方式來進行查詢。查詢結(jié)果是不允許修改的,所有顯示查詢結(jié)果的文本框的ReadOnly屬性均為.T.。運行界面如下:

    /xcxxgc_jpkc/upload/images/2019/1/1610840128.jpg/xcxxgc_jpkc/upload/images/2019/1/1610840175.jpg

    程序代碼:

    Frmxhcx1

    CmdokClick事件代碼:

    cxxh=alltrim(thisform.text1.value)

    open data student

    select 1

    use score

    loca for alltrim(xh)==cxxh

    if found()

     do form newcx1

     thisform.release

    else

     messagebox('沒有此學(xué)號!',0+48+0,'錯誤')

     thisform.text1.setfocus

    endif

    CmdcancelClick事件代碼:

    thisform.release

    Frmxhcx2

    Text1Text5ControlSource屬性要修改為相應(yīng)數(shù)據(jù)表的字段名,將相應(yīng)數(shù)據(jù)與文本框綁定在一起,可以在運行期間顯示數(shù)據(jù)的值,修改文本框的值也會反應(yīng)到數(shù)據(jù)表中。如:Text1.ControlSource=score.xh。

    Frmxhcx2Load事件代碼:

    select 2

    use stuinfo

    locate for xh=a.xh

    CmdokClick事件代碼:

    select 1

    use

    select 2

    use

    close data

    thisform.release

    /xcxxgc_jpkc/upload/images/2019/1/1610840222.jpg

    程序代碼:

    Frmxmcx1

    CmdokClick事件代碼:

    cxxm=alltrim(thisform.text1.value)

    open data student

    select 1

    use stuinfo

    loca for alltrim(xm)==cxxm

    if found()

     do form newcx2

     thisform.release

    else

     messagebox('沒有此姓名!',0+48+0,'錯誤')

     thisform.text1.setfocus

    endif

    CmdcancelClick事件代碼:

    thisform.release

    Frmxmcx2

    Text1Text5ControlSource屬性同樣要修改為相應(yīng)數(shù)據(jù)表的字段名。

    Frmxmcx2Load事件代碼:

    select 2

    use score

    locate for xh=a.xh

    CmdokClick事件代碼:

    select 1

    use

    select 2

    use

    close data

    thisform.release

    5、 成績修改

    該模塊實現(xiàn)班級學(xué)生各門課程成績數(shù)據(jù)的修改??梢园磳W(xué)號、姓名兩種方式來進行修改,兩種方式類似。以按學(xué)號進行修改為例,運行界面如下:

    /xcxxgc_jpkc/upload/images/2019/1/1610840316.jpg

    Frmxhxg1

    CmdokClick事件代碼:

    cxxh=alltrim(thisform.text1.value)

    open data student

    select 1

    use score

    loca for alltrim(xh)==cxxh

    if found()

     do form newxg1

     thisform.release

    else

     messagebox('沒有此學(xué)號!',0+48+0,'錯誤')

     thisform.text1.setfocus

    endif

    CmdcancelClick事件代碼:

    thisform.release

    Frmxhxg2

    Frmxmsc2Load事件代碼:

    由于進行了數(shù)據(jù)綁定,對文本框內(nèi)容的修改會直接反應(yīng)到數(shù)據(jù)表中。確認(rèn)修改無需做特別工作,但是取消修改需要恢復(fù)修改前的原值。故在此使用了數(shù)組a來保存修改前的原始值。在恢復(fù)修改中,使用gather from a恢復(fù)原值。

    select 2

    use stuinfo

    locate for xh=a.xh

    public declare a(4)

    select 1

    scatter to a

    CmdokClick事件代碼:

    select 1

    replace pingjunfen with (yuwen+shuxue+yingyu)/3

    use

    select 2

    use

    close data

    thisform.release

    CmdcancelClick事件代碼:

    select 1

    gather from a

    use

    select 2

    use

    close data

    thisform.release

    6、 成績刪除

    該模塊實現(xiàn)班級學(xué)生各門課程成績數(shù)據(jù)的刪除??梢园磳W(xué)號、姓名兩種方式來進行刪除,兩種方式類似。以按姓名進行刪除為例,運行界面如下:

    /xcxxgc_jpkc/upload/images/2019/1/1610840409.jpg

    Frmxmsc1

    CmdokClick事件代碼:

    cxxm=alltrim(thisform.text1.value)

    open data student

    select 1

    use stuinfo

    loca for alltrim(xm)==cxxm

    if found()

     do form newsc2

     thisform.release

    else

     messagebox('沒有此姓名!',0+48+0,'錯誤')

     thisform.text1.setfocus

    endif

    CmdcancelClick事件代碼:

    thisform.release

    Frmxmsc2

    Frmxmsc2Load事件代碼:

    select 2

    use score

    locate for xh=a.xh

    CmdokClick事件代碼:

    select 2

    dele

    pack

    use

    select 1

    use

    close data

    thisform.release

    CmdcancelClick事件代碼:

    select 1

    use

    select 2

    use

    close data

    thisform.release

    7、 成績統(tǒng)計

    /xcxxgc_jpkc/upload/images/2019/1/1610840503.jpg

    /xcxxgc_jpkc/upload/images/2019/1/1610840565.jpg

    個人成績統(tǒng)計中,使用了四個視圖:YW、SX、YY、PJF,以取該生的語文、數(shù)學(xué)、英語及總分在班級中的排名次序。

    Frmgrtj1

    CmdokClick事件代碼:

    xhxm=alltrim(thisform.text1.value)

    open data student

    select 2

    use studscore

    loca for alltrim(xh)==xhxm

    if found()

     do form newgrtj2

     thisform.release

    else

     loca for alltrim(xm)==xhxm

     if found()

       do form newgrtj2

       thisform.release

     else  

       messagebox('沒有此學(xué)號或姓名!',0+48+0,'錯誤')

       thisform.text1.setfocus

     endif

    endif

    CmdcancelClick事件代碼:

    thisform.release

    Frmgrtj2

    Frmgrtj2Activate事件代碼:

    set talk off

    select 2

    xuehao=studscore.xh

    thisform.text6.value=alltrim(studscore.xh)

    thisform.text7.value=alltrim(studscore.xm)

    thisform.text8.value=alltrim(str(studscore.yuwen))

    thisform.text9.value=alltrim(str(studscore.shuxue))

    thisform.text10.value=alltrim(str(studscore.yingyu))

    thisform.text4.value=alltrim(str(studscore.pingjunfen))

    select 3

    use yw

    loca for xh=xuehao

    mc1=recno()

    thisform.text1.value=mc1

    select 4

    use sx

    loca for xh=xuehao

    mc2=recno()

    thisform.text2.value=mc2

    select 5

    use yy

    loca for xh=xuehao

    mc3=recno()

    thisform.text3.value=mc3

    select 6

    use pjf

    loca for xh=xuehao

    thisform.text5.value=recno()

    CmdokClick事件代碼:

    select 1

    use

    select 2

    use

    select 3

    use

    select 4

    use

    select 5

    use

    select 6

    use

    close data

    set talk on

    thisform.release

    /xcxxgc_jpkc/upload/images/2019/1/1610840612.jpg/xcxxgc_jpkc/upload/images/2019/1/1610840659.jpg

    Frmkctj1

    CmdokClick事件代碼:

    public kcm

    kcm=alltrim(thisform.combo1.value)

    do form newkctj2

    thisform.release

    CmdcancelClick事件代碼:

    thisform.release

    Frmkctj2

    Frmkctj2Activate事件代碼:

    set talk off

    do case

     case kcm='語文'

       kc='yuwen'

     case kcm='數(shù)學(xué)'

       kc='shuxue'

     case kcm='英語'

       kc='yingyu'

    endcase

    open data student

    use score

    count all to zrs

    count for &kc<60 to bjg1

    count for &kc<70 and &kc>=60 to jg1

    count for &kc<80 and &kc>=70 to zhong1

    count for &kc<90 and &kc>=80 to liang1

    count for &kc<=100 and &kc>=90 to you1

    bjg2=str(bjg1/zrs*100,5,1)+'%'

    jg2=str(jg1/zrs*100,5,1)+'%'

    zhong2=str(zhong1/zrs*100,5,1)+'%'

    liang2=str(liang1/zrs*100,5,1)+'%'

    you2=str(you1/zrs*100,5,1)+'%'

    calculate max(&kc) all to zgf

    calculate min(&kc) all to zdf

    average &kc all to pjf1

    pjf=str(pjf1,5,1)

    CmdokClick事件代碼:

    use

    close data

    thisform.release

    /xcxxgc_jpkc/upload/images/2019/1/1610840721.jpg

    FrmbjtjLoad事件代碼:

    set talk off

    open data student

    drop table stuscore

    select 1

    use stuinfo

    set order to xh

    select 2

    use score

    join with a to stuscore for a.xh=b.xh fields a.xh,a.xm,yuwen,shuxue,yingyu,pingjunfen

    add table stuscore

    use stuscore

    sum yuwen to a

    sum shuxue to b

    sum yingyu to c

    count all to d

    zjf=str((a+b+c)/d/3,5,1)

    count for yuwen<60 to aa

    count for shuxue<60 to bb

    count for yingyu<60 to cc

    bjgrs=aa+bb+cc

    bjgl1=(aa+bb+cc)/3/d*100

    bjgl=str(bjgl1,5,1)+'%'

    jgl=str(100-bjgl1,5,1)+'%'

    go top

    CmdokClick事件代碼:

    select 1

    use

    select 2

    use

    close data

    thisform.release


    午夜免费啪在线观看视频,国产日韩欧美久久一区,久久无码高潮喷潮,国产日韩久久久久老熟女 亚太影院 柯西贝尔-游戏赚网 在线观看肉片AV网站免费