这个作业属于哪个课程 |
https://bbs.csdn.net/forums/ssynkqtd-05 |
这个作业要求在哪里 |
https://bbs.csdn.net/topics/617377308 |
这个作业的目标 |
继续实现更完善的计算器功能,但是要体现前后端分离来实现以下功能。 |
其他参考文献 |
https://blog.csdn.net/WdbM_?type=blog |
项目链接
gitcode
github
PSP表格
PSP |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 |
40 |
• Estimate |
• 估计这个任务需要多少时间 |
25 |
15 |
Development |
开发 |
1130 |
1170 |
• Analysis |
• 需求分析 (包括学习新技术) |
120 |
180 |
• Design Spec |
• 生成设计文档 |
60 |
30 |
• Design Review |
• 设计复审 |
20 |
20 |
• Coding Standard |
• 代码规范 (为目前的开发制定合适的规范) |
30 |
30 |
• Design |
• 具体设计 |
60 |
30 |
• Coding |
• 具体编码 |
600 |
700 |
• Code Review |
• Code Review |
60 |
60 |
• Test |
• 测试(自我测试,修改代码,提交修改) |
180 |
120 |
Reporting |
报告 |
180 |
185 |
• Test Repor |
• 测试报告 |
120 |
60 |
• Size Measurement |
• 计算工作量 |
10 |
10 |
• Postmortem & Process Improvement Plan |
• 事后总结, 并提出过程改进计划 |
50 |
45 |
|
合计 |
1340 |
1395 |
成品展示
基础运算
回退清零
错误处理
读取历史记录
科学计算器
存入数据库
清除历史记录
切换页面
利率计算器
修改税率
功能结构图
原型设计
原型设计
设计实现过程
- 本次作业要求实现前后端分离的计算器,由于我在上一次作业中使用js+html+css 实现计算器,所以本次我直接在上次的内容上进行修改。
- 前端在上一次作业里面加了入了新的页面(利率计算器)并实现页面切换,然后使用XMLHttpRequest来进行网络传输,将前端的数据传输给后端。
- 后端使用Python 的 flask框架和 pymysql 来实现网络传输和数据存储
- 在数据库里面创建4个表分别来存储历史值,活期利率,定期利率和贷款利率。
代码说明
前端
JavaScript
- 在按下
=
或者 Enter
后,调用calculateResult()
,
- 创建一个新的XMLHttpRequest对象xhr,用于向服务器发送POST请求。
- 打开POST请求,指定URL为’http://localhost:5000/post_history’,并设置请求为异步。
- 设置请求头部的Content-Type为’application/json’,指示发送JSON数据。
- 定义一个回调函数onreadystatechange,在请求状态变为4(完成)且状态码为200时执行。在这种情况下,它将打印响应的内容。
- 创建一个包含表达式和结果的数据对象。
- 通过xhr.send(JSON.stringify(data))将数据对象转换为JSON字符串并发送到指定的URL,即表达式和运算结果
function calculateResult() {
check();
try {
expr = expr.replace(/lg/g, 'Math.log10').replace(/ln/g, 'Math.log').replace(/sqrt/g, 'Math.sqrt').replace(/sin/g, 'Math.sin').replace(/\^/g, '**').replace(/cos/g, 'Math.cos').replace(/tan/g, 'Math.tan').replace(/e/g, 'Math.E').replace(/pi/g, 'Math.PI').replace(/abs/g, 'Math.abs').replace(/(\d+)!/g, 'factorial($1)');
expr = eval(expr);
expr = formatNumber(expr);
if (!/[0-9\.]/.test(String(expr))) expr = 'error';
document.getElementById('display2').value = expr;
check();
expression = expr;
result = document.<