Розробка платформи покупки товарів на основі Frameworks "Claude Monet"

Розробка структури, алгоритму роботи програми, яка забезпечує можливість покупки товарів. Створення списку користувачів та списку продуктів. Розробка структур даних та основних процедур програми. Алгоритм створення платформи під назвою "Сlaude Monet".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 14.05.2019
Размер файла 121,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Технологічний коледж національного університету «Львівська політехніка»

Відділення комп'ютерних технологій

Циклова комісія інформаційно-комп'ютерної підготовки

Курсова робота

Розробка платформи покупки товарів на основі Frameworks “Claude Monet”

з дисципліни "Алгоритмізація та програмування"

Сікірський Олег Мар'янович

Львів 2019

ЗМІСТ

  • ВСТУП
  • РОЗДІЛ 1. ПРОЕКТУВАННЯ ПРОГРАМИ
    • 1.1 Розробка структури програми
    • 1.2 Розробка алгоритму роботи програми
  • РОЗДІЛ 2. РОЗРОБКА ПРОГРАМИ
    • 2.1 Розробка структур даних
    • 2.2 Розробка основних процедур програми
  • РОЗДІЛ 3. ОПИС РОБОТИ ПРОГРАМИ
  • СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
  • ДОДАТКИ

ВСТУП

Сьогодні сфера інформаційно-комунікаційних технологій настільки розвинулась, що використовується практично у всіх галузях людського життя. Людина створює для свого комфорту різні програми, щоб оптимізувати роботу своєї галузі та полегшити доступ клієнту до тієї чи іншої послуги. Особливо вирізняється платформа покупки товарів того чи іншого клієнта. Тому я зацікавився темою Сollections Framework на Java.

Java collections framework- це набір класів і інтерфейсів, які реалізують зазвичай повторно використовувані структури даних колекції.

Хоча називається рамкою, вона працює у формі бібліотеки. Структура колекцій забезпечує обидва інтерфейси, які визначають різні колекції та класи, які їх реалізують.

Майже всі колекції в Java породжуються інтерфейсом java.util.Collection, який визначає основну структуру всіх колекцій. Він визначає методи add () і remove () для додавання і видалення елементів, а також метод toArray (), який повертає масив, що складається з елементів даної колекції. І, метод contains () перевіряє чи міститься даний елемент в колекції. Інтерфейс Collection успадковується від інтерфейсу java.lang.Iterable.

РОЗДІЛ 1. ПРОЕКТУВАННЯ ПРОГРАМИ

1.1 Розробка структури програми

Для побудови програми було створено 3 форми:

1) Створення списку користувачів:

Створюється список користувачів, які мають певну суму грошей, та знижки на товари.

2) Створення списку продуктів:

Створюється список продуктів, які мають вартість та кількість на складі.

3) Покупка товарів:

Користувачі, якщо мають достатньо коштів, купляють товар, а він в свою чергу пропадає з списку товарів.

Рис1. Форми проекту та їх ієрархія

1.2 Розробка алгоритму роботи програми

Алгоритм програми доволі простий і не вимагає зайвих затрат ресурсів та енергії.

Спочатку створюється список товарів, та заповнюється ними, кожен з яких має унікальним штрих-кодом, та ціну.

Після цього створюється список користувачів та надається їм певна сума грошей, та пріоритетність, а також у випадковому порядку видаються знижки на товари.

Тепер користувач вибирає собі товар і програма перевіряє чи може він його купити, якщо вдалось, товар переходить у список куплених товарів, і обробляється наступний користувач

Схематично це виглядає так:

РОЗДІЛ 2. РОЗРОБКА ПРОГРАМИ

2.1 Розробка структур даних

Платформа була створена за допомогою програми ІntelliJ IDEA 2018.

У ній були створені наступні класи

1. Main;

2. Platform;

3. Product;

4. User

2.2 Розробка основних процедур програми

Згідно з поставленого завдання в цій роботі я використовувала багато необхідних для реалізації програми методів.

Основним методом я вважаю Map<K,V>. Map<K,V> - це структура даних, в якій об'єкти зберігаються не по одному, як у всіх інших, а в парі "ключ - значення". Саме в ньому зберігаються всі штрих-коди та товари

Також важливим є цикл foreah, адже за допомогою циклів платформа перевіряє кожну свою дію.

Ще одним часто вживаним є Set<p>, так як нам часто потрібні списку.

Вся платформа запускається з головну класу Main.

У пакеті java.util міститься бібліотека колекцій (collection framework), яка надає великі можливості для роботи з множинами, хеш-таблицями, векторами, різними видами списків і т.д.

Колекція - це об'єкт, здатний зберігати групу однакових елементів. Вона містить методи для операцій з однорідними даними. Спочатку Java підтримувала роботу з колекціями в рамках класів Vector і Hashtable, але з появою JDK 1.2 можливості роботи з колекціями були розширені, виникло багато відкритих інтерфейсів і різних видів класів, які були включені в бібліотеку колекцій.

Основні переваги класів collection framework (перед класами, що розробляються самостійно) полягають в наступному:

· прискорюється процес розробки і поліпшується якість коду;

· забезпечується підтримка повторного використання коду;

· проводиться стандартизація інтерфейсу ваших класів;

· реалізується підтримка многопоточного доступу.

Перевірці готових класів-колекцій приділялося багато уваги, тому правомірно говорити про поліпшення якості коду. Дані класи можна вважати добре налагодженими з мінімальною кількістю помилок, що часто неможливо забезпечити в самостійні проекти.

платформа товар claude monet

РОЗДІЛ 3. ОПИС РОБОТИ ПРОГРАМИ

Програма призначена для покупки товарів, вона може знадобитись для онлайн-магазинів, щоб покращити їхню працю. Кожний користувач має свою пріоритетність, і по цьому визначається хто перший буде купляти продукти.

Кожного разу проходять список користувачів та товарів, після останнього користувача платформа знову від першого користувача починає і перевіряє, і так до поки не закінчиться товар або користувачі.

Кількість товарів та користувачів визначається випадково.

ВИСНОВОК

У цій курсовій роботі я створив платформу для покупки товарів під назвою «Сlaude Monet».

Закріпив навички роботи з Java Collections Frameworks та освоїв нові методи роботи з ними.

Я використав функції для роботи з списками товарів та користувачів.

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1. Г.Шилдт «Java 8. Керівництво для початківців»(6-й випуск) (2015)

2. Блох Д. «Ефективне програмування» (2014)

3. Роберт Седжвик «Алгоритми на Java» (2013)

4. Кєти Сьера та Берт Бейтс «Изучаем Java» (2012)

ДОДАТОК А

Текст програмного коду:

public class Main {

public static void main(String[] args) {

Platform.start();

}

}

public class Product implements Comparable<Product> {

private String name;

public Product(String name) {

this.name = name;

}

public String getName() {

return name;

}

@Override

public String toString() {

return "Product{" +

"name='" + name + '\'' +

'}';

}

@Override

public int compareTo(Product product) {

return this.getName().compareTo(product.getName());

}

}

import java.util.*;

public abstract class Platform {

private static final int MIN_COUNT_OF_GOODS = 1;

private static final int MAX_COUNT_OF_GOODS = 40;

private static final int MAGIC_MULTIPLIER = 5;

private static final String PREFIX_OF_GOODS_NAMES = "Good#";

private static final int MAX_COUNT_OF_WISHED_GOODS = 5;

private static final int MAX_COUNT_OF_CATEGORY = 4;

private static final int MAX_BARCODE = 9999;

private static final int MIN_BARCODE = 1000;

private static final int MAX_PRICE = 100;

private static final int MIN_PRICE = 50;

private static final int MAX_DISCOUNT = 30;

private static final int MIN_DISCOUNT = 5;

private static Map<Product, Integer> goodsList;

private static Set<Product> neverBuyGoodsList;

private static List<User> users;

public static Map<Integer, Product> barcodes;

public static Map<Product, String> categories;

public static Map<Product, Integer> prices;

public static Random random = new Random();

public static void start() { //+

// старт програми

init();

setGoodsList(random.nextInt(MAX_COUNT_OF_GOODS - MIN_COUNT_OF_GOODS) + MIN_COUNT_OF_GOODS);

setUsers(goodsList.size());

trade();

}

private static void trade() {

Collections.sort(users);

Collections.reverse(users);

List<User> failedPurchase = new LinkedList<>();

System.out.println("ONLINE - " + users.size());

for (User user: users) {

sendDiscount(user);

if (!user.buy(goodsList, neverBuyGoodsList))

failedPurchase.add(user);

}

if (failedPurchase.size() > 0 && users.size()!= failedPurchase.size())

nextRound(failedPurchase);

else

System.out.println("ALL PURCHASES WAS " + (failedPurchase.size() > 0 ? "FAILED": "SUCCESS"));

}

private static void sendDiscount(User user) {

if (random.nextBoolean() && random.nextBoolean()) {

Product productForDiscount = getProductFromList(PREFIX_OF_GOODS_NAMES + (random.nextInt(goodsList.size() - MIN_COUNT_OF_GOODS) + MIN_COUNT_OF_GOODS));

int percentage = random.nextInt(MAX_DISCOUNT - MIN_DISCOUNT) + MIN_DISCOUNT;

user.setDiscounts(productForDiscount, percentage);

}

}

private static void nextRound(List<User> failedPurchase) {

System.out.println("FAILED TO BUY:" + failedPurchase);

users = failedPurchase;

updateGoodCount();

updateUsers();

trade();

}

private static void init() {

goodsList = new HashMap<>();

neverBuyGoodsList = new TreeSet<>();

barcodes = new HashMap<>();

categories = new HashMap<>();

prices = new HashMap<>();

users = new LinkedList<>();

}

private static void setGoodsList(int numberOfGoods) {

int iterator = 0;

while (goodsList.size() < numberOfGoods) {

// поки список товарів менший за кіл-сть товарів

Product product = new Product(PREFIX_OF_GOODS_NAMES + ++iterator); //

goodsList.put(product, Math.abs(random.nextInt() + MIN_COUNT_OF_GOODS)); // Math.abs- щоб значення не було відємне, //розібрати

neverBuyGoodsList.add(product); // додаєм товар в список ще ніразу не куплених товарів

putInBarcodes(product);

putInCategories(product);

putInPrice(product);

}

}

private static void updateUsers() {

for (User user: users) {

user.setMoney(random.nextInt(User.MAX_MONEY - User.MIN_MONEY) + User.MIN_MONEY);

}

}

private static void updateGoodCount() {

for (Object entryObj: goodsList.entrySet()) {

Map.Entry entry = (Map.Entry) entryObj;

goodsList.replace((Product) entry.getKey(), Math.abs(random.nextInt() + MIN_COUNT_OF_GOODS));

}

}

private static void setUsers(int numberOfGoods) {

int numberOfUsers = numberOfGoods;

while (users.size() < numberOfUsers) {

// поки лист user менший від числа user

Set<Product> wishedGoods = new HashSet<>(); // створюємо список бажаних товарів

int countWishedGoods = random.nextInt(MAX_COUNT_OF_WISHED_GOODS - MIN_COUNT_OF_GOODS) + MIN_COUNT_OF_GOODS;

// змінна яка рахує кількість бажаних товарів

for (int i = 0; i < countWishedGoods; i++)

// допоки і менша від кіл-сті бажаних товарів,

{

wishedGoods.add(getProductFromList(PREFIX_OF_GOODS_NAMES + (random.nextInt(numberOfGoods - MIN_COUNT_OF_GOODS) + MIN_COUNT_OF_GOODS)));

// додавати товари до списку

}

users. add(new User(Math.abs(random.nextInt()), wishedGoods));

}

}

private static Product getProductFromList(String name) {

Product pr = null;

for (Product product: goodsList.keySet()) { // дістаєм циклом товари з списку товарів

if (product.getName().equals(name))

pr = product;

}

return pr;

}

private static int generateBarcode() {

return random.nextInt(MAX_BARCODE - MIN_BARCODE) + MIN_BARCODE;

// генеруєм баркод для товару

}

private static String setCategory() {

return "Category " + (random.nextInt(MAX_COUNT_OF_CATEGORY - MIN_COUNT_OF_GOODS) + MIN_COUNT_OF_GOODS);

// встановлює та повертає категорії

}

private static int setPrice() {

return random.nextInt(MAX_PRICE - MIN_PRICE) + MIN_PRICE;

// встановлює ціну на товар

}

private static void putInBarcodes(Product product) {

int barcode = generateBarcode();

if (barcodes.containsKey(barcode)) // перевіряє чи існує в масиві баркод

putInBarcodes(product); // якщо ні, створює його

else

barcodes.put(barcode, product); // якщо так, додає вже готовий до списку

}

private static void putInCategories(Product product) {

String category = setCategory();

if (!categories.containsKey(product)) // якщо немає категорії в продукту,

categories.put(product, category); // встановлює категорію на продукт

}

private static void putInPrice(Product product) {

int price = setPrice();

if (!prices.containsKey(product)) // перевіряє чи немає ціни в товару

prices.put(product, price); // встановлює ціну на товар

}

}

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class User implements Comparable<User> //Можна порівнювати між собою об'єкти

{

public static final int MAX_MONEY = 1000;

public static final int MIN_MONEY = 1;

private Integer priority; // пріорітет users

private int money;

private Set<Product> wishedGoods; // бажанні продукти

private Map<Product, Integer> discounts; // знижки

{

discounts = new HashMap<>(); // лист з хешом

}

public User(int priority, Set<Product> wishedGoods)

// конструктор

{

this.priority = priority;

this.wishedGoods = wishedGoods;

money = Platform.random.nextInt(MAX_MONEY - MIN_MONEY) + MIN_MONEY; //надавання кожному user певну кіл-сть money

}

@Override

public String toString()

// строкове представлення обєкта

{

return "User{" +

"priority=" + priority + "\n" +

", money=" + money + "\n" +

", wishedGoods=" + wishedGoods + "\n" +

", discounts=" + discounts +

'}' + "\n" + "\n";

}

@Override

public int compareTo(User user)

// упорядкування обєктів

{

return this.getPriority().compareTo(user.getPriority());

}

public Integer getPriority() {

return priority; // повертає пріорітет user

}

public boolean buy(Map<Product, Integer> goodsList, Set<Product> neverBuyGoodsList) {

boolean success = true; // успіх

// перевіряє в циклі // розібрати

for (Product wishedGood: wishedGoods) {

if (!buyCurrentProduct(goodsList, wishedGood, neverBuyGoodsList))

success = false;

}

return success;

}

private boolean buyCurrentProduct(Map<Product, Integer> goodsList, Product wishedGood, Set<Product> neverBuyGoodsList)

// купити поточні продукти

{

boolean success = false;

int price = Platform.prices.get(wishedGood) * getDiscount(wishedGood); // установка ціни на товар

if (!userCanBuyProduct(wishedGood))

// перевірка чи може user купити товар

{

wishedGood = getAnalog(wishedGood); //

price = wishedGood == null ? 0: Platform.prices.get(wishedGood) * getDiscount(wishedGood); //тернарний оператор

// перевіряє чи ціна на бажаний продукт є 0, якщо так, то встановлює її

}

int currentCount = wishedGood == null ? 0: goodsList.get(wishedGood);

// якщо поточний рахунок товарів = 0, то дістати бажанні товари з списку товарів

if (goodsList.containsKey(wishedGood) && currentCount > 1)

//проверяет, существует ли в массиве элемент с ключом wishedGood

{

goodsList.replace(wishedGood, currentCount - 1); // зменшуємо к-сть товарів в магазині

success = true; // покупка цього товару успішна

discounts.remove(wishedGood); // видаляємо знижку на нього

neverBuyGoodsList.remove(wishedGood); // видаляємо зі списку товарів, котрі ніколи не куплялись

money -= price; // грошей поменшало

}

return success;

}

private int getDiscount(Product wishedGood)

// перевіряємо і встановлюєм знижку на товар

{

int discount = 0;

if (discounts.containsKey(wishedGood)) {

discount = discounts.get(wishedGood);

}

return 1 - discount / 100;

}

private boolean userCanBuyProduct(Product wishedGood)

// перевіряємо чи може user купити товар

{

int price = Platform.prices.get(wishedGood) * getDiscount(wishedGood);

return money >= price;

}

private Product getAnalog(Product oldProduct) {

String category = Platform.categories.get(oldProduct); // дістали старі товари

Product analog = null;

for (Object entryObj: Platform.categories.entrySet())

//entrySet возвращает набор ключ-значений

{

Map.Entry entry = (Map.Entry) entryObj;

Product newProduct = (Product) entry.getKey();

// entry.getKey() получить ключ

if (entry.getValue().equals(category) && (Platform.prices.get(oldProduct) * getDiscount(oldProduct) > Platform.prices.get(newProduct) * getDiscount(newProduct))) { // якщо товари однієї категорії і ціна поточного товару менша

if (userCanBuyProduct(newProduct)) {

analog = newProduct; // то аналог знайдено

break;

}

}

}

return analog;

}

public void setMoney(int money) {

this.money = money; //присвоює кіл-сть money

}

public void setDiscounts(Product product, int percentage) {

//перевіряє і встановлює знижку на товари

if (!discounts.containsKey(product))

discounts.put(product, percentage);

else

discounts.replace(product, percentage);

}

}

ДОДАТОК Б

Вигляд програми в процесі виконання

Консоль після запуску платформи

Размещено на Allbest.ru


Подобные документы

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

  • Призначення драйверів та порядок роботи з драйверами в MS-DOS. Розробка драйверів консолі. Структура драйвера та призначення компонентів. Розробка структури алгоритму, програми налагодження драйвера. Опис змінних програми та роботи модулів програми.

    курсовая работа [1,0 M], добавлен 22.06.2012

  • Особливості системи онлайн-агрегаторів новин, універсальної програмної платформи Microsoft Window. Використання мови програмування C#, створення бази даних. Розробка програмного продукту, алгоритм його створення. Вихідний код та інструкція користувача.

    дипломная работа [730,9 K], добавлен 21.01.2016

  • Створення програми, що видає результати голосування та підсумки виборів. Алгоритм розробки програми. Опис структури даних та вимоги до них, стандартних процедур та функцій, файлів та їх призначення. Приклад тестування та результати роботи програми.

    курсовая работа [1,0 M], добавлен 28.06.2012

  • Принципи роботи команд мікросхеми 24LC08: читання, запису даних. Опис і блок-схеми програми і підпрограм, що обслуговує пристрій. Вибір середовища програмування і розробка програми, яка забезпечує можливість демонстрації команд. Проведення тестування.

    курсовая работа [114,2 K], добавлен 08.12.2011

  • Опис структур даних та вмісту файлів з вхідними, вихідними даними. Проектування програми автоматизації процесу обліку (поставки та видачі) товарів для невеликого магазину. Математична постановка основних задач. Опис програмного інтерфейсу з користувачем.

    курсовая работа [526,9 K], добавлен 07.10.2014

  • Створення динамічних структур та списку шляхом додавання елементів в кінець списку, шляхом вставляння елемента в середину списку. Відмінності стека від списку, основні операції із стеком. Формування та основні операції над кільцем, обхід кільця.

    реферат [170,8 K], добавлен 07.09.2011

  • Обліковий запис root. Настройка атрибутів користувацького облікового запису. Програми для створення облікових записів користувачів. Створення програми-скрипта add_user для надання робочого інтерфейсу програмі useradd. Блок схема алгоритму програми.

    курсовая работа [35,9 K], добавлен 10.01.2013

  • Алгоритмічна мова програмування універсального призначення Turbo Pascal. Розробка і створення програми для гри "Шибениця". Алгоритм функціонування программи, блок-схема алгоритму. Використання додаткових модулів Graph та Crt у процессі створення програми.

    курсовая работа [2,0 M], добавлен 23.06.2010

  • Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.

    курсовая работа [14,1 K], добавлен 08.08.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.