课程设计报告学生学籍管理系统.docx
《课程设计报告学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计报告学生学籍管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
![课程设计报告学生学籍管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/31/000abb6e-bab1-4a7a-b5eb-424177d93a8e/000abb6e-bab1-4a7a-b5eb-424177d93a8e1.gif)
课程设计报告学生学籍管理系统
目录
1设计内容与要求2
1.1设计目的与要求2
1.2设计环境2
2需求分析3
2.1系统功能要求设计3
2.2系统模块设计3
2.3数据字典4
2.3.1数据项4
2.3.2数据结构5
2.3.3数据流5
3概念结构设计6
数据抽象与局部视图设计6
3.1学生基本信息与课程信息视图6
根据学生与课程的关系可设计如下关系图:
6
3.2专业、教师及院系信息视图6
4详细设计7
4.1用户登录7
(初始UserName为的evil密码123)7
4.2界面总览9
4.3学生信息管理10
4.4学生成绩录入12
4.5学生奖惩处理15
4.6学生信息查询19
4.7学生奖惩查询21
4.8成绩打印报表24
5.学生学籍管理系统使用说明书25
6设计体会与建议26
7参考文献26
学生学籍管理系统
1设计内容与要求
1.1设计目的与要求
随着社会的发展,基本上所有的具有一定数量数据的企事业单位或机关部门都开始使用计算机数据库来做管理。
当然几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学籍管理的工作量。
该课程设计要求设计一个学籍管理的数据库系统,数据库中要求包含学生的基本信息,学校所有专业信息,学校教师信息以及课程设置的信息。
同时还要设计它们之间的关系,如学生与课程关系和学生的成绩等,最后还要对一些数据进行查询,如查询学生成绩的各种集合等。
我们通过该课程设计,应该达到的目的是把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
1.2设计环境
在Windows环境下利用ODBC,使用SqlServer2000作为数据库管理系统对数据进行管理与维护,使用VC++6.0为前台设计平台。
2需求分析
2.1系统功能要求设计
使得学生的学籍管理工作更加清晰、条理化、自动化。
建立学生档案,设计学生入学、管理及查询界面。
容易地完成学生信息的查询、更新、修改等操作。
对于学生成绩管理模块,设计学生各学期、学年成绩输入及查询界面,能更加容易的求得学生的平均成绩、最高分、最低分等,并能在Excel中以报表的形式显示并打印出来。
实现了在校期间对学生表现的跟踪记录,奖惩事件的记录,和处理的结果。
如:
综合测评加分,警告,留校察看,全校表扬等等。
2.2系统模块设计
学籍管理系统大体可以分成四大模块如下图所示,首先是学生的基本信息模块,里面应该包含学生的各方面的基本信息;再者便是学生成绩管理模块,在该模块中应该包含有对学生成绩信息的查询和处理,如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;再其次还有院系、教师、课程等相关信息的模块;最后是系统模块。
图2-1系统模块图
2.3数据字典
2.3.1数据项
数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称(即码)、注释、数据类型、长度、取值范围和是否是主码。
表2.1数据项列表
名称
注释
数据类型
长度
最小值
最大值
主要的
班级
varchar(50)
50
FALSE
学号
唯一标识学生的信息
integer
TRUE
专业号
varchar(50)
50
FALSE
姓名
varchar(50)
50
FALSE
性别
Varchar(50)
50
FALSE
年龄
smallint
FALSE
家庭住址
Varchar(50)
50
FALSE
联系电话
varchar(50)
50
FALSE
课程名称
varchar(50)
50
TRUE
考试类型
varchar(50)
50
FALSE
考试时间
Datatime
8
FALSE
考试分数
float
FALSE
奖惩事件
varchar(100)
100
TRUE
处理结果
varchar(100)
100
FALSE
备注
varchar(100)
100
FALSE
奖惩时间
Datatime
8
FALSE
2.3.2数据结构
数据结构是为反映数据之间的组合关系,即一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构组成。
本学籍管理系统的数据组成可根据系统模块的划分来设计,即分为四个数据结构,分别如下表所示。
表2.2数据结构清单
数据结构名
含义说明
组成
学生基本信息
学生基本信息的描述
班级+学号+院系代号+专业号+姓名+性别+出生年月
+籍贯+民族+家庭住址+入学时间+政治面貌+身份证号+联系电话+备注;
成绩管理
学生成绩的管理
与查询管理描述
学号+课程号+分数;
平均分数+最高分+最低分;
学生相关信息
学生的奖惩情况
学生在校毕业情况
奖惩时间+奖惩事件+处理情况+备注;
在校/毕业;
系统管理
对使用用户的管理
授权管理添加删除
用户名+密码
2.3.3数据流
数据流是数据结构在系统内传输的路径。
表2-3是描述数据流的数据流定义表,其中包含了数据流名、说明、数据流组成、流量与备注等,表1-4是系统中的数据流描述,其中包括输入数据流、输出数据流等的描述。
表2.3数据流定义表
编号
数据流名
说明
数据流组成
流量
备注
L01
学生基本信息
学生的所有基本信息
学生基本信息结构
——
——
L02
学生成绩
所有学生的成绩
成绩管理结构
—
——
L03
分类信息
同班级学生名单
部分学生基本信息结构
——
——
L04
各门成绩
学生的平均成绩(包括所有学生和同班级学生的成绩情况)
成绩管理结构
——
——
L05
科目成绩
学生的单科成绩
成绩管理结构
——
——
L06
教师、专业、院系信息
——
学生相关信息
——
——
L07
查询结果
——
L04|L05
——
——
3概念结构设计
数据抽象与局部视图设计
3.1学生基本信息与课程信息视图
图3-1学生基本信息视图图3-2课程信息视图
根据学生与课程的关系可设计如下关系图:
图3-3学生与课程关系视图
3.2专业、教师及院系信息视图
3-4专业、教师及院系信息视图
院系、教师以及专业的关系图如下:
图3-5院系教师以及专业关系图
4详细设计
4.1用户登录
(初始UserName为的evil密码123)
相应代码:
CLogin:
:
CLogin(CWnd*pParent/*=NULL*/)
:
CDialog(CLogin:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CLogin)
m_Name=_T("");
m_PassWord=_T("");
//}}AFX_DATA_INIT
m_Num=0;
}
voidCLogin:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLogin)
DDX_Text(pDX,IDC_EDIT1,m_Name);
DDX_Text(pDX,IDC_EDIT2,m_PassWord);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLogin,CDialog)
//{{AFX_MSG_MAP(CLogin)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CLoginmessagehandlers
voidCLogin:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(TRUE);
if(m_Name.IsEmpty()||m_PassWord.IsEmpty())
{
MessageBox("用户名或密码不能为空");
return;
}
m_Num++;
CStringsql;
sql.Format("select*fromtb_userwhereusername='%s'andpwd='%s'",
m_Name,m_PassWord);
m_LoginSet=newCLoginSet(&((CMystudentsysApp*)AfxGetApp())->m_DB);
if(!
m_LoginSet->Open(AFX_DB_USE_DEFAULT_TYPE,sql))
{
AfxMessageBox("tb_studentinfo表打开失败!
");
}
if(m_LoginSet->GetRecordCount()!
=0)
{
CDialog:
:
OnOK();
}
else
{
if(m_Num==5)
{
MessageBox("密码5次不正确");
CDialog:
:
OnCancel();
}
else
{
MessageBox("用户名或密码不正确");
m_Name="";
m_PassWord="";
UpdateData(FALSE);
}
}
if(m_LoginSet->IsOpen())
{
m_LoginSet->Close();
deletem_LoginSet;
}
}
4.2界面总览
4.3学生信息管理
相应代码:
/////////////////////////////////////////////////////////////////////////////
//CInfoStudentmessagehandlers
BOOLCInfoStudent:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
if(!
m_ToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC)
||!
m_ToolBar.LoadToolBar(IDR_TOOLBAR_subjectinfo))
{
TRACE0(_T("创建工具条失败\n"));
returnFALSE;
}
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
m_ToolBar.SetButtonStyle(0,TBBS_CHECKBOX);
m_ToolBar.SetButtonStyle(1,TBBS_CHECKBOX);
m_ToolBar.SetButtonStyle(2,TBBS_CHECKBOX);
m_ToolBar.SetButtonStyle(3,TBBS_CHECKBOX);
m_ToolBar.SetButtonStyle(4,TBBS_CHECKBOX);
m_ToolBar.SetButtonStyle(5,TBBS_CHECKBOX);
m_ToolBar.SetButtonStyle(6,TBBS_CHECKBOX);
//TODO:
Addextrainitializationhere
//RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
CStringsqlStr;
sqlStr="SELECT*FROMtb_studentinfo";
mystudentset=newCStudentinfoset(&((CMystudentsysApp*)AfxGetApp())->m_DB);
if(!
mystudentset->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr))//打开数据表
{
AfxMessageBox("tb_studentinfo表打开失败!
");
}
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
voidCInfoStudent:
:
Onsubjectinfotoolbarsave()
{
//TODO:
Addyourcommandhandlercodehere
UpdateData(TRUE);
if(m_studentaddr.IsEmpty()||m_studentclass.IsEmpty()
||m_studentname.IsEmpty()||m_studentphone.IsEmpty()
||m_studentsex.IsEmpty()||m_studentid.IsEmpty())
{
AfxMessageBox("请输入相应的数据!
");
return;
}
mystudentset->AddNew();//调用添加记录的函数处理
mystudentset->m_studentid=m_studentid;
mystudentset->m_addr=m_studentaddr;
mystudentset->m_age=m_studentage;
mystudentset->m_class=m_studentclass;
mystudentset->m_studentname=m_studentname;
mystudentset->m_phone=m_studentphone;
mystudentset->m_sex=m_studentsex;
mystudentset->Update();
mystudentset->Requery();
AfxMessageBox("成功保存数据!
");
DisplayRecord();//更新显示
}
4.4学生成绩录入
相应代码:
/////////////////////////////////////////////////////////////////////////////
//CExaminfo_submarkdlgmessagehandlers
voidCExaminfo_submarkdlg:
:
Oninputsavemarks()
{
UpdateData(TRUE);//读入输入的资料
if(m_studentid.IsEmpty()||m_examsubject.IsEmpty()||m_examkind.IsEmpty())
{
AfxMessageBox("请输入相应的数据!
");
return;
}
CStringsqlStr_findid;
sqlStr_findid="SELECT*FROMtb_studentinfoWHEREtb_studentinfo.studentid='"+m_studentid+"'";
myfindset_id=newCStudentinfoset(&((CMystudentsysApp*)AfxGetApp())->m_DB);
if(!
myfindset_id->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr_findid))
{
AfxMessageBox("tb_studentinfo表打开失败!
");
}
if(myfindset_id->GetRecordCount()==0)
{
AfxMessageBox("没有此学生,请确认学号后再输入!
");
if(myfindset_id->IsOpen())
{
myfindset_id->Close();
deletemyfindset_id;
}
return;
}
if(myfindset_id->IsOpen())
{
myfindset_id->Close();
deletemyfindset_id;
}
CStringsql;
CStringyear,month,day;
year=m_examdate.Format("%Y");
month=m_examdate.Format("%m");
day=m_examdate.Format("%d");
sql.Format("SELECT*FROMtb_examinfo_subWHEREtb_examinfo_sub.studentid\
='%s'andcode='%s'andkind='%s'andyear(examdate)='%s'and\
month(examdate)='%s'andday(examdate)='%s'",m_studentid,
m_examsubject,m_examkind,year,month,day);
myexamsubmarkset_findsame=newCExaminfo_submarkset(&((CMystudentsysApp*)AfxGetApp())->m_DB);
if(!
myexamsubmarkset_findsame->Open(AFX_DB_USE_DEFAULT_TYPE,sql))
{
AfxMessageBox("tb_examinfo_sub表打开失败!
");
}
if(myexamsubmarkset_findsame->GetRecordCount()!
=0)
{
AfxMessageBox("已经有此记录,不能重复输入!
");
if(myexamsubmarkset_findsame->IsOpen())
{
myexamsubmarkset_findsame->Close();
}
return;
}
if(myexamsubmarkset_findsame->IsOpen())
{
myexamsubmarkset_findsame->Close();
deletemyexamsubmarkset_findsame;
}
myexamsubmarkset->AddNew();//调用添加记录的函数处理
myexamsubmarkset->m_studentid=m_studentid;//对应变量更新
myexamsubmarkset->m_code=m_examsubject;
myexamsubmarkset->m_grade=m_submark;
myexamsubmarkset->m_kind=m_examkind;
myexamsubmarkset->m_examdate=m_examdate;
myexamsubmarkset->Update();
myexamsubmarkset->Requery();
DisplayRecord();//更新显示
}
boolCExaminfo_submarkdlg:
:
DisplayRecord()
{
if(myexamsubmarkset->IsEOF()&&myexamsubmarkset->IsBOF())
{
m_studentid="";
m_submark=0.0f;
m_examsubject="";
m_examkind="";
}
else
{
if(myexamsubmarkset->IsBOF())//移动到了开头,就向后移动
{
myexamsubmarkset->MoveNext();
}
else//否则前移
{
if(myexamsubmarkset->IsEOF())
{
myexamsubmarkset->MovePrev();
}
}
}
GetCurrentTime(m_examdate);
m_studentid="";
m_submark=0.0f;
m_examsubject="";
m_examkind="";
UpdateData(FALSE);//显示更新
returnTRUE;
}
BOOLCExaminfo_submarkdlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
CStringsqlStr;
sqlStr="SELECT*FROMtb_examinfo_sub";
myexamsubmarkset=newCExaminfo_submarkset(&((CMystudentsysApp*)AfxGetApp())->m_DB);
if(!
myexamsubmarkset->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr))//打开数据表
{
AfxMessageBox("tb_examinfo_sub表打开失败!
");
}
m_examdat