HTML前端+flask后端实现前后端分离的科学计算器和税率计算器

本文详细描述了一次前后端分离的科学计算器项目,涉及git仓库链接、代码规范、PSP阶段管理、前端HTML/CSS/JS实现、后端Python/Flask与MySQL的配合,以及设计和实现过程中的问题解决和反思。
摘要由CSDN通过智能技术生成

目录

git仓库链接和代码规范链接

PSP表格

成品展示

设计实现过程

代码说明


这个作业属于哪个课程https://bbs.csdn.net/forums/ssynkqtd-05
这个作业要求在哪里https://bbs.csdn.net/topics/617377308
这个作业的目标制作一个实现前后端交互的计算器

git仓库链接和代码规范链接

102101510梁菲汎 / 第二次软工作业:前后端分离的科学计算器 · GitCode

PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3030
· Estimate 估计这个任务需要多少时间1020
Development开发16801680
 ·Analysis· 需求分析 (包括学习新技术)400420
· Design Spec· 生成设计文档3040
· Design Review· 设计复审1010
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)1010
· Design· 具体设计6090
· Coding· 具体编码6001000
· Code Review· 代码复审4060
· Test· 测试(自我测试,修改代码,提交修改)6060
Reporting报告90120
· Test Repor· 测试报告3030
· Size Measurement· 计算工作量55
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划6090
· 合计30003600

成品展示

以下是基本计算 

以下是科学计算 

以下是其他一些科学计算 

 展示历史记录

税率计算器 

数据库端接收到的东西 

设计实现过程

      我将在三个部分里详细叙述我的设计实现过程。

        一、界面设计。

原型设计参照了菜鸟教程里的“简单html计算器”的界面和百度计算器的界面。我并不太喜欢百度计算器的界面,太素了。基本功能,按钮样式以及页面布局参照了百度计算器。

        二、前端实现。

前端我使用了前端三件套。html+css+js。

        三、后端实现。

后端使用python编写main函数实现数据库部分的启动。使用MYSQL实现数据库的具体功能,利用python适配的pymysql实现了在main.py程序中对数据库进行操纵和编辑。

代码说明

function send_clear(){
    request=req("clear_table")
    request.send();
}
function get_history(){
    const res = new XMLHttpRequest();
    res.open('GET', 'http://localhost:5000/get_calculator_data', true);
    res.onreadystatechange = function () {
      if (res.readyState === 4) {
        if (res.status === 200) {
            Data = JSON.parse(res.responseText);
            array = Data['data'];
            let string="";
            for(let i=0;i<array.length;i++){
                string +=array[i][0]+" = "+array[i][1]+"\n";
            }
            document.getElementById('input_show').value = string;
        } else {
            console.error('获取数据出错: ' + res.status);
        }
      }
    };
    res.send();
}

在jss.js文件中我利用XMLHttp进行请求的发送。

import flask
from flask import Flask, request, jsonify
import json
from flask_cors import *
from datetime import datetime
from gevent import pywsgi
import pymysql

app = Flask(__name__)
CORS(app, supports_credentials=True)
# 连接MySQL数据库
mydb = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123456",
    database="penguin"
)
cursor = mydb.cursor()

cursor.execute('''CREATE TABLE IF NOT EXISTS calculator 
                 (time VARCHAR(255),
                  expression VARCHAR(255),
                  result VARCHAR(255),
                  created_at TIMESTAMP
                   )''')
mydb.commit()

@app.route("/")
def ui():
    return flask.render_template("frontend.html")

@app.route('/save_history', methods=['POST'])
def save_history():
    data = request.get_json()
    expression = data['expression']
    result = data['result']
    time= datetime.now()
    # 插入数据
    cursor.execute("INSERT INTO calculator (time,expression, result) VALUES (%s, %s, %s)",
                   (time,expression, result))
    mydb.commit()

    return 'success'


@app.route('/get_calculator_data')
def get_calculator_data():
    cursor.execute("SELECT expression,result FROM calculator")
    results = cursor.fetchall()
    calculations = []
    for row in results:
        calculations.append(list(row))
    return jsonify({'data': calculations})


@app.route('/clear_table', methods=['POST'])
def clear_table():
    cursor.execute("DELETE FROM calculator")
    mydb.commit()
    return 'success'



if __name__ == '__main__':
    server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)
    server.serve_forever()


设计感想

第一次从0开始设计前后端结合,遇到的困难还是很多的。前端界面大一的时候接触过所以学起来不费力。

html和js衔接的时候,我发现如果把组件定义成box的话很多样式不能使用,形状不可调整。还是div好。

后端一开始尝试了springboot,但是因为没接触过java,配环境配得几乎要死掉了!超级难。

最终选择了使用python的flask框架进行和数据库的链接。还是python好啊(感慨

最后,编程过程中犯了一个很呆的问题。我写好了main.py里的数据库链接启动代码,启动之后一直显示“服务器强硬地拒绝了你的链接”。后面发现是MySQL没下,数据库都还没定义呢。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值