C# 实现图书管理系统
在本篇攻略中,我们将演示如何使用 C# 实现一个图书管理系统。该系统的功能如下:
- 添加图书:包括书名、作者、出版社、出版日期、价格等信息;
- 删除图书;
- 修改图书信息;
- 查询图书信息:查询所有图书或根据书名或作者进行模糊查询;
- 显示所有图书;
技术栈
- C#:一种面向对象的编程语言;
- Windows Forms:一种基于 Windows 操作系统的用户界面开发工具;
- SQLite:一种轻量级的关系型数据库管理系统;
准备工作
在开始编码前,我们需要先安装 Visual Studio,Visual Studio 自带 .NET Framework 和 Windows Forms,也可通过 NuGet 安装 SQLite 数据库。
创建数据库
为了保存图书信息,我们需要创建一个数据库。在 Visual Studio 中做如下操作:
- 在“解决方案资源管理器”中右键点击“添加”;
- 在“添加新项”对话框中选择“Data”选项卡;
- 选择当地数据库文件并设置其名称(如“BookManager.db”);
- 打开新建的 .db 文件;
- 运行以下 SQL 命令以创建“Book”表:
CREATE TABLE "Book" (
"Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"Name" TEXT NOT NULL,
"Author" TEXT NOT NULL,
"Press" TEXT NOT NULL,
"PublishDate" TEXT NOT NULL,
"Price" INTEGER NOT NULL
);
编辑界面
在 Visual Studio 中创建 Windows Forms 应用程序,并创建以下表单:
- MainForm:主界面,包括菜单栏、工具栏、工作区、状态栏等;
- AddBookForm: 添加书籍界面,包括书籍的各项基本信息;
- ModifyBookForm:修改书籍信息界面,可修改已存在的书籍的基本信息;
- QueryBookForm:查询书籍信息界面,可选择并根据书名或作者进行查询;
- AboutForm:关于软件,作者信息等;
实现功能
添加书籍
实现添加书籍的功能时,需要实现以下步骤:
- 打开“AddBookForm”表单;
- 用户输入书籍的各项基本信息;
- 用户点击“确定”按钮,将书籍信息插入到“Book”表格中;
- 返回主界面;
以下为代码示例:
// 打开添加书籍的表单
private void tsb_AddBook_Click(object sender, EventArgs e)
{
AddBookForm addBookForm = new AddBookForm();
addBookForm.ShowDialog();
}
// 在“AddBookForm”确定按钮被点击时,将新书籍信息插入到数据库中
private void btn_OK_Click(object sender, EventArgs e)
{
using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
{
cn.Open();
string sql = @"INSERT INTO Book (Name, Author, Press, PublishDate, Price)
VALUES (@Name, @Author, @Press, @PublishDate, @Price)";
using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@Name", txt_Name.Text.Trim());
cmd.Parameters.AddWithValue("@Author", txt_Author.Text.Trim());
cmd.Parameters.AddWithValue("@Press", txt_Press.Text.Trim());
cmd.Parameters.AddWithValue("@PublishDate", dtp_Date.Value.ToString("yyyy-MM-dd"));
cmd.Parameters.AddWithValue("@Price", txt_Price.Text.Trim());
cmd.ExecuteNonQuery();
}
}
MessageBox.Show("添加成功!");
this.Close();
}
删除书籍
实现删除书籍的功能时,需要实现以下步骤:
- 用户在“MainForm”中选择一本书;
- 用户点击“删除”按钮;
- 将该书籍信息从“Book”表格中删除;
- 刷新书籍列表;
以下为代码示例:
// 在“MainForm”表单的“删除”按钮被点击时,删除选定的书籍
private void tsb_DeleteBook_Click(object sender, EventArgs e)
{
if (dgv_Books.SelectedRows.Count == 0)
{
MessageBox.Show("请先选择要删除的书籍。");
return;
}
int bookId = (int)dgv_Books.SelectedRows[0].Cells["Id"].Value;
string bookName = dgv_Books.SelectedRows[0].Cells["Name"].Value.ToString();
if (MessageBox.Show($"确认删除『{bookName}』吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
{
cn.Open();
string sql = @"DELETE FROM Book WHERE Id=@Id";
using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@Id", bookId);
cmd.ExecuteNonQuery();
}
}
MessageBox.Show("删除成功!");
BindMyData();
}
}
修改书籍信息
实现修改书籍信息的功能时,需要实现以下步骤:
- 用户在“MainForm”中选择一本书;
- 用户点击“修改”按钮;
- 打开“ModifyBookForm”表格,并显示该书籍的信息;
- 用户修改并提交新的书籍信息;
- “Book”表中该书籍的信息会被更新;
- 返回主界面;
以下为代码示例:
// 在“MainForm”表单的“修改”按钮被点击时,打开新的“ModifyBookForm”表单
private void tsb_ModifyBook_Click(object sender, EventArgs e)
{
if (dgv_Books.SelectedRows.Count == 0)
{
MessageBox.Show("请先选择要修改的书籍。");
return;
}
int bookId = (int)dgv_Books.SelectedRows[0].Cells["Id"].Value;
string bookName = dgv_Books.SelectedRows[0].Cells["Name"].Value.ToString();
ModifyBookForm modifyBookForm = new ModifyBookForm(bookId);
modifyBookForm.ShowDialog();
BindMyData();
}
// 在“ModifyBookForm”表单的“确认”按钮被点击时,将新的书籍信息写入数据库
private void btn_OK_Click(object sender, EventArgs e)
{
using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
{
cn.Open();
string sql = @"UPDATE Book SET Name=@Name, Author=@Author, Press=@Press, PublishDate=@PublishDate, Price=@Price WHERE Id=@Id";
using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@Id", bookId);
cmd.Parameters.AddWithValue("@Name", txt_Name.Text.Trim());
cmd.Parameters.AddWithValue("@Author", txt_Author.Text.Trim());
cmd.Parameters.AddWithValue("@Press", txt_Press.Text.Trim());
cmd.Parameters.AddWithValue("@PublishDate", dtp_Date.Value.ToString("yyyy-MM-dd"));
cmd.Parameters.AddWithValue("@Price", txt_Price.Text.Trim());
cmd.ExecuteNonQuery();
}
}
MessageBox.Show("修改成功!");
this.Close();
}
查询书籍信息
实现查询书籍信息的功能时,需要实现以下步骤:
- 打开“QueryBookForm”表单;
- 用户选择以书名或者作者进行查询;
- 根据用户选择及输入,从“Book”表格中查询所需的书籍信息;
- 显示查询结果;
以下为代码示例:
// 在“MainForm”表单的“查询”按钮被点击时,打开新的“QueryBookForm”表单
private void tsb_QueryBook_Click(object sender, EventArgs e)
{
QueryBookForm queryBookForm = new QueryBookForm();
queryBookForm.ShowDialog();
}
// 在“QueryBookForm”表单的“查询”按钮被点击时,查询符合条件的书籍并更新“MainForm”中的显示结果
private void btn_Query_Click(object sender, EventArgs e)
{
string mode;
if (rb_Name.Checked)
{
mode = "Name";
}
else
{
mode = "Author";
}
using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
{
cn.Open();
string sql = $"SELECT * FROM Book WHERE {mode} LIKE '%' || @Keyword || '%'";
using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@Keyword", txt_Keyword.Text.Trim());
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd))
{
DataTable table = new DataTable();
adapter.Fill(table);
dgv_Books.DataSource = table;
}
}
}
MessageBox.Show("查询完毕。");
}
显示所有书籍信息
实现显示所有书籍信息的功能时,需要实现以下步骤:
- 从“Book”表格中读取所有书籍的信息;
- 在“MainForm”中显示所有书籍的列表;
以下为代码示例:
// “MainForm”打开时刷新书籍列表
private void MainForm_Load(object sender, EventArgs e)
{
BindMyData();
}
// 更新书籍列表
private void BindMyData()
{
using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
{
cn.Open();
string sql = @"SELECT * FROM Book";
using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
{
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd))
{
DataTable table = new DataTable();
adapter.Fill(table);
dgv_Books.DataSource = table;
}
}
}
}
结语
以上为本篇攻略的 C# 实现图书管理系统的完整攻略。通过本文,我们可以快速地了解图书管理系统的相关实现原理和代码,同时,也可以进一步掌握利用 C# 进行 Desktop 应用开发的技巧。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现图书管理系统 - Python技术站