jjzjj

企业员工人事管理系统(数据库课设)

流泪的飞 2024-02-23 原文

文章目录

  • 系列文章目录

  • 前言

  • 一、数据库课设概述
  • 二、需求分析
  • 三、概念结构设计
  • 四、逻辑结构设计
  • 五、物理结构设计
  • 六、数据库设计实施
  • 七、团队成员负责模块
  • 八、涉及到数据库与JAVA连接部分代码
  • 九、完成界面设计主要涉及到JAVA的代码部分
  • 十、企业人事资源管理系统功能的主要演示展示
  • 十一、总结课程设计所遇到的问题以及如何解决问题

    前言

       结合MySQL语法和JAVA相关知识,在分析用户设计需求的基础上,设计并实现了企业人事资源管理系统。本文所介绍的企业人事资源管理系统主要用于员工个人资料的录入、职务变动的记录和管理,使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。人事管理系统主要以下几项功能要求:新员工资料的输入;自动分配员工号,并且设置初始的用户密码;人事变动的详细记录,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等。

       主要研究基于JAVA的界面设计完成,我们通过调查研究关于企业怎样管理人事资源,分析数据并总结所需要的功能,以便于我们成功构建数据库模型,为下一步概念设计做准备,对于数据库的创建,我们需要加入众多功能,优化数据库的查询效率,完善处理数据的功能,设计JAVA界面,并添加所有的功能部分代码,完成数据库于JAVA连接,形成企业人事资源管理系统。

       本文所设计的数据库系统主要功能有:(1)用户登录功能;(2)员工基本信息管理;(3)部门信息管理;(4)签到签离;(5)员工签到管理;(6)人员调用管理等。


一、概述

       近年来,由于计算机硬件、软件的飞速发展和广泛应用,对于企业管理而言,研发一个信息化自动化的员工人事管理系统至关重要。在本次数据库课设中,通过前期查阅企业员工工作流程等相关资料,根据开发设计系统时系统应该满足的可操作性、实用性、可靠性、安全性以及可维护性等原则,针对企业管理员工的主要数据以及功能需求,开发了一个基于MySql Server数据库,并且利用Java Swing书写windows前端界面实现该系统的相关功能的简要企业员工人事管理系统,该系统大概内容如下:
    企业人事管理系统主要用于员工个人资料的录入、职务变动的记录和管理,使用人事管理  系统,便于公司领导掌握人员的动向,及时调整人才的分配。人事管理系统主要有以下几项功能要求:新员工资料的输入;自动分配员工号,并且设置初始的用户密码;人事变动的详细记录,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等。


二、需求分析

 (一)用户需求

1.企业员工

上班签到和下班签离;

2.企业系统管理人员:

(1) 对员工基本信息如姓名、学历、所属部门等的查询与修改;
(2) 对员工职位或部门调整等信息的管理;
(3) 对企业各部门信息的添加修改等管理;
(4) 对员工工资的调整,奖金的发放金额的管理;
(5) 对员工入职离职等信息的管理,如新员工入职时在数据库相应表中
(6) 录入该员工基本信息,将员工设定为在职状态;当员工离职时,将员工改为离职状                          态,并从数据库中删去该员工相关数据。

(二)功能需求(行为需求)

    通过前期利用网络媒体等平台对企业管理员工流程等方面数据的调研结果,本系统应具有的功能有:

1.登录功能:

    系统有两类用户,企业员工,企业系统管理员;

2.员工基本信息管理:

  管理员拥有对入职员工基本信息的查询,因升职等客观原因而引起的职位变动、薪资增长等员工基本信息的修改,新员工信息的添加以及离职员工信息删除等功能;

3.部门信息管理

   部门信息查询,部门合并或削减时部门信息的修改或删除功能;

4.签到签离:

   员工拥有上班签到和下班签离的功能;

5.工资信息管理:

     管理员拥有对员工基本工资信息的查询,因升职或奖励等原因引起的工资的增加、修改及        离职等原因导致的员工基本工资信息的删除等功能;

6.员工签到管理:

  管理员拥有对员工签到信息的查询功能;

 7.人员调用管理:

    人员调用信息的查询,当执行人员调动时人员调动信息的自动添加,当撤销人员调动时系统自动删除相关人员调动信息。
以上该系统的主要功能需求可如图所示:

(三)数据需求

1.员工基本信息管理

(1) DD(数据字典):
 数据结构:员工基本信息(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻   状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工     基本工资、所在部门编号、状态)
对所有部分数据结构的数据项进行分析,并总结每一个数据项所表示的意思,主要分析如下:
编号:在添加新入职员工的基本信息时,系统会根据预先设定的某种规则,自动为每个员工分配一个唯一且有特殊意义的编号;
状态:状态有在职和离职两种形式;
入职时间:入职时间由系统确定,规定某员工转正时间为正式入职时间;
员工级别:员工级别有试用、正式、组长、部门经理、总经理;
员工基本工资:员工基本工资分为两类,基础底薪和奖金,员工初始工资应为职位所对应的具体薪资。
(2) DFD(数据流图):

2.员工信息修改

(1)DD(数据字典):
 数据结构:员工信息修改(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、  婚姻   状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本   工资、所在部门编号、状态)
 对所有部分数据结构的数据项进行分析,并总结每一个数据项所表示的意思,主要分析如下:
 所在部门编号:由系统预先定义,部门编号与具体部门一一对应;
 编号:在添加新入职员工的基本信息时,系统会根据预先设定的某种规则,自动为每个员工分配   一个唯一且有特殊意义的编号;
 状态:状态有在职和离职两种形式;
入职时间:入职时间由系统确定,规定某员工转正时间为正式入职时间;
员工级别:员工级别有试用、正式、组长、部门经理、总经理。
(2)DFD(数据流图):

3.员工签到签离

(1)DD(数据字典):
 数据结构:签到签离(签到编号、员工编号、所属部门、签到时间、签离时间)
 对所有涉及的数据结构的数据项进行分析,并总结每一个数据项所表示的意思,主要分析如下:
 签到编号:根据打卡时间,系统自动排序生成;
 签到时间:系统根据当前时间自动生成;
 签离时间:系统根据当前时间自动生成;
(2)DFD(数据流图):

4.部门管理

(1)DD(数据字典):
数据结构:部门管理(部门编号、部门名称、部门职能、上级部门编号)
数据项:
部门编号:系统预先为公司各部门分配一个编号;
上级部门编号:由输入部门信息时,管理员根据公司实际情况指定,一个部门只能有1个或0个上级部门。
(2)DFD(数据流图):

5.人员调动

(1)DD(数据字典):
数据结构:人员调动(调动编号、员工编号、调动时间、调动部门编号、调动原因、调动职位)
数据项:
调动编号:该编号无实际意义,由系统自动生成,作为调动信息的记录编号,根据调动时间进行排序;
调动职位:职位主要有:执行总裁、部门负责人、组长;
调动原因:调动原因处无固定选项,为字符串格式,可自行输入调动的原因,如升职任命、部门合并、降职及工作失误等;
调动时间:具体调动时间以执行调动命令时当前系统时间为准,由系统自动生成;
(2)DFD(数据流图):

6.员工工资管理

(1)DD(数据字典):
数据结构:员工工资管理(工资编号、员工编号、员工姓名、员工基本工资、员工奖金、发放时间)
数据项:
工资编号:该编号由系统自动生成,用来标识发放工资的记录;
发放时间:由系统根据薪资发放成功的时间自动生成;
员工奖金:员工奖金包括年终奖和平时奖励,年终奖由签到全勤的员工获得,平时奖励根据具体事例由管理员输入,在发工资时由系统统一计算;
(2)DFD(数据流图):

7.系统全局用例图如下图所示:


 三、概念结构设计

  采用E-R方法进行数据库的概念设计,分数据抽象、设计局部概念模式、设计全局概念模式三个过程,经过数据抽象、局部视图设计,最终集成的全局E-R图如下所示如下:


五、逻辑结构设计 

1.关系模式

  根据数据库概念结构设计,并按照一定的转换原则,根据范式规则,数据库概念结构转化的关系模式如下:
  (1)部门(部门编号、名称、职能、上级部门编号);
  (2)工资信息(工资编号、员工编号、基本工资、奖金,发放时间);
  (3)员工基本信息(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本工资、所在部门编号、状态,密码,身份);
  (4)人员调动(调动编号、员工编号、调动时间、调动部门、调动原因、调动职位);
  (5)员工签到(签到编号、员工编号、签到时间、签离时间)。

2.完整性要求

  (1)工资信息—基本工资和奖金不能低于0,员工编号只能是数据库里面有的信息,不能随意添加;
  (2)员工基本信息—入职时间为当前时间,由系统自动添加,不可随意更改;
  (3)人员调动信息—调动时间为当前时间,由系统自动添加,不可随意更改;
  (4)人员签到信息—签到时间和签离为当前时间,由系统自动添加,不可随意更改。

3.安全管理和用户角色设置

  (1)管理员:可对部门信息,员工信息,工资信息,人员调动等进行增删改查的操作,对员工签到信息,可以进行查看
  (2)普通用户:只能进行登陆后,进行签到,签离的操作

4.数据库备份和恢复方案

  pmsystem database 企业人事管理系统
  to disk = ‘F:\工资人事管理系统.Bak’ with format,
  name = ‘企业人事管理系统’;


六、物理结构设计 

1.数据库的创建

 create database 企业人事管理系统;
  use 企业人事管理系统;

 2.表的创建

(1)企业部门表的创建

create table 部门(
   部门编号 varchar(40) not null primary key,
   部门名称 varchar(40) not null,
   部门职能 varchar(40) not null,
   上级部门编号 varchar(40) not null
  );

 (2)员工工资信息表的创建

create table 工资信息(
   工资编号 varchar(40) not null primary key,
   员工编号 varchar(40) not null,
   基本工资 float not null,
   奖金 float not null
  );

(3)企业人事调动表的创建

create table 人员调动(
   调动编号 varchar(40) not null primary key,
   员工编号 varchar(40) not null,
   调动时间 date not null,
   调动部门编号 varchar(40) not null,
   调动原因 varchar(40) not null,
   调动职位 varchar(40) not null
  );

(4)员工基本信息表的创建

create table 员工基本信息 (
   编号 varchar(40) not null primary key,
   姓名 varchar(40) not null,
   性别 varchar(40) not null,
   生日 varchar(40) not null,
   政治面貌 varchar(40) not null,
   文化程度 varchar(40) not null,
   婚姻状况 varchar(40) not null,
   籍贯 varchar(40) not null,
   身份证号 varchar(40) not null,
   手机号码 varchar(40) not null,
   档案存放地 varchar(40) not null,
   户口所在地 varchar(40) not null,
   入职时间 date not null,
   员工级别 varchar(40) not null,
   员工基本工资 float not null,
   所在部门编号varchar(40) not null,
   状态 varchar(40) not null,
   身份 varchar(40) not null,
   密码 varchar(40) not null
  );

3.视图设计

(1)展示工资编号,员工名字,基本工资和奖金

 create view 员工_工资
  as
  select gzxx.,ygjbxx.xm
  from ygjbxx,gzxx
  where ygjbxx.bh=gzxx.ygbh;

(2)展示调动信息和它对应的员工名字

create view 调动_员工
  as
  select rydd.,ygjbxx.xm
  from ygjbxx,rydd
  where rydd.ygbh=ygjbxx.bh;

(3)展示员工签到信息和它对应的员工名字4.存储过程设计

 create view 签到_员工
  as
  select ygqd.*,ygjbxx.xm
  from ygjbxx,ygqd
  where ygqd.ygbh=ygjbxx.bh;

 4.存储过程设计

(1)输入员工名字,得到他的工资信息

 create procedure procedurea
  Cm varchar(20)
  begin
  select *
  from 工资信息
  where 员工编号=(select 编号 from 员工基本信息 where xm=Cm);
  end;

(2)输入员工名字,得到他的签到信息

create procedure procedureb
  Zm varchar(20)
  as
  begin
   select * from 员工签到 where 员工编号=(select 编号 from 员工基本信息 where 姓名=Zm);
  end;

(3)输入员工名字,得到他的账号和密码

create procedure procedurec
  Am varchar(20)
  as
  begin
   select * from uuser where 员工编号=(select bh from 员工基本信息 where xm=Am);
  end;

 5.触发器设计

(1)删除员工时,删除对应的人员调动,员工签到以及工资信息

create trigger triggerb
  on 员工基本信息 after delete
  as
  begin
  delete from 人员调动 where ygbh=(select bh from deleted);
  delete from 员工签到 where ygbh=(select bh from deleted);
  delete from 工作信息 where ygbh=(select bh from deleted);
  end;

   (2)当员工职位调动时,其当月工资和奖金翻倍

create trigger triggerc
  on 人员调动 after insert
  as
  begin
  update 员工信息 set 基本工资=基本工资*2,奖金=奖金*2
  where 员工编号=(select 员工编号 from inserted)
and 发放时间 like concat(’%’,concat(month(getdate()),’%’));
  end;

6.索引设计

(1)编写索引,根据员工签到时间排序

 create index indexa on 员工签到(签到时间 desc);

六、数据库设计实施

 (1)企业员工人事管理系统主要功能布局:

 

 (2)程序流程图:


七、团队成员负责模块

      主要负责人                           团队成员负责模块
       流泪的飞        主要负责数据库的建立与JAVA界面部分设计,实现部分功能的操作
       蘑菇头        主要实现数据库部分的功能,实现JAVA界面整体设计及功能的操作。


八、涉及到数据库与JAVA连接部分代码

package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DBhelper {

	/**
	 * 绑定数据库的帮助类
	 */
private final static String CNAME="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private final static String URL="jdbc:sqlserver://localhost:1433;databasename=工资人事管理系统";
	private final static String NAME="sa";
	private final static String PWD="123";
	
	static {
		try {
		Class.forName(CNAME);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

	//连接数据库的方法
	public static Connection getCon(){
		Connection con=null;
		try {
			con=DriverManager.getConnection(URL,NAME ,PWD);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return con;
	}
	
	//关闭连接的方法
	public static void myClose(Connection con,PreparedStatement ps,ResultSet rs){
		try {
			if(rs!=null){
				rs.close();
			}
			if(ps!=null){
				ps.close();
			}
			if(con!=null&&!con.isClosed()){
				con.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


 九、完成界面设计主要涉及到JAVA的代码部分

public Login() {
        this.setTitle("登录界面");
        this.setSize(350, 250);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(3);
        this.setResizable(false);// 设置窗体无法改变大小
        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        jpa.setLayout(gbl);

        jcb.addItem("员工");
        jcb.addItem("管理员");

        // 用户名以及其文本框的位置
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbl.setConstraints(jla, gbc);// 让约束对象来约束jla(坐标)
        jpa.add(jla);// 将jla增加到容器中

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbl.setConstraints(jtf, gbc);
        jpa.add(jtf);

        // 密码以及其文本框的位置
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.insets = new Insets(20, 0, 0, 0);
        gbl.setConstraints(jlb, gbc);
        jpa.add(jlb);

        gbc.gridx = 1;
        gbc.gridy = 1;
        gbl.setConstraints(jpf, gbc);
        jpa.add(jpf);

        // 身份以及其文本框的位置
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.insets = new Insets(20, 0, 0, 0);
        gbl.setConstraints(jlc, gbc);
        jpa.add(jlc);

        gbc.gridx = 1;
        gbc.gridy = 2;
        gbl.setConstraints(jcb, gbc);
        jpa.add(jcb);

        // 按钮位置
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbl.setConstraints(jba, gbc);
        jpa.add(jba);

        // 标题
        JLabel jlc = new JLabel("公司人力资源管理系统!");
        jlc.setFont(new Font("宋体", Font.BOLD, 20));
        jpn.add(jlc);

        // 登陆方法
        jba.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取对应文本框的值
                String xm = jtf.getText();
                // 获得密码框的值
                String mm = jpf.getText();
                String role = jcb.getSelectedItem() + "";
                Ygjbxx user=new Ygjbxx();
                user.setXm(xm);
                user.setMm(mm);
                user.setSf(role);
                if (role.equals("管理员")) {
                    String n=ud.login(user);
                    if (n!="") {
                        JOptionPane.showMessageDialog(null, "登陆成功!");
                        Login.this.dispose();
                        new YgjbxxTable();
                    } else {
                        JOptionPane.showMessageDialog(null, "登陆失败!");
                    }
                } else if (role.equals("员工")) {
                    String n=ud.login(user);
                    if (n!="") {
                        JOptionPane.showMessageDialog(null, "登陆成功!");
                        Login.this.dispose();
                        new YgqdTable(n);
                    } else {
                        JOptionPane.showMessageDialog(null, "登陆失败!");
                    }
                }
            }
        });
// 绑定数据
        myShow("");

        // 员工签到
        jbl.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                new YgqdTables();
            }
        });

        // 部门
        jbb.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new BmTable();
            }
        });

        // 调动
        jbj.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int rt = jtb.getSelectedRow();// 选中的行号
                if (rt >= 0) {// 如果选中了
                    String id = dtm.getValueAt(rt, 0).toString();
                    new addryDd(id);
                } else {
                    JOptionPane.showMessageDialog(null, "请选择你要使用的数据!");
                }
            }
        });

        // 调动记录
        jbk.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new RyddTable();
            }
        });

        // 增加工资信息
        jbh.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int rt = jtb.getSelectedRow();// 选中的行号
                if (rt >= 0) {// 如果选中了
                    String id = dtm.getValueAt(rt, 0).toString();
                    new addGzxx();
                } else {
                    JOptionPane.showMessageDialog(null, "请选择你要使用的数据!");
                }
            }
        });

        // 查看工资信息
        jbi.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new GzxxTable();
            }
        });

        // 增加事件
        jbc.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                new AddYgjbxx(YgjbxxTable.this);
            }
        });

        // 查询事件
        jba.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                String sa = jtfb.getText();
                myShow(sa);
            }
        });

        // 删除事件
        jbe.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                del();
            }
        });

        // 修改事件
        jbd.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int rt = jtb.getSelectedRow();// 选中的行号
                if (rt >= 0) {// 如果选中了
                    int t = JOptionPane.showConfirmDialog(null, "确定修改吗?");
                    if (t == 0) {
                        String id = dtm.getValueAt(rt, 0).toString();
                        Ygjbxx hb = new YgjbxxDao().getOne(id);
                        new UpdateYgjbxx(YgjbxxTable.this, hb);
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "请选择你要修改的数据!");
                }
            }
        });

 十、企业人事资源管理系统功能的主要演示展示

(一)程序界面
        该系统用户共分为两类,一为企业系统管理员,一为普通员工,因此从管理员与用户两个角度简要展示该数据库前台应用的功能。

  1、企业系统管理员
(1)管理员操作界面

 

 

 (2)主要功能演示

 (3)部门管理界面

 

(4)员工离职操作

 

(5)员工人事调动操作

  

(6)调动员工信息: 

 (7)删除员工信息:


 十一、总结课程设计所遇到的问题以及如何解决问题

       最初,老师布置的十四个课设题目中,我们对那些课设系统都不感兴趣,我们决定着手完成企业人事管理系统,首先我们对该课设题目的难易程度不了解,在我们做出决定去完成这个课设,就要准备面临所有有可能遇见的问题,并合力去解决这些问题。

       在数据库方面,主要是设计概念结构方面,E-R图属性总是设计不完全,触发器的设计语法太过时,只能通过参考资料,来解决这个问题。更多的问题是,Mysql的语法错误,通过我们团体合作实现完成了整个系统功能,对数据库方面,共有600-700行代码,有游标,触发器,函数,视图等功能,完善了整体架构。

       在JAVA设计界面,大概在编写java程序时遇到了不少困难,首先是java程序与数据库的连接问题,在网上找了各种方法,结果都连接不成功,也不知道是哪里出现了问题,2个小时后才发现是因为实现java与数据库连接的jar包并没有添加到路径中,解决这个问题后,java程序就与数据库成功的连接了,然后是java程序运行结果出现中文乱码,同样又是在网上寻找各种解决方法的问题,用了大概1个小时解决了这个问题,接着用java程序实现对数据库的各种操作,包括插入、删除、修改、查询等各种操作,本质上还是要用到sql语句,有时会出现sql语句语法错误的提示,一番查找后发现,教材上的sql语句对应的版本太老了,需要做出相应的改变;有时又会出现莫名其妙的错误,比如找不到这个表,表中的某一列不存在等等,在网上找到各种原因,逐一排查后最后解决掉问题。
       最后,我们共同完成了上述功能的数据库系统,并解决了所有可能出现的问题,使我们的团队之间更加信任,有良好的团队精神。
      
  

有关企业员工人事管理系统(数据库课设)的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  4. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  5. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  6. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  9. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  10. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

随机推荐