• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kingless

[PHP]Calculadora em PHP

12 mensagens neste tópico

Acabei de criar uma simples calculadora em PHP, é muito simples porque fiz tudo a correr (1 hora) por enquanto só é possível calcular 2 números de cada vez e deve ter algumas bugs.  :P

Demo:

http://www.kingless.net/calc.php

Download:

http://www.kingless.net/download.php?filename=calc.php

Source Code:

http://www.kingless.net/download.php?filename=calc.php;source

<?php
     ////////////////////////////
    //// Calculadora em PHP ////
   ///      by kingless     ///
  //  <blastelf@gmail.com>  //
////////////////////////////
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Calculadora criada por kingless - blastelf@gmail.com</title>
<style type="text/css">

td {

color: #FFFF00;
font-weight: bold;
text-align: center;
border: 1px solid #000099;
}

input#calc {

background-color: #759475;
text-align: right;
color: #222722;
border-color: #000099;

}

table#calculadora {
border: 1px solid  #000099;
background-color: #3300cc;
}

#titulo {

font-family: arial, verdana, sans serif;
font-size: 1em;
font-weight: bold;
text-align: center;
}

</style>
</head>
<body>

<?php

class calculadora {

var $nums = '';
var $calc = '';
var $op = '';

function mostrar () {

	$num = @$_GET['num'][0];
	$calc = @$_GET['calc'];

	if(empty( $num ) AND empty( $calc )) {
		return false;
	}

	if(!isset( $display )) {
		$display = $calc;
	}

	$this->nums .= empty( $num ) ? $display : $display.$num;

	$this->setOperacao();

	if(!empty( $this->op )) {
		$this->calc = $this->nums.rawurldecode( $this->op ).$num;
	}

	return $this->calcular();
}

function setOperacao () {		
	if(!empty( $_GET['op'] )) {
		$this->op = $_GET['op'];
	}
}

function calcular() {

	$calc = empty( $this->calc ) ? $this->nums : $this->calc;

	if(isset( $_GET['resultado'] )) {
		if(preg_match( '/^([0-9]+)(\/|\*|\+|\-)([0-9]+)+$/', $calc, $match )) {
			switch( $match[2] ) {
				case "+":
					return $match[1]+$match[3];
				break;
				case "-":
					return $match[1]-$match[3];
				break;
				case "/":
					return $match[1]/$match[3];
				break;
				case "*":
					return $match[1]*$match[3];
				break;
			}
		} else {
			return "Ocorreu um erro";
		}
	}
	return $calc;
}
}
$calc = new calculadora();
?>

<form action="" method="get">

<!-- Calculadora criada por kingless <blastelf@gmail.com> -->

<table id="calculadora" cellpadding="10" cellspacing="0" align="center">
<tr>
   <td align="center" colspan="4">
       <span id="titulo">Calculadora</span><br/>
        <input id="calc" type="text" name="calc" value="<?=$calc->mostrar();?>" />
    </td>
</tr>
<tr>
   <td>
      <input type="submit" name="num[]" value="7" />
   </td>
   <td>
      <input type="submit" name="num[]" value="8" />
   </td>
   <td>
      <input type="submit" name="num[]" value="9" />
   </td>
   <td>
      <input type="submit" name="op" value="/" />
   </td>
</tr>
<tr>
   <td>
      <input type="submit" name="num[]" value="4" />
   </td>
   <td>
       <input type="submit" name="num[]" value="5" />
   </td>
   <td>
       <input type="submit" name="num[]" value="6" />
   </td>
   <td>
       <input type="submit" name="op" value="*" />
   </td>
</tr>
<tr>
    <td>
       <input type="submit" name="num[]" value="1" />
    </td>
     <td>
<input type="submit" name="num[]" value="2" />
    </td>
    <td>
       <input type="submit" name="num[]" value="3" />
    </td>
    <td>
       <input type="submit" name="op" value="-" />
    </td>
</tr>
<tr> 
   <td>
       <input type="submit" name="num[]" value="0" />
   </td>
   <td>
       <input type="submit" name="num[]" value="." />
   </td>
   <td>
       <input type="submit" name="resultado" value="=" />
   </td>
   <td>
       <input type="submit" name="op" value="+" />
   </td>
</tr>
</table>
</form>
</body>
</html>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podias ter feito isto em Javascript e em vez de cada butão ser um link podias fazer um form, um Input para mostrar os números e buttons que adicionavam os números no input :P Assim parece que a pagina está a ser carregada de novo a cada clique num butão ;)

Mas bastante bom para uma hora de trabalho anyway :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podias ter feito isto em Javascript e em vez de cada butão ser um link podias fazer um form, um Input para mostrar os números e buttons que adicionavam os números no input :P Assim parece que a pagina está a ser carregada de novo a cada clique num butão ;)

Mas bastante bom para uma hora de trabalho anyway :)

yep podia ter feito em javascript e seria muito mais fácil, mas como queria treinar PHP foi por isso que fiz tudo em PHP :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tinhas que vir estragar a minha alegria ;) não podias postar isso amanhã ou que ? :):P

Eu já tinha postado o link algures por aí :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tive a tentar fazer uma parecida mas com ajax e umas funções engraçadas em javascript.

Aqui está o resultado:

http://rayback.dreamhosters.com/calc/

Espero que não te importes de ter utilizado o teu design é que não estava com paciência para fazer um :D

Depois se quiserem disponibilizo o source :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espero que não te importes de ter utilizado o teu design é que não estava com paciência para fazer um :)

No prob..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tive a tentar fazer uma parecida mas com ajax e umas funções engraçadas em javascript.

Aqui está o resultado:

http://rayback.dreamhosters.com/calc/

Espero que não te importes de ter utilizado o teu design é que não estava com paciência para fazer um :)

Depois se quiserem disponibilizo o source :)

Se puderes disponiblizar, a malta agradece...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na boa, tenho de ir fazer um update a isto ta muito confuso mas aqui fica :)

file: index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Calculadora</title>
<style type="text/css">

td {

color: #FFFF00;
font-weight: bold;
text-align: center;
border: 1px solid #000099;
}

textarea#textarea {

background-color: #759475;
text-align: right;
color: #222722;
border-color: #000099;
}

table#calculadora {
border: 1px solid  #000099;
background-color: #3300cc;
}

#titulo {

font-family: arial, verdana, sans serif;
font-size: 1em;
font-weight: bold;
text-align: center;
}

</style>

<script type="text/javascript">
var xmlHttp
var op = 0;
var result = 0;
var pointer = 0;
function calc()
{ 
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
cellvalue = document.getElementById("textarea").value;
var url="ajax.php";
url=url+"?action=calc";
url=url+"&cell="+cellvalue+"&op="+op;
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

function stateChanged() 
{ 
if (xmlHttp.readyState==4)
{ 
document.getElementById("textarea").value=xmlHttp.responseText;
op = 0;
result = 1;
pointer = 0;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}

function IsNumeric(sText)
{
var ValidChars = "0123456789.";
var IsNumber=true;
var Char; 
for (i = 0; i < sText.length && IsNumber == true; i++) 
{ 
	Char = sText.charAt(i); 
	if (ValidChars.indexOf(Char) == -1) 
	{
	IsNumber = false;
	}
}
return IsNumber;
}
function add(value) {
var x = document.getElementById("textarea").value;
if (result) {
	x = '';
	result = 0;
}
if (IsNumeric(value) == false) {
	if (op == 0) {
	x = x + "\n" + value + "\n";
	op = value;
	if (value == "+") op = "%2B";
	if (value == "/") op = "%2F";
	pointer = 0;
	} else {
		z = "não pode inserir mais nenhuma operacao";
		alert(z);
	}
} else {
	if (value == ".") {
		if (pointer == 1) {
			alert("Nao podes ter mais que uma virgula");
			value = '';
		}
		pointer = 1;
	}
x = x+value;
}
document.getElementById("textarea").value = x;
}

</script>

</head>
<body>
<div id="body">
<form name="test">
<table id="calculadora" cellpadding="10" cellspacing="0" align="center">
<tr>
   <td align="center" colspan="4">
       <span id="titulo">Calculadora</span><br/>
        <textarea id="textarea" rows="2" cols="20"></textarea>
    </td>
</tr>
<tr>
   <td>
      <input type="button" onclick="add(7);" value="7" />
   </td>
   <td>
      <input type="button" onclick="add(8);" value="8" />
   </td>
   <td>
      <input type="button" onclick="add(9);"  value="9" />
   </td>
   <td>
      <input type="button" onclick="add('/');" value="/" />
   </td>
</tr>
<tr>
   <td>
      <input type="button" onclick="add(4);"  value="4" />
   </td>
   <td>
       <input type="button" onclick="add(5);"  value="5" />
   </td>
   <td>
       <input type="button" onclick="add(6);" value="6" />
   </td>
   <td>
       <input type="button" onclick="add('*');" value="*" />
   </td>
</tr>
<tr>
    <td>
       <input type="button" onclick="add(1);" value="1" />
    </td>
     <td>
<input type="button" onclick="add(2);" value="2" />
    </td>
    <td>
       <input type="button" onclick="add(3);" value="3" />
    </td>
    <td>
       <input type="button" onclick="add('-');" value="-" />
    </td>
</tr>
<tr> 
   <td>
       <input type="button" onclick="add(0);" value="0" />
   </td>
   <td>
       <input type="button" onclick="add('.');" value="." />
   </td>
   <td>
       <input type="button" onclick="calc();" value="="/>
   </td>
   <td>
       <input type="button" onclick="add('+');" value="+" />
   </td>
</tr>
</table>
</form>
</div>
</body>
</html>

file ajax.php

<?php
$action = $_GET['action'];
switch($action)
{
	case "calc":
		$op = $_GET['op'];
		$value = $_GET['cell'];
		if($op == "+") $value = explode(' ', $value);
		else $value = explode($op, $value);
		$result = $value[0].$op.$value[1];
		switch( $op) {
				case "+":
					$result = $value[0]+$value[1];
				break;
				case "-":
					$result = $value[0]-$value[1];
				break;
				case "/":
					if ($value[1] == '0') $result = 'Imp';
					else $result = $value[0]/$value[1];
				break;
				case "*":
					$result = $value[0]*$value[1];
				break;
		}
		$result = "\n\n Resultado : ".$result;
		echo $result;
	break;
}
die();

?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora