学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
目录
第一章引言2
第二章系统功能和结构3
2.1需求分析3
2.2数据需求4
2.3概要设计5
2.4系统设计9
第三章程序实现10
3.1 模块详细设计10
3.1.1概念设计(E-R图)10
3.1.2逻辑设计(与具体的DBMS有关的表结构)10
3.2核心代码详细解析11
第四章调试与操作说明18
4.1程序演示18
4.1.1打开程序18
4.1.2输入用户名密码登陆18
4.1.3进入系统19
4.1.4功能演示19
4.2修改密码20
4.3学生管理21
4.3.1课程管理21
第五章设计体会与总结22
4.1 程序不足及功能扩充22
4.2设计心得22
结束语23
参考文献..........................................................................................................24
第一章引言
目前,学校的学生数目已经非常之大,在处理学生成绩,打印学生成绩这方面是每个学校很有必要做的一件事。
但对于不同的学生的成绩处理,要区分很多学生信息,因此设计此学生成绩管理系统。
学生成绩管理系统是应对学生人数增多、信息量增大的问题,实现管理的现代化、网络化,逐步摆脱当前学生成绩管理的人工管理方式,提高成绩管理效率而开发的。
该开发程序能够解决学生信息存储、学生成绩查询、录入还有课程查询等一系列功能,并提供了对各功能模块的查询和更新功能,且这两种功能基本上是通过存储过程来实现的。
第二章系统功能和结构
2.1需求分析
2.1.1教职工:
a.信息要求:
对学生的了解(包括学生的院系,专业,班级,学号等),对学生成绩会有一个成体的了解,在今后的课程教学中可以对自己进行改进。
同时还可以对教授的课程进行修改和重设。
还可以进一步了解学生的信息,加深对学生的了解,便于因材施教。
b.处理要求:
当学生基本信息发生变化时,老师能对其进行修改。
比如某些同学中有转校、后转来该系或转到其他系中,老师要能根据事实情况进行更新。
需要有的操作是修改、删除、增加。
能够管理课程信息。
如老师进行排课的时候能够有序的安排,不会出现错排或重复等一系列状况。
能够进行课程名、课时、学分的修改、删除和增添。
对成绩的管理,能够进行成绩的录入、修改、删除,能够清晰的了解学生的成绩和大体情况,以便做出相应的总结和改进。
c.安全性与完整性要求:
安全性要求:
1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如区分普通用户(学生),教职工。
完整性要求:
1.各种信息记录的完整性,信息记录内容不能为空;
2.各种数据间相互的联系的正确性;
3.相同的数据在不同记录中的一致性。
2.1.2学生:
a.信息要求:
要求学生能够查询自己的成绩信息,同时还有更改自己的学生信息,还有就是查询新的课程信息。
b.处理要求:
当学生发现自己信息出现错误时,可以根据自己的实际情况来进行更改,比如某同学发现自己的年龄存储出现了错误就需要相应的机制进行修改、删除等。
同时还可进入成绩查询系统。
在该界面中同学可以查询自己的成绩,还可以查询整个科目的全部成绩。
2.2数据需求
学生成绩管理系统就是对学生成绩信息的管理,所以首先我们需要知道的是学生有那些信息,并且是怎样进行分类的。
学生信息包含:
学生基本信息、课程基本信息、成绩信息。
学生基本信息根据要求应该包括学生对应的学号,姓名,性别,系别,学生年龄等;课程基本信息应该包课程号,课程名,课时,学分等;成绩表包含课程号,学号,成绩等。
与学生唯一一一对应的是学号,所以学号是唯一的主键,其他的都不能是,根据学号我们可以查找学生的基本信息,还有学生姓名等有关信息;根据课程号可以知道学生对应的成绩等。
与课程一一对应的是课程号,所以课程号是唯一主码,其他的都不是,根据课程号我们可以查询课程的基本信息,如课程名、对应的课时和对应的学分等。
与成绩对应的有两个主码,一个是课程号还有一个是学号。
只有这两个同时确定了之后才能确定一个准确的成绩。
在用户表中可以根据用户需要进行密码的修改等一系列操作。
综合分析对信息管理系统分四个表:
用户表(用户名,用户密码,用户等级)
学生表(学号,姓名,性别,系别,学生年龄)
课程表(课程号,课程名,课时,学分)
成绩表(课程号,学号,成绩)
2.3 概要设计
1.3.1算法分析及程序流程图
a.数据流图
图2.1功能流图
该数据流图主要体现教职工对学生信息、课程信息和学生成绩的管理,然后存储的信息作用于查询系统。
在学生能够操作的只有成绩查询。
b.登录流图
图2.2系统流程图
c.数据字典
名字:
学生信息
描述:
学生成绩管理中存储的所有学生信息(包括所有学生查询的所需信息)
定义:
学生信息=学生学号+学生姓名+学生性别+院系+学生年龄
位置:
存储输出供查询
名字:
课程信息
描述:
有多个课程必要的信息组成
定义:
课程信息=课程号+课程名+课时+学分
位置:
存储输出供查询
名字:
用户表信息
描述:
用户情况的信息
定义:
用户信息=用户名+用户密码+用户
位置:
存储输出供查询
名字:
学生成绩信息
输入:
学生姓名
输出:
相应学生的成绩信息
名字:
查询信息
描述:
用户所提出的查询请求
定义:
查询信息=[课程查询信息|学生成绩查询信息]
位置:
课程表学生表成绩表
名字:
添加信息
输入:
学号,学生姓名,学生性别,院系,学生年龄
输出:
新输入的学生信息
名字:
删除信息
输入:
选中要删除的学生信息
输出:
删除完成
课程数据字典:
表2.1课程表数据字典
属性名
存储代码
类型
长度
课程存储号
course_id
int
4
课程号
course_no
int
4
课程名
course_name
char
10
课时
course_hour
int
4
学分
course_credit
int
4
状态
active_status
char
2
学生数据字典:
表2.2学生表数据字典
属性名
存储代码
类型
长度
学生存储号
student_id
int
4
学号
student_no
char
8
学生姓名
student_name
char
6
学生性别
student_sex
char
2
院系
student_phone
char
6
状态
active_status
char
2
学生年龄
student_age
char
10
成绩数据字典:
表2.3成绩表数据字典
属性名
存储代码
类型
长度
成绩存储号
score_id
int
4
学号
student_no
chat
8
课程号
course_no
int
4
成绩
score
int
4
状态
active_status
char
2
用户数据字典:
表2.4成绩表数据字典
属性名
存储代码
类型
长度
用户名
user_name
varchar
50
用户密码
user_password
varchar
50
用户等级
user_level
char
10
状态
active_status
char
10
用户存储号
user_id
int
4
2.4系统设计
图2.3系统模块划分图
第三章程序实现
3.1 模块详细设计
3.1.1概念设计(E-R图)
图3.1系统设计E-R图
3.1.2逻辑设计(与具体的DBMS有关的表结构)
该设计以概念结构设计中的E-R图为主要依据,设计出相关的整体逻辑结构。
根据总E-R图了解有四个实体,四个关系模式如下:
用户表(用户名,用户密码,用户等级)
学生表(学号,姓名,性别,系别,学生年龄)
课程表(课程号,课程名,课时,学分)
成绩表(课程号,学号,成绩)
3.2核心代码详细解析
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)在课程对话框中实现课程删除
voidCCourseDlg:
:
OnCourseDel()
{
//得到CList当前所选的行号
introw=m_list.GetSelectionMark();
CStrings,strSQL;
//将当前行的第一列的值赋给s
s=m_list.GetItemText(row,0);
if(s=="")//如果s为空,则表示没有选中行
{
MessageBox("请选择一行!
");
}
else
{
//弹出窗口询问是否删除数据
if(MessageBox("确定要删除记录吗?
","删除询问
",MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
{
//查询所选行所在的记录
strSQL.Format("course_id=%s",s);
m_courseSet.Open();
m_courseSet.m_strFilter=strSQL;
m_courseSet.Requery();
m_courseSet.Edit();
//设置active_status="N";
m_courseSet.m_active_status="N";
//更新数据库
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;
strSQL.Format("select*fromUSER_PSWDwhereuser_name='%s'anduser_password='%s'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:
:
OnOK()
{
//定义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("密码不为空");
}
else
{
if(newPassword!
=confirmPassword)//判断两次输入的新密码是否相同
{
MessageBox("两次输入密码不一致,请重新输入新密码");
pNew->SetWindowText("");//清空新密码文本框
pConfirm->SetWindowText("");//清空确认密码文本框
pNew->SetFocus();//设置新密码文本框为焦点
}
else
{
if(!
m_database.IsOpen()){//如果数据没有打开,则打开数据库
{m_database.Open(_T("student"));//如果正确打开数据库
//m_recordSet.Edit();
m_recordSet.m_pDatabase=&m_database;//将m_database对象赋给m_pDatabase
CStringstrSQL;
strSQL.Format("select*fromUSER_PSWDwhereuser_name='%s'anduser_password='%s'andactive_status='Y'",username,password);
m_recordSet.Open(CRecordset:
:
forwardOnly,strSQL);//打开记录集
if(m_recordSet.GetRecordCount()==0)//如果找不到记录
{
MessageBox("密码错误,请重新输入","密码错误",MB_OK|MB_ICONWARNING);//提示密码错误
pPassword->SetWindowText("");//清空密码文本框
pNew->SetWindowText("");//清空新密码文本框
pConfirm->SetWindowText("");//清空确认密码文本框
pPassword->SetFocus();//设置用户名文本框为当前的焦点
}
else//如果找到记录
{
//更新密码的sql语句
strSQL.Format("updateUSER_PSWDsetuser_password='%s'whereuser_name='%s'",newPassword,username);
m_database.ExecuteSQL(strSQL);//执行sql
MessageBox("修改密码成功!
");
CDialog:
:
OnOK();
}
m_recordSet.Close();//关闭记录集
m_database.Close();//关闭数据库
}
}
}
}
}
第四章调试与操作说明
4.1程序演示
4.1.1打开程序
图4.1系统打开界面
4.1.2输入用户名密码登陆
图4.2系统登录界面
4.1.3进入系统
图4.3进入系统后界面
4.1.4功能演示
图4.4功能演示
图4.5功能演示
图4.6功能演示
4.2修改密码
图4.6修改密码选项
图4.7功能演示
4.3学生管理
4.3.1课程管理
图4.8课程管理演示
第五章设计体会与总结
4.1 程序不足及功能扩充
1)在对用户权限的设计
该程序在对用户权限的设计比较混乱,不能够清晰的分出教职工和学生的使用权限,这会使程序的可用性和安全性出现很大的问题。
在这个方面,我们还有很多工作需要做,比如对登录用户在数据库的设计过程中要增加权限的设计,使的在登录后能够根据权限来进行相应的操作,不会是用户越级等。
2)在对成绩进行修改的设计
该程序在对程序进行修改的设计还不够完善,在对一组选定的成绩进行修改时会弹出一个有错误的对话框,不过在之后的操作没有任何问题。
还有就是在选定修改科目后仍然可以修改科目,这一点的设计还不是很合理。
在之后的设计中还需要改进。
3)在成绩查询浏览过程中的设计
改程序在对学生成绩查询的设计部分也存在不足,虽然是按照学生姓名以及课程名进行查询,但是在没有一个通表的情况下这种操作是很危险的。
他不能让用户直观的看到可以查询学生的姓名还有就是通有的课程名,这使该部分的设计存在很大问题,不能很好的完成查询功能。
4.2设计心得
课程设计是我们数据库专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
说实话,课程设计真的有点累.然而,当我看到自己与团队一手设计出来的成果,慢慢回味这几周的心路历程,一种少有的成功喜悦使倦意顿消.虽然这可以说是我刚学会走完的第一步,也是人生的一点小小的胜利,然而它令我感到自己成熟的许多,通过课程设计,使我深深体会到,干任何事都必须耐心,细致.
结束语
短短几周的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的不足,几年来的学习了那么多的课程,今天才知道自己并不会用.想到这里,真的心急了,在最后一年的时间里一定要好好学习,为今后工作打好基础!
感谢樊老师的精心教导!
参考文献
[1]卢湘江,李向荣,晏子.MySQL高级配置和管理.北京:
清华大学出版社,2001.9
[2]萨师煊,王珊.数据库系统概论.北京:
高等教育出版社,2002
[3]张海藩.软件工程.北京:
人民邮