人事管理系统实现(六)

时间:2023-01-05 16:33:40

       接着上节的内容,本节应该设计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窗体。