第二次作业

发布时间 2023-12-04 20:57:51作者: 归不归山人

一.实验目的

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

二.项目功能

  1. 简单计算机的设计与实现
  2. 登陆界面
  3. 登录和注册功能的实现
  4. 使用java语言,eclipse连接数据库
  5. 数据库保存数据

.使用环境

  1. 使用Microsoft Visio作为绘图工具
  2. 使用Java语言与IntelliJ IDEA Community Edition作开发工具
  3. 使用MySQL数据库储存数据
  4. 使用Navicat管理操作数据库

四.流程图

  1.登录流程图

     

  2.注册流程图

     

五.登录界面的前端代码

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title>登录页面</title>
  <link  href="./css/new_file.css" rel="stylesheet"/>
  </head>
  <body id="Body">
   <form action="users" method="post"  novalidate>
   <div id="Background" >
       <div id="z">
        登录:<input id="names" name="names"  type="text" placeholder="请输入用户名"/>
        <br />
        密码:<input id="pass" name="pass" type="password" placeholder="请输入密码" />
        <br /> 
       </div>
       <div id="BetweenButton" >
       <input type="button" value="登录" onclick="login()" />
       <input style="margin-left: 10px;" type="button" value="注册" onclick="register()" />
       </div>
     
    </div>
    
   </form>
  <script>
   function login(){
    var username = document.getElementById("names").value;
    var password = document.getElementById("pass").value;
    
    var user = {
     username: username,
     password: password
    };
    
    var fakeResponse = {success: false }; 

    setTimeout(function(){
     if(fakeResponse.success){
      alert("登录成功!");
     }
     else{
      alert("用户名或密码不正确!");
     }
    }, 1000);
   }
   
   function register(){
    alert("未注册!请先注册!");
   }
   
  </script>
   
   
  </body>
</html>

#fram{
 background-color: greenyellow;
}
#Background{
	 height: 400px;
	 width: 500px;
	 background-color: rgba(176, 196, 222,0.3);
	 background-repeat: no-repeat; 
	 background-size: 100% auto; 

	 border-radius: 10px;
	 position: absolute;
	 left: 20%;
	top: 25%;
	

}
#BetweenButton{
	 position: absolute;
	 width: 200px;
	 left: 40%;
	margin-top: 15px;
	
}
#Body{
	 background-image: url("../img/a4.jpg");
	 background-repeat: no-repeat;
	 background-attachment: fixed;
	 
	 background-size: cover;
 
}
#names{
	margin-top: 30px;

}
#pass{
	margin-top: 30px;

}
#z{
	margin-left: 25%;
	margin-top: 25%; 

登陆界面代码和效果如下

 

 

六.计算器的设计

1.导入模块

import tkinter as tk
2.实例化一个窗体对象

root = tk.Tk()
3.标题

root.title('计算器')
4.大小以及出现的位置

root.geometry("295x280+150+150")
5.透明度

root.attributes("-alpha", 0.9)
6.背景

root["background"] = "#ffffff"
7.标签

lable1 = tk.Label(root, textvariable=result_num, width=20, height=2, font=('宋体', 20), justify='left', background='#ffffff', anchor='se')
8.布局

lable1.grid(padx=4, pady=4, row=0, column=0, columnspan=4)
9.按钮

button_clear = tk.Button(root, text='C', width=5, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: clear())
button_back = tk.Button(root, text='←', width=5, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: back())
button_division = tk.Button(root, text='/', width=5, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: operator('/'))
button_multiplication = tk.Button(root, text='x', width=5, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: operator('*'))
 
button_clear            .grid(padx=4, row=1, column=0)
button_back             .grid(padx=4, row=1, column=1)
button_division         .grid(padx=4, row=1, column=2)
button_multiplication   .grid(padx=4, row=1, column=3)
 
button_seven = tk.Button(root, text='7', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('7'))
button_eight = tk.Button(root, text='8', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('8'))
button_nine = tk.Button(root, text='9', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('9'))
button_subtraction = tk.Button(root, text='—', width=5, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: operator('-'))
button_seven        .grid(padx=4, row=2, column=0)
button_eight        .grid(padx=4, row=2, column=1)
button_nine         .grid(padx=4, row=2, column=2)
button_subtraction  .grid(padx=4, row=2, column=3)
 
 
button_four = tk.Button(root, text='4', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('4'))
button_four.grid(padx=4, pady=4, row=3, column=0)
button_five = tk.Button(root, text='5', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('5'))
button_five.grid(padx=4, row=3, column=1)
button_six = tk.Button(root, text='6', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('6'))
button_six.grid(padx=4, row=3, column=2)
button_addition = tk.Button(root, text='+', width=5, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: operator('+'))
button_addition.grid(padx=4, row=3, column=3)
 
button_one = tk.Button(root, text='1', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('1'))
button_one.grid(padx=4, row=4, column=0)
button_two = tk.Button(root, text='2', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('2'))
button_two.grid(padx=4, row=4, column=1)
button_three = tk.Button(root, text='3', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('3'))
button_three.grid(padx=4, row=4, column=2)
button_equal = tk.Button(root, text='=', width=5, height=3, font=('宋体', 16), relief='flat', background='#C0C0C0', command=lambda: equal())
button_equal.grid(padx=4, row=4, rowspan=5, column=3)
 
button_zero = tk.Button(root, text='0', width=12, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('0'))
button_zero.grid(padx=4, pady=4, row=5, column=0, columnspan=2)
button_decimal = tk.Button(root, text='.', width=5, font=('宋体', 16), relief='flat', background='#FFDEAD', command=lambda: append_num('.'))
button_decimal.grid(padx=4, row=5, column=2)

  

计算器的界面效果:

功能描述:

1.添加数字

def append_num(i):
    lists.append(i)
    result_num.set(''.join(lists))
2.选择运算符号

def operator(i):
    if len(lists) > 0:
        if lists[-1] in ['+', '-', '*', '/']:
            lists[-1] = i
        else:
            lists.append(i)
        result_num.set(''.join(lists))
3.清零

def clear():
    lists.clear()
    result_num.set(0)
4.退格

def back():
    del lists[-1]
    result_num.set(lists)
5.等号

def equal():
    a = ''.join(lists)
    end_num = eval(a)
    result_num.set(end_num)
    lists.clear()
    lists.append(str(end_num))
6.定义一个列表收集输入的内容

lists = []
result_num = tk.StringVar()
result_num.set(0)

  

运行代码,输入数据进行运算:

七.数据库的连接

package com.hsp.edu;

 import com.mysql.cj.jdbc.Driver;

 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Properties;
//进一步优化,将信息写入到配置文件
    public static void connect05() throws IOException, ClassNotFoundException, SQLException {
        //通过Properties对象获取配置文件信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));//此时已经将配置文件的信息读取到了Properties中
        //获取相关信息
        final String user = properties.getProperty("user");//用户
        final String password = properties.getProperty("password");//密码
        final String url = properties.getProperty("url");//url
        final String driver = properties.getProperty("driver");
         Class.forName(driver);//注册驱动
        final Connection connection = DriverManager.getConnection(url, user, password);//获取连接
        System.out.println(connection);

    }

package com.hsp;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


public class Jdbc02 {
    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
        //前置工作:获取配置文件中的信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql1.properties"));//读取信息到集合中
        final String driver = properties.getProperty("driver");//获取全类名
        final String url = properties.getProperty("url");//获取url
        final String user = properties.getProperty("user");//获取用户名
        final String password = properties.getProperty("password");//获取密码
        System.out.println(properties);
        //1.注册驱动
      Class.forName(driver);
        //2.获取连接
        final Connection connection = DriverManager.getConnection(url, user, password);

        //3.执行 SQL语句
       //String sql1 = "CREATE TABLE news(id INT,content VARCHAR(32))";
       String sql2="INSERT INTO news VALUES (1,'张三','123456'),(2,'李四','56789'),(3,'刘琴','123456');
        final Statement statement = connection.createStatement();
        //final int row1 = statement.executeUpdate(sql1);//返回影响的行数
        final int row2 = statement.executeUpdate(sql2);//返回影响的行数
        final int row3 = statement.executeUpdate(sql3);

        //:验证是否执行成功
        /*if(row1!=0){
            System.out.println("执行成功");

        }else {
            System.out.println("执行失败");
        }*/
        if (row2!=0){
            System.out.println("执行成功");
        }else {
            System.out.println("执行失败");
        }
        if(row3!=0){
            System.out.println("执行成功");
        }else {
            System.out.println("执行失败");
        }

        //4.关闭资源
        statement.close();
        connection.close();
    }
}