学生宿舍管理系统可行性研究报告.doc
下载文档
上传人:地**
编号:1252407
2024-10-19
61页
845.20KB
该文档所属资源包:
学生宿舍项目可行性研究报告合集
1、软件设计设计说明书 151220114 金飞腾 151220116 古龙 151220115 刘虎林 学生宿舍管理系统可行性研究报告1.引言1.1 编写目的 学生宿舍管理系统对于一个学校来说是必不可少的组成部分。由于大学院校的宿舍管理数据庞大,手工记录油太大的缺陷,因此为了代替“某某大学院校”繁琐的手工记录方法,方便宿舍管理员管理,我们设计了这款学生宿舍管理系统软件。1.2 背景说明:a.这款软件的名称为“宿舍管理系统”。b.本项目的提出者是1512201班学生。 c.该软件系统应用于设备管理终端。1.3 定义SDMS:Student dormitory management system学生2、宿舍管理系统。SQL Sever 2005:所采用的数据库管理系统。Visual Studio 2008:微软公司退出的开发环境,Visual Studio可以用来创建Windows平台下Windows应用程序和网络应用程序,也可以用来创建网络服务,智能设备应用程序和Office插件。B/S结构:浏览器和服务器结构,它是随着Internet技术的兴起,对B/S结构的一种变化或者改进结构。1.4 参考资料 软件工程,SQL sever数据库设计,ASP.NET2.0简明教程2. 可行性研究的前提:2.1开展宿舍管理系统项目的原因:由于现今大学生管理系统的繁琐性,舍管部人员需要付出大量的时间及精力3、去进行管理。为了提高管理效率以及减轻舍管部人员工作负担,所以开发大学生宿舍管理系统2.2要求A.功能与性能:功能:每所大学的在读生都会有近万人,每个学生都有不同的学号,姓名,班级,出生日期宿舍楼 号等基本信息;每间寝室都有不同的床号等信息;学校需要对每个学生以及寝室的基本信息进行统一管理,以便对每个学生及寝室的信息进行查询.浏览和修改性能:管理系统性能可靠 数据保密性高。B.系统的输入与输出由管理员输入学生的学籍信息及寝室信息,对学生的宿舍寝室信息进行实时管理 。 输入:用户名称 宿舍编号 。输出:用户信息 宿舍信息 备注信息。C.处理流程进入宿舍管理系统界面,进入系统后,按照提示进行相应的操4、作即可D.安全保密要求于此系统较小,所以没有设置身份认可模块,能够使用系统的人员均被鉴定为合法使用人员。2.3目标以最低的成本,在最短的时间内开发具有管理学校学生宿舍和用户信息功能的学生宿舍管理系统。系统实现后,可提高宿管部人员的管理程度及效率,降低管理中的错误发生,减少信息交流的繁琐过程以及设备费用,提高管理的准确率。2.4条件,假定和限制条件说明对这项开发中给出的条件,假定和所受到的限制。如:a建议该系统运行的最短寿命为6年;b进行系统方案选择比较的时间限一星期。2.5进行可行性研究的方法通过调查分析数据库管理系统现阶段所具备的能力及实现的方法,确定主体结构,利用现阶段所能达到的能力,以最5、简洁,最容易的办法,边开发边测试,实现这个应用软件 。2.6评价尺度在短时间内开发出的具有改善管理漏洞的较简单的管理系统。3.技术可行性1.系统概述 该系统的应用可以方便学生宿舍对广大住宿学生信息的管理,可以科学的管理学校宿舍,优化宿舍资源的使用等,同时方便管理员对学生的安全管理,可以使用改系统方便的查询学生信息。开发目标系统实现后,大大提高后勤人员的服务效率。降低后勤管理中的错误发生率,减少信息交流的烦琐过程及其带来的开销。后勤人员工作得到精简,信息的准确率得到极大提升。2处理流程和数据流程学生宿舍管理系统主界面添加住户删除信息查询信息保存信息浏览信息读取写入数据库4.经济可行性4.1支出A6、.采购,开发及安装整套设施(包括房屋,数据通信设备,环境的保护设备,安全与保密设备,操作系统以及软件和数据库软件)所需的金钱若干。B.研究开发数据库的建立以及软件的转换,和后期的维修和技术管理费用可忽略不计。C.若系统工作正常,每次采购及维护所降低的成本若干。D.系统升级所需费用,信息掌握情况的改进,硬件设施的提升或更替所需费用。4.2收益 本系统方便了人员的管理,节约了人力资源的成本,有利于宿舍管理人员查询注入信息,能够更好的统计宿舍人员的入住情况。极大地降低了管理人员人工管理学生信息的费用。4.3投资回收周期 若系统正常工作,本系统的生命期在25年,最大支出为X,最小收益Y,且YX,预计回7、收周期为2到4年。若负荷工作,硬件配置损坏,将降低使用时间,缩短收益及使用时间。4.4敏感度分析设计系统周期为1周。处理速度普遍用户类型后勤宿管功能界面进入用户类型宿舍管理员功能界面进入用户类型宿舍单元管理员功能界面4.2运行控制连接数据库获取学生信息填充到主界面是否退出主界面信息模块注册信息模块删除信息模块查询信息模块浏览信息模块成功失败结束否4.3运行时间初步测试每种操作运行时间均在1秒以内。5系统数据结构设计5.1数据库数据结构设计序号字段名数据类型说明1Id文本学号2Studentname文本学生姓名3Sex文本性别4Startyear文本入学年份5Major文本专业6Roomtype8、文本宿舍类型7Buildingmum数字楼号8Bednum数字房间号9Housetel文本宿舍电话10Remarks文本备注5.2物理结构设计要点1. 管理员信息2. 楼栋信息1楼栋号2宿舍类型3宿舍号4铺位号5宿舍电话3学生信息1. 姓名2. 性别3. 学号4. 入学年份5. 专业6. 电话7. 备注信息等5.3数据结构与程序的关系由于数据的存取是通过界面的接口和数据库进行连接的,所以在实现过程中必不可少的是应用程序实现它们的连接。常用的访问有:查询、删除、添加、修改等。6系统出错处理设计6.1出错信息查询信息不在数据库范围内,系统将静止不动。6.2补救措施关闭已打开窗口,重新进入该界面。69、.3系统维护设计由于系统较小没有外加维护模块,仅靠数据库的一些基本维护措施即可。为便于维护,应该设计了三种日志:系统运行日志、操作日志、出错日志。三种日志根据不同的重要程度采取存放在文件和数据库的方式,系统管理员可以很轻松的监控系统运行情况,数据表的建立和删除有数据系统管理员予以维护。详细设计说明书1.引言: 1、1编写目的: 在前一阶段(概要设计说明书)中,已解决了实现该系统需求的程序模块设计问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。在以下的详细设计报告中将对在本阶段中对系统所做的所有详细设计进行说明。在本阶段中,确定10、应该如何具体地实现所要求的系统,从而在编码阶段可以把这个描述直接翻译成用具体的 程序语言书写的程序。主要的工作有:根据在需求分析说明书中所描述的数据、功能、运行、性能需求,并依照概要设计说明书所确定的处理流程、总体结构和模块外部设计,设计软件系统的结构设计、逐个模块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等等),解决如何1 添加住户:向数据库中添加住户,并实时显示。2 删除住户:根据输入条件判断要删除的住户。3 查询住户2.总体设计: 软件结构: 学生宿舍管理系统主界面模块添加住户模块删除信息模块查询信息模块保存信息模块浏览信息模块读取写入数据库功能模块分析:主界面11、模块:连接数据库获取学生信息填充到主界面是否退出主界面信息模块注册信息模块删除信息模块查询信息模块浏览信息模块成功失败结束否查询模块输入新学生信息查询数据库主界面是选择添加学生功能否写入数据库提示错误重新输入是否有同名记录?继续添加?是否删除模块选择要删除的住宿记录删除成功?到数据库中执行返回主界面主界面否选择删除住户功能是显示剩余记录给出提示数据库表的设计:数据库文件StuDormMS.mdb序号字段名数据类型说明1Id文本学号2Studentname文本学生姓名3Sex文本性别4Startyear文本入学年份5Major文本专业6Roomtype文本宿舍类型7Buildingmum数字楼号12、8Bednum数字房间号9Housetel文本宿舍电话10Remarks文本备注各类代码及函数代码:CAboutDlg:类视图:如右图,IDD具体名为IDD_ABOUTBOX,该类关联的是软件的“关于”对话框:CAddUserDlg:类视图如右图,IDD具体名为IDD_DIALOG_ADDUSER,该类对应的是”添加住户”对话框:对话框中每个控件ID为:学生姓名:IDC_EDIT_STUDENTNAME性别:IDC_EDIT_SEX入学时间:IDC_EDIT_NATIONAL学号:IDC_EDIT_ID专业:IDC_EDIT_MAJOR宿舍类型:IDC_EDIT_ROOMTYPE楼号:IDC_13、EDIT_BUILDINGNUM房间号:IDC_EDIT_ROOMNUM床铺号:IDC_EDIT_BED宿舍电话:IDC_EDIT_HOMETEL备注:IDC_EDIT_REMARKS在本类中添加的成员变量:public继承:CStringm_strMajor;/专业intm_nBuildingNum;/楼号intm_nRoomNum;/房间号CStringm_strRemarks;/备注CStringm_strHomeTel;/宿舍电话CStringm_strStudentname;/学生姓名CStringm_strId;/学号CStringm_strSex;/性别CStringm_strN14、ationNal;/入学时间intm_nBedNum;/床号CStringm_strStudentName;/宿舍类型消息处理函数:OnOK()为添加住户对话框的按下OK键的消息处理函数:void CAddUserDlg:OnOK()/判断输入信息的合法性UpdateData(TRUE);CEdit* p;if( m_strStudentname = )AfxMessageBox(请填学生姓名);p = (CEdit*)GetDlgItem(IDC_EDIT_STUDENTNAME);p-SetFocus();return;if( m_strStudentName = )AfxMessageB15、ox(请填宿舍类型);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_nBedNu16、m = 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;/增17、加学生到数据库中STUDENT user;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.st18、rId = m_strId;user.strRemarks = m_strRemarks;switch(pDoc-AddUser(user)case 0:/已经存在该学生了CString str;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;case 1:/增加成功后刷新左边的树视19、图pFrame-m_pLeftView-AddUserToTree(m_strStudentName,m_nBuildingNum,m_nRoomNum,m_nBedNum);break;default:return;break;CDialog:OnOK();CHouseAccessor:类视图如右图,该类是OLEDB数据源类,定义了数据库中存储的学生信息class CHouseAccessorpublic:TCHAR m_major51;/专业LONG m_buildingnum;/楼号LONG m_roomnum; /房间号TCHAR m_remarks51;/备注TCHAR m_stud20、entname51;/学生姓名TCHAR m_housetel51;/宿舍电话TCHAR m_id51;/学号TCHAR m_sex51;/性别TCHAR m_national51;/入学时间LONG m_bednum;/床铺号TCHAR m_roomtype51;/宿舍类型BEGIN_COLUMN_MAP(CHouseAccessor)/定义显示方式COLUMN_ENTRY(1, m_studentname)COLUMN_ENTRY(2, m_roomtype)COLUMN_ENTRY(3, m_buildingnum)COLUMN_ENTRY(4, m_roomnum)COLUMN_ENT21、RY(5, m_bednum)COLUMN_ENTRY(6, m_housetel)COLUMN_ENTRY(7, m_sex)COLUMN_ENTRY(8, m_national)COLUMN_ENTRY(9, m_major)COLUMN_ENTRY(10, m_id)COLUMN_ENTRY(11, m_remarks)END_COLUMN_MAP()DEFINE_COMMAND(CHouseAccessor, _T( SELECT studentname, roomtype, buildingnum, roomnum, bednum, housetel, sex, national, 22、major, id, remarks FROM house)/ You may wish to call this function if you are inserting a record and wish to/ initialize all the fields, if you are not going to explicitly set all of them.void ClearRecord()memset(this, 0, sizeof(*this);CHouse类:类视图如右图,继承于CHouseAccessor类,用于对数据库进行操作。class CHouse : publ23、ic CCommandCAccessor public:HRESULT Open()/打开数据库HRESULThr;hr = OpenDataSource();/打开数据源,并返回结果集if (FAILED(hr)return hr;return OpenRowset();/打开所有行记录的结果集HRESULT OpenDataSource()HRESULThr;CDataSource db;CDBPropSetdbinit(DBPROPSET_DBINIT);/定义数据库连接字串/设置数据库连接字串的属性dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINF24、O, true);dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR();dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR(Admin);dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR(StuDormMS.mdb);/打开的数据源文件文件名db25、init.AddProperty(DBPROP_INIT_MODE, (long)16);dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING, OLESTR();dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);hr = db.Open(_T(Microsoft.Jet.OLEDB.4.0), &dbinit);/打开数据库文件if (FAILED(hr)return hr;return m_session.O26、pen(db);HRESULT OpenRowset()/ Set properties for openCDBPropSetpropset(DBPROPSET_ROWSET);propset.AddProperty(DBPROP_IRowsetChange, true);propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);return CCommandCAccessor :Open(m_session, NULL, &propset)27、;CSessionm_session;CInhabitantsApp类:应用程序类,派生于CWinApp,负责管理整个程序,是整个程序的入口,用于初始化整个应用程序和完成程序结束的收尾工作。主要函数:ExitInstance()退出程序函数InitInstance()初始化程序函数InitATL()初始化ATL函数OnAppAbout()程序运行时函数CInhabitantsDoc类:文档类,派生于CDocument,管理程序的文档BOOL CInhabitantsDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/打开28、数据库HRESULT result = m_dbHouse.Open();if(FAILED(result)AfxMessageBox(open database failed!);/设置程序标题SetTitle(学生宿舍管理系统);return TRUE;AddUser()函数,添加用户int CInhabitantsDoc:AddUser(STUDENT &user)/*返回值:0已经存在-1添加失败1添加成功*/判断是否存在该学生了CString strSql;strSql.Format(select * from house where roomtype = %s and buildi29、ngnum = %d and roomnum = %d and bednum = %d,user.strRoomtype,user.nBuildingnum,user.nRoomnum,user.nBednum);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)dele30、te 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.strN31、ame);_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( 32、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)AfxMessageBo33、x(error);delete pCount;return FALSE;delete pCount;dbHouse.Close();return TRUE;void CInhabitantsDoc:DeleteContents() /关闭数据库m_dbHouse.Close();m_dbHouse.m_session.Close();CDocument:DeleteContents();CInhabitantsModule类:ATL类。CInhabitantView类:程序视图类CLeftTreeView类:树视图类,用于显示程序左边的树视图添加的成员变量:protected继承:HTREEI34、TEM m_hHitItem;CImageList m_ImageList;添加的成员函数:/将数据库中的所有学生到加到树中void CLeftTreeView:AddUsersToTree()CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();if(pDoc=NULL)return;/清空树GetTreeCtrl().DeleteAllItems();/取数据库中得所有记录CString strSql = select * from house;CCommandCAccessor dbHouse;long* pCount = new35、 long;if(dbHouse.Open(pDoc-m_dbHouse.m_session,strSql,NULL,pCount) != S_OK)AfxMessageBox(error);delete pCount;return;delete pCount;if(dbHouse.MoveFirst() = S_OK)doAddUserToTree(dbHouse.m_roomtype,dbHouse.m_buildingnum,dbHouse.m_roomnum,dbHouse.m_bednum);while( dbHouse.MoveNext() = S_OK );dbHouse.Clo36、se();void CLeftTreeView: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*)Afx37、GetApp();CTreeCtrl* pTreeCtrl = &GetTreeCtrl();m_ImageList.Create(16,16,ILC_COLOR16,4,4);m_ImageList.Add(pApp-LoadIcon(IDI_ICON_SECTION);m_ImageList.Add(pApp-LoadIcon(IDI_ICON_BUILDING);m_ImageList.Add(pApp-LoadIcon(IDI_ICON_CELL);m_ImageList.Add(pApp-LoadIcon(IDI_ICON_USER);pTreeCtrl-SetImageList(&38、m_ImageList,TVSIL_NORMAL);/将学生加入树中AddUsersToTree();pTreeCtrl-SortChildren(TVI_ROOT);void CLeftTreeView:AddUserToTree(CString strStudentName,int nBuildingNum,int nRoomNum,int nBedNum)HTREEITEM hSectionItem = AddSectionToTree(strStudentName);HTREEITEM hBuildingItem = AddBuildingToTree(hSectionItem,nBu39、ildingNum);HTREEITEM hCellItem = AddCellToTree(hBuildingItem,nRoomNum);if(hCellItem = NULL)return;CTreeCtrl* pCtrl = &GetTreeCtrl();TV_INSERTSTRUCT TCItem;/插入数据项数据结构TCItem.hParent = hCellItem;TCItem.hInsertAfter = TVI_LAST;TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;/设屏蔽TCIte40、m.item.lParam=0;/序号TCItem.item.iImage=3;/正常图标TCItem.item.iSelectedImage=3;/选中时图标CString str;str.Format(%d号床铺,nBedNum);TCItem.item.pszText = (LPTSTR)(LPCTSTR)str;pCtrl-InsertItem(&TCItem);pCtrl-SortChildren(hCellItem);/将宿舍类型加到树视图中HTREEITEM CLeftTreeView:AddSectionToTree(CString strStudentName)CTreeCt41、rl* pCtrl = &GetTreeCtrl();HTREEITEM hRootItem = pCtrl-GetRootItem();if(hRootItem)while(hRootItem)CString strItemText = pCtrl-GetItemText(hRootItem);if(strItemText = strStudentName)return hRootItem;hRootItem = pCtrl-GetNextSiblingItem(hRootItem);TV_INSERTSTRUCT TCItem;/插入数据项数据结构TCItem.hParent = TVI_42、ROOT;TCItem.hInsertAfter = TVI_LAST;TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;/设屏蔽TCItem.item.lParam=0;/序号TCItem.item.iImage=0;/正常图标TCItem.item.iSelectedImage=0;/选中时图标TCItem.item.pszText = (LPTSTR)(LPCTSTR)strStudentName;HTREEITEM hSectionItem = pCtrl-InsertItem(&TCItem);pC43、trl-SortChildren(TVI_ROOT);return hSectionItem;HTREEITEM CLeftTreeView:AddBuildingToTree(HTREEITEM hSectionItem, int nBuildingnum)if(hSectionItem = NULL)return NULL;CTreeCtrl* pCtrl = &GetTreeCtrl();CString strBuildingNum;strBuildingNum.Format(%d号楼,nBuildingnum);if(pCtrl-ItemHasChildren(hSectionItem44、)HTREEITEM hItem = pCtrl-GetChildItem(hSectionItem);while(hItem)CString strItemText = pCtrl-GetItemText(hItem);if(strItemText = strBuildingNum)return hItem;hItem = pCtrl-GetNextSiblingItem(hItem);TV_INSERTSTRUCT TCItem;/插入数据项数据结构TCItem.hParent = hSectionItem;TCItem.hInsertAfter = TVI_LAST;TCItem.ite45、m.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;/设屏蔽TCItem.item.lParam=0;/序号TCItem.item.iImage=1;/正常图标TCItem.item.iSelectedImage=1;/选中时图标TCItem.item.pszText = (LPTSTR)(LPCTSTR)strBuildingNum;HTREEITEM hBuildingItem = pCtrl-InsertItem(&TCItem);pCtrl-SortChildren(hSectionItem);return hBuildi46、ngItem;HTREEITEM CLeftTreeView:AddCellToTree(HTREEITEM hBuildingItem, int nRoomnum)if(hBuildingItem = NULL)return NULL;CTreeCtrl* pCtrl = &GetTreeCtrl();CString strRoomNum;strRoomNum.Format(%d房间,nRoomnum);if(pCtrl-ItemHasChildren(hBuildingItem)HTREEITEM hItem = pCtrl-GetChildItem(hBuildingItem);whil47、e(hItem)CString strItemText = pCtrl-GetItemText(hItem);if(strItemText = strRoomNum)return hItem;hItem = pCtrl-GetNextSiblingItem(hItem);TV_INSERTSTRUCT TCItem;/插入数据项数据结构TCItem.hParent = hBuildingItem;TCItem.hInsertAfter = TVI_LAST;TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;/48、设屏蔽TCItem.item.lParam=0;/序号TCItem.item.iImage=2;/正常图标TCItem.item.iSelectedImage=2;/选中时图标TCItem.item.pszText = (LPTSTR)(LPCTSTR)strRoomNum;HTREEITEM hCellItem = pCtrl-InsertItem(&TCItem);pCtrl-SortChildren(hBuildingItem);return hCellItem;void CLeftTreeView:OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult49、) NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;*pResult = 0;/获得被选择项CTreeCtrl* pCtrl = &GetTreeCtrl();HTREEITEM hSelItem = pCtrl-GetSelectedItem();m_hHitItem = hSelItem;/如果没有项被选择,则将右边的列表视图清空CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd;if(hSelItem = NULL)pFrame-SwitchToView(USERSVIEW);p50、Frame-m_pUsersView-ShowUsers();return;/判断选择项在树中的位置HTREEITEM hParentItem = pCtrl-GetParentItem(hSelItem);CString strSql,strStudentName,strBuildingNum,strRoomNum,strBedNum;if(hParentItem = NULL) /小区CString strStudentName = pCtrl-GetItemText(hSelItem);strSql.Format(select * from house where roomtype = 51、%s,strStudentName);pFrame-SwitchToView(USERSVIEW);pFrame-m_pUsersView-ShowUsers(strSql);return;hParentItem = pCtrl-GetParentItem(hParentItem);if(hParentItem = NULL) /楼strStudentName = pCtrl-GetItemText(pCtrl-GetParentItem(hSelItem);CString str = pCtrl-GetItemText(hSelItem);int n = str.Find(号楼);strBu52、ildingNum = str.Left(n);strSql.Format(select * from house where roomtype = %s and buildingnum = %s,strStudentName,strBuildingNum);pFrame-SwitchToView(USERSVIEW);pFrame-m_pUsersView-ShowUsers(strSql);return;hParentItem = pCtrl-GetParentItem(hParentItem);if(hParentItem = NULL) /单元strStudentName = pCtr53、l-GetItemText(pCtrl-GetParentItem(pCtrl-GetParentItem(hSelItem);CString str = pCtrl-GetItemText(pCtrl-GetParentItem(hSelItem);int n = str.Find(号楼);strBuildingNum = str.Left(n);str = pCtrl-GetItemText(hSelItem);n = str.Find(房间);strRoomNum = str.Left( n );strSql.Format(select * from house where roomty54、pe = %s and buildingnum = %s and roomnum = %s,strStudentName,strBuildingNum,strRoomNum);pFrame-SwitchToView(USERSVIEW);pFrame-m_pUsersView-ShowUsers(strSql);return;/选择项是房间号,则右边视图显示该住户的详细信息strStudentName = pCtrl-GetItemText(pCtrl-GetParentItem(pCtrl-GetParentItem(pCtrl-GetParentItem(hSelItem);CString55、 str = pCtrl-GetItemText(pCtrl-GetParentItem(pCtrl-GetParentItem(hSelItem);int n = str.Find(号楼);strBuildingNum = str.Left(n);str = pCtrl-GetItemText(pCtrl-GetParentItem(hSelItem);n = str.Find(房间);strRoomNum = str.Left( n );strBedNum = pCtrl-GetItemText(hSelItem);pFrame-SwitchToView(USERINFOVIEW);pFr56、ame-m_pUserinfoView-UpdateUserInfo(strStudentName,atoi(strBuildingNum.GetBuffer(0),atoi(strRoomNum.GetBuffer(0),atoi(strBedNum.GetBuffer(0);void CLeftTreeView:OnOperateDelete() if( m_hHitItem = NULL )return;CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd;CInhabitantsDoc* pDoc = (CInhabitant57、sDoc*)GetDocument();CTreeCtrl* pCtrl = &GetTreeCtrl();HTREEITEM hParentItem = pCtrl-GetParentItem( m_hHitItem );CString strSql;if( hParentItem = NULL & m_hHitItem != NULL )/宿舍类型CString strStudentName = pCtrl-GetItemText(m_hHitItem);strSql.Format(delete * from house where roomtype = %s,strStudentName58、);if(this-MessageBox(确定要删除该宿舍区中的所有学生吗?,学生宿舍管理系统,MB_YESNO)=IDNO)return;else if( hParentItem != NULL & pCtrl-GetParentItem(hParentItem) = NULL )/楼CString strStudentName = pCtrl-GetItemText(pCtrl-GetParentItem(m_hHitItem);CString str = pCtrl-GetItemText(m_hHitItem);int n = str.Find(号楼);CString strBuild59、ingNum = str.Left(n);strSql.Format(delete * from house where roomtype = %s and buildingnum = %s,strStudentName,strBuildingNum);if(this-MessageBox(确定要删除该楼中的所有学生吗?,学生宿舍管理系统,MB_YESNO)=IDNO)return;else if( pCtrl-GetParentItem(hParentItem) != NULL & pCtrl-GetParentItem(pCtrl-GetParentItem(hParentItem) = 60、NULL )/房间CString strStudentName = pCtrl-GetItemText(pCtrl-GetParentItem(pCtrl-GetParentItem(m_hHitItem);CString str = pCtrl-GetItemText(pCtrl-GetParentItem(m_hHitItem);int n = str.Find(号楼);CString strBuildingNum = str.Left(n);str = pCtrl-GetItemText(m_hHitItem);n = str.Find(房间);CString strRoomNum = 61、str.Left( n );strSql.Format(delete * from house where roomtype = %s and buildingnum = %s and roomnum = %s,strStudentName,strBuildingNum,strRoomNum);if(this-MessageBox(确定要删除该房间中的所有学生吗?,学生宿舍管理系统,MB_YESNO)=IDNO)return;else/学生CString strStudentName = pCtrl-GetItemText(pCtrl-GetParentItem(pCtrl-GetParent62、Item(pCtrl-GetParentItem(m_hHitItem);CString str = pCtrl-GetItemText(pCtrl-GetParentItem(pCtrl-GetParentItem(m_hHitItem);int n = str.Find(号楼);CString strBuildingNum = str.Left(n);str = pCtrl-GetItemText(pCtrl-GetParentItem(m_hHitItem);n = str.Find(房间);CString strRoomNum = str.Left( n );CString strBe63、dNum = pCtrl-GetItemText(m_hHitItem);strSql.Format(delete * from house where roomtype = %s and buildingnum = %s and roomnum = %s and bednum = %s,strStudentName,strBuildingNum,strRoomNum,strBedNum);if(this-MessageBox(确定要删除该学生吗?,学生宿舍管理系统,MB_YESNO)=IDNO)return;pDoc-DeleteUser(strSql);AddUsersToTree();v64、oid CLeftTreeView:OnUpdateOperateDelete(CCmdUI* pCmdUI) pCmdUI-Enable(m_hHitItem != NULL);CMainFrame类:主框架类成员变量:public继承:CLeftTreeView* m_pLeftView;/树视图CUsersListView* m_pUsersView;/学生列表视图CUserinfoView* m_pUserinfoView;/学生详细信息视图protected继承:CStatusBar m_wndStatusBar;/状态栏CToolBar m_wndToolBar;/工具栏CSpli65、tterWnd m_wndSplitter;消息处理函数:BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) /return CFrameWnd:OnCreateClient(lpcs, pContext);if(!m_wndSplitter.CreateStatic(this,1,2)return FALSE;if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftTreeView),CSize(100,100),pContext)retur66、n FALSE;if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CUsersListView),CSize(100,100),pContext)return FALSE;m_pLeftView = (CLeftTreeView*)m_wndSplitter.GetPane(0,0);m_pUsersView = (CUsersListView*)m_wndSplitter.GetPane(0,1);return TRUE;/*功能:切换右边的视参数:nViewType = 0CUsersListView 1 CUserinfoView*/void 67、CMainFrame:SwitchToView(int nViewType)CView* pView = (CView*)m_wndSplitter.GetPane(0,1);CRect rcRight,rcFrame;pView-GetClientRect(&rcRight);GetClientRect(&rcFrame);switch(nViewType)case USERSVIEW:/CUsersListViewif(!pView-IsKindOf(RUNTIME_CLASS(CUsersListView)m_wndSplitter.DeleteView(0,1);m_wndSplitt68、er.CreateView(0,1,RUNTIME_CLASS(CUsersListView),CSize(rcRight.Width(),rcRight.Height(),NULL);m_wndSplitter.RecalcLayout();m_pUsersView= (CUsersListView*)m_wndSplitter.GetPane(0,1);break;case USERINFOVIEW:/CUserinfoViewif(!pView-IsKindOf(RUNTIME_CLASS(CUserinfoView)m_wndSplitter.DeleteView(0,1);m_wnd69、Splitter.CreateView(0,1,RUNTIME_CLASS(CUserinfoView),CSize(rcRight.Width(),rcRight.Height(),NULL);m_wndSplitter.RecalcLayout();m_pUserinfoView= (CUserinfoView*)m_wndSplitter.GetPane(0,1);break;default:break;/增加学生void CMainFrame:OnOperateAdduser() CAddUserDlg dlg;dlg.DoModal();/查询学生void CMainFrame:On70、OperateQuery() CQueryDlg dlg;if( dlg.DoModal() = IDOK )BOOL bIsFirst = TRUE;CString strSql,strRoomtype,strBuildingnum,strRoomnum,strBednum,strStudentname,strHomeTel,strSex, strMajor,strId,strRemarks;/判断宿舍类型是否输入了条件if( dlg.m_strStudentName != )strRoomtype = roomtype = + dlg.m_strStudentName + ;bIsFirs71、t = FALSE;elsestrRoomtype = ;/判断楼号是否输入了条件if( dlg.m_nBuildingNum != 0 )if( bIsFirst = TRUE )strBuildingnum.Format( buildingnum = %d,dlg.m_nBuildingNum);elsestrBuildingnum.Format( and buildingnum = %d,dlg.m_nBuildingNum);bIsFirst = FALSE;elsestrBuildingnum = ;/判断房间号是否输入了条件if( dlg.m_nRoomNum != 0 )if( 72、bIsFirst = TRUE )strRoomnum.Format( roomnum = %d,dlg.m_nRoomNum);elsestrRoomnum.Format( and roomnum = %d,dlg.m_nRoomNum);bIsFirst = FALSE;/判断床铺号是否输入了条件if( dlg.m_nBedNum != 0 )if( bIsFirst = TRUE )strBednum.Format( bednum = %d,dlg.m_nBedNum);elsestrBednum.Format( and bednum = %d,dlg.m_nBedNum);bIsFir73、st = FALSE;/判断房主是否输入了条件if( dlg.m_strStudentname != )if( bIsFirst = TRUE )strStudentname = studentname = + dlg.m_strStudentname + ;elsestrStudentname = and studentname = + dlg.m_strStudentname + ;bIsFirst = FALSE;/判断宿舍电话是否输入了条件if(dlg.m_strHomeTel != )if( bIsFirst = TRUE )strHomeTel = housetel = + dlg74、.m_strHomeTel + ;elsestrHomeTel = and housetel = + dlg.m_strHomeTel + ;bIsFirst = FALSE;/判断性别是否输入了条件if(dlg.m_strSex != )if( bIsFirst = TRUE )strSex = sex = + dlg.m_strSex + ;elsestrSex = and sex = + dlg.m_strSex + ;bIsFirst = FALSE;/判断专业是否输入了条件if(dlg.m_strMajor != )if( bIsFirst = TRUE )strMajor = ma75、jor = + dlg.m_strMajor + ;elsestrMajor = and major = + dlg.m_strMajor + ;bIsFirst = FALSE;/判断学号是否输入了条件if(dlg.m_strId != )if( bIsFirst = TRUE )strId = id = + dlg.m_strId + ;elsestrId = and id = + dlg.m_strId + ;bIsFirst = FALSE;/判断remarks是否输入了条件if(dlg.m_strRemarks != )if( bIsFirst = TRUE )strRemarks 76、= remarks = + dlg.m_strRemarks + ;elsestrRemarks = and remarks = + dlg.m_strRemarks + ;bIsFirst = FALSE;/生成完整的查询条件if( bIsFirst = TRUE )/没有输入任何条件strSql = select * from house;elsestrSql = select * from house where + strRoomtype + strBuildingnum + strRoomnum + strBednum + strStudentname + strHomeTel + 77、strSex + strMajor + strId + strRemarks;/切换到CUsersListView,根据查询条件显示学生SwitchToView(USERSVIEW);m_pUsersView-ShowUsers(strSql);CQueryDlg类:类视图如右图,IDD具体名为IDD_DIALOG_QUERY,该类关联的是软件的“查询住户”对话框:对话框中每个控件的ID同“添加住户”对话框中每个控件ID。在本类中添加的成员变量(也同CAddUserDlg类)CStringm_strMajor;intm_nBuildingNum;intm_nRoomNum;CStringm_s78、trRemarks;CStringm_strHomeTel;CStringm_strStudentname;CStringm_strId;CStringm_strSex;CStringm_strNationNal;intm_nBedNum;CStringm_strStudentName;消息处理函数:void CQueryDlg:OnOK() CDialog:OnOK();void CQueryDlg:OnClickTree2(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code 79、here*pResult = 0;void CQueryDlg:OnSelchangeList3() / TODO: Add your control notification handler code hereCUserinfoView类:用户信息视图类,对应用户信息的对话框:对话框中每个控件ID同CAddUserDlg类,添加的成员变量也同CAddUserDlg类。其构造函数和析构函数以及DoDataExchange函数基本同CAddUserDlg类。消息处理函数:void CUserinfoView:UpdateUserInfo(CString strStudentName,int nB80、uildingNum,int nRoomNum,int nBedNum)/查询该学生CString strSql;strSql.Format(select * from house where roomtype = %s and buildingnum = %d and roomnum = %d and bednum = %d,strStudentName,nBuildingNum,nRoomNum,nBedNum);CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();CCommandCAccessor dbHouse;long* p81、Count = 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.m82、_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() / TODO83、: 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 hereCUserListView类:用户信息列表类消84、息处理函数:void CUsersListView:SetListCtrlStyle()DWORD dwStyle = GetWindowLong(m_hWnd, GWL_STYLE); dwStyle &= (LVS_TYPEMASK);dwStyle &= (LVS_EDITLABELS); / Make sure we have report view and send edit label messages. SetWindowLong( m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS)85、;/ Enable the full row selection and the drag drop of headers.DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;/ Use macro since this is new and not in MFC.ListView_SetExtendedListViewStyleEx(m_hWnd, styles, styles );void CUsersListView:SetTitle()TCHAR rgtsz510 = _T(学生姓名),_T(宿舍类型),_T(所属楼号),_T(所属86、房间),_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,pCoun87、t) != S_OK)AfxMessageBox(error);delete pCount;return;int iItem = 0;LV_ITEM lvitem;int iActualItem = 0;/将查询得到的学生都逐个加入列表中if(dbHouse.MoveFirst() = S_OK)dofor(int iSubItem=0;iSubItemHitTest(point,NULL);if( nHitItem GetItemText(nHitItem,1);CString strBuildingNum = pCtrl-GetItemText(nHitItem,2);CString st88、rRoomNum = pCtrl-GetItemText(nHitItem,3);CString strBedNum = pCtrl-GetItemText(nHitItem,4);CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd;CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();pFrame-SwitchToView(USERINFOVIEW);pFrame-m_pUserinfoView-UpdateUserInfo(strStudentName,atoi(strB89、uildingNum.GetBuffer(0),atoi(strRoomNum.GetBuffer(0),atoi(strBedNum.GetBuffer(0);void CUsersListView:OnOperateDelete() CListCtrl* pCtrl = &GetListCtrl();POSITION pos = pCtrl-GetFirstSelectedItemPosition();if( pos = NULL )AfxMessageBox(请选择要删除的学生);return;if(this-MessageBox(你真的要删除选择的所有学生吗?,学生宿舍管理系统,MB_90、YESNO)=IDNO)return;/删除选择的所有学生while (pos)int nHitItem = pCtrl-GetNextSelectedItem(pos);CString strStudentName = pCtrl-GetItemText(nHitItem,1);CString strBuildingNum = pCtrl-GetItemText(nHitItem,2);CString strRoomNum = pCtrl-GetItemText(nHitItem,3);CString strBedNum = pCtrl-GetItemText(nHitItem,4);CSt91、ring strSql;strSql.Format(delete * from house where roomtype = %s and buildingnum = %s and roomnum = %s and bednum = %s,strStudentName,strBuildingNum,strRoomNum,strBedNum);CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument();pDoc-DeleteUser(strSql);CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_92、pMainWnd;pFrame-m_pLeftView-AddUsersToTree();void CUsersListView:OnUpdateOperateDelete(CCmdUI* pCmdUI) pCmdUI-Enable(GetListCtrl().GetFirstSelectedItemPosition() != NULL);结构体student的定义:typedef struct studentpublic:CString strName;/学生姓名CString strSex;/学生性别CString strNationNal;/入学年份CString strMajor;/专93、业CString strId;/学号CString strRoomtype;/宿舍类型int nBuildingnum;/宿舍楼号int nRoomnum;/房间号int nBednum;/床位号CString strHouseTel;/宿舍电话CString strRemarks;/备注信息HTREEITEM hItem;/树形节点 STUDENT;资源视图中主菜单:主菜单界面如图所示: 系统维护选项:1、 增加住户:ID:ID_OPERATE_ADDUSER事件处理函数:void CMainFrame:OnOperateAdduser()【见P23页】2、 删除住户:ID:ID_OPERA94、TE_DELETE事件处理函数:void CLeftTreeView:OnOperateDelete()void CLeftTreeView:OnUpdateOperateDelete(CCmdUI* pCmdUI)【见P20页】void CUsersListView:OnOperateDelete()【见P33页】,3、 查询住户ID:ID_OPERATE_QUERY事件处理函数:void CMainFrame:OnOperateQuery()【见P24页】4、 退出查看选项:1、 工具栏2、 状态栏版权信息:关于程序维护手册1. 引言 编写目的 软件维护是软件生命周期的最后一个阶段,它处于95、系统投入生产性运行以后的时期中,因此不属于系统开发过程。软件维护需要的工作量非常大,虽然在不同应用领域维护成本差别很大,但是,平均说来,大型软件的维护成本高达开发成本的四倍左右。目前国外许多软件开发组织把60%以上的人力用于维护已有的软件,而且随着软件数量增多和使用寿命延长,这个百分比还在持续上升。软件维护就是在软件已经交付使用之后,为了改正错误或者满足新的需要而修改软件的过程。它有如下几种性质的维护:l 改正性维护 因为软件测试不可能暴露出一个大型软件系统中所有潜藏的错误,所以在使用期间,用户必然会发现程序错误,并且把他们遇到的问题报告给维护人员。我们把诊断和改正错误的过程称为改正性维护。l96、 适应性维护 计算机科学技术领域的各方面都在迅速进步,需要经常地修改版本。为了和变化了的环境适当地配合而进行的修改软件的活动称为适应性维护。l 完善性维护 在软件编写完成之后,投入实践,在使用软件的过程中,用户往往提出增加新功能或修改已有的功能的建议,这就需要进行完善性维护。l 预防性维护为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件时,就需要进行预防性维护。 维护的过程本质上是修改和压缩了的软件定义和开发过程,而且事实上远在提出一项维护要求之前,与软件维护有关的工作已经开始了。 鉴于以上各点,编写维护软件的文档十分重要。它给软件维护人员提供了一份完整,清晰的说明文97、档,便于其快速有效地进行维护工作。 开发单位 项目的提出者:金飞腾、古龙、刘虎林 开发者:金飞腾、古龙、刘虎林 用户:学校使用场所:学生宿舍 定义和缩写2. 系统说明 系统用途添加住户:添加学生住宿基本信息 。删除住户:删除一个或者一组学生的基本信息。查询住户:按一定条件查询住户的信息并列表显示。 2操作环境 设备安装有Windows系统的电脑。 支持软件支持常用的数据库应用软件:Microsoft Access数据库 数据库 标识符:姓名,性别,入学年份,学号,专业,宿舍类型,楼号,房间号,床铺号,宿舍电话,备注。 静态数据:存储在硬盘上的数据。 动态数据:正处于处理过程中的数据。数据库的存98、储媒体:硬盘。3. 维护过程 规则1 设计原则1 密切结合结构(数据)设计和行为(处理)设计。 2有机结合硬件,软件,技术和管理的界面。 3具体程序实现过程中,对记录,字段的引用参照PersInfo 类。 4存储区的标识符也参照PersInfo 类。 5在设计过程中参照瀑布模型,ER模型,层次图,Jackson 程序设计方法。2设计程序变更的准则1 检查可供选择的设计方案,寻找一种与程序的原始设计原理相容的变更设计。2 努力使设计简化。3 能满足可变性要求的设计。4 不降低程序质量。5 用可测试的并具备测试方法的术语描述设计。6 考虑处理时间,存储量和操作过程方面的变化。7 考虑标更对用户服务99、的干扰以及实施变更的代价与时间。3修改程序代码的准则1 必须要先熟悉整个程序的控制流程。2 不要做不必要的修改。3 不影响原始程序的风格和相容性。4 记录所作过的修改。5 审查软件质量是否符合标准。6 更新程序文档以反映修改并保留修改前的程序代码版本。4重新验证程序的准则1 首先测试程序故障,然后测试程序的未改动部分,最后测试程序的修改部分。2 不允许做修改的维护程序员成为唯一的重新验证程序的人。3 鼓励终端用户参与到重新测试进程中来。4 在重新验证进程中,记录出错的次数与类型,并把结果同所提供的测试功能进行比较,以便估量出程序是否退化。 验证过程 每当软件被修改后,都要校验其正确性。维护员应100、该有选择地作些重新测试工作,不仅要证实新的逻辑的正确性,而且要校验实程序的为修改部分是否无损害,并且整个程序运行正确。若发现错误,则要马上进行修正。 出错及纠正方法查询系统模块的更正:问题发现:在测试系统时发现,查询住户对话框中查询条件“入学时间”修改较复杂,必须修改对应正确的时间,在输入其他信息才可以进行查询,比较繁琐。问题修正:取消在查询时对“入学时间”条件的判断。删除代码:/判断入学年份是否输入了条件if(dlg.m_strNationNal != )if( bIsFirst = TRUE )strNationNal = national = + dlg.m_strNationNal + ;elsestrNationNal = and national = + dlg.m_strNationNal + ;bIsFirst = FALSE;并删除相应的变量,调试后发现问题解决。
CAD图纸
上传时间:2023-11-24
14份