一、系統分析
需求功能分析
需求分析的任務是調查應用領域,詳細分析應用領域的資訊需求和操作要求,形成需求分析說明書。重點是調查、收集和分析資料管理中使用者的資訊要求、處理要求、資料的安全性和完整性要求。
為了完成需求分析的任務,應詳細調查待開發的資料庫應用程式部門,了解原始系統的工作概況,分析使用者的各種需求,並在此基礎上確定新系統的功能。新系統必須考慮未來的擴展和變化,而不僅僅是根據當前的應用程式需求來設計資料庫。
課程安排管理系統需要對學校教師、教室、班級和課程進行資訊管理,對大學課程安排進行智慧管理,主要實現以下功能:
輸入各種班級訊息,包括班級號碼、班級名稱、班級人數。
輸入各種教師訊息,包括教師號碼、教師姓名、職稱、性別。
增加、刪除和修改學校課程。

制定學校課程計畫。
測驗指定教師和指定節目是否有課程;
產生指定班級的課程表;
產生指定教師的課程表;
產生指定學生的課程表;
二、系統資料庫設計
1.概念設計
排課管理系統涉及學生、班級、教師、課程四個實體。
班級與學生有一對多的關係;
班級與課程多對多;
班級與教師多對多;
課程與教師是多對多的關係;
圖1 學生實體ER圖圖2 班級實體ER圖圖3 教師實體ER圖圖4 課程實體ER圖圖5 ER學生有四個屬性:學生ID、姓名、性別、班級ID。學生ID是主鍵,班級ID是外鍵。教師有四個屬性:ID、姓名、性別、年齡。教師ID是主鍵。班級有兩個屬性:ID、班級名稱。班級ID是主鍵。課程有兩個屬性:課程ID、課程名稱。課程ID是主鍵。聯繫有1個,聯繫也可以轉換為實體。故排課產生課程表。課程有六個屬性:班級ID、教師ID、課程ID、週、節、備註。星期節次為主鍵,班級ID、教師ID、課程ID為外鍵。
2.邏輯設計
寫出上述實體的關係模式,實現ER轉換圖向關係模型。
3.實體設計
將上述實體轉化為關係。
三、實施系統資料庫
1.建立資料庫、表格、檢視、預存程序、函數和觸發器SQL語句
–建立資料庫
建立資料庫課程
去
使用課程
去
–建立class表
建立表類
(
classID int pr ** ry 金鑰,
類別名稱 char(20)
)
去
–建立student表
創建表學生
(
學生ID int 主鍵,
名稱 char(10) 非空,
** char(2) not null check( ** =’F’ or ** =’M’),
classID int 參考類別(classID)
)
去
–建立teacher表
創建表老師
(
教師ID int pr ** ry key,
名稱 char(10) 非空,
** char(2) not null check( ** =’F’ or ** =’M’),
年齡 int 不為空
)
去
–建立course表
創建表格課程
(
課程ID int pr ** ry 金鑰,
課程名稱 char(20)
)
–建立class_schdule表
使用課程
去
建立表course_schedule
(
類別ID int,
教師 ID int,
課程ID int,
weeks int not null check(weeks>0 and weeks<8),
lessons int not null check(lessons>0 and lessons<9),
re ** rk char(100),
約束 pk_schdule pri ** ry key(classID,teacherID,courseID,weeks,lessons),
約束 fk_classID 外鍵 (classID) 引用 class(classID),
約束 fk_teacherID 外鍵 (teacherID)引用 teacher(teacherID),
約束 fk_courseID 外鍵 (courseID)引用課程(courseID)
)
2.系統資料表結構關係

如圖6所示。
圖6 系統資料表結構關係圖
四、系統資料查詢及資料維護
1.插入測試資料(使用)Insert語句實作)
–將資料加入class到表中
使用課程
去
insert into class values(’01’,’物联网’)
insert into class values(’02’,';营销’)
insert into class values(’03’,’机电’)
insert into class values(’04’,’电气’)
insert into class values(’05’,’软件’)–向student将数据添加到表中
使用課程
去
insert into student values(‘1201′,’白某’,’M’,’01’)
insert into student values(‘1202′,’贾某’,’M’,’01’)
insert into student values(‘1203′,’王某’,’M’,’02’)
insert into student values(‘1204′,’龚某’,’F’,’02’)
insert into student values(‘1205′,’邢某’,’M’,’03’)
insert into student values(‘1206′,’戴某’,’M’,’03’)
insert into student values(‘1207′,’刘某’,’F’,’04’)
insert into student values(‘1208′,’陈某’,’F’,’04’)
insert into student values(‘1209′,’韩某’,’M’,’05’)
insert into student values(‘1210′,’袁某’,’F’,’05’)–向teacher将数据添加到表中
使用課程
去
insert into teacher values(‘001′,’韩韩’,’M’,’35’)
insert into teacher values(‘002′,’周周’,’F’,’40’)
insert into teacher values(‘003′,’石石’,’M’,’45’)
insert into teacher values(‘004′,’费费’,’M’,’43’)
insert into teacher values(‘005′,’胡胡’,’M’,’37’)
insert into teacher values(‘006′,’田田’,’F’,’43’)
insert into teacher values(‘007′,’姚姚’,’M’,’45’)
insert into teacher values(‘008′,’喻喻’,’F’,’36’)
insert into teacher values(‘009′,’刘刘’,’F’,’30’)
insert into teacher values(‘010′,’李李’,’M’,’31’)–向course将数据添加到表中
使用課程
去
insert into course values(‘0001′,’复变’)
insert into course values(‘0002′,’模电’)
insert into course values(‘0003′,’信号’)
insert into course values(‘0004′,’电拖’)
insert into course values(‘0005′,’概率’)
insert into course values(‘0006′,’英语’)
insert into course values(‘0007′,’口语’)
insert into course values(‘0008′,’数据库’)
insert into course values(‘0009′,’电路’)
insert into course values(‘0010′,’大物’)
insert into course values(‘0011′,’马原’)–向course_schdule将数据添加到表中
使用課程
去
insert into course_schdule values(‘1′,’001′,’0004′,1,5,';第一周到第五周;’)
insert into course_schdule values(‘1′,’001′,’0004′,1,6,';第一周到第五周;’)
insert into course_schdule values(‘1′,’002′,’0007′,1,1,';第一周到第六周;’)
insert into course_schdule values(‘1′,’002′,’0007′,1,2,’第1周到第6周’)
insert into course_schdule values(‘1′,’003′,’0001′,3,3,’第1周到第5周’)
insert into course_schdule values(‘1′,’003′,’0001′,3,4,’第1周到第5周’)
insert into course_schdule values(‘1′,’004′,’0008′,5,7,’第5周到第10周’)
insert into course_schdule values(‘1′,’004′,’0008′,5,8,’第5周到第10周’)
insert into course_schdule values(‘2′,’001′,’0004′,1,3,’第1周到第5周’)
insert into course_schdule values(‘2′,’001′,’0004′,1,4,’第1周到第5周’)
insert into course_schdule values(‘2′,’005′,’0011′,2,1,’第2周到第3周’)
insert into course_schdule values(‘2′,’005′,’0011′,2,2,’第2周到第3周’)
insert into course_schdule values(‘2′,’005′,’0011′,2,3,’第2周到第3周’)
insert into course_schdule values(‘2′,’005′,’0011′,2,4,’第2周到第3周’)
2.簡單資料查詢舉例
查詢所有課程信息
從課程中選擇*
去
3.連結查詢舉例
查詢學生訊息,要求classID 換成班級名顯示。
select student.studentID 學生ID,student.name 學生名,student. ** 性別,class.classname 班級名
來自學生、班級
其中學生.班級ID=班級.班級ID
4.子查詢舉例
查詢老師給哪些班級上過課的信息,要求classID 換成班級名顯示。
使用課程
去
select distinct teacher.teacherID 教師ID,teacher.name 教師名, class.classname 班級名
來自老師
加入course_schdule,teacher.teacherID=course_schdule.teacherID
加入課程course_schdule.classID=class.classID
5.資料修改舉例
修改一條排課訊息
使用課程
去
更新課程表
set teacherID=’006′,courseID=’0001′
其中 classID='1′、weeks=1 和 lessons=6
6.資料刪除舉例
刪除一條排課訊息
使用課程
去
從course_schedule中刪除
其中 classID='1′、weeks=1 和 lessons=6
7.建立函數舉例
建立函數計算制定班級所上的課程數
建立函數 dbo.countcourses (@classid int)
回傳 int
作為
開始
聲明@count int
選擇@count=count(不同的課程ID)
來自course_schedule
其中course_schdule.classID=@classid
返回@count
endprint 轉換(varchar(16),dbo.countcourses(1))
8.建立預存程序舉例
建立預存程序產生指定班級的課程表
使用課程
去
建立 proc up_class(@classID int)
作為
select class.classname 班級名稱,teacher.name 教師名,course.coursename 課程名稱,course_schdule.weeks 星期,course_schdule.lessons 節,course_schdule.re ** rk 備註
來自course_schedule
加入課程course_schdule.classID=class.classID
加入老師的課程_schdule.teacherID=teacher.teacherID
加入課程 course_schdule.courseID=course.courseID
其中course_schdule.classID=@classID
依課程表週數升序排列,依課程表課時數升序排列執行 up_class '01'
建立預存程序產生指定教師的課程表
使用課程
去
create proc up_teacher(@teacherID int)
作為
select teacher.name 教师名,class.classname 班级名,course.coursename 课程名,course_schdule.weeks 星期,course_schdule.lessons 节次,course_schdule.re ** rk 备注
來自course_schedule
加入課程course_schdule.classID=class.classID
加入老師的課程_schdule.teacherID=teacher.teacherID
加入課程 course_schdule.courseID=course.courseID
where course_schdule.teacherID=@teacherID
依課表週數升序排列,依課程表課時數升序排列執行 up_teacher '0001'
创建存储过程生成指定学生的课程表
使用課程
去
create proc up_student(@studentID int)
作為
開始
declare @classid int
select @classid=student.classID
from student
where student.studentID=@studentID
select student.studentID 学生ID,student.name 学生名,teacher.name 教师名,class.classname 班级名,course.coursename 课程名,course_schdule.weeks 星期,course_schdule.lessons 节次,course_schdule.re ** rk 备注
來自course_schedule
加入課程course_schdule.classID=class.classID
加入老師的課程_schdule.teacherID=teacher.teacherID
加入課程 course_schdule.courseID=course.courseID
join student on student.classID=@classid
where course_schdule.classID=@classid and student.studentID=@studentID
order by course_schdule.weeks asc,course_schdule.lessons asc
endexecute up_student '1203'
创建存储过程检测指定教师、指定节次是否有课;
使用課程
去
create proc up_search(@teacherID int,@week char(20),@lesson char(20))
作為
開始
declare @teachername char(10)
select @teachername=teacher.name
來自老師
where teacher.teacherID=@teacherID
if exists(select *
來自course_schedule
where course_schdule.teacherID=@teacherID and course_schdule.weeks=@week and course_schdule.lessons=@lesson )
print convert(varchar(4),@teachername)+'老師在星期'+convert(varchar(2),@week)+'的第'+convert(varchar(2),@lesson)+'節有課! '
else
print convert(varchar(4),@teachername)+'老師在星期'+convert(varchar(2),@week)+'的第'+convert(varchar(2),@lesson)+'節沒課! '
結束執行 up_search '003','3′,'4'執行 up_search '001','2′,'5′
9.创建触发器举例
创建触发器检测添加的排课信息是否与已有课表冲突;
使用課程
去
create trigger T_insert
on course_schdule
instead of insert
作為
if exists(select *
from course_schdule,inserted
where course_schdule.teacherID=inserted.teacherID and course_schdule.weeks=inserted.weeks and course_schdule.lessons=inserted.lessons and course_schdule.classID=inserted.classID and course_schdule.courseID=inserted.courseID)
開始
raiserror('該節已經有課了,請重新加入排課資訊!',16,1)
rollback
endinsert into course_schdule values('2′,'005′,'0011′,2,4,'第2周到第3週')insert into course_schdule values('3′,'006′,'0009′,2,4,'2週至第3')周到第33'
10.创建视图举例
创建视图,通过该视图能显示学生的ID,姓名,所上的课程名,教师名,所在班级名,和课程的星期、节次、备注。
使用課程
去
create view v_stu
作為
select student.studentID 学生ID,student.name 学生名,teacher.name 教师名,class.classname 班级名,course.coursename 课程名,course_schdule.weeks 星期,course_schdule.lessons 节次,course_schdule.re ** rk 备注
來自course_schedule
加入課程course_schdule.classID=class.classID
加入老師的課程_schdule.teacherID=teacher.teacherID
加入課程 course_schdule.courseID=course.courseID
join student on student.classID=class.classIDselect *
from v_stu
where 學生ID='1201'C#程式應用範例
使用C#登陆到SQL数据库中
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 登录
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(“伺服器=.;資料庫=lesson;uid=sa;pwd=123”);
bool error = false;
int num = 0;
try
{
字串 sql = string.For ** t(“從 stu 選擇 count(*),其中 sname='{0}' 和 password='{1}'”,textBox1.Text.Trim(),textBox2.Text.Trim());
conn.Open();
SqlCom ** nd com ** nd = new SqlCom ** nd(sql, conn);
num = Convert.ToInt32(com ** nd.ExecuteScalar());
}
catch (Exception ex)
{
error = true;
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
if (!error && (num == 1))
{
MessageBox.Show(“登入成功!”);
}
else
{
MessageBox.Show(“輸入的使用者名稱或密碼錯誤!”, “登入提示”, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
五、系统数据库维护与管理
1.系统数据库备份和还原方案
(1)备份方式
针对不同数据库系统的实际情况,SQL server 2005提出了四种备份方式。
全库备份:备份整个数据库的副本日志备份:可以在意外发生时将所有以及提交的事物全部恢复。差异备份:备份自上次全库备份以来被修改的数据页。文件和文件组备份:单独备份组成数据库的文件或文件组。
(2)备份和还原方案
备份方案
根据教材管理系统运行的实际情况有规律地进行完全备份,每晚进行或者每星期进行一次;其次以较小的时间间隔进行差异备份,每隔几小时就进行一次;最后,在相邻的两次差异备份之间进行事务日志备份,如每隔5min进行一次。
还原方案
首先利用最近一次全库备份进行全库备份的恢复;其次进行最佳一次差异备份的恢复;最后再按时间先后顺序进行事务日志备份的恢复。
2.系统数据库安全性管理
(1)SQL server的安全体系结构可划分为4个等级:
客户机操作系统的安全性SQL server的登录的安全性数据库的安全性数据库对象的安全性
(2)客户机安全认证
用windows操作系统登录用户实现客户机的安全性。
(3)服务器安全认证
SQL server安全认证模式分为windows身份验证和SQL server身份验证两种方式。创建登录账户时也分为两种模式的账户。
(4)数据库安全认证
数据库的访问权时通过映射数据库的用户和登录账户之间的关系来实现的。数据库用户是用来指出哪个人可以访问哪个数据库。当登录账户通过了认证后,必须设置数据库用户才可以对数据库及其对象进行操作。一个登录账户在不同的数据库中可以映射成不同的数据库用户,从而可以具有不同的权限。
(5)数据库对象安全认证
数据库对象的安全性是通过数据库用户的角色和权限来实现的。
角色
角色分为服务器角色和数据库角色。服务器角色是SQL server 2005赋予用户对服务器操作的权限,分为8种。服务器角色是固定的,不能添加和删除。数据库角色是SQL server 2005赋予用户对数据库操作的权限。在SQL server中有十种固定的数据库角色。除了10种固定数据库角色外,SQL server允许创建新的数据库角色。
权限
权限分为三种:对象权限(指用户对数据库中的表、视图、存储过程等对象的操作权限)、语句权限(指执行数据定义语句的权限)和隐含权限(指系统预定义的服务器角色、数据库拥有者、数据库对象所拥有的权限)。
發佈留言