软件工程试验报告.docx

上传人:b****1 文档编号:10691651 上传时间:2023-05-27 格式:DOCX 页数:18 大小:407.30KB
下载 相关 举报
软件工程试验报告.docx_第1页
第1页 / 共18页
软件工程试验报告.docx_第2页
第2页 / 共18页
软件工程试验报告.docx_第3页
第3页 / 共18页
软件工程试验报告.docx_第4页
第4页 / 共18页
软件工程试验报告.docx_第5页
第5页 / 共18页
软件工程试验报告.docx_第6页
第6页 / 共18页
软件工程试验报告.docx_第7页
第7页 / 共18页
软件工程试验报告.docx_第8页
第8页 / 共18页
软件工程试验报告.docx_第9页
第9页 / 共18页
软件工程试验报告.docx_第10页
第10页 / 共18页
软件工程试验报告.docx_第11页
第11页 / 共18页
软件工程试验报告.docx_第12页
第12页 / 共18页
软件工程试验报告.docx_第13页
第13页 / 共18页
软件工程试验报告.docx_第14页
第14页 / 共18页
软件工程试验报告.docx_第15页
第15页 / 共18页
软件工程试验报告.docx_第16页
第16页 / 共18页
软件工程试验报告.docx_第17页
第17页 / 共18页
软件工程试验报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

软件工程试验报告.docx

《软件工程试验报告.docx》由会员分享,可在线阅读,更多相关《软件工程试验报告.docx(18页珍藏版)》请在冰点文库上搜索。

软件工程试验报告.docx

软件工程试验报告

《软件工程上机实验》

实验报告书

——科研管理系统

 

专业班级

计算机科学与技术074班

学号

079074120

姓名

任胜强

指导教师

方木云

 

安徽工业大学

计算机学院

第一章简介

此次试验,要求完成可视化的科研管理系统。

将自己在软件工程课程中学习到的软件设计的知识运用的实际中,加深对知识的理解,也增强自己动手的实践能力。

我采用的是运用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.普通用户可以实现项目信息的查询工作

第四章数据流图

树形结构的数据流图如下所示:

第五章系统模块结构图

1.登陆界面:

主要功能点:

1.从数据库中读取数据,看用户名和密码的正确性;

2.如果用户名输入不正确,提示用户名输入错误;

3.如果密码输入不正确,提示密码输入错误;

4.如果登陆次数多于五次,自动退出系统;

5.用户名和密码正确,则进入系统主界面。

主要代码:

if(m_strUsername.IsEmpty()||m_strPassword.IsEmpty())

{

AfxMessageBox("请将资料填写完整再登录!

");

return;

}

theApp.id=m_strUsername;

Username+"'");

{

str.TrimLeft();

str.TrimRight();

if(theApp.trytime>=5)

{//如果登录次数超过五次不成功的话,则退出系统

PostQuitMessage(WM_QUIT);

}

if(str!

=m_strPassword)

{

theApp.trytime++;

AfxMessageBox("错误的密码!

");

}

else

{

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);

}

}

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

{

ame(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;

{

m_ctrlList.InsertItem(i,"%d",i);

for(j=0;j

{

}

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);

}

RefreshList();

3.单击list控件中相应项在下面的子窗体中显示详细信息的函数:

CStringid;

intcur=m_ctrlList.GetSelectionMark();

intall=m_ctrlList.GetItemCount();

if(cur>=0&&cur

{//先查看选中的是否在显示的范围之内

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

主功能模块,单击树形控件中的其他项目,检查界面发生的变化

在界面为用户管理界面时,单击“纵向管理”

界面发生改变,详细信息部分变成纵向管理的界面,同时,列表框中的数据变成纵向项目的数据

界面发生改变,详细信息部分变成纵向管理的界面,同时,列表框中的数据变成纵向项目的数据

13

主功能界面初始化数据

单击“纵向管理”

详细信息模块变成“纵向管理”模块的界面,在下来选择框中,委托单位,项目类别,以及参加人的院的待选项为从数据库基础信息中读入的信息

详细信息模块变成“纵向管理”模块的界面,在下来选择框中,委托单位,项目类别,以及参加人的院的待选项为从数据库基础信息中读入的信息

图c_1图c_2图c_3

图c_4图c_5图c_6

图c_7图c_8

2.发现的问题

a.当用户在增加或者删除一条记录后,在列表框中没有及时更新其内容,必须要到树形控件中重新单击一次该内容对应的树形目录,才能刷新。

原因在于子对话框成员函数无法调用父对话框成员函数。

可以通过自己生成一个消息的形式来解决,即为父对话框(系统主界面)设计一个消息,然后每次子窗口增加,修改或删除一条记录后,将这个消息发送给操作系统,让操作系统来通知主界面的及时更新。

b.在设计数据库时,为了体现各表间的关系,外键设置的比较复杂。

但是,在用系统时,经常会发生破坏这种依赖关系的操作,导致操作失败。

不知道能否找到一个权衡点,来平衡这种操作。

c.上课时,老师说道,在显示数据库中信息时,不要一次性全部显示,而是选择前面多少条。

这里我没有实现这样的功能,而且不知道该怎样实现。

我们在数据库学习中也没有涉及到这一方面的内容。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2