软工导论实验报告-健康管理系统的设计与实现_第1页
软工导论实验报告-健康管理系统的设计与实现_第2页
软工导论实验报告-健康管理系统的设计与实现_第3页
软工导论实验报告-健康管理系统的设计与实现_第4页
软工导论实验报告-健康管理系统的设计与实现_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安交通大学软件工程导论作业题目:健康管理系统的设计与实现软件工程jdfohewk提交日期:2016/11/13目录一、需求分析 41.项目目标概述 42.问题初始分析 42.1场景描述 42.2初始功能提取 43.系统功能分析建模论述 53.1系统流程图 53.2功能模型(数据流图) 63.3数据模型(实体-关系图) 63.4行为模型(状态转换图) 73.5层次方框图(描绘产品的数据结构) 74.系统性能需求 84.1时间要求 84.2空间要求 85.系统界面与接口需求 85.1界面需求 85.2接口需求 96.可行性分析 9二、系统设计 91.引言 91.1目的 91.2命名规则 102.系统设计 102.1方案设计 102.2软件结构设计 102.3数据库设计 112.4详细设计 11三、系统实现 151、 编程环境概述 152、 程序源代码 152.1三餐安排功能模块源代码 152.1登录功能模块源代码 22四、系统测试 251.概述 252.测试 252.1单元测试 252.2测试报告 253.系统主要运行界面 274.系统测试结论 29五、实验总结 29参考文献: 29一、需求分析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文件,在登录成功时保存账号,进而在调用其他模块时寻找到账号。三、系统实现编程环境概述编程环境:VC++6.0(MFC程序)数据库:access2007(连接方法:ADO)操作系统:windows7程序源代码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=="")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); //把数据库中的三餐表格插入表格中(按三个等级分) //先读取数据库(安排一日三餐的表格)中的内容 try { m_pRecordset.CreateInstance("ADODB.Recordset"); charstrcmd[1024]; if(bmi<18.5)sprintf(strcmd,"select*frommealsforthin"); if(bmi<22.9&&bmi>18.5)sprintf(strcmd,"select*frommealsfornormal"); if(bmi>22.9)sprintf(strcmd,"select*frommealsforfat"); m_pRecordset=m_pConnection->Execute(strcmd,&RecordsAffected,adCmdText); //将usertable表里面的所有数据读取到recordset这个东西里面,以后就直接用这个东西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("错误!\r错误信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} //下面把三餐安排写入列表控件 intn=0; m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { n++;//记录的总数,用n表示 m_pRecordset->MoveNext(); }//记录表的总记录数,为以后的添加功能做准备 _variant_tthebreakfast,thenoon,thedinner; CStringtbreakfast,tnoon,tdinner; m_pRecordset->MoveFirst(); intindex=0; m_list.DeleteAllItems(); while(!m_pRecordset->adoEOF) { thebreakfast=m_pRecordset->GetCollect("breakfast"); thenoon=m_pRecordset->GetCollect("noon"); thedinner=m_pRecordset->GetCollect("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++; m_pRecordset->MoveNext(); }//用这个循环往列表中写入数据 file.Close();}2.1登录功能模块源代码1.描述1.1代码功能描述:通过访问数据库中的用户信息进行登录。1.2代码描述(自然语言)开始;读取输入的账号和密码;打开账户信息数据库;读取数据库中所有的账号和对应的密码;在所有账号中寻找用户输入的账号;If(没有找到匹配的账号)提示,返回;If(密码正确)提示成功,打开主程序,将账号写入user.txt用于后续操作;Else提示密码错误,返回;关闭数据库;结束。2.代码(78行,无空行)voidCLogin::OnOK(){ CStringuser; CStringpassword; GetDlgItemText(IDC_user,user); GetDlgItemText(IDC_password,password); _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,thepassword; CStringtuser,tpassword; while(!m_pRecordset->adoEOF)//用while循环直到把这个表读完,即做一次遍历 { theuser=m_pRecordset->GetCollect("username"); thepassword=m_pRecordset->GetCollect("password1"); tuser=(TCHAR*)(_bstr_t)theuser; tpassword=(TCHAR*)(_bstr_t)thepassword; if(tuser==user)break; //如果找到用户名,则退出循环 m_pRecordset->MoveNext();//如果当前所指的用户名不对,就指向下一个,直到最后一个 } if(tuser!=user){MessageBox("此用户不存在!","提示");return;} if(tpassword==password)//如果密码正确就打开程序 { CStringfilename="D:\\user.txt"; CStdioFilefile; file.Open(filename,CFile::modeCreate|CFile::modeWrite);//创建TXT文件 file.SeekToBegin(); file.WriteString(user);//把用户名写入txt//如果没有找到输入的用户名,则说明用户还没有注册,或者用户名输错了 file.Close();//必须关闭,不然没有保存,会出现致命错误! MessageBox("successed"); CDialog::OnOK(); CMyDlgdlg; dlg.DoModal(); } else { MessageBox("密码错误!","提示");return;}m_pRecordset->Close();m_pRecordset=NULL;m_pConnection->Close();m_pConnection=NULL;}四、系统测试1.概述本次测试将对两个功能模块进行详细测试,分别是修改密码模块和安排三餐模块。2.测试2.1单元测试表5-1测试模块清单编号模块中文名模块功能简述接口简述M1-3修改密码提供修改密码的功能对话框M2-1安排三餐为用户安排三餐对话框2.2测试报告模块一程序流程如下图环形复杂度:3测试用例设计(已有用户名为admin,密码为123456的账户)输入数据预期输出说明测试用例1旧密码:123,新密码:jdfohewk,确认密码:jdfohewk提示:密码错误旧密码为123456,输入错误测试用例2旧密码:123456,新密码:jdfohewk,确认密码:jdfohewk提示:修改成功旧密码正确,新密码=确认密码测试用例3旧密码:123456,新密码:jdfohewk,确认密码:123提示:修改失败,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论