• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
lzufe-wfz
博客园    首页    新随笔    联系   管理    订阅  订阅
第二次作业

实验目的

 1.掌握软件开发的基本流程。

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

 实验内容

 设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录(保存数据最好使用数据库)。

 实验步骤及结果

 一、计算器登录界面

登录流程图

 

 

具体代码

 

HTML:

 

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <meta http-equiv="X-UA-Compatuble" content="IE=edge">

        <meta name="viewport" content="width=device-width,initial-scale=1.0">

        <title>登录界面</title>

        <link rel="stylesheet" href="css/index.css">

    </head>

    <body>

        <div class="frame">

            <div class="biaoti">

                <h1>登录界面</h1>

            </div>

                <input type="text" placeholder="     请输入--用户名/email/手机" id="username"/>

                <input type="password" placeholder="     请输入--密码" id="password"/>

            <div class="dianji">

                <a href="#"><P>登录</P></a>

            </div>

        </div>

    </body>

</html>

 

 CSS:

 

*{/*初始值*/

    padding: 0;

    margin: 0;

}

body{

    width: 100vw;/*设置视图宽度*/

    height: 100vh;/*设置视图高度*/

    background-image: url(../img/bjt1.jpg);/*导入背景图*/

    display: flex;/*弹性布局*/

    align-items: center;/*设置水平+垂直居中*/

    justify-content: center;/*设置弹性布局居中*/

}

.frame{

    position: relative;/*设置相对布局*/

    width: 520px;/*设置宽度*/

    height: 520px;/*设置高度*/

    background: rgba(255, 255, 255, 0.5);/*设置背景颜色及透明度*/

    display: flex;/*弹性布局*/

    flex-direction: column;/*使元素纵向排列*/

    align-items: center;/*设置水平+垂直居中*/

    border-radius: 50%;/*设置边缘弧度*/

    box-shadow: 0px 10px 40px 15px rgba(0, 0, 0, 0.8);/*设置盒子边缘阴影(rgba的a表示颜色透明度)*/

    line-height: 100px;

    background: linear-gradient(to bottom,transparent 30%,rgb(71, 5, 65));;/*设置颜色从下到上为透明渐变*/

}

.biaoti{

    margin-top: 100px;/*设置距离顶部位置*/

    font-size: 25px;/*设置字体大小*/

    font-family:'隶书';/*设置字体*/

    color: rgb(0, 0, 0); /*设置颜色*/

}

/*输入账号部分*/    

#username{

    height: 40px;/*设置高度*/

    width: 300px;/*设置宽度*/

    border-radius: 20px;/*设置边缘弧度*/

    border: 2px solid rgb(255, 255, 255);/*设置边缘线条粗细及颜色*/

    background: rgba(255, 255, 255, 0);/*设置透明度*/

    margin-top: 20px;/*设置距离顶部位置*/

}

/*输入密码部分*/

#password{

    height: 40px;/*设置高度*/

    width: 300px;/*设置宽度*/

    border-radius: 20px;/*设置边缘弧度*/

    border: 2px solid rgb(255, 255, 255);/*设置边缘线条粗细及颜色*/

    background: rgba(255, 255, 255, 0);/*设置透明度*/

    margin-top: 20px;/*设置距离顶部位置*/

}

/*点击登录部分*/

.dianji{

    text-align: center;/*字体居中*/

    width: 100px;/*设置宽度*/

    border: 2px solid #fff;/*设置边缘线条粗细及颜色*/

    border-radius: 50%;/*设置边缘弧度*/

    background: rgba(0, 0, 0, 0.1);/*设置透明度*/

    box-shadow: 0px 10px 40px 15px rgba(255, 255, 255, 0.3);/*设置盒子边缘阴影(rgba的a表示颜色透明度)*/

    margin-top: 70px;/*设置距离顶部位置*/

}

.dianji a{

    text-decoration: none;/*取消下滑线*/

}

.dianji p{

    font-size: 25px;/*设置字体大小*/

    font-family: '隶书';/*设置字体*/

    color: azure;/*设置颜色*/

}

/*设置鼠标触碰到登录时背景颜色变换*/

.dianji:hover{

    background-color: rgb(0, 0, 0);/*设置背景变换颜色*/

    transition: 1.2s;/*变换速度*/

}

 

使用的背景图片

 效果图

 

二、计算器功能的实现

简易UI图

 

基础布局代码

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

  <title>王zz计算器</title>

  <link rel="stylesheet" href="./css/index.css">

</head>

<body>

  <div class="page-wrapper">

    <div class="calc-container">

      <!-- 头部操作按钮 -->

      <div class="header">

        <div class="header-left">

          <div class="window-action close"></div>

          <div class="window-action min"></div>

          <div class="window-action max"></div>

        </div>

        <div class="header-right">

          <div class="window-action theme"></div>

          <div class="window-action history"></div>

          <div class="window-action info"></div>

        </div>

      </div>

 

      <!-- 计算区域 -->

      <div class="calc-area">

        <!-- 计算行 -->

        <div class="calc-line">10</div>

        <!-- 当前数字显示行 -->

        <div class="current-number">1</div>

      </div>

 

      <!-- 数字键盘块 -->

      <div class="keyboard-container">

        <ul>

          <li class="keyboard-line">

            <div class="keycode">CE</div>

            <div class="keycode">-</div>

            <div class="keycode">%</div>

            <div class="keycode">÷</div>

          </li>

          <li class="keyboard-line">

            <div class="keycode">7</div>

            <div class="keycode">9</div>

            <div class="keycode">9</div>

            <div class="keycode">×</div>

          </li>

          <li class="keyboard-line">

            <div class="keycode">4</div>

            <div class="keycode">5</div>

            <div class="keycode">6</div>

            <div class="keycode">-</div>

          </li>

          <li class="keyboard-line">

            <div class="keycode">1</div>

            <div class="keycode">2</div>

            <div class="keycode">3</div>

            <div class="keycode">+</div>

          </li>

          <li class="keyboard-line">

            <div class="keycode">0</div>

            <div class="keycode">清除</div>

            <div class="keycode">·</div>

            <div class="keycode">=</div>

          </li>

        </ul>

      </div>

    </div>

  </div>

</body>

</html>

 

基础样式

 line-height: 64px

}

 

.keyboard-line {

 display: flex;

 flex-wrap: nowrap;

 justify-content: center;

 align-items: center

}

 

.keyboard-line .keycode {

 width: 25vw;

 height: 25vw;

 border: 1px solid #999;

 background-color: #d6d6d6;

 text-align: center;

 font-weight: 600;

 font-size: 28px;

 line-height: 25vw;

 box-sizing: border-box;

}

 

.keyboard-line .keycode:last-child {

 background-color: #f5923e;

 color: #fff

}

 

<!-- 数字键盘块 -->

<div class="keyboard-container" id="inputBlock">

 <ul>

   <li class="keyboard-line">

  <div class="keycode" data-action="clear">C</div>

  <div class="keycode" data-action="minusSign">±</div>

  <div class="keycode" data-action="point">%</div>

  <div class="keycode" data-action="divide">÷</div>

   </li>

   <li class="keyboard-line">

  <div class="keycode number" data-action="7">7</div>

  <div class="keycode number" data-action="8">8</div>

  <div class="keycode number" data-action="9">9</div>

  <div class="keycode" data-action="multiplication">×</div>

   </li>

   <li class="keyboard-line">

  <div class="keycode number" data-action="4">4</div>

  <div class="keycode number" data-action="5">5</div>

  <div class="keycode number" data-action="6">6</div>

  <div class="keycode" data-action="subtraction">-</div>

   </li>

   <li class="keyboard-line">

  <div class="keycode number" data-action="1">1</div>

  <div class="keycode number" data-action="2">2</div>

  <div class="keycode number" data-action="3">3</div>

  <div class="keycode" data-action="addition">+</div>

   </li>

   <li class="keyboard-line">

  <div class="keycode number" style="width: 50vw" data-action="0">0</div>

  <div class="keycode" data-action="dot">·</div>

  <div class="keycode" data-action="equal">=</div>

   </li>

 </ul>

</div>

开始我们的逻辑,首先定好各个操作的操作符及操作标识:

 

// 每个操作标识符对应的实际操作符号

var actionMap = {

 clear: ['clear'],

 minusSign: ['minusSign'],

 point: ['%', '%'],

 divide: ['÷', '/'],

 multiplication: ['×', '*'],

 subtraction: ['-', '-'],

 addition: ['+', '+'],

 dot: ['.'],

 equal: ['=', '=']

}

 

  * 重置

  */

 function reset() {

   current = []

   calcLineText = []

   setCalcLine()

   setCurrentNumber()

   // 重置清除标识

   needRest = false

   isDoEqual = false

 }

 

 /**

  * 点击事件实际处理

  * @param {MouseEvent} e

  */

 function itemClickHandler(e) {

   const target = e.target

   const action = target.getAttribute('data-action')

   switch (action) {

     // 处理清除

     case 'clear':

       reset()

       break

     // 处理负号

     case 'minusSign':

       if (isDoEqual) {

         reset()

       }

       var _action = actionMap[action]

       // 字符时,已经存在时

       if (current[0] === _action[0]) {

         current.shift()

       } else if (current[0] < 0) {

         current[0] = Math.abs(current[0])

       } else {

         current.unshift(_action[0])

       }

       break

     // 处理百分号

     case 'point':

       current.push(actionMap[action][0])

       break

     // 处理四则运算

     case 'divide':

     case 'multiplication':

     case 'subtraction':

     case 'addition':

       var item = actionMap[action]

       computedCalc(item[0], isDoEqual)

       break

     // 处理小数点

     case 'dot':

       if (current[current.length - 1] === actionMap['dot'][0] || current.includes(actionMap['dot'][0])) {

         break

       }

       if (!current.length) {

         current.push('0')

       }

       current.push(actionMap['dot'][0])

       break

     // 处理等于

     case 'equal':

       calcFinal()

       break

     // 处理数字输入

     default:

       if (needRest) {

         reset()

       }

       if (action === '0' && current[0] === '0') {

         break

       }

       current.push(action)

       isDoEqual = false

   }

   setCurrentNumber()

 }

 

 initEvent()

})(window)

 

 

 

 

 

 

三、数据库连接

1.DriverManager类

DriverManager类是JDBC的管理层,被用来管理数据库中的驱动程序。在使用Java操作数据库之前,须使用Class类的静态方法forName(String className)加载能够连接数据库的驱动程序。加载完连接数据库的驱动程序后,Java会自动将驱动程序的实例注册到DriverManager类中,这时即可通过DriverManager类的getConnection()方法与指定数据库建立连接。

 

要访问数据库,首先要加载数据库的驱动程序(只需要在第一次访问数据库时加载一次),然后每次访问数据时创建一个Connection对象,接着执行操作数据库的SQL语句,最后在完成数据库操作后销毁前面创建的Connection对象,释放与数据库的连接。

 

在项目中创建类Conn,并创建getConnection()方法,获取与MySQL数据库的连接,在主方法中调用getConnection()方法连接MySQL数据库,代码如下:

 

import java.sql.*;      //导入java.sql包

public class Conn {      // 创建类Conn

Connection con;       // 声明Connection对象

public Connection getConnection() {  // 建立返回值为Connection的方法

try {        // 加载数据库驱动类

Class.forName("com.mysql.jdbc.Driver");

System.out.println("数据库驱动加载成功");

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

try {      // 通过访问数据库的URL获取数据库连接对象

con = DriverManager.getConnection("jdbc:mysql:"

+ "//127.0.0.1:3306/test", "root", "root");

System.out.println("数据库连接成功");

}

catch (SQLException e) {

e.printStackTrace();

}

return con;     // 按方法要求返回一个Connection对象

  }

public static void main(String[] args) {  // 主方法

Conn c = new Conn();      // 创建本类对象

c.getConnection();      // 调用连接数据库的方法

    }

}

 

运行结果如图所示

 

 

加载数据库驱动程序之前,首先需要确定数据库驱动类是否成功加载到程序中,如果没有加载,可以按以下步骤加载,此处以加载MySQL数据库的驱动包为例介绍:

①将MySQL数据库的驱动包mysql_connector_java_5.1.36_bin.jar拷贝到当前项目下。

②选中当前项目,单击右键,选择“Build Path”/“Configure Build Path…”菜单项,在弹出的对话框中左侧选中“Java Build Path”,然后在右侧选中Libraries选项卡,单击“Add External JARs…”按钮,在弹出的对话框中选择要加载的数据库驱动包,即可在中间区域显示选择的JAR包,最后单击Apply按钮即可。

步骤如图所示

 

 

posted on 2023-12-04 12:33  喜u  阅读(48)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3