目錄
1、需求分析 1
1.1 數(shù)據(jù)需求描述 1
1.2 系統(tǒng)功能需求 3
1.3 其他性能需求 4
2、概念結(jié)構(gòu)設計 4
2.1 局部E-R圖 4
2.2 全局E-R圖 5
2.3 優(yōu)化E-R圖 6
3、邏輯結(jié)構(gòu)設計 6
3.1 關(guān)系模式設計 6
3.2 數(shù)據(jù)類型定義 6
3.3 關(guān)系模式的優(yōu)化 8
4、物理結(jié)構(gòu)設計 9
4.1 聚簇設計 9
4.2 索引設計 9
4.3 分區(qū)設計 10
5、數(shù)據(jù)庫實施 10
5.1 基本表建立 10
5.2 視圖的建立 17
5.3 索引的建立 22
5.4 觸發(fā)器建立 23
5.5 建存儲過程 26
6、應用系統(tǒng)開發(fā)與試運行 27
6.1 開發(fā)平臺和開發(fā)環(huán)境介紹。 27
6.2 前臺界面與后臺數(shù)據(jù)庫連接說明,代碼實現(xiàn)。 27
6.3 系統(tǒng)各功能設計和運行界面截圖。 29
7、實驗總結(jié) 42
7.1 遇到的問題和解決的辦法 46
7.2 系統(tǒng)設計的不足 47
7.3 進一步改進思路和體會 47
1.需求分析
開發(fā)平臺:Microsoft?Visual?Studio?2013
開發(fā)環(huán)境:微軟在Builder?2013開發(fā)者大會上發(fā)布了Visual?Studio?2013預覽版,并且發(fā)布其程序組件庫.NET?4.5.1的預覽版,該軟件已于北京時間2013年11月13日23:00時正式發(fā)布。Visual?Studio?2013?預覽版以?Visual?Studio?2012?和后續(xù)的Microsoft?Visual?Studio?更新中的進展為基礎(chǔ)構(gòu)建而成,為開發(fā)團隊提供需要的解決方案,使其接納這種轉(zhuǎn)變并開發(fā)和交付利用下一波Windows?平臺創(chuàng)新?(Windows?8.1)?的新式應用程序,同時在所有?Microsoft?平臺上支持多種設備和服務。
1.1 數(shù)據(jù)需求描述?
分析系統(tǒng)的數(shù)據(jù)需求,用數(shù)據(jù)字典和數(shù)據(jù)流圖描述系統(tǒng)的數(shù)據(jù)需求,一般要求有2級(初級和詳細級)數(shù)據(jù)流圖,并確定系統(tǒng)開發(fā)邊界。
1.2 系統(tǒng)功能需求?
系統(tǒng)功能框架介紹,處理模塊描述。
管理員
- 添加教師名單
- 查詢教師名單
- 修改教師信息
- 刪除教師信息
- 添加學生名單
- 查詢學生名單
- 修改學生名單
- 統(tǒng)計生源地信息
- 修改管理員密碼
- 重置教師密碼
- 重置學生密碼
學生
- 查詢個人基本信息
- 查詢個人成績
- 查詢班級課表
- 查詢個人課表
- 修改個人密碼
- 查詢自己的總學分
教師
- 查詢教師個人信息
- 查詢個人任課信息
- 查詢所任課程平均成績
- 查詢所任課程學生排名
- 提交所任課程的學生成績
- 修改個人密碼
1.3 其他性能需求
1.3 其他性能需求
(1)用戶輸入出錯時,有錯誤提示。
(2)給管理員,教師,學生不同的權(quán)限,提高數(shù)據(jù)安全性;
(3)創(chuàng)建觸發(fā)器,存儲過程,防止數(shù)據(jù)不一致;
2、概念結(jié)構(gòu)設計
2.1?局部E-R圖
畫出局部的E-R圖,進一步進行解釋說明。
2.2 全局E-R圖
合并成全局的E-R圖,5個數(shù)據(jù)類別之間存在6個關(guān)系。
2.3 優(yōu)化E-R圖
因為本次的E-R已經(jīng)符合了要求,這里就不需要優(yōu)化了。
3、邏輯結(jié)構(gòu)設計
3.1 關(guān)系模式設計
教師teachers(教師編號,教師姓名,教師性別,教師年齡,教師職稱,聯(lián)系電話)
專業(yè)major(專業(yè)編號,專業(yè)名稱)
班級class(班級編號,班級名稱,專業(yè)編號)
學生students(學號,姓名,性別,年齡,地區(qū),已修學分,班級編號)
課程course(課程編號,課程名稱,課程學時,教師姓名,課程學期,考核方式,學分)
開設 class-course(課程編號,班級編號)
上課 teacher-class(教師編號,班級編號)
授課 teacher-course(教師編號,課程編號)
成績報告 reports (學號,課程編號,學期,成績,教師姓名)
管理員賬號administer-account(管理員賬號,管理員密碼)
教師賬號Teachers-account(教師賬號,教師密碼)
學生賬號students-account(學生賬號,學生密碼)
3.2 數(shù)據(jù)類型定義
????
- 教師Teacher表
表1 ?Teacher表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
教師編號 |
char |
10 |
主鍵 |
教師姓名 |
char |
10 |
|
教師性別 |
char |
5 |
|
教師年齡 |
int |
||
職稱 |
char |
10 |
|
聯(lián)系電話 |
char |
20 |
- 專業(yè)Major表
表2 ?Major表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
專業(yè)編號 |
char |
10 |
主鍵 |
專業(yè)名稱 |
char |
10 |
- 班級Class表
表3 ?class表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
班級編號 |
char |
10 |
主鍵 |
班級名稱 |
char |
10 |
|
專業(yè)編號 |
char |
10 |
外鍵 |
- 學生表Students表
表4 ?students表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
學號 |
char |
12 |
主鍵 |
姓名 |
char |
10 |
|
性別 |
char |
5 |
|
年齡 |
int |
||
生源所在地 |
char |
20 |
|
已修學分 |
float |
||
班級編號 |
char |
10 |
外鍵 |
- 課程Course表
表5 ?courses表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
課程編號 |
char |
10 |
主鍵 |
課程名稱 |
char |
10 |
|
教師姓名 |
char |
10 |
|
課程學期 |
char |
20 |
|
課程學時 |
int |
>0 |
|
考核方式 |
char |
5 |
|
學分 |
float |
>0 |
- 開設 class-course表
表6 ?class-course表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
|
班級編號 |
char |
10 |
主鍵 |
外鍵 |
課程編號 |
char |
10 |
外鍵 |
- 上課 teacher-class表
表7 ?teacher-class表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
|
教師編號 |
char |
10 |
主鍵 |
外鍵 |
班級編號 |
char |
10 |
外鍵 |
- 授課 teacher-course表
表8 ?teacher-course表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
|
教師編號 |
char |
10 |
主鍵 |
外鍵 |
課程編號 |
char |
10 |
外鍵 |
- 成績報告表reports表
表9 ?reports表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
|
學號 |
char |
12 |
主鍵 |
外鍵 |
課程編號 |
char |
10 |
外鍵 |
|
學期 |
char |
10 |
||
成績 |
int |
|||
教師姓名 |
char |
10 |
- 教師賬號
表10 ?Teacher-account表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
教師編號 |
char |
10 |
主鍵 |
教師密碼 |
char |
10 |
- 管理員賬號
表11 ?Admin-account表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
管理員編號 |
char |
10 |
主鍵 |
管理員密碼 |
char |
10 |
- 學生賬號
表12 ?student-account表
數(shù)據(jù)項名 |
數(shù)據(jù)類型 |
長度 |
完整性約束 |
學生編號 |
char |
12 |
主鍵 |
學生密碼 |
char |
10 |
3.3 關(guān)系模式的優(yōu)化
該關(guān)系模式已經(jīng)滿足規(guī)范化需求,這里不進行規(guī)范化處理。
4、物理結(jié)構(gòu)設計
4.1 聚簇設計
???
教師Teacher(教師編號)
課程Course(課程編號)
學生Students(學生編號,班級編號)
班級Class(班級編號)
原因:這幾張表都是實體表,同時聚簇中的屬性都是主鍵或是外鍵,且被訪問次數(shù)高,而其他表或者這些表上的其他屬性被訪問次數(shù)較低,沒有考慮聚簇的必要。
原則:
1基本表中該屬性訪問次數(shù)較多
2基本表中某屬性列重復率較高
3基本表中某屬性列的值修改很少,或者增加和刪除元組次數(shù)較少
4.2 索引設計
建立索引的一般規(guī)則:
- 在主鍵屬性列和外鍵屬性列上通常都可以分別建立索引,不僅有助于唯一性檢查和完整性檢查,而且可以加快連接查詢的速度。
- 以查詢?yōu)橹鞯年P(guān)系可建立盡可能多的索引。
- 對等值連接,但滿足條件的元組較少的查詢可以考慮建立索引。
- 如果查詢可以從索引直接得到結(jié)果而不必訪問關(guān)系,則對此種查詢可以建立索引。
所以我們建了這些索引:
??(1)
教師表Xum_Teachers18?索引:(教師編號 xm_Tno18)
create unique index Tea_Tno on Xum_Teachers18(xm_Tno18)
??(2)
課程表Xum_Courses18?索引:(課程編號xm_Cno18)
create unique index Cour_Cno on Xum_Courses18(xm_Cno18)
(3)
班級表?Xum_Class18?索引:(班級編號 xm_CLno18,?專業(yè)編號xm_Mno18)
create unique index Mno_CLno on Xum_Class18(xm_CLno18,xm_Mno18)
(4)
學生表Xum_Students18?索引:(學生學號xm_Sno18,班級編號xm_CLno18)
create unique index CLno_Sno on Xum_Students18(xm_Sno18,xm_CLno18)
(5)
成績報告表Xum_Reports18?索引:(學生編號xm_Sno18?,課程編號xm_Cno18)
create unique index Cno_Sno on Xum_Reports18(xm_Sno18,xm_Cno18)
(6)
專業(yè)表 xm_Cno18??索引:(專業(yè)編號xm_Mno18)
create unique index Majo_Mno on Xum_Majors18(xm_Mno18)
4.3 分區(qū)設計
磁盤分區(qū)設計的一般原則:
1減少訪問沖突,提高I/O并發(fā)性。多個事物并發(fā)訪問同一磁盤時,會產(chǎn)生磁盤訪問沖突而導致效率低下,如果事務訪問數(shù)據(jù)均能分布于不同磁盤上,則I/O可并發(fā)執(zhí)行,從而提高數(shù)據(jù)庫訪問速度。
2分散熱點數(shù)據(jù),均衡I/O負擔。在數(shù)據(jù)庫中數(shù)據(jù)訪問的頻率是不均勻的,那些經(jīng)常被訪問的數(shù)據(jù)成為熱點數(shù)據(jù),此類數(shù)據(jù)宜分散存在于不同的磁盤上,以均衡各個磁盤的負荷,充分發(fā)揮多磁盤的并行操作的優(yōu)勢。
3保證關(guān)鍵數(shù)據(jù)快速訪問,緩解系統(tǒng)瓶頸。在數(shù)據(jù)庫中有些數(shù)據(jù)如數(shù)據(jù)字典等的訪問頻率很高,為保證對它的訪問不直接影響整個系統(tǒng)的效率,可以將其存放在某一固定磁盤上,以保證其快速訪問。
實際例子有將關(guān)系和索引放在不同磁盤上,查詢時兩個磁盤同時運行提高物理I/O效率。
不過考慮到本次課題數(shù)據(jù)量有限,暫不考慮分區(qū)設計。
5、數(shù)據(jù)庫實施
5.1 基本表建立
- (1)教師表建立 Xum_Teachers18
圖10 建立教師表
create table Xum_Teachers18 (
xm_Tno18 char(10) primary key,
xm_Tname18 char(10),
xm_Tsex18 char(5),
xm_Tage18 int,
xm_Tpos18 char(10),
xm_Tpho18 char(20)
)
(2)專業(yè)表建立Xum_Majors18
create table Xum_Majors18(
xm_Mno18 char(10) primary key,
xm_Mname18 char(10)
)
(3)班級表建立Xum_Class18
create table Xum_Class18(
xm_Clno18 char(10) primary key,
xm_Clname char(10),
xm_Mno18 char(10)
constraint Major_Class foreign key(xm_Mno18) references Xum_Majors18
)
(4)學生表Xum_Students18
create table Xum_Students18(
xm_Sno18 char(12) primary key,
xm_Sname18 char(10),
xm_Ssex18 char(5),
xm_Sage18 int,
xm_Sorig18 char(20),
xm_Ssum18 float,
xm_Clno18 char(10)
constraint Class_Student foreign key(xm_Clno18) references Xum_Class18
)
?(5)課程表 Xum_Courses18
create table Xum_Courses18(
xm_Cno18 char(10) primary key,
xm_Cname18 char(10),
xm_Tname18 char(10),
xm_Cdate18 char(20),
xm_Cway18 char(5),
xm_Ccredit18 float check(xm_Ccredit18>0),
xm_Chour18 int check(xm_Chour18>0)
)
?(6)授課表 Xum_Tea_Cour18
create table Xum_Tea_Cour18(
xm_Tno18 char(10),
xm_Cno18 char(10),
primary key(xm_Tno18,xm_Cno18),
constraint teacher_course foreign key(xm_Tno18) references Xum_Teachers18,
constraint tea_cour foreign key(xm_Cno18) references Xum_Courses18
)
(7)班級上課表Xum_Class_Cour18
create table Xum_Class_Cour18(
xm_Clno18 char(10),
xm_Cno18 char(10),
primary key(xm_Clno18,xm_Cno18),
constraint class_course foreign key(xm_Clno18) references Xum_Class18,
constraint clas_cour foreign key(xm_Cno18) references Xum_Courses18
)
(8)教師任課表Xum_Teac_Class18
create table Xum_Teac_Class18(
xm_Tno18 char(10),
xm_Clno18 char(10),
primary key(xm_Tno18,xm_Clno18),
constraint tea_class foreign key(xm_Tno18) references Xum_Teachers18,
constraint teach_class foreign key(xm_Clno18) references Xum_Class18
)
(9)成績表Xum_Reports18
create table Xum_Reports18(
xm_Cno18 char(10),
xm_Sno18 char(12),
xm_Score18 float,
xm_date char(10),
xm_Tname18 char(10),
primary key(xm_Cno18,xm_Sno18),
constraint cour foreign key(xm_Cno18) references Xum_Courses18,
constraint stude foreign key(xm_Sno18) references Xum_Students18
)
(10)管理員賬號密碼表?(11)學生賬號密碼表(12)教師賬號密碼表
create table Students_account18(
xm_Sno18 char(12) primary key,
xm_Skey18 char(10)
)
create table Teachers_account18(
xm_Tno18 char(12) primary key,
xm_Tkey18 char(10)
)
create table Admin_account18(
xm_Ano18 char(12) primary key,
xm_Akey18 char(10)
)
?(13)數(shù)據(jù)庫表預覽
5.2 視圖的建立
(1)學生成績
create view 學生成績統(tǒng)計
as
(select Xum_Students18.xm_Sno18,Xum_Students18.xm_Sname18,
Xum_Courses18.xm_Cname18,Xum_Class18.xm_Clname,
Xum_Reports18.xm_Tname18,Xum_Courses18.xm_Ccredit18,
Xum_Courses18.xm_Cdate18,Xum_Reports18.xm_Score18
from Xum_Reports18,Xum_Students18,Xum_Courses18,Xum_Class18
where Xum_Students18.xm_Sno18=Xum_Reports18.xm_Sno18
and Xum_Reports18.xm_Cno18=Xum_Courses18.xm_Cno18
and Xum_Class18.xm_Clno18=Xum_Students18.xm_Clno18
)
(2)課程平均成績
create view 每門平均成績
as(
select xm_Cno18,avg(xm_Score18)平均分
from Xum_Reports18
group by xm_Cno18
)
(3)課程和學分統(tǒng)計
create view 課程和學分統(tǒng)計
as
(
select xm_Sno18,xm_Cname18,xm_Ccredit18
from 學生成績統(tǒng)計
)
(4)教師課表
create view 教師課表
as(
select xm_Tno18,Xum_Teachers18.xm_Tname18,xm_Cno18,xm_Cname18,
xm_Ccredit18,xm_Chour18
from Xum_Teachers18,Xum_Courses18
where Xum_Teachers18.xm_Tname18=Xum_Courses18.xm_Tname18
)
(5)班級課表
create view 班級課表
as
(
select Xum_Class18.xm_Clno18,xm_Clname,Xum_Courses18.xm_Cno18,
xm_Cname18,xm_Cdate18,xm_Ccredit18,xm_Chour18
from Xum_Class18,Xum_Courses18,Xum_Class_Cour18
where Xum_Class18.xm_Clno18=Xum_Class_Cour18.xm_Clno18
and Xum_Class_Cour18.xm_Cno18=Xum_Courses18.xm_Cno18
)
(6)生源地人員統(tǒng)計
create view 生源地人員統(tǒng)計
as
(select xm_Sorig18,count(xm_Sno18)數(shù)量
from Xum_Students18
group by xm_Sorig18
)
(7)教師課程成績
create view 教師課程成績
as
(
select xm_Tno18,Xum_Teachers18.xm_Tname18,xm_Cno18,xm_Sno18,xm_Score18
from Xum_Teachers18,Xum_Reports18
where Xum_Teachers18.xm_Tname18=Xum_Reports18.xm_Tname18
)
(8)教師與學生成績
?(9)視圖預覽
?5.3 索引的建立
create unique index Tea_Tno on Xum_Teachers18(xm_Tno18)
create unique index Cour_Cno on Xum_Courses18(xm_Cno18)
create unique index Mno_CLno on Xum_Class18(xm_CLno18,xm_Mno18)
create unique index Majo_Mno on Xum_Majors18(xm_Mno18)
create unique index CLno_Sno on Xum_Students18(xm_Sno18,xm_CLno18)
create unique index Cno_Sno on Xum_Reports18(xm_Sno18,xm_Cno18)
?5.4 觸發(fā)器建立?
(1)教師刪除(刪除一個教師時,與教師相關(guān)的記錄全都刪除)
? ? 這里漏寫了刪除教師賬號信息 如果運行出錯了 可以參考“學生刪除“代碼 改寫觸發(fā)器
create trigger 教師刪除18
on Xum_Teachers18
for delete
as
delete xm_Tno18
where Xum_Tea_Cour18.xm_Tno18=(select xm_Tno18 from deleted)
and Xum_Teac_Class18.xm_Tno18=(select xm_Tno18 from deleted)
(2)學生刪除(刪除一個學生時,與該學生相關(guān)的記錄全都刪除
create trigger 學生刪除18
on Xum_Students18
for delete
as
begin
delete from Xum_Reports18
where Xum_Reports18.xm_Sno18 in (select xm_Sno18 from deleted)
delete from Students_account18
where Students_account18.xm_Sno18 in (select xm_Sno18 from deleted)
end
?(3)學生統(tǒng)計(提交成績時,將》=60的成績記為合格,同時加上該課程學分)
create trigger 學分統(tǒng)計18 on Xum_Reports18
for insert
as
update Xum_Students18
set xm_Ssum18=(
select sum(xm_Ccredit18)
from Xum_Courses18
where xm_Cno18 in
(
select xm_Cno18
from Xum_Reports18
where xm_Score18>=60
and Xum_Reports18.xm_Sno18 in
(select xm_Sno18
from inserted)
)
)
where Xum_Students18.xm_Sno18 in
(
select xm_Sno18
from inserted
)
(4)教師更新
create trigger 教師更新
on Xum_Teachers18
for update
as
if update(xm_Tno18)
begin
update Xum_Tea_Cour18
set xm_Tno18=i.xm_Tno18
from deleted d,inserted i ,Xum_Tea_Cour18 t
where t.xm_Tno18=d.xm_Tno18
end
begin
update Xum_Teac_Class18
set xm_Tno18=i.xm_Tno18
from deleted d,inserted i,Xum_Teac_Class18 c
where c.xm_Tno18=d.xm_Tno18
end
(5)學生添加 自動注冊新用戶 默認密碼12345
create trigger 插入創(chuàng)建學生新用戶18
on Xum_Students18
for insert
as
declare @sno char(10)
begin
select @sno=xm_Sno18 from inserted
insert into Students_account18
values(@sno,'12345')
end
?(6)教師添加 自動注冊新用戶 默認密碼12345
create trigger 插入創(chuàng)建教師新用戶18
on Xum_Teachers18
for insert
as
declare @tno char(10)
begin
select @tno=xm_Tno18 from inserted
insert into Teachers_account18
values(@tno,'12345')
end
5.5 建存儲過程
(1)插入新學生
create procedure pro_插入新學生
@sno char(12),
@sname char(10),
@ssex char(5),
@sage int,
@sorig char(20),
@ssum float,
@clno char(10)
as
insert Xum_Students18(xm_Sno18,xm_Sname18,xm_Ssex18,xm_Sage18
,xm_Sorig18,xm_Ssum18,xm_Clno18)
values(@sno,@sname,@ssex,@sage,@sorig,@ssum,@clno)
select *
from Xum_Students18
go
(2)自動算學分
create procedure pro_輸入成績自動生成學分
@sno char(12),
@cno char(10),
@cname char(10),
@cdate char(10),
@score int,
@tname char(10),
@credit float
as
begin
insert into pro_選修
values(@sno,@cno,@score)
update Xum_Students18
set xm_Ssum18=xm_Ssum18+@credit
where Xum_Students18.xm_Sno18=@sno
end
6、應用系統(tǒng)開發(fā)與試運行
6.1 開發(fā)平臺和開發(fā)環(huán)境介紹。
? ? ?Visual studio 2013 + SQL server 2014
? ? ?Win10系統(tǒng)
6.2 前臺界面與后臺數(shù)據(jù)庫連接說明,代碼實現(xiàn)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
class sqlConnect
{
public SqlConnection conn = null;
public sqlConnect()
{
if (conn == null)
{
string connectString = "Data Source =LAPTOP-FPCD1SM8\\SQL2014; database =XumMIS18; " +
"Integrated Security = True";
conn = new SqlConnection(connectString);
if (conn.State == ConnectionState.Closed) conn.Open();
}
}
public void closeConnect()
{
if (conn.State == ConnectionState.Closed) conn.Close();
}
public DataSet Getds(string sql)
{
if (conn.State == ConnectionState.Closed) conn.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds);
conn.Close();
return ds;
}
public int OperateData(string sql)
{
if (conn.State == ConnectionState.Closed) conn.Open();
SqlCommand sqlcom = new SqlCommand();
sqlcom.CommandText = sql;
sqlcom.CommandType = CommandType.Text;
sqlcom.Connection = conn;
int x = sqlcom.ExecuteNonQuery();
conn.Close();
return x;
}
public DataSet BindDataGridView(DataGridView dgv, string sql)
{
if (conn.State == ConnectionState.Closed) conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
dgv.DataSource = ds.Tables[0];
return ds;
}
}
}
6.3 系統(tǒng)各功能設計和運行界面截圖。
???(1)登錄界面如圖所示
①登入異常
(輸入的密碼、賬號錯誤,提示框報錯)
圖43 賬號或密碼錯誤
②輸入不完整
③驗證成功?
?(2)進入學生界面
?①個人信息查詢
②成績查詢,選擇學年查詢
③班級課表查詢
?④學生課表和學分查詢
?⑤修改密碼
?輸入為空
?原密碼輸入錯誤(原密碼為123456)
?兩次新密碼驗證不通過
?修改成功
?(3)教師界面
?①教師個人信息查詢?
?②教師任課查詢
?③所任課程平均成績
?④查詢選擇該課程學生的分數(shù)排名(分數(shù)按降序)
?⑤教師提交學生成績 添加成績(課程里只有這個老師教的課)
?確定課程出現(xiàn)選擇該課程學生的信息
?刪除信息
?修改成績(只能修改成績,只有最后一行可編輯,將第二位同學 99改為98)
?⑥修改密碼和學生界面類似
(4)管理員界面
①教師管理?
實現(xiàn)插入編號為T10的教師信息,同時查詢編號為T10老師的信息
插入的教室信息(T10,舒克,男,46,教授,3765874563)查詢T10老師的信息
?教師刪除(刪除為T10教師的信息)
?修改T09教師的年齡(36-->45)
?②學生界面
可以實現(xiàn)學生信息的插入、刪除、修改以及查詢和教師界面類似,這里不做過大介紹
?③管理員生源統(tǒng)計
?④管理員修改密碼與學生老師的相同
⑤管理員重置教師、學生密碼
為防止有教師、學生忘記密碼,這里提供密碼重置功能。
7、實驗總結(jié)
7.1 遇到的問題和解決的辦法
(1)因為從來沒有寫過C#代碼,剛開始的時候,對這門語言非常陌生,不知道從何下,所以,我的界面模塊都是按照書本后面的實例代碼寫的,寫的時候其實心里還是非常模糊,不知道怎么實現(xiàn)代碼和數(shù)據(jù)庫的嵌入,花了很多時間在探索上。但是C#是一門非常適合做界面的語言,它繼承了C語言和java語言的優(yōu)點,同時界面上控件的安放十分簡單上手。
(2)在系統(tǒng)需求分析完成以后,根據(jù)用戶需求設計概念結(jié)構(gòu)的時候遇到了數(shù)據(jù)冗余等多種問題,經(jīng)過慢慢的分解關(guān)系最終得到了相對來說還比較完善的概念結(jié)構(gòu),通過ER圖表示出來。
(3)設計數(shù)據(jù)庫的時候,原本是沒有想到觸發(fā)器和存儲過程的設計,但是當界面設計完成的差不多,要初步測試界面功能時,才發(fā)現(xiàn)數(shù)據(jù)庫的設計存在很多缺陷,在實現(xiàn)插入、刪除時,多張表之間存在信息不對稱問題,例如教師或?qū)W生刪除后,沒有將其相關(guān)記錄刪除,也沒有將其賬號注銷,更新信息也同樣存在這樣的問題,因此,測試時出現(xiàn)了很多異常情況,不過后來添加了觸發(fā)器,大抵上解決了這些問題。
(4)SQL語句經(jīng)常出錯。因為是寫在代碼里面,查詢語句表現(xiàn)出來就是一串字符串,在SQL SEVER寫查詢語句時,會自動檢查拼寫、邏輯錯誤,直接在代碼里面寫SQL語句非常容易出錯,導致程序的中端。因為本質(zhì)上都是對數(shù)據(jù)庫的操作,我認為可以先在SQL SEVER中寫好語句,并且驗證其的正確性之后,再寫入C# 代碼中,這樣會大大降低錯誤率。
(5)字符串匹配問題,在實現(xiàn)用戶登錄及密碼修改時,我發(fā)現(xiàn),對查詢結(jié)果與本身的字符串進行匹配時,盡管他們顯示出是相等的,但是匹配是不成功的。譬如說登錄時,輸入賬號為A01,先通過查詢找出A01的密碼,在將輸入的密碼與其匹配,實驗中將這兩個進行輸出,肉眼上是看不出差別的,但是程序匹配上是永遠失敗的,這個問題產(chǎn)生的原因至今我還是不太清楚。后來,我將這兩個查詢語句進行合并,返回滿足賬號和密碼的記錄數(shù),若記錄為0,則說明輸入的賬號或密碼有誤,若不是0,則說明輸入無誤。
7.2 系統(tǒng)設計的不足
(1)數(shù)據(jù)庫表格的設計存在一些不合理的地方,Reports表中,感覺加入教師編號會更利與數(shù)據(jù)庫的實現(xiàn),因為只有教師姓名,會加劇設計教師與學生操作的復雜性,且出錯率也會變高。
(2)功能實現(xiàn)的不夠全面,管理員的功能主要體現(xiàn)在老師和學生這兩種類別上,其實還可以進行課程的管理等等,學生的選課、退課功能也還沒有考慮上,整個系統(tǒng)還是比較脆弱簡單的。
(3)在進行學生成績排名的時候,只能顯示排名結(jié)果,但是不能顯示名次。
(4)數(shù)據(jù)庫設計時,涉及到班級和專業(yè)的地方很少,實際中,應該把這兩個也考慮進去,才能完善整個系統(tǒng)。
(5)建立了太多視圖,設計視圖的時候,因為有很多信息的交叉,還有很多外鍵,需要很多自然連接 ,非常繁瑣。
?
7.3 進一步改進思路和體會
(1)本次課設讓我理解了設計數(shù)據(jù)庫的復雜性,并且數(shù)據(jù)庫的設計一定要保障數(shù)據(jù)庫的完整性和準確性,這些在數(shù)據(jù)定義、基本表建立、設計觸發(fā)器和存儲過程時都要仔細考慮。
(2)本次實驗也讓我對C#這么語言有了初步的理解,C#集合了c語言和java語言的優(yōu)點,是一門非常適合做界面的語言,界面制作比較容易上手。
(3)設計更多的觸發(fā)器,加強表與表之間的聯(lián)系,盡量減少視圖的數(shù)量,提高基本表與視圖的有效性。
(4)優(yōu)化界面,使界面更加符合實際需求。
體會
通過這次課程設計發(fā)現(xiàn)這其中需要的很多知識我們沒有接觸過,還有很多需要我們掌握的東西我們不明白。同時也發(fā)現(xiàn)有很多已經(jīng)學過的東西我們沒有理解到位,不能靈活運用于實際,不能很好的用來解決問題,這就需要我們不斷的大量的實踐,通過不斷的自學,不斷地發(fā)現(xiàn)問題,思考問題,進而解決問題。從?????????????????????種文檔的閱讀到開始的需求分析、概念結(jié)構(gòu)設計、邏輯結(jié)構(gòu)設計、物理結(jié)構(gòu)設計。親身體驗了一回系統(tǒng)的設計開發(fā)過程。很多東西書上寫的很清楚,貌似看著也很簡單,操作起來要考慮到方方面面,這還只是一個比較簡單的系統(tǒng),可想可知在我們生活中應用的數(shù)據(jù)庫會有多么復雜。
(寫得比較簡陋,頁面不太美觀,數(shù)據(jù)結(jié)構(gòu)也存在問題,數(shù)據(jù)庫文件已經(jīng)找不到了,想要參考C#源碼的可以私我,一定要先建好數(shù)據(jù)庫(修改sqlConnect.cs的數(shù)據(jù)庫名稱),打開配置管理器所有的協(xié)議,確保連接沒問題,再將C#每個頁面的查詢語句改成自己建的表)
?不知道的看SQL Sever開啟時服務器名稱
要成功運行 一定要建好數(shù)據(jù)庫、插入數(shù)據(jù),插入的數(shù)據(jù)一定要有一定的對應關(guān)系,遵循主外鍵約束,當數(shù)據(jù)插入完畢之后。
插入數(shù)據(jù)參考
insert
into Xum_Majors18
values('M01','計智')
insert
into Xum_Majors18
values('M02','計科')
insert
into Xum_Majors18
values('M03','軟工')
insert
into Xum_Majors18
values('M04','網(wǎng)工')
insert
into Xum_Class18
values('CL01','計智1902','M01')
insert
into Xum_Class18
values('CL02','計智1902','M01')
insert
into Xum_Class18
values('CL03','計科1902','M02')
insert
into Xum_Class18
values('CL04','計科1902','M02')
insert
into Xum_Class18
values('CL05','網(wǎng)工1901','M03')
insert
into Xum_Class18
values('CL06','網(wǎng)工1902','M03')
insert
into Xum_Class18
values('CL07','軟工1901','M04')
insert
into Xum_Class18
values('CL08','軟工1902','M04')
insert
into Xum_Courses18
values('C01','離散數(shù)學','程珍','大一下','考試',4,24)
insert
into Xum_Courses18
values('C03','機器學習','黃亮','大一下','考查',4 ,24)
insert
into Xum_Courses18
values('C04','數(shù)字電路','趙冬冬','大一下','考試',4 ,24)
insert
into Xum_Courses18
values('C05','數(shù)字電路','龍勝春','大一下','考試',4 ,24)
insert
into Xum_Courses18
values('C06','馬原','周文','大一上','考試',3 ,18)
insert
into Xum_Courses18
values('C07','毛概','陳燕','大一下','考試',3 ,18)
insert
into Xum_Courses18
values('C08','思修','吳五','大一上','考試', 4,24)
insert
into Xum_Students18
values('06060101','張三','男',20,'浙江',20,'CL01')
insert
into Xum_Students18
values('06060102','李四','男',20,'浙江',15,'CL01')
insert
into Xum_Students18
values('06060103','王五','男',20,'浙江',10,'CL02')
insert
into Xum_Students18
values('06060104','張南','女',20,'浙江',22,'CL02')
insert
into Xum_Students18
values('06060105','麗麗','女',20,'北京',18,'CL03')
insert
into Xum_Students18
values('06060106','倩倩','女',20,'浙江',19,'CL03')
insert
into Xum_Students18
values('06060107','悠悠','女',20,'浙江',25,'CL04')
insert
into Xum_Students18
values('06060108','琪琪','男',20,'安徽',22,'CL04')
insert
into Xum_Students18
values('06060109','貝奇','男',20,'湖南',20,'CL05')
insert
into Xum_Students18
values('06060110','洛克','男',20,'浙江',20,'CL05')
insert
into Xum_Students18
values('06060202','尼克','男',20,'江蘇',15,'CL06')
insert
into Xum_Students18
values('06060203','艾米','女',20,'江西',10,'CL06')
insert
into Xum_Students18
values('06060301','絲爾特','女',20,'福建',20,'CL07')
insert
into Xum_Students18
values('06060302','梅森','男',20,'浙江',15,'CL07')
insert
into Xum_Students18
values('06060403','大衛(wèi)','男',20,'浙江',10,'CL08')
insert
into Xum_Students18
values('06060405','湯米','女',20,'浙江',22,'CL08')
insert
into Xum_Teachers18
values('T01','程珍','女',35,'教師','13344332278')
insert
into Xum_Teachers18
values('T02','王英姿','女',35,'教師','13756742178')
insert
into Xum_Teachers18
values('T03','黃亮','男',34,'教師','15745723349')
insert
into Xum_Teachers18
values('T04','趙冬冬','男',30,'教師','17858640979')
insert
into Xum_Teachers18
values('T05','龍勝春','女',37,'教師','17857573670')
insert
into Xum_Teachers18
values('T06','周文','女',32,'教師','18367986174')
insert
into Xum_Teachers18
values('T07','陳燕','女',45,'教師','17858427842')
insert
into Xum_Teachers18
values('T08','吳五','男',35,'教師','15724547842')
insert
into Xum_Tea_Cour18
values('T01','C01')
insert
into Xum_Tea_Cour18
values('T02','C02')
insert
into Xum_Tea_Cour18
values('T03','C03')
insert
into Xum_Tea_Cour18
values('T04','C04')
insert
into Xum_Tea_Cour18
values('T05','C05')
insert
into Xum_Tea_Cour18
values('T06','C06')
insert
into Xum_Tea_Cour18
values('T07','C07')
insert
into Xum_Tea_Cour18
values('T08','C08')
insert
into Xum_Class_Cour18
values('CL01','C01')
insert
into Xum_Class_Cour18
values('CL02','C02')
insert
into Xum_Class_Cour18
values('CL03','C03')
insert
into Xum_Class_Cour18
values('CL04','C04')
insert
into Xum_Class_Cour18
values('CL05','C05')
insert
into Xum_Class_Cour18
values('CL06','C06')
insert
into Xum_Class_Cour18
values('CL07','C07')
insert
into Xum_Class_Cour18
values('CL08','C08')
insert
into Xum_Teac_Class18
values('T01','CL01')
insert
into Xum_Teac_Class18
values('T02','CL02')
insert
into Xum_Teac_Class18
values('T03','CL03')
insert
into Xum_Teac_Class18
values('T04','CL04')
insert
into Xum_Teac_Class18
values('T05','CL05')
insert
into Xum_Teac_Class18
values('T06','CL06')
insert
into Xum_Teac_Class18
values('T07','CL07')
insert
into Xum_Teac_Class18
values('T08','CL08')
insert
into Xum_Reports18
values('C01','06060101',90,'大一下','程珍')
insert
into Xum_Reports18
values('C01','06060102',93,'大一下','程珍')
insert
into Xum_Reports18
values('C02','06060103',78,'大一上','王英姿')
insert
into Xum_Reports18
values('C02','06060104',96,'大一上','王英姿')
insert
into Xum_Reports18
values('C03','06060105',87,'大一下','黃亮')
insert
into Xum_Reports18
values('C03','06060106',98,'大一下','黃亮')
insert
into Xum_Reports18
values('C04','06060107',94,'大一下','趙冬冬')
insert
into Xum_Reports18
values('C04','06060108',80,'大一下','趙冬冬')
insert
into Xum_Reports18
values('C05','06060109',87,'大一下','龍勝春')
insert
into Xum_Reports18
values('C05','06060110',96,'大一下','龍勝春')
insert
into Xum_Reports18
values('C06','06060202',95,'大一上','周文')
insert
into Xum_Reports18
values('C06','06060203',93,'大一上','周文')
insert
into Xum_Reports18
values('C07','06060301',98,'大一下','陳燕')
insert
into Xum_Reports18
values('C07','06060302',77,'大一下','陳燕')
insert
into Xum_Reports18
values('C08','06060403',67,'大一上','吳五')
insert
into Xum_Reports18
values('C08','06060405',88,'大一上','吳五')
insert
into Teachers_account18
values('T01','12345')
insert
into Teachers_account18
values('T02','12345')
insert
into Teachers_account18
values('T03','12345')
insert
into Teachers_account18
values('T04','12345')
insert
into Teachers_account18
values('T05','12345')
insert
into Teachers_account18
values('T06','12345')
insert
into Teachers_account18
values('T07','12345')
insert
into Teachers_account18
values('T08','12345')
insert into
Students_account18
values('06060101','12345')
insert into
Students_account18
values('06060102','12345')
insert into
Students_account18
values('06060103','12345')
insert into
Students_account18
values('06060104','12345')
insert into
Students_account18
values('06060105','12345')
insert into
Students_account18
values('06060106','12345')
insert into
Students_account18
values('06060107','12345')
insert into
Students_account18
values('06060108','12345')
insert into
Students_account18
values('06060109','12345')
insert into
Students_account18
values('06060110','12345')
insert into
Students_account18
values('06060202','12345')
insert into
Students_account18
values('06060203','12345')
insert into
Students_account18
values('06060301','12345')
insert into
Students_account18
values('06060302','12345')
insert into
Students_account18
values('06060403','12345')
insert into
Students_account18
values('06060405','12345')
insert into
Admin_account18
values('A01','12345')
insert into
Admin_account18
values('A02','12345')
打開所有協(xié)議,然后修改每個界面的查詢語句
注意點:
1.C#源碼用VS運行 ?SQL sever選擇2014版
2.不要重復插入數(shù)據(jù),插入的數(shù)據(jù)遵循主外鍵約束
3.觸發(fā)器一定要寫 如果不想寫的話 就把對應的功能去掉(譬如“教師刪除“”觸發(fā)器,可以直接刪除掉“刪除教師”的功能)如果要留下這些功能 一定要寫觸發(fā)器
4.視圖可以不用全部建立 運行過程中只用到了一兩個
5.可以先在SQL里面運行語句 再去C#里面運行 這樣出錯概率低
6.源碼里面有幾個頁面多余? 運行時沒有用到就可以刪掉
7.數(shù)據(jù)庫連接問題 要把所有協(xié)議打開 保證服務器名沒有寫錯
8.頁面可以自己重新編輯(換控件、背景jpg、增添功能)
9. 如果一運行就報錯,基本都是因為沒有和數(shù)據(jù)庫連接成功。
10.如果是點擊了按鈕之后,界面報錯終止可以先在數(shù)據(jù)庫運行該界面的sql語句,看具體報錯信息
c#界面源碼及文檔報告見網(wǎng)盤文章來源:http://www.zghlxwxcb.cn/news/detail-777057.html
百度網(wǎng)盤 請輸入提取碼文章來源地址http://www.zghlxwxcb.cn/news/detail-777057.html
到了這里,關(guān)于數(shù)據(jù)庫系統(tǒng)課程設計(高校成績管理數(shù)據(jù)庫系統(tǒng)的設計與實現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!