C#图书管理系统

gitee地址:https://gitee.com/a2021gxy/library-management-system

要求

管理员:实现对图书的增、删、改、查,对所有借阅历史的搜索及所有账户的信息,用户的权限与管理,设定密码,借阅图书(包括借书和还书)及对自己账户的资料修改

用户:实现对图书的借阅功能(包括借书和还书)、查看自己的借阅历史,在用户账户方面实现修改密码以及修改个人信息功能。

资料

数据库增删改查
图书管理系统参考

数据库的设计

image
image
image

注册和登陆

添加一个新的窗体

image
将原来Program.cs中Main函数中的Application.Run(new frmMain());
改为

frmLogin frmLogin = new frmLogin();
if (frmLogin.ShowDialog() == DialogResult.OK)
{
    Application.Run(new frmMain());
}

页面

image
image

登录

功能: 输入学号,在数据库中查找,如果没有查到,就提醒注册;查到了,就匹配密码,如果密码不正确,就提示重新输入,正确就登录成功。

连接数据库

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
管理员和用户的页面不同,用户没有管理员的图书管理权限

欢迎页面

image

图书查询

不同方式查找
image

图书借还

需要修改两个数据中的信息
image

账户管理

image

修改密码

image

借阅记录

image

修改用户信息

image

所有借阅记录

image

图书管理

image

遇到的问题

关闭页面时,实际进程没有结束,下一次再点击运行,就会出错

原因: 在启动页面点击关闭可以直接关掉,用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();
}

注:有错误请指出

作者:inss!w!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
原文地址:https://www.cnblogs.com/Hfolsvh/p/15689641.html