From 720bb2957fc49b5b9997bb66cf76aafe269ef9a3 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Mon, 21 Mar 2022 14:46:29 +0200 Subject: [PATCH] feat: copy over `L2.LD_24` to `L3.LD_24` --- L3/L3.sln | 25 +++ L3/LD_24/App_Data/Rezultatai.txt | 55 ++++++ L3/LD_24/App_Data/U24a.txt | 4 + L3/LD_24/App_Data/U24b.txt | 12 ++ L3/LD_24/Code/InOutUtils.cs | 244 ++++++++++++++++++++++++ L3/LD_24/Code/Order.cs | 77 ++++++++ L3/LD_24/Code/OrderList.cs | 125 ++++++++++++ L3/LD_24/Code/Product.cs | 38 ++++ L3/LD_24/Code/ProductList.cs | 103 ++++++++++ L3/LD_24/Code/TaskUtils.cs | 187 ++++++++++++++++++ L3/LD_24/Forma1.aspx | 47 +++++ L3/LD_24/Forma1.aspx.cs | 58 ++++++ L3/LD_24/Forma1.aspx.designer.cs | 195 +++++++++++++++++++ L3/LD_24/Forma1Utils.aspx.cs | 123 ++++++++++++ L3/LD_24/LD_24.csproj | 179 +++++++++++++++++ L3/LD_24/Properties/AssemblyInfo.cs | 35 ++++ L3/LD_24/Styles/main.css | 10 + L3/LD_24/Web.Debug.config | 30 +++ L3/LD_24/Web.Release.config | 31 +++ L3/LD_24/Web.config | 27 +++ L3/LD_24/interface-scheme.png | Bin 0 -> 40391 bytes L3/LD_24/packages.config | 14 ++ L3/LD_24/tests/1/inputs/U24a.txt | 4 + L3/LD_24/tests/1/inputs/U24b.txt | 12 ++ L3/LD_24/tests/1/outputs/Rezultatai.txt | 55 ++++++ L3/LD_24/tests/1/outputs/web.png | Bin 0 -> 17644 bytes L3/LD_24/tests/2/inputs/U24a.txt | 4 + L3/LD_24/tests/2/inputs/U24b.txt | 9 + L3/LD_24/tests/2/outputs/Rezultatai.txt | 54 ++++++ L3/LD_24/tests/2/outputs/web.png | Bin 0 -> 17856 bytes 30 files changed, 1757 insertions(+) create mode 100644 L3/L3.sln create mode 100644 L3/LD_24/App_Data/Rezultatai.txt create mode 100644 L3/LD_24/App_Data/U24a.txt create mode 100644 L3/LD_24/App_Data/U24b.txt create mode 100644 L3/LD_24/Code/InOutUtils.cs create mode 100644 L3/LD_24/Code/Order.cs create mode 100644 L3/LD_24/Code/OrderList.cs create mode 100644 L3/LD_24/Code/Product.cs create mode 100644 L3/LD_24/Code/ProductList.cs create mode 100644 L3/LD_24/Code/TaskUtils.cs create mode 100644 L3/LD_24/Forma1.aspx create mode 100644 L3/LD_24/Forma1.aspx.cs create mode 100644 L3/LD_24/Forma1.aspx.designer.cs create mode 100644 L3/LD_24/Forma1Utils.aspx.cs create mode 100644 L3/LD_24/LD_24.csproj create mode 100644 L3/LD_24/Properties/AssemblyInfo.cs create mode 100644 L3/LD_24/Styles/main.css create mode 100644 L3/LD_24/Web.Debug.config create mode 100644 L3/LD_24/Web.Release.config create mode 100644 L3/LD_24/Web.config create mode 100644 L3/LD_24/interface-scheme.png create mode 100644 L3/LD_24/packages.config create mode 100644 L3/LD_24/tests/1/inputs/U24a.txt create mode 100644 L3/LD_24/tests/1/inputs/U24b.txt create mode 100644 L3/LD_24/tests/1/outputs/Rezultatai.txt create mode 100644 L3/LD_24/tests/1/outputs/web.png create mode 100644 L3/LD_24/tests/2/inputs/U24a.txt create mode 100644 L3/LD_24/tests/2/inputs/U24b.txt create mode 100644 L3/LD_24/tests/2/outputs/Rezultatai.txt create mode 100644 L3/LD_24/tests/2/outputs/web.png diff --git a/L3/L3.sln b/L3/L3.sln new file mode 100644 index 0000000..f0142e3 --- /dev/null +++ b/L3/L3.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1525 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LD_24", "LD_24\LD_24.csproj", "{AE159626-A105-440C-B997-F377C5F8F280}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AE159626-A105-440C-B997-F377C5F8F280}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE159626-A105-440C-B997-F377C5F8F280}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE159626-A105-440C-B997-F377C5F8F280}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE159626-A105-440C-B997-F377C5F8F280}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7FD3C4E6-8783-4879-9224-302DA8542DAF} + EndGlobalSection +EndGlobal diff --git a/L3/LD_24/App_Data/Rezultatai.txt b/L3/LD_24/App_Data/Rezultatai.txt new file mode 100644 index 0000000..8b0f319 --- /dev/null +++ b/L3/LD_24/App_Data/Rezultatai.txt @@ -0,0 +1,55 @@ +---------------------------- +| Įtaisai | +---------------------------- +| ID | Vardas | Kaina | +---------------------------- +| 0 | Atsuktuvas | 0,99 | +| 1 | Varztas | 0,05 | +| 2 | Laidas | 2,00 | +| 3 | Plaktukas | 2,99 | +---------------------------- + +-------------------------------------------------- +| Pirkėjai | +-------------------------------------------------- +| Pavardė | Vardas | Įtaisas | Įtaiso kiekis | +-------------------------------------------------- +| Petraitis | Petras | 0 | 10 | +| Petraitis | Petras | 1 | 10 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 1 | 20 | +| Onaite | Ona | 2 | 200 | +| Jonaitis | Brolis | 1 | 100 | +| Jonaitis | Brolis | 0 | 100 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 2 | 20 | +| Onaite | Ona | 0 | 20 | +-------------------------------------------------- + +------------------------------------------------------------ +| Populiariausi įtaisai | +------------------------------------------------------------ +| ID | Vardas | Įtaisų kiekis, vnt. | Įtaisų kaina, eur. | +------------------------------------------------------------ +| 2 | Laidas | 220 | 440,00 | +------------------------------------------------------------ + +---------------------------------------------------------- +| Vienos rūšies pirkėjai | +---------------------------------------------------------- +| Pavardė | Vardas | Įtaiso kiekis, vnt. | Kaina, eur. | +---------------------------------------------------------- +| Nėra | +---------------------------------------------------------- + +---------------------------------- +| Atrinkti įtaisai (n=1, k=1,00) | +---------------------------------- +| ID | Vardas | Kaina | +---------------------------------- +| 0 | Atsuktuvas | 0,99 | +| 1 | Varztas | 0,05 | +---------------------------------- + diff --git a/L3/LD_24/App_Data/U24a.txt b/L3/LD_24/App_Data/U24a.txt new file mode 100644 index 0000000..084097c --- /dev/null +++ b/L3/LD_24/App_Data/U24a.txt @@ -0,0 +1,4 @@ +0, Atsuktuvas, 0.99 +1, Varztas, 0.05 +2, Laidas, 2.00 +3, Plaktukas, 2.99 \ No newline at end of file diff --git a/L3/LD_24/App_Data/U24b.txt b/L3/LD_24/App_Data/U24b.txt new file mode 100644 index 0000000..22a3639 --- /dev/null +++ b/L3/LD_24/App_Data/U24b.txt @@ -0,0 +1,12 @@ +Petraitis, Petras, 0, 10 +Petraitis, Petras, 1, 10 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 1, 20 +Onaite, Ona, 2, 200 +Jonaitis, Brolis, 1, 100 +Jonaitis, Brolis, 0, 100 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 2, 20 +Onaite, Ona, 0, 20 \ No newline at end of file diff --git a/L3/LD_24/Code/InOutUtils.cs b/L3/LD_24/Code/InOutUtils.cs new file mode 100644 index 0000000..adab74b --- /dev/null +++ b/L3/LD_24/Code/InOutUtils.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Web; + +namespace LD_24.Code +{ + /// + /// Class used for reading and writing to files + /// + public static class InOutUtils + { + /// + /// Read lines from a file + /// + /// Target filename + /// IEnumerable of all the lines + private static IEnumerable ReadLines(string filename) + { + using (StreamReader reader = File.OpenText(filename)) + { + string line; + while ((line = reader.ReadLine()) != null) + { + yield return line; + } + } + } + + /// + /// Read products from a file + /// + /// Target file + /// A list of products + public static ProductList ReadProducts(string filename) + { + ProductList products = new ProductList(); + foreach (string line in ReadLines(filename)) + { + string[] parts = line.Split(','); + string id = parts[0].Trim(); + string name = parts[1].Trim(); + decimal price = decimal.Parse(parts[2].Trim(), CultureInfo.InvariantCulture); + products.AddToEnd(new Product(id, name, price)); + } + return products; + } + + /// + /// Read orders from a file + /// + /// Target file + /// A list of orders + public static OrderList ReadOrders(string filename) + { + OrderList orders = new OrderList(); + foreach (string line in ReadLines(filename)) + { + string[] parts = line.Split(','); + string customerSurname = parts[0].Trim(); + string customerName = parts[1].Trim(); + string productID = parts[2].Trim(); + int productAmount = int.Parse(parts[3].Trim()); + orders.AddToEnd(new Order(customerSurname, customerName, productID, productAmount)); + } + return orders; + } + + /// + /// Print a single table row to file + /// + /// Target file + /// Cell data + /// Cell widths + private static void PrintTableRow(StreamWriter writer, List cells, List widths) + { + for (int i = 0; i < widths.Count; i++) + { + if (widths[i] < 0) + writer.Write("| {0} ", cells[i].PadRight(-widths[i])); + else + writer.Write("| {0} ", cells[i].PadLeft(widths[i])); + } + writer.WriteLine("|"); + } + + /// + /// Print a table to a file + /// + /// Target file + /// Header above table + /// Target list + /// Column names + /// A IEnumerable for inserting values for each row + private static IEnumerable>> PrintTable(StreamWriter writer, string header, IEnumerable list, params string[] columns) + { + // 0. Collect all the rows + List> rows = new List>(); + foreach (object item in list) + { + List row = new List(); + yield return Tuple.Create(item, row); + rows.Add(row); + } + + // 1. Determine the width of each column + List widths = new List(); + int totalWidth = 3*(columns.Length - 1); + for (int i = 0; i < columns.Length; i++) + { + int width = columns[i].Length; + foreach (var row in rows) + { + width = Math.Max(row[i].Length, width); + } + widths.Add(width); + totalWidth += width; + } + + // If the header is longer than the body, make the last column wider. + // So the table is a nice rectangle when output to the file + if (header.Length > totalWidth) + { + widths[widths.Count - 1] += (header.Length - totalWidth); + totalWidth = header.Length; + } + + totalWidth += 2 * 2; + + // 2. Adjust widths to account for aligning + for (int i = 0; i < columns.Length; i++) + { + if (columns[i][0] == '-') + { + widths[i] = -widths[i]; + columns[i] = columns[i].Substring(1); + } + } + + // 3. Display the table + writer.WriteLine(new string('-', totalWidth)); + writer.WriteLine("| {0} |", header.PadRight(totalWidth - 4)); + writer.WriteLine(new string('-', totalWidth)); + PrintTableRow(writer, new List(columns), widths); + writer.WriteLine(new string('-', totalWidth)); + if (rows.Count > 0) + { + foreach (var row in rows) + { + PrintTableRow(writer, row, widths); + } + } else + { + writer.WriteLine("| {0} |", "Nėra".PadRight(totalWidth - 4)); + } + writer.WriteLine(new string('-', totalWidth)); + + writer.WriteLine(); + } + + /// + /// Print orders table to file + /// + /// Target file + /// List of orders + /// Header above table + public static void PrintOrders(StreamWriter writer, OrderList orders, string header) + { + foreach (var tuple in PrintTable(writer, header, orders, "Pavardė", "Vardas", "-Įtaisas", "-Įtaiso kiekis")) + { + Order order = (Order)tuple.Item1; + List row = tuple.Item2; + row.Add(order.CustomerSurname); + row.Add(order.CustomerName); + row.Add(order.ProductID); + row.Add(order.ProductAmount.ToString()); + } + } + + /// + /// Print orders with prices table to file + /// + /// Target file + /// List of orders + /// List of products + /// Header above table + public static void PrintOrdersWithPrices(StreamWriter writer, OrderList orders, ProductList products, string header) + { + foreach (var tuple in PrintTable(writer, header, orders, "Pavardė", "Vardas", "-Įtaiso kiekis, vnt.", "-Kaina, eur.")) + { + Order order = (Order)tuple.Item1; + List row = tuple.Item2; + Product product = TaskUtils.FindByID(products, order.ProductID); + + row.Add(order.CustomerSurname); + row.Add(order.CustomerName); + row.Add(order.ProductAmount.ToString()); + row.Add(String.Format("{0:f2}", order.ProductAmount * product.Price)); + } + } + + /// + /// Print a products table to file + /// + /// Target file + /// List of products + /// Header above table + public static void PrintProducts(StreamWriter writer, ProductList products, string header) + { + foreach (var tuple in PrintTable(writer, header, products, "ID", "Vardas", "-Kaina")) + { + Product product = (Product)tuple.Item1; + List row = tuple.Item2; + row.Add(product.ID); + row.Add(product.Name); + row.Add(String.Format("{0:f2}", product.Price)); + } + } + + /// + /// Print a table of most popular products to file + /// + /// Target file + /// List of orders + /// List of most popular products + /// Header above table + public static void PrintMostPopularProducts(StreamWriter writer, OrderList orders, ProductList popularProducts, string header) + { + foreach (var tuple in PrintTable(writer, header, popularProducts, "ID", "Vardas", "-Įtaisų kiekis, vnt.", "-Įtaisų kaina, eur.")) + { + Product product = (Product)tuple.Item1; + List row = tuple.Item2; + int sales = TaskUtils.CountProductSales(orders, product.ID); + row.Add(product.ID); + row.Add(product.Name); + row.Add(sales.ToString()); + row.Add(String.Format("{0:f2}", sales * product.Price)); + } + } + } +} \ No newline at end of file diff --git a/L3/LD_24/Code/Order.cs b/L3/LD_24/Code/Order.cs new file mode 100644 index 0000000..1931ccd --- /dev/null +++ b/L3/LD_24/Code/Order.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace LD_24.Code +{ + /// + /// Class used for storing a single order + /// + public class Order + { + /// + /// Surname of customer who ordered + /// + public string CustomerSurname { get; set; } + /// + /// Name of customer who ordered + /// + public string CustomerName { get; set; } + /// + /// ID of ordered product + /// + public string ProductID { get; set; } + /// + /// Amount of ordered products + /// + public int ProductAmount { get; set; } + + public Order(string customerSurname, string customerName, string productID, int productAmount) + { + CustomerSurname = customerSurname; + CustomerName = customerName; + ProductID = productID; + ProductAmount = productAmount; + } + + public override string ToString() + { + return String.Format("Order{Name = '{0}'}", CustomerName); + } + + public static bool operator <(Order a, Order b) + { + if (a.ProductAmount > b.ProductAmount) + { + return true; + } + else if (a.ProductAmount == b.ProductAmount) + { + int surnameCompare = a.CustomerSurname.CompareTo(b.CustomerSurname); + if (surnameCompare < 0) + { + return true; + } + else if (surnameCompare == 0) + { + return a.CustomerName.CompareTo(b.CustomerName) < 0; + } + } + + return false; + } + public static bool operator >(Order a, Order b) + { + return !(a < b && a == b); + } + public static bool operator ==(Order a, Order b) + { + return a.ProductAmount == b.ProductAmount && a.CustomerName == b.CustomerName && a.CustomerSurname == b.CustomerSurname; + } + public static bool operator !=(Order a, Order b) + { + return !(a == b); + } + } +} \ No newline at end of file diff --git a/L3/LD_24/Code/OrderList.cs b/L3/LD_24/Code/OrderList.cs new file mode 100644 index 0000000..9e04ab2 --- /dev/null +++ b/L3/LD_24/Code/OrderList.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace LD_24.Code +{ + /// + /// Stores a orders in a linked list + /// + public class OrderList : IEnumerable + { + class OrderNode + { + public Order Data { get; set; } + public OrderNode Next { get; set; } + + public OrderNode(Order data = null, OrderNode next = null) + { + Data = data; + Next = next; + } + } + + private OrderNode head; + private OrderNode tail; + + /// + /// Append a value to the end of the linked list + /// + /// + public void AddToEnd(Order customer) + { + OrderNode node = new OrderNode(customer); + if (tail != null && head != null) + { + tail.Next = node; + tail = node; + } + else + { + tail = node; + head = node; + } + } + + /// + /// Insert a value to the start of the linked list + /// + /// + public void AddToStart(Order customer) + { + OrderNode node = new OrderNode(customer); + if (tail != null && head != null) + { + node.Next = head; + head = node; + } + else + { + tail = node; + head = node; + } + } + + /// + /// Get the number of values stored in linked list + /// + /// A count + public int Count() + { + int count = 0; + OrderNode current = head; + while (current != null) + { + current = current.Next; + count++; + } + return count; + } + + /// + /// Sorts the linked list + /// + public void Sort() + { + for (OrderNode nodeA = head; nodeA != null; nodeA = nodeA.Next) + { + OrderNode min = nodeA; + for (OrderNode nodeB = nodeA.Next; nodeB != null; nodeB = nodeB.Next) + { + if (nodeB.Data < min.Data) + { + min = nodeB; + } + } + + Order tmp = nodeA.Data; + nodeA.Data = min.Data; + min.Data = tmp; + } + } + + public override string ToString() + { + return String.Format("OrderList{ Count = '{0}' }", Count()); + } + + public IEnumerator GetEnumerator() + { + OrderNode current = head; + while (current != null) + { + yield return current.Data; + current = current.Next; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/L3/LD_24/Code/Product.cs b/L3/LD_24/Code/Product.cs new file mode 100644 index 0000000..d2ad1bc --- /dev/null +++ b/L3/LD_24/Code/Product.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace LD_24.Code +{ + /// + /// Holds informations about a single product + /// + public class Product + { + /// + /// Identification number of product + /// + public string ID { get; set; } + /// + /// Name of product + /// + public string Name { get; set; } + /// + /// Price of product + /// + public decimal Price { get; set; } + + public Product(string iD, string name, decimal price) + { + ID = iD; + Name = name; + Price = price; + } + + public override string ToString() + { + return String.Format("Product{ID = '{0}'}", ID); + } + } +} diff --git a/L3/LD_24/Code/ProductList.cs b/L3/LD_24/Code/ProductList.cs new file mode 100644 index 0000000..db56384 --- /dev/null +++ b/L3/LD_24/Code/ProductList.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace LD_24.Code +{ + /// + /// Stores multiple products in a linked list + /// + public class ProductList : IEnumerable + { + class ProductNode + { + public Product Data { get; set; } + public ProductNode Next { get; set; } + + public ProductNode(Product data = null, ProductNode next = null) + { + Data = data; + Next = next; + } + } + + private ProductNode head; + private ProductNode tail; + + /// + /// Append a value to the end of the linked list + /// + /// + public void AddToEnd(Product product) + { + ProductNode node = new ProductNode(product); + if (tail != null && head != null) + { + tail.Next = node; + tail = node; + } + else + { + tail = node; + head = node; + } + } + + /// + /// Inserts a value to the start of the linked list + /// + /// + public void AddToStart(Product product) + { + ProductNode node = new ProductNode(product); + if (tail != null && head != null) + { + node.Next = head; + head = node; + } + else + { + tail = node; + head = node; + } + } + + /// + /// Get the number of values stored in the linked list + /// + /// A count + public int Count() + { + int count = 0; + ProductNode current = head; + while (current != null) + { + current = current.Next; + count++; + } + return count; + } + + public override string ToString() + { + return String.Format("ProductList{ Count = '{0}' }", Count()); + } + + public IEnumerator GetEnumerator() + { + ProductNode current = head; + while (current != null) + { + yield return current.Data; + current = current.Next; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/L3/LD_24/Code/TaskUtils.cs b/L3/LD_24/Code/TaskUtils.cs new file mode 100644 index 0000000..41262fe --- /dev/null +++ b/L3/LD_24/Code/TaskUtils.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace LD_24.Code +{ + /// + /// Various functions for operations on data + /// + public static class TaskUtils + { + /// + /// Finds the most popular products by the number of sales + /// + /// List of orders + /// List of products ids + public static List FindMostPopularProducts(OrderList orders) + { + Dictionary productSales = new Dictionary(); + foreach (Order order in orders) + { + if (!productSales.ContainsKey(order.ProductID)) + { + productSales.Add(order.ProductID, order.ProductAmount); + } + else + { + productSales[order.ProductID] += order.ProductAmount; + } + } + + List mostPopularProducts = new List(); + int mostPopularCount = 0; + foreach (string product in productSales.Keys) + { + int count = productSales[product]; + if (count > mostPopularCount) + { + mostPopularCount = count; + mostPopularProducts = new List { product }; + } else if (count == mostPopularCount) + { + mostPopularProducts.Add(product); + } + } + + return mostPopularProducts; + } + + /// + /// Counts the number of sales of a certain product + /// + /// List of products + /// Target product id + /// Sales + public static int CountProductSales(OrderList orders, string product) + { + int sales = 0; + foreach (Order order in orders) + { + if (order.ProductID == product) + { + sales += order.ProductAmount; + } + } + return sales; + } + + /// + /// Merge orders which have the same customer name, surname and product id into a single order. + /// + /// A list of orders + /// A list of orders where same orders have been merged + public static OrderList MergeOrders(OrderList orders) + { + Dictionary, Order> ordersByName = new Dictionary, Order>(); + foreach (var order in orders) + { + var key = Tuple.Create(order.CustomerSurname, order.CustomerName, order.ProductID); + if (ordersByName.ContainsKey(key)) + { + ordersByName[key].ProductAmount += order.ProductAmount; + } else + { + ordersByName.Add(key, new Order(order.CustomerSurname, order.CustomerName, order.ProductID, order.ProductAmount)); + } + } + + OrderList mergedOrders = new OrderList(); + foreach (var order in ordersByName.Values) + { + mergedOrders.AddToEnd(order); + } + return mergedOrders; + } + + /// + /// Finds a product by it's id + /// + /// List of products + /// Target product id + /// The product + public static Product FindByID(ProductList products, string id) + { + foreach (Product product in products) + { + if (product.ID == id) + { + return product; + } + } + return null; + } + + /// + /// Find all products by their ids + /// + /// List of products + /// List of product ids + /// List of products + public static ProductList FindByID(ProductList products, List ids) + { + ProductList foundProducts = new ProductList(); + foreach (string id in ids) + { + foundProducts.AddToEnd(FindByID(products, id)); + } + return foundProducts; + } + + /// + /// Filter a list of products by sales and price. + /// + /// List of products + /// List of orders + /// Minimmum sales amount + /// Max product price + /// A list of filtered products + public static ProductList FilterByQuantitySoldAndPrice(ProductList products, OrderList orders, int minSold, decimal maxPrice) + { + ProductList filtered = new ProductList(); + foreach (Product product in products) + { + if (product.Price < maxPrice) + { + int sold = CountProductSales(orders, product.ID); + if (sold >= minSold) + { + filtered.AddToEnd(product); + } + } + } + return filtered; + } + + /// + /// Find all customer which bought only 1 type of product + /// + /// List of orders + /// A list of filtered orders + public static OrderList FindCustomerWithSingleProduct(OrderList orders) + { + Dictionary, OrderList> ordersByCusomer = new Dictionary, OrderList>(); + foreach (var order in TaskUtils.MergeOrders(orders)) + { + var key = Tuple.Create(order.CustomerName, order.CustomerSurname); + if (!ordersByCusomer.ContainsKey(key)) + { + ordersByCusomer.Add(key, new OrderList()); + } + ordersByCusomer[key].AddToEnd(order); + } + + OrderList finalList = new OrderList(); + foreach (var customerOrders in ordersByCusomer.Values) + { + if (customerOrders.Count() == 1) + { + finalList.AddToEnd(customerOrders.First()); + } + } + return finalList; + } + } +} diff --git a/L3/LD_24/Forma1.aspx b/L3/LD_24/Forma1.aspx new file mode 100644 index 0000000..6aefcdf --- /dev/null +++ b/L3/LD_24/Forma1.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Forma1.aspx.cs" Inherits="LD_24.Forma1" %> + + + + + + + + +
+ + + +
+ + +
+ +
+ + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + +
+ + + diff --git a/L3/LD_24/Forma1.aspx.cs b/L3/LD_24/Forma1.aspx.cs new file mode 100644 index 0000000..f9ee37a --- /dev/null +++ b/L3/LD_24/Forma1.aspx.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using LD_24.Code; + +namespace LD_24 +{ + /// + /// Main form + /// + public partial class Forma1 : System.Web.UI.Page + { + private const string inputFileA = "App_Data/U24a.txt"; + private const string inputFileB = "App_Data/U24b.txt"; + private const string outputFilename = "App_Data/Rezultatai.txt"; + + protected void Page_Load(object sender, EventArgs e) + { + FindControl("ResultsDiv").Visible = false; + } + + protected void Button1_Click(object sender, EventArgs e) + { + int n = int.Parse(TextBox1.Text); + decimal k = decimal.Parse(TextBox2.Text); + + FindControl("ResultsDiv").Visible = true; + + ProductList products = InOutUtils.ReadProducts(Server.MapPath(inputFileA)); + OrderList orders = InOutUtils.ReadOrders(Server.MapPath(inputFileB)); + + List mostPopularProductIds = TaskUtils.FindMostPopularProducts(orders); + ProductList mostPopularProducts = TaskUtils.FindByID(products, mostPopularProductIds); + ProductList filteredProducts = TaskUtils.FilterByQuantitySoldAndPrice(products, orders, n, k); + OrderList customersWithSingleProduct = TaskUtils.FindCustomerWithSingleProduct(orders); + customersWithSingleProduct.Sort(); + + ShowProducts(Table1, products); + ShowOrders(Table2, orders); + ShowMostPopularProducts(Table5, orders, mostPopularProducts); + ShowOrdersWithPrices(Table3, customersWithSingleProduct, products); + ShowProducts(Table4, filteredProducts); + + using (StreamWriter writer = new StreamWriter(Server.MapPath(outputFilename))) + { + InOutUtils.PrintProducts(writer, products, "Įtaisai"); + InOutUtils.PrintOrders(writer, orders, "Pirkėjai"); + InOutUtils.PrintMostPopularProducts(writer, orders, mostPopularProducts, "Populiariausi įtaisai"); + InOutUtils.PrintOrdersWithPrices(writer, customersWithSingleProduct, products, "Vienos rūšies pirkėjai"); + InOutUtils.PrintProducts(writer, filteredProducts, $"Atrinkti įtaisai (n={n}, k={k:f2})"); + } + } + } +} \ No newline at end of file diff --git a/L3/LD_24/Forma1.aspx.designer.cs b/L3/LD_24/Forma1.aspx.designer.cs new file mode 100644 index 0000000..691f56f --- /dev/null +++ b/L3/LD_24/Forma1.aspx.designer.cs @@ -0,0 +1,195 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace LD_24 { + + + public partial class Forma1 { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// ValidationSummary1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1; + + /// + /// Label5 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label5; + + /// + /// TextBox1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox TextBox1; + + /// + /// RegularExpressionValidator1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1; + + /// + /// Label6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label6; + + /// + /// TextBox2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox TextBox2; + + /// + /// RegularExpressionValidator2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator2; + + /// + /// Button1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button Button1; + + /// + /// ResultsDiv control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl ResultsDiv; + + /// + /// Label1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label1; + + /// + /// Table1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Table Table1; + + /// + /// Label2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label2; + + /// + /// Table2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Table Table2; + + /// + /// Label8 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label8; + + /// + /// Table5 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Table Table5; + + /// + /// Label4 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label4; + + /// + /// Table3 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Table Table3; + + /// + /// Label7 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label Label7; + + /// + /// Table4 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Table Table4; + } +} diff --git a/L3/LD_24/Forma1Utils.aspx.cs b/L3/LD_24/Forma1Utils.aspx.cs new file mode 100644 index 0000000..f36f09e --- /dev/null +++ b/L3/LD_24/Forma1Utils.aspx.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using LD_24.Code; + +namespace LD_24 +{ + public partial class Forma1 : System.Web.UI.Page + { + /// + /// Show a list in a table + /// + /// Target table + /// Target list + /// Columns names + /// + private IEnumerable> ShowTable(Table table, IEnumerable list, params string[] columns) + { + TableRow header = new TableRow(); + foreach (string column in columns) + { + header.Cells.Add(new TableCell { Text = column }); + } + table.Rows.Add(header); + + int n = 0; + foreach (object item in list) + { + TableRow row = new TableRow(); + yield return Tuple.Create(item, row); + table.Rows.Add(row); + n++; + } + + if (n == 0) + { + TableRow row = new TableRow(); + row.Cells.Add(new TableCell { Text = "Nėra", ColumnSpan = columns.Length }); + table.Rows.Add(row); + } + } + + /// + /// Show a list of products in a table + /// + /// Target table + /// Target products + public void ShowProducts(Table table, ProductList products) + { + foreach (var tuple in ShowTable(table, products, "ID", "Vardas", "Kaina, eur.")) + { + Product product = (Product)tuple.Item1; + TableRow row = tuple.Item2; + row.Cells.Add(new TableCell { Text = product.ID }); + row.Cells.Add(new TableCell { Text = product.Name }); + row.Cells.Add(new TableCell { Text = product.Price.ToString() }); + } + } + + /// + /// Show a list of orders in a table + /// + /// Target table + /// Target orders + public void ShowOrders(Table table, OrderList orders) + { + foreach (var tuple in ShowTable(table, orders, "Pavardė", "Vardas", "Įtaisas", "Įtaisų kiekis, vnt.")) + { + Order order = (Order)tuple.Item1; + TableRow row = tuple.Item2; + row.Cells.Add(new TableCell { Text = order.CustomerSurname }); + row.Cells.Add(new TableCell { Text = order.CustomerName }); + row.Cells.Add(new TableCell { Text = order.ProductID.ToString() }); + row.Cells.Add(new TableCell { Text = order.ProductAmount.ToString() }); + } + } + + /// + /// Show the most popular products in a table + /// + /// Target table + /// Target orders + /// List of most popular products + public void ShowMostPopularProducts(Table table, OrderList orders, ProductList popularProducts) + { + foreach (var tuple in ShowTable(table, popularProducts, "ID", "Vardas", "Įtaisų kiekis, vnt.", "Įtaisų kaina, eur.")) + { + Product product = (Product)tuple.Item1; + TableRow row = tuple.Item2; + int sales = TaskUtils.CountProductSales(orders, product.ID); + row.Cells.Add(new TableCell { Text = product.ID }); + row.Cells.Add(new TableCell { Text = product.Name }); + row.Cells.Add(new TableCell { Text = sales.ToString() }); + row.Cells.Add(new TableCell { Text = String.Format("{0:f2}", sales * product.Price) }); + } + } + + /// + /// Show a list of orders with their prices in a table + /// + /// Target table + /// Target orders + /// List of products + public void ShowOrdersWithPrices(Table table, OrderList orders, ProductList products) + { + foreach (var tuple in ShowTable(table, orders, "Pavardė", "Vardas", "Įtaisų kiekis, vnt.", "Sumokėta, eur.")) + { + Order order = (Order)tuple.Item1; + TableRow row = tuple.Item2; + Product product = TaskUtils.FindByID(products, order.ProductID); + + row.Cells.Add(new TableCell { Text = order.CustomerSurname }); + row.Cells.Add(new TableCell { Text = order.CustomerName }); + row.Cells.Add(new TableCell { Text = order.ProductAmount.ToString() }); + row.Cells.Add(new TableCell { Text = String.Format("{0:f2}", order.ProductAmount * product.Price, 2) }); + } + } + } +} \ No newline at end of file diff --git a/L3/LD_24/LD_24.csproj b/L3/LD_24/LD_24.csproj new file mode 100644 index 0000000..60273d9 --- /dev/null +++ b/L3/LD_24/LD_24.csproj @@ -0,0 +1,179 @@ + + + + + + Debug + AnyCPU + + + 2.0 + {AE159626-A105-440C-B997-F377C5F8F280} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + LD_24 + LD_24 + v4.6.1 + true + + + + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + true + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + ..\packages\FluentAssertions.6.5.1\lib\netstandard2.0\FluentAssertions.dll + + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.0\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + + + + + + + + + ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll + + + ..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll + + + ..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll + + + ..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll + + + + + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + Forma1.aspx + ASPXCodeBehind + + + Forma1.aspx + + + ASPXCodeBehind + + + + + + + Web.config + + + Web.config + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 50592 + / + http://localhost:50592/ + False + False + + + False + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + \ No newline at end of file diff --git a/L3/LD_24/Properties/AssemblyInfo.cs b/L3/LD_24/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bd45cfd --- /dev/null +++ b/L3/LD_24/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("LD_24")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("LD_24")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ae159626-a105-440c-b997-f377c5f8f280")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/L3/LD_24/Styles/main.css b/L3/LD_24/Styles/main.css new file mode 100644 index 0000000..d479be0 --- /dev/null +++ b/L3/LD_24/Styles/main.css @@ -0,0 +1,10 @@ +table, th, td { + border: 1px solid black; + border-collapse: collapse; +} + +table { + margin-bottom: 1em; + background-color: #FFFFCC; +} + diff --git a/L3/LD_24/Web.Debug.config b/L3/LD_24/Web.Debug.config new file mode 100644 index 0000000..fae9cfe --- /dev/null +++ b/L3/LD_24/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/L3/LD_24/Web.Release.config b/L3/LD_24/Web.Release.config new file mode 100644 index 0000000..da6e960 --- /dev/null +++ b/L3/LD_24/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/L3/LD_24/Web.config b/L3/LD_24/Web.config new file mode 100644 index 0000000..6b31877 --- /dev/null +++ b/L3/LD_24/Web.config @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/L3/LD_24/interface-scheme.png b/L3/LD_24/interface-scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..0090d8703f07642fab97e0a02579834cfdbeee3a GIT binary patch literal 40391 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 NhN_NAiIQdD{{SF9ftmmS literal 0 HcmV?d00001 diff --git a/L3/LD_24/packages.config b/L3/LD_24/packages.config new file mode 100644 index 0000000..5432864 --- /dev/null +++ b/L3/LD_24/packages.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L3/LD_24/tests/1/inputs/U24a.txt b/L3/LD_24/tests/1/inputs/U24a.txt new file mode 100644 index 0000000..084097c --- /dev/null +++ b/L3/LD_24/tests/1/inputs/U24a.txt @@ -0,0 +1,4 @@ +0, Atsuktuvas, 0.99 +1, Varztas, 0.05 +2, Laidas, 2.00 +3, Plaktukas, 2.99 \ No newline at end of file diff --git a/L3/LD_24/tests/1/inputs/U24b.txt b/L3/LD_24/tests/1/inputs/U24b.txt new file mode 100644 index 0000000..22a3639 --- /dev/null +++ b/L3/LD_24/tests/1/inputs/U24b.txt @@ -0,0 +1,12 @@ +Petraitis, Petras, 0, 10 +Petraitis, Petras, 1, 10 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 1, 20 +Onaite, Ona, 2, 200 +Jonaitis, Brolis, 1, 100 +Jonaitis, Brolis, 0, 100 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 1, 20 +Jonaitis, Jonas, 2, 20 +Onaite, Ona, 0, 20 \ No newline at end of file diff --git a/L3/LD_24/tests/1/outputs/Rezultatai.txt b/L3/LD_24/tests/1/outputs/Rezultatai.txt new file mode 100644 index 0000000..8b0f319 --- /dev/null +++ b/L3/LD_24/tests/1/outputs/Rezultatai.txt @@ -0,0 +1,55 @@ +---------------------------- +| Įtaisai | +---------------------------- +| ID | Vardas | Kaina | +---------------------------- +| 0 | Atsuktuvas | 0,99 | +| 1 | Varztas | 0,05 | +| 2 | Laidas | 2,00 | +| 3 | Plaktukas | 2,99 | +---------------------------- + +-------------------------------------------------- +| Pirkėjai | +-------------------------------------------------- +| Pavardė | Vardas | Įtaisas | Įtaiso kiekis | +-------------------------------------------------- +| Petraitis | Petras | 0 | 10 | +| Petraitis | Petras | 1 | 10 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 1 | 20 | +| Onaite | Ona | 2 | 200 | +| Jonaitis | Brolis | 1 | 100 | +| Jonaitis | Brolis | 0 | 100 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 1 | 20 | +| Jonaitis | Jonas | 2 | 20 | +| Onaite | Ona | 0 | 20 | +-------------------------------------------------- + +------------------------------------------------------------ +| Populiariausi įtaisai | +------------------------------------------------------------ +| ID | Vardas | Įtaisų kiekis, vnt. | Įtaisų kaina, eur. | +------------------------------------------------------------ +| 2 | Laidas | 220 | 440,00 | +------------------------------------------------------------ + +---------------------------------------------------------- +| Vienos rūšies pirkėjai | +---------------------------------------------------------- +| Pavardė | Vardas | Įtaiso kiekis, vnt. | Kaina, eur. | +---------------------------------------------------------- +| Nėra | +---------------------------------------------------------- + +---------------------------------- +| Atrinkti įtaisai (n=1, k=1,00) | +---------------------------------- +| ID | Vardas | Kaina | +---------------------------------- +| 0 | Atsuktuvas | 0,99 | +| 1 | Varztas | 0,05 | +---------------------------------- + diff --git a/L3/LD_24/tests/1/outputs/web.png b/L3/LD_24/tests/1/outputs/web.png new file mode 100644 index 0000000000000000000000000000000000000000..05e8ae424aaba428d94576411860454b44997783 GIT binary patch literal 17644 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 Yx{~-&o8=<$S62YqntB>#YBpj20~<`SsQ>@~ literal 0 HcmV?d00001