学生宿舍管理系统.docx
《学生宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《学生宿舍管理系统.docx(49页珍藏版)》请在冰豆网上搜索。
![学生宿舍管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/3/8e4d8649-8470-4f20-a4c9-5fa781bb41d5/8e4d8649-8470-4f20-a4c9-5fa781bb41d51.gif)
学生宿舍管理系统
软件课程设计报告
基于VisualC++/Access实现的学生宿舍管理系统(StuDormMS)
摘要:
本系统根据中南民族大学宿舍管理的实际情况而设计,采用VisualC++为开发工具,数据库采用的是最为普及的小型数据库管理系统Access,能实现宿舍管理中的添加信息、修改信息、删除信息、查询信息等必不可少的功能。
关键字:
C++;宿舍管理系统;Access;数据库;MFC编程
1引言
宿舍,是大学生在高校校园里一个重要的学习、生活、交往的空间环境。
随着高校办学规模的扩大,学生人数不断增多,高校学生宿舍管理信息量日益庞大,如果仍采用传统的工作方式——纸媒介的账本化工作模式,会存在获取信息慢、查阅困难、准确性差等问题,很难适应高水平宿舍管理的需要。
而采用计算机软件来实现信息的管理能很好的解决传统工作方式存在的问题。
因此,我们设计开发了学生宿舍管理系统,旨在提高宿舍管理的效率和准确性,减少工作的盲目性,对后勤管理的现代化建设有一定的指导意义。
2设计依据及框图
2.1设计平台
开发本系统的过程中所用到的主要软件开发工具有:
VisualC++6.0、Access2000、Photoshop。
现将使用情况分别介绍如下:
VisualC++6.0:
MFC方式设计系统界面,采用OLEDB方式访问数据库。
Access2000:
采用Access设计本系统中的数据库。
Photoshop:
用于添加学生、删除学生、查询学生等等按钮图标的美工设计。
2.2设计思想
(1)应用原型方法进行开发。
原型方法将系统分析、设计、实施三个阶段融为一体,使操作者更便于使用该系统,由中南民族大学宿舍管理的实际情况出发,讲宿舍信息分层设计,有宿舍类型到楼号,由楼号到宿舍号,在找到床铺号,便于层次化管理。
(2)选用灵活、方便、友好的用户界面。
采用操作简单的树型图设计,便于查找学生信息,操作快捷方便;(3)数据库采用的是比较流行的小型数据库管理软件Access,与C++程序的连接方式为OLEDB,该方式可以让开发人员不直接向数据源发出指令,而是通过OLEDB接口与数据提供者进行交互,只需要对接口进行操作,这样简化了程序的设计。
2.3设计框图、用户界面
本系统“宿舍管理”的设计框图如下:
主界面
“查看学生详细信息”界面
“添加学生”界面
“删除学生”界面
“学生查询”界面
2.4数据库表结构
本系统采用Access作为数据库,使用OLEDB访问数据库。
根据系统功能与需求分析,只需要创建一个数据表House,该表包含学生姓名,性别,入学时间,学号,专业,宿舍类型,楼号,房间号,床铺号,宿舍电话,备注等信息项,自然的形成了一个树型结构。
不设置主键(PRIMARYKEY),由程序根据地址唯一确定用户信息的不二性。
表结构如右所示:
3各模块功能及主要模块的流程图
3.1各模块功能简介
1、罗列学生信息
在左边的树试图中,通过鼠标或者键盘选择宿舍类型、楼号或者房间号等树项,右边的列表视图就会罗列出相应宿舍类型、楼或者房间中的所有学生的简要信息。
对这些罗列出来的学生可以对它们进行删除或者查看详细信息的操作。
2、查看学生详细信息
选择左边树视图中的房间号,或者双击右边列表视图中的某一学生,右边的视图就会显示该用户的详细信息(见“查看学生详细信息”界面)。
3、添加学生
单击工具条的【添加学生】按钮,或者选择菜单【系统维护】->【添加学生】,弹出“添加学生”对话框,见“添加学生”界面。
在该对话框中填写完相应的信息,单击【确定】按钮完成添加。
其中“学生姓名”和“宿舍地址”是必须填写完整的,如果不完整单击【确定】按钮后系统会提示用户。
4、删除学生
当程序的输入焦点在左边的树视图时,选择要删除的项,单击工具条的【删除学生】按钮,或者选择菜单【系统维护】->【删除学生】,弹出询问用户确认删除操作的对话框,见“删除学生”界面。
如果删除的是宿舍类型,则该宿舍类型中的所有学生都被删除;如果删除是楼号,则该楼中的所有学生被删除,如果删除的是房间号,则该房间中的所有学生都被删除;如果删除的是学生,则该学生信息被删除。
当主窗口的右边是学生的列表视图时,并且输入焦点在其中,选择其中要删除的学生(可以选择多个),单击工具条的【删除学生】按钮,或者选择菜单【系统维护】->【删除学生】,弹出询问用户确认删除操作的对话框,单击【是】按钮删除选择的学生信息。
5、学生查询
单击工具条中的【学生查询】按钮,或者选择菜单【系统维护】->【学生查询】,弹出“查询学生”对话框,见“学生查询”界面。
在该对话框中填写完查询条件,单击【确定】按钮。
如果有符合条件的学生,在右边的学生列表中就会全部罗列出来,可以对这些学生进行删除或者查看详细信息的操作。
3.2主要流程图
本软件系统对学生信息的管理主要流程图:
(1)在树视图中罗列学生信息的程序流程,如图所示:
(2)查询和罗列的程序流程,如图所示:
填充树视图的程序流程查询和罗列的程序流程
(3)增加学生的程序流程,如下图所示:
4软件调试分析
本软件是基于Windows的编程开发,所以,软件调试必须在Windows环境下进行。
调试前须做好以下准备工作:
(1)需要文件MFC42.DLL、MSVCRT.DLL,如果没有,则安装VisualC++6.0环境;
(2)需要安装Access2000的OLEDB驱动,如果没有,可以安装Access2000以上版本;
(3)需要将StuDormMS.mdb数据库文件与可执行文件StuDormMS.exe放在同一目录下,才能运行成功。
配置好之后,在VisualC++6.0环境下进行软件的调试。
调试分析如下:
(1)首先进行数据库的导入,加入ATL产生的模板类,生成包含数据库的House.H[见附]头文件,该头文件是与数据库的接口,经过测试,数据库链接成功;
(2)实现界面框架,使用类CSplitterWnd切分视图和动态切换视图的类型,通过包含该类的单文件调试发现无错误后,整体系统运行能成功切换试图。
(3)系统框架的左侧为树视图,采用CLeftTreeView类来实现;右侧学生信息罗列采用类CUsersListView来实现,成功调试后能正常显示信息。
(4)“增加学生”模块,单模块调试通过后,需要在整理系统编写完后,再进行操作测试,添加一条记录后,发现在数据库中有保存该记录,如果错误输入,观察是否能正常提示信息。
否则修改程序再进行调试。
(5)“查询学生”模块,该模块可以实现单项查询和组合查询,单项查询调试通过后,编写组合查询的代码,再进行调试,看是否能满足要求,并且能正常提示非法查询请求。
(6)“删除学生”模块,可以进行不同层次的删除操作,例如删除宿舍将会删除该宿舍的所有成员,如果只删除某一学生,不会影响到其他成员。
本模块测试通过。
经过调试,以上各部分运行正常,能实现预期的功能。
5结语
5.1结论与讨论
结论:
本文介绍的宿舍管理系统具有界面友好、操作简单、实用性强等特点,并已开发完毕,使用效果良好,初步取得了以下效果:
(1)操作简单,实用性强,能够快速地提供住宿学生的各种基本信息供管理者参考和使用,大大提高了工作效率;
(2)浏览、查询、添加实现数据库管理,纸质文件的流转被电子邮件代替,节约了办公经费;(3)实现了对数据的智能处理,为领导决策起到了一定的辅助作用;(4)使宿舍管理工作更加科学化和规范化。
讨论:
本文介绍的实现方法适合与小型的数据管理,而且功能比较简单,在一定程度上能解决实际中宿舍管理中的问题。
但也存在一些不完善的地方,如需要保存更多的信息,实现更多的功能,需要采用较大型的数据库管理系统,而且未来的管理以网络化为趋势,开发一套可以联网管理的软件系统能给宿舍管理工作带来更大的方便。
参考文献
[1]求是科技.VisualC++6.0数据库开发技术与工程实践.北京:
人民邮电出版社,2004
[2]郑莉,董渊,张瑞丰.C++语言程序设计.北京:
清华大学出版社,2003
[3](美)PaulJ.Fortier等著.数据库技术大全.林瑶等译.北京:
电子工业出版社,1999
附录
各类的声明见源代码*.h头文件,数据库连接文件见House.h,完整源代码见电子文档。
现将各功能函数的核心代码列表如下:
文件名称
功能说明
AddUserDlg.cpp
添加学生信息
LeftTreeView.cpp
显示树视图,完成删除操作
UsersListView.cpp
实现单项、组合查询功能
UserinfoView.cpp
学生详细信息显示
---BeganingofAddUserDlg.cpp---
//AddUserDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"Inhabitants.h"
#include"AddUserDlg.h"
#include"InhabitantsDoc.h"
#include"MainFrm.h"
#include"LeftTreeView.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAddUserDlgdialog
CAddUserDlg:
:
CAddUserDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CAddUserDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CAddUserDlg)
m_strMajor=_T("");
m_nBuildingNum=0;
m_nRoomNum=0;
m_strRemarks=_T("");
m_strHomeTel=_T("");
m_strStudentname=_T("");
m_strId=_T("");
m_strSex=_T("");
m_strNationNal=_T("");
m_nBedNum=0;
m_strStudentName=_T("");
//}}AFX_DATA_INIT
}
voidCAddUserDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddUserDlg)
DDX_Text(pDX,IDC_EDIT_MAJOR,m_strMajor);
DDX_Text(pDX,IDC_EDIT_BUILDINGNUM,m_nBuildingNum);
DDX_Text(pDX,IDC_EDIT_ROOMNUM,m_nRoomNum);
DDX_Text(pDX,IDC_EDIT_REMARKS,m_strRemarks);
DDX_Text(pDX,IDC_EDIT_HOMETEL,m_strHomeTel);
DDX_Text(pDX,IDC_EDIT_STUDENTNAME,m_strStudentname);
DDX_Text(pDX,IDC_EDIT_ID,m_strId);
DDX_Text(pDX,IDC_EDIT_SEX,m_strSex);
DDX_Text(pDX,IDC_EDIT_NATIONAL,m_strNationNal);
DDX_Text(pDX,IDC_EDIT_BED,m_nBedNum);
DDX_Text(pDX,IDC_EDIT_ROOMTYPE,m_strStudentName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddUserDlg,CDialog)
//{{AFX_MSG_MAP(CAddUserDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CAddUserDlgmessagehandlers
voidCAddUserDlg:
:
OnOK()
{
//判断输入信息的合法性
UpdateData(TRUE);
CEdit*p;
if(m_strStudentname=="")
{
AfxMessageBox("请填学生姓名");
p=(CEdit*)GetDlgItem(IDC_EDIT_STUDENTNAME);
p->SetFocus();
return;
}
if(m_strStudentName=="")
{
AfxMessageBox("请填宿舍类型");
p=(CEdit*)GetDlgItem(IDC_EDIT_ROOMTYPE);
p->SetFocus();
return;
}
if(m_nBuildingNum==0)
{
AfxMessageBox("楼号不能为零");
p=(CEdit*)GetDlgItem(IDC_EDIT_BUILDINGNUM);
p->SetFocus();
return;
}
if(m_nRoomNum==0)
{
AfxMessageBox("房间号不能为零");
p=(CEdit*)GetDlgItem(IDC_EDIT_ROOMNUM);
p->SetFocus();
return;
}
if(m_nBedNum==0)
{
AfxMessageBox("床铺号不能为零");
p=(CEdit*)GetDlgItem(IDC_EDIT_BED);
p->SetFocus();
return;
}
CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CInhabitantsDoc*pDoc=(CInhabitantsDoc*)pFrame->GetActiveDocument();
//让用户确认操作
if(this->MessageBox("你真的要添加这条记录?
",
"中南民族大学宿舍管理系统",MB_YESNO)==IDNO)
{
CDialog:
:
OnCancel();
return;
}
//增加学生到数据库中
USERuser;
user.strRoomtype=m_strStudentName;
user.nBuildingnum=m_nBuildingNum;
user.nRoomnum=m_nRoomNum;
user.nBednum=m_nBedNum;
user.strName=m_strStudentname;
user.strHouseTel=m_strHomeTel;
user.strSex=m_strSex;
user.strNationNal=m_strNationNal;
user.strMajor=m_strMajor;
user.strId=m_strId;
user.strRemarks=m_strRemarks;
switch(pDoc->AddUser(user))
{
case0:
{//已经存在该学生了
CStringstr;
str.Format("%s%d号楼%d号房间%d号床铺已有学生入住!
",
m_strStudentName,m_nBuildingNum,m_nRoomNum,m_nBedNum);
AfxMessageBox(str);
CEdit*p=(CEdit*)GetDlgItem(IDC_EDIT_BED);
p->SetFocus();
return;
break;
}
case1:
{//增加成功后刷新左边的树视图
pFrame->m_pLeftView->AddUserToTree(m_strStudentName,
m_nBuildingNum,m_nRoomNum,m_nBedNum);
break;
}
default:
return;
break;
}
CDialog:
:
OnOK();
}
---ENDINGofAddUserDlg.cpp---
---BeganingofLeftTreeView.cpp---
//LeftTreeView.cpp:
implementationfile
//
#include"stdafx.h"
#include"Inhabitants.h"
#include"InhabitantsDoc.h"
#include"LeftTreeView.h"
#include"MainFrm.h"
#include"UsersListView.h"
#include"UserinfoView.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CLeftTreeView
IMPLEMENT_DYNCREATE(CLeftTreeView,CTreeView)
CLeftTreeView:
:
CLeftTreeView()
{
}
CLeftTreeView:
:
~CLeftTreeView()
{
}
BEGIN_MESSAGE_MAP(CLeftTreeView,CTreeView)
//{{AFX_MSG_MAP(CLeftTreeView)
ON_NOTIFY_REFLECT(TVN_SELCHANGED,OnSelchanged)
ON_COMMAND(ID_OPERATE_DELETE,OnOperateDelete)
ON_UPDATE_COMMAND_UI(ID_OPERATE_DELETE,OnUpdateOperateDelete)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CLeftTreeViewdrawing
voidCLeftTreeView:
:
OnDraw(CDC*pDC)
{
CDocument*pDoc=GetDocument();
//TODO:
adddrawcodehere
}
/////////////////////////////////////////////////////////////////////////////
//CLeftTreeViewdiagnostics
#ifdef_DEBUG
voidCLeftTreeView:
:
AssertValid()const
{
CTreeView:
:
AssertValid();
}
voidCLeftTreeView:
:
Dump(CDumpContext&dc)const
{
CTreeView:
:
Dump(dc);
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//CLeftTreeViewmessagehandlers
//将数据库中的所有学生到加到树中
voidCLeftTreeView:
:
AddUsersToTree()
{
CInhabitantsDoc*pDoc=(CInhabitantsDoc*)GetDocument();
if(pDoc==NULL)
return;
//清空树
GetTreeCtrl().DeleteAllItems();
//取数据库中得所有记录
CStringstrSql="select*fromhouse";
CCommand>dbHouse;
long*pCount=newlong;
if(dbHouse.Open(pDoc->m_dbHouse.m_session,strSql,NULL,pCount)!
=S_OK)
{
AfxMessageBox("error");
deletepCount;
return;
}
deletepCount;
if(dbHouse.MoveFirst()==S_OK)
{
do
{
AddUserToTree(dbHouse.m_roomtype,dbHouse.m_buildingnum,
dbHouse.m_roomnum,dbHouse.m_bednum);
}
while(dbHouse.MoveNext()==S_OK);
}
dbHouse.Close();
}
voidCLeftTreeView:
:
OnInitialUpdate()
{
CTreeView:
:
OnInitialUpdate();
//设置树风格
:
:
SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE|WS_TABSTOP
|WS_CHILD|WS_BORDER|TVS_HASBUTTONS
|TVS_LINESATROOT|TVS_HASLINES
|TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS);
//为树视图创建图标连表
CInhabitantsApp*pApp=(CInhabitantsApp*)AfxGetApp();
CTree