国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

吳以林

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

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

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

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

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

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

圖1主要功能框圖

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

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

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

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

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

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

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

3 SQL存儲過程

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

create procedure [Proc_term_result] as

Declare @sql varchar(8000)

set @sql=select SUBSTRING(student_ID,7,3) as學(xué)號,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存儲過程代碼,主要是實(shí)現(xiàn)行列交叉的功能,即把圖2的數(shù)據(jù)表變成圖3的數(shù)據(jù)表,方便打印及查看。

圖2

圖3

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

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

procedureTF_PtAVGResult.FormCreate(Sender:TObject);

begin

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

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è)置查詢班級列表框

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;

//修改存儲過程文件“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//修改存儲過程文件“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é)號,);

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)識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;

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

4.2成績另存為(或?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ū)牒?,只需按幾下按鈕,即可完成對各種數(shù)據(jù)的處理和要求,并可根據(jù)預(yù)先定制好的格式生成成績表。

3)系統(tǒng)采用了多種形式的窗口控制技術(shù)和多種容錯措施,使軟件不僅具有獨(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ù)庫系統(tǒng)開發(fā)實(shí)例導(dǎo)航[M].2版.北京:人民郵電出版社,2003.

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

猜你喜歡
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
兴业县| 大渡口区| 马关县| 浦北县| 拜泉县| 隆化县| 太白县| 南阳市| 富蕴县| 双城市| 德阳市| 邢台县| 卫辉市| 南丹县| 乐业县| 囊谦县| 西城区| 四平市| 文安县| 乌海市| 玛曲县| 海城市| 商都县| 迁西县| 洮南市| 阿荣旗| 仲巴县| 光泽县| 沙湾县| 合川市| 同江市| 堆龙德庆县| 手游| 五莲县| 大冶市| 甘肃省| 和田市| 宁波市| 茌平县| 竹山县| 南昌市|