C#实现图书管理系统

C# 实现图书管理系统

在本篇攻略中,我们将演示如何使用 C# 实现一个图书管理系统。该系统的功能如下:

  • 添加图书:包括书名、作者、出版社、出版日期、价格等信息;
  • 删除图书;
  • 修改图书信息;
  • 查询图书信息:查询所有图书或根据书名或作者进行模糊查询;
  • 显示所有图书;

技术栈

  • C#:一种面向对象的编程语言;
  • Windows Forms:一种基于 Windows 操作系统的用户界面开发工具;
  • SQLite:一种轻量级的关系型数据库管理系统;

准备工作

在开始编码前,我们需要先安装 Visual Studio,Visual Studio 自带 .NET Framework 和 Windows Forms,也可通过 NuGet 安装 SQLite 数据库。

创建数据库

为了保存图书信息,我们需要创建一个数据库。在 Visual Studio 中做如下操作:

  1. 在“解决方案资源管理器”中右键点击“添加”;
  2. 在“添加新项”对话框中选择“Data”选项卡;
  3. 选择当地数据库文件并设置其名称(如“BookManager.db”);
  4. 打开新建的 .db 文件;
  5. 运行以下 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:关于软件,作者信息等;

实现功能

添加书籍

实现添加书籍的功能时,需要实现以下步骤:

  1. 打开“AddBookForm”表单;
  2. 用户输入书籍的各项基本信息;
  3. 用户点击“确定”按钮,将书籍信息插入到“Book”表格中;
  4. 返回主界面;

以下为代码示例:

// 打开添加书籍的表单
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();
}

删除书籍

实现删除书籍的功能时,需要实现以下步骤:

  1. 用户在“MainForm”中选择一本书;
  2. 用户点击“删除”按钮;
  3. 将该书籍信息从“Book”表格中删除;
  4. 刷新书籍列表;

以下为代码示例:

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

修改书籍信息

实现修改书籍信息的功能时,需要实现以下步骤:

  1. 用户在“MainForm”中选择一本书;
  2. 用户点击“修改”按钮;
  3. 打开“ModifyBookForm”表格,并显示该书籍的信息;
  4. 用户修改并提交新的书籍信息;
  5. “Book”表中该书籍的信息会被更新;
  6. 返回主界面;

以下为代码示例:

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

查询书籍信息

实现查询书籍信息的功能时,需要实现以下步骤:

  1. 打开“QueryBookForm”表单;
  2. 用户选择以书名或者作者进行查询;
  3. 根据用户选择及输入,从“Book”表格中查询所需的书籍信息;
  4. 显示查询结果;

以下为代码示例:

// 在“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("查询完毕。");
}

显示所有书籍信息

实现显示所有书籍信息的功能时,需要实现以下步骤:

  1. 从“Book”表格中读取所有书籍的信息;
  2. 在“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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C# Random类的正确应用方法

    下面就来详细讲解“C# Random类的正确应用方法”的完整攻略。 什么是C# Random类? C#中的Random类是用于生成随机数的类,它包含在System命名空间中。Random类使用一个伪随机数生成器来产生随机数,该生成器使用的是一个种子值,该种子值可以是用户自定义的,也可以是系统提供的。 Random类的正确使用方法 创建Random对象 Ran…

    C# 2023年6月1日
    00
  • IIS6.0出错脚本引擎异常处理方法

    我来详细讲解一下“IIS6.0出错脚本引擎异常处理方法”的完整攻略。 问题描述 在使用IIS6.0时,有时候会出现脚本引擎异常的情况,这时候我们需要进行异常处理。 解决方法 首先,我们需要在IIS控制台中设置”Send Errors to Browser”为”True”,这样在运行时会在浏览器上显示具体的错误信息,方便我们进行调试。 针对不同的异常类型,我们…

    C# 2023年5月15日
    00
  • 支付宝支付开发——当面付条码支付和扫码支付实例

    支付宝支付开发——当面付条码支付和扫码支付实例 简介 本文将为您介绍如何利用支付宝支付API,实现当面付条码支付和扫码支付功能。通过本文的学习,您将了解到如何进行支付宝开发。 准备工作 注册支付宝开发者账号并申请沙箱环境。 在支付宝开发者平台创建应用,获取APPID和私钥、公钥。 下载并安装alipay-sdk-java 或其他支持支付宝支付的SDK。 了解…

    C# 2023年5月31日
    00
  • C#中for循环、while循环循环执行的方法

    C#中的for循环和while循环是常用的循环结构,用于重复执行相同或类似的代码块,下面是它们的详细讲解和示例说明: for循环 for循环是一种经典的循环语句,用于重复执行一段代码,可以控制循环变量的初始值、终止条件和每次循环变量的增量。for循环的语法如下: for (初始化表达式; 循环条件; 迭代语句) { // 循环体语句 } 其中,初始化表达式只…

    C# 2023年6月7日
    00
  • html加css样式实现js美食项目首页示例代码

    让我来详细讲解一下如何利用HTML和CSS实现一个美食项目的首页。 环境准备 在开始之前,你需要做好以下准备: 一台电脑和代码编辑器 熟悉HTML和CSS的基本语法 熟悉基本的JavaScript语法 目标设计 我们这个美食项目的首页,需要实现以下功能: 导航栏 轮播图 宣传广告图 美食推荐列表 HTML部分 首先,我们需要在HTML中添加必要的元素,包括导…

    C# 2023年5月31日
    00
  • C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解

    C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解 什么是Office SmartArt? Office SmartArt 是微软Office套件中的一种图形类型,它可以帮助用户在较短的时间内创建具有高质量的信息图形。它的能力不仅限于流程图和组织结构图,还包括算法图、漏斗图、阶段图、矩阵图、金字塔图等不同种类的图形。 如何在C…

    C# 2023年6月3日
    00
  • C# WinForm窗口最小化到系统托盘

    让我为您详细讲解一下“C# WinForm窗口最小化到系统托盘”的完整攻略。 基本思路 将窗口最小化到系统托盘需要用到以下两个类: NotifyIcon: 系统托盘图标类,用于在系统托盘中显示图标。 ContextMenuStrip: 右键菜单类,用于为系统托盘图标添加右键菜单。 基本的思路是,在窗口最小化时,将窗口隐藏并在系统托盘中显示一个图标,当用户单击…

    C# 2023年6月6日
    00
  • C#用dynamic一行代码实现反射操作

    dynamic简介 dynamic是.NET Framework4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译时默认dynamic对象支持你想要的任何特性。 dynamic简化反射实现 使用dynamic来简化反射实现是一种比较常见的编程技巧,它可以减少代码的复杂性并提高可读性。下面是一个使用dy…

    C# 2023年4月28日
    00
合作推广
合作推广
分享本页
返回顶部