课程设计实验报告.docx
- 文档编号:17150367
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:23
- 大小:187.48KB
课程设计实验报告.docx
《课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《课程设计实验报告.docx(23页珍藏版)》请在冰点文库上搜索。
课程设计实验报告
一.设计目的
通过这次课程设计,熟练掌握软件开发过程中数据库的使用,理解以数据库为中心的软件开发设计思想,熟练应用数据库的增、删、改、查询等操作。
本次课程设计是基于SQLServer2005,由VC作为前台界面设计软件的系统。
二.系统的功能分析与设计
1.系统功能需求分析
1)用户可以从数据库中获得学生基本信息,课程信息,班级信息,选课信息,教师信息,从而需要建立以上各个信息的模块来实现数据交互。
2)用户要完成查询,添加,修改,删除等基本处理功能。
3)学生能利用该系统进行选课。
管理员可以对所有学生的选课信息进行审核。
4)可以查询学生个人的成绩,同时可以查询班级的总体成绩。
在查询班级的整体成绩时可以按课程进行查询或者班级号进行查询。
在查询过程中可以计算平均成绩和及格率等信息。
5)安全性,协调性和完整性。
当用户添加学号时,要保证学号不能重复,在选课信息中学号和课程号的组合也不能重复,学生基本信息,课程信息和选课信息中学号,课程号必须一致这样才能实现查询功能和各个信息模块的协调。
选课表中学号和课程号必须使用已经存在的号码,所以对数据进行添加,修改,删除,浏览进行监控,进行出错提示及处理。
2.系统功能概要设计:
根据之前的功能需求分析得到本系统的功能模块图如下:
三.系统数据库设计与实现
1.需求分析:
根据以上对该系统的功能分析,得到系统所需的数据如下:
1)学生基本信息,包括:
学号、姓名、性别、年龄等;
2)课程信息,包括:
课程名、课程号、先行课、学分;
3)选课信息,包括:
学号,课程号,成绩。
4)班级信息,包括:
班级号,班级名。
5)教师信息,包括:
教师号,姓名,性别,职称。
通过对系统数据的分析,得到系统业务流图和数据字典:
2).数据字典(DD):
本系统需要使用的数据包括以下关系。
表1:
学生基本信息——Student
字段名称
数据类型
字段大小
作用
必填字段
是否主键
Sno
char
5
学号
是
是
Sname
char
20
姓名
是
否
Ssex
char
10
性别
是
否
Sage
int
10
年龄
是
否
SClno
char
10
所在班
是
否
表2:
课程信息——Course
字段名称
数据类型
字段大小
作用
必填字段
是否主键
Cno
char
10
课程号
是
是
Cname
char
20
课程名
是
否
cpno
char
10
课程名
是
否
CTno
char
10
教师号
是
否
Ccredit
char
10
学分
是
否
表3:
选课信息——SC
字段名称
数据类型
字段大小
作用
必填字段
是否主键
Sno
char
10
学号
是
是
Cno
char
10
课程号
是
是
Grade
int
10
成绩
否
否
表4:
教师信息——Teacher
字段名称
数据类型
字段大小
作用
必填字段
是否主键
Tno
char
10
教工号
是
是
Tname
char
20
教师名
是
否
Tsex
char
2
性别
是
否
Tstatus
vchar
29
职位
否
否
2.概念结构设计
根据之前系统所需数据的需求分析,得到系统数据的E-R图如下:
3.逻辑结构设计:
(1).将上面E-R图转换为关系模型,关系的码为黑体字加下划线。
学生(学号,姓名,性别,年龄,所在班)
此为学生实体对应的关系模式,其中学号是码。
课程(课程号,课程名,先行课名,学分)
此为课程实体对应的关系模式,其中课程号是码。
选修(学号,课程号,成绩)
此为联系“选修”对应的关系模式,其中(学号,课程号)是码。
(2).设计用户子模式
①为学生用户建立视图:
学生1(姓名,性别,年龄,所在系,课程号,课程名,学分,成绩)
定义学生存取权限:
为查询
②为老师用户建立视图:
学生2(学号,姓名,性别,年龄,所在系,课程号,课程名,先行课名,学分,成绩)
定义教师存取权限为:
查询、添加、修改、删除
4.数据库的实现
数据库中库和表的定义(见以下SQL代码)
CREATEDATABASEstu--数据库名为stu
ON
(NAME=stu_data,--数据库的逻辑名为stu_data
FILENAME=’E:
\sql_data\stu_data.mdf‘,--数据库的物理名,请事先在E盘上建立sql_data文件夹。
SIZE=10MB,--数据库的初始大小为10MB
MAXSIZE=50MB,--数据库的最大容量为50MB
FILEGROWTH=10%--数据库容量自动按10%的比例增长
)
LOGON
(NAME=stu_log,--日志文件的逻辑名为stu_log
FILENAME='E:
\sql_data\student_log.ldf',
SIZE=2MB,
MAXSIZE=5MB,
FILEGROWTH=1MB);
CREATETABLESTUDENT
(snochar(5)notnull,
snamechar(8),
ssexchar
(2),
sagesmallint,
sdeptchar(10),
primarykey(sno),
check(ssexin('男','女')),
check(sagebetween15and30));
CREATETABLECOURSE
(cnochar
(2)notnull,
cnamechar(12),
cpnochar
(2),
ccreditdecimal
(1),
primarykey(cno));
CREATETABLESC
(snochar(5)notnull,
cnochar
(2)notnull,
gradedecimal(3),
primarykey(sno,cno),
foreignkey(sno)referencesstudent(sno),
foreignkey(cno)referencescourse(cno),
check(gradebetween0and100));
CREATETABLETEACHER
(Tnochar(5)notnull,
Tnamechar(8),
Tsexchar
(2),
Tstatusvchar(20);
图1:
设计的student表
图2:
设计的Course表
图3:
设计的SC表
图4:
设计的Teacher表
四、系统功能的详细设计与实现
本系统采用VC6.0+SQLServer2005进行开发,运行在Windows7环境下。
前台应用程序采用VC6.0软件编写,后台数据库采用SQLServer2005设计。
各功能模块界面如下:
1.进入选择界面
3.进入各部分查询,插入,删除界面
(1)学生信息
(2)班级信息
(3)教师信息
(4)课程信息
(5)选课信息
4.学生个人成绩查询和班级总体成绩查询
附录:
系统设计源代码
查找代码:
voidCDialogSTU:
:
OnButtonQuery()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_StuID="";
m_StuName="";
m_StuAge=0;
m_StuSex="";
m_ClaID="";
UpdateData(false);
FOUNCTION=SEARCH;
m_btnQuery.SetState(TRUE);
//使其他按键无效
m_btnAdd.EnableWindow(FALSE);
m_btnDelete.EnableWindow(FALSE);
m_btnModify.EnableWindow(FALSE);
m_btnFirst.EnableWindow(FALSE);
m_btnPre.EnableWindow(FALSE);
m_btnNext.EnableWindow(FALSE);
m_btnLast.EnableWindow(FALSE);
m_btnOK.SetFocus();
}
删除代码:
voidCDialogSTU:
:
OnButtonDelete()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_StuID="";
m_StuName="";
m_StuAge=0;
m_StuSex="";
m_ClaID="";
FOUNCTION=DEL;
UpdateData(false);
//使添加控件按下
m_btnDelete.SetState(TRUE);
//使其他控件无效
m_btnQuery.EnableWindow(FALSE);
m_btnAdd.EnableWindow(FALSE);
m_btnModify.EnableWindow(FALSE);
m_btnFirst.EnableWindow(FALSE);
m_btnPre.EnableWindow(FALSE);
m_btnNext.EnableWindow(FALSE);
m_btnLast.EnableWindow(FALSE);
m_btnOK.SetFocus();
}
添加代码:
voidCDialogSTU:
:
OnButtonAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_StuID="";
m_StuName="";
m_StuAge=0;
m_StuSex="";
m_ClaID="";
UpdateData(false);
FOUNCTION=ADD;
//使添加控件按下
m_btnAdd.SetState(TRUE);
//使其他控件无效
m_btnQuery.EnableWindow(FALSE);
m_btnDelete.EnableWindow(FALSE);
m_btnModify.EnableWindow(FALSE);
m_btnFirst.EnableWindow(FALSE);
m_btnPre.EnableWindow(FALSE);
m_btnNext.EnableWindow(FALSE);
m_btnLast.EnableWindow(FALSE);
m_btnOK.SetFocus();
}
修改代码:
voidCDialogSTU:
:
OnButtonModify()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_ctlStuID.SetReadOnly();//只读,不能修改学号
FOUNCTION=MODIFY;
UpdateData(false);
//使添加控件按下
m_btnModify.SetState(TRUE);
//使其他控件无效
m_btnQuery.EnableWindow(FALSE);
m_btnAdd.EnableWindow(FALSE);
m_btnDelete.EnableWindow(FALSE);
m_btnFirst.EnableWindow(FALSE);
m_btnPre.EnableWindow(FALSE);
m_btnNext.EnableWindow(FALSE);
m_btnLast.EnableWindow(FALSE);
m_btnOK.SetFocus();
}
最前代码:
voidCDialogSTU:
:
OnButtonFirst()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset->MoveFirst();
_variant_tvar;
CStringstr;
try
{
var=m_pRecordset->GetCollect("Sno");
str=(LPCSTR)_bstr_t(var);
m_StuID=str;
var=m_pRecordset->GetCollect("Sname");
str=(LPCSTR)_bstr_t(var);
m_StuName=str;
var=m_pRecordset->GetCollect("Sage");
m_StuAge=var.iVal;
var=m_pRecordset->GetCollect("Ssex");
str=(LPCSTR)_bstr_t(var);
m_StuSex=str;
var=m_pRecordset->GetCollect("Sclno");
str=(LPCSTR)_bstr_t(var);
m_ClaID=str;
UpdateData(false);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
向前代码:
voidCDialogSTU:
:
OnButtonPre()//存在一个问题是:
单击某条时,记录是不会同时更新到该记录中的
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset->MovePrevious();
_variant_tvar;
CStringstr;
if(m_pRecordset->adoBOF)
{
MessageBox("已经是第一条记录!
");
m_pRecordset->MoveFirst();
}
try
{
var=m_pRecordset->GetCollect("Sno");
str=(LPCSTR)_bstr_t(var);
m_StuID=str;
var=m_pRecordset->GetCollect("Sname");
str=(LPCSTR)_bstr_t(var);
m_StuName=str;
var=m_pRecordset->GetCollect("Sage");
m_StuAge=var.iVal;
var=m_pRecordset->GetCollect("Ssex");
str=(LPCSTR)_bstr_t(var);
m_StuSex=str;
var=m_pRecordset->GetCollect("Sclno");
str=(LPCSTR)_bstr_t(var);
m_ClaID=str;
UpdateData(false);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
向后代码:
voidCDialogSTU:
:
OnButtonNext()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset->MoveNext();
_variant_tvar;
CStringstr;
if(m_pRecordset->adoEOF)
{
MessageBox("已经是末记录!
");
m_pRecordset->MoveLast();
}
try
{
var=m_pRecordset->GetCollect("Sno");
str=(LPCSTR)_bstr_t(var);
m_StuID=str;
var=m_pRecordset->GetCollect("Sname");
str=(LPCSTR)_bstr_t(var);
m_StuName=str;
var=m_pRecordset->GetCollect("Sage");
m_StuAge=var.iVal;
var=m_pRecordset->GetCollect("Ssex");
str=(LPCSTR)_bstr_t(var);
m_StuSex=str;
var=m_pRecordset->GetCollect("Sclno");
str=(LPCSTR)_bstr_t(var);
m_ClaID=str;
UpdateData(false);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
最后代码:
voidCDialogSTU:
:
OnButtonLast()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset->MoveLast();
_variant_tvar;
CStringstr;
try
{
var=m_pRecordset->GetCollect("Sno");
str=(LPCSTR)_bstr_t(var);
m_StuID=str;
var=m_pRecordset->GetCollect("Sname");
str=(LPCSTR)_bstr_t(var);
m_StuName=str;
var=m_pRecordset->GetCollect("Sage");
m_StuAge=var.iVal;
var=m_pRecordset->GetCollect("Ssex");
str=(LPCSTR)_bstr_t(var);
m_StuSex=str;
var=m_pRecordset->GetCollect("Sclno");
str=(LPCSTR)_bstr_t(var);
m_ClaID=str;
UpdateData(false);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 实验 报告