C#桌面办公应用-工资管理系统系列六

C#桌面办公应用-工资管理系统系列六

     接前文系列五,本文将讲解自主开发的工资管理系统中的员工管理模块:主要包括“员工初始化信息加载”,“员工信息综合查询与分页查询”,“添加员工”,“修改员工信息”,“删除员工信息”;涉及到的技术包括:对SQL进行增删改操作,综合模糊查询,分页查询,图片的上传预览保存查看技术,18位身份证验证算法的实现与应用技术,将查询得到的结果集绑定到comboBox跟dataGridView中等技术

    若有朋友想索取我这自主开发的工资管理系统源码或者开发文档,可以加我QQ:1974544863进行交流,我愿意视情况出售给你,这个系统也可以当做毕业设计系统!当然了,目的主要还是希望能与诸位交流!

    本文先介绍员工管理模块中的“员工初始化信息加载”,开发步骤是这样的:设计员工model,在数据库建立相应的员工表,设计并实现员工管理初始化界面,初始化查询绑定员工数据到dataGridView中,单击dataGridView中的某一行可以查看改行对应的员工的详细数据。下面将逐个实现该小模块的功能!

    首先是员工表基本字段的建立,如下图所示:

C#桌面办公应用-工资管理系统系列六_第1张图片

    接着是界面的设计与实现,如下图所示:

C#桌面办公应用-工资管理系统系列六_第2张图片

    上图即为员工管理中初始化加载时候的界面:第一部分是“分页查询、增删改、综合模糊查询”;第二部分是“员工信息列表-采用dataGridView控件进行展示”;第三部分是“员工详细信息-各种基本控件以及图片展示空间pitureBox”。

    紧接着是“初始化查询绑定员工数据到dataGridView”:主要是窗体的load事件:

        //窗体初始化加载事件
        private void frmEmployee_Load(object sender, EventArgs e)
        {
            cmmPage.PageNo = 1;
            cmmPage.PageSize = pageSize;
            try
            {
                String employeeSQL = "select top "+cmmPage.PageSize+" empId as '员工编号',loginName as '登录用户名',powerName as '用户权限',empName as '员工姓名',age as '年龄',sex as '性别',partName as '所属部门',idCardNo as '身份证号',jobType as '职位类型',jobDate as '入职时间',imagePosition as '图片位置',tb_employee.memo as '备注信息' from tb_employee,tb_powerType,tb_part where tb_employee.powerId=tb_powerType.powerId and tb_employee.partID=tb_part.partID and empId not in (select top "+cmmPage.Start+" empId from tb_employee order by empId)order by empId";

                recordCount= employeeService.getCount("select COUNT(*) from tb_employee");
                pageCount = commonMessage.getTotalPage(pageSize, recordCount);

                bindPaginationQuery(employeeSQL,cmmPage,recordCount,pageCount,sender, e);
                this.textBoxCurrentPage.Text = "1";
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("初始化加载员工信息出错: \n" + ex.Message);
            }
        }

    其中,cmmPage是分页工具类的实例,需要在窗体构造函数之后创建,除此之外,还有employeeService也是需要

在窗体构造函数之后创建:

        private EmployeeService employeeService = new EmployeeService();
        private CommonMessage commonMessage = new CommonMessage();
        private CommonUtils cmmUtils = new CommonUtils();
    其中,employeeService代码如下,其代码需要调用DBOperate即Dao层的代码和CommonUtils工具类的代码,即所谓的MVC逐层调用!而DBOperate和CommonUtils中因为涉及到我自主开发的核心技术,所以在这里就不在贴出来,当然了,在前面已经有贴出一小部分了!如果你想获取我没贴出来的(还是有很多没贴出来的 大笑)代码,可以加我上面提供的QQ与我交流,我愿意出售给你!

    //员工服务层
    class EmployeeService
    {
        private DBOperate operate = new DBOperate();
        private CommonUtils cmmUtils = new CommonUtils();

        /// <summary>
        /// 绑定Sql语句查询的结果到dataGridView中
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="dataGridView"></param>
        public void bindSqlResultToDatagridView(DataGridView dataGridView, String sql)
        {
            operate.BindDataGridView(dataGridView, sql);
            #region MyRegion //设置好datagriview中的列的显示宽度
            dataGridView.Columns[0].Width = 140;
            dataGridView.Columns[1].Width = 160;
            dataGridView.Columns[2].Width = 160;
            dataGridView.Columns[3].Width = 140;
            dataGridView.Columns[4].Width = 140;
            dataGridView.Columns[5].Width = 140;
            dataGridView.Columns[6].Width = 180;
            dataGridView.Columns[7].Width = 180;
            dataGridView.Columns[8].Width = 180;
            dataGridView.Columns[9].Width = 180;
            dataGridView.Columns[10].Width = 120;
            dataGridView.Columns[11].Width = 220;
            #endregion
        }

        /// <summary>
        /// //绑定SQL查询语句中的指定列到下拉列表
        /// </summary>
        /// <param name="strTable">数据库表名</param>
        /// <param name="cb">ComboBox对象</param>
        /// <param name="i">指定数据列索引</param>
        public void bindSpecificColumnToComboBox(String strSQL, ComboBox cb)
        {
            operate.BindDropdownlist(strSQL, cb, 0);
        }

        /// <summary>
        /// 用于判断指定的字段值 是否已经存在
        /// </summary>
        /// <param name="strSQL">其中sql语句为:select count(columnName) from ...格式</param>
        /// <returns></returns>
        public Boolean isExistSpecificObject(String strSQL)
        {
            Boolean res = false;
            int i = operate.HumanNum(strSQL);
            if (i > 0)
            {
                res = true;
            }
            return res;
        }

        /// <summary>
        /// 根据SQL获取数量值
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        public int getCount(String strSQL)
        {
            return operate.HumanNum(strSQL);
        }


        /// <summary>
        /// 保存或者更新(删除,修改)员工信息
        /// </summary>
        /// <param name="strSQL"></param>
        public int saveOrUpdatePart(String strSQL)
        {
            int i = operate.OperateData(strSQL);
            Console.WriteLine("操作的结果: " + i);
            return i;
        }

        /// <summary>
        /// 获取指定的数据库某一字段的值
        /// </summary>
        /// <param name="strObjectSQL">查询的SQL--指定了要查询的数据库字段</param>
        /// <param name="fieldNames">数据库字段数组</param>
        /// <returns></returns>
        public String getSpecificColumnValue(String strObjectSQL, String[] fieldNames)
        {
            return operate.GetDatasFromSelectedTable(strObjectSQL, fieldNames)[0];
        }

        
        /// <summary>
        ///  根据实际保存时员工相片的名称设置员工的相片的实际保存路径
        /// </summary>
        /// <param name="empPictureStoreName"></param>
        /// <returns>实际保存路径: 项目的debug目录\images\employee</returns>
        public String setEmpImageRealStoreLocation(String empPictureStoreName)
        {
            String empImgStoreDestPath = Application.StartupPath.ToString() + "\\images\\employee\\" + empPictureStoreName;
            return empImgStoreDestPath;
        }

        /// <summary>
        /// 读取员工相片
        /// </summary>
        /// <param name="empImageName">数据库存储的员工的相片名:imagePosition</param>
        /// <param name="myImage"></param>
        public void readEmpImage(String empImageName, PictureBox myImage)
        {
            String imageLocation = Application.StartupPath.ToString() + "\\images\\employee\\";
            try
            {
                String imageRealPath = imageLocation + empImageName;
                myImage.Image = Image.FromFile(imageRealPath);
            }
            catch (System.Exception ex)
            {
                String imageRealPath = imageLocation + "default.jpg";
                myImage.Image = Image.FromFile(imageRealPath);
                Console.WriteLine("读取员工相片发生异常: " + ex.Message);
            }
        }

        /// <summary>
        /// 移除文件夹下指定的相片:当然只有上传了相片的才移除原先的相片
        /// </summary>
        /// <param name="removeImageName"></param>
        public void removeImage(String removeImageName)
        {
            try
            {
                String empImageLocation = Application.StartupPath.ToString() + "\\images\\employee\\" + removeImageName;
                File.Delete(@empImageLocation);
            }
            catch (System.Exception ex)
            {
                Console.WriteLine("移除员工相片发生异常: " + ex.Message);
            }
        }
    }

    在里面,我们可以看到,已经包含了 将查询得到的结果集绑定到comboBox跟dataGridView中等技术,当然啦,具体的实现还是Dao那一层代码,即DBOperate类中的代码!

    下图是初始化加载员工信息列表时候的效果:


    下面实现:“单击dataGridView中的某一行可以查看改行对应的员工的详细数据”,其实就是dataGridView的cellMouseClick事件,源代码如下:

        //鼠标单击事件
        private void dataGridViewEmployeeInfo_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            try
            {
                textBoxYuanGongDengLuMing.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[1].Value.ToString().Trim();
                textBoxYuanGongYongHuQuanXian.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[2].Value.ToString().Trim();
                textBoxYuanGongXingMing.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[3].Value.ToString().Trim();
                textBoxYuanGongNianNing.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[4].Value.ToString().Trim();
                textBoxYuanGongXingBie.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[5].Value.ToString().Trim();
                textBoxYuanGongSuoShuBuMeng.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[6].Value.ToString().Trim();
                textBoxYuanGongShenFenZheng.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[7].Value.ToString().Trim();
                textBoxYuanGongZhiWeiLeiXing.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[8].Value.ToString().Trim();
                dateTimePickerYuanGongRuZhi.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[9].Value.ToString().Trim();
                textBoxYuanGongBeiZhu.Text = dataGridViewEmployeeInfo.CurrentRow.Cells[11].Value.ToString().Trim();

                //iamgePosition要不是null:没上传图片 要不就是"位置信息"
                String imagePosition = dataGridViewEmployeeInfo.CurrentRow.Cells[10].Value.ToString().Trim();
                if (imagePosition=="")
                {
                    imagePosition = "default.jpg";
                    
                }
                employeeService.readEmpImage(imagePosition, EmpPictureBox);
                
            }
            catch(System.Exception ex)
            {
                employeeService.readEmpImage("default.jpg", EmpPictureBox);
                Console.WriteLine("鼠标单击发生异常: " + ex.Message);
            }
        }

    在上面,其实涉及到“C#读取图片并显示在控件pitureBox”技术:
<span style="color:#ff0000;">employeeService.readEmpImage(imagePosition, EmpPictureBox);</span>
    这是由employeeService服务类中提供的,当然啦,底层的实现还是有DBOperate实现的,即Dao层的代码!

    好了,把效果贴出来吧:

C#桌面办公应用-工资管理系统系列六_第3张图片

    好了,这一文就到这里吧!下来两篇博文就讲讲C#在winform下如何实现分页查询(很有用的哦大笑)、综合模糊查询以及18位身份证号码验证算法的原理以及C#实现!

    欢迎各位与我交流!

你可能感兴趣的:(CSDN博客,工资管理系统,C#桌面办公应用,C#查看图片)