1《软件工程上机实验》实验报告书——科研管理系统安徽工业大学计算机学院专业班级计算机科学与技术074班学号079074120姓名任胜强指导教师方木云1第一章简介此次试验,要求完成可视化的科研管理系统。将自己在软件工程课程中学习到的软件设计的知识运用的实际中,加深对知识的理解,也增强自己动手的实践能力。我采用的是运用C++语言在WINDOWS操作平台上,使用MSvc6.0和sqlserver2000完成的单机版C/S系统。第二章试验步骤1.需求分析:分析该系统需要完成的功能,需要什么开发工具和数据库管理软件2.数据库设计:分析系统的数据,画出数据库的E-R图,并在此基础上完成数据库表的设计和初始数据的输入3.数据流图的设计:仿照用户的使用习惯,分析从系统启动到系统退出系统数据的使用4.系统功能模块的设计:按照数据流图的需要,分析出系统需要哪些模块来完成需求分析中提出的功能需求5.实现和编码:在选定的平台上上运用开发工具和数据库管理软件进行系统的开发6.测试:每完成一个模块和重要函数,进行相应的单元测试;系统完成之后,需要系统测试7.迭代:根据测试的结果进行迭代,从而形成一个完整可用的系统第三章需求分析2.1可行性分析系统基于windows操作系统环境,在单机上进行测试和使用,主要功能完备,可以运行。2.2基本功能需求1.系统分成三级用户,不同用户登录界面相同,但是具有的功能不同2.超级管理员能够进行所有的增删查修操作,一般管理员可以对项目等进行增删查修,但是不能对和自己高级同级的用户进行操作3.实现基本信息的各种操作(如学院,部门,委托单位,论文级别,专家等),需要超级管理员的权限4.管理员以上可以实现各种项目、论文、著作、专利的输入工作5.普通用户可以实现项目信息的查询工作第四章数据流图树形结构的数据流图如下所示:《软件工程》试验报告——科研管理系统基于C\S结构2第五章系统模块结构图1.登陆界面:《软件工程》试验报告——科研管理系统基于C\S结构3主要功能点:1.从数据库中读取数据,看用户名和密码的正确性;2.如果用户名输入不正确,提示用户名输入错误;3.如果密码输入不正确,提示密码输入错误;4.如果登陆次数多于五次,自动退出系统;5.用户名和密码正确,则进入系统主界面。主要代码:if(m_strUsername.IsEmpty()||m_strPassword.IsEmpty()){AfxMessageBox(请将资料填写完整再登录!);return;}theApp.id=m_strUsername;theApp.m_pRS.ADOExcute(selectpassword,uright,namefromuserinfowhereid='+m_strUsername+');if(theApp.m_pRS.nFieldRows==1){str=theApp.m_pRS.GetFieldString(0);str.TrimLeft();str.TrimRight();if(theApp.trytime=5){//如果登录次数超过五次不成功的话,则退出系统PostQuitMessage(WM_QUIT);}if(str!=m_strPassword){theApp.trytime++;AfxMessageBox(错误的密码!);}else{npower=theApp.m_pRS.GetFieldNumber(1);theApp.power=npower;if(npower==1)power=超级管理员;elseif(npower==2)power=管理员;elsepower=普通用户;CMainDlg*maindlg;maindlg=newCMainDlg();maindlg-Create(IDD_MAINDLG_DIALOG);this-ShowWindow(SW_HIDE);maindlg-ShowWindow(SW_SHOW);《软件工程》试验报告——科研管理系统基于C\S结构4maindlg-Initial(theApp.m_pRS.GetFieldString(2),power,npower);}}else{AfxMessageBox(错误的用户名!);}2.系统主界面主要功能点:1.系统功能采用树形菜单映射的方式,分为设置和管理两大部分;2.设置主要是设置一些基础信息,比如在下拉框中需要选择的信息,比如学院,委托单位,论文等级等等,需要超级管理员权限;3.管理是系统主要功能在管理菜单下,普通用户只能查看相关信息,管理员以上可以增删查改相关信息;4.主界面分成三个部分,树形目录是不会发生改变的,始终显示在界面上;列表也是始终显示在界面上的,根据用户单击树形目录选择相关的信息显示在其中;第三部分,则是根据用户单击的选项来动态变化的,若单击用户管理,则显示用户管理的界面,如下示:《软件工程》试验报告——科研管理系统基于C\S结构55.系统配有相应的菜单项,工具栏,和状态栏,前两者用来映射树形目录功能,后者则是用来显示用户ID和用户权限以及当前系统时间的。主要代码如下:1.List表格刷新函数m_ctrlList.GetClientRect(&rect);//获取列表控件的矩形m_ctrlList.DeleteAllItems();while(m_ctrlList.DeleteColumn(0));//先插入列号try{for(i=0;icolums;i++){strText=theApp.m_pRS.GetFieldName(i);lvColumn.mask=LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;lvColumn.fmt=LVCFMT_LEFT;lvColumn.cx=rect.right/colums;if(lvColumn.cx100)lvColumn.cx=100;lvColumn.pszText=strText.GetBuffer(strText.GetLength());//插入列m_ctrlList.InsertColumn(i,&lvColumn);}i=0;while(!theApp.m_pRS.ADOEOF()){m_ctrlList.InsertItem(i,%d,i);for(j=0;jcolums;j++){m_ctrlList.SetItemText(i,j,theApp.m_pRS.GetFieldString(j));}theApp.m_pRS.MoveNext();i++;}}catch(...){AfxMessageBox(数据库读取失败!);return;}2.选择相应窗口函数:CStringstrText,strSQL;HTREEITEMhTreeItem;hTreeItem=m_ctrltree.GetSelectedItem();strText=m_ctrltree.GetItemText(hTreeItem);if(strText==用户管理)《软件工程》试验报告——科研管理系统基于C\S结构6{if(power==1)//是超级管理员的话strSQL=selectID,name,password,urightfromuserinfo;elsestrSQL.Format(select*fromuserinfowhereuright%dorname='%s',power,name);userinfo.ShowWindow(SW_SHOW);horizproj.ShowWindow(SW_HIDE);vertiproj.ShowWindow(SW_HIDE);article.ShowWindow(SW_HIDE);compose.ShowWindow(SW_HIDE);patent.ShowWindow(SW_HIDE);}elseif(strText==横向管理){userinfo.ShowWindow(SW_HIDE);horizproj.ShowWindow(SW_SHOW);vertiproj.ShowWindow(SW_HIDE);article.ShowWindow(SW_HIDE);compose.ShowWindow(SW_HIDE);patent.ShowWindow(SW_HIDE);}elseif(strText==纵向管理){strSQL=select*fromvertiproj;userinfo.ShowWindow(SW_HIDE);horizproj.ShowWindow(SW_HIDE);vertiproj.ShowWindow(SW_SHOW);article.ShowWindow(SW_HIDE);compose.ShowWindow(SW_HIDE);patent.ShowWindow(SW_HIDE);}elseif(strText==论文管理){userinfo.ShowWindow(SW_HIDE);horizproj.ShowWindow(SW_HIDE);vertiproj.ShowWindow(SW_HIDE);article.ShowWindow(SW_SHOW);compose.ShowWindow(SW_HIDE);patent.ShowWindow(SW_HIDE);}elseif(strText==专著管理){userinfo.ShowWindow(SW_HIDE);《软件工程》试验报告——科研管理系统基于C\S结构7horizproj.ShowWindow(SW_HIDE);vertiproj.ShowWindow(SW_HIDE);article.ShowWindow(SW_HIDE);compose.ShowWindow(SW_SHOW);patent.ShowWindow(SW_HIDE);}elseif(strText==专利管理){userinfo.ShowWindow(SW_HIDE);horizproj.ShowWindow(SW_HIDE);vertiproj.ShowWindow(SW_HIDE);article.ShowWindow(SW_HIDE);compose.ShowWindow(SW_HIDE);patent.ShowWindow(SW_SHOW);}theApp.m_pRS.ADOExcute(strSQL);RefreshList();3.单击list控件中相应项在下面的子窗体中显示详细信息的函数:CStringid;intcur=m_ctrlList.GetSelectionMark();intall=m_ctrlList.GetItemCount();if(cur=0&&curall){//先查看选中的是否在显示的范围之内id=m_ctrlList.GetItemText(cur,0);if(userinfo.IsWindowVisible())//判断窗口是否是显示的userinfo.Display(id);elseif(vertiproj.IsWindowVisible())vertiproj.Display(id);elseif(horizproj.IsWindowVisible())horizproj.Display(id);elseif(article.IsWindowVisible())article.Display(id);elseif(compose.IsWindowVisible())compose.Display(id);elseif(patent.IsWindowVisible())patent.Display(id);}4.主窗口初始化函数:状态栏数据结构:staticUINTindicators[]={ID_INDICATOR_USER,ID_INDICATOR_TIME,ID_INDICATOR_POWER,《软件工程》试验报告——科研管理系统基于C\S结构8};初始化状态栏:UINTnID;CR