软工导论实验报告健康管理系统的设计与实现.docx
《软工导论实验报告健康管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《软工导论实验报告健康管理系统的设计与实现.docx(28页珍藏版)》请在冰豆网上搜索。
软工导论实验报告健康管理系统的设计与实现
西安交通大学软件工程导论作业
题目:
健康管理系统的设计与实现
软件工程
jdfohewk
提交日期:
2016/11/13
一、需求分析
1.项目目标概述
该系统旨在为长期工作在电脑前的用户提供日常的作息安排,进而改善用户的作息,从而将生物钟调整至最佳状态,更好地迎接每一天的工作。
2.问题初始分析
2.1场景描述
目前越来越多的白领型工作人员由于缺乏健康管理意识,身体素质大幅度下降,以致于出现各种健康问题。
合理的安排每天的日常行为,可以很有效地改善身体的各种调节,从而能够正常地作息,用最好的状态去完成每天的工作。
因此,开发一种能够帮助长期工作在电脑前的朋友进行自我健康管理的软件是很有必要的。
2.2初始功能提取
本系统意图实现以下功能:
一、初步判断用户的基本身体状况,即根据身高、体重、年龄、性别来判断。
二、帮助用户合理地安排一日三餐。
三、帮助用户合理地安排每天的运动,以达到健身的功效。
四、实时提醒用户进行身体放松。
五、待完善。
3.系统功能分析建模论述
3.1系统流程图
开始由用户输入个人信息,经过处理保存到个人信息数据库,再分别调用三餐安排和运动安排程序。
由运动安排程序生成并显示运动安排,三餐生成程序调用数据库中的内容,显示三餐安排。
3.2功能模型(数据流图)
3.3数据模型(实体-关系图)
每一个用户都拥有一个账户,包含账号和密码,而用户本身信息即他的身体信息,包含年龄、性别、身高、体重。
多个用户可以同时使用一个系统。
3.4行为模型(状态转换图)
打开系统,最初处于登录界面(即闲置),登录成功后,进入主界面。
如果用户第一次使用,会提示用户进行信息登记。
当到达特定时间时,会提示当前应做的事。
当用户修改了他的信息之后,系统会实时的进行相应调整。
3.5层次方框图(描绘产品的数据结构)
4.系统性能需求
4.1时间要求
(1)响应时间:
150ms。
(2)数据库更新时间:
2~4s。
4.2空间要求
(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这个东西里面,以后就直接用这个东西操作表了
}
catch(_com_errore)
{
CStringerrormessage;
errormessage.Format("错误!
\r错误信息:
%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return;
}
//下面寻找对应的用户信息
_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->GetCollect("身高(厘米)");
theweight=m_pRecordset->GetCollect("体重(斤)");
theage=m_pRecordset->GetCollect("年龄");
thesex=m_pRecordset->GetCollect("性别");//先用_variant_t这个变量读取数据库中的字符串
thename=m_pRecordset->GetCollect("姓名");
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:
:
modeRead);
file.ReadString(user);
}
if(tweight==""||theight=="")retur