bai2

 avatar
unknown
c_cpp
2 years ago
9.8 kB
10
Indexable
using System;
using System.Xml;

class Program
{
    static void Main(string[] args)
{
    HoaDon hd = new HoaDon();
    int choice = 0;

    while (choice != 8)
    {
        Console.WriteLine("============== MENU ==============");
        Console.WriteLine("1. Tao hoa don moi");
        Console.WriteLine("2. Xem thong tin hoa don");
        Console.WriteLine("3. Them san pham");
        Console.WriteLine("4. Xoa san pham");
        Console.WriteLine("5. Tinh tong tien");
        Console.WriteLine("6. Xuat mat hang thanh tien lon nhat");
        Console.WriteLine("7. Sap xep chi tiet ban hang theo thu tu giam dan cua thanh tien");
        Console.WriteLine("8. Thoat");
        Console.Write("Nhap lua chon cua ban: ");
        choice = int.Parse(Console.ReadLine());

        switch (choice)
        {
            case 1:
                hd = TaoHoaDonMoi();
                break;
            case 2:
                hd.XemThongTinHoaDon();
                break;
            case 3:
                hd.ThemSanPham();
                break;
            case 4:
                hd.XoaSanPham();
                break;
            case 5:
                Console.WriteLine("Tong tien hoa don: {0}", hd.TinhTongTien());
                break;
            case 6:
                hd.XuatMatHangThanhTienLonNhat();
                break;
            case 7:
                hd.SapXepTheoThanhTienGiamDan();
                break;
            case 8:
                Console.WriteLine("Hen gap lai!");
                break;
            default:
                Console.WriteLine("Lua chon khong hop le!");
                break;
        }
        Console.WriteLine();
    }

    Console.ReadKey();
}

}
public class HoaDon
{
    public string MaHD { get; set; }
    public string TenKH { get; set; }
    public ChiTietBanHang[] DanhSachCTBH { get; set; }

    public HoaDon(string maHD, string tenKH, ChiTietBanHang[] dsCTBH)
    {
        MaHD = maHD;
        TenKH = tenKH;
        DanhSachCTBH = dsCTBH;
    }
}

public class ChiTietBanHang
{
    public string MaSP { get; set; }
    public string TenSP { get; set; }
    public int SoLuong { get; set; }
    public double GiaBan { get; set; }

    public ChiTietBanHang(string maSP, string tenSP, int soLuong, double giaBan)
    {
        MaSP = maSP;
        TenSP = tenSP;
        SoLuong = soLuong;
        GiaBan = giaBan;
    }
    public double Tongtien()
    {
        int tongTien = 0;
        foreach (var ctbh in DanhSachChiTietBanHang)
        {
            tongTien += ctbh.SoLuong * ctbh.GiaBan;
        }
        return tongTien;
    }
    public void XuatMatHangThanhTienLonNhat()
    {
        // Kiểm tra nếu danh sách chi tiết bán hàng rỗng, không có sản phẩm nào
        if (DanhSachChiTietBanHang.Count == 0)
        {
            Console.WriteLine("Không có sản phẩm nào trong hoá đơn.");
            return;
        }
    
        int maxTien = int.MinValue;
        ChiTietBanHang maxCTBH = null;
    
        // Duyệt qua từng chi tiết bán hàng của hoá đơn và tìm sản phẩm có tiền lớn nhất
        foreach (var ctbh in DanhSachChiTietBanHang)
        {
            int tien = ctbh.SoLuong * ctbh.GiaBan;
            if (tien > maxTien)
            {
                maxTien = tien;
                maxCTBH = ctbh;
            }
        }
    
        // Hiển thị thông tin sản phẩm có tiền lớn nhất
        Console.WriteLine("Sản phẩm có tiền lớn nhất:");
        Console.WriteLine("Mã sản phẩm: " + maxCTBH.MaSanPham);
        Console.WriteLine("Tên sản phẩm: " + maxCTBH.TenSanPham);
        Console.WriteLine("Số lượng: " + maxCTBH.SoLuong);
        Console.WriteLine("Giá bán: " + maxCTBH.GiaBan);
        Console.WriteLine("Thành tiền: " + maxTien);
    }
    public void XuatThongTin()
    {
        Console.WriteLine("Mã hoá đơn: " + MaHoaDon);
        Console.WriteLine("Tên khách hàng: " + TenKhachHang);
        Console.WriteLine("Danh sách chi tiết bán hàng:");
    
        // Sắp xếp danh sách chi tiết bán hàng theo thứ tự giảm dần của thành tiền
        var dsChiTietBanHang = DanhSachChiTietBanHang.OrderByDescending(ctbh => ctbh.ThanhTien);
    
        foreach (var ctbh in dsChiTietBanHang)
        {
            Console.WriteLine("\tMã sản phẩm: " + ctbh.MaSanPham);
            Console.WriteLine("\tTên sản phẩm: " + ctbh.TenSanPham);
            Console.WriteLine("\tSố lượng: " + ctbh.SoLuong);
            Console.WriteLine("\tGiá bán: " + ctbh.GiaBan);
            Console.WriteLine("\tThành tiền: " + ctbh.ThanhTien);
        }
    
        TinhTongTien();
        Console.WriteLine("Tổng tiền: " + TongTien);
    
        XuatMatHangThanhTienLonNhat();
    }
    public void TimSanPhamTheoMa(string maSanPham)
    {
        // Tìm kiếm sản phẩm trong danh sách chi tiết bán hàng của hoá đơn
        var sanPham = DanhSachChiTietBanHang.FirstOrDefault(ctbh => ctbh.MaSanPham == maSanPham);
    
        // Nếu sản phẩm tồn tại, xuất thông tin sản phẩm
        if (sanPham != null)
        {
            Console.WriteLine("Thông tin sản phẩm có mã '" + maSanPham + "':");
            Console.WriteLine("\tTên sản phẩm: " + sanPham.TenSanPham);
            Console.WriteLine("\tGiá bán: " + sanPham.GiaBan);
            Console.WriteLine("\tSố lượng: " + sanPham.SoLuong);
            Console.WriteLine("\tThành tiền: " + sanPham.ThanhTien);
        }
        else
        {
            Console.WriteLine("Không tìm thấy sản phẩm có mã '" + maSanPham + "'.");
        }
    }


}

public class HoaDonXMLReader
{
    public static HoaDon[] DocTuFile(string path)
    {
       
        var listHoaDon = new System.Collections.Generic.List<HoaDon>();
         using (XmlReader reader = XmlReader.Create(path))
        {
            
            while (reader.Read())
            {
                
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "HD")
                {
                    
                    string maHD = "";
                    string tenKH = "";
                    var listCTBH = new System.Collections.Generic.List<ChiTietBanHang>();

                   
                    while (reader.Read())
                    {
                        
                        if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "HD")
                        {
                            break;
                        }

                        
                        if (reader.NodeType == XmlNodeType.Element && reader.Name == "MaHD")
                        {
                            reader.Read();
                            maHD = reader.Value;
                        }

                        
                        if (reader.NodeType == XmlNodeType.Element && reader.Name == "TenKH")
                        {
                            reader.Read();
                            tenKH = reader.Value;
                        }

                        
                    if (reader.NodeType == XmlNodeType.Element && reader.Name == "CTBH")
                    {
                        
                        string maSP = "";
                        string tenSP = "";
                        int soLuong = 0;
                        double giaBan = 0;

                        
                        while (reader.Read())
                        {
                            
                            if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "CTBH")
                            {
                                break;
                            }

                           
                            if (reader.NodeType == XmlNodeType.Element && reader.Name == "Masp")
                            {
                                reader.Read();
                                maSP = reader.Value;
                            }

                            
                            if (reader.NodeType == XmlNodeType.Element && reader.Name == "tensp")
                            {
                                reader.Read();
                                tenSP = reader.Value;
                            }

                           
                            if (reader.NodeType == XmlNodeType.Element && reader.Name == "SL")
                            {
                                reader.Read();
                                soLuong = int.Parse(reader.Value);
                            }

                            
                            if (reader.NodeType == XmlNodeType.Element && reader.Name == "gia")
                            {
                                reader.Read();
                                giaBan = double.Parse(reader.Value);
                            }
                        }

                       
                        var ctbh = new ChiTietBanHang(maSP, tenSP, soLuong, giaBan);

                        
                        listCTBH.Add(ctbh);
                    }
                }

               
                var hoaDon = new HoaDon(maHD, tenKH, listCTBH.ToArray());

                
                listHoaDon.Add(hoaDon);
            }
        }
    }

    // Trả về danh sách hoá đơn đọc được từ file XML
    return listHoaDon.ToArray();
}