【C#】书籍信息的添加、修改、查询、删除

news2024/12/26 22:51:12

文章目录

    • 一、简介
    • 二、程序功能
      • 2.1 Book类
        • 属性:
        • 方法:
      • 2.2 Program 类
    • 三、方法:
    • 四、用户界面流程:
    • 五、程序代码
    • 六、运行效果


一、简介

简单的C#控制台应用程序,用于管理书籍信息。这个程序将允许用户添加、编辑、查看和删除书籍信息,并将每本书籍的信息保存到一个文本文件中。这是一个实用的工具,适用于需要管理书籍信息的用户。

二、程序功能

我们的程序将包含以下功能:

当然,以下是程序中每个功能和对应方法的详细解释:

2.1 Book类

这个类代表了一个书籍对象,包含了书籍的所有属性。

属性:
  • Title:书名。
  • Author:作者。
  • Publisher:出版社。
  • PublishDate:出版日期。
  • Price:定价。
方法:
  • Book():默认构造函数,用于创建一个没有任何信息的书籍对象。
  • Book(string title, string author, string publisher, DateTime publishDate, decimal price):参数化构造函数,用于创建一个包含所有信息的书籍对象。
  • SaveToFile(string filePath):将书籍信息保存到指定的文件路径。这个方法使用File.WriteAllText来写入文件,文件内容以特定的格式保存(书名、作者、出版社、出版日期和定价)。
  • LoadFromFile(string filePath):从指定的文件路径加载书籍信息。这个方法使用File.ReadAllLines来读取文件,并解析每一行来设置书籍对象的属性。
  • DeleteBookFile(string filePath):删除指定文件路径的书籍文件。这个方法首先检查文件是否存在,如果存在,则使用File.Delete来删除文件。

2.2 Program 类

这个类包含程序的入口点和用户界面逻辑。

三、方法:

  • Main(string[] args):程序的入口点。这个方法设置控制台标题,显示主菜单,并根据用户的选择调用不同的方法来执行操作。
  • AddEditBook():添加或编辑书籍信息。这个方法提示用户输入书籍的详细信息,并保存到用户指定的文件路径。
  • ViewBook():查看书籍信息。这个方法提示用户输入书籍文件的路径,然后加载并显示书籍的详细信息。
  • DeleteBook():删除书籍信息。这个方法提示用户输入要删除的书籍文件路径,然后调用Book.DeleteBookFile方法来删除文件。

四、用户界面流程:

  • 程序启动后,显示主菜单,用户可以选择添加/编辑书籍、查看书籍、删除书籍或退出程序。
  • 根据用户的选择,程序调用相应的方法来执行操作。
  • 每个方法都通过控制台输入输出与用户交互,获取必要的信息或显示结果。

五、程序代码

以下是程序的完整代码:

using System;
using System.IO;

namespace pages_211_编程题3_2_书籍信息的查看与编辑
{
    public class Book
    {
        public string Title { get; set; }
        public string Author { get; set; }
        public string Publisher { get; set; }
        public DateTime PublishDate { get; set; }
        public decimal Price { get; set; }

        public Book() { }
        public Book(string title, string author, string publisher, DateTime publishDate, decimal price)
        {
            Title = title;
            Author = author;
            Publisher = publisher;
            PublishDate = publishDate;
            Price = price;
        }

        public void SaveToFile(string filePath)
        {
            File.WriteAllText(filePath, $"书名: {Title}\n作者:{Author}\n出版社: {Publisher}\n出版日期: {PublishDate}\n定价: {Price}");
        }

        public static Book LoadFromFile(string filePath)
        {
            string[] lines = File.ReadAllLines(filePath);
            return new Book
            {
                Title = lines[0].Split(new char[] { ':' }, 2)[1].Trim(),
                Author = lines[1].Split(new char[] { ':' }, 2)[1].Trim(),
                Publisher = lines[2].Split(new char[] { ':' }, 2)[1].Trim(),
                PublishDate = DateTime.Parse(lines[3].Split(new char[] { ':' }, 2)[1].Trim()),
                Price = decimal.Parse(lines[4].Split(new char[] { ':' }, 2)[1].Trim())
            };
        }

        public static void DeleteBookFile(string filePath)
        {
            if (File.Exists(filePath))
            {
                File.Delete(filePath);
                Console.WriteLine("书籍文件删除成功。");
            }
            else
            {
                Console.WriteLine("书籍文件不存在。");
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "书籍管理器";
            bool exit = false;
            while (!exit)
            {
                Console.WriteLine("\n书籍管理器");
                Console.WriteLine("1. 添加/编辑书籍");
                Console.WriteLine("2. 查看书籍");
                Console.WriteLine("3. 删除书籍");
                Console.WriteLine("4. 退出");
                Console.Write("请选择一个选项:");
                int option = Convert.ToInt32(Console.ReadLine());
                switch (option)
                {
                    case 1:
                        AddEditBook();
                        break;
                    case 2:
                        ViewBook();
                        break;
                    case 3:
                        DeleteBook();
                        break;
                    case 4:
                        exit = true;
                        break;
                    default:
                        Console.WriteLine("选项无效,请再试一次");
                        break;
                }
            }
        }

        static void AddEditBook()
        {
            Console.Write("请输入书名:");
            string title = Console.ReadLine();
            Console.Write("请输入作者:");
            string author = Console.ReadLine();
            Console.Write("请输入出版社:");
            string publisher = Console.ReadLine();
            Console.Write("请输入出版日期(格式为yyyy-MM-dd):");
            DateTime publishDate = DateTime.Parse(Console.ReadLine());
            Console.Write("请输入定价:");
            decimal price = decimal.Parse(Console.ReadLine());

            Book book = new Book(title, author, publisher, publishDate, price);
            Console.Write("请输入保存书籍的文件路径:");
            string filePath = Console.ReadLine();
            book.SaveToFile(filePath);

            Console.WriteLine("书籍保存成功。");
        }

        static void ViewBook()
        {
            Console.Write("请输入要查看书籍的文件路径:");
            string filePath = Console.ReadLine();
            Book book = Book.LoadFromFile(filePath);

            Console.WriteLine($"书名: {book.Title}");
            Console.WriteLine($"作者: {book.Author}");
            Console.WriteLine($"出版社: {book.Publisher}");
            Console.WriteLine($"出版日期: {book.PublishDate.ToShortDateString()}");
            Console.WriteLine($"定价: {book.Price}");
        }

        static void DeleteBook()
        {
            Console.Write("请输入要删除书籍的文件路径:");
            string filePath = Console.ReadLine();
            Book.DeleteBookFile(filePath);
        }
    }
}

六、运行效果

  • 添加书籍

在这里插入图片描述
在这里插入图片描述

  • 修改书籍
    在这里插入图片描述
    在这里插入图片描述

  • 删除书籍
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2253310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打造去中心化交易平台:公链交易所开发全解析

公链交易所(Public Blockchain Exchange)是指基于公有链(如以太坊、波场、币安智能链等)建立的去中心化交易平台。与传统的中心化交易所(CEX)不同,公链交易所基于区块链技术实现资产交换的去中心…

CLIP模型也能处理点云信息

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

关于NXP开源的MCU_boot的项目心得

MCU的启动流程细查 注意MCU上电第一个函数运行的就是Reset_Handler函数,下图是表示了这个函数做了啥事情,注意加强一下对RAM空间的段的印象,从上到下是栈,堆,.bss段,.data段。 bootloader的难点 固件完…

MySQL5.6升级MySQL5.7

升级方式介绍 08 数据库服务版本升级方法 5.6 – 5.7 – 8.0 数据库版本升级方法: Inplace-本地升级 步骤一:在同一台服务器中,需要部署高版本数据库服务实例步骤二:低版本数据库中的数据进行备份迁移,迁移到高版本…

怎么理解BeamSearch?

在大模型推理中,常会用到BeamSearch,本文就BeamSearch原理与应用理解展开讲解。 一、BeamSearch原理 Beam Search 是一种启发式搜索算法,常用于自然语言处理(NLP)和其他需要生成序列的任务中,比如机器翻译…

shodan2-批量查找CVE-2019-0708漏洞

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

SciPy Optimize和 CVXPY对比

CVXPY和SciPy Optimize模块都是在Python中解决优化问题的强大工具,但它们是为不同类型的问题而设计的,具有不同的优点和局限性。本文对比两者的优缺点,阐述各自的应用场景,同时解释常用求解器,并给出实际示例进行说明。…

DevOps工程技术价值流:GitLab源码管理与提交流水线实践

在当今快速迭代的软件开发环境中,DevOps(开发运维一体化)已经成为提升软件交付效率和质量的关键。而GitLab,作为一个全面的开源DevOps平台,不仅提供了强大的版本控制功能,还集成了持续集成/持续交付(CI/CD)…

Android Studio 右侧工具栏 Gradle 不显示 Task 列表

问题: android studio 4.2.1版本更新以后AS右侧工具栏Gradle Task列表不显示,这里需要手动去设置 解决办法: android studio 2024.2.1 Patch 2版本以前的版本设置:依次打开 File -> Settings -> Experimental 选项&#x…

Linux详解:文件权限

文章目录 前言Linux文件权限基础文件成员与三组权限字符 权限的修改修改文件所有者总结 前言 在浩瀚的操作系统世界中,Linux以其开源、灵活和强大的特性,成为了服务器、开发环境以及众多个人用户的首选。而在Linux的众多特性中,文件权限机制…

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习还是公司研发需求,都相当合适,包您满…

Spark常问面试题---项目总结

一、数据清洗,你都清洗什么?或者说 ETL 你是怎么做的? 我在这个项目主要清洗的式日志数据,日志数据传过来的json格式 去除掉无用的字段,过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据&#xff…

数据结构4——栈和队列

目录 1.栈 1.1.栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2队列的实现 1.栈 1.1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为…

限定符使用

正则表达式的元字符一次一般只能匹配一个位置或一个字符,如果想要匹配零个、一个或多个字符时,则需要使用限定符。限定符用于指定允许特定字符或字符集自身重复出现的次数。常用限定符如下: <asp:TextBox [^>]> 正则表达式字符类[^>]匹配除过“>”之外的任何字…

【Python】Selenium模拟在输入框里,一个字一个字地输入文字

我们平常在使用Selenium模拟键盘输入内容&#xff0c;常用的是用send_keys来在输入框上输入字&#xff1a; 基本的输入方式&#xff1a; input_element driver.find_element(By.ID, searchBox) input_element.send_keys("我也爱你") #给骚骚的自己发个骚话不过这种…

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…

配置宝塔php curl 支持http/2 发送苹果apns消息推送

由于宝塔面板默认的php编译的curl未加入http2的支持&#xff0c;如果服务需要使用apns推送等需要http2.0的访问就会失败&#xff0c;所以重新编译php让其支持http2.0 编译方法&#xff1a; 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…

YOLOv11 NCNN安卓部署

YOLOv11 NCNN安卓部署 之前自己在验证更换relu激活函数重新训练部署模型的时候&#xff0c;在使用ncnn代码推理验证效果很好&#xff0c;但是部署到安卓上cpu模式会出现大量的错误检测框&#xff0c;现已更换会官方默认的权重 前言 YOLOv11 NCNN安卓部署 目前的帧率可以稳定…

MeterSphere接口测试提取数组及引用

实际工作中常见的使用场景&#xff1a; 1、提取数组中某个特定值&#xff1b; $.data.groups[n].name提取特定值 2、提取数组中全部值&#xff1b; $.data.groups[*].name&#xff0c;并勾选匹配多条以提取全部值 3、提取数组中的某几个特定值&#xff1b; 如提取数组中第1个和…

【数据结构】队列的概念、结构和实现详解

本文来介绍一下数据结构中的队列&#xff0c;以及如何用C语言去模拟实现。 1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。 特点&#xff1a;数据先进先出FIFO&#xff08;first in first out&#xf…