• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    用Delphi及SQL Server開(kāi)發(fā)學(xué)生成績(jī)管理系統(tǒng)

    2012-04-29 20:31:22吳以林
    電腦知識(shí)與技術(shù) 2012年2期
    關(guān)鍵詞:數(shù)據(jù)庫(kù)

    吳以林

    摘要:該文介紹了采用Delphi 7及Microsoft SQL Server數(shù)據(jù)庫(kù)做為開(kāi)發(fā)工具,開(kāi)發(fā)學(xué)生成績(jī)管理系統(tǒng),內(nèi)容包括目標(biāo)與功能結(jié)構(gòu)、數(shù)據(jù)庫(kù)設(shè)計(jì)、SQL存儲(chǔ)過(guò)程及主要技術(shù)特點(diǎn)等。并給出了部分Delphi原程序。

    關(guān)鍵詞:成績(jī)管理系統(tǒng);數(shù)據(jù)庫(kù);Delphi;ADO

    中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)02-0353-05

    目前在計(jì)算機(jī)技術(shù)的迅速發(fā)展的前提下以及計(jì)算機(jī)應(yīng)用的普遍性,同時(shí)為了更好更快的加快學(xué)校學(xué)生成績(jī)/學(xué)籍管理,開(kāi)發(fā)一套成績(jī)/學(xué)籍管理系統(tǒng)迫在眉捷。本系統(tǒng)主要采用Delphi 7及SQL Server2000做為開(kāi)發(fā)工具,應(yīng)用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法進(jìn)行開(kāi)發(fā)與設(shè)計(jì)的。利用其提供的集成開(kāi)發(fā)環(huán)境及各種控件,尤其是對(duì)數(shù)據(jù)庫(kù)的支持完成對(duì)數(shù)據(jù)庫(kù)的各種操作,達(dá)到對(duì)學(xué)生成績(jī)管理的目的。本系統(tǒng)使用ADO連接數(shù)據(jù)庫(kù)Microsoft SQL Server,提出了權(quán)限管理模塊的具體實(shí)現(xiàn)方法,并完成了相關(guān)軟件的設(shè)計(jì)任務(wù)。最終系統(tǒng)能夠完成信息的輸入、輸出、數(shù)據(jù)的修改、查詢和統(tǒng)計(jì)等功能,使用戶操作起來(lái)簡(jiǎn)便快捷。

    1設(shè)計(jì)概述

    本系統(tǒng)由系統(tǒng)(用戶登錄)、班級(jí)管理、課程設(shè)置、成績(jī)管理共四個(gè)模塊組成分別設(shè)計(jì)應(yīng)用程序界面。其主要功能框圖如圖1所示。

    圖1主要功能框圖

    2數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)(數(shù)據(jù)庫(kù)采用Microsoft SQL Server數(shù)據(jù)庫(kù))

    2.1班級(jí)信息數(shù)據(jù)庫(kù)(class_info)

    2.2學(xué)生信息數(shù)據(jù)庫(kù)(student_info)

    2.3班級(jí)課程數(shù)據(jù)庫(kù)(classcourse_ifo)

    2.4學(xué)期成績(jī)數(shù)據(jù)庫(kù)(result_ifo)

    2.5學(xué)期不及格成績(jī)數(shù)據(jù)庫(kù)(bujige_ifo)

    以上數(shù)據(jù)庫(kù)表,通過(guò)Microsoft SQL Server數(shù)據(jù)庫(kù)關(guān)系圖功能設(shè)置了各表關(guān)鍵字段的關(guān)聯(lián),即采用了關(guān)系性數(shù)據(jù)的表示方式,如各數(shù)據(jù)庫(kù)表class字段的關(guān)聯(lián)、student_ID字段的關(guān)聯(lián)等等,另外學(xué)期不及格成績(jī)數(shù)據(jù)庫(kù)(bujige_ifo)的數(shù)據(jù)由系統(tǒng)自動(dòng)統(tǒng)計(jì)“學(xué)期成績(jī)數(shù)據(jù)庫(kù)”的數(shù)據(jù)成績(jī)(result)<60自動(dòng)存入。。

    3 SQL存儲(chǔ)過(guò)程

    sql語(yǔ)句執(zhí)行的時(shí)候要先編譯,然后執(zhí)行。存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過(guò)程。下面為系統(tǒng)開(kāi)發(fā)中的部分存儲(chǔ)過(guò)程代碼:

    create procedure [Proc_term_result] as

    Declare @sql varchar(8000)

    set @sql=select SUBSTRING(student_ID,7,3) as學(xué)號(hào),student_name as姓名,retire as備注,

    select @sql=@sql+cast(max(case course_name when

    +course_name+ then Rtrim(result) else end)

    as varchar(4))+IsNull((select enable from resultVIEW1

    where student_id=b.student_id

    and (class=某班) and (academic_year=10/11學(xué)年)and (term=下學(xué)期期末)

    and course_name=+course_name+),)as +course_name+,

    from (select distinct course_name from resultVIEW1 where class=某班 and

    academic_year=10/11學(xué)年and term=下學(xué)期期末) as a select @sql=left(@sql,len

    (@sql)-1) +from resultVIEW1 as b where class=某班 and academic_year=10/11學(xué)年 and term=下學(xué)期期末 group by stu?

    dent_ID,student_name, retire exec(@sql)

    以上SQL存儲(chǔ)過(guò)程代碼,主要是實(shí)現(xiàn)行列交叉的功能,即把圖2的數(shù)據(jù)表變成圖3的數(shù)據(jù)表,方便打印及查看。

    圖2

    圖3

    4程序?qū)崿F(xiàn)

    4.1查詢/打印畢業(yè)成績(jī)

    procedureTF_PtAVGResult.FormCreate(Sender:TObject);

    begin

    //設(shè)置查詢年級(jí)列表框

    withDataModule1.AQ_yeardo

    begin

    close;

    SQL.clear;

    SQl.add(select*fromyear_Info);

    DataModule1.AQ_year.Open;

    CB_year.Items.Clear;

    whilenotDataModule1.AQ_year.eofdo

    begin

    CB_year.Items.Add(Fieldbyname(grade).asString);

    next;

    end;

    end;

    end;

    procedureTF_PtAVGResult.CB_yearClick(Sender:TObject);

    begin

    CB_class.Text:=;

    withDataModule1.AQ_classdo

    //設(shè)置查詢班級(jí)列表框

    begin

    close;

    SQL.clear;

    SQL.Add(select*fromClass_infowheregrade=:grade);

    parameters.ParamByName(grade).value:=CB_year.Text;

    DataModule1.AQ_class.Open;

    CB_class.Items.Clear;

    whilenotDataModule1.AQ_class.eofdo

    begin

    CB_class.Items.Add(Fieldbyname(class).asString);

    next;

    end;

    end;

    DataModule1.SQLSp.Close;//清空表格

    end;

    procedureTF_PtAVGResult.CB_ClassClick(Sender:TObject);

    begin

    DataModule1.SQLSp.Close;//清空表格

    withDataModule1.AQ_Ysdo

    begin

    Close;//創(chuàng)建視圖文件“resultVIEW2”

    SQL.Clear;

    SQL.Add(ifexists(select*fromsysobjectswhere);

    SQL.Add(id=object_id(N[dbo].[result_bujigeVIEW2]));

    SQL.Add(andOBJECTPROPERTY(id,NIsView)=1));

    SQL.Add(dropView[dbo].[result_bujigeVIEW2]);

    ExecSQL;

    Close;

    SQL.Clear;

    SQL.Add(CREATEVIEWdbo.result_bujigeVIEW2AS);

    SQL.Add(SELECTstudent_ID,student_Name,class,retire,course_name,);

    SQL.Add(AVG(result)ASresult1,MAX(enable)ASenable1);

    SQL.Add(FROMresult_bujigeVIEW);

    SQL.Add(GROUPBYstudent_ID,student_Name,class,retire,course_name);

    SQL.Add(HAVING(class=+CB_Class.Text+));

    ExecSQL;

    Close;

    end;

    DataModule1.SQLSp.Close;//清空表格

    withDataModule1.AQ_Ysdo

    begin

    Close;

    //修改存儲(chǔ)過(guò)程文件“Proc_AVG_result”的前提

    SQL.Clear;

    SQL.Add(ifexists(select*fromsysobjectswhere);

    SQL.Add(id=object_id(N[dbo].[Proc_AVG_result]));

    SQL.Add(andOBJECTPROPERTY(id,NIsProcedure)=1));

    SQL.Add(dropprocedure[dbo].[Proc_AVG_result]);

    ExecSQL;

    Close;

    end;

    withDataModule1.AQ_MakeupResultdo//修改存儲(chǔ)過(guò)程文件“Proc_term_result”

    begin

    close;

    SQL.Clear;

    sql.Add(createprocedure[Proc_avg_result]as);

    sql.Add(Declare@sqlvarchar(8000));

    sql.add(set@sql=selectSUBSTRING(student_ID,7,3)as學(xué)號(hào),);

    sql.Add(student_nameas姓名,retire備注,);

    sql.add(select@sql=@sql+cast(max(casecourse_namewhen);

    sql.Add(+course_name+thenRtrim(result1)elseend));

    sql.Add(asvarchar(4))+IsNull((selectmax(enable1)as標(biāo)識(shí)fromresult_bujigeVIEW2);

    sql.Add(wherestudent_id=b.student_idand);

    sql.Add((class=+CB_Class.Text+)andcourse_name=+course_name+),));

    sql.Add(as+course_name+,);

    sql.add(from(selectdistinctcourse_namefromresult_bujigeVIEW2);

    sql.Add(whereclass=+CB_Class.Text+)asa);

    sql.Add(Declare@subjectcountvarchar(6));

    sql.Add(select@subjectcount=count(distinctcourse_name)fromresult_bujigeVIEW2);

    sql.Add(select@sql=@sql+(selectsum(result1)fromresult_bujigeVIEW2wherestudent_id=b.student_id)/+@subjectcount+as平均分,);

    sql.Add(select@sql=@sql+(selectcast(count(student_ID)asvarchar(4))+科);

    sql.Add(fromresult_bujigeVIEW2whereresult1<60andstudent_ID=b.student_ID)as不及格科數(shù)+);

    sql.Add(fromresult_bujigeVIEW2asb);//whereresult1<60

    sql.Add(groupbystudent_ID,student_name,retire);

    sql.Add(select@sql=@sql+unionselect各科asstudent_id,合計(jì)人數(shù)asstudent_name,asretire,);

    sql.Add(select@sql=@sql+(selectcast(count(student_id)asvarchar(4)));

    sql.Add(+人fromresult_bujigeVIEW2where);

    sql.Add(result1<60andcourse_name=+course_name+));

    sql.Add(as+course_name+,);

    sql.Add(from(selectDistinctcourse_namefromresult_bujigeVIEW2);

    sql.Add(whereresult1<60)asa);

    sql.Add(select@sql=@sql+as平均分,as不及格科數(shù)orderby平均分desc);

    sql.Add(exec(@sql));

    ExecSQL;

    end;

    以上程序通過(guò)簡(jiǎn)單的下拉選項(xiàng)選擇年級(jí)和班級(jí),就以實(shí)現(xiàn)查詢某班所有學(xué)期每門課程的平均成績(jī)情況,顯示在屏幕窗口表格里,同時(shí)可以直接點(diǎn)打印按鈕,將成績(jī)打印出來(lái);也可通過(guò)下面成績(jī)另存為程序?qū)崿F(xiàn)成績(jī)導(dǎo)出。

    4.2成績(jī)另存為(或?qū)С觯?/p>

    procedureTF_PtAVGResult.ppmSaveSelectionClick(Sender:TObject);

    varExpClass:TDBGridEhExportClass;

    Ext:String;

    begin

    SaveDialog1.FileName:=file1;

    if(ActiveControlisTDBGridEh)then

    ifSaveDialog1.Executethen

    begin

    caseSaveDialog1.FilterIndexof

    1:beginExpClass:=TDBGridEhExportAsText;Ext:=txt;end;

    2:beginExpClass:=TDBGridEhExportAsCSV;Ext:=csv;end;

    3:beginExpClass:=TDBGridEhExportAsHTML;Ext:=htm;end;

    4:beginExpClass:=TDBGridEhExportAsRTF;Ext:=rtf;end;

    5:beginExpClass:=TDBGridEhExportAsXLS;Ext:=xls;end;

    else

    ExpClass:=nil;Ext:=;

    end;

    ifExpClass<>nilthen

    begin

    ifUpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3))<> UpperCase(Ext)then

    SaveDialog1.FileName:=SaveDialog1.FileName+.+Ext;

    SaveDBGridEhToExportFile(ExpClass,TDBGridEh(ActiveControl),

    SaveDialog1.FileName,False);

    end;

    end;

    end;這部分程序與數(shù)據(jù)瀏覽窗口放在一起實(shí)現(xiàn)了,可以將數(shù)據(jù)導(dǎo)出生成xls、txt、csv、htm、rtf類型文件。

    5主要技術(shù)特點(diǎn)

    1)本系統(tǒng)適用于軟件環(huán)境為Win2003/WinXP/Win2000/WinNT/Win9x。

    2)系統(tǒng)在設(shè)計(jì)上按通用性軟件的要求,做到了結(jié)構(gòu)良好,數(shù)據(jù)入或?qū)腱`活、方便。用戶在完成原始數(shù)據(jù)輸入或?qū)牒?,只需按幾下按鈕,即可完成對(duì)各種數(shù)據(jù)的處理和要求,并可根據(jù)預(yù)先定制好的格式生成成績(jī)表。

    3)系統(tǒng)采用了多種形式的窗口控制技術(shù)和多種容錯(cuò)措施,使軟件不僅具有獨(dú)特的屏幕界面風(fēng)格,而且較少地占用計(jì)算機(jī)系統(tǒng)資源,運(yùn)行快速、安全可靠。

    4)系統(tǒng)的數(shù)據(jù)輸入采用鍵盤輸入或從Excel文件、CSV文件導(dǎo)入等多種輸入方式,而數(shù)據(jù)輸出采用屏幕顯示、打印、直接復(fù)制出去及導(dǎo)出生成xls、txt、csv、htm、rtf類型文件等多種輸出方式,從面完全可以滿足用戶的不同需求。

    參考文獻(xiàn):

    [1]陳豫龍,何旭洪.Delphi數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)實(shí)例導(dǎo)航[M].2版.北京:人民郵電出版社,2003.

    [2]張立科.Delphi 7組件編程參考手冊(cè)[M].北京:人民郵電出版社,2003.

    猜你喜歡
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    兩種新的非確定數(shù)據(jù)庫(kù)上的Top-K查詢
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    數(shù)據(jù)庫(kù)
    汉寿县| 浦北县| 沿河| 清水河县| 新田县| 遂溪县| 睢宁县| 涿州市| 横峰县| 石城县| 金寨县| 遵义市| 宜城市| 广水市| 胶州市| 辽中县| 刚察县| 贵定县| 许昌市| 光泽县| 开原市| 黄陵县| 英德市| 南平市| 双城市| 色达县| 安徽省| 开远市| 泗洪县| 江孜县| 浙江省| 霍山县| 卢氏县| 和田市| 苍南县| 岳池县| 唐河县| 长沙市| 崇信县| 克什克腾旗| 蒙山县|