gitee地址:https://gitee.com/a2021gxy/library-management-system
要求
管理员:实现对图书的增、删、改、查,对所有借阅历史的搜索及所有账户的信息,用户的权限与管理,设定密码,借阅图书(包括借书和还书)及对自己账户的资料修改
用户:实现对图书的借阅功能(包括借书和还书)、查看自己的借阅历史,在用户账户方面实现修改密码以及修改个人信息功能。
资料
数据库的设计
注册和登陆
添加一个新的窗体
将原来Program.cs中Main函数中的Application.Run(new frmMain());
改为
frmLogin frmLogin = new frmLogin();
if (frmLogin.ShowDialog() == DialogResult.OK)
{
Application.Run(new frmMain());
}
页面
登录
功能: 输入学号,在数据库中查找,如果没有查到,就提醒注册;查到了,就匹配密码,如果密码不正确,就提示重新输入,正确就登录成功。
连接数据库
在frmLogin_Load
中连接数据库
conn.ConnectionString = "Server=(local); Database=library_mangement;User ID=sa;Password=XXXXXX";
conn.Open();
comm.Connection = conn;
登录按钮代码设计
private void btnLogin_Click(object sender, EventArgs e)
{
string stuid = txtId.Text.ToString();
string pwd = "";
try
{
comm.CommandText = "select student_id,name,password from users where student_id = " + stuid;
dr = comm.ExecuteReader();
if (dr.HasRows)
{
//MessageBox.Show("查找成功!", "提示", MessageBoxButtons.OK);
while (dr.Read())
{
pwd = dr["password"].ToString();
}
if(pwd != txtPwd.Text.ToString())
{
txtPwd.Clear();
MessageBox.Show("密码错误,请重新输入!", "提示", MessageBoxButtons.OK);
}
else //进入主页面
{
frmMain frmMain = new frmMain();
frmMain.Show();
this.Hide();
}
}
else
MessageBox.Show("没有注册,请先注册!", "提示", MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show("ERROR!" + ex.Message);
}
finally
{
dr.Close();
}
}
将登录的用户信息传到主页面上
定义静态变量姓名和学号,登陆时读取数据,在其他页面就可以直接引用了
定义
public static string stu_name, stu_id;
登录时读取
stu_name = dr["name"].ToString();
stu_id = dr["student_id"].ToString();
在主页面引用
this.Text += frmLogin.stu_name;
注册
关闭一个窗体打开另一个窗体
注册也新建一个新窗体,当点击立即注册时,登陆窗体关闭,注册窗体打开。
登录窗体的注册按钮点击
private void btnReg_Click(object sender, EventArgs e)
{
frmReg frmreg = new frmReg();
frmreg.Show();
this.Hide();
}
Program.cs中
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
frmLogin frmLogin = new frmLogin();
frmLogin.Show();
Application.Run(frmLogin);
}
在数据库中加入数据
用户注册填入数据,再加入数据库中。
private void btnReg_Click(object sender, EventArgs e)
{
try
{
string name = txtName.Text.ToString();
string id = txtId.Text.ToString();
string pwd = txtPwd.Text.ToString();
//注册前先在数据库中查找有没有值
comm.CommandText = "select student_id,name,password from users where student_id = " + id;
dr = comm.ExecuteReader();
if (dr.HasRows)
{
MessageBox.Show("已经注册,前去登录!", "提示", MessageBoxButtons.OK);
frmLogin frmlogin = new frmLogin();
frmlogin.Show();
this.Hide();
}
else
{
dr.Close(); //不关闭下面的dr会出错
comm.CommandText = "insert into users values (" + "'" + id + "'," + "'" + name + "','否'" + "," + "'" + pwd + "');";
dr = comm.ExecuteReader();
MessageBox.Show("注册成功,前去登录!", "提示", MessageBoxButtons.OK);
frmLogin frmlogin = new frmLogin();
frmlogin.Show();
this.Hide();
dr.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("ERROR!" + ex.Message);
}
}
主页面
用tabcontrol,做多个页面
图书查询页面,用到datagardview
总的就是数据库的增删改查,还有数据的绑定,具体看gitee
管理员和用户的页面不同,用户没有管理员的图书管理权限
欢迎页面
图书查询
不同方式查找
图书借还
需要修改两个数据中的信息
账户管理
修改密码
借阅记录
修改用户信息
所有借阅记录
图书管理
遇到的问题
关闭页面时,实际进程没有结束,下一次再点击运行,就会出错
原因: 在启动页面点击关闭可以直接关掉,用this.close()
也可以关闭,在其他页面点击关闭就是仅仅关闭窗体,没有结束进程
解决: 参考C# 退出应用程序的几种方法
在注册页面添加正在关闭事件
private void frmReg_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("确认退出吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
Environment.Exit(0); //用this.close不能退出,进程还在,用 Application.Exit();会点击退出多次,才能退出。
}
else
{
e.Cancel = true;
}
}
一个窗体跳转到另一个窗体之后再返回回来
frmAdmin窗体跳转到frmSetpwd窗体
点击frmAdmin中的一个按钮
private void btnSetpwd_Click(object sender, EventArgs e)
{
frmSetpwd frmSetpwd = new frmSetpwd(this);
this.Hide();
frmSetpwd.Show();
}
frmSetpwd的构造函数
public frmSetpwd(frmAdmin frmAdmin)
{
InitializeComponent();
_frmAdmin = frmAdmin;
}
点击返回
private void btnReturn_Click(object sender, EventArgs e)
{
this.Close();
_frmAdmin.Show();
}
注:有错误请指出