C#实现简单订单管理程序
作者:似锦一梦 发布时间:2023-04-08 08:26:34
标签:C#,订单
本文实例为大家分享了C#实现订单管理程序的具体代码,供大家参考,具体内容如下
订单管理的控制台程序,能够实现添加订单、删除订单、修改订单、查询订单、序列化与反序列化订单功能。
主要的类有Order(订单)、OrderItem(订单明细项),OrderService(订单服务),订单数据可以保存在OrderService中一个List中。在Program里面可以调用OrderService的方法完成各种订单操作。
要求:
(1)使用LINQ语言实现各种查询功能,查询结果按照订单总金额排序返回。
(2)在订单删除、修改失败时,能够产生异常并显示给客户错误信息。
(3)作业的订单和订单明细类需要重写Equals方法,确保添加的订单不重复,每个订单的订单明细不重 复。
(4)订单、订单明细、客户、货物等类添加ToString方法,用来显示订单信息。
(5)OrderService提供排序方法对保存的订单进行排序。默认按照订单号排序,也可以使用Lambda表达式进行自定义排序。
(6)在OrderService中添加一个Export方法,可以将所有的订单序列化为XML文件;添加一个Import方法可以从XML文件中载入订单。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;
namespace exercise20200320
{
class Program
{
static void Main(string[] args)
{
AllOrder a = new AllOrder();
bool judge_ = true;
while (judge_)
{
Console.WriteLine("输入1增加订单,输入2删除订单,输入3查询订单,输入4显示所有订单,输入5根据订单号为订单排序,输入6序列化订单,输入7反序列化订单,输入8退出");
string choose1 = Console.ReadLine();
switch (choose1)
{
case "1": a.addOrder(); break;
case "2": a.removeOrder(); break;
case "3": Console.WriteLine("输入1根据订单金额查询订单,输入2根据客户名查询订单"); int i = Convert.ToInt32(Console.ReadLine()); a.searchOrder(i); break;
case "4": a.ShowOrder(); break;
case "5": a.order.Sort(); break;
case "6": a.export(); break;
case "7": a.import(); break;
case "8":judge_ = false;break;
default: Console.WriteLine("输入错误"); break;
}
}
}
}
[Serializable]
public class AllOrder:IOrderService //所有订单
{
public List<Order> order = new List<Order>();
public AllOrder()
{
}
public void export()
{
XmlSerializer a = new XmlSerializer(typeof(List<Order>));
using (FileStream b = new FileStream("order.xml", FileMode.Create))
{
a.Serialize(b, this.order);
}
Console.WriteLine("序列化完成");
}
public void import()
{
try
{
XmlSerializer a = new XmlSerializer(typeof(List<Order>));
using (FileStream b = new FileStream("order.xml", FileMode.Open))
{
List<Order> c = (List<Order>)a.Deserialize(b);
Console.WriteLine("反序列化结果:");
foreach (Order d in c)
{
Console.WriteLine("订单号 客户 日期 总金额");
Console.WriteLine("----------------------------");
Console.WriteLine("{0} {1} {2} {3}", d.Id, d.Customer, d.Date, d.Money);
d.showOrderItem();
}
}
}
catch
{
Console.WriteLine("序列化系列操作错误");
}
}
public void ShowOrder()
{
foreach (Order a in this.order) {
Console.WriteLine("订单号 客户 日期 总金额");
Console.WriteLine("----------------------------");
Console.WriteLine("{0} {1} {2} {3}", a.Id,a.Customer,a.Date,a.Money);
a.showOrderItem();
}
}
public void addOrder() //增加订单
{
try
{
Console.WriteLine("请输入订单编号:");
int id = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入客户名称:");
string customer = Console.ReadLine();
Console.WriteLine("请输入时间:");
string date = Console.ReadLine();
Order a = new Order(id, customer, date);
Console.WriteLine("输入订单项:");
bool judge = true;
bool same = false;
foreach(Order m in this.order)
{
if (m.Equals(a)) same = true;
}
if (same) Console.WriteLine("订单号重复");
else
{
while (judge && !same)
{
Console.WriteLine("请输入物品名称:");
string name = Console.ReadLine();
Console.WriteLine("请输入购买数量:");
int number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入单价:");
double price = Convert.ToDouble(Console.ReadLine());
a.addOrderItem(name, number, price);
Console.WriteLine("是否继续添加订单项:");
string x = Console.ReadLine();
if (x == "否") judge = false;
else if(x=="是") continue;
else if(x!="否"&&x!="是"){
Exception e = new Exception();
throw e;
}
}
order.Add(a);
a.getAllPrice();
Console.WriteLine("建立成功");
Console.WriteLine("-------------------------");
}
}
catch
{
Console.WriteLine("输入错误");
}
}
public void removeOrder() //删除订单
{
try
{
Console.WriteLine("输入订单号删除订单或相应明细:");
int id = Convert.ToInt32(Console.ReadLine());
int index = 0;
foreach (Order a in this.order)
{
if (a.Id == id) index = this.order.IndexOf(a);
}
Console.WriteLine("输入1删除订单,输入2继续删除订单明细");
int choose = Convert.ToInt32(Console.ReadLine());
switch (choose)
{
case 1: this.order.RemoveAt(index); Console.WriteLine("删除成功"); Console.WriteLine("-----------------"); break;
case 2: this.order[index].showOrderItem(); this.order[index].RemoveOrderItem(); break;
default: Console.WriteLine("输入错误"); break;
}
}
catch
{
Console.WriteLine("输入错误");
}
}
public void searchOrder(int i) //查询订单
{
try
{
switch (i)
{
case 1:
int minNum, maxNum;
Console.WriteLine("输入要查询的最小金额:");
minNum = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("输入要查询的最大金额:");
maxNum = Convert.ToInt32(Console.ReadLine());
var query1 = from s1 in order
where maxNum > s1.Money
orderby s1.Money
select s1;
var query3 = from s3 in query1
where s3.Money > minNum
orderby s3.Money
select s3;
List<Order> a1 = query3.ToList();
foreach (Order b1 in a1)
{
Console.WriteLine("订单号 客户 日期 总金额");
Console.WriteLine("----------------------------");
Console.WriteLine("{0} {1} {2} {3}", b1.Id, b1.Customer, b1.Date, b1.Money);
b1.showOrderItem();
}
break;
case 2:
Console.WriteLine("输入客户名称:");
string name1 = Console.ReadLine();
var query2 = from s2 in order
where s2.Customer == name1
orderby s2.Money
select s2;
List<Order> a2 = query2.ToList();
foreach (Order b2 in a2)
{
Console.WriteLine("订单号 客户 日期 总金额");
Console.WriteLine("----------------------------");
Console.WriteLine("{0} {1} {2} {3}", b2.Id, b2.Customer, b2.Date, b2.Money);
b2.showOrderItem();
}
break;
default: Console.WriteLine("输入错误"); break;
}
}
catch
{
Console.WriteLine("输入错误");
}
}
}
[Serializable]
public class Order:IComparable //单个订单项
{
public int Id { get; set; }
public string Customer { get; set; }
public double Money { get; set; }
public string Date { get; set; }
public List<OrderItem> orderItem = new List<OrderItem>();
public Order()//无参构造函数
{
this.Id = 0;
this.Customer = string.Empty;
this.Money = 0;
this.Date = string.Empty;
}
public int CompareTo(object obj)
{
Order a = obj as Order;
return this.Id.CompareTo(a.Id);
}
public override bool Equals(object obj)
{
Order a = obj as Order;
return this.Id == a.Id;
}
public override int GetHashCode()
{
return Convert.ToInt32(Id);
}
public Order(int id,string customer,string date)
{
this.Id = id;
this.Customer = customer;
this.Date = date;
}
public void getAllPrice() //计算总价
{
double i=0;
foreach(OrderItem a in this.orderItem)
{
i = i + a.getPrice();
}
this.Money = i;
}
public void addOrderItem(string name,int number,double price) //添加订单项
{
OrderItem a = new OrderItem(name, number, price);
this.orderItem.Add(a);
}
public void RemoveOrderItem() //删除订单项
{
try
{
Console.WriteLine("请输入订单明细序号删除相应订单明细:");
int a = Convert.ToInt32(Console.ReadLine());
this.orderItem.RemoveAt(a);
Console.WriteLine("删除成功");
Console.WriteLine("-------------------------");
}
catch
{
Console.WriteLine("输入序号错误");
}
}
public void showOrderItem() //展示订单项
{
Console.WriteLine("序号 名称 数量 单价");
foreach (OrderItem a in this.orderItem)
{
Console.WriteLine("-----------------------");
Console.WriteLine("{0} {1} {2} {3}",this.orderItem.IndexOf(a),a.Name,a.Number,a.Price);
}
}
}
[Serializable]
public class OrderItem //订单明细项
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
private int number;
public int Number
{
get
{
return number;
}
set
{
if (value >= 0) number = value;
else Console.WriteLine("数量不应该小于0");
}
}
private double price;
public double Price
{
get
{
return price;
}
set
{
price = value;
}
}
public OrderItem()//无参构造函数
{
this.Name = string.Empty;
this.Number = 0;
this.Price = 0;
}
public OrderItem(string name, int number, double price)
{
this.name = name;
this.number = number;
this.price = price;
}
public double getPrice()
{
return this.number * this.price;
}
}
public interface IOrderService //包含所有订单功能的接口
{
void addOrder();
void removeOrder();
void searchOrder(int i);
void export();
void import();
}
}
来源:https://blog.csdn.net/weixin_45299287/article/details/107637967


猜你喜欢
- MediaQuery通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:
- 设置项这个版本已经取消了defalut settings指定成默认配置的选项,所以配置都是在settings中配置设置项设置统一UTF-8编
- 一、准备工作mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直
- 聚星C#数字信号处理工具包频谱分析JXI C# DSP Tools, Spectrum Analysis聚星针对C#平台开发了数字信号处理工
- Spring @Configuration 和 @Component 区别一句话概括就是 @Configuration 中所有带 @Bean
- 本文实例讲述了C#中list用法。分享给大家供大家参考,具体如下:protected void Page_Load(object sende
- 在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下ND
- 需求有时候我们想快速通过http访问本地的一些资源,但是安装一些web服务器又很费时和浪费资源,而且也不是长期使用的。这时候我们可以启动一个
- 前言 安卓系统中,Button是程序和用户进行交互的一个重要控件,今天我们就来简单的对Button进行学习,其中Bu
- 本文实现android系统照相机的调用来拍照项目的布局相当简单,只有一个Button:<RelativeLayout xmlns:an
- 前言之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取c
- RequestHeaders添加自定义参数在开发过程中有的时候,参数需要绑定到requestHeaders中,而并不是在body中进行传输。
- 问题描述在开发批量删除功能时,往往都是多条数据,所以前台需要传一个数组给后台,但是怎么在URL中绑定一个数组,同时在后台用@PathVari
- 在Java中进行日期处理大家一定都不陌生,我们经常会需要在代码中进行日期的转换、日期的格式化等操作。而一般我们进行日期格式化的时候都会使用S
- 1、用字符串分隔: using System.Text.RegularExpressions; string str="aaajs
- 本文实例讲述了Java实现爬取百度图片的方法。分享给大家供大家参考,具体如下:在以往用java来处理解析HTML文档或者片段时,我们通常会采
- 前言我通常是不太关心代码的具体实现的,因为我的开发语言很杂,倾向于一些最简单通用的方式去解决。今儿不小心在群里看到一位朋友发了下面的java
- 最近 Google 已经发布 Android 新版本 7.0 Nougat (牛轧糖) ,相信Android手机用户在未来的几个月内会收到第
- 问题描述在使用poi-tl word模版工具时,发现生成的文档中,图片格式为嵌入型,有的图片甚至被表格遮挡一半。而自己想要的图片格式为上下型
- 对openfeign不清楚的同学可以参考下我的这篇文章:springboot~openfeign从此和httpClient说再见对于open