数据库课程设计报告.docx
《数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告.docx(19页珍藏版)》请在冰点文库上搜索。
数据库课程设计报告
目录
一、需求分析2
二、概念设计2
三、逻辑设计3
四、数据库设计4
五、程序设计7
六、注意事项18
七、结束语18
学生成绩管理系统
1、需求分析
学生成绩管理系统是用来管理每个学生的各科成绩。
每个学生每学期所学习的课程不同,当他学完一门课后,老师就要根据标准给他打分。
学生成绩管理系统能有效地输入输出每个学生各个课程的相关成绩,能灵活地查询,添加,修改,删除记录,是管理学生成绩的良好软件。
2、概念设计
学生基本信息:
学号,学生姓名,性别,出生日期,专业
课程信息:
课程号,所属专业,课程名,类型,开课学期,课时数,学分
学生课程成绩信息:
学号,课程号,成绩,学分
管理员信息:
管理员账号,管理员姓名,密码
学生成绩管理E-R图如下:
3、逻辑设计
将上述E_R图转换成二维表(设计字段,确定字段的取值范围,字段名字,主键,字段的长度,确定自定义完整性,确定参照完整性)。
学生基本信息表
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
studentno
文本
255
学号
2
studentname
文本
255
姓名
3
sex
文本
255
性别
4
birthday
文本
255
出身日期
5
special
文本
255
专业
课程信息表
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
courseno
文本
255
课程号
2
special
文本
255
所属专业
3
coursename
文本
255
课程名
4
coursetype
文本
255
课程类型
5
openterm
数字
整型
开课学期
6
hours
数字
整型
课时数
7
credit
数字
单精度
1
学分
学生课程成绩表
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
studentno
文本
255
学号
2
course
文本
255
课程号
3
score
数字
单精度
1
成绩
4
credit
数字
单精度
1
学分
管理员信息表
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
administrator
文本
255
管理员账号
2
administername
文本
255
管理员姓名
3
password
文本
255
密码
4、数据库设计
我首先用SQLserver2000软件创建了一个学生成绩管理系统的数据库,在该数据库中创建了四个表,分别名为学生基本信息表,课程信息表,学生课程成绩表,管理员信息表。
设计各
个数据表的字段属性,然后向各个数据表写入一些记录。
一些数据表的视图如下:
、
5、VisualC++程序设计
我使用VisualC++平台设计学生成绩管理系统的主框架,用ODBC连接数据源。
下面简单介绍一下MFC的ODBC编程过程:
用MFCAppWizard使用ODBC数据库的一般过程是:
1.用SQL或其他数据库工具构造一个数据库;2.在Windows中为刚才构造的数据库定义一个ODBC数据源;3.在创建数据库处理的文档应用程序向导中选择数据源;4设计界面,并使控件与数据表字段关联。
学生成绩管理系统能有效地管理每个学生的各科成绩,还可以管理学生的基本信息以及课程信息。
该系统能简便地实行相关记录的查询,添加,修改,删除操作。
接下来,我详细介绍一下学生成绩表中记录的查询,添加,修改,删除功能,以及实现这些功能的相关代码。
学生基本信息表,课程信息表的功能和功能实现代码与此表类似。
(1).设计系统登入模块
在登入系统的界面中,只有当输入的用户名和密码都正确时,才能进入系统。
否则,就认为你是非法用户,不能进入系统。
登入系统模块的界面和相关代码如下:
设计对话框及其对话框类,设计相关控件及其控件变量,并使控件变量与数据表中的字段关联。
voidCStudentCourseScoreDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData();
m_UserName.TrimLeft();//清空空格
m_Password.TrimLeft();
if(m_UserName.IsEmpty())
MessageBox("用户名不能为空!
");
else
if(m_Password.IsEmpty())
MessageBox("密码不能为空!
");
else{
if(m_userrset.IsOpen())
m_userrset.Close();//如果记录集打开,则先关闭
m_userrset.m_strFilter.Format("administrator='%s'",m_UserName);
//administrator是user表的字段名,用来指定查询条件
m_userrset.m_strFilter.Format("password='%s'",m_Password);
//password是score表的字段名,用来指定查询条件
m_userrset.Open();//打开记录集
if(!
m_userrset.IsEOF())//如果打开记录集有记录
{/*进入下一个窗口*/
CS_C_Sdlg1;
dlg1.DoModal();
CDialog:
:
OnOK();
}
else
{
MessageBox("用户名或密码不对!
");
}
}
}
登入成功后,进入的窗口如下:
(2).查询模块
单击学生成绩表按钮,进入学生成绩表的界面,结果如下:
当我们需要查询某个学生的某门课程的成绩时,在编辑框中输入要查询的学生学号,要查询的课程号,就会在名为学生成绩的静态文本框中的控件中显示记录。
查询模块的相关代码如下:
设计相关控件及其控件变量,并使控件变量与数据表中的字段关联。
voidCScore:
:
OnBUTTONScoQuery()
{
UpdateData();
m_ScoQuery.TrimLeft();
m_ScoCouQuery.TrimLeft();
if(m_ScoQuery.IsEmpty())
{
MessageBox("要查询的学号不能为空!
");
return;
}
else
if(m_ScoCouQuery.IsEmpty())
{
MessageBox("要查询的学号不能为空!
");
return;
}
else{
if(m_scorerset.IsOpen())
m_scorerset.Close();//如果记录集打开,则先关闭
m_scorerset.m_strFilter.Format("studentno='%s'",m_ScoQuery);
//studentno是score表的字段名,用来指定查询条件
m_scorerset.m_strSort="course";
//course是score表的字段名,用来按course字段从小到大排序
m_scorerset.m_strFilter.Format("course='%s'",m_ScoCouQuery);
//course是score表的字段名,用来指定查询条件
m_scorerset.Open();//打开记录集
if(!
m_scorerset.IsEOF())//如果打开记录集有记录
//自动更新表单中控件显示的内容
{m_ScoStuNumber=m_scorerset.m_studentno;//将数据表中的记录值赋给控件变量,在控件中显示出来
m_ScoCouNumber=m_scorerset.m_course;
m_Score=m_scorerset.m_score;
m_ScoCredit=m_scorerset.m_credit;
UpdateData(0);
}
else
MessageBox("没有查到你要找的成绩记录!
");
}
}
查询成功后的界面如下:
(3).添加模块
当我们需要向数据表添加某个记录时,单击添加按钮,就会弹出一个对话框,在该对话框中输入记录的相关信息,点击确定,就添加成功,点击取消,就不添加该记录。
添加模块的界面和相关代码如下:
设计对话框及其对话框类,设计相关控件及其控件变量,并使控件变量与数据表中的字段关联。
voidCScore:
:
OnBUTTONScoAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CScoreEditdlg;
if(dlg.DoModal()==IDOK){
if(!
m_scorerset.IsOpen())
m_scorerset.Open();
m_scorerset.AddNew();
m_scorerset.m_studentno=dlg.m_editScoStuNumber;
m_scorerset.m_course=dlg.m_editScoCouNumber;
m_scorerset.m_score=dlg.m_editScore;
m_scorerset.m_credit=dlg.m_editScocredit;
m_scorerset.Update();
m_scorerset.Requery();
}
}
添加某个记录成功后,数据表中就会出现该记录。
(4).修改模块
当我们需要修改数据表中的某个记录时,单击修改按钮,就会弹出一个对话框,在该对话框中对该记录进行修改,单击确定,就修改成功,否则,就没做修改。
修改模块的界面和相关代码如下:
设计对话框及其对话框类,设计相关控件及其控件变量,并使控件变量与数据表中的字段关联。
voidCScore:
:
OnBUTTONScoEdit()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CScoreEditdlg;
dlg.m_editScoStuNumber=m_scorerset.m_studentno;
dlg.m_editScoCouNumber=m_scorerset.m_course;
dlg.m_editScore=m_scorerset.m_score;
dlg.m_editScocredit=m_scorerset.m_credit;
if(dlg.DoModal()==IDOK){
if(!
m_scorerset.IsOpen())
m_scorerset.Open();
m_scorerset.Edit();//编辑数据表中的记录
m_scorerset.m_studentno=dlg.m_editScoStuNumber;
m_scorerset.m_course=dlg.m_editScoCouNumber;
m_scorerset.m_score=dlg.m_editScore;
m_scorerset.m_credit=dlg.m_editScocredit;
m_scorerset.Update();
UpdateData(FALSE);
}
}
修改某个记录成功后,数据表中的该记录就被修改了。
(5).删除模块
当我们需要删除某个记录时,先查询该记录,再点击删除按钮,就删除了此记录。
由于记录一旦被删除,就消失了,所以删除记录时要格外小心。
删除模块的界面和相关代码如下:
设计相关控件及其控件变量,并使控件变量与数据表中的字段关联。
voidCScore:
:
OnBUTTONScoDel()
{CRecordsetStatusstatus;
m_scorerset.GetStatus(status);
m_scorerset.Delete();
if(status.m_lCurrentRecord==0)
m_scorerset.MoveNext();
else
m_scorerset.MoveFirst();
UpdateData(FALSE);
}
删除某个记录成功后,数据表中的该记录就消失了。
6、注意事项
我对名为学生基本信息表,课程信息表,学生成绩表的三个对话框使用了初始化,所以,一进入这三个对话框就会显示初始化的记录。
需要注意的是:
我们在进行修改,删除记录时,一定要先进行查询操作,找到需要的记录后,再进行修改,删除操作。
否则,系统会报错。
七、结束语
在本次数据库的课程设计中,我制作出了学生成绩管理系统。
我在学生成绩管理系统的制作过程中,学到了很多数据库编程和VisualC++的知识,提高了动手编程的能力。
在此期间,我遇到了很多困难,但通过请教老师和同学把困难解决了。
我意识到我在数据库编程方面还有不少缺陷,因此,我要再接再厉,努力学习编程的相关知识,进一步提高自己的能力。
在这里,我要感谢那些帮助过我的老师和同学。
参考文献
1、数据库系统概论(第四版)王珊萨师煊高等教育出版社2006-5
2.数据库基础与应用王珊李盛恩人民邮电出版社2002-8-1