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