文章目录

  • 前言
  • 一、业务梳理与需求分析
    • 1.功能描述
    • 2.实现步骤
    • 3.功能逻辑图
  • 二、数据库设计
    • 1.实体-关系(E-R图)概念模型设计
    • 2.数据表设计
  • 三、WinForm界面交互设计
    • 1、界面交互逻辑
    • 2、项目树
    • 3、主界面+登录界面
    • 4、 图书查询界面
    • 5、图书借阅界面
    • 6、图书插入界面
    • 7、图书更新/删除界面
  • 四、通用类设计
    • 1、与MySQL通讯模块(整个类模块中删除命名空间等,值保留这个类)
    • 2、数据库操作模块:
  • 五、系统代码实现与分析
    • 1、主界面代码:
    • 2、登录界面代码
    • 3、图书查询模块代码
    • 4、图书借阅代码
    • 5、图书插入代码
    • 6、图书更新/删除代码
  • 总结

前言

图书馆管理系统主要功能有普通用户(学生)借书、管理员管理图书。


一、业务梳理与需求分析

1.功能描述

  • 系统中的普通用户模块有以下功能:
    图书查询:根据输入的搜索条件进行查询,可以查找多项,也可以查找所有图书。
    图书借阅:提供图书借阅证号,可以进行图书借阅。
  • 系统中的管理员用户模块有以下功能:
    图书查询:查询图书信息。
    图书借阅:提供图书借阅证号,可以进行图书借阅。
    增加图书:增添新图书。
    修改图书:对图书信息进行修改。
    删除图书:删除过时的、不能借阅的图书。

2.实现步骤

  • 一个完整系统的数据库设计。
  • 图书馆管理系统的界面设计。
  • 项目的通用类。
  • 图书馆管理系统代码的实现和分析。

3.功能逻辑图

二、数据库设计

1.实体-关系(E-R图)概念模型设计

2.数据表设计

根据需求分析进行数据库设计,数据库名称为BookManage,根据E-R图,有学生表、图书信息表、管理员表、借阅表。学生和管理员合并为一张用户表,增加一个字段用户权限进行区分。

  • 用户表结构

  • 图书信息表结构

  • 图书借阅信息表结构

三、WinForm界面交互设计

1、界面交互逻辑

2、项目树

3、主界面+登录界面

4、 图书查询界面

5、图书借阅界面

6、图书插入界面

7、图书更新/删除界面

四、通用类设计

1、与MySQL通讯模块(整个类模块中删除命名空间等,值保留这个类)

public static class DBModule
{public static string ServerIP = "**.**.**.**";public static string ServerPort = "****";public static string ServerUser = "****";public static string ServerPassword = "****";public static string ServerDBName = "bookmanage";
}

2、数据库操作模块:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Data;public class MySQLHelper
{private MySqlConnection myConnection;private string mErrorString;//构造函数public MySQLHelper(string strServerIP, string strServerPort, string strServerUser, string strPassword, string strDBName){string strConnectionString = String.Format("server={0}; port={1}; user id={2}; password={3}; database={4}", strServerIP, strServerPort, strServerUser, strPassword, strDBName);myConnection = new MySqlConnection(strConnectionString);}//测试连接public bool ConnectionTest(){bool result = false;try{if (myConnection.State == System.Data.ConnectionState.Closed){myConnection.Close();result = true;}}catch (MySqlException ex){mErrorString = ex.ToString();}return result;}/// <summary>/// 执行查询语句,用DataTable返回结果,调用前要传入DataTable的实例化对象作为参数/// </summary>/// <param name="strQuery">查询命令</param>/// <param name="dt">返回数据表</param>/// <returns></returns>public bool ExcuteQuerySql(string strQuery, ref DataTable dt){if (dt == null){mErrorString = "传入的DataTable为null";return false;}bool result = false;try{MySqlCommand myCommand = new MySqlCommand(strQuery);myCommand.Connection = myConnection;if (myConnection.State == ConnectionState.Closed){myConnection.Open();}dt.Load(myCommand.ExecuteReader());result = true;}catch (MySqlException ex){mErrorString = String.Format("ExcuteQuery {0} failed.", ex.ToString());return false;}finally{myConnection.Close();}return result;}/// <summary>/// 执行带参数的查询语句,使用前传入参数、DataTable实例化对象/// </summary>/// <param name="strQuery">查询语句</param>/// <param name="param"></param>/// <param name="dt"></param>/// <returns></returns>public bool ExcuteQuerySql(string strQuery, MySqlParameter[] param, ref DataTable dt){if (dt == null){mErrorString = "传入的DataTable为null.";return false;}bool result = false;try{MySqlCommand myCommand = new MySqlCommand(strQuery);myCommand.Connection = myConnection;if (myConnection.State == ConnectionState.Closed){myConnection.Open();}for (int i = 0; i < param.Length; i++){myCommand.Parameters.Add(param[i]);}dt.Load(myCommand.ExecuteReader());result = true;}catch (MySqlException ex){mErrorString = String.Format("ExcuteQuery {0} failed", strQuery) + ex.Message;return false;}finally{myConnection.Close();}return result;}//执行非查询语句public int ExcuteSql(string SqlCmdText){int row = -1;try{MySqlCommand myCommand = new MySqlCommand(SqlCmdText);myCommand.CommandText = SqlCmdText;myCommand.Connection = myConnection;if (myConnection.State == ConnectionState.Closed){myConnection.Open();}row = myCommand.ExecuteNonQuery();}catch (MySqlException ex){mErrorString = String.Format("ExcuteNonQuery {0} failed", SqlCmdText);}return row;}//执行非查询语句public int ExcuteSql(string[] SqlCmdText){try{if (myConnection.State == ConnectionState.Closed){myConnection.Open();}for (int i = 0; i < SqlCmdText.Length; i++){MySqlCommand myCommand = new MySqlCommand(SqlCmdText[i]);myCommand.CommandText = SqlCmdText[i];myCommand.Connection = myConnection;myCommand.ExecuteNonQuery();}}catch (MySqlException ex){mErrorString = String.Format("ExcuteNonQuery {0} failed", SqlCmdText) + ex.Message;return -1;}return -1;}//执行带参数的非查询语句public int ExcuteSql(string SqlCmdText, MySqlParameter[] param){int row = -1;try{MySqlCommand myCommand = new MySqlCommand(SqlCmdText);myCommand.CommandText = SqlCmdText;myCommand.Connection = myConnection;if (myConnection.State == ConnectionState.Closed){myConnection.Open();}for (int i = 0; i < param.Length; i++){myCommand.Parameters.Add(param[i]);}row = myCommand.ExecuteNonQuery();}catch (MySqlException ex){mErrorString = String.Format("ExecuteNonQuery {0} failed", SqlCmdText) + ex.Message;return row = -1;}return row;}public string GetErrInfo(){return mErrorString;}
}

五、系统代码实现与分析

1、主界面代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BookManage
{public partial class FrmMain : Form{public static DialogResult result;//声明对话框返回对象public FrmMain(){InitializeComponent();}/// <summary>/// 查询子窗体是否存在/// </summary>/// <param name="childfrmname"></param>/// <returns></returns>public bool CheckChildFrm(string childfrmname){foreach (Form childFrm in this.MdiChildren)//遍历子窗体{if (childFrm.Name == childfrmname)//如果子窗体存在{if (childFrm.WindowState == FormWindowState.Minimized){childFrm.WindowState = FormWindowState.Normal;}childFrm.Activate();//激活该窗体return true;        //存在返回true}}return false;//不存在返回false}/// <summary>/// 用户登录菜单的事件处理/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void 用户登录ToolStripMenuItem_Click(object sender, EventArgs e){//检测登录窗口是否打开if (this.CheckChildFrm("FrmLogin") == true){return;//窗口已经打开,返回}FrmLogin user = new FrmLogin();//实例化登录窗体user.ShowDialog();//登录窗体以模式对话框的方式打开//判断是否登录成功,登录成功则启用相应的菜单和按钮if (result == System.Windows.Forms.DialogResult.OK && FrmLogin.ustate == 0)//普通用户{toolSBSearch.Enabled = true;toolSBBookBorown.Enabled = true;}else if (result == System.Windows.Forms.DialogResult.OK && FrmLogin.ustate == 1)//管理员{toolSBSearch.Enabled = true;toolSBBookBorown.Enabled = true;toolMBookManage.Enabled = true;}}/// <summary>/// 用户登录按钮事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void toolSBLogin_Click(object sender, EventArgs e){//检测登录窗口是否打开if (this.CheckChildFrm("FrmLogin") == true){return;//窗口已经打开,返回}FrmLogin user = new FrmLogin();//实例化登录窗体user.ShowDialog();//登录窗体以模式对话框的方式打开//判断是否登录成功,登录成功则启用相应的菜单和按钮if (result == System.Windows.Forms.DialogResult.OK && FrmLogin.ustate == 0)//普通用户{//普通用户登录后使能按钮toolSBSearch.Enabled = true;toolSBBookBorown.Enabled = true;}else if (result == System.Windows.Forms.DialogResult.OK && FrmLogin.ustate == 1)//管理员{//管理员登录后使能按钮toolSBSearch.Enabled = true;toolSBBookBorown.Enabled = true;toolMBookManage.Enabled = true;}}/// <summary>/// 图书查询按钮,转到图书查询界面/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void toolSBSearch_Click(object sender, EventArgs e){if (this.CheckChildFrm("FrmBookSearch") == true){return;}FrmBookSearch frmBookSearch = new FrmBookSearch();frmBookSearch.MdiParent = this;//设置当前窗体的子窗体为frmBookSearchfrmBookSearch.Show();}/// <summary>/// 图书借阅按钮,转到图书借阅界面/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void toolSBBookBorown_Click(object sender, EventArgs e){if (this.CheckChildFrm("FrmBookBrown") == true){return;}FrmBookBrown frmBookBrown = new FrmBookBrown();frmBookBrown.MdiParent = this;//设置当前窗体的子窗体为frmBookBrownfrmBookBrown.Show();}/// <summary>/// 图书插入按钮,转到图书插入界面/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void toolMBookIn_Click(object sender, EventArgs e){if (this.CheckChildFrm("FrmBookIn") == true){return;}FrmBookIn frmBookIn = new FrmBookIn();frmBookIn.MdiParent = this;//设置当前窗体的子窗体为frmBookInfrmBookIn.Show();}/// <summary>/// 图书更新/删除按钮,转到图书更新与删除界面/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void toolMBookUpdate_Click(object sender, EventArgs e){if (this.CheckChildFrm("FrmUpdateBook") == true){return;}FrmUpdateBook frmUpdateBook = new FrmUpdateBook();frmUpdateBook.MdiParent = this;//设置当前窗体的子窗体为frmUpdateBookfrmUpdateBook.Show();}private void toolSBExit_Click(object sender, EventArgs e){if (MessageBox.Show("确认退出程序?", "确认信息", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK){System.Environment.Exit(0);}}}
}

2、登录界面代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BookManage
{public partial class FrmLogin : Form{public FrmLogin(){InitializeComponent();}public static int ustate;//普通用户or管理员标志FrmMain femmain = new FrmMain();private void btnLogin_Click(object sender, EventArgs e){//输入合法性判断if (Volidity())//合法性通过{string state = this.cmbUserType.Text;int num;if (state.Equals("管理员"))//判断用户角色{num = 1;}else{num = 2;}//定义查询语句string sql = String.Format("select * from user where uname='{0}' and upwd='{1}' and ustate='{2}'", this.txtUserName.Text.Trim(), this.txtPwd.Text.Trim(), num);MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);DataTable dt = new DataTable();bool queryFlag = sqlHelper.ExcuteQuerySql(sql, ref dt);if (queryFlag == false){MessageBox.Show("登录失败,没有找到该用户");}if (dt.Rows.Count > 0){MessageBox.Show("登录成功!");FrmMain.result = DialogResult.OK;//为变量result赋值DBModule.UserName = txtUserName.Text;this.Close();}else{MessageBox.Show("用户名或密码错误,请重新输入");}}}/// <summary>/// 验证合法性/// </summary>private bool Volidity(){if (this.txtPwd.Text != string.Empty && this.txtPwd.Text != string.Empty){return true;}else{MessageBox.Show("用户名或密码不能为空");}return false;}private void btnCancel_Click(object sender, EventArgs e){this.Close();}private void cmbUserType_SelectedIndexChanged(object sender, EventArgs e){if (cmbUserType.SelectedIndex == 0){cmbUserType.Text = "普通用户";ustate = 0;}else{cmbUserType.Text = "管理员";ustate = 1;}}private void FromLogin_Load(object sender, EventArgs e){this.cmbUserType.SelectedIndex = 0;ustate = 0;}}
}

3、图书查询模块代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BookManage
{public partial class FrmBookSearch : Form{public FrmBookSearch(){InitializeComponent();}private void btnSearch_Click(object sender, EventArgs e){string strBookType = cmbBokTyp.Text;string strBookTypeOr = cmbBokTypOr.Text;string strBookName = txtBokNm.Text;string strBookNameOr = txtBokNmOr.Text;string strBookConment = txtBokCotnt.Text;//定义sql语句string sql = "SELECT * FROM book WHERE booktype='" + strBookType + "'" + "or booktype='" + strBookTypeOr + "'" + " and bookname='" + strBookName + "';";MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);DataTable dt = new DataTable();bool queryFlag = sqlHelper.ExcuteQuerySql(sql, ref dt);if (queryFlag == false){MessageBox.Show("查询失败,没有该图书信息");}if (dt.Rows.Count > 0){dgvBookSearch.DataSource = dt;}//设置列名标题string[] strColumnName = { "图书ID", "图书类别", "书名", "作者", "价格", "封面", "内容简介", "指定访问码"};for (int i = 0; i < dgvBookSearch.Columns.Count; i++){dgvBookSearch.Columns[i].HeaderText = strColumnName[i];}}private void btnClose_Click(object sender, EventArgs e){this.Close();}private void FrmBookSearch_Load(object sender, EventArgs e){//图书类别的初始化string sql = "SELECT DISTINCT booktype FROM book;";MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);DataTable dtTtpe = new DataTable();try{bool queryFlag = sqlHelper.ExcuteQuerySql(sql, ref dtTtpe);if (queryFlag == false){MessageBox.Show("查询图书类型失败");}}catch (Exception ex){MessageBox.Show("查询图书类型失败" + ex.ToString());}if (dtTtpe.Rows.Count > 0){for (int i = 0; i < dtTtpe.Rows.Count; i++){this.cmbBokTyp.Items.Add(dtTtpe.Rows[i][0].ToString());this.cmbBokTypOr.Items.Add(dtTtpe.Rows[i][0].ToString());}}this.cmbBokTyp.SelectedIndex = 0;this.cmbBokTypOr.SelectedIndex = 0;}}
}

4、图书借阅代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BookManage
{public partial class FrmBookBrown : Form{public FrmBookBrown(){InitializeComponent();}DataTable dt = new DataTable();MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);/// <summary>/// 图书借阅按钮/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnBrown_Click(object sender, EventArgs e){//获取下拉框中选中图书的IDint bookid = Convert.ToInt32(this.cmbBookName.SelectedIndex + 1);//获取用户的借阅证int issid = Convert.ToInt32(this.txtIssueID.Text);//获取借阅时间DateTime date = Convert.ToDateTime(this.IssDatetime.Text);//更新借阅信息string sql = "insert into bookbrown (bookid, issbookid, issdatetime) values ('" + bookid + "', '" + issid + "', '" + date + "');";//借阅信息中没有这本书才可借阅DataTable dtC = new DataTable();sqlHelper.ExcuteQuerySql("select bookid from bookbrown;", ref dtC);int flagTmp = 0;for (int i = 0; i < dtC.Rows.Count; i++){if (Convert.ToInt32(dtC.Rows[i][0].ToString()) == bookid){flagTmp = 1;}}if (flagTmp == 1){MessageBox.Show("这本书你已经借阅过,借阅不能超过1本", "提示信息", MessageBoxButtons.OK);}else{if (sqlHelper.ExcuteSql(sql) == 1){MessageBox.Show("借阅成功");}else{MessageBox.Show("借阅失败");}}//刷新借阅证中的图书信息string sqlQ = "select bookinfo.bookid,bookname,issbookid,issdatetime from bookbrown,bookinfo where bookinfo.bookid=bookbrown.bookid;";bool queryFlagQ = sqlHelper.ExcuteQuerySql(sqlQ, ref dt);if (queryFlagQ == true){this.dataGridView1.DataSource = dt;}}private void btnCancel_Click(object sender, EventArgs e){this.Close();}private void FrmBookBrown_Load(object sender, EventArgs e){string sql = "select * from bookinfo;";//联合图书信息表、借阅信息表查询string sqlBro = "select bookinfo.bookid,bookname,issbookid,issdatetime from bookbrown,bookinfo where bookinfo.bookid=bookbrown.bookid;"; //主键与外键的关联try{bool queryFlag = sqlHelper.ExcuteQuerySql(sql, ref dt);//查询图书信息if (queryFlag == false){MessageBox.Show("查询失败");}else{//自动加载图书名到下拉框for (int i = 0; i < dt.Rows.Count; i++){this.cmbBookName.Items.Add(dt.Rows[i][1].ToString());}}//联合查询查询本人借阅信息DataTable dtBro=new DataTable();bool queryFlagBro = sqlHelper.ExcuteQuerySql(sqlBro, ref dtBro);if (queryFlagBro == true){this.dataGridView1.DataSource = dtBro;}else{MessageBox.Show("查询借阅信息失败");}//查询用户信息 string sqlU = "select * from user where uname= '" + DBModule.UserName + "';";DataTable dtU = new DataTable();bool queryFlagU = sqlHelper.ExcuteQuerySql(sqlU, ref dtU);if (queryFlagU == true){this.txtUserName.Text = dtU.Rows[0]["uname"].ToString();this.txtIssueID.Text = dtU.Rows[0]["upwd"].ToString();}//初始化列名string[] strColumnName = { "图书编号", "图书名称", "指定访问码", "借阅时间"};for (int i = 0; i < dt.Columns.Count; i++){dataGridView1.Columns[i].HeaderText=strColumnName[i];}}catch (Exception ex){MessageBox.Show(""); }}/// <summary>/// 图书名称选项变化的事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void cmbBookName_SelectedIndexChanged(object sender, EventArgs e){//遍历图书信息表,查询和选中书名相同的信息,加载到界面foreach (DataRow row in dt.Rows){if (cmbBookName.Text == row["bookname"].ToString()){this.txtBookIssue.Text = row["bookissue"].ToString();this.txtBookAuthor.Text = row["bookauthor"].ToString();}}}}
}

5、图书插入代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BookManage
{public partial class FrmBookIn : Form{public FrmBookIn(){InitializeComponent();}/// <summary>/// 图书插入按钮/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnInsert_Click(object sender, EventArgs e){//定义变量接收控件的值string strBookType = txtBookType.Text;string strBookName = txtBookName.Text;string strAuthor = txtAuthor.Text;string strPrice = txtPrice.Text;string strPic = txtPic.Text;string strContent = txtContent.Text;string strIssue = txtIssue.Text;if (Vaildate()){//sql语句string sql = "insert into bookinfo (bookname, booktype, bookauthor, bookprice, bookpic, bookcontent, bookissue)"+ " values ('" + strBookName + "', '" + strBookType + "', '" + strAuthor + "', '" + strPrice + "', '" + strPic + "', '" + strContent + "', '" + strIssue + "');";MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);int result=sqlHelper.ExcuteSql(sql);if (result == 1){MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK);}else{MessageBox.Show("添加失败", "提示", MessageBoxButtons.OK);}DataTable dt = new DataTable();sqlHelper.ExcuteQuerySql("select * from bookinfo;", ref dt);this.dataGridView1.DataSource = dt;//设置列名标题string[] strColumnName = { "图书ID", "图书类别", "书名", "作者", "价格", "封面", "内容简介", "指定访问码" };for (int i = 0; i < dataGridView1.Columns.Count; i++){dataGridView1.Columns[i].HeaderText = strColumnName[i];}}}/// <summary>/// 退出图书界面按钮/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnExit_Click(object sender, EventArgs e){this.Close();}/// <summary>/// 输入合法性验证/// </summary>/// <returns></returns>private bool Vaildate(){if (txtBookType.Text != string.Empty && txtBookName.Text != string.Empty && txtAuthor.Text != string.Empty&& txtPrice.Text != string.Empty && txtPic.Text != string.Empty && txtContent.Text != string.Empty && txtIssue.Text != string.Empty){return true;}else{MessageBox.Show("请出入完整信息");}return false;}}
}

6、图书更新/删除代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BookManage
{public partial class FrmUpdateBook : Form{public FrmUpdateBook(){InitializeComponent();}MySQLHelper sqlHelper = new MySQLHelper(DBModule.ServerIP, DBModule.ServerPort, DBModule.ServerUser, DBModule.ServerPassword, DBModule.ServerDBName);/// <summary>/// 保存信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSave_Click(object sender, EventArgs e){string sql = "select * from bookinfo;";DataTable dt = new DataTable();if (MessageBox.Show("确实要将修改保存到数据库?", "提示信息", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK){bool queryFlag = sqlHelper.ExcuteQuerySql(sql, ref dt);if (queryFlag == true){MessageBox.Show("保存成功");}this.dataGridView1.DataSource = dt;}//设置列名标题string[] strColumnName = { "图书ID", "图书类别", "书名", "作者", "价格", "封面", "内容简介", "指定访问码" };for (int i = 0; i < dataGridView1.Columns.Count; i++){dataGridView1.Columns[i].HeaderText = strColumnName[i];}}/// <summary>/// 更新信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnUpdate_Click(object sender, EventArgs e){string strBookType = txtBookType.Text;string strBookName = txtBookName.Text;string strBookAuthor = txtBookAuthor.Text;string strBookPrice = txtBookPrice.Text;string strBookPic = txtBookPic.Text;string strBookContent = txtBookContent.Text;string strBookIssue = txtBookIssue.Text;if (true){string sql = string.Format("update bookinfo set booktype='{0}', bookname='{1}', bookauthor='{2}', bookprice='{3}', bookpic='{4}', bookcontent='{5}',bookissue='{6}' where bookid={7};",strBookType, strBookName, strBookAuthor, strBookPrice, strBookPic, strBookContent, strBookIssue, Convert.ToInt32(txtBookID.Text));if (sqlHelper.ExcuteSql(sql) == 1){MessageBox.Show("更新成功", "提示信息", MessageBoxButtons.OK);}else{MessageBox.Show("更新失败", "提示信息", MessageBoxButtons.OK);}}}/// <summary>/// 删除信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnDelete_Click(object sender, EventArgs e){if (this.txtBookID.Text != string.Empty){string sql = "select * from bookbrown where bookid=" + Convert.ToInt32(txtBookID.Text) + "";DataTable dt = new DataTable();bool queryFlag = sqlHelper.ExcuteQuerySql(sql, ref dt);if (queryFlag == true && dt.Rows.Count > 0){MessageBox.Show("此书有借阅,不能删除");}else{string sqlDe = "delete from bookinfo where bookid=" + this.txtBookID.Text + "";if (sqlHelper.ExcuteSql(sqlDe) == 1){MessageBox.Show("删除成功", "提示信息", MessageBoxButtons.OK);}else{MessageBox.Show("删除失败", "提示信息", MessageBoxButtons.OK);}}}}/// <summary>/// 取消/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnCancel_Click(object sender, EventArgs e){}/// <summary>/// 验证输入合法性/// </summary>/// <returns></returns>private bool Vaildate(){if (txtBookType.Text != string.Empty && txtBookName.Text != string.Empty && txtBookAuthor.Text != string.Empty&& txtBookPrice.Text != string.Empty && txtBookPic.Text != string.Empty&& txtBookContent.Text != string.Empty && txtBookIssue.Text != string.Empty && txtBookID.Text != string.Empty){return true;}else{MessageBox.Show("请出入完整信息");}return false;}}
}

总结

本项目实现一个简单的图书馆管理系统,是一个完整的图书馆管理系统的简化版。通过这个项目,了解整个桌面应用软件的规范化开发流程,业务梳理、需求分析、概要设计、详细设计、数据库设计、界面交互设计、详细代码设计等步骤。同时将代码开发规范融入其中,尽量使用较为规范的代码。加深了对WinForm界面控件的认识,对MySQL更加熟悉。数据库SQL语言操作还需要多联系,纸上得来终觉浅,觉知此事要躬行。SQL语句看似简单,实际操作起来是出问题最多的地方。

【C#项目】图书馆管理系统-WinForm+MySQL相关推荐

  1. mysql myeclipse图书馆_图书馆管理系统myeclipse+mysql 亲测可用

    [实例简介] 图书馆管理系统 亲测可用 JSP+Servlet+JavaBean+MySQL [实例截图] [核心代码] 图书馆管理系统myeclipsemysql └── 图书馆管理系统myecli ...

  2. MySQL数据库期末项目 图书馆管理系统

    1 项目需求分析 1.1 项目名称 图书馆管理系统 1.2 项目功能 在以前大多部分图书馆都是由人工直接管理,其中每天的业务和操作流程非常繁琐复杂,纸质版的登记信息耗费了大量的人力物力.因此图书馆管理 ...

  3. 【C#项目】酒店管理系统-WinForm+MySQL

    文章目录 前言 实现步骤 一.系统分析 1.需求分析 (1)用户管理 (2)客人信息管理 (3)客房信息管理 (4)客房预定信息管理 2.系统设计 3.数据库设计 二.实体类设计 1.HotelUse ...

  4. JavaSE必修项目——图书馆管理系统

    前言: 朋友们,经过了一段JavaSE知识的历练,终于来到了这个艰难的图书馆管理系统.对于刚学习的小白来说,是一次不错的项目体验,将理论和实践结合起来,会是一次巨大提升.接下来,就说说这个图书馆管理系 ...

  5. SSM项目图书馆管理系统,适合新人练手和毕设参考,功能首页展示 系统注册登录登出 用户管理 权限控制管理 书籍管理 图书借阅管理 个人借阅记录管理 书籍详细信息展示等

    图书馆管理系统,系统采用B/S架构 系统采用框架:java+maven+stringboot+mybatis+mysql-plus+boostart(前端界面) 首页展示 内容后台管理 菜单权限管理 ...

  6. 通过jsp向mysql批量导入数据_JSP+Servlet+C3P0+Mysql实现的图书馆管理系统

    项目简介 项目来源于:https://gitee.com/GaoHuaiYu/library_management_system 这次分享的也是毕设或课程设计选择一样很多的图书管理系统,适合新手入门. ...

  7. 图书馆管理系统重构(数据库版)

    前言 之前和同学合作开发了一个通过I/O流实现的图书馆管理系统,具体可以看我之前写的博客(Java实战-基于I/O流设计的图书馆管理系统项目总结),在学习了数据库之后,我们基于之前的项目,合作完成了这 ...

  8. 基于ssm图书馆管理系统源码和论文

    开发工具:idea (eclipse) 环境:jdk1.8 mysql5.7 演示视频: [java毕业设计]基于ssm图书馆管理系统源码和论文 随着社会的发展,计算机的优势和普及使得图书馆管理的开发 ...

  9. Java毕设项目阿博图书馆管理系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目阿博图书馆管理系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(We ...

最新文章

  1. 自动驾驶第一案结果敲定,谷歌无人驾驶和Uber达成2.5亿美元和解协议
  2. 【bzoj1029】【JSOI2007】建筑抢修
  3. VisualStudio2017中新建项目没有Asp.Net项目
  4. Android开发常用轮子
  5. 绘制二次三次曲线多次曲线
  6. JavaScrpt --- es5实现ES6的Number扩展(部分)
  7. 通过路由远程计算机重启,华为无线路由器三种常用重启的方法
  8. Linux文件和目录权限:chmod、更改所有者和所属组:chown,umask命令,隐藏权限:lsattr/chattr...
  9. 3种时间格式化的方法,SpringBoot篇!
  10. PC中存在多个Python版本,在指定的版本中安装包或者模块
  11. Kroneker Tensor:克罗内克张量
  12. 随想录(学习消费类soc芯片)
  13. [MySQL FAQ]系列 -- MySQL怎么有时候像是多进程,有时候却是多线程
  14. 第 5 章 会修电脑不会修收音机 —— 依赖倒转原则
  15. python中使用frame需要安装_python – 在SFrame中分组而不安装graphlab
  16. maria安装包mysql_mariadb安装
  17. 【修订总结】【五万字深度洞察】毒舌阿朱最看好的企业服务商
  18. csm测试用例思维导图_架构思维导图
  19. 图扑软件携手华为云再创合作共赢新局面
  20. http+flv+java,HTTP-FLV的两种方式

热门文章

  1. oppo手机忘记手机密码怎么办
  2. 豆瓣评分api接口1
  3. 拉结尔服务器维护,《拉结尔》3月19日紧急维护公告
  4. Messari年度报告:2021年最看好的十大DeFi热点
  5. 在keil 5下ST-LINK无法识别问题的解决
  6. 深入浅析TCP/IP——TCP/IP五层模型
  7. 拼团系统设计熊猫拼U拼拼团产品设计思路
  8. 小米乘风破浪:热血十年,雷军一往无前
  9. Java常用第三方软件包
  10. Ubuntu16.04 + 1080Ti深度学习环境配置教程