数据库课程设计成绩管理系统文档格式.docx
《数据库课程设计成绩管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《数据库课程设计成绩管理系统文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
安全性要求:
1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如区分普通用户(学生),教职工。
完整性要求:
1.各种信息记录的完整性,信息记录内容不能为空;
2.各种数据间相互的联系的正确性;
3.相同的数据在不同记录中的一致性。
2)学生:
能够查询自己的成绩信息和大家的整体成绩好做出对自己的新的定位,同时还有更改自己的学生信息,还有就是查询新的课程信息。
当学生发现自己信息出现错误时,可以根据自己的实际情况来进行更改,比如某同学发现自己的年龄存储出现了错误就需要相应的机制进行修改、删除等。
同时还可进入成绩查询系统。
在该界面中同学可以查询自己的成绩,还可以查询整个科目的全部成绩。
数据需求
学生成绩管理系统就是对学生成绩信息的管理,所以首先我们需要知道的是学生有那些信息,并且是怎样进行分类的。
学生信息包含:
学生基本信息、课程基本信息、成绩信息。
学生基本信息根据要求应该包括学生对应的学号,姓名,性别,系别,学生年龄等;
课程基本信息应该包课程号,课程名,课时,学分等;
成绩表包含课程号,学号,成绩等。
与学生唯一一一对应的是学号,所以学号是唯一的主键,其他的都不能是,根据学号我们可以查找学生的基本信息,还有学生姓名等有关信息;
根据课程号可以知道学生对应的成绩等。
与课程一一对应的是课程号,所以课程号是唯一主码,其他的都不是,根据课程号我们可以查询课程的基本信息,如课程名、对应的课时和对应的学分等。
与成绩对应的有两个主码,一个是课程号还有一个是学好。
只有这两个同时确定了之后才能确定一个准确的成绩。
在用户表中可以根据用户需要进行密码的修改等一系列操作。
综合分析对信息管理系统分四个表:
用户表(用户名,用户密码,用户等级)
学生表(学号,姓名,性别,系别,学生年龄)
课程表(课程号,课程名,课时,学分)
成绩表(课程号,学号,成绩)
概要设计
数据流图
1)功能流图
该数据流图主要体现教职工对学生信息、课程信息和学生成绩的管理,然后存储的信息作用于查询系统。
在学生能够操作的只有成绩查询。
2)登录流图
数据字典
名字:
学生信息
描述:
学生成绩管理中存储的所有学生信息(包括所有学生查询的所需信息)
定义:
学生信息=学生学号+学生姓名+学生性别+院系+学生年龄
位置:
存储输出供查询
课程信息
有多个课程必要的信息组成
课程信息=课程号+课程名+课时+学分
位置:
用户表信息
用户情况的信息
用户信息=用户名+用户密码+用户
存储输出供查询
学生成绩信息
输入:
学生姓名
输出:
相应学生的成绩信息
查询信息
用户所提出的查询请求
查询信息=[课程查询信息|学生成绩查询信息]
课程表学生表成绩表
添加信息
学号,学生姓名,学生性别,院系,学生年龄
新输入的学生信息
删除信息
选中要删除的学生信息
删除完成
课程数据字典:
属性名
存储代码
类型
长度
课程存储号
course_id
int
4
课程号
course_no
课程名
course_name
char
10
课时
course_hour
学分
course_credit
状态
active_status
2
学生数据字典:
学生存储号
student_id
学号
student_no
8
student_name
6
学生性别
student_sex
院系
student_phone
学生年龄
student_age
成绩数据字典:
成绩存储号
score_id
chat
成绩
score
用户数据字典:
用户名
user_name
varchar
50
用户密码
user_password
用户等级
user_level
用户存储号
user_id
3.系统设计
需求分析和数据流图完成后,即可对该课程设计向小组成员分配任务
梅关求
制定计划
需求分析和定义,并负责用户密码登录、用户密码的修改模块
左盾
详细设计
程序编写,负责课程查询、学生查询模块
李雄
负责具体成绩查询模块
软件测试运行及后期修改
2.1.1概念设计(E-R图)
2.2.2逻辑设计(与具体的DBMS有关的表结构)
该设计以概念结构设计中的E-R图为主要依据,设计出相关的整体逻辑结构。
根据总E-R图了解有四个实体,四个关系模式如下:
1)在课程对话框中实现课程修改
voidCCourseDlg:
:
OnCourseEdit()
{
//得到CList当前所选的行号
introw=m_list.GetSelectionMark();
CStrings,strSQL;
//将当前行的第一列的值赋给s
s=m_list.GetItemText(row,0);
if(s=="
"
)//如果s为空,则表示没有选中行
{
MessageBox("
请选择一行!
);
}
else//如果有选中一行
//定义查询条件,相当于where
strSQL.Format("
course_id=%s"
s);
//打开记录集
m_courseSet.Open();
//设置查询条件
m_courseSet.m_strFilter=strSQL;
//执行查询
m_courseSet.Requery();
//游标指定到该行所在的记录上,执行修改
m_courseSet.Edit();
//设置点击修改按钮后其他按钮的状态
m_bConfirm.EnableWindow(true);
m_bAdd.EnableWindow(false);
m_bEdit.EnableWindow(false);
m_bDel.EnableWindow(false);
m_strName.EnableWindow(true);
m_strNo.EnableWindow(true);
m_strHour.EnableWindow(true);
m_strCredit.EnableWindow(true);
}
2)在课程对话框中实现课程添加
voidCCourseDlg:
OnCourseAdd()
{
//设置输入框为可编辑状态并清空输入框中的值
m_strNo.EnableWindow(true);
m_strNo.SetWindowText("
m_strName.EnableWindow(true);
m_strName.SetWindowText("
m_strHour.EnableWindow(true);
m_strHour.SetWindowText("
m_strCredit.EnableWindow(true);
m_strCredit.SetWindowText("
//打开记录集
m_courseSet.Open();
//添加新记录
m_courseSet.AddNew();
//设置点击确定按钮后,其他按钮的状态
m_bConfirm.EnableWindow(true);
m_bAdd.EnableWindow(false);
m_bEdit.EnableWindow(false);
m_bDel.EnableWindow(false);
3)在课程对话框中实现课程删除
OnCourseDel()
else
//弹出窗口询问是否删除数据
if(MessageBox("
确定要删除记录吗?
"
删除询问
MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
{
//查询所选行所在的记录
strSQL.Format("
m_courseSet.Open();
m_courseSet.m_strFilter=strSQL;
m_courseSet.Requery();
m_courseSet.Edit();
//设置active_status="
N"
;
m_courseSet.m_active_status="
//更新数据库
m_courseSet.Update();
//关闭数据库
m_courseSet.Close();
//更新CList数据
RefreshList();
}
4)登录的确认
voidCLoginDlg:
OnOK()
CStringusername,password;
//定义两个字符串变量
m_strUserName.GetWindowText(username);
//将文本框中的值赋给username
m_strPassword.GetWindowText(password);
//将文本框中的值赋给帕password
if(!
m_database.IsOpen()){//如果数据没有打开,则打开数据库
if(m_database.Open(_T("
student"
)))//如果正确打开数据库
m_recordSet.m_pDatabase=&
m_database;
//将m_database对象赋给m_pDatabase
CStringstrSQL;
select*fromUSER_PSWDwhereuser_name='
%s'
anduser_password='
andactive_status='
Y'
username,password);
m_recordSet.Open(CRecordset:
forwardOnly,strSQL);
//打开记录集
if(m_recordSet.GetRecordCount()==0)//如果找不到记录
{
MessageBox("
密码错误,请重新输入"
密码错误"
MB_OK|MB_ICONWARNING);
//提示密码错误
m_strPassword.SetWindowText("
//清空密码文本框
m_strPassword.SetFocus();
//设置用户名文本框为当前的焦点
}
else//如果找到记录
{
m_recordSet.GetFieldValue("
user_level"
m_userLevel);
//则将数据库中的权限值赋给m_userLevel
CDialog:
OnOK();
//进入到主窗口
m_recordSet.Close();
//关闭记录集
m_database.Close();
//关闭数据库
else//如果没有正确打开数据库
MessageBox("
不能打开数据库"
5)修改密码的确认
voidCPasswordDlg:
//定义4个CEdit变量
CEdit*pUsername=(CEdit*)this->
GetDlgItem(IDC_EDIT_USERNAME);
CEdit*pPassword=(CEdit*)this->
GetDlgItem(IDC_EDIT_PASSWORD);
CEdit*pNew=(CEdit*)this->
GetDlgItem(IDC_EDIT_NEW);
CEdit*pConfirm=(CEdit*)this->
GetDlgItem(IDC_EDIT_CONFIRM);
//分别将文本框的值赋给4个字符串
CStringusername,password,newPassword,confirmPassword;
pUsername->
GetWindowText(username);
pPassword->
GetWindowText(password);
pNew->
GetWindowText(newPassword);
pConfirm->
GetWindowText(confirmPassword);
//定义数据库对象和记录集对象
CDatabasem_database;
CUserSetm_recordSet;
//判断新密码是是为空
if(newPassword.IsEmpty()||confirmPassword.IsEmpty())
MessageBox("
密码不为空"
if(newPassword!
=confirmPassword)//判断两次输入的新密码是否相同
两次输入密码不一致,请重新输入新密码"
pNew->
SetWindowText("
//清空新密码文本框
pConfirm->
//清空确认密码文本框
SetFocus();
//设置新密码文本框为焦点
else
if(!
{m_database.Open(_T("
));
//如果正确打开数据库
//m_recordSet.Edit();
m_recordSet.m_pDatabase=&
CStringstrSQL;
strSQL.Format("
m_recordSet.Open(CRecordset:
if(m_recordSet.GetRecordCount()==0)//如果找不到记录
{
MessageBox("
pPassword->
pNew->
pConfirm->
}
else//如果找到记录
{
//更新密码的sql语句
strSQL.Format("
updateUSER_PSWDsetuser_password='
whereuser_name='
newPassword,username);
m_database.ExecuteSQL(strSQL);
//执行sql
修改密码成功!
CDialog:
m_recordSet.Close();
m_database.Close();
}
程序演示
1打开程序
2输入用户名密码登陆
3进入系统
4功能演示
修改密码
学生管理
课程管理
成绩管理
成绩查询
1)在对用户权限的设计
该程序在对用户权限的设计比较混乱,不能够清晰的分出教职工和学生的使用权限,这会使程序的可用性和安全性出现很大的问题。
在这个方面,我们还有很多工作需要做,比如对登录用户在数据库的设计过程中要增加权限的设计,使的在登录后能够根据权限来进行相应的操作,不会是用户越级等。
2)在对成绩进行修改的设计
该程序在对程序进行修改的设计还不够完善,在对一组选定的成绩进行修改时会弹出一个有错误的对话框,不过在之后的操作没有任何问题。
还有就是在选定修改科目后仍然可以修改科目,这一点的设计还不是很合理。
在之后的设计中还需要改进。
3)在成绩查询浏览过程中的设计
改程序在对学生成绩查询的设计部分也存在不足,虽然是按照学生姓名以及课程名进行查询,但是在没有一个通表的情况下这种操作是很危险的。
他不能让用户直观的看到可以查询学生的姓名还有就是通有的课程名,这使该部分的设计存在很大问题,不能很好的完成查询功能。
4.2设计心得
课程设计是我们数据库专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
说实话,课程设计真的有点累.然而,当我看到自己与团队一手设计出来的成果,慢慢回味这几周的心路历程,一种少有的成功喜悦使倦意顿消.虽然这可以说是我刚学会走完的第一步,也是人生的一点小小的胜利,然而它令我感到自己成熟的许多,通过课程设计,使我深深体会到,干任何事都必须耐心,细致.
短短几周的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的不足,几年来的学习了那么多的课程,今天才知道自己并不会用.想到这里,真的心急了,在最后一年的时间里一定要好好学习,为今后工作打好基础!
感谢贾老师的精心教导!
[1]卢湘江,李向荣,晏子.MySQL高级配置和管理.北京:
清华大学出版社,2001.9
[2]萨师煊,王珊.数据库系统概论.北京:
高等教育出版社,2002
[3]张海藩.软件工程.北京:
人民邮电出版社,2006
[4]孙明丽王斌,sqlserver2005数据库系统开发.北京,人民邮电出版社.2007.7
[5]苗雪兰.数据库系统原理及应用教程[M].北京,机械工业出版社.2007.8