• 基于javaweb+mysql的医院人事管理系统员工考勤管理系统


    基于javaweb+mysql的医院人事管理系统员工考勤管理系统

    运行环境

    Java≥8、MySQL≥5.7、Tomcat≥8

    开发工具

    eclipse/idea/myeclipse/sts等均可配置运行

    适用

    课程设计,大作业,毕业设计,项目练习,学习演示等

    功能说明

    人事员工考勤管理,登录用户分为:

    人事部主任(超级管理员)

    人事部员工(管理员)

    部门主任(部门管理)

    部门员工(普通员工)

    个人信息维护、员工管理、请假、签到打卡、审批、部门管理、职位管理等……

    技术框架

    JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL Bootstrap……


    适用

    课程设计,大作业,毕业设计,项目练习,学习演示等

    
    define open generic relative-locator
        (locator :: <physical-locator>, from-locator :: <physical-locator>)
     => (relative-locator :: <physical-locator>);
    
    define method relative-locator
        (locator :: <directory-locator>, from-locator :: <directory-locator>)
     => (relative-locator :: <directory-locator>)
      let path = locator.locator-path;
      let from-path = from-locator.locator-path;
      case
        ~locator.locator-relative? & from-locator.locator-relative? =>
          locator-error
            ("Cannot find relative path of absolute locator %= from relative locator %=",
             locator, from-locator);
        locator.locator-server ~= from-locator.locator-server =>
          locator;
        path = from-path =>
          make(object-class(locator),
               path: vector(#"self"),
               relative?: #t);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
        /** Selects all elements of this $coll which satisfy a predicate.
         *
         *  @param p     the predicate used to test elements.
         *  @return      a new $coll consisting of all elements of this $coll that satisfy the given
         *               predicate `p`. The order of the elements is preserved.
         */
        def filter(p: A => Boolean): Repr = {
          val b = newBuilder
          for (x <- this)
            if (p(x)) b += x
          b.result
        }
    
        /** Selects all elements of this $coll which do not satisfy a predicate.
         *
         *  @param p     the predicate used to test elements.
         *  @return      a new $coll consisting of all elements of this $coll that do not satisfy the given
         *               predicate `p`. The order of the elements is preserved.
         */
        def filterNot(p: A => Boolean): Repr = filter(!p(_))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    end method make;
    
    /// Locator coercion
    
    //---*** andrewa: This caching scheme doesn't work yet, so disable it.
    define constant $cache-locators?        = #f;
    define constant $cache-locator-strings? = #f;
    
    define constant $locator-to-string-cache = make(<object-table>, weak: #"key");
    define constant $string-to-locator-cache = make(<string-table>, weak: #"value");
    
    define open generic locator-as-string
        (class :: subclass(<string>), locator :: <locator>)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    <article>
    <h2>reStructuredText modeh2>
    <form><textarea id="code" name="code">
    .. This is an excerpt from Sphinx documentation: http://sphinx.pocoo.org/_sources/rest.txt
    
    .. highlightlang:: rest
    
    .. _rst-primer:
    
    reStructuredText Primer
    =======================
    
    This section is a brief introduction to reStructuredText (reST) concepts and
    syntax, intended to provide authors with enough information to author documents
    productively.  Since reST was designed to be a simple, unobtrusive markup
    language, this will not take too long.
    
    .. seealso::
    
       The authoritative `reStructuredText User Documentation
       <http://docutils.sourceforge.net/rst.html>`_.  The "ref" links in this
       document link to the description of the individual constructs in the reST
       reference.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
         *  $orderDependent
         *
         *  @param p   the predicate used to test elements.
         *  @return    an object of class `WithFilter`, which supports
         *             `map`, `flatMap`, `foreach`, and `withFilter` operations.
         *             All these operations apply to those elements of this $coll which
         *             satisfy the predicate `p`.
         */
        def withFilter(p: A => Boolean): FilterMonadic[A, Repr] = new WithFilter(p)
    
        /** A class supporting filtered operations. Instances of this class are
         *  returned by method `withFilter`.
         */
        class WithFilter(p: A => Boolean) extends FilterMonadic[A, Repr] {
    
          /** Builds a new collection by applying a function to all elements of the
           *  outer $coll containing this `WithFilter` instance that satisfy predicate `p`.
           *
           *  @param f      the function to apply to each element.
           *  @tparam B     the element type of the returned collection.
           *  @tparam That  $thatinfo
           *  @param bf     $bfinfo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    	public String getPhoto() {
    		return photo;
    	}
    	public void setPhoto(String photo) {
    		this.photo = photo;
    	}
    	public String getEducation() {
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
        (locator :: <directory-locator>, from-locator :: <directory-locator>)
     => (relative-locator :: <directory-locator>)
      let path = locator.locator-path;
      let from-path = from-locator.locator-path;
      case
        ~locator.locator-relative? & from-locator.locator-relative? =>
          locator-error
            ("Cannot find relative path of absolute locator %= from relative locator %=",
             locator, from-locator);
        locator.locator-server ~= from-locator.locator-server =>
          locator;
        path = from-path =>
          make(object-class(locator),
               path: vector(#"self"),
               relative?: #t);
        otherwise =>
          make(object-class(locator),
               path: relative-path(path, from-path, test: locator.locator-test),
               relative?: #t);
      end
    end method relative-locator;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
                            form>
                        div>
                        <ul class="nav navbar-top-links navbar-right">
                        	<li>欢迎:<%=employee.getName() %> li>
                            <li class="dropdown">
                                <a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
                                    <i class="fa fa-user">i> 
                                a>
                                <ul class="dropdown-menu">
                                    <li><a href="<%=path %>/employee/oneself/<%=employee.getId() %>/detial.do" target="J_iframe">我的账户a>
                                    li>
                                    <li class="divider">li>
                                    <li><a href="<%=path %>/employee/logout.do">注销登录a>
                                    li>
                                ul>
                            li>
                        ul>
                    nav>
                div>
                <div class="row J_mainContent" id="content-main">
                    <iframe id="J_iframe" name="J_iframe" width="100%" height="100%" src="<%=path %>/employee/welcome.do" frameborder="0" seamless>iframe>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
      return iterable if (_.isArray(iterable))
      return slice.call(iterable) if (_.isArguments(iterable))
      _.values(iterable)
    
    
    # Return the number of elements in an object.
    _.size = (obj) -> _.toArray(obj).length
    
    
    # Array Functions
    # ---------------
    
    # Get the first element of an array. Passing `n` will return the first N
    # values in the array. Aliased as **head**. The `guard` check allows it to work
    # with **map**.
    _.first = (array, n, guard) ->
      if n and not guard then slice.call(array, 0, n) else array[0]
    
    
    # Returns everything but the first entry of the array. Aliased as **tail**.
    # Especially useful on the arguments object. Passing an `index` will return
    # the rest of the values in the array from that index onward. The `guard`
    # check allows it to work with **map**.
    _.rest = (array, index, guard) ->
      slice.call(array, if _.isUndefined(index) or guard then 1 else index)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    	
    	@RequestMapping("/{id}/update.do")
    	public String updateById(@PathVariable Integer id, Employee employee, String date, String status, 
    			HttpSession session){
    		employee.setId(id);
    		employee.setBirthday(MTimeUtil.stringParse(date));
    		//得到操作人员的名字
    		Employee employee2 = (Employee) session.getAttribute("loged");
    		if(employee.getDepartmentNumber() == null){
    			employee.setDepartment(employee2.getDepartment());
    			employee.setDepartmentNumber(employee2.getDepartmentNumber());
    		}
    		if(employee.getPositionNumber() == null){
    			employee.setPosition(employee2.getPosition());
    			employee.setPositionNumber(employee2.getPositionNumber());
    		}
    		if(status == null){
    			status = "在职";
    		}
    		employeeService.updateEmployee(employee, status, employee2.getName());
    		return "forward:/employee/listPage.do?pageNo=1";
    	}
    	
    	@RequestMapping("/{id}/delete.do")
    	public String deleteById(@PathVariable Integer id){
    		employeeService.deleteEmployee(id);
    		return "forward:/employee/listPage.do?pageNo=1";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    # Create quick reference variables for speed access to core prototypes.
    slice = ArrayProto.slice
    unshift = ArrayProto.unshift
    toString = ObjProto.toString
    hasOwnProperty = ObjProto.hasOwnProperty
    propertyIsEnumerable = ObjProto.propertyIsEnumerable
    
    
    # All **ECMA5** native implementations we hope to use are declared here.
    nativeForEach = ArrayProto.forEach
    nativeMap = ArrayProto.map
    nativeReduce = ArrayProto.reduce
    nativeReduceRight = ArrayProto.reduceRight
    nativeFilter = ArrayProto.filter
    nativeEvery = ArrayProto.every
    nativeSome = ArrayProto.some
    nativeIndexOf = ArrayProto.indexOf
    nativeLastIndexOf = ArrayProto.lastIndexOf
    nativeIsArray = Array.isArray
    nativeKeys = Object.keys
    
    
    # Create a safe reference to the Underscore object for use below.
    _ = (obj) -> new wrapper(obj)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
         */
        def headOption: Option[A] = if (isEmpty) None else Some(head)
    
        /** Selects all elements except the first.
         *  $orderDependent
         *  @return  a $coll consisting of all elements of this $coll
         *           except the first one.
         *  @throws `UnsupportedOperationException` if the $coll is empty.
         */
        override def tail: Repr = {
          if (isEmpty) throw new UnsupportedOperationException("empty.tail")
          drop(1)
        }
    
        /** Selects the last element.
          * $orderDependent
          * @return The last element of this $coll.
          * @throws NoSuchElementException If the $coll is empty.
          */
        def last: A = {
          var lst = head
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    		history.setId(id);
    		history.setBirthday(MTimeUtil.stringParse(date));
    		historyService.updateById(history);
    		return "redirect:/history/retireListPage.do?pageNo=1";
    	}
    	
    	@RequestMapping("/list.do")
    	public String list(Model model){
    		List<History> hList = historyService.selectList();
    		model.addAttribute("hList", hList);
    		return "admin/history_list";
    	}
    }
    package com.demo.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    
    import com.baomidou.mybatisplus.activerecord.Model;
    import com.baomidou.mybatisplus.annotations.TableField;
    import com.baomidou.mybatisplus.annotations.TableId;
    import com.baomidou.mybatisplus.annotations.TableName;
    
    /**
     * 请假表
     * @author tony li
     *
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    
        <script>
          var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
            lineNumbers: true,
          });
        script>
        <p>
            The <code>pythoncode> mode will be used for highlighting blocks
            containing Python/IPython terminal sessions: blocks starting with
            <code>>>>code> (for Python) or <code>In [num]:code> (for
            IPython).
    
            Further, the <code>stexcode> mode will be used for highlighting
            blocks containing LaTex code.
        p>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
      - :dudir:`highlights`, :dudir:`pull-quote` (block quotes with their own
        class attribute)
      - :dudir:`compound` (a compound paragraph)
    
    * Special tables:
    
      - :dudir:`table` (a table with title)
      - :dudir:`csv-table` (a table generated from comma-separated values)
      - :dudir:`list-table` (a table generated from a list of lists)
    
    * Special directives:
    
      - :dudir:`raw` (include raw target-format markup)
      - :dudir:`include` (include reStructuredText from another file)
        -- in Sphinx, when given an absolute include file path, this directive takes
        it as relative to the source directory
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    请添加图片描述

    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

  • 相关阅读:
    Hbuilder打包成APP流程,以及遇到的坑
    EC200U 进行 QuecPython 固件烧录
    计算机毕业设计Java课程作业管理系统(源码+mysql数据库+系统+lw文档)
    水果叠叠乐
    STM32_project:led_beep
    力扣大厂热门面试算法题 - 动态规划
    08/13摸鱼周
    Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)
    安全防御——二、ENSP防火墙实验学习
    标准差有两种常见的估计方法:有偏估计和无偏估计
  • 原文地址:https://blog.csdn.net/m0_68551656/article/details/127741751