Скачиваний:
6
Добавлен:
09.04.2023
Размер:
34.74 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

Кафедра Защищенных систем связи

Дисциплина Разработка защищенного программного обеспечения

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №4

Работа с классами

(тема отчета)

Направление/специальность подготовки

10.03.01 Информационная безопасность

(код и наименование направления/специальности)

Студент:

(Ф.И.О., № группы) (подпись)

Преподаватель:

Цветков А.Ю.

(Ф.И.О) (подпись)

Цель лабораторной работы

  1. Освоить работу с классами Java

Используемое программное обеспечение

  1. JDK 1.5 и выше.

  2. Интегрированная среда разработки на Java.

Задание на лабораторную работу

  1. Написать реализацию для интерфейса основной задачи, rzp.oop.transaction.TransactionController

  2. Написать реализацию для интерфейса дополнительной задачи, rzp.oop.transaction.TransactionControllerExtra

  3. Собрать исполняемый jar и отправить на проверку.

Основное задание:

package rzp.oop.transaction;

import java.util.List;

import java.util.Random;

public interface TransactionController {

    /**

     * Проверяет выполнение всех условий транзакции:

     * <ul>

     *     <li>Клиент имеет достаточное количество денег, чтобы купить все продукты</li>

     *     <li>Customer.time меньше, чем Transaction.expireTo на момент подтверждения транзакции</li>

     *     <li>У каждого продукта цена не отрицательна и не равна 0</li>

     * </ul>

     * Обязательно откатывает деньги клиента при ошибке транзакции

     *

     * @param transaction информация о транзакции

     * @param customer клиент, запросивший транзакцию

     * @return успех транзакции

     */

    boolean accept(Transaction transaction, Customer customer);

    

    /**

     * Предсказывает максимально возможное время клиента после проведения

     * транзакции<br>

     * Максимальное время покупки клиентом одного предмета - 99

     * @param customer клиент

     * @param products список продуктов

     * @return максимально возможное время клиента после покупки всех продуктов

     */

    long predictMaxCustomerTime(Customer customer, List<Product> products);

    

    final class Transaction {

        public final List<Product> products;

        public final long expireTo;

        

        public Transaction(List<Product> products, long expireTo) {

            this.products = products;

            this.expireTo = expireTo;

        }

    }

    

    final class Product {

        public final long price;

        

        public Product(long price) {

            this.price = price;

        }

    }

    

    final class Customer {

        private MoneyHolder money;

        private long time;

        

        public Customer(MoneyHolder money, long time) {

            this.money = money;

            this.time = time;

        }

        

        public void saveState() {

            this.money.saveState();

        }

        

        public void restoreState() {

            this.money.restoreState();

        }

        public long getTime() {

            return this.time;

        }

        

        public boolean buy(Product product) {

            money.setMoney(money.getMoney() - product.price);

            

            Random random = new Random();

            this.time += random.nextInt(50) + 50;

            

            return money.getMoney() >= 0;

        }

    }

    

    class MoneyHolder {

        private long money;

        private long savedMoney;

        

        public MoneyHolder(long money) {

            this.money = money;

        }

        

        public long getMoney() {

            return money;

        }

        

        public void setMoney(long money) {

            this.money = money;

        }

        

        public void saveState() {

            savedMoney = money;

        }

        

        public void restoreState() {

            money = savedMoney;

        }

    }

}

Листинг программного кода основного задания

import java.util.List;

import java.util.Random;

public class Main implements rzp.oop.transaction.TransactionController{

    public static void main(String[] args){}

    public boolean accept(Transaction transaction, Customer customer){

        boolean pricecorr = true;

        boolean buycorr = true;

        boolean buysucc;

        customer.saveState();

        for (int i = 0; i < transaction.products.size(); i++){

            

            buysucc = customer.buy(transaction.products.get(i));

            if (transaction.products.get(i).price <= 0 && buysucc){

                pricecorr = false;

                buysucc = false;

                break;

            }

        }

        

        if (buycorr && customer.getTime() < transaction.expireTo && pricecorr){

            return true;

        }else{

            customer.restoreState();

            return false;

        }

    }

    public long predictMaxCustomerTime(Customer customer, List<Product> products){

        long maxtime = 0;

        long arrsize = products.size();

        maxtime += customer.getTime() + arrsize * 99;

        return maxtime;

    }

    

}

Вариант дополнительного задания

package rzp.oop.transaction;

import java.util.List;

public interface TransactionControllerExtra extends TransactionController {

    /**

     * Проверяет выполнение всех условий хотя бы одной транзакции и выполняет её<br>

     * Обязательно откатывает состояние денег клиента при неудачах транзакций

     *

     * @param transactions список транзакций

     * @param customer клиент, запросивший транзакцию

     * @return успех хотя бы одной транзакции

     */

    boolean accept(List<Transaction> transactions, Customer customer);

}

Листинг программного кода дополнительного задания

import java.util.List;

import java.util.Random;

public class Dop extends Main implements rzp.oop.transaction.TransactionControllerExtra{

    public static void main(String[] args) {}

        /**

         * Проверяет выполнение всех условий хотя бы одной транзакции и выполняет её<br>

         * Обязательно откатывает состояние денег клиента при неудачах транзакций

         *

         * @param transactions список транзакций

         * @param customer клиент, запросивший транзакцию

         * @return успех хотя бы одной транзакции

         */

        public boolean accept(List<Transaction> transactions, Customer customer){

        boolean succtrans = false;

            for (int i = 0; i < transactions.size(); i++){

                boolean pricecorr = true;

                boolean buycorr = true;

                boolean buysucc;

                customer.saveState();

                for (int j = 0; j < transactions.get(i).products.size(); j++){

            

                    buysucc = customer.buy(transactions.get(i).products.get(j));

                    if (transactions.get(i).products.get(j).price <= 0 && buysucc){

                        pricecorr = false;

                        buysucc = false;

                        break;

                    }

                }

        

                if (buycorr && customer.getTime() < transactions.get(i).expireTo && pricecorr){

                    customer.saveState();

                    succtrans = true;

                }else{

                    customer.restoreState();

                }

            }

            if (succtrans){return true;}else{return false;}

            

        }

}

Вывод

Были получены навыки работы с классами и интерфейсами Java.

Санкт-Петербург

2021

Соседние файлы в предмете Разработка защищенного программного обеспечения