學(xué)生成績管理系統(tǒng)設(shè)計報告.doc
南 京 理 工 大 學(xué)
數(shù)據(jù)庫課程設(shè)計
作 者:
學(xué) 號:
學(xué)院(系):
計算機(jī)科學(xué)與工程學(xué)院
專 業(yè):
網(wǎng)絡(luò)工程
題 目:
學(xué)生成績管理系統(tǒng)
指導(dǎo)老師:
衷宜
2013 年 9 月
目錄
一、概述 3
二、需求分析4
三、系統(tǒng)設(shè)計9
四、系統(tǒng)實施15
五、系統(tǒng)測試29
六、收獲和體會 33
七、附錄34
八、參考文獻(xiàn)34
一、概述
1、項目背景
當(dāng)今時代是飛速發(fā)展的信息時代。在各行各業(yè)中離不開信息處理,這正是計算機(jī)被廣泛應(yīng)用于信息管理系統(tǒng)的環(huán)境。計算機(jī)的最大好處在于利用它能夠進(jìn)行信息管理。使用計算機(jī)進(jìn)行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。尤其對于復(fù)雜的信息管理,計算機(jī)能夠充分發(fā)揮它的優(yōu)越性。計算機(jī)進(jìn)行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。目前隨著個大高校的擴(kuò)招,在校學(xué)生數(shù)量龐大。擁有一款好的學(xué)習(xí)成績管理系統(tǒng)軟件,對于加強(qiáng)對在校生的成績管理起到積極作用。并且,可以為在校生隨時查閱自己的成績信息、教師錄入成績、管理員進(jìn)行信息維護(hù)等提供方便,為學(xué)校節(jié)省大量人力資源本系統(tǒng)就是為了管理好學(xué)生成績信息而設(shè)計的。
2、編寫目的
首先,學(xué)生成績管理是一個學(xué)校不可缺少的部分,它的內(nèi)容對于學(xué)校的管理者和學(xué)生以及學(xué)生家長來說都至關(guān)重要,所以一個良好的學(xué)生成績管理系統(tǒng)應(yīng)該能夠為用戶提供充足的信息和快捷的查詢手段。學(xué)生成績管理系統(tǒng)對學(xué)校加強(qiáng)學(xué)生成績管理有著極其重要的作用.作為計算機(jī)應(yīng)用的一部分,使用計算機(jī)對學(xué)生成績信息進(jìn)行管理,具有手工管理所無法比擬的優(yōu)點。例:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高管理者管理的效率,也是學(xué)校走向科學(xué)化、正規(guī)化管理,與世界接軌的重要條件。因此,開發(fā)設(shè)計這樣一套學(xué)生成績管理軟件成為很有必要的事情。其次,初步掌握軟件開發(fā)的流程,熟悉delphi與SQL的使用方法,達(dá)到能夠較好的運(yùn)用兩者制成能實現(xiàn)初步功能的管理系統(tǒng),鍛煉自己的動手能力,同時,在合作中更好的與同學(xué)交流,這些都是必要的。最后,自己動手編程序,能更好的提升對本專業(yè)的愛好,初步了解本專業(yè)的發(fā)展方向,為將來的畢業(yè)與找工作奠定基礎(chǔ)。3、軟件定義
該學(xué)生管理管理信息系統(tǒng)是基于Internet/Intranet及C++技術(shù),建立以以數(shù)據(jù)庫為后臺核心應(yīng)用、以服務(wù)為目的信息平臺,對資源進(jìn)行科學(xué)的加工整序和管理維護(hù),為教學(xué)和科學(xué)研究提供文獻(xiàn)信息保障和提高管理學(xué)生成績的效率而設(shè)計的系統(tǒng)。
4、開發(fā)環(huán)境 本系統(tǒng)采用windows7,XP作為操作平臺,前臺開發(fā)工具采用delphi7.0,數(shù)據(jù)庫管理采用SQL SERVER 2008。
二、需求分析
1、問題的提出
為了提高高校學(xué)生成績信息的管理效率,方便學(xué)生和教師對學(xué)生成績信息進(jìn)行查詢、方便學(xué)校里面管理員去管理和查詢學(xué)生信息,建立一個學(xué)生成績管理系統(tǒng),使學(xué)生信息管理工作規(guī)范化,系統(tǒng)化,程序化,避免學(xué)生成績管理的隨意性,提高信息處理的速度和準(zhǔn)確性,能夠及時、準(zhǔn)確、有效的查詢和修改學(xué)生信息是必須而且十分迫切的工作。本次課程設(shè)計題目為《學(xué)生成績管理系統(tǒng)》,涉及成績管理系統(tǒng)的登錄界面、老師對學(xué)生成績的查詢、學(xué)生對學(xué)生成績的查詢、教務(wù)員對學(xué)生成績的增刪改查統(tǒng)計等內(nèi)容。本功能實現(xiàn)對學(xué)生信息、教師信息情況信息的管理和統(tǒng)計、課程信息和成績信息查看及維護(hù)。
2、系統(tǒng)的業(yè)務(wù)功能分析
學(xué)生成績管理系統(tǒng)應(yīng)當(dāng)將學(xué)生與教務(wù)員區(qū)分開來,因為增、刪、改、統(tǒng)計的權(quán)限應(yīng)當(dāng)只有教務(wù)員才擁有,學(xué)生只能查詢與自己相關(guān)的記錄,老師查詢自己所授課程的記錄,而教務(wù)員則錄入數(shù)據(jù),進(jìn)行增刪改與統(tǒng)計。另外,在日常學(xué)習(xí)生活中,為了方便老師和同學(xué)了解情況,需要提供平均分、最高(低)分、排名等供老師和學(xué)生查詢。
具體分析:按照教師,學(xué)生,管理員三種角色設(shè)計系統(tǒng)功能。
①學(xué)生要能夠查詢自己所學(xué)課程的成績,查看自己不同課程的成績、GPA以及排名,查看個人信息、修改個人登錄密碼等。
②教師要實現(xiàn)對自己所教授課程中所有學(xué)生成績的查詢、以及對自己所教班上同學(xué)的各分?jǐn)?shù)段成績單人數(shù)成績的查詢(排序功能),個人資料的修改和修改個人登錄密碼等。
③管理員要能夠?qū)崿F(xiàn)對管理員、教師、學(xué)生基本信息的增加、刪除、修改、查詢以及實現(xiàn)對學(xué)生成績的增加、刪除(按學(xué)號、按班級、按課程號、按院系)、修改、查詢(按學(xué)號、按班級、按課程號、按院系)和數(shù)據(jù)統(tǒng)計分析以及對結(jié)果提供打印功能等。
個人信息
3、系統(tǒng)業(yè)務(wù)流程分析修改密碼
菜 單
退出
管理員
管理員信息
教師信息
信 息 管 理
登陸次數(shù)必須小于三
學(xué)生信息
成績查詢
成 績 管 理
成績管理
成績統(tǒng)計
系統(tǒng)登錄
學(xué)生管理系統(tǒng)
顯示制作人和版本
幫 助
個人信息
修改密碼
菜 單
退出
成 績 管 理
教師
成績查詢
顯示制作人和版本
幫 助
個人信息
修改密碼
菜 單
退出
學(xué)生
成績查詢
成 績 管 理
顯示制作人和版本
幫 助
4、完成的功能
系統(tǒng)的功能模塊劃分
《學(xué)生成績管理系統(tǒng)》包括八個模塊:系統(tǒng)登錄、學(xué)生基本信息管理、教師基本信息管理、管理員基本信息管理、學(xué)生成績信息查詢、學(xué)生成績信息管理,學(xué)生成績信息統(tǒng)計,系統(tǒng)退出。
1、系統(tǒng)登錄模塊
(1)用戶人員在登錄界面中輸入用戶名與密碼。
(2)通過用戶名與數(shù)據(jù)庫里的用戶表相比配,將學(xué)生、教師與管里員區(qū)分開,三者各自進(jìn)入自己的頁面,初始密碼為:000000,登錄成功后,可以修改密碼。
(3)三者擁有各自權(quán)限,分別擁有不同的功能。
2、學(xué)生基本信息管理:管理員對所有學(xué)生信息進(jìn)行增刪改查,學(xué)生只能查詢自己的基本信息。
3、教師基本信息管理:管理員對所有教師信息進(jìn)行增刪改查,學(xué)生只能查詢自己的基本信息。
4、管理員基本信息管理:管理員對所有管理員信息進(jìn)行增刪改查。
5、學(xué)生成績信息查詢:管理員查詢功能:可以按學(xué)號、班級、院系、教師工號等對學(xué)生成績分別進(jìn)行查詢、查某門課程的排名、最高分、最低分、績點、不及格人數(shù)等、查某班級某科目分?jǐn)?shù)段的人數(shù)。教師查詢功能:查詢所教課程的最高分、最低分、各分?jǐn)?shù)段人數(shù)、不及格人數(shù)等。學(xué)生查詢功能:查某學(xué)生所學(xué)課程的排名、最高分、最低分、績點、不及格人數(shù)等。
6、學(xué)生成績信息管理:管理員對學(xué)生成績進(jìn)行增刪改查。
7、學(xué)生成績信息統(tǒng)計:按學(xué)號、班級、院系、教師工號等分別進(jìn)行統(tǒng)計,并對結(jié)果提供打印能。
8、退出程序:退出該程序。
5、數(shù)據(jù)流程圖
數(shù)據(jù)流圖
信息管理(操作員、教師、學(xué)生)
查詢個人信息
管 理 員
學(xué) 生
成績管理(增刪改查)
學(xué)生成績管理系統(tǒng)
查詢個人成績、GPA
成績統(tǒng)計、打印
查詢課程成績情況
查詢個人信息
教 師
6、數(shù)據(jù)字典
(1).數(shù)據(jù)流
①學(xué)院信息,包括學(xué)院編號,學(xué)院名稱等信息。
②班級信息,包括班級編號,學(xué)院編號等信息。
③學(xué)生信息,包括學(xué)生編號,學(xué)生姓名,性別,班級,聯(lián)系方式等信息。
④教師信息,包括教師工號,教師姓名,性別,學(xué)院編號,聯(lián)系方式等信息。
⑤管理員信息,包括管理員編號,管理員姓名,性別等信息。
⑥用戶信息,包括用戶名,登錄密碼等信息。
⑦課程信息,包括課程號,課程名稱,學(xué)分,學(xué)時,教師工號等信息。
(2).數(shù)據(jù)存儲
①成績表信息,包括學(xué)生編號,課程編號,課程績點,課程成績等信息。
②課程安排信息,包括課程編號,課程名稱,教師工號等信息。
administror
E/R圖:
admininame
adminino
owns
classname
owns
department
classno
class
departid
owns
owns
userno
tno
username
owns
departid
sname
sno
teacher
owns
tname
user
owns
sex
student
teach of
credit
Study of
departid
sex
phone
phone
ctime
course
grade of
grade
tno
cno
cname
owns
GPA
score
sno
cname
cno
三、系統(tǒng)設(shè)計
1、數(shù)據(jù)表:
(1)、數(shù)據(jù)庫的關(guān)系模式:
student(sno, sname, sex, classno, departed, phone);
teacher(tno, tname, departid, sex, phone);
course(cno, cname, credit, ctime, tno);
score(sno, sname, cno, cname, grade, GPA);
administror(adminino,adimniname,sex);
department(departed, departname);
class(departed, classno, classname);
user(userno,password);
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
sno
char(10)
Yes
NOT NULL
學(xué)號
sname
char(20)
no
NOT NULL
姓名
Noname
sex
char(10)
no
NOT NULL
性別
classno
char(10)
no
NOT NULL
班級號
(外鍵)
departid
char(10)
no
NOT NULL
院系號
(外鍵)
phone
char(20)
no
NULL
聯(lián)系方式
(2)、表的物理設(shè)計:
表一學(xué)生信息表student
Create table student(
sno char(10) primary key,
sname char(20) not null default ‘Noname’,
sex char(10) not null ,
classno char(10) foreign key references class(classno) ,
departid char(10) foreign key references department(departid),
phone char(20)
);
表二教師信息表teacher
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
tno
char(10)
Yes
NOT NULL
教師工號
tname
char(10)
no
NOT NULL
教師姓名
Noname
departid
char(10)
no
NOT NULL
院系號
(外鍵)
sex
char(10)
no
NOT NULL
性別
phone
char(11)
no
NULL
聯(lián)系方式
Create table student(
tno char(10) primary key,
tname char(10) not null default ‘Noname’ ,
sex char(10) not null ,
departid char(10) forgein key refrences department(departid),
phone char(20)
);
表三課程信息表course
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
cno
char(10)
Yes
NOT NULL
課程號
cname
char(20)
no
NOT NULL
課程名
credit
char(10)
no
NOT NULL
學(xué)分
ctime
char(10)
no
NOT NULL
學(xué)時數(shù)
tno
char(10)
Yes
NOT NULL
教師工號
Create table student(
cno char(10) ,
cname char(20) not null,
credi char(10) not null ,
ctime char(10) not null,
tno char(10) ,
primary key(cno, tno)
);
表四學(xué)生成績表score
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
sno
char(10)
Yes
NOT NULL
學(xué)號
sname
char(20)
no
NOT NULL
姓名
Noname
cno
char(10)
Yes
NOT NULL
課程號
cname
char(20)
no
NOT NULL
課程名
grade
char(10)
no
NOT NULL
成績
GPA
Float
no
NULL
GPA
Create table score (
sno char(10) ,
sname char(20) not null,
cno char(10),
cname char(20) not null,
Score char(10) not null,
GPA float,
primary key(sno,cno)
);
表五管理員信息表administror
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
adminino
char(10)
Yes
NOT NULL
工號
admininame
Char(20)
no
NOT NULL
姓名
Noname
sex
char(10)
no
NOT NULL
性別
Create table student(
adminino char(10) primary key,
admininame char(20) not null default ‘Noname’,
sex char(10) not null
);
Adminino
admininame
sex
200000
張娜
女
200001
王強(qiáng)
男
表六院系表department
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
departid
char(10)
yes
NOT NULL
院系號
departname
char(20)
no
NOT NULL
院系名
Create table student(
departid char(10) primary key,
departname char(20) not null
);
表七班級表class
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
departid
char(10)
no
NOT NULL
院系號
(外鍵)
classno
char(10)
yes
NOT NULL
班級號
classname
char(10)
no
NOT NULL
班級名稱
Create table class (
departid char(10) foreign key references department(departid),
classno char(10)primary key ,
classname char(10) not null
);
表八用戶表user
屬性名
數(shù)據(jù)類型
是否為主鍵
是否為空
說明
缺省值
userno
Char(10)
yes
NOT NULL
用戶名
password
Char(6)
no
NOT NULL
密碼
‘000000’
Create table user(
userno char(10) primary key,
password char(6)not null
);
2、視圖,索引,數(shù)據(jù)庫權(quán)限:這些在這個學(xué)生成績管理系統(tǒng)中沒有用到。
3、軟件功能設(shè)計
(1)、系統(tǒng)的結(jié)構(gòu)圖
修改密碼
退出
成績查詢
顯示制作人和版本
退出
修改密碼
成績查詢
個人信息
顯示制作人和版本
個人信息
幫 助
成 績 管 理
菜 單
幫 助
菜 單
成 績 管 理
成績統(tǒng)計
顯示制作人和版本
成績管理
學(xué)生信息
成績查詢
管理員信息
教師信息
退出
修改密碼
個人信息
幫 助
成 績 管 理
信 息 管 理
菜 單
學(xué)生
教師
管理員
系統(tǒng)登錄
學(xué)生管理系統(tǒng)
登陸次數(shù)必須小于三
(2)、功能表:
學(xué) 生 成 績 管 理 系 統(tǒng)
身份
功能模塊
細(xì)分模塊
功能具體描述
管 理 員
菜單
個人信息
顯示登錄管理員的個人信息(工號、姓名、性別)
修改密碼
管理員修改自己的登錄密碼
退出
管理員退出整個系統(tǒng)
信息管理
管理員信息
對所有管理員的信息進(jìn)行增刪改查
教師信息
對所有教師的信息進(jìn)行增刪改查
學(xué)生信息
對所有學(xué)生的信息進(jìn)行增刪改查
成績管理
成績查詢
可以按學(xué)號、班級、院系、教師工號等分別進(jìn)行查詢
查某學(xué)生所學(xué)課程的排名、最高分、最低分、績點、不及格人數(shù)等
查某班級某科目分?jǐn)?shù)段的人數(shù)
成績管理
對學(xué)生成績進(jìn)行增刪改查
成績統(tǒng)計
按學(xué)號、班級、院系、教師工號等分別進(jìn)行統(tǒng)計
對結(jié)果提供打印能
幫助
顯示該系統(tǒng)的制作人和版本
教 師
菜單
個人信息
顯示登錄教師個人信息(工號、姓名、性別、院系號、聯(lián)系方式)
修改密碼
教師修改自己的登錄密碼
退出
教師退出整個系統(tǒng)
成績管理
成績查詢
查詢所教課程的最高分、最低分、各分?jǐn)?shù)段人數(shù)、不及格人數(shù)等
成績統(tǒng)計
按學(xué)號、班級、院系、教師工號等分別進(jìn)行統(tǒng)計
幫助
顯示該系統(tǒng)的制作人和版本
學(xué) 生
菜單
個人信息
顯示登錄學(xué)生個人信息(學(xué)號、姓名、性別、班級號、院系號、聯(lián)系方式)
修改密碼
學(xué)生修改自己的登錄密碼
退出
學(xué)生退出整個系統(tǒng)
成績管理
成績查詢
查某學(xué)生所學(xué)課程的排名、最高分、最低分、績點、不及格人數(shù)等
幫助
顯示該系統(tǒng)的制作人和版本
(3)、功能描述:同功能表。
四、系統(tǒng)實施
(1)、系統(tǒng)的界面設(shè)計:
1、登陸界面
2、密碼修改
3、個人信息
4、操作頁面
5、信息管理
6、成績查詢
7、成績管理
8、成績統(tǒng)計
(2)、事件的設(shè)計過程:
①運(yùn)行軟件進(jìn)入主界面,在主界面登錄進(jìn)入各自操作主界面。
②學(xué)生登錄后可在登錄界面進(jìn)行成績查詢、個人信息查詢及密碼修改。
③教師登錄后可在登錄界面進(jìn)行功能選擇來完成自己所選擇的查詢與維護(hù)。
④管理員登錄后可在登錄界面點擊各頁面標(biāo)簽選擇功能進(jìn)入相應(yīng)頁面。
(3)、主要代碼描述:
1、登錄
procedure TfrmLogin.btnOKClick(Sender: TObject);
var
sSQL: string;
begin
if Trim(Edit1.Text) = then
begin
gf_MessageBox(請?zhí)顚懹脩裘? MB_OK);
Edit1.SetFocus;
Exit;
end
else
if Trim(Edit2.Text) = then
begin
gf_MessageBox(請?zhí)顚懨艽a!, MB_OK);
Edit2.SetFocus;
Exit;
end;
iErrorCount := iErrorCount + 1;
sSQL := select a.userno,a.password,b.tname,b.usertype
+ from [user] a
+ left join (select tno,tname,1 as UserType from teacher
+ union all
+ select sno,sname,2 from student
+ union all
+ select adminino,admininame,0 from administror) b on a.userno = b.tno
+ where a.userno = + QuotedStr(Trim(Edit1.Text))
+ and a.password = + QuotedStr(Trim(Edit2.Text));
gf_OpenSQL(sSQL, DM.aqPublic);
if DM.aqPublic.IsEmpty then
begin
if iErrorCount >= 3 then
begin
gf_MessageBox(賬號或密碼錯誤三次,程序自動關(guān)閉!,MB_OK);
Application.Terminate;
end;
gf_MessageBox(賬號或密碼錯誤,請重試!還剩 + IntToStr(3 - iErrorCount) + 次將自動關(guān)閉程序!,MB_OK);
Edit1.SelectAll;
Edit1.SetFocus;
end
else
begin
gr_LoginUser.sUserID := DM.aqPublic.FieldByName(userno).AsString;
gr_LoginUser.sUserName := DM.aqPublic.FieldByName(tname).AsString;
gr_LoginUser.iType := DM.aqPublic.FieldByName(usertype).AsInteger;
SetLoginInfo;
Self.Hide;
Application.CreateForm(TfrmStuSource, frmStuSource);
case gr_LoginUser.iType of
0:
begin
frmStuSource.sbMain.Panels[0].Text := 工號: + gr_LoginUser.sUserID;
frmStuSource.sbMain.Panels[1].Text := 姓名: + gr_LoginUser.sUserName;
frmStuSource.sbMain.Panels[2].Text := 登錄身份:管理員;
end;
1:
begin
frmStuSource.S1.Visible := False;
frmStuSource.N3.Visible := False;
frmStuSource.N10.Visible := False;
frmStuSource.sbMain.Panels[0].Text := 工號: + gr_LoginUser.sUserID;
frmStuSource.sbMain.Panels[1].Text := 姓名: + gr_LoginUser.sUserName;
frmStuSource.sbMain.Panels[2].Text := 登錄身份:教師;
end;
2:
begin
frmStuSource.S1.Visible := False;
frmStuSource.N10.Visible := False;
frmStuSource.N11.Visible := False;
frmStuSource.sbMain.Panels[0].Text := 學(xué)號: + gr_LoginUser.sUserID;
frmStuSource.sbMain.Panels[1].Text := 姓名: + gr_LoginUser.sUserName;
frmStuSource.sbMain.Panels[2].Text := 登錄身份:學(xué)生;
end;
end;
frmStuSource.ShowModal;
end;
end;
procedure TfrmLogin.FormShow(Sender: TObject);
begin
iErrorCount := 0;
end;
procedure TfrmLogin.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
Edit2.SetFocus;
end;
procedure TfrmLogin.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
btnOKClick(Sender);
end;
2、修改密碼
function TfrmChangPwd.ChangePwd: Boolean;
var
sSQL: string;
OldPwd,NewPwd: string;
begin
Result := True;
if Trim(edtNewPwd1.Text) = Trim(edtNewPwd2.Text) then
begin
gf_MessageBox(兩次輸入的新密碼不相同,MB_OK);
edtNewPwd2.SetFocus;
Result := False;
Exit;
end;
OldPwd := Trim(edtOldPsw.Text);
NewPwd := Trim(edtNewPwd1.Text);
sSQL := update [user] set password = + QuotedStr(NewPwd) + where userno = + QuotedStr(gr_LoginUser.sUserID);
gf_ExecSQL(sSQL,DM.aqSQL);
end;
procedure TfrmChangPwd.btnOKClick(Sender: TObject);
begin
if not ChangePwd then
begin
gf_MessageBox(密碼修改成功!, MB_OK);
Exit;
end;
end;
3、查詢數(shù)據(jù)
procedure TfrmScoreMange.SearchData;
var
sSQL: string;
begin
sSQL := select a.sno,a.sname,b.sex,b.phone,a.cno,a.cname,a.score,a.GPA,d.departname,c.classname
+ from score a
+ left join student b on a.sno = b.sno
+ left join class c on b.classno = c.classno
+ left join department d on b.departid = d.departid
+ where 1 = 1;
case gr_LoginUser.iType of
0:
begin
end;
1:
begin
sSQL := sSQL + and exists(select 1 from course where cno = a.cno and tno = + QuotedStr(gr_LoginUser.sUserID) + );
end;
2:
begin
sSQL := sSQL + and a.sno = + QuotedStr(gr_LoginUser.sUserID);
end;
end;
if Trim(edtSNo.Text) <> then
sSQL := sSQL + and a.sno = + QuotedStr(Trim(edtSNo.Text));
if Trim(edtSName.Text) <> then
sSQL := sSQL + and a.sName = + QuotedStr(Trim(edtSName.Text));
if Trim(edttno.Text) <> then
sSQL := sSQL + and exists(select * from course where cno = a.cno and tno = + QuotedStr(Trim(edttno.Text)) + );
if Trim(cbxSDepart.Text) <> 全部 then
sSQL := sSQL + and d.departname = + QuotedStr(Trim(cbxSDepart.Text));
if Trim(cbxSClass.Text) <> 全部 then
sSQL := sSQL + and c.ClassName = + QuotedStr(Trim(cbxSClass.Text));
gf_OpenSQL(sSQL, aqMaster);
end;
4、增加記錄
procedure TfrmScoreMange.AddData;
var
sSQL: string;
fScore: Double;
begin
if Trim(edtNo.Text) = then
begin
gf_MessageBox(插入數(shù)據(jù)時未填寫學(xué)號!,MB_OK);
edtNo.SetFocus;
Exit;
end
else
if Trim(edtName.Text) = then
begin
gf_MessageBox(插入數(shù)據(jù)時未填寫姓名!,MB_OK);
edtName.SetFocus;
Exit;
end
else
if Trim(edtCourse.Text) = then
begin
gf_MessageBox(插入數(shù)據(jù)時未填寫課程號!,MB_OK);
edtCourse.SetFocus;
Exit;
end
else
if Trim(edtCourseName.Text) = then
begin
gf_MessageBox(插入數(shù)據(jù)時未填寫課程名稱!,MB_OK);
edtCourseName.SetFocus;
Exit;
end
else
if Trim(edtScore.Text) = then
begin
gf_MessageBox(插入數(shù)據(jù)時未填寫成績!,MB_OK);
edtScore.SetFocus;
Exit;
end
else
if Trim(edtGPA.Text) = then
begin
gf_MessageBox(插入數(shù)據(jù)時未填寫平均績點!,MB_OK);
edtGPA.SetFocus;
Exit;
end;
if not TryStrToFloat(Trim(edtScore.Text),fScore) then
begin
gf_MessageBox(成績輸入不合法,請重輸!,MB_OK);
edtScore.SetFocus;
Exit;
end
else
if not TryStrToFloat(Trim(edtGPA.Text),fScore) then
begin
gf_MessageBox(平均績點輸入不合法,請重輸!,MB_OK);
edtGPA.SetFocus;
Exit;
end;
if gf_MessageBox(是否新增所輸數(shù)據(jù)?,MB_YESNO + MB_ICONWARNING) = IDNO then Exit;
sSQL := sSQL + insert into score(sno,sname,cno,cname,score,GPA)
+ values(%s,%s,%s,%s,%s,%s);
sSQL := Format(sSQL,[QuotedStr(Trim(edtNo.Text)),QuotedStr(Trim(edtName.Text)),QuotedStr(Trim(edtCourse.Text))
,QuotedStr(Trim(edtCourseName.Text)),QuotedStr(Trim(edtScore.Text)),QuotedStr(Trim(edtGPA.Text))]);
try
gf_ExecSQL(sSQL,aqPublic);
except
on E: Exception do
begin
gf_MessageBox(保存數(shù)據(jù)發(fā)生錯誤。錯誤信息: + E.Message,MB_OK);
end;
end;
SearchData;
end;
5、刪除記錄
procedure TfrmScoreMange.DelData;
var
sSQL: string;
begin
if (aqMaster.IsEmpty) or (not aqMaster.Active) then
begin
gf_MessageBox(沒有數(shù)據(jù)可以刪除!,MB_OK + MB_ICONWARNING);
Exit;
end;
if gf_MessageBox(刪除數(shù)據(jù)后將不能恢復(fù),是否刪除?,MB_YESNO + MB_ICONWARNING) = IDNO then Exit;
sSQL := delete from score where sno = + QuotedStr(aqMaster.FieldByName(sno).AsString)
+ and cno = + QuotedStr(aqMaster.FieldByName(cno).AsString);
gf_ExecSQL(sSQL,aqPublic);
SearchData;
end;
6、修改記錄
procedure TfrmScoreMange.EditData;
var
sSQL: string;
sno: string;
begin
if (aqMaster.IsEmpty) or (not aqMaster.Active) then
begin
gf_MessageBox(沒有數(shù)據(jù)可以修改!,MB_OK + MB_ICONERROR);
Exit;
end;
sno := aqMaster.FieldByName(sno).AsString;
sSQL := update score set sno = %s,sname = %s, cno = %s, cname = %s, score = %s, GPA = %s where sno =
+ QuotedStr(aqMaster.FieldByName(sno).AsString)
+ and cno = + QuotedStr(aqMaster.FieldByName(cno).AsString);
sSQL := Format(sSQL,[QuotedStr(Trim(edtNo.Text)),QuotedStr(Trim(edtName.Text)),QuotedStr(Trim(edtCourse.Text))
,QuotedStr(Trim(edtCourseName.Text)),QuotedStr(Trim(edtScore.Text)),QuotedStr(Trim(edtGPA.Text))]);
try
gf_ExecSQL(sSQL,aqPublic);
except
on E: Exception do
begin
gf_MessageBox(修改數(shù)據(jù)發(fā)生錯誤。錯誤信息: + E.Message,MB_OK);
end;
end;
SearchData;
aqMaster.Locate(sno,sno,[]);
end;
7、統(tǒng)計
procedure TfrmScoreStat.StatData(iType: Integer);
var
sSQL: string;
sCondition1,sCondition2: string;
i: Integer;
begin
for i := 0 to dgMaster.Columns.Count - 1 do
dgMaster.Columns[i].Visible := True;
sSQL := from score a
+ left join student b on a.sno = b.sno
+ left join class c on b.classno = c.classno
+ left join department d on b.departid = d.departid ;
case iType of
1:
begin
sCondition1 := select a.sno,a.sname,c.classname,d.departname,a.cno,a.cname,max(a.score) as MaxScore,
+ min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore,
+ sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail ;
sCondition2 := group by a.sno,a.sname,c.classname,d.departname,a.cno,a.cname;
end;
2:
begin
dgMaster.Columns[0].Visible := False;
dgMaster.Columns[1].Visible := False;
sCondition1 := select c.classname,d.departname,a.cno,a.cname,max(a.score) as MaxScore,
+ min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore,
+ sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail ;
sCondition2 := group by c.classname,d.departname,a.cno,a.cname;
end;
3:
begin
dgMaster.Columns[0].Visible := False;
dgMaster.Columns[1].Visible := False;
dgMaster.Columns[2].Visible := False;
sCondition1 := select d.departname,a.cno,a.cname,max(a.score) as MaxScore,
+ min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore,
+ sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail ;
sCondition2 := group by d.departname,a.cno,a.cname;
end;
4:
begin
dgMaster.Columns[0].Visible := False;
dgMaster.Columns[1].Visible := False;
dgMaster.Columns[2].Visible := False;
dgMaster.Columns[3].Visible := False;
sCondition1 := select a.cno,a.cname,max(a.score) as MaxScore,
+ min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore,
+ sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail ;
sCondition2 := group by a.cno,a.cname;
end;
end;
sSQL := sCondition1 + sSQL + sCondition2;
gf_OpenSQL(sSQL, aqMaster);
end;
8、打印
procedure CopyDbDataToExcel(Args: array of const);
var
iCount, jC