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();
}
注:有錯誤請指出