• 
    

    
    

      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ù)
      绍兴县| 台南市| 阳城县| 嫩江县| 宁夏| 连云港市| 阳城县| 射阳县| 宁陕县| 集贤县| 敦煌市| 云阳县| 即墨市| 山东| 延津县| 辛集市| 太康县| 西贡区| 五指山市| 龙游县| 崇左市| 梨树县| 若尔盖县| 武清区| 德昌县| 伊金霍洛旗| 江北区| 海淀区| 温州市| 开封县| 瑞丽市| 晋城| 明水县| 大田县| 曲阜市| 上饶县| 新宁县| 潼南县| 巴青县| 通化县| 禹州市|