馬海珠
摘要:該文的重點(diǎn)是剖析學(xué)生成績(jī)管理系統(tǒng),圍繞系統(tǒng)架構(gòu)、系統(tǒng)功能、數(shù)據(jù)庫(kù)設(shè)計(jì)及系統(tǒng)實(shí)現(xiàn)等幾方面來(lái)說(shuō)明學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)中的難點(diǎn)與重點(diǎn)。
關(guān)鍵詞:C#;學(xué)生成績(jī)管理系統(tǒng)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)33-0129-02
Abstract: This article focuses on the analysis of student achievement management system, focusing on the system architecture, system function, database design and system implementation and other aspects to illustrate the difficulties and priorities in the design and implementation of student achievement management system
Key words: C#; Student achievement management system
1 概述
軟件技術(shù)專業(yè)綜合實(shí)踐教學(xué)環(huán)節(jié)是畢業(yè)設(shè)計(jì)。通過(guò)畢業(yè)設(shè)計(jì),能將學(xué)生所學(xué)的各種理論知識(shí)和職業(yè)技能聯(lián)結(jié)起來(lái),培養(yǎng)學(xué)生的綜合能力,為學(xué)生走上工作崗位打好基礎(chǔ)。我校畢業(yè)設(shè)計(jì)采用以自主選題為主結(jié)合給定選題為輔的原則,在選題中,很多學(xué)生喜歡選擇“學(xué)生成績(jī)管理系統(tǒng)”作為自己的研究課題,究其原因?qū)W生認(rèn)為他們對(duì)“學(xué)生成績(jī)管理系統(tǒng)”這一課題的管理流程比較熟悉,但往往意識(shí)不到學(xué)生成績(jī)管理系統(tǒng)的復(fù)雜性,由于每個(gè)學(xué)校的應(yīng)用環(huán)境不一樣,業(yè)務(wù)流程不統(tǒng)一,所以許多現(xiàn)成的成績(jī)管理系統(tǒng)不是拿過(guò)來(lái)就能用的,開(kāi)發(fā)符合自身學(xué)校特色的學(xué)生成績(jī)管理系統(tǒng)是十分必要。本文以筆者指導(dǎo)的2013級(jí)軟件技術(shù)專業(yè)學(xué)生開(kāi)發(fā)“基于C#的學(xué)生成績(jī)管理系統(tǒng)”為例,剖析系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的重點(diǎn)與難點(diǎn)。
2 系統(tǒng)架構(gòu)剖析
從目前應(yīng)用系統(tǒng)的發(fā)展方向看,學(xué)生成績(jī)管理系統(tǒng)理應(yīng)采用B/S結(jié)構(gòu),即瀏覽器/服務(wù)器模式,它的特點(diǎn)是通過(guò)瀏覽器來(lái)進(jìn)入工作界面,系統(tǒng)分布性強(qiáng)、維護(hù)方便、開(kāi)發(fā)簡(jiǎn)單且共享性強(qiáng)。但就本次學(xué)生畢業(yè)設(shè)計(jì)方向看,筆者指導(dǎo)的軟件技術(shù)專業(yè)是C#WinForm方向,所以學(xué)生成績(jī)管理系統(tǒng)的架構(gòu)定位采用的是C/S結(jié)構(gòu),即客戶機(jī)/服務(wù)器的模式,它主要應(yīng)用于局域網(wǎng)中,針對(duì)小范圍的用戶,數(shù)據(jù)的安全性可以保證,但不能實(shí)現(xiàn)真正大范圍的信息共享、信息傳達(dá)和發(fā)布。不同的架構(gòu)技術(shù)基本決定了系統(tǒng)服務(wù)對(duì)象,基于C#的學(xué)生成績(jī)管理系統(tǒng)主要的服務(wù)對(duì)象應(yīng)該是教師用戶和教務(wù)管理員用戶,這里不考慮學(xué)生用戶。
3 系統(tǒng)功能剖析
開(kāi)發(fā)一個(gè)應(yīng)用系統(tǒng)的重點(diǎn)是確定系統(tǒng)的功能。這就需要開(kāi)發(fā)者從了解和調(diào)研用戶的業(yè)務(wù)流程和用戶的需求開(kāi)始,確定系統(tǒng)的功能。業(yè)務(wù)流程不同,實(shí)現(xiàn)的功能就不同。結(jié)合我校實(shí)際情況,教務(wù)管理員的主要業(yè)務(wù)是:
1) 每年新生入學(xué)需要組建學(xué)生信息;2)規(guī)劃每學(xué)期每個(gè)班級(jí)的課程表;3)安排授課教師;4)學(xué)生成績(jī)管理。學(xué)生成績(jī)管理主要包括成績(jī)存檔及成績(jī)統(tǒng)計(jì)。成績(jī)存檔主要是收集學(xué)生每學(xué)期的每一門課程的平時(shí)成績(jī)、期中考試和期末考試成績(jī)等信息,并按指定的比例折算出總評(píng)成績(jī)。成績(jī)統(tǒng)計(jì)包括匯總班級(jí)成績(jī)總表、班級(jí)補(bǔ)考信息、單科課程的成績(jī)情況(包括計(jì)算課程平均分、統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù)及占比等)及匯總出每學(xué)期每個(gè)學(xué)生的成績(jī)單。
教師主要業(yè)務(wù)是分階段遞交成績(jī),負(fù)責(zé)遞交所授課程的學(xué)生平時(shí)成績(jī),期中成績(jī)和期末成績(jī)并對(duì)缺考等情況作說(shuō)明,老師應(yīng)確保上交的成績(jī)信息正確無(wú)誤。
因此,在功能設(shè)計(jì)中,教務(wù)管理員在系統(tǒng)登錄后不僅可以完成學(xué)生、教師、系別、班級(jí)、學(xué)期、課程、授課等信息管理,同時(shí)還要完成成績(jī)管理模塊的功能,通過(guò)選擇學(xué)期、系別、班級(jí)及所授課程等信息后,即完成學(xué)生的成績(jī)錄入、成績(jī)修改、 成績(jī)刪除、成績(jī)統(tǒng)計(jì)、成績(jī)打印等功能。
而對(duì)于普通授課教師在系統(tǒng)登錄后,只能做輸入平時(shí)成績(jī)、期中成績(jī)、期末成績(jī)及查詢各類信息,授課老師一旦提交確認(rèn)成績(jī)后,不能再對(duì)成績(jī)作編輯修改,如果錄入的成績(jī)有誤,應(yīng)該聯(lián)系管理員,由管理員對(duì)錯(cuò)誤的成績(jī)進(jìn)行更正。
4 數(shù)據(jù)庫(kù)設(shè)計(jì)剖析
在系統(tǒng)開(kāi)發(fā)中,最難的應(yīng)該是數(shù)據(jù)庫(kù)設(shè)計(jì)。一方面,系統(tǒng)的功能規(guī)模直接影響數(shù)據(jù)庫(kù)的設(shè)計(jì),另一方面數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的好壞又直接影響系統(tǒng)的效率以及實(shí)現(xiàn)效果。如何設(shè)計(jì)合理的數(shù)據(jù)庫(kù)結(jié)構(gòu),保證數(shù)據(jù)存儲(chǔ)效率及方便程序的實(shí)現(xiàn)是整個(gè)系統(tǒng)設(shè)計(jì)的難點(diǎn)和關(guān)鍵點(diǎn)。根據(jù)前面的功能解析,能夠滿足用戶需求的實(shí)體有:管理員、授課教師、學(xué)生、班級(jí)、學(xué)期,課程、授課及成績(jī)。
1) 管理員(用戶名和密碼)。
2) 教師表(教師名、教師密碼)。
3) 系別表(系別編號(hào)、系別名稱)。
4) 班級(jí)表(班級(jí)編號(hào)、班級(jí)名稱、系別編號(hào))。
5) 學(xué)生表(學(xué)號(hào)、姓名、性別、入學(xué)成績(jī),班級(jí)編號(hào))。
6) 學(xué)期表(學(xué)期編號(hào)、學(xué)期名稱)。
7) 課程表(課程編號(hào)、課程名稱、學(xué)時(shí))。
8) 授課表(授課編號(hào)、教師名、課程號(hào)、班級(jí)號(hào)、學(xué)期編號(hào))。
9) 成績(jī)表(成績(jī)編號(hào)、授課編號(hào)、學(xué)號(hào)、平時(shí)成績(jī)、期中成績(jī)、期末成績(jī)、總評(píng)成績(jī)、是否補(bǔ)考、補(bǔ)考成績(jī)、備注)。
為了方便代碼編寫(xiě),可以通過(guò)視圖方式創(chuàng)建數(shù)據(jù)表與數(shù)據(jù)表之間的關(guān)系,這里比較重要的視圖是成績(jī)處理視圖resultView,需要將成績(jī)表、教師表、授課表、學(xué)生表、課程表、班級(jí)表、學(xué)期表和系別表聯(lián)系起來(lái),方便學(xué)生的成績(jī)統(tǒng)計(jì)、分析及查詢。
5 系統(tǒng)實(shí)現(xiàn)剖析
在學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)中,學(xué)生信息、教師信息、課程信息等管理的功能基本相似,實(shí)現(xiàn)起來(lái)比較容易,這里不進(jìn)行分析討論。在整個(gè)系統(tǒng)實(shí)現(xiàn)過(guò)程中,不僅要考慮到數(shù)據(jù)的完整性還要考慮到數(shù)據(jù)如何獲取。
1) 觸發(fā)器是SQL Server提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法。教務(wù)管理員在安排授課表時(shí),每添加一條授課記錄,在成績(jī)表就應(yīng)該添加與該授課編號(hào)相關(guān)的班級(jí)學(xué)生名單,用于記錄平時(shí)成績(jī)、期中成績(jī)等。為了保證成績(jī)表中學(xué)生名單準(zhǔn)確無(wú)誤且與學(xué)生信息表名單的完整性,在技術(shù)處理上,采用在授課表上需要?jiǎng)?chuàng)建觸發(fā)器,以實(shí)現(xiàn)每添加或刪除一條授課記錄,成績(jī)表中就批量添加或刪除授課班級(jí)的學(xué)生名單及授課號(hào)?;敬a如下:
Create TRIGGER [dbo].[sktrig]
ON [dbo].[skInfo]
AFTER INSERT,DELETE
AS
BEGIN
declare @sIDint,@cidint
if exists ( select * from inserted)
begin
select @sID=sID,@cid=cid from inserted
insert into resultInfo (stuId,sID) select stuid,@sID from stuInfo where cid=@cid
end
else
begin
select @sID=sID from deleted
delete from resultInfo where sID=@sID
end
2) 匯總班級(jí)成績(jī)總表是學(xué)生成績(jī)管理系統(tǒng)實(shí)現(xiàn)中的難點(diǎn)。學(xué)期、系別、班級(jí)不同所授的課程不同。因?yàn)樵趨R總成績(jī)總表時(shí),每個(gè)班級(jí)的課程名是動(dòng)態(tài)的。因此在數(shù)據(jù)匯總的技術(shù)處理時(shí),通過(guò)編制成績(jī)表的存儲(chǔ)過(guò)程的來(lái)實(shí)現(xiàn),并采用動(dòng)態(tài)交叉表來(lái)匯總不同的系別,不同學(xué)期,不同班級(jí)的學(xué)生所學(xué)課程的總評(píng)成績(jī),再通過(guò)數(shù)據(jù)綁定技術(shù)綁定匯總出來(lái)的交叉表,實(shí)現(xiàn)界面顯示。
Create procedure [dbo].[CrossTable]
@strTableNamevarchar(50)='',—查詢的表名
@strColvarchar(50)='',—橫向列所在的字段名
@strGroupvarchar(50)='',—分組名
@strNumbervarchar(50)='',—被統(tǒng)計(jì)的列
@strComputevarchar(50)='Sum',—運(yùn)算方式
@intxidvarchar(50),
@intcidvarchar(50)
as
declare @strSql as varchar(1000),@strTempCol as varchar(100)
execute ('DECLARE corss_cursor CURSOR FOR SELECT DISTINCT '+@strCol+' from '+@strTableName+' for read only') —生成游標(biāo)
begin
setnocount on
set @strSql='select '+@strGroup
opencorss_cursor
while(0=0)
begin
fetch next from corss_cursor
into @strTempCol
if(@@fetch_status<>0) break
set @strSql=@strSql+','+@strCompute+'( case '+@strCol+' when '''+@strTempCol+''' then '+@strNumber +' else 0 end ) as ['+@strTempCol+']'
end
set @strsql=@strSql+','+@strCompute+'('+@strNumber+') as [總成績(jī)]'+' from '+@strTableName+' where cId='+@intcid+ ' and xID='+@intxid+' group by '+@strGroup
print @strSql
execute(@strSql)
if @@error <>0 return @@error
print @@error
closecorss_cursor
deallocatecorss_cursor return 0
end
3) 單科成績(jī)分?jǐn)?shù)段的統(tǒng)計(jì)也是學(xué)生成績(jī)管理模塊中的難點(diǎn)。在數(shù)據(jù)處理的技術(shù)上,需要對(duì)成績(jī)處理視圖resultView采用復(fù)雜查詢技術(shù)來(lái)實(shí)現(xiàn)。在界面實(shí)現(xiàn)上通過(guò)綁定查詢的結(jié)果進(jìn)行顯示,這里以單科匯總期中成績(jī)?yōu)槔M(jìn)行說(shuō)明。
select kName,(select COUNT(*) from resultView where qzresult<60 and kName=t.kName ) as '不及格',(select COUNT(*)
from resultView where qzresult>=60 and qzresult<70 and kName=
t.kName ) as '60-70',(select COUNT(*) from resultView where qzresult>=70 and qzresult<80 and kName=t.kName) as '70-80',(select COUNT(*) from resultView where qzresult>=80and qzresult<90 and kName=t.kName) as '80-90',(select COUNT(*) from resultView where qzresult >=90 and kName=t.kName ) as '90以上' from resultView t group by kName
6 總結(jié)
本學(xué)生成績(jī)管理系統(tǒng)是作為學(xué)生畢業(yè)設(shè)計(jì)的選題,它在實(shí)際應(yīng)用中有多局限性,許多方面有待進(jìn)一步改進(jìn)和完善,通過(guò)本系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā),學(xué)生對(duì)所學(xué)的軟件技術(shù)知識(shí)進(jìn)行了系統(tǒng)地回顧和應(yīng)用,特別是對(duì)SQL Server數(shù)據(jù)庫(kù)技術(shù)、面向?qū)ο蟪绦蛟O(shè)計(jì)、軟件工程等課程達(dá)到學(xué)以致用的目的,剖析學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的重點(diǎn)與難點(diǎn)的目的是給學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)者與研究者提供一點(diǎn)參考和借鑒。
參考文獻(xiàn):
[1] 李春葆,曾平.數(shù)據(jù)庫(kù)原理與應(yīng)用第2版[M].北京:清華大學(xué)出版社,2007.
[2] 賈紅宇.高校學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 教育論壇,2008(9):148,149.
[3] 葉偉.學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)探究[J]. 信息系統(tǒng)工程,2012(4).