健康计算器程序实验报告王春泽1班.docx
《健康计算器程序实验报告王春泽1班.docx》由会员分享,可在线阅读,更多相关《健康计算器程序实验报告王春泽1班.docx(16页珍藏版)》请在冰豆网上搜索。
健康计算器程序实验报告王春泽1班
电子工程学院2014
计算机实习
题目:
健康计算器的制作
院(系):
电子工程学院
年级专业:
2012级1班
学生姓名:
王春泽
学号:
2012210812
开始时间:
2014年2月25日
完成时间:
2014年3月13日
健康计算器程序的设计与制作
学生:
王春泽
(北京邮电大学电子工程学院12级1班,学号:
2012210812)
摘要
本健康计算器程序使用java语言编写,能够实现根据用户输入相应参数,计算用户的身体BMI指数和体脂率的功能。
程序面板分为两部分,左半部分为身体BMI指数,输入身高体重即可计算指数值,右半部分为体脂率的测定,输入相关参数,即可得到相应的结果,并且根据结果的不同会有不同的健康提示。
该程序使用jdk1.6的开发环境,开发工具主要使用eclipse,用到的插件有windowbuilder,美工方面主要用到photoshop进行图片编辑美化;
该程序主要用到javaGUI,窗体组件,事件监听等。
关键字:
健康计算器;Java语言;eclipse;GUI。
前言
Java的前身是Oak,它一开始只是被应用于消费性电子产品中。
后来它的开发者们发现它还可以被用于更大范围的Internet上。
1995年,Java语言的名字从Oak编程了Java。
1997年J2SE1.1发布。
1998年J2SE1.2发布,标志Java2的诞生。
十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。
Java的体系结构由Java语言、Javaclass、JavaAPI、Java虚拟机组成。
它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。
Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。
Java的平台标准有JavaME,JavaSE和JavaEE。
Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。
目前在众多的支持Java的开发工具中主要的7有JavaDevelopmentKit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。
其中JavaDevelopmentKit简称JDK是大多开发工具的基础。
以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
在本程序设计中,虽然程序规模较小,内容较少,但出于本人开发android对开发工具eclipse的熟悉度较高,并且对eclipse安装了很多插件,比如windowbuilder等,因此选择目前应用较为广泛的eclipse作为开发工具。
1实验要求
1.1基本要求
设计一个测量身体BMI指数和体脂率的健康计算器,给出数据能进行正确的计算并给出相应的健康提示。
其他要求:
界面美观,操作便捷,程序无BUG,功能有创意。
1.2功能设计
考虑到界面美观,操作便捷,强调良好的用户体验,本倒计时器程序的功能主要体现在以下几个方面:
(1)运行程序后,会进入程序的主界面,左部分版面是计算身体BMI指数,右半部分版面是计算身体体脂率。
(2)BMI指数部分,输入身高和体重基本信息,点击“计算”按钮,弹窗提示计算结果并会显示到程序面板中。
。
(3)体脂率部分,输入选择性别然后输入腰围和体重信息,点击确定,弹窗提示计算结果并显示到程序面板。
(4)程序可重复进行计算。
。
2.概要设计
2.1程序设计思路
在本程序中,设计了一个程序版面和相关按钮以及显示标签。
设计过程中,程序的main类继承了JFrame,其中添加了JPanel,在JPanel面板中又加入了两个面板用于放置两个功能实现用到的组件;在每个面板中分别添加了TextField用于输入用户的身体信息参数,添加按钮JButton并添加相应的响应事件,显示计算结果的标签JLabel,并且在按钮的事件中弹出提示框进行提示。
2.2程序运行界面
(1)初始化界面
(2)计算BMI指数
(3)计算体脂率
2.3模块说明图
(1)
图1
首先创建一个名为HealthCalculator的类并继承JFrame类作为最底层的容器。
(2)
对于创建的HealthCalculator的类,首先要初始化容器,然后在容器中添加相应的组件,并添加相关的程序响应事件。
2.4程序相关说明
整个倒计时程序分为两块:
计算BMI指数和计算体脂率。
(1)启动程序,组件初始化。
(2)在BMI指数部分输入身高体重
(3)在计算按钮的相应事件中获取输入的参数并进行计算,显示结果
(4)在体脂率部分输入腰围和体重。
(5)在按钮的相应事件中获取输入的参数并进行计算,并将结果按要求显示出来。
3.程序详细设计与分析
3.1.声明所需的组件和变量
//定义标签
privateJLabellbBMI,lbHeight,lbWeight1,cmLabel_1,kgLabel_1;//BMI,身高,体重的标签
privateJLabellbResult_1,lbResult_2;//用于显示结果
privateJLabellbTiZhiLv,lbYaoWei,lbWeight2,cmLabel_2,kgLabel_2;//体脂率,腰围,体重的标签
privateJLabellbSex;//性别
//定义文本框
privateJTextFieldtfHeight,tfWeight1,tfYaoWei,tfWeight2;
//定义按钮
privateJButtonokButton1;
privateJButtonokButton2;
//定义单选按钮
privateJRadioButtonsexRadioButton;
//定义面板
JPanelcontentPane,contentPane_2;
//定义变量
floatheight,weight_1,result_1;
floatlength,weight_2;
doubleresult_2;
3.2.BMI指数部分的布局实现
JPanelmpanel=newJPanel();//定义面板
//添加BMI指数标签
lbBMI=newJLabel("BMI\u6307\u6570");
//添加身高标签
lbHeight=newJLabel("身高:
");
//添加身高文本框
tfHeight=newJTextField();
//身高单位标签
cmLabel_1=newJLabel("(\u5355\u4F4D:
cm)");
//体重标签
lbWeight1=newJLabel("体重:
");
//体重文本框
tfWeight1=newJTextField();
3.3体脂率部分的布局实现
JPanelmpanel_2=newJPanel();
//添加体脂率标签
lbTiZhiLv=newJLabel("体脂率");
//添加腰围标签
lbYaoWei=newJLabel("腰围:
");
//添加腰围文本框
tfYaoWei=newJTextField();
//体重文本框
tfWeight2=newJTextField();
//添加性别标签
lbSex=newJLabel("性别:
");
/添加单选框
finalJRadioButtonradioButton_1=newJRadioButton("男性");
finalJRadioButtonradioButton_2=newJRadioButton("女性");
3.4按钮响应事件
(1)BMI计算按钮的响应事件,事件中将文本框的参数取出并进行运算和结果显示。
okButton1.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
height=Float.parseFloat(tfHeight.getText());
weight_1=Float.parseFloat(tfWeight1.getText());
result_1=weight_1/((height/100)*(height/100));
//利用DecimalFormat对数字进行格式化
DecimalFormatdf=newDecimalFormat("###.###");
lbResult_1.setText("BMI指数:
"+df.format(result_1));
Stringmsg;//显示提示用语
if(result_1<18.5)
{
msg="体重过低,请加强营养!
";
}else
if(result_1<=23.9)
{
msg="体重正常,请继续保持!
";
}else
if(result_1<=27.9)
{
msg="体重超重,请注意体重!
";
}
else
{
msg="肥胖!
!
请减肥!
";
}
JOptionPane.showMessageDialog(contentPane,"BMI指数:
"+
df.format(result_1)+"\n"+"健康提示:
"+"\n"+msg,"健康提示",JOptionPane.OK_OPTION);
}
});
(2)为计算体脂率的按钮添加事件监听器
//为第二个按钮添加监听器
okButton2.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
length=Float.parseFloat(tfYaoWei.getText());
weight_2=Float.parseFloat(tfWeight2.getText());
if(radioButton_1.isSelected())
{
doublea=length*0.74;
doubleb=weight_2*0.082+44.74;
doublesum=a-b;
result_2=sum/(weight_2);
}
if(radioButton_2.isSelected())
{
doublea=length*0.74;
doubleb=weight_2*0.082+34.89;
doublesum=a-b;
result_2=sum/(weight_2);
}
//利用DecimalFormat对数字进行格式化
DecimalFormatpercentFormat=newDecimalFormat();
percentFormat.applyPattern("#0.000%");
lbResult_2.setText("体脂率:
"+percentFormat.format(result_2));
//弹出提醒框
JOptionPane.showMessageDialog(contentPane,"体脂率:
"+percentFormat.format(result_2)+
"\n"+"请根据结果注意身体健康!
","体脂率",JOptionPane.OK_OPTION);
}
});
3.5.异常处理
在运行程序代码是有可能会产生异常情况或异常事件,为了避免这种情况,就需要在程序中用到Java异常处理机制。
本程序中选用的异常处理机制是try,catch。
捕获处理异常的第一步是用try选定要监控的异常范围,try后跟随catch代码块。
本程序中没有异常的可能出现,因此没有用到异常处理。
4.测试分析
5.源程序清单
程序源代码(为节省篇幅,只给出关键代码,上面给出过的代码不在重复,用………代替)
packagecom.wangchunze.jiankangjisuanqi;
importjava.awt.Color;
/*测量身体BMI指数和体脂率的健康计算器
*@王春泽
**/
publicclassHealthCalculatorextendsJFrame{
//构造函数
publicHealthCalculator(){
setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭方式
setTitle("健康计算器");
setBounds(300,200,600,400);//尺寸和位置
this.setResizable(false);//不可调整大小
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);//将面板添加到窗体中
contentPane.setLayout(null);//设置窗体为空布局
//initUI();//初始化
/***************BMI指数部分布局***************************/
JPanelmpanel=newJPanel();//定义面板
//设置面板颜色
mpanel.setBackground(newColor(getDefaultCloseOperation()).pink);
mpanel.setBounds(0,0,300,400);
contentPane.add(mpanel);
mpanel.setLayout(null);
//添加BMI指数标签
lbBMI=newJLabel("BMI\u6307\u6570");
……
//添加身高标签
lbHeight=newJLabel("身高:
");
……
//添加身高文本框
…………
…………
//体重单位标签
kgLabel_1=newJLabel("(\u5355\u4F4D:
kg)");
kgLabel_1.setFont(newFont("宋体",Font.BOLD,16));
kgLabel_1.setBounds(140,188,85,30);
mpanel.add(kgLabel_1);
//添加确定按钮
okButton1=newJButton("");
okButton1.setIcon(newImageIcon(HealthCalculator.class.getResource("/drawable/Button_1.png")));
…………
mpanel.add(okButton1);
//添加显示结果标签
lbResult_1=newJLabel("BMI指数:
");
……
JLabelIcon_lb_1=newJLabel();
……
/*****************体脂率部分布局******************************/
JPanelmpanel_2=newJPanel();
//设置面板颜色
mpanel_2.setBackground(newColor(getDefaultCloseOperation()).orange);
mpanel_2.setBounds(300,0,300,400);
contentPane.add(mpanel_2);
mpanel_2.setLayout(null);
//添加体脂率标签
lbTiZhiLv=newJLabel("体脂率");
……
//添加腰围标签
lbYaoWei=newJLabel("腰围:
");
……
………………
………………
//添加单选框
finalJRadioButtonradioButton_1=newJRadioButton("男性");
……
ButtonGroupmButtonGroup=newButtonGroup();
mButtonGroup.add(radioButton_1);
mButtonGroup.add(radioButton_2);
//添加确定按钮
okButton2=newJButton("");
……
mpanel_2.add(okButton2);
//添加显示结果标签
lbResult_2=newJLabel("体脂率:
");
……
/**************************************************************/
//为第一个Button添加监听器
okButton1.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
……
……
});
//为第二个按钮添加监听器
okButton2.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
……
……
});
//设置窗体可见性
this.setVisible(true);//一定要放在最后!
!
!
!
!
!
}
6.实验设计总结
这个健康计算器应该算是所有题目里最简单的一个,不论是从逻辑上还是开发量上。
在第一周的周末大概用了1个多小时做出基本功能,第二周的周末又用了不少的时间调整布局,搜集背景图片,P图,审美观有限,做了半天界面,还是觉得难看……
去年做android开发之前自学过一阵子java,上一次写纯java程序还是在半年前,所以明显感觉有些地方有些生疏,时不时需要翻翻之前博客里记过的笔记。
加上期间写过一阵子android程序,总是容易混淆,比如习惯性的把JButton的事件监听addActionListener()写成android里的setOnClickListener(),感觉知识都学杂了……
实践和理论永远都有很大的差距,就好像觉得线程,GUI这些东西很简单,但实际写程序的时候会发现,一不小心就会出错,通过这次计算机实习,使将我从书本上学习到的理论知识用到了实践上,从而进一步巩固和丰富了我所学过的知识,让我更深层次地认识到Java及其强大的功能。
过程中遇到过很多问题,尤其是文件操作时总是不小心写错个字母,编译器不会报错,而且又很难发现,会浪费一些时间,因此一定要仔细。
总之,通过这次程序设计,大大提高了动手能力,培养了创新思维,是我对计算机程序有了更加深刻的认识,受益匪浅,得益终身。
7.致谢
最后要感谢我的java程序设计的老师给了我这次锻炼的机会,感谢电子工程学院安排的这次计算机实习,因为在这次实习中通过帮人改代码写代码进一步加深了和女同学们的友谊。
感谢所有对我提供帮助的同学们!
参考资料
我的个人C博客
博客园
OSChina