МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
КАФЕДРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
Звіт
До лабораторної роботи № 4
На тему: “ Робота з колекціями та масивами ”
З дисципліни : "Конструювання програмного забезпечення"
Тема: Робота з колекціями та масивами.
Мета: Навчитись працювати з колекціями System.Collections.Generic та масивами.
Завдання:
Реалізувати:
Кілька класів, що реалізують 4 взаємопов’язані об’єкти, які є у базі даних, та конструктор до них.
«фіктивний об’єкт» - базу даних, який буде повертати список цих об’єктів.
Вивести на консоль вміст усіх об’єктів перевизначивши метод ToString()
Реалізувати декілька зв’язних класів.
Розробити «фіктивний об’єкт»(Mock-object), що симулює табличні дані.
Перевизначити метод ToString(). Використовуючи команду String.Format.
Вивести на консоль усі дані використовуючи цикл foreach.
Розробити і заповнити структуру, у якій за ключем можна витягнути окремий клас або їх список. За ключем категорії отримати список продуктів цієї категорії.
Відсортувати за якимось критерієм використовуючи шаблон IComparer.
Конвертувати список в масив. Відсортувати масив за ім’ям. Відсортувати масив за кількістю елементів у зв’язному з ним масиві.
Варіант 2.
Замовлення обідів. Існує меню, яке фіксується адміністратором. Користувач може на тиждень часу наперед замовити собі обіди з даного меню та відредагувати його. Адміністратор може редагувати дані користувачів, їхніх замовлень, роздруковувати вихідні обіди.
Результати виконання:
Клас Users.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab4
{
class Users
{
private int userid;
public int UserID
{
get { return userid; }
set { userid = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string login;
public string Login
{
get { return login; }
set { login = value; }
}
private string password;
public string Password
{
get { return password; }
set { password = value; }
}
private string email;
public string Email
{
get { return email; }
set { email = value; }
}
private long telephon;
public long Telephon
{
get { return telephon; }
set { telephon = value; }
}
private string addreass;
public string Address
{
get { return addreass; }
set { addreass = value; }
}
public Users(int ID,string aName, string aLogin, string aPassword,string aEmail,
long aTelephon,string aAddress)
{
UserID = ID;
Name = aName;
Login = aLogin;
Password = aPassword;
Email = aEmail;
Telephon = aTelephon;
Address= aAddress;
}
public override string ToString()
{
return string.Format("ID юзера - {0:D3},імя - {1}, логін - {2}, пароль - {3},\r\n Email - {4},телефон - {5},адреса - {6}\r\n\r\n",
UserID,Name, Login, Password, Email,Telephon,Address);
}
}
}
Клас Order.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab4
{
class Order
{
private int orderid;
public int Orderid
{
get { return orderid; }
set { orderid = value; }
}
private int userid;
public int Userid
{
get { return userid; }
set { userid = value; }
}
private string dishname;
public string Dishname
{
get { return dishname; }
set { dishname = value; }
}
private int number;
public int Number
{
get { return number; }
set { number = value; }
}
private int price;
public int Price
{
get { return price; }
set { price = value; }
}
private string deliveryplace;
public string Deliveryplace
{
get { return deliveryplace; }
set { deliveryplace = value; }
}
private string paymode;
public string Paymode
{
get { return paymode; }
set { paymode = value; }
}
public Order(int aID,int aUserid, string aDishname, int aNumber,int aPrice,
string aDeliveryplace,string aPaymode)
{
Orderid = aID;
Userid = aUserid;
Dishname = aDishname;
Number = aNumber;
Price = aPrice;
Deliveryplace = aDeliveryplace;
Paymode= aPaymode;
}
public override string ToString()
{
return string.Format("ID замовлення - {0:D3},ID користувача - {1:D3}, назва страви - {2}, кількість - {3},\r\n ціна - {4},місце доставки - {5},спосіб оплати - {6}\r\n\r\n",
Orderid, Userid, Dishname, Number, Price, Deliveryplace, Paymode);
}
}
}
Клас Menu.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab4
{
class Menu
{
private int menuid;
public int Menuid
{
get { return menuid; }
set { menuid = value; }
}
private string partname;
public string Partname
{
get { return partname; }
set { partname = value; }
}
private DateTime date;
public DateTime Date
{
get { return date; }
set { date = value; }
}
private int number;
public int Number
{
get { return number; }
set { number = value; }
}
private int dishid;
public int Dishid
{
get { return dishid; }
set { dishid = value; }
}
public Menu(int aID,string aPartname, DateTime aDate,int aNumber, int aDishid)
{
Menuid = aID;
Partname = aPartname;
Date = aDate;
Number= aNumber;
Dishid = aDishid;
}
public override string ToString()
{
return string.Format("ID меню - {0:D3},назва розділу - {1}, дата - {2}, кількість - {3},ID страви - {4:D2}\r\n\r\n",
Menuid,Partname, Date, Number, Dishid);
}
}
}
Клас BanList.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab4
{
class BanList
{
private int banid;
public int BanID
{
get { return banid; }
set { banid = value; }
}
private int userbanid;
public int Userbanid
{
get { return userbanid; }
set { userbanid = value; }
}
private string wybaned;
public string WyBaned
{
get { return wybaned ; }
set { wybaned = value; }
}
private string orederblocking;
public string Orderblocking
{
get { return orederblocking; }
set { orederblocking = value; }
}
public BanList(int aID,int auID, string aWyBaned, string aOrderlocking)
{
BanID = aID;
Userbanid = auID;
WyBaned = aWyBaned;
Orderblocking = aOrderlocking;
}
public override string ToString()
{
return string.Format("ID бан-списку - {0:D3},ID забаненого користувача - {1:D2},причина бану - {2}, блокування замовлення - {3},\r\n\r\n",
BanID, Userbanid, WyBaned, Orderblocking);
}
}
}
Фіктивний об’єкт Test.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab4
{
class Test
{
public List<Users> Users = new List<Users>()
{
new Users(001,"Marko", "marko","123","sheme4ko@mail.ru",380969497481,"Lviv"),
new Users(002,"Ben", "ben","321","ben@mail.ru",380964497482,"Lviv"),
new Users(003,"Bob", "Bob2","1357","bob@mail.ru",380965497489,"London"),
new Users(004,"Ihor", "same","246","same-one@mail.ru",380961297481,"Zolochiv"),
};
public List<BanList> BanList = new List<BanList>()
{
new BanList(001,001,"неправильне замовленн", "yes"),
new BanList(002,003,"неправильне місце доставки", "no"),
new BanList(003,002,"неправильне замовленн", "yes"),
new BanList(004,006,"невчасна оплата", "no"),
new BanList(005,005,"неправильне замовленн", "yes"),
new BanList(006,007,"неправильне замовлення", "yes"),
};
public List<Order> Order = new List<Order>()
{
new Order(001,001,"Суші", 1,60,"львів, проспект свободи 31","готівка"),
new Order(002,001,"Відбивна", 2,60,"львів, городоцька 188","готівка"),
new Order(003,003,"Вареники", 1,60,"львів, личаківська 12","кредитка"),
new Order(004,002,"Суші", 3,180,"Лондон, біля Біг Бена","готівка"),
new Order(005,004,"Борщ", 1,60,"львів, проспект свободи 50","кредитка"),
new Order(006,003,"Суші", 1,60,"Золочів, проспект свободи 10","готівка"),
new Order(007,002,"Бурщ", 6,60,"львів, проспект свободи 47","готівка"),
new Order(008,001,"Наполеон під Бородіном", 10,60,"львів, замарстинівська 1","готівка"),
};
public List<Menu> Menu = new List<Menu>()
{
new Menu(001,"Салати",DateTime.Parse("07/04/2009"),40, 001),
new Menu(002,"Гарячі страви",DateTime.Parse("09/04/2008"),60, 004),
new Menu(003,"Салати",DateTime.Parse("07/11/2009"),40, 005),
new Menu(004,"Гарячі страви",DateTime.Parse("07/01/2008"),100, 006),
new Menu(005,"Салати",DateTime.Parse("15/05/2009"),30, 007),
};
}
}
Код програми:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static Dictionary<int, Users> UsersDictionary = new Dictionary<int, Users>();
private static Dictionary<int, List<Order>> OrderDictionary = new Dictionary<int, List<Order>>();
List<Users> UsersList;
List<Order> OrderList;
List<Menu> MenuList;
List<BanList> BanList;
private void OutputToConsole_Click(object sender, EventArgs e)
{
Test DataBase = new Test();
UsersList = DataBase.Users;
OrderList = DataBase.Order;
MenuList = DataBase.Menu;
BanList = DataBase.BanList;
DataOutput.Text = "Інформація про користувачів : \r\n";
foreach (Users us in UsersList)
DataOutput.Text = DataOutput.Text + us.ToString();
DataOutput.Text = DataOutput.Text + "\r\nІнформація про замовлення користувачів : \r\n";
foreach (Order o in OrderList)
DataOutput.Text = DataOutput.Text + o.ToString();
DataOutput.Text = DataOutput.Text + "\r\nІнформація про меню : \r\n";
foreach (Menu m in MenuList)
DataOutput.Text = DataOutput.Text + m.ToString();
DataOutput.Text = DataOutput.Text + "\r\nІнформація про бан-список: \r\n";
foreach (BanList b in BanList)
DataOutput.Text = DataOutput.Text + b.ToString();
//Запoвнення словників
UsersDictionary.Clear();
foreach (Users us in UsersList)
UsersDictionary.Add(us.UserID, us);
OrderDictionary.Clear();
foreach (Order o in OrderList)
if (OrderDictionary.ContainsKey(o.Userid))
OrderDictionary[o.Userid].Add(o);
else
{
List<Order> tmpList = new List<Order>();
tmpList.Add(o);
OrderDictionary.Add(o.Userid, tmpList);
}
foreach (Users us in UsersList)
UsersComboBox.Items.Add(us.UserID);
UserInformation.Enabled = true;
}
private void UserInformation_Click(object sender, EventArgs e)
{
if (UsersComboBox.Text == "")
{
UserInformationConsole.Text = "Не вибрано ID користувача";
return;
}
UserInformationConsole.Text = string.Format("Інформація про користувача з ID - {0:D3}\r\n\r\n", UsersComboBox.Text);
UserInformationConsole.Text = UserInformationConsole.Text + UsersDictionary[int.Parse(UsersComboBox.Text)].ToString();
UserInformationConsole.Text = UserInformationConsole.Text + string.Format("Даний користувач зробив {0} замовлень\r\n\r\n",
OrderDictionary[int.Parse(UsersComboBox.Text)].Count);
foreach (Order o in OrderDictionary[int.Parse(UsersComboBox.Text)])
UserInformationConsole.Text = UserInformationConsole.Text + o.ToString();
}
private class UserLoginComparer : IComparer<Users>
{
public int Compare(Users x, Users y)
{
return string.Compare(x.Login, y.Login);
}
}
private class UserTelephonComparer : IComparer<Users>
{
public int Compare(Users x, Users y)
{
if (x.Telephon == y.Telephon)
return 0;
if (x.Telephon < y.Telephon)
return -1;
if (x.Telephon > y.Telephon)
return 1;
return x.ToString().CompareTo(y.ToString());
}
}
private void UsersListSort_Click(object sender, EventArgs e)
{
if (LoginSort1.Checked)
{
UsersListSortConsole.Clear();
UsersList.Sort(new UserLoginComparer());
foreach (Users us in UsersList)
UsersListSortConsole.Text = UsersListSortConsole.Text + us.ToString();
}
if (TelephonSort.Checked)
{
UsersListSortConsole.Clear();
UsersList.Sort(new UserTelephonComparer());
foreach (Users us in UsersList)
UsersListSortConsole.Text = UsersListSortConsole.Text + us.ToString();
}
}
private void ArraySort_Click(object sender, EventArgs e)
{
Users[] UsersArray = UsersList.ToArray();
if (LoginSort2.Checked)
{
UsersArrayConsole.Clear();
Array.Sort(UsersArray, new UserLoginComparer());
foreach (Users us in UsersArray)
UsersArrayConsole.Text = UsersArrayConsole.Text + us.ToString();
}
if (OrderCountSort.Checked)
{
UsersArrayConsole.Clear();
Order[] OrderArray = OrderList.ToArray();
int[] OrderCountByUser = new int[UsersArray.Length];
for (int i = 0; i < OrderArray.Length; i++)
OrderCountByUser[OrderArray[i].Userid - 1]++;
Array.Sort(OrderCountByUser, UsersArray);
foreach (Users us in UsersArray)
UsersArrayConsole.Text = UsersArrayConsole.Text + us.ToString();
}
}
}
}
Виконання:
Вивів дані: таблиці:Users, Orders, Menu, BanList. Вибрав користувача з Id 002 і вивів дані про нього з таблиці Users і зроблені ним замовлення. Посортував список користувачів за логіком. Посортував масив користувачів за логіком.
Відсортував список користувачів за телефоном. Відсортував масив користувачів за кількістю замовлень.