软工导论实验报告健康管理系统的设计与实现Word文件下载.docx
《软工导论实验报告健康管理系统的设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《软工导论实验报告健康管理系统的设计与实现Word文件下载.docx(32页珍藏版)》请在冰点文库上搜索。
(1)支持的终端数:
1。
(2)支持的并行操作的使用者数:
3-10,根据计算机内存和CPU决定。
(3)处理的文件和记录数:
数据库文件*1,记录根据操作决定。
(4)根据软件提示进行输入,否则会提示出错
5.系统界面与接口需求
5.1界面需求
界面的原则要求,如方便、简洁、美观、一致等。
整个系统的界面风格定义,某些功能模块的特殊的界面要求。
(1)输入设备:
键盘、鼠标;
(2)输出设备:
显示器;
(3)显示风格:
对话框;
(4)显示方式:
1024*768;
(5)输出格式:
对话框中的字符集。
5.2接口需求
(1)用户接口
采用对话框式的界面,结合菜单设计,并且采用智能提示,给用户提供最大的便利和最好的操作可行性。
支持用键盘和鼠标同时操作。
(2)软件接口
运行环境:
windowsxp/windows7/windows8
数据库连接:
access2007、ADO动态链接库
6.可行性分析
1、技术可行性
目前能够通过VC++6.0进行系统的程序编写;
能够通过ADO方法连接ACCESS数据库,并且对其进行操作(增删改查);
2、操作可行性
系统能够提示第一次使用本系统的用户如何操作,并且界面简单大方,因此具有很好的操作可行性。
3、经济可行性
开发成本忽略不计。
二、系统设计
1.引言
本章对该文档的目的、功能范围、术语、相关文档、参考资料、版本更新进行说明。
1.1目的
本文档的目旨在推动软件工程的规范化,使设计人员遵循统一的概要设计书写规范,节省制作文档的时间,降低系统实现的风险,做到系统设计资料的规范性与全面性,以利于系统的实现、测试、维护、版本升级等。
1.2命名规则
变量对象命名规则:
根据变量的实际意义命名,如姓名:
name;
年龄:
age;
身高:
height;
体重:
weight。
数据库对象命名规则:
根据字段的实际意义命名,但不能使用数据库的保留关键字(否则会出错)。
如账号:
username;
密码:
password1(防止使用保留关键字)。
2.系统设计
2.1方案设计
选择方案1.
2.2软件结构设计
层次图:
本系统包含两个主要模块,用户管理模块和健康管理模块。
用户管理模块包含账户管理和个人信息管理,账户管理包含三个功能:
注册、登录、改密码;
个人信息管理提供一个功能:
更改个人信息。
健康管理模块提供三个功能:
安排三餐、安排运动、实时提醒。
2.3数据库设计
1、数据库文件:
一个文件:
user.mdb;
2、表:
用户信息表一张、三餐安排表若干、运动安排表一张、日程安排表若干;
3、用户信息表包括7个字段:
账号、密码、姓名、性别、年龄、身高、体重;
4、三餐安排表各包含3个字段:
早餐、午餐、晚餐;
5、运动安排表各包含个字段:
身高、体重、年龄、性别、运动消耗卡路里量。
2.4详细设计
各个功能模块间传递用户账号的方式:
建立临时的TXT文件,在登录成功时保存账号,进而在调用其他模块时寻找到账号。
三、系统实现
1、编程环境概述
编程环境:
VC++6.0(MFC程序)
数据库:
access2007(连接方法:
ADO)
操作系统:
windows7
2、程序源代码
2.1三餐安排功能模块源代码
1.描述
1.1代码功能描述:
实时更新对用户安排的三餐信息以及BMI指数。
1.2代码描述:
(自然语言)
开始;
读取用户账号;
打开数据库;
读取数据库中用户信息表的内容;
读取所有的用户信息;
If(用户第一次使用本软件)打开用户信息更改界面;
If(身高或体重数据为空)返回,结束;
根据身高体重计算BMI指数;
在主界面显示BMI指数;
根据BMI指数打开对应的三餐安排数据库表;
读取安排信息,并且写入对应的列表控件中;
关闭数据库和其他文件;
结束。
2.代码(共154行,包括必要的空行)
voidCMyDlg:
:
OnTimer(UINTnIDEvent)
{
CStringfilename="
D:
\\user.txt"
;
CStdioFilefile;
file.Open(filename,CFile:
modeRead);
//用只读方式打开临时TXT文件,以便读取user的ID
CStringuser;
file.ReadString(user);
_ConnectionPtrm_pConnection;
_variant_tRecordsAffected;
_RecordsetPtrm_pRecordset;
//设置操作数据库的ADO对象指针
//下面是打开数据库
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->
Open("
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=user.mdb"
"
"
adModeUnknown);
}
catch(_com_errore)
CStringerrormessage;
errormessage.Format("
打开数据库失败!
\r错误信息:
%s"
e.ErrorMessage());
AfxMessageBox(errormessage);
return;
//下面读取数据库(用户信息)中的内容
try
{
m_pRecordset.CreateInstance("
ADODB.Recordset"
);
charstrcmd[1024];
sprintf(strcmd,"
select*fromusertable"
m_pRecordset=m_pConnection->
Execute(strcmd,&
RecordsAffected,adCmdText);
//将usertable表里面的所有数据读取到recordset这个东西里面,以后就直接用这个东西操作表了
错误!
}
//下面寻找对应的用户信息
_variant_ttheuser,theheight,theweight,theage,thename,thesex;
CStringtuser,theight,tweight,tname,tage,tsex;
while(!
m_pRecordset->
adoEOF)//用while循环直到把这个表读完,即做一次遍历
theuser=m_pRecordset->
GetCollect("
username"
theheight=m_pRecordset->
身高(厘米)"
theweight=m_pRecordset->
体重(斤)"
theage=m_pRecordset->
年龄"
thesex=m_pRecordset->
性别"
//先用_variant_t这个变量读取数据库中的字符串
thename=m_pRecordset->
姓名"
if(theuser.vt==VT_NULL)tuser="
elsetuser=theuser.bstrVal;
if(thename.vt==VT_NULL)tname="
elsetname=thename.bstrVal;
if(theheight.vt==VT_NULL)theight="
elsetheight=theheight.bstrVal;
if(theweight.vt==VT_NULL)tweight="
elsetweight=theweight.bstrVal;
if(thesex.vt==VT_NULL)tsex="
elsetsex=thesex.bstrVal;
if(theage.vt==VT_NULL)tage="
elsetage=theage.bstrVal;
//然后把_variant_t类型强制转换为CString类
if(tuser==user)break;
//退出循环
m_pRecordset->
MoveNext();
//如果当前所指的用户名不对,就指向下一个,直到最后一个
if(tweight=="
&
theight=="
tage=="
tsex=="
tname=="
)
KillTimer
(1);
MessageBox("
"
file.Close();
CInformationdlg;
dlg.DoModal();
SetTimer(1,150,NULL);
file.Open(filename,CFile:
file.ReadString(user);
||theight=="
)return;
intheight,weight;
height=_ttoi(theight);
weight=_ttoi(tweight);
//BMI指数单位:
kg/m^2
bmi=((float)weight/2)/pow((float)height/100,2);
CStringstr;
str.Format("
%f"
bmi);
SetDlgItemText(IDC_EDIT2,str);
//把数据库中的三餐表格插入表格中(按三个等级分)
//先读取数据库(安排一日三餐的表格)中的内容
if(bmi<
18.5)sprintf(strcmd,"
select*frommealsforthin"
22.9&
bmi>
select*frommealsfornormal"
if(bmi>
22.9)sprintf(strcmd,"
select*frommealsforfat"
m_pRecordset=m_pConnection->
//下面把三餐安排写入列表控件
intn=0;
MoveFirst();
adoEOF)
n++;
//记录的总数,用n表示
m_pRecordset->
}//记录表的总记录数,为以后的添加功能做准备
_variant_tthebreakfast,thenoon,thedinner;
CStringtbreakfast,tnoon,tdinner;
intindex=0;
m_list.DeleteAllItems();
thebreakfast=m_pRecordset->
breakfast"
thenoon=m_pRecordset->
noon"
thedinner=m_pRecordset->
dinner"
if(thebreakfast.vt==VT_NULL)tbreakfast="
elsetbreakfast=thebreakfast.bstrVal;
if(thenoon.vt==VT_NULL)tnoon="
elsetnoon=thenoon.bstrVal;
tdinner=thedinner.bstrVal;
if(thedinner.vt==VT_NULL)tdinner="
elsetdinner=thedinner.bstrVal;
m_list.InsertItem(index,tbreakfast);
m_list.SetItemText(index,0,tbreakfast);
m_list.SetItemText(index,1,tnoon);
m_list.SetItemText(index,2,tdinner);
index++;
}//用这个循环往列表中写入数据
file.Close();
}
2.1登录功能模块源代码
通过访问数据库中的用户信息进行登录。
1.2代码描述(自然语言)
读取输入的账号和密码;
打开账户信息数据库;
读取数据库中所有的账号和对应的密码;
在所有账号中寻找用户输入的账号;
If(没有找到匹配的账号)提示,返回;
If(密码正确)提示成功,打开主程序,将账号写入user.txt用于后续操作;
Else提示密码错误,返回;
关闭数据库;
2.代码(78行,无空行)
voidCLogin:
OnOK()
CStringpassword;
GetDlgItemText(IDC_user,user);
GetDlgItemText(IDC_password,password);
//打开数据库
//这两行代码用来打开数据库,具体含义不懂,但是文件名要写对,打开方式不用管
//如果出错则返回
//读取数据库的内容
_variant_ttheuser,thepassword;
CStringtuser,tpassword;
thepassword=m_pRecordset->
password1"
tuser=(TCHAR*)(_bstr_t)theuser;
tpassword=(TCHAR*)(_bstr_t)thepassword;
//如果找到用户名,则退出循环
}
if(tuser!
=user){MessageBox("
此用户不存在!
提示"
return;
if(tpassword==password)//如果密码正确就打开程序
CStringfilename="
CStdioFilefile;
modeCreate|CFile:
modeWrite);
//创建TXT文件
file.SeekToBegin();
file.WriteString(user);
//把用户名写入txt//如果没有找到输入的用户名,则说明用户还没有注册,或者用户名输错了
//必须关闭,不然没有保存,会出现致命错误!
successed"
CDialog:
OnOK();
CMyDlgdlg;
else
{MessageBox("
密码错误!
Close();
m_pRecordset=NULL;
m_pConnection=NULL;
四、系统测试
1.概述
本次测试将对两个功能模块进行详细测试,分别是修改密码模块和安排三餐模块。
2.测试
2.1单元测试
表5-1测试模块清单
编号
模块中文名
模块功能简述
接口简述
M1-3
修改密码
提供修改密码的功能
对话框
M2-1
安排三餐
为用户安排三餐
2.2测试报告
模块一
程序流程如下图
环形复杂度:
3
测试用例设计
(已有用户名为admin,密码为123456的账户)
输入数据
预期输出
说明
测试用例1
旧密码:
123,新密码:
jdfohewk,确认密码:
提示:
密码错误
旧密码为123456,输入错误
测试用例2
123456,新密码:
修改成功
旧密码正确,新密码=确认密码
测试用例3
123
修改失败,请确认两次密码输入一致
旧密码正确,新密码!
=确认密码
一、输入条件
1、条件1:
旧密码错误,新密码=确认密码;
路径:
1→2→3→4→5→6→5
2、条件2:
旧密码正确,新密码=确认密码;
1→2→3→4→5→6→7→8→9
3、条件3:
=确认密码。
1→2→3→4→5→6→7→5
二、输出内容
1、提示:
密码错误。
2、修改成功。
3、提示:
两次新密码不一致。
三、测试结果:
成功,模块没有问题。
四、测试人:
肖飞。
模块二
1
1→2→3→4→5→6→7
测试结果:
工作正常
测试人:
肖飞
3.系统主要运行界面
4.系统测试结论
测试日期:
2016.11.12
测试地点:
软件学院机房
测试环境:
vc++6.0;