教学管理系统.docx
《教学管理系统.docx》由会员分享,可在线阅读,更多相关《教学管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
![教学管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/28/ae36f719-2533-41cf-895c-fb82b648473d/ae36f719-2533-41cf-895c-fb82b648473d1.gif)
教学管理系统
教学管理系统
系统设计
设计目标
减轻教学日常信息管理的负担,方便学生、教师查询信息和学校对所有信息的管理。
以简单便捷的操作获取详尽的信息。
设计思路
在日常的教学管理活动中主要涉及:
1、教职工和学生的信息管理
2、学生的成绩管理、查询、统计
3、教师查询自己教授学生的信息和成绩的录入修改
4、各门课程的安排和信息查询
对日常教学管理活动的分析后,对各种信息统一规范整理,实现各种信息的自动管理。
为便于信息的查询,找出各种信息的关联性,根据各种需求设计出合理的报表。
在管理上详细区分学生、教师、管理员三者各自拥有的权限,和他们不同的需求,仔细考虑他们的不同点,合理整理信息,确保各自的需求得到最大化满足
功能模块
主要分为四大模块:
1、用户账户的区分和管理
2、学生系统
3、教师系统
4、管理员系统
其详细功能如图:
数据库设计
数据库需求分析
1)信息需求:
(1)学生信息:
学号、姓名、性别、出生日期、入学成绩、所在系号。
(2)教职工信息:
职工号、姓名、性别、出身年月、所在系号、职称、专业及教学方向。
(3)系的基本信息:
系号、系名称、系的简介。
(4)课程信息:
课程号、课程名称、任课教师号、学时、学分、上课时间、上课地点、考试时间。
(5)成绩信息:
学号、课程号、平时成绩、考试成绩、总评成绩。
2)处理需求:
(1)学生基本信息管理
新生信息录入。
学生信息修改:
按学号查询出某学生的信息并做信息修改。
**学生转学(转入和转出),学生毕业等。
毕业和转学的学生有关信息存储到历史库中。
(2)系基本信息管理:
系的基本信息输入、修改、删除
(3)课程信息管理:
课程信息的输入、修改、删除
(4)教职工信息管理:
教职工信息的输入、修改、删除
(5)选课管理:
每学期所选课程的学分不能超过15分。
(创建触发器)
学生可以同时选修一门或多门课程。
可以同时为多个学生选修某一门或某几门课程。
删除和修改选课信息。
(6)成绩管理(视图)
按课程输入和修改成绩。
(查询选该门课程的学生)
按学生输入和修改成绩。
(查询该学生所选的课程)
(7)信息查询
按学号、姓名、系号查询学生基本信息。
按职工号、姓名、系号查询教职工基本信息。
按系号、系名称查询系的基本信息。
按课程号、课程名称、上课教师姓名查询课程基本信息。
按学号、学生姓名、课程号、课程名称、上课教师姓名、系号查询学生成绩,内容包括课程基本情况。
若查询涉及多门课程,则按课程分组。
每门课程按总评成绩从高分到低分给出选修该门课程的所有学生的成绩(平时成绩、考试成绩和总评成绩)。
(8)统计报表
成绩登记表,内容包括课程基本信息(课程号、课程名称、任课教师号、学时、学分、上课时间、上课地点、考试时间)、选课学生名单(学号、姓名、性别),每个学生的平时成绩(空格)、考试成绩(空格)和总评成绩(空格),按学号排序:
顺序输出所有课程的成绩登记表。
按课程号、课程名称、教师姓名输出对应课程的成绩登记表。
**按系号输出对应课程的成绩登记表(本系所有教师担任的课程)。
成绩报表,内容包括课程基本信息(课程号、课程名称、任课教师号、学时、学分、上课时间、上课地点、考试时间),选课学生名单(学号、姓名、性别),每个学生的平时成绩、考试成绩和总评成绩,>=90分、>=80分、、>=70分、>=60分及不及格学生的人数及比例,按学号排序:
顺序输出所有课程的成绩报表。
(报表格式自己订制,可以参考学校的系统的输出格式)
按课程号、课程名称、教师姓名输出对应课程的成绩报表。
**按系号输出对应课程的成绩报表(本系所有教师担任的课程)
概念结构设计
表的设计
课程(课程号,课程名,职工号,学时,学分,上课时间,上课地点,考试时间)
主码:
课程号外码:
职工号
Course(Cno,Cname,Tno,Cperiod,Ccredit,Cbeigan,Caddress,Cexamtime)
系(系号,系名,系简介)
主码:
系号
Dept(Dno,Dname,Dintro)
学生(学号,姓名,性别,出生日期,入学成绩,系号)
主码:
学号外码:
系号
Student(Sno,Sname,Ssex,Sbirth,Senrolgrade,Dno)
教职工(职工号,姓名,性别,出生日期,职称,专业级教学方向,系号)
主码:
职工号外码:
系号
Teacher(Tno,Tname,Tsex,Tbirth,Tjodtitle,Tprofession,Dno)
选课(学号,课程号,平时成绩,考试成绩,总成绩)
主码:
学号,课程号外码:
学号,课程号.
SC(Sno,Cno,Gordinary,Gexam,Gsum)
表的关系图
数据库结构:
课程表:
CREATETABLECourse(
Cnovarchar(12)NOTNULLPRIMARYKEY
CHECK(CnoLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
Cnamevarchar(10)NULL,
CperiodsmallintNULL,
CcreditsmallintNULL,
Cbeiganvarchar(10)NULL
CHECK(CbeiganLIKE'[0-9][0-9][-][0-9][0-9][0-9][0-9][-][0-9][0-9]'),
Caddressvarchar(20)NULL,
Cexamtimevarchar
(2)NULL,
Tnovarchar(12)NULLREFERENCESTeacher(Tno)
ONUPDATECASCADEONDELETECASCADE,
)
系表:
CREATETABLEDept(
Dnovarchar(12)NOTNULLPRIMARYKEY
CHECK(DnoLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
Dnamevarchar(20)NULL,
DintrontextNULL,
)
学生表:
CREATETABLEStudent(
Snovarchar(12)NOTNULLPRIMARYKEY
CHECK(SnoLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
Snamevarchar(10)NULL,
Ssexchar
(2)NULL
CHECK(Ssex='男'ORSsex='女'),
SbirthDATETIMENULL,
SenrolgradesmallintNULL,
CHECK(Senrolgrade>=0),
Dnovarchar(12)NULLREFERENCESDept(Dno)
ONUPDATECASCADEONDELETECASCADE,
)
职工表:
CREATETABLETeacher(
Tnovarchar(12)NOTNULLPRIMARYKEY
CHECK(TnoLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
Tnamevarchar(10)NULL,
Tsexchar
(2)NULL
CHECK(Tsex='男'ORTsex='女'),
TbirthDATETIMENULL,
Tjobtitlevarchar(20)NULL,
Tprofessionvarchar(20)NULL,
Dnovarchar(12)NULLREFERENCESDept(Dno)
ONUPDATECASCADEONDELETECASCADE,
)
学课和成绩表:
CREATETABLESC(
Snovarchar(12)NOTNULLREFERENCESStudent(Sno),
Cnovarchar(12)NOTNULLREFERENCESCourse(Cno),
GordinarysmallintNULLCHECK(Gordinary>=0ANDGordinary<=100),
GexamsmallintNULLCHECK(Gexam>=0ANDGexam<=100),
GsumAS(Gordinary*+Gexam*,
PRIMARYKEY(Sno,Cno),
)
创建的存储过程:
对Dept、Student、Teacher、Course表的删除
CREATEPROCdeleteByNo
@Novarchar(12),
@typesmallint=1
AS
begintransaction
IF@type=1
BEGIN
DELETEFROMDept
WHEREDno=@No;
END
IF@type=2
BEGIN
DELETEFROMTeacher
WHERETno=@No
END
IF@type=3
BEGIN
DELETEFROMStudent
WHERESno=@No
END
IF@type=4
BEGIN
DELETEFROMCourse
WHERECno=@No
END
COMMIT
添加系信息:
CREATEPROCInsertDept
@Dnovarchar(12),@Dnamevarchar(20),@Dintrontext
AS
BEGINTRANSACTION
INSERTINTODept
VALUES(@Dno,@Dname,@Dintro)
COMMIT
添加学生信息:
CREATEPROCInsertStudent
@Snovarchar(12),@Snamevarchar(10),@Ssexchar
(2),@Sbirthdatetime,
@Senrolgradesmallint=0,@Dnovarchar(12)
AS
BEGINTRANSACTION
INSERTINTOStudent
VALUES(@Sno,@Sname,@Ssex,@Sbirth,@Senrolgrade,@Dno)
COMMIT
添加课程信息:
CREATEPROCInsertCourse
@Cnovarchar(12),@Cnamevarchar(20),@Cperiodsmallint=0,@Ccredit
Smallint=0,@Cbeiganvarchar(10),@Caddressvarchar(20),@Cexamtimevarchar
(2),@Tnovarchar(12)
AS
BEGINTRANSACTION
INSERTINTOCourse
VALUES(@Cno,@Cname,@Cperiod,@Ccredit,@Cbeigan,@Caddress,@Cexamtime,@Tno)
COMMIT
添加职工信息:
CREATEPROCInsertTeacher
@Tnovarchar(12),@Tnamevarchar(10),@Tsexchar
(2),@Tbirthdatetime,
@Tjobtitlevarchar(20),@Tprofessionvarchar(20),@Dnovarchar(12)
AS
BEGINTRANSACTION
INSERTINTOTeacher
VALUES(@Tno,@Tname,@Tsex,@Tbirth,@Tjobtitle,@Tprofession,@Dno)
COMMIT
创建的视图:
CREATEVIEWChooseCourse(Sno,Sname,Cno,Cname,Ccredit)
AS
SELECT,,,,
FROMStudent,Course,SC
WHERE=AND=
CREATEVIEWScore(Sno,Sname,Cno,Cname,Gordinary,Gexam,Gsum)
AS
Select,Sname,,Cname,Gordinary,Gexam,Gsum
FromStudent,Course,SC
Where=AND=
创建的触发器
Createtriggerinsertchoose
onSC
FORinsert
as
declare@iint,@Snovarchar(12)
select@Sno=Sno
Frominserted
select@i=sum(Ccredit)
fromChooseCourse
where=@Sno
if(@i>15)
begin
ROLLBACKTRANSACTION
RAISERROR('你选修的学分大于15学分,请确认后选课',16,1)
END
程序的详细设计
一、数据库操作类ADOCoon
enumType{CSTRING,INT1,};
classADOConn
{
public:
ADOConn();
virtual~ADOConn();
voidOnInitDBConnect();
_RecordsetPtr&GetRecordSet(_bstr_tbstrSQL);
_RecordsetPtr&ExcuteStoreProc(CStringProcNmae,CString*Parameters,CString*Values,Type*type);
BOOLExecuteSQL(_bstr_tbstrSQL);
voidExitConect();
_ConnectionPtrGetConnection();
private:
_ConnectionPtrm_PConnection;
_RecordsetPtrm_PRecordPtr;
};
ADOConn:
:
ADOConn()
{
OnInitDBConnect();
}
ADOConn:
:
~ADOConn()
{
ADOConn:
:
ExitConect();
}
voidADOConn:
:
OnInitDBConnect()
{
:
:
CoInitialize(NULL);
try
{
("");
_bstr_tstrConnect="Provider=SQLOLEDB;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=ljx;DataSource=(local)";
m_PConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_errore)
{
AfxMessageBox());
}
}
_RecordsetPtr&ADOConn:
:
GetRecordSet(_bstr_tbstrSQL)
{
try
{
if(m_PConnection==NULL)
{
OnInitDBConnect();
}
(__uuidof(Recordset));
m_PRecordPtr->Open(bstrSQL,(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_errore)
{
AfxMessageBox());
}
returnm_PRecordPtr;
}
BOOLADOConn:
:
ExecuteSQL(_bstr_tbstrSQL)
{
try
{
if(m_PConnection==NULL)
{
OnInitDBConnect();
}
m_PConnection->Execute(bstrSQL,NULL,adCmdText);
returnTRUE;
}
catch(_com_errore)
{
AfxMessageBox());
returnFALSE;
}
}
voidADOConn:
:
ExitConect()
{
if(m_PRecordPtr!
=NULL)
{
();
}
m_PConnection->Close();
:
:
CoUninitialize();
}
_RecordsetPtr&ADOConn:
:
ExcuteStoreProc(CStringProcNmae,CString*Parameters,CString*Values,Type*type)
{
_CommandPtrpCmd=NULL;
try
{
if(m_PConnection==NULL)
{
OnInitDBConnect();
}
(__uuidof(Command));
(__uuidof(Recordset));
pCmd->ActiveConnection=m_PConnection;
pCmd->CommandType=adCmdStoredProc;
pCmd->CommandText=_bstr_t(ProcNmae);
pCmd->Parameters->Refresh();
while(*Parameters!
="\0")
{
switch(*type)
{
caseCSTRING:
pCmd->Parameters->Item[_variant_t(_bstr_t(*Parameters))]->Value=_variant_t(*Values);
Parameters++;
Values++;
type++;
break;
caseINT1:
{
CStringstr=*Values;
intmm=atoi(str);
pCmd->Parameters->Item[_variant_t(_bstr_t(*Parameters))]->Value=_variant_t((long)mm);
Parameters++;
Values++;
type++;
break;
}
default:
break;
}
}
m_PRecordPtr=pCmd->Execute(NULL,NULL,adCmdStoredProc);
}
catch(_com_errore)
{
AfxMessageBox());
}
();
returnm_PRecordPtr;
}
_ConnectionPtrADOConn:
:
GetConnection()
{
if(m_PConnection==NULL)
{
OnInitDBConnect();
}
returnm_PConnection;
}
二、登陆界面
响应登陆按钮的消息:
voidCMyDlg:
:
OnLogin()
{
ormat("%d",m_Grade);
type[4]=INT1;
str[5]=m_Dno;
type[5]=CSTRING;
}
voidCAddStudent:
:
GetString(CString*str)
{
str[0]=m_Sno;
str[1]=m_Name;
str[2]=Sex;
str[3]=m_Sbirth;
str[4].Format("%d",m_Grade);
str[5]=m_Dno;
}
voidCAddStudent:
:
SetWindowCString(CString*Info)
{
if(Info==NULL)
{
return;
}
GetDlgItem(IDC_SNO)->SetWindowText(Info[0]);
GetDlgItem(IDC_SNAME)->SetWindowText(Info[1]);
if(Info[2]=="男")
{
(1);
((CButton*)GetDlgItem(IDC_SEX2))->SetCheck(0);
Sex="男";
}
else
{
(0);
((CButton*)GetDlgItem(IDC_SEX2))->SetCheck
(1);
Sex="女";
}
GetDlgItem(IDC_SBIRTH)->SetWindowText(Info[3]);
GetDlgItem(IDC_GRADE)->SetWindowText(Info[4]);
GetDlgItem(IDC_DNO)->SetWindowText(Info[5]);
this->Info=NULL;
}
voidCAddStudent:
:
SetCString(CString*info)
{
this->Info=info;
}
主程序添加功能的实现:
voidCAdminStudent:
:
OnAdd()
{
strVal;
str+="\r\n";
str+="性别";
str+=m_Rec->GetCollect(_T("Ssex")).bstrVal;
str+="\r\n";
str+="出生日期:
";
data=m_Rec->GetCollect(_T("Sbirth"));
birth=COleDateTime(data);
(_T("%d-%d-%d"),(),(),());
str+=Sno;
str+="\r\n";
str+="入学成绩:
";
("%d",m_Rec->GetCollect(_T("Senrolgrade")).bstrVal);
str+=Sno;
str+="\r\n";
str+="所在系号:
";
str+=m_Rec->GetCollect(_T("Dno")).bstrVal;
MessageBox(str);
}
}
}
(一)修改功能(UPDA