Professional Documents
Culture Documents
Звіт ОбПрактика
Звіт ОбПрактика
з обчислювальної практики
з дисципліни «Об’єктно-орієнтовне програмування»
на тему :
«Система контролю асортименту книгарні та обслуговування
покупців із виконанням шаблонів»
Book – описує сутність книги. Має назву, ім'я автора, ціну, опис, жанр,
відносний шлях до картинки, коефіцієнт знижки і скільки разів її продали.
Дозволяє змінювати поля цієї сутності.
public class Book
{
public string Name { get; set; }
public string Author {get;set;} //Назва книги і її автор
public double price { get; set; } // ціна книги
public int Genre { get; set; } // ID жанру
public double discount { get; set; } //коеф знижки
public string ImagePath { get; set; }//шлях до зображення
public int Count_Selled { get; set; }// кількість проданих книг
public string About { get; set; } // коротко про книгу
public Book(string A, string B, double C, string D, int E,double F,string G,int H)
{
Name = A;
Author = B;
price = C;
About = D;
Genre = E;
discount = F;
ImagePath = G;
Count_Selled = H;
}
public void ChName(string A)
{
Name = A;
}
public void ChAuthor(string A)
{
Author = A;
}
public void ChPrice(double A)
{
price = A;
}
public void ChGenre(int A)
{
Genre = A;
}
public void ChPath(string A)
{
ImagePath = A;
}
public void ChAbout(string A)
{
About = A;
}
}
В класі визначений конструктор, який приймає значення для всіх полей.
Визначені наступні методи:
if (DD.HasRows)
{
while (DD.Read())
{
string x1 = DD.GetValue(0).ToString().Trim();
string x2 = DD.GetValue(1).ToString().Trim();
double x3 = Convert.ToDouble(DD.GetValue(2));
string x4 = DD.GetValue(3).ToString().Trim();
int x5 = Convert.ToInt32(DD.GetValue(4));
double x6 = Convert.ToDouble(DD.GetValue(5));
string x7 = DD.GetValue(6).ToString().Trim();
int x8 = Convert.ToInt32(DD.GetValue(7));
l.Add(new Book(x1, x2, x3, x4, x5, x6, x7, x8));
}
}
}
}
public List<Book> getList()
{
var d = from i in l
orderby i.Count_Selled descending
select i;
foreach (Book i in d)
{
if (i.Genre == g)
{
A.Add(i);
}
}
return A;
}
public void DiscountUpdate(string A,string B,double C)
{
foreach(var i in l)
{
if(i.Name==A && i.Author==B)
{
i.discount = C;
}
}
}
public void DiscountUpdate(string A, double C)
{
foreach (var i in l)
{
if (i.Name == A)
{
i.discount = C;
}
}
}
public void DiscountUpdate()
{
foreach (var i in l)
{
i.discount = 1;
}
}
public void CHName(string A, string B,string C)
{
foreach (Book i in l)
{
if (i.Name== A && i.Author==B)
{
i.Name = C;
}
}
string c = "UPDATE Books SET Name='" + C + "' WHERE Name='" + A + "' AND
AuthorName='"+B+"'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void CHAuthor(string A, string B, string C)
{
foreach (Book i in l)
{
if (i.Name == A && i.Author == B)
{
i.Author = C;
}
}
string c = "UPDATE Books SET AuthorName='" + C + "' WHERE Name='" + A + "' AND
AuthorName='" + B + "'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void CHGenre(string A, string B, int C)
{
foreach (Book i in l)
{
if (i.Name == A && i.Author == B)
{
i.Genre = C;
}
}
string c = "UPDATE Books SET Genre='" + C + "' WHERE Name='" + A + "' AND
AuthorName='" + B + "'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void CHAbout(string A, string B, string C)
{
foreach (Book i in l)
{
if (i.Name == A && i.Author == B)
{
i.About = C;
}
}
string c = "UPDATE Books SET About='" + C + "' WHERE Name='" + A + "' AND
AuthorName='" + B + "'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void CHPrice(string A, string B, double C)
{
foreach (Book i in l)
{
if (i.Name == A && i.Author == B)
{
i.price = C;
}
}
string c = "UPDATE Books SET Price=" + C + " WHERE Name='" + A + "' AND
AuthorName='" + B + "'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void CHImage_path(string A, string B, string C)
{
foreach (Book i in l)
{
if (i.Name == A && i.Author == B)
{
i.ImagePath = C;
}
}
string c = "UPDATE Books SET Image_Path='" + C + "' WHERE Name='" + A + "' AND
AuthorName='" + B + "'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
void SellBook(Book A)
{
string c = "Update Books Set Count_Selled = Count_Selled + 1 Where Name =
'"+A.Name+"' And AuthorName = '"+A.Author+"'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void SellBooks(List<Book> A)
{
foreach(var i in A)
{
SellBook(i);
foreach(var j in l)
{
if(j.Author==i.Author&&j.Name==i.Name)
{
j.Count_Selled++;
}
}
}
}
}
Має 2 конструктори:
interface IBasketState
{
void setPromocode(BasketBook basket);
bool ishavediscount();
}
BasketBook(IBasketState ws);
Має 3 конструктори:
if (DD.HasRows)
{
while (DD.Read())
{
object x1 = DD.GetValue(0);
object x2 = DD.GetValue(1);
object x3 = DD.GetValue(2);
object x4 = DD.GetValue(3);
object x5 = DD.GetValue(4);
l.Add(new Account(Convert.ToString(x1).Trim(),
Convert.ToString(x2).Trim(),
Convert.ToString(x3).Trim(),Convert.ToInt32(x4),Convert.ToBoolean(x5)));
}
}
}
}
public List<Account> getList()
{
return l;
}
public int SearchAcc(string A, string B)//перевіряє, чи знайдений такий акаунт, якзо
не знайдений, то повертвє -1
{
int Searched = -1;
int j= 0;
foreach(var i in l)
{
if (i.Login.Replace(" ", "") == A && i.password.Replace(" ", "") == B)
{
Searched = j;
}
j++;
}
return Searched;
}
public int SearchAcc(string Login)//перевіряє, чи знайдений такий акаунт, якзо не
знайдений, то повертвє -1
{
int Searched = -1;
int j = 0;
foreach (var i in l)
{
if (i.Login.Replace(" ", "") == Login)
{
Searched = j;
}
j++;
}
return Searched;
}
public Account GetAccountByID(int a)
{
return l.ElementAt(a);
}
public void CHPass(string A, string B)
{
foreach (Account i in l)
{
if (i.password.Replace(" ", "") == A)
i.ChangePass(B);
}
string c = "UPDATE Accounts SET Password="+B+" WHERE Name='"+A+"'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void CHLogin(string A, string B)
{
foreach (Account i in l)
{
if (i.Login.Replace(" ", "") == A)
i.ChangeLogin(B);
}
string c = "UPDATE Accounts SET Login=" + B + " WHERE Name='" + A + "'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void DelAcc(Account A)
{
string c = "DELETE FROM Accounts WHERE Name='"+A.Name+"' AND Login='"+A.Login+"'
AND Password='"+A.password+"'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
l.Remove(A);
}
public void AddAccount(Account a)
{
l.Add(a);
string c = "INSERT INTO Accounts (Name,Login,Password,Count,isAdmin) VALUES ('" +
a.Name + "','" + a.Login + "','" + a.password + "','" + 0 + "','False')";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void Sell(int a,Account b)
{
foreach (Account i in l)
{
if (i.Login==b.Login)
{
int a1 = i.count_selled;
i.count_selled += a;
if(a1<500 && i.count_selled>=500)
{
MessageBox.Show(i.Name+", ви щойно продали понад 500 книг. Будь ласка,
перезайдіть!");
}
}
}
string c = "UPDATE Accounts SET Count=Count+" + a + " WHERE Name='" + b.Name +
"'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
public void setAdmin(int a)
{
foreach( var i in l)
{
i.isAdmin = false;
}
GetAccountByID(a).isAdmin = true;
string c = "UPDATE Accounts SET isAdmin = 0 UPDATE Accounts set isAdmin = 1 where
Login = '"+GetAccountByID(a).Login+"'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(c, connection);
SqlDataReader DD = command.ExecuteReader();
}
}
}
Має 2 конструктори:
ListAcc();
ListAcc(List<Account> f);
Має конструктор:
Seller(Account l);
Discount – працює із системою знижок. Міняє поля discount в класі Book. Має
декілька способів надання знижки. Реалізований за допомогою патерна
Strategy.
public interface IDiscount
{
void ExecuteDiscount(string A,string B,double C);
}
Discount(IDiscount _strategy);
Має методи:
if (DD.HasRows)
{
while (DD.Read())
{
string x1 = DD.GetValue(0).ToString().Replace(" ","");
list.Add(x1);
}
}
}
}
public bool isChecked(string a)
{
bool b = false;
foreach(var i in list)
{
if (i == a)
b = true;
}
return b;
}
}
Має конструктор:
Promocodedb();
Має метод:
Тут ми можемо ввести вхідні дані для авторизації (логін і пароль). Якщо
користувач ще не зареєструвався, йому потрібно натиснути кнопку «Новий аккаунт»,
після чого появиться наступна форма:
Щоб створити нову книгу, потрібно заповнити всі поля, вибрати картинку і
натиснути книгу (додати нову книгу).
Singleton
Strategy
State
Рисунок 5. Singleton
Strategy використаний для реалізації системи знижок
Рисунок 6. Strategy
State використаний для реалізації кошика
Рисунок 7. State
Висновок.