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();
}

注:有錯誤請指出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM