管理系统Java+ Mysql(源码)

博主分享Java大作业项目,项目Github地址为https://github.com/vanyongqi/HonorOfKingsSystem。系统分工细致,将功能、实现和视图分离,虽未系统了解MVC设计模式但仍应用。还提到项目拓展较易,指出代码中GUI与数据库连接不应写在一起,参数传递格式更好的写法。

项目Github地址:https://github.com/vanyongqi/HonorOfKingsSystem

最近在忙活java大作业,各种学习钻研,疯狂抄袭改造,博百家精华,剔处处糟粕(吹b了);

时间比较赶,也很仓促,昨天熬了熬夜,今天加了加班。不得不说连我自己都被我这种发烧写代码的精神感动了,哇,真的写代码写爽了。不想和任何人说话,不想吃饭(主要是没吃的),伴随着寝室悦耳的咳嗽声(集体传染),不断前进。突然觉得写代码是一件很舒服的事情。

废话不多说了,先亮出思路吧。

拖得有点久,四月十号到七月十号当真是很久的故事了。 稍微梳理梳理就开始工作吧。

由于系统分工比较细致,主要是避免耦合性过高,尽量将功能、实现、和视图分离开来,没有系统的了解过MVC设计模式,不过还是腆着脸写,毕竟设计模式更重要的让用户能够清晰的了解代码,而非生搬硬套,只要达到那个意义就行,不必拘泥于形。下面用了思维导图来描述系统各个.java文件的作用,共计15个java文件。

就我个人而言,关于项目日后拓展方面,要比别的管理系统容易的多得多。写代码要从工程的角度去考量分析,维护性高,可靠性强的软件项目才有存活下去的意义,不然就只是单纯地在制造01流的垃圾。

                                             

 

个人觉得比较不错的地方:

 一共是三段代码,第一段将GUI与数据库连接写在了一起,实际上,是十分不妥当的一种做法。这样写,在实际过程中容易出现混乱,后来在网上看到别人的写法,觉得将其分离才是更为合适的方法。

import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class AddInfor extends JDialog implements ActionListener {
    JButton ADDROLE;
    JButton CONCLE;
    JTextField nameInput;
    JTextField stageNameInput;
    JTextField gameLocationInput;
    JTextField gameAdvantageInput;
    JTextField rolePropertyInput;
    JTextField rolePriceInput;
    JTextField roleSkillInput;

    public AddInfor(Frame owner, String title, boolean modal) {

        super(owner, title, modal);

        JPanel LABELAREA = new JPanel();
        JPanel TEXTAREA = new JPanel();
        JPanel BUTTONAREA = new JPanel();

        JLabel roleName = new JLabel("英雄");
        JLabel roleStageName = new JLabel("称号");
        JLabel gameLocation = new JLabel("位置");
        JLabel roleAdvantage = new JLabel("特长");
        JLabel roleProperty = new JLabel("属性");
        JLabel rolePrice = new JLabel("价格");
        JLabel roleSkill = new JLabel("技能");

        nameInput = new JTextField(10);
        stageNameInput = new JTextField(10);
        gameLocationInput = new JTextField(10);
        gameAdvantageInput = new JTextField(10);
        rolePropertyInput = new JTextField(10);
        rolePriceInput = new JTextField(10);
        roleSkillInput = new JTextField(10);

        ADDROLE = new JButton("增加角色");
        ADDROLE.addActionListener(this);
        CONCLE = new JButton("取消");
        CONCLE.addActionListener(this);

        // design LAYOUT
        LABELAREA.setLayout(new GridLayout(6, 1));
        LABELAREA.add(roleName);
        LABELAREA.add(roleStageName);
        LABELAREA.add(gameLocation);
        LABELAREA.add(roleAdvantage);
        LABELAREA.add(roleProperty);
        LABELAREA.add(rolePrice);
        LABELAREA.add(roleSkill);

        TEXTAREA.setLayout(new GridLayout(6, 1));
        TEXTAREA.add(nameInput);
        TEXTAREA.add(stageNameInput);
        TEXTAREA.add(gameLocationInput);
        TEXTAREA.add(gameAdvantageInput);
        TEXTAREA.add(rolePropertyInput);
        TEXTAREA.add(rolePriceInput);
        TEXTAREA.add(roleSkillInput);

        BUTTONAREA.setLayout(new GridLayout(1, 2));
        BUTTONAREA.add(ADDROLE);
        BUTTONAREA.add(CONCLE);

        this.add(LABELAREA, BorderLayout.WEST);
        this.add(TEXTAREA, BorderLayout.CENTER);
        this.add(BUTTONAREA, BorderLayout.SOUTH);
        this.setLocation(450,350);
        this.setSize(300, 200);
        this.setVisible(true);

    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == ADDROLE) {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            System.out.println("修改完成!!!");
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                System.out.println("数据库加载观测   正常");

                String url = "jdbc:mysql://localhost:3306/hero";
                String user = "root";
                String PINcode = "012357";
                conn = DriverManager.getConnection(url, user, PINcode);

                String sql = "insert into hero values(?,?,?,?,?,?,?)";
                pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, nameInput.getText());
                pstmt.setString(2, stageNameInput.getText());
                pstmt.setString(3, gameLocationInput.getText());
                pstmt.setString(4, gameAdvantageInput.getText());
                pstmt.setString(5, rolePropertyInput.getText());
                pstmt.setString(6, "  "+rolePriceInput.getText());
                pstmt.setString(7, roleSkillInput.getText());
                pstmt.executeUpdate();
                this.dispose();
            } catch (Exception e1) {
                e1.printStackTrace();
            } finally {
                try {
                    if (rs != null) {
                        rs.close();
                        rs = null;
                    }
                    if (pstmt != null) {
                        pstmt.close();
                        pstmt = null;
                    }
                    /*if (conn != null) {
                        conn.close();
                        conn = null;
                    }*/
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }

        }
    }
}
//注册页面
import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.*;

public class Register extends JFrame{
    JLabel accountLabel,nameLabel;
    JButton okButton,resetButton;
    JTextField accountText,nameText;
    Box baseBox1,baseBox2, box1,box2,box3;		 //Box布局方式;
    //JPanel pane1,pane2;

    Register_DB regist;

    Register(){
        init();
    }


    void init(){
        setLayout(new FlowLayout());
        accountLabel = new JLabel("账号");
        nameLabel= new JLabel("密码");
        accountText = new JTextField(10);
        nameText = new JTextField(20);
        okButton = new JButton("确定");
        resetButton = new JButton("重置");

        regist = new Register_DB();

//		lab = new JLabel("用户注册页面");

        box1 = Box.createVerticalBox();
        box1.add(accountLabel);
        box1.add(Box.createVerticalStrut(8));
        box1.add(nameLabel);
        box2 = Box.createVerticalBox();
        box2.add(accountText);
        box2.add(Box.createVerticalStrut(8));
        box2.add(nameText);
        box3 = Box.createHorizontalBox();
        box3.add(okButton);
        box3.add(Box.createHorizontalStrut(15));
        box3.add(resetButton);
        baseBox1 = Box.createHorizontalBox();
        baseBox1.add(box1);
        baseBox1.add(Box.createHorizontalStrut(8));
        baseBox1.add(box2);
        baseBox2 = Box.createVerticalBox();
        baseBox2.add(baseBox1);
        baseBox2.add(Box.createVerticalStrut(10));
        baseBox2.add(box3);
        add(baseBox2);

        okButton.addActionListener(regist);
        resetButton.addActionListener(regist);


        regist.setaccountField(accountText);
        regist.setnameField(nameText);
        regist.setokButton(okButton);
        regist.setresetButton(resetButton);

        setBounds(200,200,400,300);
        setVisible(true);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setTitle("用户注册界面");
    }
}

 

//注册的数据库操作

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.*;

public class Register_DB extends Conn_DB implements ActionListener{

    JTextField textacc,textname;
    JButton okButton,resetButton;
    Statement stmt;
    ResultSet rs;
    String name;
//	double acc;
//	String name;
//	Connection con = null;

    public void setaccountField(JTextField a){
        textacc = a;
    }
    public void setnameField(JTextField n){
        textname = n;
    }
    public void setokButton(JButton b1){
        okButton = b1;
    }
    public void setresetButton(JButton b2){
        resetButton = b2;
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == okButton){
            String code = textname.getText();
            if(textacc.getText().equals(""))			//判断用户输入是否为空;
                JOptionPane.showMessageDialog(null, "请输入账号","警告对话框",JOptionPane.WARNING_MESSAGE);
            else if(code.equals(""))
                JOptionPane.showMessageDialog(null,"请输入姓名","警告对话框",JOptionPane.WARNING_MESSAGE);
            else{
                String acc = textacc.getText();
                /************************************************************************/

                String name = code;
                /************************************************************************/
/**********************************************************************************************************/
/**********************************************************************************************************/

               String mdCode= new MD5().encryption(code);

/**********************************************************************************************************/
/**********************************************************************************************************/
               /****************************************************************************/
                try {
                    connection();
                    writeInSql(acc,mdCode);
                } catch (Exception e1) {
                    System.out.println("插入失败");
                    e1.printStackTrace();
                }
            }
        }
        else if(e.getSource() == resetButton){
            textacc.setText("");
            textname.setText("");
        }
    }

    void writeInSql(String acc,String name) throws Exception{
        String sql;

        Connection con = super.con;
        Statement stmt = con.createStatement();

        //创建并检查数据库表,若没有"my"表,则创建表并执行插入操作,若表已存在,则直接执行操作,插入数据
        sql = "create table if not exists my(account varchar(10),name varchar(40))";

        stmt.executeUpdate(sql);
//		System.out.println(sql);		//查错;
        System.out.println("创建表成功");

        //插入存文本框中获取的数据;
        sql = "insert into my(account,name) values('"+acc+"','"+name+"')";
        int rw = stmt.executeUpdate(sql);
//		System.out.println(sql);
        if(rw <= 0){				//判断数据是否插入成功
            JOptionPane.showMessageDialog(null,"注册失败");
        }
        else{
            JOptionPane.showMessageDialog(null, "注册成功");
        }
    }
}

 

/**********************Login 部分*********************************/



        regist = new Register_DB();



/***************************************************************/
        regist.setaccountField(accountText);
        regist.setnameField(nameText);
        regist.setokButton(okButton);
        regist.setresetButton(resetButton);

    public void setaccountField(JTextField a){
        textacc = a;
    }
    public void setnameField(JTextField n){
        textname = n;
    }
    public void setokButton(JButton b1){
        okButton = b1;
    }
    public void setresetButton(JButton b2){
        resetButton = b2;
    }

参数的传递,在格式上看起来更加赏心悦目。不得不说,这种写法确实很棒。

                                         

                                                 

                                                 

酒店管理系统分为前台和后台两个部分,其中后台供管理员管理系统之用,包括客房类型设置模块、客房设置模块以及操作员设置三个子模块,具体的功能模块如下。 客房类型设置模块:该模块用来管理酒店的所有客房类型,包括新增客房类型、编辑已有客房类型、删除客房类型等功能。 客房设置模块:该模块用来管理酒店的所有客房信息,包括新增客房、编辑已有客房、删除客房等功能。 操作员设置模块:该模块用来管理酒店的操作员信息,包括新增操作员、编辑已有操作员信息、删除操作信息等功能。 系统前台供酒店所有工作人员使用,包括入住登记模块、结账模块、预定模块、客户管理模块以及业务统计五个模块。具体的功能模块如下。 入住登记模块:该模块用来登记客户的入住信息,其中入住信息包括登记信息、客人信息以及费用信息三部分。 结账模块:该模块用来处理客户的退房信息,只需要知道客户所住的房间号码,就能进行退房结账。 预定模块:该模块用来处理客户的预定信息,除了可以新增预定信息外,还可以对已有的预定信息进行管理。 客户管理模块:该模块用来管理客户的登记信息,包括新增客户信息、编译已有客户信息、删除客户信息等功能。 业务统计模块:该模块用来统计酒店的客房出租率,并且已图形报表的形式来显示出租率信息。 本系统的开发工具具体如下。 系统开发平台:MyEclipse 6.5。 数据库管理系统软件:MySQL 5.0。 java开发包:JDK 5.0以上。 Web服务器:Tomcat 6.0。 本系统采用MVC架构模式开发,具体技术如下。 AJAX框架:使用ExtJS技术开发 显示层:使用JSP技术开发 数据访问层:使用DAO模式开发 持久层:使用Hibernate框架开发 首页访问地址 :http://localhost:8080/JavaPrj_9/首页配置 页面 修改 打开web.xml 修改 即可 /WEB-INF/pages/userLogin.jsp 复制代码 数据库配置 为hotel-hibernate.xml 文件 测试了将近2个小时 系统跑的还不错 一下小细节 bug 大家可以自己去调整下
为了巩固知识,做的一个网站。基于struts2+spring+springjdbc开发的代码分享网,所有源码已开源。 网站功能介绍: 1、邮件注册(采用阿里云企业邮箱),为了让大家体验一下邮箱注册功能。我已经在分享的源码中,为大家配置好了测试账户,大家可以在自己电脑上进行测试。 2、md5加密,注册用户,所有密码会以密文保存在数据库,可以保证安全。 3、代码分享功能(核心功能),该功能的主要特色是集成了优秀的文本编辑器,支持插入代码、插入链接、插入表情、插入图片、支持在线预览。同时也实现了文件上传(基于struts2的文件上传功能)。 4、代码下载,下载功能会判断用户是否下载过该代码,若下载过则不扣积分。下载功能也是基于struts2的下载模块实现的。 5、代码评论,该功能是我仿照qq空间评论功能实现的,在本站中,我是以时间倒叙方式显示的(也支持正序)。 6、代码收藏,用户可以收藏代码。 7、消息中心,分为了0系统消息、1评论消息、2兑换消息、3上传图片消息、4上传文件消息、5下载消息(用户扣除积分)、6下载消息。 8、代码中心,分为了分享代码、下载代码、评论代码、收藏代码。 9、设置功能,支持修改昵称、城市、性别、座右铭、密码、头像。 10、赞助兑换功能,支持1个赞助兑换10个积分,也支持用赞助升级称号。 11、其他功能包括:图片压缩处理功能(即使是几M的图片,压缩后也只有几十kb)。通用json处理功能(向方法中传递任何参数,int、string等,都会返回json数据,而且速度很快)。分词功能(点击某一个分享,进入详情页的时候,会对该分享名称进行分词,并且加入到head中,利于网站seo)。 可能还有一些其他功能,通过查看源码可了解。 网站技术介绍: 1、采用语言,java 2、后台框架,struts2+spring+spring JDBC 3、前台技术,layui+jquery+ajax 网站设计思路: 前台渲染是采用的jsp技术,为了保证网站的速度,我使用了几种方法: 1、我将重复的代码保存成单独的jsp文件然后引入(这样的好处就是重复的jsp文件只会加载一次,然后浏览器缓存,下次加载速度会提升)。比如,我将link和header单独提取出来,然后在其他页面进行引入: 2、所有的业务功能,我都放在了html加载完成之后,利用jquery+ajax获取数据后再渲染界面(这样的好处就是给用户的感觉是网站速度很快。因为用户打开后,立马渲染html代码,此时网站结构已经出现,接着用jqury+ajx去后台获取数据。由于我的sql语句严格控制在ms级别,所以只需要几百ms,数据即可拿到,此时渲染在页面上给用户的感觉很快) 3、sql语句的控制,本站的所有sql语句,均控制在1s以下。这块我花了很长时间进行sql优化,我举个例子:为了减少数据库的访问次数,我会想方设法通过一条语句获取所有信息,并且严格控制它的执行速度,绝对不可以超过1s。首页的下载榜、评论榜、收藏榜,这三个功能的数据就是通过一条sql语句获取的: #优化联合查询用户评论、下载、收藏的资源列表 select a.sort,a.id,r.name,a.nowtime,r.isjing,r.isyuan, ifnull(c.res_comments_num,0) as res_comments_num, ifnull(d.res_download_num,0) as res_download_num, ifnull(kp.res_keep_num,0) as res_keep_num from #sort为1代表用户评论的代码列表 (select 1 as sort,c.resources_id as id,c.nowtime as nowtime from comments c #需要指定用户 where c.user1_id = 1 group by c.resources_id union all #sort为2代表用户下载的代码列表 select 2 as sort,d.resources_id as id,d.nowtime as nowtime from download d #需要指定用户 where d.user_id = 1 group by d.resources_id union all #sort为3代表用户收藏的代码列表 select 3 as sort,k.resources_id as id,k.nowtime as nowtime from keep
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七咔七咔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值