0%

C#简易电影记录管理系统:开发四[日志查看]

本期概述

上一期,我们做了一个用户密码修改的功能. 这一期,我们来实现下日志查看功能(用于记录和查看用户的系统登录和退出历史).

原理

原理很简单, 在登录窗体FrmLogin.cs定义3个全局变量,用于获取登录的用户名,登录情况(登录还是退出)以及相应的时间;然后在日志查看窗体调用该全局变量并且通过使用SQ插入语句将其保存到SQL Server中,然后在访问日志查看窗体的时候,通过窗体自动加载插入数据和查看数据的方法即可.

定义3个全局变量:

  1. 登录成功和退出的用户Uid (public static string Uid;) –在第三章密码修改功能的时候已经定义了
  2. 登录成功和退出的时间Time (public static DateTime Time;)
  3. 登录情况Situation-2种包括”登录”和”退出” (public static string Situation;)

代码如下

1
2
3
4
5
6
7
8
9
10
//定义一个全局变量 Uid;
//用于获取登录成功后的用户名
public static string Uid;

//定义一个全局变量 Time
//用于获取登录成功后的用户的登录时间
public static DateTime Time;

//定义一个登录全局变量 用来获取 "登录" 或是"退出"
public static string Situation;

定义完获取登录的全局变量之后,然后我们需要在判断登录成功后的代码里添加一些代码来获取用户的所有登录信息,并赋给全局变量.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//如果 文本框中输入的密码 ==数据库中的密码
if (pwd == txtPwd.Text)
{
//获取登陆成功后的用户ID
Uid = txtName.Text;

//获取当前登录时间
Time = DateTime.Now;

//获取当前用户登录的情况
Situation = "登录";

//说明在该账户下 密码正确, 系统登录成功
MessageBox.Show("系统登录成功,正在跳转主页面...");
FrmMain main = new FrmMain();
main.Show();
this.Hide();
}

代码写好后,我们来做个小程序测试下,在主界面窗体显示 当前登录的用户名和登录时间.

在主界面窗体下方添加一个label框 name:lblCurrentUser.

img

并在主界面窗体类FrmMain.cs 的窗体自动加载事件FrmMain_Load中加入如下代码

1
2
3
4
5
6
7
//当窗体加载的时候 自动运行
private void FrmMain_Load(object sender, EventArgs e)
{
//将当前登录用户名和登录时间赋给label的text属性
//并在当前主界面窗体加载的时候 显示在label框上
lblCurrentUser.Text = "当前登录用户为: " + FrmLogin.Uid + " " + "登录时间为:" + FrmLogin.Time;
}

这样当用户成功登录后, 到主界面窗体便可以看到 当前登录用户的用户名 和其登录时间(如下图).

用户admin1登录系统

img

在主界面窗体显示 当前用户 和其登录时间.

img

好了,我们开始设计我们的日志查看功能.

首先,我们需要一个Log数据表来保存用户日志的数据.

设置字段属性如下,Id设置为自动增长.

img

这样数据库就建好了

img

数据库名为 Log

img

然后我们需要创建一个日志查询窗体.

首先,我们需要在主界面ToolStrip上 添加一个”日志查询”按钮 name:tsbLog

img

按钮下的代码

1
2
3
4
5
6
private void tsbLog_Click(object sender, EventArgs e)
{
FrmLog log = new FrmLog();
log.Show();
this.Hide();
}

然后开始设计日志查看窗体

日志查看窗体 name: FrmLog.cs DataGridView name:dgvLog

返回主界面按钮 name:btnBack 退出按钮 name:btnExit

img

DataGridView 里的列属性设置

编号列

name:ID DataPropertyName: Id HeaderText: 编号

img

用户列

name: User_Name DataPropertyName:User_Name HeaderText: 用户

img

情况列

name: Situation DataPropertyName: Situation HeaderText: 情况

img

时间列

name: Time DataPropertyName: Time HeaderText: 时间

img

界面设置好了, 我们来写 FrmLog窗体的代码.

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;

/*******************************************************

** 作者: SoFlash - 博客园 http://www.cnblogs.com/longwu

** 描述: FrmLog.cs 用于 查看用于登录日志

******************************************************/

namespace 电影记录管理系统
{
public partial class FrmLog : Form
{
public FrmLog()
{
InitializeComponent();
}

//连接字符串 获取配置文件里的连接路径
static string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;

//private void FrmLog_Load(object sender, EventArgs e)
public void FrmLog_Load(object sender, EventArgs e)
{
//方法调用
//将当前用户的登录信息添加到DataGridView里面
AddLog();
//将数据显示到DataGridView上
ShowMsg();
}

public void AddLog()
{
string sql = "insert into Log(User_Name,Situation,Time) values (@User_Name,@Situation,@Time) ";

//简单判断下 插入的数据是否为空 如果为空 则弹出提示
//通常这里不需要(用于异常提示)
if (FrmLogin.Uid == "" || FrmLogin.Situation == "" || FrmLogin.Time.ToString() == "")
{
MessageBox.Show("数据不能为空!");
return;
}
//向数据库里插入参数
SqlParameter[] param ={
new SqlParameter("@User_Name",FrmLogin.Uid),
new SqlParameter("@Situation",FrmLogin.Situation),
new SqlParameter("@Time",FrmLogin.Time)
};

//使用sql连接指令 获取connStr的连接字符串
SqlConnection conn = new SqlConnection(connStr);
//使用cmd指令来装载 sql查询语句和conn连接指令
SqlCommand cmd = new SqlCommand(sql, conn);
//打开数据库
conn.Open();
//向cmd中添加所有参数
cmd.Parameters.AddRange(param);
//将cmd的执行查询获得的整数值赋给n
int n = cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
}

//写一个窗体加载自动从数据库获取数据并显示在datagridview的方法
public void ShowMsg()
{
string showSql = "select Id,User_Name,Situation,Time from Log";
// 使用conn连接桥梁来获取连接字符串
SqlConnection conn = new SqlConnection(connStr);
//使用cmd指令装载sql查询语句和conn数据连接
SqlCommand cmd = new SqlCommand(showSql, conn);
//new一个 datatable对象
DataTable dt = new DataTable();
//使用Sql数据适配器来装载cmd 指令
SqlDataAdapter sda = new SqlDataAdapter(cmd);
//将数据适配器获取的内容放入数据表中
sda.Fill(dt);
//将数据表的内容赋给DataGridView控件
dgvLog.DataSource = dt;

}

//写一个获取当前系统时间的方法
public void GetExitTime()
{
//获取当前退出系统的时间
FrmLogin.Time = DateTime.Now;
//将当前"退出"字符串赋给登录窗体的全局变量Situation
FrmLogin.Situation = "退出";
}

private void btnExit_Click(object sender, EventArgs e)
{
//调用获取当前退出时间的方法
GetExitTime();
//将当前用户的登录信息添加到DataGridView里面
AddLog();
//直接退出系统
Application.Exit();
}

private void btnBack_Click(object sender, EventArgs e)
{
FrmMain main = new FrmMain();
main.Show();
this.Close();
}

}
}

这样,FrmLog窗体就设计好了, 但是系统中有很多地方有 退出功能.

因此,我们需要将日志窗体中获取 当前退出时间的方法(包含退出的时间的退出情况) 以及 添加当前退出日志(用户名,情况和时间)的方法 附加到那些 退出功能 按钮下.

1
2
3
4
5
6
7
//调用FrmLog窗体 获取当前时间退出的方法
FrmLog log = new FrmLog();
log.GetExitTime();

//方法调用
//将当前用户的登录信息添加到DataGridView里面
log.AddLog();

需要调用方法的 退出功能 按钮如下

1.主界面的”重新登录”按钮

img

2.主界面的”退出系统”按钮

img

3.管理界面的”退出系统”按钮

img

那么,让我们来测试下 系统运行效果.

首先,我们使用账户admin1 来登录系统.

img

来到日志查看窗体,可以看到登录用户admin1的登录情况.

img

接着我们回到主界面,使用主界面的”退出系统” 功能按钮来测试下.

img

退出系统后,我们再次使用 账户admin1登录, 来到日志查看页面 获得的结果如下(新增了退出和重新登录2条记录).

img

这样,我们的日志查看功能就设计好了!下一期,我们来一起学下该系统的用户注册功能.

附上源代码

MovieRecordManagementSystem04.zip

转自:https://www.cnblogs.com/longwu/archive/2011/10/10/2204247.html