第二次作业

一、 实验名称:计算器软件用户登录系统

二、 实验目的:1.掌握软件开发的基本流程

                          2.掌握常用的软件开发方式和工具

三、实验内容:设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录,数据使用数据库保存

三、实验项目所用到的技术:采用前后端分离的开发模式

四、前端技术:html

       后端技术:python(主要语言),Flask(Web框架),Mysql(存储主要数据)

五、实验步骤

(一)流程图

1、注册流程图

 2、登录流程图

 (二)用户注册界面

(三)用户登录界面

(四)计算机界面

(五)计算结果界面

(六)数据库连接结果

(七)注册后存入将数据存入数据库

1、注册界面实现

register.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>注册界面</title>
    <link rel="stylesheet" href="/static/css/layui.css">
</head>
<body>

<style>
.demo-reg-container{width: 320px; margin: 21px auto 0;}
.demo-reg-other .layui-icon{position: relative; display: inline-block; margin: 0 2px; top: 2px; font-size: 26px;}
</style>
<form class="layui-form"action="/register" method="post">
  <div class="demo-reg-container">
    <div class="layui-form-item">
      <div class="layui-row">
        <div class="layui-col-xs7">
          <div class="layui-input-wrap">
            <div class="layui-input-prefix">
              <i class="layui-icon layui-icon-cellphone"></i>
            </div>
            <input type="text" name="cellphone" value="" lay-verify="required|phone" placeholder="手机号" lay-reqtext="请填写手机号" autocomplete="off" class="layui-input" id="reg-cellphone">
          </div>
        </div>
        <div class="layui-col-xs5">
          <div style="margin-left: 11px;">
            <button type="button" class="layui-btn layui-btn-fluid layui-btn-primary" lay-on="reg-get-vercode">获取验证码</button>
          </div>
        </div>
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-input-wrap">
        <div class="layui-input-prefix">
          <i class="layui-icon layui-icon-vercode"></i>
        </div>
        <input type="text" name="vercode" value="" lay-verify="required" placeholder="验证码" lay-reqtext="请填写验证码" autocomplete="off" class="layui-input">
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-input-wrap">
        <div class="layui-input-prefix">
          <i class="layui-icon layui-icon-password"></i>
        </div>
        <input type="password" name="password" value="" lay-verify="required" placeholder="密码" autocomplete="off" class="layui-input" id="reg-password" lay-affix="eye">
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-input-wrap">
        <div class="layui-input-prefix">
          <i class="layui-icon layui-icon-password"></i>
        </div>
        <input type="password" name="confirmPassword" value="" lay-verify="required|confirmPassword" placeholder="确认密码" autocomplete="off" class="layui-input" lay-affix="eye">
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-input-wrap">
        <div class="layui-input-prefix">
          <i class="layui-icon layui-icon-username"></i>
        </div>
        <input type="text" name="nickname" value="" lay-verify="required" placeholder="用户名" autocomplete="off" class="layui-input" lay-affix="clear">
      </div>
    </div>
    <div class="layui-form-item">
      <input type="checkbox" name="agreement" lay-verify="required" lay-skin="primary" title="同意">
      <a href="#terms" target="_blank" style="position: relative; top: 6px; left: -15px;">
        <ins>用户协议</ins>
      </a>
    </div>
    <div class="layui-form-item">
      <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-reg">注册</button>
    </div>
    <div class="layui-form-item demo-reg-other">
      <label>社交账号注册</label>
      <span style="padding: 0 21px 0 6px;">
        <a href="javascript:;"><i class="layui-icon layui-icon-login-qq" style="color: #3492ed;"></i></a>
        <a href="javascript:;"><i class="layui-icon layui-icon-login-wechat" style="color: #4daf29;"></i></a>
        <a href="javascript:;"><i class="layui-icon layui-icon-login-weibo" style="color: #cf1900;"></i></a>
      </span>
      <a href="#login">登录已有帐号</a>
    </div>
  </div>
</form>

<script src="/static/layui.js"></script>
<script>
layui.use(function(){
  var $ = layui.$;
  var form = layui.form;
  var layer = layui.layer;
  var util = layui.util;

  // 自定义验证规则
  form.verify({
    // 确认密码
    confirmPassword: function(value, item){
      var passwordValue = $('#reg-password').val();
      if(value !== passwordValue){
        return '两次密码输入不一致';
      }
    }
  });

  // 提交事件
});
</script>

</body>
</html>

 

2、登录界面实现

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>简易计算器</title>
    <link rel="stylesheet" href="/static/css/layui.css">
</head>
<body>
<style>
.demo-login-container{width: 320px; margin: 21px auto 0;}
.demo-login-other .layui-icon{position: relative; display: inline-block; margin: 0 2px; top: 2px; font-size: 26px;}
</style>

<form class="layui-form" action="/login" method="post" >
  <div class="demo-login-container">
    <div class="layui-form-item">
      <div class="layui-input-wrap">
        <div class="layui-input-prefix">
          <i class="layui-icon layui-icon-username"></i>
        </div>
        <input type="text" name="username" value="" lay-verify="required" placeholder="用户名" lay-reqtext="请填写用户名" autocomplete="off" class="layui-input" lay-affix="clear">
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-input-wrap">
        <div class="layui-input-prefix">
          <i class="layui-icon layui-icon-password"></i>
        </div>
        <input type="password" name="password" value="" lay-verify="required" placeholder="密   码" lay-reqtext="请填写密码" autocomplete="off" class="layui-input" lay-affix="eye">
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-row">
        <div class="layui-col-xs7">
          <div class="layui-input-wrap">
            <div class="layui-input-prefix">
              <i class="layui-icon layui-icon-vercode"></i>
            </div>
            <input type="text" name="captcha" value="" lay-verify="required" placeholder="验证码" lay-reqtext="请填写验证码" autocomplete="off" class="layui-input" lay-affix="clear">
          </div>
        </div>
        <div class="layui-col-xs5">
          <div style="margin-left: 10px;">
            <img src="https://www.oschina.net/action/user/captcha" onclick="this.src='https://www.oschina.net/action/user/captcha?t='+ new Date().getTime();">
          </div>
        </div>
      </div>
    </div>
    <div class="layui-form-item">
      <input type="checkbox" name="remember" lay-skin="primary" title="记住密码">
      <a href="#forget" style="float: right; margin-top: 7px;">忘记密码?</a>
    </div>
    <div class="layui-form-item">
      <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-login">登录</button>
    </div>
    <div class="layui-form-item demo-login-other">
      <label>社交账号登录</label>
      <span style="padding: 0 21px 0 6px;">
        <a href="javascript:;"><i class="layui-icon layui-icon-login-qq" style="color: #3492ed;"></i></a>
        <a href="javascript:;"><i class="layui-icon layui-icon-login-wechat" style="color: #4daf29;"></i></a>
        <a href="javascript:;"><i class="layui-icon layui-icon-login-weibo" style="color: #cf1900;"></i></a>
      </span><a href="#reg">注册帐号</a>
    </div>
  </div>
</form>


<script src="/static/layui.js"></script>
<script>
layui.use(function(){
  var form = layui.form;
  var layer = layui.layer;
  // 提交事件
{#  form.on('submit(demo-login)', function(data){
    var field = data.field; // 获取表单字段值
    // 显示填写结果,仅作演示用
    layer.alert(JSON.stringify(field), {
      title: '恭喜您登录成功'
    });
    //JSON可以发送动态请求
    // 此处可执行 Ajax 等操作
    //
    return false; // 阻止默认 form 跳转
  });#}
});
</script>

<script src="/static/layui.js"></script>
</body>
</html>

3、计算器实现

jisuanqi.html
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>简易计算器</title>
        <style type="text/css">
            *{
                margin: auto;
                padding: 0px;
                text-align: center;
                font-family: "微软雅黑";
            }
            .content{
                border-radius: 10%;
                width: 400px;
                height: 550px;
                background-color: antiquewhite;
            }
            .clear{
                border-radius: 50%;
                width: 20%;
                height: 72px;
                background-color: #FF4500;
            }
            #result{
                margin-top: 24px;
                font-size: 16px;
                width: 60%;
                height: 72px;
                text-align: left;
                border-radius: 20px;
                background-color: #FFE4C4;
            }
            .symbol{
                margin-top: 36px;
                font-size: xx-large;
                border-radius: 50%;
                width: 20%;
                height: 72px;
                background-color:bisque;
            }
            .number{
                margin-top: 36px;
                font-size: xx-large;
                border-radius: 50%;
                width: 20%;
                height: 72px;
                background-color:beige;
            }
            .calculate{
                margin-top: 36px;
                font-size: xx-large;
                border-radius: 50%;
                width: 20%;
                height: 72px;
                background-color: #FF4500;
            }
            .content input:hover{
                box-shadow: 5px 5px 5px #888888;
            }
            .content input:active{
                background-color: #FF0000;
            }
        </style>
        <script type="text/javascript">
            function clearValue(){
                document.getElementById("result").value="";
            }
            function get(value){
                document.getElementById("result").value+=value;
            }
            function calculate(){
                var result=0;
                result=document.getElementById("result").value;
                document.getElementById("result").value="";
                document.getElementById("result").value=eval(result);
            };
        </script>
    </head>
    <body>
        <div class="banner">
            <h2>
                简 易 计 算 器
            </h2>
        </div>
            <br />
        <div class="content">
            <input type="button" value="清 除" class="clear" onclick="clearValue()"/>
            <input type="text" id="result" readonly="readonly" placeholder="运 算 结 果 显 示"/>
                <br />
            <input type="button" value="1" class="number" onclick="get(this.value)"/>
            <input type="button" value="2" class="number" onclick="get(this.value)"/>
            <input type="button" value="3" class="number" onclick="get(this.value)"/>
            <input type="button" value="+" class="symbol" onclick="get(this.value)"/>
                <br />
            <input type="button" value="4" class="number" onclick="get(this.value)"/>
            <input type="button" value="5" class="number" onclick="get(this.value)"/>
            <input type="button" value="6" class="number" onclick="get(this.value)"/>
            <input type="button" value="-" class="symbol" onclick="get(this.value)"/>
                <br />
            <input type="button" value="7" class="number" onclick="get(this.value)"/>
            <input type="button" value="8" class="number" onclick="get(this.value)"/>
            <input type="button" value="9" class="number" onclick="get(this.value)"/>
            <input type="button" value="*" class="symbol" onclick="get(this.value)"/>
                <br />
            <input type="button" value="0" class="number" onclick="get(this.value)"/>
            <input type="button" value="." class="symbol" onclick="get(this.value)"/>
            <input type="button" value="/" class="symbol" onclick="get(this.value)"/>
            <input type="button" value="=" class="calculate" onclick="calculate()"/>
        </div>
            <br />

    </body>
</html>

4、数据库的连接

db.py
import pymysql
from app import hello_login
pymysql.install_as_MySQLdb()
connection = pymysql.connect(host='127.0.0.1', user='root', passwd="123456", db='calculator',charset='utf8')
cursor = connection.cursor()

data = ('郭龙梅', '12346')

sql="insert into user1(name,pwd) values('郭龙梅', '12346');"
# 执行插入语句

cursor.execute(sql)
cursor.execute("select * from user1")
for r in cursor:
    print(r)
# 提交事务
connection.commit()

# 关闭游标和连接
cursor.close()

 

5、Flask框架实现

app.py
from flask import Flask, render_template, request

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    # 返回网页文件
    return render_template('register.html')

@app.route('/register',methods=['post'])
def hello_register():
    username = request.form.get('nickname')
    password = request.form.get('password')
   # reg-password = request.form.get('password')
    print(username, password)


    import pymysql
    pymysql.install_as_MySQLdb()
    connection = pymysql.connect(host='127.0.0.1', user='root', passwd="123456", db='calculator', charset='utf8')
    #创建游标对象
    cursor = connection.cursor()

    sql = "insert into user1(name,pwd) values(%s,%s);"
    values=(username,password)
    # 执行插入语句

    cursor.execute(sql,values)
    cursor.execute("select * from user1")
    for r in cursor:
        print(r)
    # 提交事务
    connection.commit()

    # 关闭游标和连接
    cursor.close()
    return render_template('index.html')

#  '/login', motheds=["POST"] ------> []中应该为''
@app.route('/login',methods=['post'])
def hello_login():
    username = request.form.get('username')
    password = request.form.get('password')
    captcha = request.form.get('captcha')

    print(username, password,captcha)

    return render_template('jisuanqi.html')
@app.route('/jisuanqi')
def hello_jisuanqi():

    return render_template('admin.html')



if __name__ == '__main__':

    app.run()

 

posted @ 2023-12-04 22:57  g长风  阅读(61)  评论(0)    收藏  举报