某中学的排课管理系统_某中学的排课管理系统(SQL的简单应用)
一、系統分析
需求功能分析
需求分析的任務是調查應用領域,對應用領域中的信息要求和操作要求進行詳細分析,形成需求分析說明書。重點是調查,收集與分析用戶在數據管理中的信息要求,處理要求,數據的安全性與完整性要求。
為了完成需求分析的任務,要詳細調查待開發的數據庫應用部門的情況,了解原系統工作概況,分析用戶的各種需求,在此基礎上確定新系統的功能。新系統必須考慮今后的擴充和改變,不能僅僅按當前應用需求來設計數據庫。
排課管理系統需要實現對學校教師、教室、班級、及課程的信息管理,對高校排課,都有智能的管理,主要實現如下的一些功能:
班級各種信息的輸入,包括班級號,班級名稱,班級人數。
教師各種信息的輸入,包括教師號,教師姓名,職稱,性別。
學校課程的增加,刪除,修改。
學校課程計劃的制定。
檢測指定教師、指定節次是否有課;
生成指定班級的課程表;
生成指定老師的課程表;
生成指定學生的課程表;
二、系統數據庫設計
1.概念設計
排課管理系統涉及的實體有4個,分別是需要學生、班級、教師、課程。
其中班級與學生是一對多的關系;
班級與課程是多對多的關系;
班級與教師是多對多的關系;
課程與教師是多對多的關系;
圖1 學生實體E-R圖圖2 班級實體E-R圖圖3 教師實體E-R圖圖4 課程實體E-R圖圖5 E-R總圖- 學生具有4個屬性:學生ID、姓名、性別、班級ID。學生ID是主鍵,班級ID是外鍵。
- 教師具有4個屬性:教師ID、姓名、性別、年齡。教師ID是主鍵。
- 班級具有2個屬性:班級ID、班級名稱。班級ID是主鍵。
- 課程具有2個屬性:課程ID、課程名稱。課程ID是主鍵。
- 聯系有1個,聯系也可以轉換為實體。故排課產生課程表。
- 課程表具有6個屬性:班級ID、教師ID、課程ID、星期、節次、備注。星期+節次為主鍵,班級ID、教師ID、課程ID為外鍵。
2.邏輯設計
寫出上述幾個實體的關系模式,實現E-R圖向關系模型的轉變。
3.物理設計
將上述的實體轉換為關系。
三、系統數據庫實施
1.寫出創建數據庫、表、視圖、存儲過程、函數、觸發器的SQL語句
--創建數據庫 create database lesson go use lesson go --創建class表 create table class (classID int primary key,classname char(20) ) Go --創建student表 create table student (studentID int primary key,name char(10) not null,sex char(2) not null check(sex='F' or sex='M'),classID int references class(classID) ) Go --創建teacher表 create table teacher (teacherID int primary key,name char(10) not null,sex char(2) not null check(sex='F' or sex='M'),age int not null ) Go --創建course表 create table course (courseID int primary key,coursename char(20) ) --創建class_schdule表 use lesson go create table course_schdule (classID int,teacherID int,courseID int,weeks int not null check(weeks>0 and weeks<8),lessons int not null check(lessons>0 and lessons<9),remark char(100),constraint pk_schdule primary key(classID,teacherID,courseID,weeks,lessons),constraint fk_classID foreign key (classID) references class(classID),constraint fk_teacherID foreign key (teacherID)references teacher(teacherID),constraint fk_courseID foreign key (courseID)references course(courseID) )2.系統數據表結構關系
數據表結構的關系如圖6所示。
圖6 系統數據表結構關系圖四、系統數據查詢與數據維護
1.插入測試數據(用Insert語句實現)
--向class表中添加數據 use lesson go 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表中添加數據 use lesson go 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表中添加數據 use lesson go 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表中添加數據 use lesson go 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表中添加數據 use lesson go insert into course_schdule values('1','001','0004',1,5,'第1周到第5周') insert into course_schdule values('1','001','0004',1,6,'第1周到第5周') insert into course_schdule values('1','002','0007',1,1,'第1周到第6周') 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.簡單數據查詢舉例
查詢所有課程信息
select * from course go3.連接查詢舉例
查詢學生信息,要求classID 換成班級名顯示。
select student.studentID 學生ID,student.name 學生名,student.sex 性別,class.classname 班級名 from student,class where student.classID=class.classID4.子查詢舉例
查詢老師給哪些班級上過課的信息,要求classID 換成班級名顯示。
use lesson go select distinct teacher.teacherID 教師ID,teacher.name 教師名, class.classname 班級名 from teacherjoin course_schdule on teacher.teacherID=course_schdule.teacherIDjoin class on course_schdule.classID=class.classID5.數據修改舉例
修改一條排課信息
use lesson go update course_schdule set teacherID='006',courseID='0001' where classID='1' and weeks=1 and lessons=66.數據刪除舉例
刪除一條排課信息
use lesson go delete from course_schdule where classID='1' and weeks=1 and lessons=67.創建函數舉例
創建函數計算制定班級所上的課程數
create function dbo.countcourses (@classid int) returns int as begindeclare @count intselect @count=count(distinct courseID)from course_schdulewhere course_schdule.classID=@classidreturn @count endprint convert(varchar(16),dbo.countcourses(1))8.創建存儲過程舉例
創建存儲過程生成指定班級的課程表
use lesson gocreate proc up_class(@classID int) as select class.classname 班級名,teacher.name 教師名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節次,course_schdule.remark 備注 from course_schdulejoin class on course_schdule.classID=class.classIDjoin teacher on course_schdule.teacherID=teacher.teacherIDjoin course on course_schdule.courseID=course.courseID where course_schdule.classID=@classID order by course_schdule.weeks asc,course_schdule.lessons ascexecute up_class '01'創建存儲過程生成指定教師的課程表
use lesson gocreate proc up_teacher(@teacherID int) as select teacher.name 教師名,class.classname 班級名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節次,course_schdule.remark 備注 from course_schdulejoin class on course_schdule.classID=class.classIDjoin teacher on course_schdule.teacherID=teacher.teacherIDjoin course on course_schdule.courseID=course.courseID where course_schdule.teacherID=@teacherID order by course_schdule.weeks asc,course_schdule.lessons ascexecute up_teacher '0001'創建存儲過程生成指定學生的課程表
use lesson gocreate proc up_student(@studentID int) as begindeclare @classid intselect @classid=student.classIDfrom studentwhere student.studentID=@studentIDselect student.studentID 學生ID,student.name 學生名,teacher.name 教師名,class.classname 班級名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節次,course_schdule.remark 備注from course_schdulejoin class on course_schdule.classID=class.classIDjoin teacher on course_schdule.teacherID=teacher.teacherIDjoin course on course_schdule.courseID=course.courseIDjoin student on student.classID=@classidwhere course_schdule.classID=@classid and student.studentID=@studentIDorder by course_schdule.weeks asc,course_schdule.lessons asc endexecute up_student '1203'創建存儲過程檢測指定教師、指定節次是否有課;
use lesson gocreate proc up_search(@teacherID int,@week char(20),@lesson char(20)) as begindeclare @teachername char(10)select @teachername=teacher.namefrom teacherwhere teacher.teacherID=@teacherID if exists(select *from course_schdulewhere 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)+'節 有課!'elseprint convert(varchar(4),@teachername)+'老師在星期'+convert(varchar(2),@week)+'的第'+convert(varchar(2),@lesson)+'節 沒課!' endexecute up_search '003','3','4'execute up_search '001','2','5'9.創建觸發器舉例
創建觸發器檢測添加的排課信息是否與已有課表沖突;
use lesson go create trigger T_insert on course_schdule instead of insert asif exists(select *from course_schdule,insertedwhere 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)begin raiserror('該節次已經有課了,請重新添加排課信息!',16,1)rollbackendinsert into course_schdule values('2','005','0011',2,4,'第2周到第3周')insert into course_schdule values('3','006','0009',2,4,'第2周到第3周')10.創建視圖舉例
創建視圖,通過該視圖能顯示學生的ID,姓名,所上的課程名,教師名,所在班級名,和課程的星期、節次、備注。
use lesson go create view v_stu as select student.studentID 學生ID,student.name 學生名,teacher.name 教師名,class.classname 班級名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節次,course_schdule.remark 備注 from course_schdulejoin class on course_schdule.classID=class.classIDjoin teacher on course_schdule.teacherID=teacher.teacherIDjoin course on course_schdule.courseID=course.courseIDjoin 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("server=.;database=lesson;uid=sa;pwd=123");bool error = false;int num = 0;try{string sql = string.Format("select count(*) from stu where sname='{0}' and password='{1}'", textBox1.Text.Trim(), textBox2.Text.Trim());conn.Open();SqlCommand command = new SqlCommand(sql, conn);num = Convert.ToInt32(command.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允許創建新的數據庫角色。
- 權限
權限分為三種:對象權限(指用戶對數據庫中的表、視圖、存儲過程等對象的操作權限)、語句權限(指執行數據定義語句的權限)和隱含權限(指系統預定義的服務器角色、數據庫擁有者、數據庫對象所擁有的權限)。
總結
以上是生活随笔為你收集整理的某中学的排课管理系统_某中学的排课管理系统(SQL的简单应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工具的特性_16 个好用的 Code R
- 下一篇: java信息管理系统总结_java实现科