php实现图形计算器

存档:

index.php

 1 <html>
 2     <head>
 3         <title>图形计算器开发</title>
 4         <meta http-equiv="Content-type" content="text/html;charset=utf-8">
 5     </head>
 6     
 7     <body>
 8         <center>
 9             <h1>图形(周长&面积)计算器</h1>
10             
11             <a href="index.php?action=rect">矩形</a>
12             <a href="index.php?action=triangle">三角形</a>
13             <a href="index.php?action=circle">圆形</a>
14         </center>
15         <?php
16             error_reporting(E_ALL & ~E_NOTICE);
17             function __autoload($className){
18                 include strtolower($className).".class.php";
19             }
20             echo new Form("index.php");
21             if(isset($_POST["sub"])){
22                 echo new Result();
23             }
24         ?>
25     </body>
26 </html>

form.class.php

 1 <?php
 2     class Form{
 3         private $action;
 4         private $shape;
 5         function __construct($action=""){
 6             $this->action = $action;
 7             $this->shape = isset($_GET["action"])?$_GET["action"]:"rect";
 8         }
 9         
10         function __toString(){
11             $form='<form action="'.$this->action.'?action='.$this->shape.'" method="post">';
12             $shape="get".ucfirst($this->shape);
13             $form .=$this->$shape();
14             $form .='<br><input type="submit" name="sub" value="计算"><br>';
15             $form .='</form>';
16             return $form;
17         }
18         
19         private function getRect(){
20             $input = '<b>请输入|矩形|的宽度和高度:</b><p>';
21             $input .= '宽度:<input type="text" name="width" value="'.$_POST["width"].'"><br>';
22             $input .= '高度:<input type="text" name="height" value="'.$_POST["height"].'"><br>';
23             return $input;
24         }
25         
26         private function getTriangle(){
27             $input = '<b>请输入|三角形|的三条边:</b><p>';
28             $input .= '第一条边:<input type="text" name="side1" value="'.$_POST["side1"].'"><br>';
29             $input .= '第二条边:<input type="text" name="side2" value="'.$_POST["side2"].'"><br>';
30             $input .= '第三条边:<input type="text" name="side3" value="'.$_POST["side3"].'"><br>';
31             return $input;
32         }
33         
34         private function getCircle(){
35             $input = '<b>请输入|圆形|的半径:</b><p>';
36             $input .= '半径:<input type="text" name="radius" value="'.$_POST["radius"].'"><br>';
37             return $input;
38         }
39     }
40 ?>

shape.class.php

 1 <?php
 2     abstract class Shape{
 3         public $shapeName;
 4         abstract function area();
 5         abstract function perimeter();
 6         protected function validate($value,$message = '输入的值'){
 7             if($value=="" || !is_numeric($value) || $value<0){
 8                 $message=$this->shapeName.$message;
 9                 echo '<font color="red">'.$message.'必须为非负值的数字,并且不能为空</font><br>';
10                 return false;
11             }
12             else{
13                 return true;
14             }
15         }
16     }
17 ?>

result.class.php

 1 <?php
 2     class Result{
 3         private $shape = null;
 4         function __construct(){
 5             $this->shape = new $_GET['action']();
 6         }
 7         
 8         function __toString(){
 9             $result = $this->shape->shapeName.'的周长:'.round($this->shape->perimeter(),2).'<br>';
10             $result .= $this->shape->shapeName.'的面积:'.round($this->shape->area(),2).'<br>';
11             return $result;
12         }
13     }
14 ?>

rect.class.php

 1 <?php
 2     class Rect extends Shape{
 3         private $width = 0;
 4         private $height = 0;
 5         function __construct(){
 6             $this->shapeName = "矩形";
 7             if($this->validate($_POST["width"],"宽度") & $this->validate($_POST["height"],"高度")){
 8                 $this->width = $_POST["width"];
 9                 $this->height = $_POST["height"];
10             }
11         }
12         
13         function area(){
14             return $this->width*$this->height;
15         }
16         
17         function perimeter(){
18             return 2*($this->width+$this->height);
19         }
20     }
21 ?>

triangle.class.php

 1 <?php
 2     class Triangle extends Shape{
 3         private $side1 = 0;
 4         private $side2 = 0;
 5         private $side3 = 0;
 6         function __construct(){
 7             $this->shapeName = "三角形";
 8             if($this->validate($_POST["side1"],"第一条边") & 
 9                 $this->validate($_POST["side2"],"第二条边") & 
10                     $this->validate($_POST["side3"],"第三条边")){
11                 if($this->validateSum($_POST["side1"],$_POST["side2"],$_POST["side3"])){
12                     $this->side1 = $_POST["side1"];
13                     $this->side2 = $_POST["side2"];
14                     $this->side3 = $_POST["side3"];
15                 }
16                 else{
17                     echo '<font color="red">三角形的两边之和要大于第三边</font><br>';
18                 }    
19             }
20         }
21         
22         function area(){
23             $s = ($this->side1+$this->side2+$this->side3)/2;
24             return sqrt($s*($s-$this->side1)*($s-$this->side2)*($s-$this->side3));
25         }
26         
27         function perimeter(){
28             return $this->side1+$this->side2+$this->side3;
29         }
30         
31         private function validateSum($s1,$s2,$s3){
32             if((($s1+$s2)>$s3) && (($s1+$s3)>$s2) && (($s2+$s3)>$s1)){
33                 return true;
34             }
35             else{
36                 return false;
37             }
38         }
39     }
40 ?>

circle.class.php

 1 <?php
 2     class Circle extends Shape{
 3         private $radius = 0;
 4         function __construct(){
 5             $this->shapeName = "图形";
 6             if($this->validate($_POST['radius'],'半径')){
 7                 $this->radius = $_POST['radius'];
 8             }
 9         }
10         
11         function area(){
12             return pi()*$this->radius*$this->radius;
13         }
14         
15         function perimeter(){
16             return 2*pi()*$this->radius;
17         }
18     }
19 ?>

结果如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CIT极客

【奇淫巧技】Javascript入门笔记,打造最绚丽网页特效!

42160
来自专栏Golang语言社区

golang简单位运算示例

文实例讲述了golang简单位运算。分享给大家供大家参考,具体如下: // http://play.golang.org/p/idG7Ri_krU packa...

37290
来自专栏柠檬先生

jquery mobile 移动web(6)

jquery mobile 针对移动端设备的事件类型。   1.touch 事件。     tap 快速触摸屏幕并且离开,类似一种完整的点击操作。  ...

243100
来自专栏Java帮帮-微信公众号-技术文章全总结

JSP简单入门(3)

3、<jsp:param>标签 当使用<jsp:include>标签和<jsp:forward>标签引入或将请求转发给的资源是一个能动态执行的程序时,还可以使用...

31440
来自专栏java达人

javascript之BOM

一、BOM(The Browser ObjectModel):-浏览器对象模型, (1)BOM提供了独立于内容而与浏览器窗口进行交互的...

22480
来自专栏木子昭的博客

模拟Vue数据的双向绑定

Vue的数据双向绑定功能一直为人称道, Vue数据的双向数据绑定主要依赖了Object.defineProperty,这里尝试用最简单的代码, 实现数据的双向...

38450
来自专栏前端说吧

vue - 父组件数据变化控制子组件类名切换

先说当时的思路和实现 核心是父子组件传值和v-bind指令动态绑定class实现

17410
来自专栏河湾欢儿的专栏

Vue.js组件

组件: 顾名思义, 也就是组成的部件, 即整体的组成部分 这个组成部分是可以缺少的,但是其存在的意义是无可替代的 这个组成部分也是可以复用的 全局方法一:...

25640
来自专栏极客编程

vue.js快速上手

  Vue.js是一个构建数据驱动的web界面的库。技术上,它重点集中在MVVM模式的ViewModel层,因此它非常容易学习,非常容易与其它库或已有项目整合。

26130
来自专栏Lambda

【第一季】Vue2.0内部指令

学习这套课程你需要的前置知识: HTML的基础知识,你需要达到中级水平,写前端页面的结构代码完全没有问题。 CSS的基础知识,最好做过半年以上的切图和布局,最...

22290

扫码关注云+社区

领取腾讯云代金券