C#实现简单订单管理程序

C#实现简单订单管理程序攻略

订单管理程序是一个基本的软件开发任务,通过它我们可以练习C#类和对象,掌握基本的输入输出、判断和运算等编程技巧。下面将详细讲解如何使用C#实现一个简单的订单管理程序。

步骤一:定义订单类

首先,我们需要定义一个订单类,用于表示一个订单。订单有一个唯一的标识符、一个客户信息、一个订单日期以及一组订单项。定义订单类的代码如下:

public class Order
{
    public int Id { get; set; } // 订单号
    public Customer Customer { get; set; } // 客户信息
    public DateTime OrderDate { get; set; } // 订单日期
    public List<OrderItem> Items { get; set; } // 订单项

    public Order(int id, Customer customer, DateTime orderDate)
    {
        Id = id;
        Customer = customer;
        OrderDate = orderDate;
        Items = new List<OrderItem>();
    }

    public override string ToString()
    {
        StringBuilder builder = new StringBuilder();
        builder.AppendFormat("Order Id: {0}\n", Id);
        builder.AppendFormat("Customer: {0}\n", Customer);
        builder.AppendFormat("Order Date: {0}\n", OrderDate);
        builder.AppendLine("Order Items:");
        foreach (OrderItem item in Items)
        {
            builder.AppendFormat("\t{0}\n", item);
        }
        return builder.ToString();
    }
}

在订单类中,我们定义了四个成员变量:订单号、客户信息、订单日期以及订单项。订单项是一个列表,包含了多个订单商品。我们还实现了ToString方法,用于打印订单的详细信息。

步骤二:定义客户类和订单项类

接下来,我们需要定义客户类和订单项类,用于表示客户信息和订单商品。客户类和订单项类的代码如下:

public class Customer
{
    public int Id { get; set; } // 客户ID
    public string Name { get; set; } // 客户名称

    public Customer(int id, string name)
    {
        Id = id;
        Name = name;
    }

    public override string ToString()
    {
        return string.Format("ID: {0}, Name: {1}", Id, Name);
    }
}

public class OrderItem
{
    public int Id { get; set; } // 商品ID
    public string Name { get; set; } // 商品名称
    public double Price { get; set; } // 商品单价
    public int Quantity { get; set; } // 商品数量

    public OrderItem(int id, string name, double price, int quantity)
    {
        Id = id;
        Name = name;
        Price = price;
        Quantity = quantity;
    }

    public override string ToString()
    {
        return string.Format("ID: {0}, Name: {1}, Price: {2:C}, Quantity: {3}", Id, Name, Price, Quantity);
    }
}

在客户类和订单项类中,我们分别定义了客户ID、客户名称、商品ID、商品名称、商品单价以及商品数量等属性,并实现了ToString方法,用于打印客户信息和订单商品的详细信息。

步骤三:实现订单管理程序

现在,我们已经定义了订单类、客户类和订单项类,可以开始实现订单管理程序了。我们可以通过控制台程序进行实现,具体流程如下:

  1. 打印主菜单,包括添加订单、删除订单、修改订单、查询订单和退出程序等选项。
  2. 根据用户选择的选项,执行相应的操作。
  3. 若用户选择添加订单,则提示用户输入订单信息,并根据用户输入创建一个订单对象。
  4. 若用户选择删除订单,则提示用户输入要删除订单的ID,并从订单列表中删除该订单。
  5. 若用户选择修改订单,则提示用户输入要修改订单的ID,并根据用户输入更新该订单的信息。
  6. 若用户选择查询订单,则提示用户选择查询方式,可以根据订单号、客户名称或商品名称进行查询,并返回符合条件的所有订单。
  7. 若用户选择退出程序,则退出程序,否则回到步骤1。

以下是一个简单的控制台程序的实现示例:

class Program
{
    static List<Order> orders = new List<Order>();

    static void Main(string[] args)
    {
        bool exit = false;
        while (!exit)
        {
            Console.WriteLine("Order Management System");
            Console.WriteLine("-----------------------");
            Console.WriteLine("1. Add Order");
            Console.WriteLine("2. Remove Order");
            Console.WriteLine("3. Modify Order");
            Console.WriteLine("4. Query Order");
            Console.WriteLine("5. Exit");
            Console.Write("Please select an option: ");
            string option = Console.ReadLine();
            switch (option)
            {
                case "1":
                    AddOrder();
                    break;
                case "2":
                    RemoveOrder();
                    break;
                case "3":
                    ModifyOrder();
                    break;
                case "4":
                    QueryOrder();
                    break;
                case "5":
                    exit = true;
                    break;
                default:
                    Console.WriteLine("Invalid option, please try again.");
                    break;
            }
        }
    }

    // 添加订单
    static void AddOrder()
    {
        Console.WriteLine("Add Order");
        Console.WriteLine("---------");
        Console.Write("Please enter Order ID: ");
        int id = int.Parse(Console.ReadLine());
        Console.Write("Please enter Customer ID: ");
        int customerId = int.Parse(Console.ReadLine());
        Console.Write("Please enter Customer Name: ");
        string customerName = Console.ReadLine();
        Console.Write("Please enter Order Date (yyyy-MM-dd): ");
        DateTime orderDate = DateTime.Parse(Console.ReadLine());
        Order order = new Order(id, new Customer(customerId, customerName), orderDate);
        bool exit = false;
        while (!exit)
        {
            Console.WriteLine("Add Order Item");
            Console.WriteLine("--------------");
            Console.Write("Please enter Item ID: ");
            int itemId = int.Parse(Console.ReadLine());
            Console.Write("Please enter Item Name: ");
            string itemName = Console.ReadLine();
            Console.Write("Please enter Item Price: ");
            double itemPrice = double.Parse(Console.ReadLine());
            Console.Write("Please enter Item Quantity: ");
            int itemQuantity = int.Parse(Console.ReadLine());
            order.Items.Add(new OrderItem(itemId, itemName, itemPrice, itemQuantity));
            Console.Write("Add another Item? (Y/N): ");
            string yn = Console.ReadLine();
            if (yn.ToLower() == "n")
            {
                exit = true;
            }
        }
        orders.Add(order);
        Console.WriteLine("Order added successfully.");
    }

    // 删除订单
    static void RemoveOrder()
    {
        Console.WriteLine("Remove Order");
        Console.WriteLine("------------");
        Console.Write("Please enter Order ID: ");
        int id = int.Parse(Console.ReadLine());
        Order orderToRemove = orders.SingleOrDefault(o => o.Id == id);
        if (orderToRemove != null)
        {
            orders.Remove(orderToRemove);
            Console.WriteLine("Order removed successfully.");
        }
        else
        {
            Console.WriteLine("Order not found.");
        }
    }

    // 修改订单
    static void ModifyOrder()
    {
        Console.WriteLine("Modify Order");
        Console.WriteLine("------------");
        Console.Write("Please enter Order ID to modify: ");
        int id = int.Parse(Console.ReadLine());
        Order orderToModify = orders.SingleOrDefault(o => o.Id == id);
        if (orderToModify != null)
        {
            Console.Write("Please enter new Customer ID: ");
            int customerId = int.Parse(Console.ReadLine());
            Console.Write("Please enter new Customer Name: ");
            string customerName = Console.ReadLine();
            Console.Write("Please enter new Order Date (yyyy-MM-dd): ");
            DateTime orderDate = DateTime.Parse(Console.ReadLine());
            orderToModify.Customer.Id = customerId;
            orderToModify.Customer.Name = customerName;
            orderToModify.OrderDate = orderDate;
            Console.WriteLine("Order modified successfully.");
        }
        else
        {
            Console.WriteLine("Order not found.");
        }
    }

    // 查询订单
    static void QueryOrder()
    {
        Console.WriteLine("Query Order");
        Console.WriteLine("-----------");
        Console.WriteLine("1. Query by Order ID");
        Console.WriteLine("2. Query by Customer Name");
        Console.WriteLine("3. Query by Item Name");
        Console.Write("Please select a query option: ");
        string option = Console.ReadLine();
        switch (option)
        {
            case "1":
                Console.Write("Please enter Order ID: ");
                int id = int.Parse(Console.ReadLine());
                var ordersById = orders.Where(o => o.Id == id);
                PrintOrders(ordersById);
                break;
            case "2":
                Console.Write("Please enter Customer Name: ");
                string customerName = Console.ReadLine();
                var ordersByCustomerName = orders.Where(o => o.Customer.Name == customerName);
                PrintOrders(ordersByCustomerName);
                break;
            case "3":
                Console.Write("Please enter Item Name: ");
                string itemName = Console.ReadLine();
                var ordersByItemName = orders.Where(o => o.Items.Any(item => item.Name == itemName));
                PrintOrders(ordersByItemName);
                break;
            default:
                Console.WriteLine("Invalid option, please try again.");
                break;
        }
    }

    // 打印订单列表
    static void PrintOrders(IEnumerable<Order> orders)
    {
        if (orders.Count() == 0)
        {
            Console.WriteLine("No orders found.");
        }
        else
        {
            foreach (Order order in orders)
            {
                Console.WriteLine(order);
            }
        }
    }
}

在上面的代码中,我们定义了一个静态变量orders,用于存储所有的订单。在程序启动后,我们打印了一个简单的菜单,并根据用户选择的选项执行相应的操作。

例如,用户选择添加订单选项后,程序会提示用户输入订单信息,并根据输入创建一个订单对象,然后提示用户继续添加订单商品,直到用户不再添加。最后,将订单对象添加到订单列表中,并提示用户添加成功。

另外,我们还实现了删除订单、修改订单和查询订单等操作,并通过LINQ语句和Lambda表达式对订单列表进行过滤和查询,最后将符合条件的所有订单打印出来。

示例说明

示例一:添加订单

Order Management System
-----------------------
1. Add Order
2. Remove Order
3. Modify Order
4. Query Order
5. Exit
Please select an option: 1
Add Order
---------
Please enter Order ID: 1001
Please enter Customer ID: 1
Please enter Customer Name: Alice
Please enter Order Date (yyyy-MM-dd): 2021-06-10
Add Order Item
--------------
Please enter Item ID: 1
Please enter Item Name: iPhone
Please enter Item Price: 6999
Please enter Item Quantity: 1
Add another Item? (Y/N): y
Please enter Item ID: 2
Please enter Item Name: MacBook Pro
Please enter Item Price: 12999
Please enter Item Quantity: 1
Add another Item? (Y/N): n
Order added successfully.

上面的示例中,我们选择了添加订单选项,并输入了订单信息和两个订单商品,程序最后提示添加成功。

示例二:查询订单

Order Management System
-----------------------
1. Add Order
2. Remove Order
3. Modify Order
4. Query Order
5. Exit
Please select an option: 4
Query Order
-----------
1. Query by Order ID
2. Query by Customer Name
3. Query by Item Name
Please select a query option: 1
Please enter Order ID: 1001
Order Id: 1001
Customer: ID: 1, Name: Alice
Order Date: 6/10/2021 12:00:00 AM
Order Items:
        ID: 1, Name: iPhone, Price: ¥6,999.00, Quantity: 1
        ID: 2, Name: MacBook Pro, Price: ¥12,999.00, Quantity: 1

上面的示例中,我们选择了查询订单选项,并选择了按订单号查询。程序根据我们输入的订单号查找到该订单,并打印了订单的详细信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简单订单管理程序 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 深入理解C#之继承

    深入理解C#之继承 继承是面向对象编程中非常重要的一种机制,它可以使得我们代码重用性更高,更加简洁。在C#中,继承可以通过类之间的关系来实现(类之间的关系有继承、实现、组合等)。在本篇文章中,我们将学习C#中的继承机制,重点包括如下内容: 继承的语法和基本概念 虚方法和抽象类 接口继承 隐藏和重写方法 继承链 继承的语法和基本概念 在C#中,使用:符号表示一…

    C# 2023年5月15日
    00
  • 详解PID控制器原理

    详解PID控制器原理 什么是PID控制器? PID控制器是一种常用的控制器,可以用于自动控制系统中。它的全称是Proportional-Integral-Derivative Controller(比例-积分-微分控制器),它主要根据误差信号调整控制量,从而稳定系统的输出。 PID控制器的组成 PID控制器由三部分组成: 比例控制器 比例控制器根据误差信号调…

    C# 2023年6月8日
    00
  • C#实现窗体与子线程的交互的方法

    实现窗体与子线程的交互在C#开发中是一个比较常见的问题,这里提供一些实现交互的方法: 使用Control.Invoke方法 在C#中,使用Control.Invoke方法是实现窗体与子线程交互的方法之一。该方法可以跨线程调用控件。以下是使用Control.Invoke方法的示例代码: private void button1_Click(object sen…

    C# 2023年6月6日
    00
  • .net core 3.1在iis上发布的踩坑记录

    .NET Core 3.1在IIS上发布的踩坑记录 在将.NET Core 3.1应用程序部署到IIS上时,可能会遇到一些问题。在本攻略中,我们将介绍一些常见的问题和解决方法,并提供两个示例说明。 1. 安装.NET Core Hosting Bundle 在将.NET Core 3.1应用程序部署到IIS上之前,必须先安装.NET Core Hosting…

    C# 2023年5月16日
    00
  • C# 手写识别方案整理

    书写识别,网上的大佬们都有输出。 书写识别存在的2个问题: 直接拿官网的案例(将 Windows Ink 笔划识别为文本和形状 – Windows apps | Microsoft Learn),会发现输出准确度不高。 另外如果书写过快,词组识别也是个问题,毕竟无法准确分割字之间的笔迹。 我结合之前开发经验,整理下书写识别比较完善的方案。 单个字的识别方案:…

    C# 2023年4月28日
    00
  • c#异常处理示例分享

    接下来我将分享一下关于C#异常处理的示例,包括异常处理的基本概念、常见异常类型以及如何捕获、处理异常的方法。本文共包含以下内容: 前言 异常是指在程序执行过程中出现的错误或异常情况。C#中通过异常处理机制来处理这些异常情况。一旦程序运行出现异常,程序就会停止执行,并在控制台输出相应的错误信息。 异常处理的基本概念 在C#中,异常处理机制的核心就是try-ca…

    C# 2023年5月15日
    00
  • Unity3D实现虚拟按钮控制人物移动效果

    下面是“Unity3D实现虚拟按钮控制人物移动效果”的完整攻略: 需求分析 我们需要实现一个虚拟按钮,用于控制人物的移动效果,包括角色的左右移动和跳跃功能。 环境配置 首先需要创建一个Unity项目,并导入角色和场景资源。接着创建一个空的GameObject,命名为“UI”。在UI下创建一个Canvas,并调整Canvas的层级为第三层。 在Canvas下创…

    C# 2023年6月3日
    00
  • C#如何给word文档添加水印

    给word文档添加水印可以通过C#代码实现,具体步骤如下: 步骤一:引用Microsoft.Office.Interop.Word库 水印的添加需要使用到Word操作库,因此需要先引用Microsoft.Office.Interop.Word库。在Visual Studio中,可以在解决方案资源管理器中右击项目,选择“添加引用”,在COM中找到“Micros…

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