Розробка платформи покупки товарів на основі Frameworks "ClaudeMonet"
Проектування програми Сollections Frameworkна Java: розробка її структури, алгоритму роботи, структур даних, а також основних процедур програми. Опис роботи даної програми та текст програмного коду. Опис вигляду вікон програми в процесі виконання.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 16.05.2019 |
Размер файла | 142,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ВІДОКРЕМЛЕНИЙ СТРУКТУРНИЙ ПІДРОЗДІЛ ТЕХНОЛОГІЧНИЙ КОЛЕДЖ НАЦІОНАЛЬНОГО УНІВЕРСИТЕТУ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Відділення комп'ютерних технологій
Циклова комісія інформаційно-комп'ютерної підготовки
КУРСОВА РОБОТА
з дисципліни "Алгоритмізація та програмування"
на тему: Розробка платформи покупки товарів на основі Frameworks "ClaudeMonet"
СтудентаІІІ курсу групи КН-32
Сікірського Олега Мар'яновича
напряму підготовки 6.050101 «Комп'ютерні науки»
спеціальності 122«Компютерні науки та інформаційні технології»
Керівник
Скобилко І.Я.
Львів 2019
ВСТУП
Сьогодні сфера інформаційно-комунікаційних технологій настільки розвинулась, що використовується практично у всіх галузях людського життя. Людина створює для свого комфорту різні програми, щоб оптимізувати роботу своєї галузі та полегшити доступ клієнту до тієї чи іншої послуги. Особливо вирізняється платформа покупки товарів того чи іншого клієнта. Тому я зацікавився темою Сollections Frameworkна Java.
Java collections framework- це набір класів і інтерфейсів, які реалізують зазвичай повторно використовувані структури даних колекції .
Хоча називається рамкою , вона працює у формі бібліотеки . Структура колекцій забезпечує обидва інтерфейси, які визначають різні колекції та класи, які їх реалізують. сollection framework java програма
Майже всі колекції в Java породжуються інтерфейсом java.util.Collection, який визначає основну структуру всіх колекцій. Він визначає методи add () і remove () для додавання і видалення елементів, а також метод toArray (), який повертає масив, що складається з елементів даної колекції. І, метод contains () перевіряє чи міститься даний елемент в колекції. Інтерфейс Collection успадковується від інтерфейсу java.lang.Iterable. сollection framework java програма
РОЗДІЛ 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 міститься бібліотека колекцій ( collectionframework ), яка надає великі можливості для роботи з множинами, хеш-таблицями, векторами, різними видами списків і т.д.
Колекція - це об'єкт, здатний зберігати групу однакових елементів. Вона містить методи для операцій з однорідними даними. Спочатку Java підтримувала роботу з колекціями в рамках класів Vector і Hashtable , але з появою JDK 1.2 можливості роботи з колекціями були розширені, виникло багато відкритих інтерфейсів і різних видів класів, які були включені в бібліотеку колекцій.
Основні переваги класів collectionframework (перед класами, що розробляються самостійно) полягають в наступному:
* прискорюється процес розробки і поліпшується якість коду;
* забезпечується підтримка повторного використання коду;
* проводиться стандартизація інтерфейсу ваших класів;
* реалізується підтримка многопоточного доступу.
Перевірці готових класів-колекцій приділялося багато уваги, тому правомірно говорити про поліпшення якості коду. Дані класи можна вважати добре налагодженими з мінімальною кількістю помилок, що часто неможливо забезпечити в самостійні проекти
РОЗДІЛ 3. ОПИС РОБОТИ ПРОГРАМИ
Програма призначена для покупки товарів, вона може знадобитись для онлайн-магазинів, щоб покращити їхню працю. Кожний користувач має свою пріоритетність, і по цьому визначається хто перший буде купляти продукти.
Кожного разу проходять список користувачів та товарів, після останнього користувача платформа знову від першого користувача починає і перевіряє, і так до поки не закінчиться товар або користувачі.
Кількість товарів та користувачів визначається випадково.
ВИСНОВОК
У цій курсовій роботі я створивплатформу для покупки товарів під назвою «СlaudeMonet».
Закріпив навички роботи з JavaCollectionsFrameworksта освоїв нові методи роботи з ними.
Я використав функції для роботи з списками товарів та користувачів;
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
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
...Подобные документы
Розробка структури, алгоритму роботи програми, яка забезпечує можливість покупки товарів. Створення списку користувачів та списку продуктів. Розробка структур даних та основних процедур програми. Алгоритм створення платформи під назвою "Сlaude Monet".
курсовая работа [121,3 K], добавлен 14.05.2019Аналіз предметної області і постановка задачі на розробку програми для автоматизації роботи автопідприємства. Перелік та опис використаних компонентів та основних процедур програми. Опис структур та методів обробки даних. Інструкція для користувача.
курсовая работа [2,3 M], добавлен 15.02.2012Опис структур даних та вмісту файлів з вхідними, вихідними даними. Проектування програми автоматизації процесу обліку (поставки та видачі) товарів для невеликого магазину. Математична постановка основних задач. Опис програмного інтерфейсу з користувачем.
курсовая работа [526,9 K], добавлен 07.10.2014Призначення драйверів та порядок роботи з драйверами в MS-DOS. Розробка драйверів консолі. Структура драйвера та призначення компонентів. Розробка структури алгоритму, програми налагодження драйвера. Опис змінних програми та роботи модулів програми.
курсовая работа [1,0 M], добавлен 22.06.2012Розробка програми калькулятора, що може виконувати найголовніші арифметичні операції над двома числами. Вимоги до апаратного і програмного забезпечення. Опис форм та компонентів програми. Розробка алгоритмів програмного забезпечення. Опис коду програми.
курсовая работа [57,1 K], добавлен 31.05.2013Дослідження середовища візуального програмування Delphi. Вивчення процесу створення навчальної програми "Електронний словник". Опис графічного інтерфейсу. Характеристика структури та основних процедур даної програми. Аналіз роботи з програмним кодом.
курсовая работа [831,2 K], добавлен 01.03.2014Створення програми для роботи з веб-камерою з автоматичним визначенням встановленої камери на комп'ютері. Характеристика апаратної конфігурації програми. Опис мови і середовища програмування. Розробка алгоритму, інструкції для програміста та користувача.
курсовая работа [1,2 M], добавлен 26.07.2013Розробка програми GameBox, яка включає в себе дві гри, судоку та пятнашки. Опис структури даних та вимоги до них, процедур і функцій користувача, стандартних процедур і функцій, які використовувались в програмі, та файлів. Результати роботи програми.
курсовая работа [5,3 M], добавлен 12.11.2011Загальний опис алгоритмів головної програми та процедур запису і зчитування повідомлень на рівні блок-схем, детальний опис розробленої програми на рівні програмного коду. Характеристика процедури відображення стану регістрів. Опис екранних форм програми.
курсовая работа [552,5 K], добавлен 09.06.2010Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.
курсовая работа [1,3 M], добавлен 23.06.2010Розв’язання нелінійних алгебраїчних рівнянь методом хорд. Опис структури програмного проекту та алгоритмів розв’язання задачі. Розробка та виконання тестового прикладу. Інші математичні способи знаходження коренів рівнянь, та опис виконаної програми.
курсовая работа [4,1 M], добавлен 28.09.2010Теоретичні відомості про пакет ІЗВП Borland Delphi та СУБД MS Access, оцінка їх функціональних особливостей. Опис структури бази даних. Проектування інтерфейсу програми, опис її логічної структури та функцій. Контроль коректності вхідних, вихідних даних.
курсовая работа [4,5 M], добавлен 03.01.2014Створення програми, що видає результати голосування та підсумки виборів. Алгоритм розробки програми. Опис структури даних та вимоги до них, стандартних процедур та функцій, файлів та їх призначення. Приклад тестування та результати роботи програми.
курсовая работа [1,0 M], добавлен 28.06.2012Принципи роботи команд мікросхеми 24LC08: читання, запису даних. Опис і блок-схеми програми і підпрограм, що обслуговує пристрій. Вибір середовища програмування і розробка програми, яка забезпечує можливість демонстрації команд. Проведення тестування.
курсовая работа [114,2 K], добавлен 08.12.2011Теоретичні відомості про язик С++. Розробка програми, що виконує основні арифметичні дії над простими та складними числами на язику С++. Опис алгоритму програми та її код. Інструкція по користуванню. Обгрунтовування вибору та складу технічних засобів.
курсовая работа [852,8 K], добавлен 30.11.2011Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.
курсовая работа [762,8 K], добавлен 03.05.2015Розробка програми автоматизації роботи з матрицями. Оформлення даних у вигляді матриць цілих чисел. Перелік операцій над матрицями, які реалізуються у програмі. Програмне забезпечення, мови програмування. Опис логічної структури та алгоритм програми.
курсовая работа [312,2 K], добавлен 01.04.2016Проектування програми керування мікропроцесорним пристроєм світлової індикації на мові С та Assembler. Розробка алгоритму роботи програми, структурної та електричної принципових схем. Здійснення комп’ютерного моделювання для перевірки розроблених програм.
курсовая работа [710,7 K], добавлен 04.12.2014Опис методів і алгоритмів вирішення задачі в середовищі розробки Myeclipse. Основні функції програмного продукту, його структура. Розробка алгоритму та програми, інструкція користувачу. Результати тестування, лістинг основних блоків. Вікно головного меню.
курсовая работа [1,8 M], добавлен 24.02.2014Поняття черги в програмуванні, основні операції з чергою і їх реалізація. Опис алгоритму й специфікація програми. Розробка додатку з використанням задачі Ларсона по опису зв'язного неорієнтованого графа. Алгоритм розв’язку і результати виконання програми.
курсовая работа [1,1 M], добавлен 14.09.2012