首页 > 其他分享 >科学计算器的面向对象设计

科学计算器的面向对象设计

时间:2023-01-09 19:44:27浏览次数:59  
标签:Button 计算器 JPanel 面向对象 add 科学 new null 数据库

一、项目介绍

1.功能要求:

本课程设计是做了一个图形界面的科学计算器,其界面主要是由swing组件中的控件构成。

程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负数运算),同时能进行指数运算和自然对数运算,还有退格、清零,查看历史记录功能 。

2.功能架构图

 二、个人任务简述

1. 完成的任务与功能

序号

完成功能与任务

描述

1

全局搜索功能

采用swing编写客户端服务器可视化界面

2

面向对象设计

基本完成面向对象技术设计系统

3

数据库读写编码部分

使用JDBC连接数据库,Dao模式读写数据,直接底层操作,提供了简单,便捷的访问数据库的方法,跨平台性较强,灵活比较强,可以执行很复杂的SQL语句

4

数据库设计

采用MySQL数据库。表设计符合第三范式。

2.项目Git地址

https://gitee.com/li-rong-a-song/test.git

3.Git提交记录截图

 

三、本人负责功能详解

1. *面向对象设计

类设计说明:

 

 

2. *全局搜索功能:

2.1 采用swing编写客户端服务器可视化界面

 

 2.2 关键代码

public class MainJFrame extends JFrame {
    private boolean flag = false;
    static Connection con = null;// 数据库
    Button btn[] = new Button[] {

            new Button("x²"), new Button("√"), new Button("mod"), new Button("log"), new Button("("), new Button(")"),
            new Button("CE"), new Button("Del"), new Button("7"), new Button("8"), new Button("9"), new Button("+"),
            new Button("4"), new Button("5"), new Button("6"), new Button("-"), new Button("1"), new Button("2"),
            new Button("3"), new Button("*"), new Button("0"), new Button("."), new Button("="), new Button("/"),

    };// 按键部分
    private JPanel content1 = new JPanel();
    private JPanel content = new JPanel();
    private JPanel jbt = new JPanel();
    private JPanel jpb = new JPanel();
    private JPanel jpa = new JPanel();
    public JTextField jtf = new JTextField();
    public JTextArea jta = new JTextArea("历史记录");

    public MainJFrame() {

        content.setLayout(new BorderLayout());
        content1.setLayout(new BorderLayout());

        jta.setEditable(false);
        jta.setBackground(Color.white);
        jta.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 20));
        jpa.setLayout(new BorderLayout());

        Border border = BorderFactory.createLineBorder(Color.BLACK);
        jta.setBorder(BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(10, 10, 10, 10)));

        jta.setLineWrap(true);
        JScrollPane scrollPane = new JScrollPane(jta, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        add(scrollPane);

        content1.add(jpa);

        this.add(content1, BorderLayout.EAST);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu1 = new JMenu("清空历史");
        JMenuItem copyMenuItem = new JMenuItem("确定");

        copyMenuItem.addActionListener(new Menulistent());

        menu1.add(copyMenuItem);

        menu1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

        menuBar.add(menu1);

        setJMenuBar(menuBar);

        jtf.setPreferredSize(new Dimension(300, 100));
        jtf.setEditable(false);
        jtf.setBackground(Color.white);
        jtf.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 50));
        jtf.setHorizontalAlignment(JTextField.RIGHT);
        jpb.setLayout(new BorderLayout());
        jpb.add(jtf);

        content.add(jpb, BorderLayout.NORTH);

        jbt.setLayout(new GridLayout(6, 4));
        for (int i = 0; i < btn.length; i++) {
            jbt.add(btn[i]);
            if (i != 22 && i != 7 && i != 6 && i != 0)
                btn[i].addActionListener(new Listen());
            else
                btn[i].addActionListener(new Result());

        }
        content.add(jbt, BorderLayout.CENTER);
        this.add(content, BorderLayout.WEST);
        setTitle("计算器");
        setSize(500, 400);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
    }

 

3. *数据库读写编码部分

3.1 使用JDBC连接数据库,并用Dao模式读写数据

3.2 关键代码

public class CounterDaoImpl implements CounterDao {
    //JTextField jtf = new JTextField();
    //JTextArea jta = new JTextArea("历史记录");

    @Override
    public void insert(Counter cal) {

        Connection conn = null;
        PreparedStatement ps = null;
        String sql = "insert into mycal(history) value(?)";
        try {
            conn = JDBCUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setString(1, cal.getHistory());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("添加数据失败");
        }

    }

    @Override
    public void delete() {
        Statement stmt = null;
        PreparedStatement ps = null;
        Connection con = null;
        try {
            String sqldelect = "DELETE FROM mycal";

            con = JDBCUtil.getConnection();
            stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

            ps = con.prepareStatement(sqldelect);

            ps.executeUpdate();

//            jta.setText("历史记录");

            System.out.println("删除成功");
        } catch (SQLException e1) {
            System.out.println("查询数据库出错");
            e1.printStackTrace();
        } finally {
            try {

                stmt.close();
                con.close();
            } catch (SQLException e1) {
                System.out.println("关闭资源出错");

                e1.printStackTrace();

                stmt = null;
                con = null;
            }
        }
    }

    @Override
    public void diplayAllCal() {
        String sql = "select * from mycal";// 表中有id和history这列
        try (Connection conn = JDBCUtil.getConnection(); PreparedStatement pstat = conn.prepareStatement(sql);) {
            ResultSet rs = pstat.executeQuery(sql);
            while (rs.next()) {
                int id = rs.getInt("id");
                String history = rs.getString("history");
                System.out.format("历史记录id=%d,运算为=%s\n", id, history);
            }

        } catch (SQLException e1) {
            System.out.println("查询数据库出错");
            e1.printStackTrace();
        }

    }
}

4. 数据库设计

 4.1 简述数据库设计

根据系统需要,设计了一个mycal表,表中有两列数据history和id

history:代表运算式,id:表示表中序号

4.2 数据库表设计

4.3 难点及解决方法

时常出现Mysql启动失败的提示,查询了许多在mac中配置并启动Mysql的教程;在命令行中创建数据库表无法明显感受到数据是否读写,使用Sequel Ace连接Mysql后实现数据库的可视化。

四、课程设计感想

课程设计是一个考验综合能力的大型考核任务,不是一朝一夕的学习理论知识就能够完善所有功能任务的,同时如此庞大的体系也需要一些合作共享相互帮助集思广益效果才会更好,此次设计由我个人完成,不能及时地发现问题解决问题,甚是感受到了团队合作的重要性,也充分认识到了编写一些可视化前端面板能使系统程序更加人性化,用户使用起来更加简单明了方便快捷。在本次课程设计中,由于想实现查看历史记录功能但是并不完全熟悉数据库这部分内容,导致绕了很多弯路,遇到了很多错误,最后在csdn和哔哩哔哩视频教程的帮助下较为顺利地解决了,但也仍有很多问题。本是抱着面向对象设计的思想,实现用Dao模式读写数据库,但由于能力不足,我想不到如何将数据库内容展现在GUI界面中达到可视的目的,为此只能前端和后端交叉重叠了部分,可能未完全达到我的设计预期。

五、尚待改进或者新的想法

1. 自己所完成功能的不足之处及以后想要采取的改进方法。

1) 运算功能有限,尚未完成三角函数类运算。以后可以增加一些三角函数的运算方法,完善计算器的界面。

2) 尚未支持键盘快捷键,未完善复制粘贴功能。目前还没有对此的改进思路。

3) 没有实现多线程,不能提供网络计算服务。以后完善实现多线程技术,进一步完善计算功能。

 2. 课设后想要进一步做的事情:

通过此次课程设计,我了解到自身的不足还有很多。此次设计过程我也学到了很多,对很多技术有了更进一步的认识,也有了更多兴趣。我想进一步学习GUI界面编程和数据库技术,能用一行行代码来实现可视化编程确实是很神奇;而数据的存储除了文件存储,数据库确实是一个更好的选择,能实现数据共享,完成数据集中控制、增加数据维护性、提高数据安全性。

标签:Button,计算器,JPanel,面向对象,add,科学,new,null,数据库
From: https://www.cnblogs.com/asong-0112/p/17037331.html

相关文章

  • Java面向对象
    面向过程&面向对象一、什么是面向对象二、类与对象的关系三、创建与初始化对象NEW关键字的作用:1.实例化初始对象2.内存开辟一个空间3.把等号右边开好的......
  • C++面向对象程序设计
    目录第二章类和对象构造函数析构函数对象数组第三章深入理解类和对象3.5常对象与常成员3.6动态创建对象和释放对象3.7对象的生存期3.8程序实例第四章静态成员与友元......
  • Python实现画板、电子时钟、计算器、桌面放大镜
     1、Python实现画板功能importtkinterimportwx.stcimporttkinter.simpledialogimporttkinter.colorchooserimporttkinter.filedialogfromPILimportImage......
  • ENVI5.4科学数据集浏览器-FY-3C VIRR传感器的L1级数据为例-同样适用于欧空局LandCover
      ENVI科学数据集浏览器可以从HDF或NetCDF文件中建立新的ENVI栅格数据,包含数据,属性,纬度/经度信息这些元数据信息。用File>OpenAs>ScientificFormats> format菜......
  • 面向对象程序设计 第一章 绪论
    第一章绪论目录·计算机程序设计语言的发展·面向对象的方法·面向对象的软件开发·程序开发的过程·信息的表示与存储计算机程序·计算机的工作使用程序......
  • 用Java方法和循坏的计算器
    importjava.util.Scanner;publicclassPractise{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//创建一个对象用......
  • python面向对象
    python面向对象1面向对象编程基础2面向对象的动静态方法和三大特性之继承3面向对象的三大特性之封装、多态以及面向对象的反射4面向对象的魔法方法、元类5设计模......
  • 第1题-面向对象
    文章目录​​面向对象​​​​三大特征​​​​封装​​​​继承​​​​多态​​​​发生多态的必要条件​​面向对象面向对象与比面向过程是处理问题的两种不同的角度,面向......
  • 我在京东做研发 | 京东云算法科学家解析爆火的ChatGPT
    令人惊艳的ChatGPT横空出世背后有怎样的前沿技术支撑走向大规模产品应用又有何局限深耕对话式AI技术十余年京东云算法科学家将带您一同走进技术世界解析ChatGPT的技术......
  • python-面向对象
    1.什么是面向对象编程面向过程编程:是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程。面向对象编程:是一种计算机编程架构,以对象为中心的编......