实验8-基于Javabean的三角形测试系统的设计与实现

实验8-基于Javabean的三角形测试系统的设计与实现

实验目的

1.理解并使用 JavaBean 封装数据与业务逻辑;
2.理解 MVC 模式:视图、模型、控制器分离;
3.熟悉 SpringMVC 的基本流程:请求分发、参数接收、模型传递、视图跳转。

系统功能说明

  • 合法性校验:
    是否为正整数、是否满足三角形三边关系;
  • 类型判定:
    锐角 / 直角 / 钝角三角形;
  • 面积计算:
    海伦公式;
  • 异常提示:
    非自然数、边长≤0、不能构成三角形、非数字输入;
  • 结果展示:
    提示信息、三角形类型、面积;
  • 支持返回重新输入

整体架构(MVC)

  • Model(模型):
    Triangle.java(JavaBean,封装三边、结果、判断逻辑)

  • Controller(控制器):
    TriangleController.java(SpringMVC 接收参数、调用模型、跳转视图)

  • View(视图)
    hello.jsp(输入页)、index.jsp(结果页)

实验成果

代码分析

Triangle.java

点击查看代码
package com.triangle;
public class Triangle {
    // 三边
    private int sideA;
    private int sideB;
    private int sideC;

    // 结果信息
    private String resultMsg;   // 提示信息
    private String triangleType;// 三角形类型
    private double area;        // 面积,非三角形默认为0

    // 无参构造(JavaBean规范)
    public Triangle() {}

    // 全参构造
    public Triangle(int sideA, int sideB, int sideC) {
        this.sideA = sideA;
        this.sideB = sideB;
        this.sideC = sideC;
        // 初始化时直接执行判定逻辑
        judgeTriangle();
    }

    /**
     * 核心方法:判定三角形、类型、面积
     */
    public void judgeTriangle() {
        // 1. 判断是否为自然数(边长必须>0)
        if (sideA <= 0 || sideB <= 0 || sideC <= 0) {
            resultMsg = "输入错误:边长必须是正自然数!";
            triangleType = "非三角形";
            area = 0;
            return;
        }

        // 2. 三角形三边规则:任意两边之和大于第三边
        boolean isTriangle = (sideA + sideB > sideC)
                && (sideA + sideC > sideB)
                && (sideB + sideC > sideA);

        if (!isTriangle) {
            resultMsg = "无法构成三角形:不满足两边之和大于第三边!";
            triangleType = "非三角形";
            area = 0;
            return;
        }

        // 3. 可以构成三角形,排序三边 a<=b<=c
        int a = sideA, b = sideB, c = sideC;
        int temp;
        if (a > b) { temp = a; a = b; b = temp; }
        if (a > c) { temp = a; a = c; c = temp; }
        if (b > c) { temp = b; b = c; c = temp; }

        // 4. 判断 锐角/直角/钝角 三角形
        long a2 = (long) a * a;
        long b2 = (long) b * b;
        long c2 = (long) c * c;

        if (a2 + b2 == c2) {
            triangleType = "直角三角形";
            resultMsg = "输入三边可以构成三角形";
        } else if (a2 + b2 > c2) {
            triangleType = "锐角三角形";
            resultMsg = "输入三边可以构成三角形";
        } else {
            triangleType = "钝角三角形";
            resultMsg = "输入三边可以构成三角形";
        }

        // 5. 海伦公式计算面积
        double p = (a + b + c) / 2.0;
        area = Math.sqrt(p * (p - a) * (p - b) * (p - c));
    }
    public int getSideA() {
        return sideA;
    }
    public void setSideA(int sideA) {
        this.sideA = sideA;
    }

    public int getSideB() {
        return sideB;
    }
    public void setSideB(int sideB) {
        this.sideB = sideB;
    }

    public int getSideC() {
        return sideC;
    }
    public void setSideC(int sideC) {
        this.sideC = sideC;
    }

    public String getResultMsg() {
        return resultMsg;
    }
    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

    public String getTriType() {
        return triType;
    }
    public void setTriType(String triType) {
        this.triType = triType;
    }

    public double getArea() {
        return area;
    }
    public void setArea(double area) {
        this.area = area;
    }
}

TriangleController.java

点击查看代码
package com.triangle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class TriangleController extends AbstractController {

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
		// 1. 获取请求参数:三条边长
		String aStr = arg0.getParameter("sideA");
		String bStr = arg0.getParameter("sideB");
		String cStr = arg0.getParameter("sideC");

		// 2. 实例化JavaBean
		Triangle triBean = new Triangle();

		// 3. 字符串转数字,防止空参数
		try {
			int a = Integer.parseInt(aStr);
			int b = Integer.parseInt(bStr);
			int c = Integer.parseInt(cStr);

			// 给JavaBean赋值
			triBean.setSideA(a);
			triBean.setSideB(b);
			triBean.setSideC(c);

			// 执行判定与计算逻辑
			triBean.calculate();
		} catch (NumberFormatException e) {
			// 输入非数字时的异常处理
			triBean.setResultMsg("错误:请输入合法自然数!");
			triBean.setTriType("非三角形");
			triBean.setArea(0);
		}

		// 4. 封装数据到 ModelAndView,跳转结果页面
		ModelAndView mv = new ModelAndView();
		// 存入JavaBean,供JSP取值
		mv.addObject("triangle", triBean);
		// 指定跳转视图名
		mv.setViewName("index");

		return mv;
	}

}

hello.jsp

点击查看代码
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>三角形计算器</title>
<style>
    body {
        font-family: "Microsoft YaHei", sans-serif;
        text-align: center;
        margin-top: 100px;
    }
    h1 {
        font-size: 48px;
        font-weight: bold;
        margin-bottom: 50px;
    }
    .form-item {
        margin: 20px auto;
        font-size: 24px;
    }
    input[type="text"] {
        font-size: 20px;
        padding: 15px;
        width: 400px;
        border: 1px solid #ccc;
        border-radius: 4px;
        margin-left: 10px;
    }
    button {
        background-color: #1677ff;
        color: white;
        border: none;
        padding: 18px 60px;
        font-size: 22px;
        border-radius: 6px;
        cursor: pointer;
        margin-top: 20px;
    }
    button:hover {
        background-color: #0d5fcc;
    }
</style>
</head>
<body>
    <h1>三角形计算器</h1>
    <!-- 把 action 改成自己的控制器路径 -->
    <form  method="post" action="hello.do">
        <div class="form-item">
            边长A:
              <input name="sideA" type="text" id="sideA" placeholder="请输入正整数" size="45" />
        </div>
        <div class="form-item">
            边长B:
            <input name="sideB" type="text" id="sideB" placeholder="请输入正整数" size="45" />
        </div>
        <div class="form-item">
            边长C:
            <input name="sideC" type="text" id="sideC" placeholder="请输入正整数" size="45" />
        </div>
        <p>
            <input type="submit" name="提交" id="提交" value="计算三角形" 
                   style="background-color:#1677ff; color:white; border:none; padding:18px 60px; font-size:22px; border-radius:6px; cursor:pointer;" />
        </p>
    </form>
</body>
</html>

index.jsp

点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>三角形计算器 - 结果页面</title>
    <style>
        .container { width: 400px; margin: 100px auto; text-align: center; }
        .result { margin: 20px 0; padding: 15px; border: 1px solid #ddd; border-radius: 4px; }
        .back-btn { padding: 8px 20px; background: #28a745; color: white; text-decoration: none; border-radius: 4px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>计算结果</h1>
        <div class="result">
            <p><strong>提示信息:</strong>${triangle.resultMsg}</p>
            <p><strong>三角形类型:</strong>${triangle.triangleType}</p>
            <p><strong>面积:</strong>${triangle.area}</p>
        </div>
        <a href="${pageContext.request.contextPath}/Triangle/view/input.do" class="back-btn">返回重新输入</a>
    </div>
</body>
</html>

结果介绍

  • 输入页

image

  • 锐角三角形

image

  • 直角三角形

image

  • 钝角三角形

image

  • 非法输入:两边之和不大于第三边

image

  • 异常:非数字 / 负数

image
image

网站访问链接:http://47.111.183.105:8080/Trangle/hello.jsp

问题解决

问题一:页面与请求编码不统一导致中文乱码

通过统一设置UTF-8编码并配置编码过滤器解决

问题二:页面或请求地址配置不当引发404错误

核对页面存放路径、表单提交地址与Spring配置文件中的控制器路径后恢复正常

问题三:传统控制器缺少必要的处理器映射器与适配器,造成请求无法执行

补充对应配置即可修复

问题四:三角形判定逻辑不完善、三边未排序,出现类型判断与面积计算错误

优化判断条件、先对边长排序并按要求将非三角形面积置零后功能正常

问题五:输入非数字内容触发类型转换异常

通过try-catch捕获异常并给出提示;此外还存在页面跳转相对路径错误的问题,修正路径后可正常返回输入页面

实验总结

这次实验完成了 JavaBean 与 SpringMVC 的三角形判定系统设计,实现了边长输入、合法性校验、三角形类型判断及面积计算功能,加深了对 JavaBean、MVC 模式和 SpringMVC 框架的理解。
实验中,我们按照 JavaBean 规范编写实体类,封装边长、结果信息、类型和面积,并在类中完成自然数校验、三边关系判断、三角形分类及海伦公式求面积等逻辑。通过 SpringMVC 控制器接收前端参数,调用 JavaBean 处理业务,再将结果传递到 JSP 页面展示,实现了视图、模型、控制器的分离,降低了耦合度。
测试覆盖了合法输入、非自然数、非三角形等场景,系统运行稳定。过程中也遇到 get/set 命名错误、方法调用异常等问题,经排查得以解决,提升了调试能力。
通过本次实验,我们掌握了 JavaBean 开发流程和 SpringMVC 基础使用,提高了 Web 编程实践能力,为后续 Web 开发学习打下良好基础。

posted @ 2026-05-31 09:03  呼儿嘿哟。  阅读(11)  评论(0)    收藏  举报