软件工程实验报告科研管理系统文档格式.docx
《软件工程实验报告科研管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程实验报告科研管理系统文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
科研信息化管理的全方位整体解决方案:
系统针对学校的日常管理需要,提出的是一个包括信息发布、办公自动化和科研管理等多方面的整体解决方案.这样避免了临时的不完整的信息化建设,一次性的满足了科研管理中多方面的需要。
2。
1可行性分析
系统基于windows操作系统环境,在单机上进行测试和使用,主要功能完备,可以运行。
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
错误的用户名!
2.系统主界面
主要功能点:
1.系统功能采用树形菜单映射的方式,分为设置和管理两大部分;
2.设置主要是设置一些基础信息,比如在下拉框中需要选择的信息,比如学院,委托单位,
论文等级等等,需要超级管理员权限;
3.管理是系统主要功能在管理菜单下,普通用户只能查看相关信息,管理员以上可以增删查改相关信息;
4.主界面分成三个部分,树形目录是不会发生改变的,始终显示在界面上;
列表也是始终显示在界面上的,根据用户单击树形目录选择相关的信息显示在其中;
第三部分,则是根据用户单击的选项来动态变化的,若单击用户管理,则显示用户管理的界面,如下示:
5.系统配有相应的菜单项,工具栏,和状态栏,前两者用来映射树形目录功能,后者则是用来显示用户ID和用户权限以及当前系统时间的。
主要代码如下:
1.List表格刷新函数
m_ctrlList。
GetClientRect(&
rect);
//获取列表控件的矩形
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;
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())
InsertItem(i,”%d”,i);
for(j=0;
j〈colums;
j++)
{
m_ctrlList。
SetItemText(i,j,theApp.m_pRS。
GetFieldString(j));
theApp。
MoveNext();
i++;
catch(。
.。
)
数据库读取失败!
2.选择相应窗口函数:
CStringstrText,strSQL;
HTREEITEMhTreeItem;
hTreeItem=m_ctrltree.GetSelectedItem();
strText=m_ctrltree.GetItemText(hTreeItem);
if(strText==”用户管理"
if(power==1)//是超级管理员的话
strSQL=”selectID,name,password,urightfromuserinfo”;
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。
patent.ShowWindow(SW_HIDE);
elseif(strText=="
横向管理”)
userinfo.ShowWindow(SW_HIDE);
horizproj。
ShowWindow(SW_SHOW);
ShowWindow(SW_HIDE);
elseif(strText==”纵向管理"
strSQL="
select*fromvertiproj"
;
userinfo.ShowWindow(SW_HIDE);
article.ShowWindow(SW_HIDE);
论文管理”)
userinfo。
vertiproj.ShowWindow(SW_HIDE);
article.ShowWindow(SW_SHOW);
patent.ShowWindow(SW_HIDE);
elseif(strText==”专著管理”)
compose.ShowWindow(SW_SHOW);
elseif(strText==”专利管理”)
{
horizproj.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。
elseif(compose.IsWindowVisible())
compose.Display(id);
elseif(patent。
IsWindowVisible())
patent。
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);
SetPaneText(0,”当前用户:
”+user);
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。
委托单位设置"
,2,2,hsetup,TVI_LAST);
HTREEITEMhma_horizinal=m_ctrltree。
横向管理"
2,2,hmanage,TVI_LAST);
HTREEITEMhma_verticle=m_ctrltree.InsertItem("
纵向管理"
HTREEITEMhma_article=m_ctrltree。
论文管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_monography=m_ctrltree。
InsertItem(”专著管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_patent=m_ctrltree。
专利管理”,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。
专家管理”,2,2,hmanage,TVI_LAST);
HTREEITEMhma_basinfo=m_ctrltree。
基本信息管理”,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+="
一"
case3:
二"
case4:
三"
break;
case5:
四"
case6:
s+=”五”;
case7:
s+=”六"
SetPaneText(2,s);
第六章测试与调试
1.测设用例设计
用例ID
问题描述
输入数据
预期输出
实际输出
1
登陆界面,用户名错误
用户名:
aaaa
密码:
提示用户名错误
弹出提示框,提示用户名错误(图c_1)
2
登陆界面,没有任何信息
空
提示为空
弹出提示框,提示填写完整后再登陆(图c_2)
3
登陆界面,密码错误
admin
密码:
admi
提示密码错误
弹出提示框,提示密码错误(图c_3)
4
登陆界面,全部正确,超级管理员
进入主界面状态栏显示“超级管理员”
进入主界面状态栏显示“超级管理员"
5
登陆界面,全部正确,一般管理员
rsq
342601
进入主界面状态栏显示“管理员"
,沿树形目录打开“用户管理”时,用户权限位是“普通用户”
6
登陆界面,全部正确,普通用户
用户名:
PT
进入主界面状态栏显示“普通用户”
进入主界面状态栏显示“普通用户”,沿树形目录打开“用户管理”时,用户权限位是“普通用户”,且没有增加和删除功能
7
主功能模块,增加用户,以超级管理员身份登陆
ren
用户姓名:
用户权限:
普通用户
提示:
增加用户成功,数据库中用户记录增加一条
增加用户成功(图c_4),数据库中用户记录增加一条
8
sheng
用户姓名:
资料不完整,增加用户失败
提示:
增加失败,资料不完整(图c_5)
9
主功能模块,删除用户,管理员身份登陆
在list框中选择一条要删除的记录,单击删除
删除成功,数据库中减少一条记录
成功删除(图c_6)
10
主功能模块,修改用户信息,普通用户登陆
列表框中之后自己的信息,单击选中,修改信息后,选择“修改"
修改成功,数据库中的数据发生相应改变
修改成功,数据库中的书库发生相应变化(图c_7)
11
列表框中之后自己的信息,单击选中,修改信息,使得用户姓名不全,单击“修改”按钮
修改失败
修改失败,资料不完整(图c_8);
12
主功能模块,单击树形控件中的其他项目,检查界面发生的变化
在界面为用户管理界面时,单击“纵向管理”
界面发生改变,详细信息部分变成纵向管理的界面,同时,列表框中的数据变成纵向项目的数据
13
主功能界面初始化数据
单击“纵