• 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 许可协议。转载请注明出处!
  • 相关阅读:
    解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
    eclipse下解决明明有jar包,却找不到的问题
    Ngnix负载均衡安装及配置
    Redis入门教程(二)
    js监听组合按键
    js清空数组的方法
    js判断浏览器是否支持webGL
    Maven入门教程(一)
    杂记
    第一天 Requests库入门
  • 原文地址:https://www.cnblogs.com/Hfolsvh/p/15689641.html
Copyright © 2020-2023  润新知