软件工程实验报告科研管理系统.docx
《软件工程实验报告科研管理系统.docx》由会员分享,可在线阅读,更多相关《软件工程实验报告科研管理系统.docx(21页珍藏版)》请在冰点文库上搜索。
软件工程实验报告科研管理系统
《软件工程上机实验》
实验报告书
——科研管理系统
专业班级
学号
姓名
指导教师
安徽工业大学
第一章简介
此次试验,要求完成可视化的科研管理系统。
将自己在软件工程课程中学习到的软件设计的知识运用的实际中,加深对知识的理解,也增强自己动手的实践能力。
开发环境和开发工具:
WINDOWS操作平台上,使用MSvc6。
0+sqlserver2000
第二章试验步骤
1.需求分析:
分析该系统需要完成的功能,需要什么开发工具和数据库管理软件
2.数据库设计:
分析系统的数据,画出数据库的E-R图,并在此基础上完成数据库表的设计和初始数据的输入
3.数据流图的设计:
仿照用户的使用习惯,分析从系统启动到系统退出系统数据的使用
4.系统功能模块的设计:
按照数据流图的需要,分析出系统需要哪些模块来完成需求分析中提出的功能需求
5.实现和编码:
在选定的平台上上运用开发工具和数据库管理软件进行系统的开发
6.测试:
每完成一个模块和重要函数,进行相应的单元测试;系统完成之后,需要系统测试
7.迭代:
根据测试的结果进行迭代,从而形成一个完整可用的系统
第三章需求分析
系统将采用先进的信息化技术,并有效结合现代科研管理理念和学校科研管理实际情况。
系统的成功建设将能够轻松解决传统科研管理中难以解决的系列问题,并在多个方面实现突破:
实现标准化的科研信息系统:
系统将采用了国家教育部信息化标准,完全兼容了“全国普通高等学校人文社会科学研究管理系统”,同时也充分体现学校的科研管理办法和有关精神。
系统将采集和管理标准完整的科研机构、人员、项目和成果等基础数据,避免了数据的无效性和不规范性,为以后的管理工作打下坚实基础.
构建开放式的科研管理体系:
系统将向全校所有从事科研活动或者科研辅助工作的老师开放,并和学校人事处等业务部分建立数据共享机制。
系统将彻底改变以前封闭式的管理模式,解决系统数据对内对外的开放性问题。
科学分析和决策支持:
系统能够及时收集到学校最新的科研项目、科研成果和学术活动等业务数据,并在大量的数据基础上进行数据挖掘分析工作.既方便学校进行各种查询,也可以提供各种分析报表。
系统能够为学校科研管理决策提供科学有效的辅助支持。
科研信息化管理的全方位整体解决方案:
系统针对学校的日常管理需要,提出的是一个包括信息发布、办公自动化和科研管理等多方面的整体解决方案。
这样避免了临时的不完整的信息化建设,一次性的满足了科研管理中多方面的需要。
2。
1可行性分析
系统基于windows操作系统环境,在单机上进行测试和使用,主要功能完备,可以运行。
2。
2基本功能需求
1.系统分成三级用户,不同用户登录界面相同,但是具有的功能不同
2.超级管理员能够进行所有的增删查修操作,一般管理员可以对项目等进行增删查修,但是不能对和自己高级同级的用户进行操作
3.实现基本信息的各种操作(如学院,部门,委托单位,论文级别,专家等),需要超级管理员的权限
4.管理员以上可以实现各种项目、论文、著作、专利的输入工作
5.普通用户可以实现项目信息的查询工作
第四章数据流图
树形结构的数据流图如下所示:
第五章系统模块结构图
1.登陆界面:
主要功能点:
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=”管理员”;
else
power="普通用户”;
CMainDlg*maindlg;
maindlg=newCMainDlg();
maindlg->Create(IDD_MAINDLG_DIALOG);
this—〉ShowWindow(SW_HIDE);
maindlg—〉ShowWindow(SW_SHOW);
maindlg->Initial(theApp。
m_pRS.GetFieldString
(2),power,npower);
}
}
else
{
AfxMessageBox("错误的用户名!
”);
}
2.系统主界面
主要功能点:
1.系统功能采用树形菜单映射的方式,分为设置和管理两大部分;
2.设置主要是设置一些基础信息,比如在下拉框中需要选择的信息,比如学院,委托单位,
论文等级等等,需要超级管理员权限;
3.管理是系统主要功能在管理菜单下,普通用户只能查看相关信息,管理员以上可以增删查改相关信息;
4.主界面分成三个部分,树形目录是不会发生改变的,始终显示在界面上;列表也是始终显示在界面上的,根据用户单击树形目录选择相关的信息显示在其中;第三部分,则是根据用户单击的选项来动态变化的,若单击用户管理,则显示用户管理的界面,如下示:
5.系统配有相应的菜单项,工具栏,和状态栏,前两者用来映射树形目录功能,后者则是用来显示用户ID和用户权限以及当前系统时间的。
主要代码如下:
1.List表格刷新函数
m_ctrlList.GetClientRect(&rect);//获取列表控件的矩形
m_ctrlList。
DeleteAllItems();
while(m_ctrlList。
DeleteColumn(0));
//先插入列号
try{
for(i=0;i〈colums;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。
cx<100)
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;j〈colums;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==”用户管理")
{
if(power==1)//是超级管理员的话
strSQL=”selectID,name,password,urightfromuserinfo”;
else
strSQL.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);
horizproj。
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&&cur〈all)
{//先查看选中的是否在显示的范围之内
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,
};
初始化状态栏:
UINTnID;
CRectrect;
GetClientRect(rect);
this—>m_nwndStatusBar.Create(this);
this->m_nwndStatusBar。
SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
m_nwndStatusBar。
MoveWindow(0,rect.bottom—20,rect.right,20);
m_nwndStatusBar.SetPaneStyle(2,SBPS_STRETCH);
m_nwndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NOBORDERS,rect。
right/3—20);
m_nwndStatusBar.SetPaneText(0,"当前用户:
”+user);
m_nwndStatusBar。
SetPaneInfo(1,nID,SBPS_STRETCH|SBPS_NOBORDERS,rect。
right/3-20);
m_nwndStatusBar。
SetPaneText(1,”用户权限:
”+spower);
m_nwndStatusBar。
SetPaneInfo(2,nID,SBPS_STRETCH|SBPS_NOBORDERS,rect.right/3);
SetTimer(1,1000,NULL);
树形目录的初始化:
hRootItem=m_ctrltree。
InsertItem("科研管理系统”,0,2,TVI_ROOT,TVI_LAST);
HTREEITEMhsetup=m_ctrltree.InsertItem(”设置”,1,2,hRootItem,TVI_LAST);
HTREEITEMhmanage=m_ctrltree。
InsertItem(”管理",1,2,hRootItem,TVI_LAST);
HTREEITEMhset_school=m_ctrltree.InsertItem(”学院设置”,2,2,hsetup,TVI_LAST);
HTREEITEMhset_task_type=m_ctrltree.InsertItem("课题类型设置",2,2,hsetup,TVI_LAST);
HTREEITEMhset_article_type=m_ctrltree。
InsertItem(”论文类型设置",2,2,hsetup,TVI_LAST);
HTREEITEMhset_embody_level=m_ctrltree.InsertItem("级别收录设置",2,2,hsetup,TVI_LAST);
HTREEITEMhset_submit_cor=m_ctrltree.InsertItem("委托单位设置”,2,2,hsetup,TVI_LAST);
HTREEITEMhma_horizinal=m_ctrltree。
InsertItem(”横向管理",2,2,hmanage,TVI_LAST);
HTREEITEMhma_verticle=m_ctrltree。
InsertItem(”纵向管理",2,2,hmanage,TVI_LAST);
HTREEITEMhma_article=m_ctrltree.InsertItem("论文管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_monography=m_ctrltree。
InsertItem(”专著管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_patent=m_ctrltree.InsertItem("专利管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_identification=m_ctrltree。
InsertItem(”鉴定管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_reward=m_ctrltree.InsertItem(”获奖管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_expert=m_ctrltree.InsertItem("专家管理",2,2,hmanage,TVI_LAST);
HTREEITEMhma_basinfo=m_ctrltree。
InsertItem("基本信息管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_store=m_ctrltree.InsertItem(”转储管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_user=m_ctrltree。
InsertItem(”用户管理”,2,2,hmanage,TVI_LAST);
时间刷新定时器设置:
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CTimetime;
intweek;
time=CTime:
:
GetCurrentTime();
week=time。
GetDayOfWeek();//获取星期几,注意1为星期天,7为星期六
CStrings=time。
Format("当前时间:
%Y—%m-%d%H:
%M:
%S星期");//月份是小写的,分钟是大写的
switch(week)
{
case1:
s+=”日";break;
case2:
s+=”一”;break;
case3:
s+="二”;break;
case4:
s+="三";break;
case5:
s+="四";break;
case6:
s+=”五";break;
case7:
s+="六”;break;
}
m_nwndStatusBar。
SetPaneText(2,s);
第六章测试与调试
1.测设用例设计
用例ID
问题描述
输入数据
预期输出
实际输出
1
登陆界面,用户名错误
用户名:
aaaa
密码:
aaaa
提示用户名错误
弹出提示框,提示用户名错误(图c_1)
2
登陆界面,没有任何信息
用户名:
空
密码:
空
提示为空
弹出提示框,提示填写完整后再登陆(图c_2)
3
登陆界面,密码错误
用户名:
admin
密码:
admi
提示密码错误
弹出提示框,提示密码错误(图c_3)
4
登陆界面,全部正确,超级管理员
用户名:
admin
密码:
admin
进入主界面状态栏显示“超级管理员”
进入主界面状态栏显示“超级管理员”
5
登陆界面,全部正确,一般管理员
用户名:
rsq
密码:
342601
进入主界面状态栏显示“管理员”
进入主界面状态栏显示“管理员”,沿树形目录打开“用户管理”时,用户权限位是“普通用户"
6
登陆界面,全部正确,普通用户
用户名:
PT
密码:
PT
进入主界面状态栏显示“普通用户”
进入主界面状态栏显示“普通用户”,沿树形目录打开“用户管理"时,用户权限位是“普通用户",且没有增加和删除功能
用例ID
问题描述
输入数据
预期输出
实际输出
7
主功能模块,增加用户,以超级管理员身份登陆
用户名:
ren
密码:
ren
用户姓名:
ren
用户权限:
普通用户
提示:
增加用户成功,数据库中用户记录增加一条
提示:
增加用户成功(图c_4),数据库中用户记录增加一条
8
主功能模块,增加用户,以超级管理员身份登陆
用户名:
sheng
密码:
sheng
用户姓名:
sheng
用户权限:
普通用户
资料不完整,增加用户失败
提示:
增加失败,资料不完整(图c_5)
9
主功能模块,删除用户,管理员身份登陆
在list框中选择一条要删除的记录,单击删除
删除成功,数据库中减少一条记录
提示:
成功删除(图c_6)
10
主功能模块,修改用户信息,普通用户登陆
列表框中之后自己的信息,单击选中,修改信息后,选择“修改”
修改成功,数据库中的数据发生相应改变
提示:
修改成功,数据库中的书库发生相应变化(图c_7)
11
主功能模块,修改用户信息,普通用户登陆
列表框中之后自己的信息,单击选中,修改信息,使得用户姓名不全,单击“修改”按钮
修改失败
提示:
修改失败,资料不完整(图c_8);
12
主功能模块,单击树形控件中的其他项目,检查界面发生的变化
在界面为用户管理界面时,单击“纵向管理”
界面发生改变,详细信息部分变成纵向管理的界面,同时,列表框中的数据变成纵向项目的数据
界面发生改变,详细信息部分变成纵向管理的界面,同时,列表框中的数据变成纵向项目的数据