МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
КАФЕДРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
Звіт
До лабораторної роботи № 4
На тему: “ Робота з колекціями та масивами ”
З дисципліни : "Конструювання програмного забезпечення"
Мета: Навчитися прицювати з колекціями System.Collections.Generic та масивами
Завдання:
На цій лабораторній необхідно реалізувати
Кілька класів, що реалізують 4 взаємозв'язані об'єкти, які є у базі даних, та конструктор до них.
"фіктивний об'єкт" - базу даних, який буде повертати список цих об'єктів (Щонайменше 4 для об'єктів які містять більше 9 полів, щонайменше 8 для решти)
Вивести на консоль вміст усіх об'єктів перевизначивши метод ToStringО
Відповідно до завдання реалізуйте декілька зв'язаних класів.
Розробити "фіктивний об'єкт" (Mock-object), що симулює табличні дані.
Перевизначити метод ToStringО. Використовуючи команду String.Format
Вивести на консоль усі дані використовуючи цикл foreach.
Розробити і заповнити структуру, у якій за ключем можна витягнути окремий клас, або їх список.
Dictionary<Guid productID, Product> - хеш-таблиця продуктів.
Dictionary<Guid categorylD, List<Product>> - хеш-таблиця категорій продуктів. За ключем категорії отримати список продуктів цієї категорії.
Відсортувати за якимось критерієм використовуючи шаблон IComparer.
Конвертувати списки в масив. Відсортувати масив за ім'ям. Відсортувати масив за кількістю елементів у зв'язаному з ним масиві, наприклад, відсортувати масив категорій за кількістю продуктів у них.
Код програми
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 WindowsFormsApplication11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int z = 1;
class User
{
#region клас каристувачів
public int Id{get;set; }
private string Name { get; set; }
public string Login { get; set; }
private string Password { get; set; }
public int AccessId { get; set; }
private string Email { get; set; }
public User(int id, string name, string login, string password, int accessid, string email)
{
Id = id;
Name = name;
Login = login;
Password = password;
AccessId = accessid;
Email = email;
}
public override string ToString()
{
return string.Format("\r\n ID користувача - {0:D1},\r\n ім'я- {1}, \r\n логін - {2},\r\n пароль - {3},\r\n Іd прав доступу - {4:D1},\r\n email - {5}\r\n\r\n",
Id, Name, Login, Password, AccessId, Email);
}
#endregion кінець класу
}
class Access
{
#region права доступу
public int Id { get; set; }
private int CommentingAndForum{get;set;}
private int OrderTickets { get; set; }
private int Blocking { get; set; }
private int GrantRights { get; set; }
private int TicketSales { get; set; }
public int Reitung { get; set; }
public Access(int id, int commentingandforum, int ordertickets, int blocking, int grantrights, int ticketsales,int reitung)
{
Id = id;
CommentingAndForum = commentingandforum;
OrderTickets = ordertickets;
Blocking = blocking;
GrantRights = grantrights;
TicketSales = ticketsales;
Reitung=reitung;
}
public override string ToString()
{
return string.Format("\r\n ID прав доступу- {0:D1}, \r\n коментування і форум- {1:D1}, \r\n замовлення квитків - {2:D1}, \r\n блокування - {3:D1}, \r\n надання прав - {4:D1}, \r\n продаж квитків - {5:D1},\r\n рейтинг користувача-{6:D1} \r\n",
Id, CommentingAndForum, OrderTickets, Blocking, GrantRights, TicketSales,Reitung);
}
#endregion
}
class Film
{
#region клас фільм
public int Id { get; set; }
private string Description { get; set; }
private string Name { get; set; }
private int VotesCount { get; set; }
public Film(int id, string description, string name, int votescount)
{
Id = id;
Description = description;
Name = name;
VotesCount = votescount;
}
public override string ToString()
{
return string.Format("\r\n\r\n ID фільму- {0:D1}, \r\n опис- {1}, \r\n назва фільму- {2}, \r\n кількість голосів - {3:D1}",
Id, Description, Name, VotesCount);
}
#endregion
}
class Session
{
#region клас сеанс
public int Id { get; set; }
public int FilmId { get; set; }
public Session(int id, int filmid)
{
Id = id;
FilmId = filmid;
}
public override string ToString()
{
return string.Format("\r\n\r\n ID сеансу- {0:D1}, \r\n ID фільму- {1:D1}",
Id, FilmId);
}
#endregion
}
class ModelTest
{
#region ініціалізація
public List<User> User = new List<User>()
{
new User(1,"name1","l","password1",3,"email1"),
new User(2,"name2","k","password2",4,"email2"),
new User(3,"name3","z","password3",1,"email3"),
new User(4,"name4","f","password4",4,"email4"),
new User(5,"name5","m","password5",4,"email5"),
new User(6,"name6","k","password6",4,"email6")
};
public List<Access> Access = new List<Access>()
{
new Access(1,0,0,0,0,0,1),
new Access(2,1,1,0,0,0,2),
new Access(3,1,1,1,0,1,3),
new Access(4,1,1,1,1,1,4)
};
public List<Film> Film = new List<Film>()
{
new Film(1,"description1","name1",3),
new Film(2,"description2","name2",8),
new Film(3,"description3","name1",6),
new Film(4,"description4","name4",5),
new Film(5,"description5","name5",3),
new Film(6,"description6","name6",9),
};
public List<Session> Session = new List<Session>()
{
new Session(1,1),
new Session(2,9),
new Session(3,8),
new Session(4,7),
new Session(5,6),
new Session(6,5)
};
#endregion
}
private static Dictionary<int, User> Ud = new Dictionary<int, User>();
private static Dictionary<int, List<Access>> AccessDictionary = new Dictionary<int, List<Access>>();
List<User> U;
List<Access> A;
List<Film> F;
List<Session> S;
private void Form1_Load(object sender, EventArgs e)
{
}
private class UserNameComparer : IComparer<User>
{
public int Compare(User x, User y)
{
return string.Compare(x.Login, y.Login);
}
}
private class UserGroupComparer : IComparer<User>
{
public int Compare(User x, User y)
{
return x.ToString().CompareTo(y.ToString());
}
}
private void button1_Click(object sender, EventArgs e)
{
# region вивід даних з таблиць
textBox1.Text = textBox1.Text + " Таблиця користувачів: ";
ModelTest bd = new ModelTest();
U = bd.User;
foreach (User us in U)
textBox1.Text = textBox1.Text + us.ToString();
textBox1.ForeColor = Color.Blue;
textBox1.Text = textBox1.Text + " Таблиця прав доступу: ";
A = bd.Access;
foreach (Access ac in A)
textBox1.Text = textBox1.Text + ac.ToString();
textBox1.Text = textBox1.Text + " Таблиця фільмів: ";
F = bd.Film;
foreach (Film fi in F)
textBox1.Text = textBox1.Text + fi.ToString();
textBox1.Text = textBox1.Text + " Таблиця сеансів: ";
S = bd.Session;
foreach (Session se in S)
textBox1.Text = textBox1.Text + se.ToString();
#endregion
textBox2.Text = "";
Ud.Clear();
foreach (User us in U)
Ud.Add(us.Id, us);
AccessDictionary.Clear();
foreach (Access c in A)
if (AccessDictionary.ContainsKey(c.Id))
AccessDictionary[c.Id].Add(c);
else
{
List<Access> tmpList = new List<Access>();
tmpList.Add(c);
AccessDictionary.Add(c.Id, tmpList);
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox2.Text = "";
if (z==6)
z=1;
textBox2.Text = "";
textBox2.Text = textBox2.Text + Ud[int.Parse(numericUpDown1.Text)].ToString();
User[] UArray = U.ToArray();
foreach (Access c in AccessDictionary[UArray[int.Parse(numericUpDown1.Text)-1].AccessId])
{
textBox2.Text = textBox2.Text + c.ToString(); z++;
}
}
private void button3_Click(object sender, EventArgs e)
{
textBox3.Text = "";
U.Sort(new UserNameComparer());
foreach (User us in U)
textBox3.Text = textBox3.Text + us.ToString();
}
private void button4_Click(object sender, EventArgs e)
{
textBox4.Text = "";
Access [] RArray = A.ToArray();
User[] UArray = U.ToArray();
int[] UserReiting = new int[RArray.Length];
for (int i = 0; i < RArray.Length; i++)
UserReiting[RArray[i].Reitung - 1]++;
Array.Sort(UserReiting, UArray);
foreach (User us in UArray)
textBox4.Text = textBox4.Text + us.ToString();
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
Результати виконання