thinkPHP框架实现的简单计算器示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-02 10:18:24 浏览: 评论:0
这篇文章主要介绍了thinkPHP框架实现的简单计算器,结合实例形式分析了基于thinkPHP框架的用户登陆、数值计算、数据库读写、历史记录保存等功能相关实现技巧与操作注意事项,需要的朋友可以参考下。
本文实例讲述了thinkPHP框架实现的简单计算器,分享给大家供大家参考,具体如下:
HTML部分 文件名 index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>计算器</title>
- <script type="text/javascript" src="public/js/jquery-2.2.3.js"></script>
- <link rel="stylesheet" href="public/css/index.css" rel="external nofollow" >
- </head>
- <body>
- <div class="login">
- <span>登录</span>
- </div>
- <div class="register">
- <form action="">
- <span>请输入你的手机号开始使用</span>
- <br><br>
- <input id="myphone" type="text">
- <input id="use" type="button" value="使用">
- <br><br>
- </form>
- </div>
- <div class="calculator">
- <div class="counter">
- <span class="brand">计算器</span>
- <br><br>
- <input class="import" type="text" style="text-align: right;">
- <br><br>
- <form class="snap" action="">
- <br><br>
- <input class="order" id="one" type="button" value="1">
- <input class="order" id="two" type="button" value="2">
- <input class="order" id="three" type="button" value="3">
- <input class="order" id="four" type="button" value="4">
- <input class="order" id="five" type="button" value="5">
- <br><br>
- <input class="order" id="six" type="button" value="6">
- <input class="order" id="seven" type="button" value="7">
- <input class="order" id="eight" type="button" value="8">
- <input class="order" id="nine" type="button" value="9">
- <input class="order" id="zero" type="button" value="0">
- <br><br>
- <input class="operator" id="plus" type="button" value="+">
- <input class="operator" id="add" type="button" value="-">
- <input class="operator" id="mul" type="button" value="*">
- <input class="operator" id="sub" type="button" value="/">
- <input class="" id="equal" type="button" value="=">
- <br><br>
- <input class="order" type="button" value=".">
- <input id="backspace" type="button" value="←">
- <input id="clear" type="button" value="c">
- <input type="button" value="CE">
- <input type="button" value="MC">
- </form>
- </div>
- <div class="result">
- <div>
- <span>当前结果:</span><span id="current_results"></span>
- </div>
- <br><br>
- <span>历史记录:</span>
- <ul id="cal_result" style="list-style-type: none">
- <li><span>删除</span></li>
- </ul>
- </div>
- </div>
- </body>
- <script type="text/javascript" src="public/js/index.js">
- </script>
- </html>
CSS样式 文件名 index.css
- .login{/*登录*/
- height: 30px;
- width: 100px;
- background-color: #00a2d4;
- text-align: center;
- cursor: pointer;
- padding-top: 10px;
- position: fixed;
- }
- .register{
- display: none;
- position: fixed;
- }
- .calculator{
- display: none;
- position: fixed;
- }
- .counter{
- border: 1px solid black;
- height: 400px;
- width: 320px;
- float: left;
- }
- .import{
- height: 20px;
- width: 180px;
- margin-top: 50px;
- margin-left: 50px;
- }
- .snap{
- margin-left: 50px;
- margin-top: -30px;
- }
- .snap input{
- height: 30px;
- width: 30px;
- }
- .result{
- border: 1px solid black;
- height: 400px;
- width: 320px;
- float: left;
- margin-left: 50px;
- }
- .brand{
- position: relative;
- top: 50px;
- left: 90px;
- }
JS部分 文件名 index.js
- //计算屏幕宽高
- var w_width = $(window).width();
- var w_height = $(window).height();
- var operator = 0;//运算符号
- var change = 0;//属于运算符后需要清空上一数值
- var num1 = 0;//元算的第一个数据
- var num2 = 0;//运算的第二个数据
- var sum = 0;//运算结果
- //居中
- function setCenter(obj){
- var this_width = $(obj).width();
- var this_height = $(obj).height();
- var this_left = parseInt((w_width-this_width)/2);
- var this_height = parseInt((w_height-this_height)/2);
- $(obj).css({left:this_left,top:this_height});
- }
- //正则
- function testReg() {
- //定义参数
- var regType = arguments[0]?arguments[0]:'phone';
- var myString = arguments[1]?arguments[1]:false;
- var regArray = new Array();
- regArray['phone'] = /^1[3|4|5|7|8]\d{9}$/;
- regArray['email'] = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;//邮箱 *代表{0,} +代表{1,} ?代表{0,1}
- //判断
- if (myString){
- return regArray[regType].test(myString);
- }
- return false;
- }
- //发送数据到后台
- function sendMessage() {
- //手机号
- var myphone = $("#myphone").val();
- //计算器
- var myUrl = '/app/base.php';
- var myData = {num1:num1,num2:num2,cal_option:operator,cal_result:sum,myphone:myphone,type:'add'};
- $.post(myUrl,myData,function (msg) {
- //TODO
- },'json')
- getResultByPhone();
- }
- //获取结果
- function getResultByPhone() {
- var myphone = $("#myphone").val();
- var myUrl = '/app/base.php';
- var myData = {myphone:myphone,type:'getResult'};
- $.post(myUrl,myData,function (msg) {
- //TODO
- $("#cal_result").html(msg);
- },'text')
- }
- //获取数据
- function deleteHistory(id) {
- var myUrl = '/app/base.php';
- var MyData = {id:id,type:'delete'};
- $.post(myUrl,MyData,function (msg) {
- //TODO
- },'json')
- getResultByPhone();
- }
- $(function () {
- //登录居中
- setCenter($(".login").show(8000));
- //点击登录显示输入
- $(".login").click(function(){
- setCenter($(".register").show());
- $(this).hide();
- });
- //点击使用显示计算器
- $("#use").click(function () {
- if (testReg('phone',$("#myphone").val())){
- setCenter($(".calculator").show());
- $(".register").hide();
- getResultByPhone()
- }else {
- alert ("你输的手机格式不对");
- return false;
- }
- })
- $(".order").click(function () {//点击数字
- var num = $(this).val();
- var oldValue = $(".import").val();
- if (change ==1){
- oldValue = "0";
- change = 0;
- }
- var newValue = "";
- if (num == -1){
- oldValue = parseFloat(oldValue);
- newValue = oldValue * -1;
- }else if (num == "."){
- if (oldValue.indexOf('.') == -1)
- newValue = oldValue + ".";
- else
- newValue = oldValue;
- }else {
- if (oldValue == 0 && oldValue.lastIndexOf('.') == -1){
- newValue = num;
- }else {
- newValue = oldValue + num;
- }
- }
- $(".import").val(newValue);
- });
- $("#clear").click(function () {//清除
- $(".import").val("0");
- operator = 0;
- change = 0;
- num1 = 0;
- num2 = 0;
- });
- $("#backspace").click(function () {//退格
- if (change ==1){
- operator = 0;
- change = 0;
- }
- var value = $(".import").val();
- if (value.length == 1){
- $(".import").val("0");
- }else {
- value = value.substr(0,value.length - 1);
- $(".import").val(value);
- }
- });
- $(".operator").click(function() {//点击运算符号触发事件
- change = 1;
- operator = $(this).val();
- var value = $(".import").val();
- var dianIndex = value.indexOf(".");
- if (dianIndex == value.length) {
- value = value.substr(0, value.length - 1);
- }
- num1 = parseFloat(value);
- });
- $("#equal").click(function () {//点击等号
- var value = $(".import").val();
- var dianIndex = value.indexOf(".");
- if (dianIndex == value.length){
- value = value.substr(0,value.length - 1);
- }
- var equal = $(this).val();
- num2 = parseFloat(value);
- if (operator == "+"){
- sum = num1 + num2;
- }else if (operator == "-"){
- sum = num1 - num2;
- }else if (operator == "*"){
- sum = num1 * num2;
- }else if (operator == "/"){
- sum = num1 / num2;
- }else if (operator == "" || num1 ==0 || num2 == 0){
- sum = num1 +num2;
- }
- var re = /^[0-9]+.?[0-9]*$/;
- if (re.test(sum)){
- sum = sum.toFixed(2);
- }
- $(".import").val(sum);
- sendMessage();
- $("#current_results").text(num1 + operator + num2 + equal + sum);
- change = 1;
- operator = 0;
- num1 = 0;
- num2 = 0;
- });
- })
接口 文件名 IDB.php
- <?php
- namespace mao;
- interface IDB{
- public function insert($data);
- public function update($data);
- public function select($data);
- public function del($data);
- }
创建一个Mysqli类继承接口实现增删改查
文件名 MySqli.clsaa.php
- <?php
- namespace mao;
- include "IDB.php";
- class MySqli implements IDB{
- private $conn = null;
- private $table = null;
- private $sysConfig = array(
- 'host' => '',
- 'user' => '',
- 'pwd' => '',
- 'db' => ''
- );
- private static $_instance = null;
- private function __construct($config){
- if(is_array($config)){
- $this->sysConfig = array_merge($this->sysConfig,$config);
- $this->conn = new \Mysqli($this->sysConfig['host'],$this->sysConfig['user'],$this->sysConfig['pwd'],$this->sysConfig['db']);
- if (!$this->conn){
- echo "连接失败".mysqli_error();
- }
- }
- }
- public static function getInstance($config){
- if (is_null(self::$_instance)){
- self::$_instance = new self($config);
- }
- return self::$_instance;
- }
- //设计表
- public function table($table){
- $this->table = $table;
- return $this;
- }
- //查询
- private function changeCondition($condition){
- $where_array = array();
- foreach($condition as $k => $v){
- if(is_array($v)){
- if(strtolower($v[0])=='like'){
- $where_array[] = $k.' '.$v[0].' \'%'.$v[1].'%\'';
- }else{
- $where_array[] = $k.' '.$v[0].' \''.$v[1].'\'';
- }
- }
- if(is_string($v)){
- $where_array[] = $k.' = \''.$v.'\'';
- }
- }
- $where = implode(' AND ',$where_array);
- return $where?$where:1;
- }
- public function select($condition){
- $where = $this->changeCondition($condition);
- $sql = "select * from $this->table where ".$where."order by id desc limit 10";
- $res = $this->conn->query($sql);
- $ret = array();
- while ($row = $res->fetch_assoc()){
- $ret[] = $row;
- }
- return $ret;
- }
- public function insert($data){
- $sql = "insert into `{$this->table}` ( `id` ,`user_phone` ,`num1` ,`num2` ,`option` ,`result` ,`status` ,`admin_user` ) VALUES ( NULL , '{$data['myphone']}', '{$data['num1']}', '{$data['num2']}', '{$data['cal_option']}', '{$data['cal_result']}', '1', 'mao' )";
- $this->conn->query($sql);
- }
- public function update($id){
- $sql = "UPDATE `{$this->table}` SET `status` = '-1' WHERE `id` ={$id}";
- $this->conn->query($sql);
- }
- public function del($condition){
- }
- }
配置项 文件名 config.php
- <?php
- return [
- 'db'=>[
- 'host' => '127.0.0.1',
- 'user' => 'root',
- 'pwd' => 'root',
- 'db' => 'cal'
- ],
- 'author' =>[
- 'adminuser' => 'mao',
- ]
- ];
操作计算器 文件名 base.php
- <?php
- namespace mao;
- define("ROOT_PATH",dirname(dirname(__FILE__)));
- $config = include ROOT_PATH."/lib/config/config.php";
- include ROOT_PATH."/lib/db/MySqli.class.php";
- $db = MySqli::getInstance($config['db']);
- if ($_POST){
- //查询
- if ($_POST['type'] == 'getResult'){
- $condition = array(
- 'user_phone' =>array('like',$_POST['myphone']),
- 'status'=> '1'
- );
- $result = $db->table('calculate')->select($condition);
- $result_string = '';
- foreach ($result as $k => $v){
- $result_string .= "<li><span class='mydelte' onclick='deleteHistory({$v['id']})'>删除</span>{$v['num1']} {$v['option']} {$v['num2']} = {$v['result']} </li>";
- }
- echo $result_string;
- }
- //删除
- if ($_POST['type'] == 'delete'){
- $id = isset($_POST['id'])?$_POST['id']:'';
- $db->table('calculate')->update($id);
- }
- if ($_POST['type'] == 'add'){
- $data = $_POST;
- $db->table('calculate')->insert($data);
- }
- }
目录结构
sql语句
- SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
- SET time_zone = "+00:00";
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
- /*!40101 SET NAMES utf8 */;
- --
- -- 資料庫: `cal`
- --
- -- --------------------------------------------------------
- --
- -- 表的結構 `calculate`
- --
- CREATE TABLE IF NOT EXISTS `calculate` (
- `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '序号 主键 自增',
- `user_phone` varchar(100) NOT NULL COMMENT '用户手机号',
- `num1` varchar(100) NOT NULL COMMENT '第一个数字',
- `num2` varchar(100) NOT NULL COMMENT '第二个数字',
- `option` varchar(10) NOT NULL COMMENT '加减乘除选项',
- `result` varchar(100) NOT NULL COMMENT '结果',
- `status` int(10) NOT NULL COMMENT '状态-1 删除 0 禁用 1 正常',
- `admin_user` varchar(100) NOT NULL COMMENT '管理员',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='计算表' AUTO_INCREMENT=40 ;
- --
- -- 轉存資料表中的資料 `calculate`
- --
- INSERT INTO `calculate` (`id`, `user_phone`, `num1`, `num2`, `option`, `result`, `status`, `admin_user`) VALUES
- (1, '15727228076', '', '', '', '', 0, ''),
- (2, '15727228076', '7', '6', '+', '13', -1, 'jingshan'),
- (3, '13880425377', '9', '6', '+', '15', -1, 'jingshan'),
- (4, '13880425377', '8', '7', '+', '15', -1, 'jingshan'),
- (5, '13880425377', '8', '9', '*', '72', -1, 'jingshan'),
- (6, '13880425377', '6', '7', '+', '13', 1, 'jingshan'),
- (7, '13880425377', '89', '7', '+', '96', -1, 'jingshan'),
- (8, '13880425377', '67', '8', '+', '75', 1, 'jingshan'),
- (9, '13880425377', '2', '7', '+', '9', 1, 'jingshan'),
- (10, '13880425377', '78', '7', '+', '85', 1, 'jingshan'),
- (11, '13880425377', '12', '9', '*', '108', 1, 'jingshan'),
- (12, '13880425377', '23', '7', '-', '16', 1, 'jingshan'),
- (13, '13880425377', '67', '2', '-', '65', 1, 'jingshan'),
- (14, '13880425377', '34', '7', '+', '41', 1, 'jingshan'),
- (15, '13880425377', '78', '8', '/', '9.75', 1, 'jingshan'),
- (16, '13880425377', '72', '9', '+', '81', 1, 'jingshan'),
- (17, '13880425377', '78', '9', '+', '0', 1, 'mao'),
- (18, '13880425377', '67', '9', '+', '0', 1, 'mao'),
- (19, '13880425377', '78', '9', '+', '0', 1, 'mao'),
- (20, '13880425377', '78', '9', '+', '0', 1, 'mao'),
- (21, '13880425377', '67', '8', '+', '0', 1, 'mao'),
- (22, '13880425377', '62', '8', '+', '0', 1, 'mao'),
- (23, '13880425377', '12', '9', '*', '0', 1, 'mao'),
- (24, '13880425377', '12', '9', '+', '0', 1, 'mao'),
- (25, '13880425377', '7', '8', '-', '0', 1, 'mao'),
- (26, '13880425377', '2', '4', '+', '0', 1, 'mao'),
- (27, '13880425377', '8', '9', '*', '0', 1, 'mao'),
- (28, '13880425377', '8', '9', '+', '0', 1, 'mao'),
- (29, '13880425377', '12', '9', '*', '108.00', 1, 'mao'),
- (30, '13880425377', '7', '8', '+', '15.00', 1, 'mao'),
- (31, '13880425377', '1', '9', '*', '9.00', 1, 'mao'),
- (32, '13880425377', '29', '7', '*', '203.00', 1, 'mao'),
- (33, '13880425377', '95', '8', '/', '11.88', 1, 'mao'),
- (34, '13880425377', '67', '98', '*', '6566.00', 1, 'mao'),
- (35, '13880425377', '22', '9', '-', '13.00', 1, 'mao'),
- (36, '13880425377', '45', '9', '/', '5.00', 1, 'mao'),
- (37, '13880425377', '555', '777', '+', '1332.00', 1, 'mao'),
- (38, '13880425377', '89', '0', '-', '89.00', 1, 'mao'),
- (39, '13880425377', '0', '89', '0', '89.00', 1, 'mao');
- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
- /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
- /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
- ---------------------
Tags: thinkPHP计算器

推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)