某中学的排课管理系统_某中学的排课管理系统(SQL的简单应用)
一、系統(tǒng)分析
需求功能分析
需求分析的任務(wù)是調(diào)查應(yīng)用領(lǐng)域,對應(yīng)用領(lǐng)域中的信息要求和操作要求進(jìn)行詳細(xì)分析,形成需求分析說明書。重點(diǎn)是調(diào)查,收集與分析用戶在數(shù)據(jù)管理中的信息要求,處理要求,數(shù)據(jù)的安全性與完整性要求。
為了完成需求分析的任務(wù),要詳細(xì)調(diào)查待開發(fā)的數(shù)據(jù)庫應(yīng)用部門的情況,了解原系統(tǒng)工作概況,分析用戶的各種需求,在此基礎(chǔ)上確定新系統(tǒng)的功能。新系統(tǒng)必須考慮今后的擴(kuò)充和改變,不能僅僅按當(dāng)前應(yīng)用需求來設(shè)計(jì)數(shù)據(jù)庫。
排課管理系統(tǒng)需要實(shí)現(xiàn)對學(xué)校教師、教室、班級、及課程的信息管理,對高校排課,都有智能的管理,主要實(shí)現(xiàn)如下的一些功能:
班級各種信息的輸入,包括班級號,班級名稱,班級人數(shù)。
教師各種信息的輸入,包括教師號,教師姓名,職稱,性別。
學(xué)校課程的增加,刪除,修改。
學(xué)校課程計(jì)劃的制定。
檢測指定教師、指定節(jié)次是否有課;
生成指定班級的課程表;
生成指定老師的課程表;
生成指定學(xué)生的課程表;
二、系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)
1.概念設(shè)計(jì)
排課管理系統(tǒng)涉及的實(shí)體有4個(gè),分別是需要學(xué)生、班級、教師、課程。
其中班級與學(xué)生是一對多的關(guān)系;
班級與課程是多對多的關(guān)系;
班級與教師是多對多的關(guān)系;
課程與教師是多對多的關(guān)系;
圖1 學(xué)生實(shí)體E-R圖圖2 班級實(shí)體E-R圖圖3 教師實(shí)體E-R圖圖4 課程實(shí)體E-R圖圖5 E-R總圖- 學(xué)生具有4個(gè)屬性:學(xué)生ID、姓名、性別、班級ID。學(xué)生ID是主鍵,班級ID是外鍵。
- 教師具有4個(gè)屬性:教師ID、姓名、性別、年齡。教師ID是主鍵。
- 班級具有2個(gè)屬性:班級ID、班級名稱。班級ID是主鍵。
- 課程具有2個(gè)屬性:課程ID、課程名稱。課程ID是主鍵。
- 聯(lián)系有1個(gè),聯(lián)系也可以轉(zhuǎn)換為實(shí)體。故排課產(chǎn)生課程表。
- 課程表具有6個(gè)屬性:班級ID、教師ID、課程ID、星期、節(jié)次、備注。星期+節(jié)次為主鍵,班級ID、教師ID、課程ID為外鍵。
2.邏輯設(shè)計(jì)
寫出上述幾個(gè)實(shí)體的關(guān)系模式,實(shí)現(xiàn)E-R圖向關(guān)系模型的轉(zhuǎn)變。
3.物理設(shè)計(jì)
將上述的實(shí)體轉(zhuǎn)換為關(guān)系。
三、系統(tǒng)數(shù)據(jù)庫實(shí)施
1.寫出創(chuàng)建數(shù)據(jù)庫、表、視圖、存儲(chǔ)過程、函數(shù)、觸發(fā)器的SQL語句
--創(chuàng)建數(shù)據(jù)庫 create database lesson go use lesson go --創(chuàng)建class表 create table class (classID int primary key,classname char(20) ) Go --創(chuàng)建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 --創(chuàng)建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 --創(chuàng)建course表 create table course (courseID int primary key,coursename char(20) ) --創(chuàng)建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.系統(tǒng)數(shù)據(jù)表結(jié)構(gòu)關(guān)系
數(shù)據(jù)表結(jié)構(gòu)的關(guān)系如圖6所示。
圖6 系統(tǒng)數(shù)據(jù)表結(jié)構(gòu)關(guān)系圖四、系統(tǒng)數(shù)據(jù)查詢與數(shù)據(jù)維護(hù)
1.插入測試數(shù)據(jù)(用Insert語句實(shí)現(xiàn))
--向class表中添加數(shù)據(jù) use lesson go insert into class values('01','物聯(lián)網(wǎng)') insert into class values('02','市場營銷') insert into class values('03','機(jī)電') insert into class values('04','電氣') insert into class values('05','軟件')--向student表中添加數(shù)據(jù) 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表中添加數(shù)據(jù) 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','費(fèi)費(fèi)','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表中添加數(shù)據(jù) use lesson go insert into course values('0001','復(fù)變') 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','數(shù)據(jù)庫') insert into course values('0009','電路') insert into course values('0010','大物') insert into course values('0011','馬原')--向course_schdule表中添加數(shù)據(jù) 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.簡單數(shù)據(jù)查詢舉例
查詢所有課程信息
select * from course go3.連接查詢舉例
查詢學(xué)生信息,要求classID 換成班級名顯示。
select student.studentID 學(xué)生ID,student.name 學(xué)生名,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.數(shù)據(jù)修改舉例
修改一條排課信息
use lesson go update course_schdule set teacherID='006',courseID='0001' where classID='1' and weeks=1 and lessons=66.數(shù)據(jù)刪除舉例
刪除一條排課信息
use lesson go delete from course_schdule where classID='1' and weeks=1 and lessons=67.創(chuàng)建函數(shù)舉例
創(chuàng)建函數(shù)計(jì)算制定班級所上的課程數(shù)
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.創(chuàng)建存儲(chǔ)過程舉例
創(chuàng)建存儲(chǔ)過程生成指定班級的課程表
use lesson gocreate proc up_class(@classID int) as select class.classname 班級名,teacher.name 教師名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節(jié)次,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'創(chuàng)建存儲(chǔ)過程生成指定教師的課程表
use lesson gocreate proc up_teacher(@teacherID int) as select teacher.name 教師名,class.classname 班級名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節(jié)次,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'創(chuàng)建存儲(chǔ)過程生成指定學(xué)生的課程表
use lesson gocreate proc up_student(@studentID int) as begindeclare @classid intselect @classid=student.classIDfrom studentwhere student.studentID=@studentIDselect student.studentID 學(xué)生ID,student.name 學(xué)生名,teacher.name 教師名,class.classname 班級名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節(jié)次,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'創(chuàng)建存儲(chǔ)過程檢測指定教師、指定節(jié)次是否有課;
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)+'節(jié) 有課!'elseprint convert(varchar(4),@teachername)+'老師在星期'+convert(varchar(2),@week)+'的第'+convert(varchar(2),@lesson)+'節(jié) 沒課!' endexecute up_search '003','3','4'execute up_search '001','2','5'9.創(chuàng)建觸發(fā)器舉例
創(chuàng)建觸發(fā)器檢測添加的排課信息是否與已有課表沖突;
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('該節(jié)次已經(jīng)有課了,請重新添加排課信息!',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.創(chuàng)建視圖舉例
創(chuàng)建視圖,通過該視圖能顯示學(xué)生的ID,姓名,所上的課程名,教師名,所在班級名,和課程的星期、節(jié)次、備注。
use lesson go create view v_stu as select student.studentID 學(xué)生ID,student.name 學(xué)生名,teacher.name 教師名,class.classname 班級名,course.coursename 課程名,course_schdule.weeks 星期,course_schdule.lessons 節(jié)次,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 學(xué)生ID='1201'- C#程序應(yīng)用舉例
使用C#登陸到SQL數(shù)據(jù)庫中
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);}}} }五、系統(tǒng)數(shù)據(jù)庫維護(hù)與管理
1.系統(tǒng)數(shù)據(jù)庫備份和還原方案
(1)備份方式
針對不同數(shù)據(jù)庫系統(tǒng)的實(shí)際情況,SQL server 2005提出了四種備份方式。
- 全庫備份:備份整個(gè)數(shù)據(jù)庫的副本
- 日志備份:可以在意外發(fā)生時(shí)將所有以及提交的事物全部恢復(fù)。
- 差異備份:備份自上次全庫備份以來被修改的數(shù)據(jù)頁。
- 文件和文件組備份:單獨(dú)備份組成數(shù)據(jù)庫的文件或文件組。
(2)備份和還原方案
- 備份方案
根據(jù)教材管理系統(tǒng)運(yùn)行的實(shí)際情況有規(guī)律地進(jìn)行完全備份,每晚進(jìn)行或者每星期進(jìn)行一次;其次以較小的時(shí)間間隔進(jìn)行差異備份,每隔幾小時(shí)就進(jìn)行一次;最后,在相鄰的兩次差異備份之間進(jìn)行事務(wù)日志備份,如每隔5min進(jìn)行一次。
- 還原方案
首先利用最近一次全庫備份進(jìn)行全庫備份的恢復(fù);其次進(jìn)行最佳一次差異備份的恢復(fù);最后再按時(shí)間先后順序進(jìn)行事務(wù)日志備份的恢復(fù)。
2.系統(tǒng)數(shù)據(jù)庫安全性管理
(1)SQL server的安全體系結(jié)構(gòu)可劃分為4個(gè)等級:
- 客戶機(jī)操作系統(tǒng)的安全性
- SQL server的登錄的安全性
- 數(shù)據(jù)庫的安全性
- 數(shù)據(jù)庫對象的安全性
(2)客戶機(jī)安全認(rèn)證
用windows操作系統(tǒng)登錄用戶實(shí)現(xiàn)客戶機(jī)的安全性。
(3)服務(wù)器安全認(rèn)證
SQL server安全認(rèn)證模式分為windows身份驗(yàn)證和SQL server身份驗(yàn)證兩種方式。創(chuàng)建登錄賬戶時(shí)也分為兩種模式的賬戶。
(4)數(shù)據(jù)庫安全認(rèn)證
數(shù)據(jù)庫的訪問權(quán)時(shí)通過映射數(shù)據(jù)庫的用戶和登錄賬戶之間的關(guān)系來實(shí)現(xiàn)的。數(shù)據(jù)庫用戶是用來指出哪個(gè)人可以訪問哪個(gè)數(shù)據(jù)庫。當(dāng)?shù)卿涃~戶通過了認(rèn)證后,必須設(shè)置數(shù)據(jù)庫用戶才可以對數(shù)據(jù)庫及其對象進(jìn)行操作。一個(gè)登錄賬戶在不同的數(shù)據(jù)庫中可以映射成不同的數(shù)據(jù)庫用戶,從而可以具有不同的權(quán)限。
(5)數(shù)據(jù)庫對象安全認(rèn)證
數(shù)據(jù)庫對象的安全性是通過數(shù)據(jù)庫用戶的角色和權(quán)限來實(shí)現(xiàn)的。
- 角色
角色分為服務(wù)器角色和數(shù)據(jù)庫角色。服務(wù)器角色是SQL server 2005賦予用戶對服務(wù)器操作的權(quán)限,分為8種。服務(wù)器角色是固定的,不能添加和刪除。數(shù)據(jù)庫角色是SQL server 2005賦予用戶對數(shù)據(jù)庫操作的權(quán)限。在SQL server中有十種固定的數(shù)據(jù)庫角色。除了10種固定數(shù)據(jù)庫角色外,SQL server允許創(chuàng)建新的數(shù)據(jù)庫角色。
- 權(quán)限
權(quán)限分為三種:對象權(quán)限(指用戶對數(shù)據(jù)庫中的表、視圖、存儲(chǔ)過程等對象的操作權(quán)限)、語句權(quán)限(指執(zhí)行數(shù)據(jù)定義語句的權(quán)限)和隱含權(quán)限(指系統(tǒng)預(yù)定義的服務(wù)器角色、數(shù)據(jù)庫擁有者、數(shù)據(jù)庫對象所擁有的權(quán)限)。
總結(jié)
以上是生活随笔為你收集整理的某中学的排课管理系统_某中学的排课管理系统(SQL的简单应用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工具的特性_16 个好用的 Code R
- 下一篇: 容器注册到consul_Spring C