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# 获取汉字的拼音首字母

    下面是关于如何在C#中获取汉字的拼音首字母的攻略: 安装NuGet包 在使用C#编写代码之前,需要先安装相应的NuGet包。在Visual Studio的NuGet包管理器中搜索“NPinyin”并安装。 导入命名空间 完成NuGet包的安装后,需要在代码文件的顶部导入“NPinyin”命名空间,如下所示: using NPinyin; 调用API获取拼音 …

    C# 2023年6月7日
    00
  • Asp.net SignalR创建实时聊天应用程序

    Asp.net SignalR是微软推出的一个开源的库,可以用来开发实时应用程序,例如:聊天应用、实时消息推送、实时数据更新等等。 下面是创建Asp.net SignalR实时聊天应用程序的完整攻略步骤: 步骤1:创建Asp.net MVC项目 首先,在Visual Studio中创建Asp.net MVC项目,命名为ChatRoom。 步骤2:添加Sign…

    C# 2023年5月31日
    00
  • C# 如何在WINForm程序中创建XML文件

    在C#的WINForm程序中,可以使用System.Xml命名空间中的类来创建和操作XML文件。本文将提供创建XML文件的完整攻略,包括创建XML文档、添加元素和属性、保存XML文件等。同时,本文还将提供两个示例,演示如何在WINForm程序中创建XML文件。 创建XML文档 要创建XML文档,可以使用XmlDocument类。以下是创建XML文档的步骤: …

    C# 2023年5月15日
    00
  • C#配置文件Section节点处理总结

    C#配置文件是存储应用程序的重要组成部分,通常包括键值对和节点等信息。其中节点是配置文件的逻辑分组,为了更好地管理配置文件,我们可以对它们进行统一管理,这就需要使用到配置文件的Section节点处理。 Section节点的概念 Section节点代表一个配置文件的逻辑分组,称为一个配置文件“段落”,它可以包含若干个键值对。Section节点是配置文件的一个顶…

    C# 2023年6月1日
    00
  • javascript 节点排序实现代码

    下面是关于“javascript 节点排序实现代码”的完整攻略。 一、准备要排序的节点 首先,需要获取需要排序的节点,并将它们存入到一个数组中,以便进行排序操作。可以通过以下方式获取需要排序的节点: const nodes = document.querySelectorAll(‘.node’); // 获取所有需要排序的节点 二、将节点进行排序操作 在获取…

    C# 2023年6月8日
    00
  • C# 参考之访问关键字:base、this

    C# 参考之访问关键字:base、this 在C#开发中,我们经常需要使用到 base 和 this 这两个关键词来访问父类和当前类的成员。本文将深入介绍 base 和 this 关键字的用法和注意事项。 访问父类成员 base 关键字用于访问父类中定义的成员,包括字段,方法和属性。在子类中,如果存在一个和父类同名的成员,我们可以使用 base 关键字来调用…

    C# 2023年5月31日
    00
  • ASP.NET连接SQL数据库的简单实例代码

    下面是ASP.NET连接SQL数据库的简单实例代码的攻略。 简介 在ASP.NET中,连接SQL数据库是一项很常见的任务。通过连接数据库,我们可以将数据存储在数据库中,并在需要的时候从数据库中检索这些数据。本攻略将引导您完成ASP.NET连接SQL数据库的简单实例代码。 步骤 步骤1:创建一个ASP.NET项目 首先,我们需要创建一个ASP.NET项目。可以…

    C# 2023年5月31日
    00
  • C#中Backgroundworker与Thread的区别

    在C#中,可以使用BackgroundWorker和Thread类来实现多线程编程。这两个类最初的目的都是为了实现异步操作,但它们使用的机制和易用性却有着较大的不同。 BackgroundWorker与Thread的区别 机制 BackgroundWorker类是基于事件的异步操作机制,它将异步操作分为三个阶段:DoWork、ProgressChanged、…

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