人事管理系统实现(六)

       接着上节的内容,本节应该设计F_HaveBack窗体和F_User窗体,前者是用来对数据库文件的操作,比如数据库文件的还原和备份,而后者则是实现系统使用人员的基本操作,如增添,删除,修改等。

      按照前几节的流程,我们类似的先进行界面的设计,闲话不多说,我们先展示一下简单的界面设计:

             

     界面的设计中使用了一个tabControl控件将其分为两个部分,一个事数据库的备份功能的实现,切换之后是数据库的还原的操作。

     在备份数据库页面中,使用了两个radioButton控件来选择或者是更改路径,通过Button按钮来控制过程的进行,在还原数据库页面中,通过设计一个按钮来让用户通过对话框选择还原路径,从而进行还原。

   下面要说的是这两个页面的实现:

    1.首先进行变量的定义:

        DataClass.MyMeans MyDataClass = new DataClass.MyMeans();
        ModuleClass.MyModule MyMC = new ModuleClass.MyModule();
     2.当点击备份按钮时,这时会触发其Click事件,事件的实现过程如下:

        private void button1_Click(object sender, EventArgs e)
        {
            //button1_Click事件为备份数据库
            string Str_dar = "";
            //选择并设置默认路径
            if (radioButton1.Checked == true)
            {
                Str_dar = System.Environment.CurrentDirectory + "\\bar\\";
                
            }
            //选择其他路径
            if (radioButton2.Checked == true)
            {
                Str_dar = textBox2.Text + "\\";

            }
            if (textBox2.Text == "" & radioButton2.Checked == true)
            {
                MessageBox.Show("请选择备份数据库文件的路径。");
                return;
            }

            //尝试数据库的备份
            try
            {
                //定义SQL语句实现到指定时间点的还原
                Str_dar = "backup database db_PWMS to disk='" + Str_dar + (System.DateTime.Now.ToShortDateString()).ToString() + MyMC.Time_Format(System.DateTime.Now.ToString()) + ".bak" + "'";
                //将指令在MyClass类中的GetA_M_D_command进行对数据库的操作执行
                MyDataClass.GetA_M_D_command(Str_dar);
                //弹出提示信息的对话框
                MessageBox.Show("数据备份成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
            catch (Exception ex)
            {
                //提示返回的错误信息
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
     3.当点击“放大镜'按钮时,执行路径浏览操作:

        //浏览路径
        private void button2_Click(object sender, EventArgs e)
        {
            //调用文件路径对话框
            if (folderBrowserDialog1.ShowDialog(this) == DialogResult.OK)
            {
                textBox2.Text = folderBrowserDialog1.SelectedPath;
            }
        }
     4.接下来设计数据库的还原操作:当在数据库还原页面中点击还原时,将触发其Click事件,事件的实现过程如下:

        //还原数据库操作
        private void button5_Click(object sender, EventArgs e)
        {
            //当文件路径为空时
            if (textBox3.Text == "")
            {
                MessageBox.Show("请选择备份数据库文件的路径。");
                return;
            }
            //尝试还原工作
            try
            {

                //判断数据库的连接状态,若连接则断开连接
                if (DataClass.MyMeans.My_Con.State == ConnectionState.Open)
                {
                    DataClass.MyMeans.My_Con.Close();
                }
                //数据库连接语句,指向master数据库
                string DateStr = "Data Source=MRDEL\\MRDEL;Database=master;User id=sa;PWD=";
                //同时建立一个新的SqlConnection对象
                SqlConnection conn = new SqlConnection(DateStr);
                //打开数据库连接
                conn.Open();

                //-------------------杀掉所有连接 db_PWMS 数据库的进程--------------
                //定义sql语句,以及所使用的变量
                string strSQL = "select spid from master..sysprocesses where dbid=db_id( 'db_PWMS') ";
                SqlDataAdapter Da = new SqlDataAdapter(strSQL, conn);

                DataTable spidTable = new DataTable();
                Da.Fill(spidTable);

                //向SqlCommand对象中传递Text指令
                SqlCommand Cmd = new SqlCommand();
                Cmd.CommandType = CommandType.Text;
                Cmd.Connection = conn;

                //通过循环构成强行关闭用户进程的命令指令
                for (int iRow = 0; iRow <= spidTable.Rows.Count - 1; iRow++)
                {
                    Cmd.CommandText = "kill " + spidTable.Rows[iRow][0].ToString();   //强行关闭用户进程 
                    Cmd.ExecuteNonQuery();
                }
                //关闭并释放资源
                conn.Close();
                conn.Dispose();
                //--------------------------------------------------------------------

                //建立新的SqlConnection对象
                SqlConnection Tem_con = new SqlConnection(DateStr);
                //连接数据库
                Tem_con.Open();
                //第一个参数为一个完整的SQL语句,用于查找对应的还原文件
                SqlCommand SQLcom = new SqlCommand("backup log db_PWMS to disk='" + textBox3.Text.Trim() + "' restore database db_PWMS from disk='" + textBox3.Text.Trim() + "'", Tem_con);
                //进行查询
                SQLcom.ExecuteNonQuery();
                SQLcom.Dispose();
                Tem_con.Close();
                Tem_con.Dispose();
                MessageBox.Show("数据还原成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                MyDataClass.con_open();
                MyDataClass.con_close();
                //为保证数据的安全性,强制关闭整个系统
                MessageBox.Show("为了避免数据丢失,在数据库原还后将关闭整个系统。");
                Application.Exit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }
    同样的当点击”放大镜“时,将会使用户选择路径下已有的还原文件

        private void button4_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "*.bak|*.bak";
            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                textBox3.Text = openFileDialog1.FileName;
            }
        }

     当点击取消时,只需要在其Click事件中添加this.Close();语句即可。到此,F_HaveBack窗体基本设计完成了。



     接下来设计F_users窗体,这个窗体的作用在前面已经提到,所以,我们直接上其设计的界面:

                                                                                      

     界面较为简单,一个toolStrip工具栏,一个GroupBox控件,以及一个GridView控件。

     代码部分实现的过程如下:

     这个窗口的功能的实现主要依托于MyMeans类的对象,变量的定义如下:

        DataClass.MyMeans MyDataClass = new DataClass.MyMeans();
        public static DataSet MyDS_Grid;
    当窗体加载时,我们通过其load事件完成一些任务:

        private void F_User_Load(object sender, EventArgs e)
        {
            //从指定表进行查询
            MyDS_Grid = MyDataClass.GetDataSet("select ID as 编号,Name as 用户名 from tb_Login", "tb_Login");
            dataGridView1.DataSource = MyDS_Grid.Tables[0];
        }
         而窗体处于活动状态时,则会显示从指定表中得到的查询内容:

        private void F_User_Activated(object sender, EventArgs e)
        {
            MyDS_Grid = MyDataClass.GetDataSet("select ID as 编号,Name as 用户名 from tb_Login", "tb_Login");
            dataGridView1.DataSource = MyDS_Grid.Tables[0];
        }

        private void tool_Close_Click(object sender, EventArgs e)
        {
            this.Close();
        }

      当点击添加,修改,删除等按钮时毁掉应相应的窗体,相应的通过调用这些按钮的Click事件,调用响应的窗体,完成相应的功能,事件中包含的窗体将在后续的节次中进行详细的设计说明:

        //调用添加用户窗体
        private void tool_UserAdd_Click(object sender, EventArgs e)
        {
            //初始化窗体
            Perform.F_UserAdd FrmUserAdd = new F_UserAdd();
            //设置tag
            FrmUserAdd.Tag = 1;
            FrmUserAdd.Text = tool_UserAdd.Text + "用户";
            FrmUserAdd.ShowDialog(this);
        }

        //实现修改操作
        private void tool_UserAmend_Click(object sender, EventArgs e)
        {
            //判断是否是超级用户
            if (ModuleClass.MyModule.User_ID.Trim() == "0001")
            {
                MessageBox.Show("不能修改超级用户。");
                return;
            }
            Perform.F_UserAdd FrmUserAdd = new F_UserAdd();
            FrmUserAdd.Tag = 2;
            FrmUserAdd.Text = tool_UserAmend.Text + "用户";
            FrmUserAdd.ShowDialog(this);
        }
        //权限设置
        private void tool_UserPopedom_Click(object sender, EventArgs e)
        {
            //判断是否为超级用户
            if (ModuleClass.MyModule.User_ID.Trim() == "0001")
            {
                MessageBox.Show("不能修改超级用户权限。");
                return;
            }
            F_UserPope FrmUserPope = new F_UserPope();
            FrmUserPope.Text = "用户权限设置";
            FrmUserPope.ShowDialog(this);
        }

        private void tool_UserDelete_Click(object sender, EventArgs e)
        {
            //判断是否尾插即用户,如是则不能进行删除操作
            if (ModuleClass.MyModule.User_ID != "")
            {
                if (ModuleClass.MyModule.User_ID.Trim() == "0001")
                {
                    MessageBox.Show("不能删除超级用户。");
                    return;
                }
                MyDataClass.GetA_M_D_command("Delete tb_Login where ID='" + ModuleClass.MyModule.User_ID.Trim() + "'");
                MyDataClass.GetA_M_D_command("Delete tb_UserPope where ID='" + ModuleClass.MyModule.User_ID.Trim() + "'");
                MyDS_Grid = MyDataClass.GetDataSet("select ID as 编号,Name as 用户名 from tb_Login", "tb_Login");
                dataGridView1.DataSource = MyDS_Grid.Tables[0];
            }
            else
                MessageBox.Show("无法删除空数据表。");
        }
    为了能够正确的显示所得到的结果,需要设计GridView的CellEnter事件,当选中记录时可以使用菜单栏上的按钮,反之则不能够使用,过程如下:

        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.RowCount > 1)
            {
                //设置GridView控件中的显示内容
                ModuleClass.MyModule.User_ID = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString();
                ModuleClass.MyModule.User_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString();
                //对菜单栏控件的可用性进行设置
                tool_UserAmend.Enabled = true;
                tool_UserDelete.Enabled = true;
                tool_UserPopedom.Enabled = true;
            }
            else
            {
                ModuleClass.MyModule.User_ID = "";
                ModuleClass.MyModule.User_Name = "";
                tool_UserAmend.Enabled = false;
                tool_UserDelete.Enabled = false;
                tool_UserPopedom.Enabled = false;
            }
        }
至此,两个窗体基本设计完成,下节将设计,人事档案浏览窗体,F_ManFile窗体。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值