宿舍综合管理系统(原创).doc_第1页
宿舍综合管理系统(原创).doc_第2页
宿舍综合管理系统(原创).doc_第3页
宿舍综合管理系统(原创).doc_第4页
宿舍综合管理系统(原创).doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安电子科技大学第二十二届“星火杯”大学生课外学术科技作品竞赛软件类说明书编号一、软件系统名称宿舍综合管理系统二、引言如今高校办学规模不断扩大,宿舍管理信息量庞大。然而大多数高校宿舍管理仍采用传统的账本化模式。如能采用软件来实现信息的管理,则能够使获取信息快、查阅方便、准确性高。我设计开发的学生宿舍管理系统,能够提高管理效率和准确性,减少盲目性,适合推广使用。三、开发平台Visual C+ 6.0: MFC设计系统界面Access 2003: 设计数据库 数据库访问方式: OLE DBPHOTOSHOP CS2: 窗体按钮,图片素材的加工 四、软件分析与设计1、需求分析 系统的总功能说明:按照对竹苑公寓1-4号楼管理方式的调查,本系统将模拟西电学生宿舍管理的各个功能模块,以代替繁琐的手动工作。 2、方案设计功能细化概述:a.应当注意宿舍信息的分层设计,由宿舍类型到楼号,楼号到宿舍号,再到床铺号,便于层次化管理。b.采用简洁、灵活、友好的用户界面。采用操作简单的树型图设计,便于查找学生信息,操作快捷。功能细化:进一步细化:a.初始化 b.添加用户 (注:更新树视图即重新遍历数据库,将学生数据重新加载至树视图)c.删除用户 d.查询用户 e.生成报表 e.树视图与消息响应 关键技术a. 在1_Doc.cpp 的CInhabitantsDoc类中增加AddUser()函数和DeleteUser()函数,用来操作数据库。AddUser()函数在添加记录时被调用,DeleteUser()函数在删除记录时被调用。b. 双击树视图叶子标签以及单击列表视图时都会进入信息视图,但是用于查找的关键字不同,因此在1_infoView.cpp中采用了两个功能相同,但参数不同的函数UpdateUserInfo()和UpdateUserInfo1()。c. 1_ListView.cpp中用于更新列表视图的函数用sql语句作为参数,调用时先搜索,再将搜索结果逐条加入列表。d. Excel文件的生成是借助已有的代码。e. 主窗口关闭后需要返回到主界面,通过重载CMainFrame中的OnDestroy()函数实现。f. 窗口分割视图利用CMainFrame类中的m_wndSplitter成员变量实现,程序开始运行后初始化各区域的面积比例。五、核心代码文件列表文件名称功能说明App.cppApp文件(五个管理模块共享)Logon.cpp用户登陆界面MainWindow.cpp主界面Password.cpp密码管理1_Doc.cpp文档11_MainFrm.cpp主窗口11_AddUser.cpp添加学生记录1_QueryDlg.cpp查询对话框1_TreeView.cpp显示树视图1_ListView.cpp显示列表视图1_infoView.cpp学生详细信息显示 六、软件调试分析调试时,用几十组测试数据对涉及数据库的模块进行了检验,并且对程序中各个消息响应函数进行了检验。在调试过程中出现的各种问题均已解决。七、结语该宿舍管理系统已开发完毕,与同类软件作品相比其具有以下优点: 界面清新、操作简单、实用性强。 使用树形界面、列表界面、信息界面,三者之间灵活交互,极大地提高软件易用性。 具有报表生成等特色而实用的功能,便于后期的数据处理,报表打印。 记录添加和删除具有能够批量执行的特点,大大提高工作效率。 特别针对西电宿舍管理方式开发。但其同时也存在着以下不足: 加密算法简陋。 数据库访问的算法较简陋,数据量大时查找效率可能较低。 未开发从外部数据表进行导入的功能,可能给添加信息造成一定不变。 未来的管理以网络化为趋势,今后可能会添加联网相关的功能。八、参考文献谭浩强.C+程序设计.清华大学出版社,2004林俊杰.新一代VisualC+ 2005程序设计.清华大学出版社,2007侯俊杰. 深入浅出MFC. 华中理工大学出版社,2001 求是科技. Visual C+ 数据库开发技术与工程实践.人民邮电出版社,2004附录一:程序运行结果截图模块一主窗口模块一添加记录窗口 模块一查询记录窗口模块一学生详细信息浏览和编辑附录二:源代码(只摘录部分核心代码)/ 1_Doc.cpp : 学生数据库管理:DOC文件#include stdafx.h#include App.h#include 1_Doc.hBOOL CInhabitantsDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/打开数据库HRESULT result = m_dbHouse.Open();if(FAILED(result)AfxMessageBox(open database failed!);/设置程序标题SetTitle(西安电子科技大学学生宿舍管理系统);return TRUE;int CInhabitantsDoc:AddUser(USER &user)/向数据库中写入新纪录CString strSql;strSql.Format(select * from house where roomtype = %s and buildingnum = %d and roomnum = %d and bednum = %d and national = %s,user.strRoomtype,user.nBuildingnum,user.nRoomnum,user.nBednum,user.strNationNal);CCommandCAccessor dbHouse;long* pCount = new long;if(dbHouse.Open(m_dbHouse.m_session,strSql,NULL,pCount) != S_OK)AfxMessageBox(error);delete pCount;return -1;if(dbHouse.MoveFirst() = S_OK)delete pCount;dbHouse.Close();return 0;delete pCount;dbHouse.Close();/增加学生到数据库中m_dbHouse.MoveLast();_tcscpy( m_dbHouse.m_roomtype,user.strRoomtype );m_dbHouse.m_buildingnum = user.nBuildingnum;m_dbHouse.m_roomnum = user.nRoomnum;m_dbHouse.m_bednum = user.nBednum;_tcscpy(m_dbHouse.m_studentname,user.strName);_tcscpy(m_dbHouse.m_major,user.strMajor);_tcscpy(m_dbHouse.m_remarks,user.strRemarks);_tcscpy(m_dbHouse.m_housetel,user.strHouseTel);_tcscpy(m_dbHouse.m_id,user.strId);_tcscpy(m_dbHouse.m_sex,user.strSex);_tcscpy(m_dbHouse.m_national,user.strNationNal);HRESULT hResult = m_dbHouse.Insert(); if( FAILED( hResult ) )AfxMessageBox( _T( Error inserting the current record ) );return -1;return 1;BOOL CInhabitantsDoc:DeleteUser(CString strSql)/删除学生CCommandCAccessor dbHouse;long* pCount = new long;if(dbHouse.Open(m_dbHouse.m_session,strSql,NULL,pCount,DBGUID_DEFAULT,FALSE) != S_OK)AfxMessageBox(error);delete pCount;return FALSE;delete pCount;dbHouse.Close();return TRUE;void CInhabitantsDoc:DeleteContents() /关闭数据库m_dbHouse.Close();m_dbHouse.m_session.Close();CDocument:DeleteContents();/ 1_infoView.cpp : 学生数据库管理:详细信息查看编辑视图#include stdafx.h#include App.h#include 1_infoView.h#include 1_Doc.h#include House.h#include 1_MainFrm.h#include 1_TreeView.h/由主窗口向详细信息窗口传递数据void CUserinfoView:UpdateUserInfo(CString strRoomType,int nBuildingNum,int nRoomNum,CString StrStudentName,CString National)/查询该学生CString strSql;strSql.Format(select * from house where studentname = %s and roomtype = %s and buildingnum = %d and roomnum = %d and national = %s,StrStudentName,strRoomType,nBuildingNum,nRoomNum,National);CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();CCommandCAccessor dbHouse;long* pCount = new long;if(dbHouse.Open(pDoc-m_dbHouse.m_session,strSql,NULL,pCount) != S_OK)AfxMessageBox(error);delete pCount;return; /加载所有信息if(dbHouse.MoveFirst() = S_OK)m_strStudentname = dbHouse.m_studentname;m_strRoomtype = dbHouse.m_roomtype;m_nBuildingnum = dbHouse.m_buildingnum;m_nRoomnum = dbHouse.m_roomnum;m_nBednum = dbHouse.m_bednum;m_strHouseTel = dbHouse.m_housetel;m_strSex = dbHouse.m_sex;m_strNationNal = dbHouse.m_national;m_strMajor = dbHouse.m_major;m_strId = dbHouse.m_id;m_strRemarks = dbHouse.m_remarks;dbHouse.Close();UpdateData(FALSE);/由树形图向详细信息窗口传递数据void CUserinfoView:UpdateUserInfo1(CString strRoomType,int nBuildingNum,int nRoomNum,int nBedNum,CString National)/查询该学生CString strSql;strSql.Format(select * from house where roomtype = %s and buildingnum = %d and roomnum = %d and bednum = %d and national = %s,strRoomType,nBuildingNum,nRoomNum,nBedNum,National);CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();CCommandCAccessor dbHouse;long* pCount = new long;if(dbHouse.Open(pDoc-m_dbHouse.m_session,strSql,NULL,pCount) != S_OK)AfxMessageBox(error);delete pCount;return;/加载所有信息if(dbHouse.MoveFirst() = S_OK)m_strStudentname = dbHouse.m_studentname;m_strRoomtype = dbHouse.m_roomtype;m_nBuildingnum = dbHouse.m_buildingnum;m_nRoomnum = dbHouse.m_roomnum;m_nBednum = dbHouse.m_bednum;m_strHouseTel = dbHouse.m_housetel;m_strSex = dbHouse.m_sex;m_strNationNal = dbHouse.m_national;m_strMajor = dbHouse.m_major;m_strId = dbHouse.m_id;m_strRemarks = dbHouse.m_remarks;dbHouse.Close();UpdateData(FALSE);void CUserinfoView:OnChangeEditRemarks() / TODO: If this is a RICHEDIT control, the control will not/ send this notification unless you override the CFormView:OnInitDialog()/ function and call CRichEditCtrl().SetEventMask()/ with the ENM_CHANGE flag ORed into the mask./ TODO: Add your control notification handler code here/编辑信息点击确认后更新信息void CUserinfoView:OnConfirm()/ TODO: Add your control notification handler code here CString strSql,strBuildingnum,strRoomnum,strBednum; strBuildingnum.Format(%d, m_nBuildingnum);strRoomnum.Format(%d, m_nRoomnum);strBednum.Format(%d, m_nBednum);strSql.Format(delete * from house where roomtype = %s and buildingnum = %s and roomnum = %s and bednum = %s,m_strRoomtype,strBuildingnum,strRoomnum,strBednum);CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();pDoc-DeleteUser(strSql);USER user;GetDlgItem(IDC_EDIT_STUDENTNAME)-GetWindowText(user.strName);GetDlgItem(IDC_EDIT_SEX)-GetWindowText(user.strSex);GetDlgItem(IDC_EDIT_NATIONAL)-GetWindowText(user.strNationNal);GetDlgItem(IDC_EDIT_ID)-GetWindowText(user.strId);GetDlgItem(IDC_EDIT_MAJOR)-GetWindowText(user.strMajor);GetDlgItem(IDC_EDIT_ROOMTYPE)-GetWindowText(user.strRoomtype);GetDlgItem(IDC_EDIT_HOMETEL)-GetWindowText(user.strHouseTel);GetDlgItem(IDC_EDIT_REMARKS)-GetWindowText(user.strRemarks);GetDlgItem(IDC_EDIT_BUILDINGNUM)-GetWindowText(strBuildingnum);GetDlgItem(IDC_EDIT_ROOMNUM)-GetWindowText(strRoomnum);GetDlgItem(IDC_EDIT_BED)-GetWindowText(strBednum);user.nBuildingnum=atoi(strBuildingnum);user.nRoomnum=atoi(strRoomnum);user.nBednum=atoi(strBednum);pDoc-AddUser(user);CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd; pFrame-m_pLeftView-AddUsersToTree();/ 1_ListView.cpp : 学生数据库管理:列表视图#include stdafx.h#include App.h#include 1_ListView.h#include 1_Doc.h#include 1_MainFrm.h#include House.h#include 1_infoView.h#include 1_TreeView.h/初始化标题栏void CUsersListView:SetTitle()TCHAR rgtsz610 = _T(学生姓名),_T(学号),_T(专业),_T(宿舍类型),_T(所属楼号),_T(所属房间);LV_COLUMN lvcolumn;CRect rect;this-GetWindowRect(&rect);for(int i=0;iDeleteAllItems();/清空列表if(strSql = ) return;CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();CCommandCAccessor dbHouse;long* pCount = new long;/按照strSql查询符合条件的学生if(dbHouse.Open(pDoc-m_dbHouse.m_session,strSql,NULL,pCount) != S_OK)AfxMessageBox(error);delete pCount;return;int iItem = 0;LV_ITEM lvitem;int iActualItem = 0; CString str; /将查询得到的学生都逐个加入列表中if(dbHouse.MoveFirst() = S_OK)do str.Format(%s,dbHouse.m_national);if (str!=secret&str!=record1&str!=record2&str!=record3)for(int iSubItem=0;iSubItemHitTest(point,NULL);if( nHitItem GetItemText(nHitItem,3);CString strBuildingNum = pCtrl-GetItemText(nHitItem,4);CString strRoomNum = pCtrl-GetItemText(nHitItem,5);CString strStudentName = pCtrl-GetItemText(nHitItem,0);CString National;National = strRoomNum.Left(3);int n =strRoomNum.GetLength();strRoomNum=strRoomNum.Right(n-3);CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd;CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();pFrame-SwitchToView(USERINFOVIEW);pFrame-m_pUserinfoView-UpdateUserInfo(strRoomType,atoi(strBuildingNu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论