Файл: камчатский государственный технический университет.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2024

Просмотров: 32

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Рис 1. – изображение массива размера 6.

5.2 Стек


Стек характерен тем, что получить доступ к его элементом можно лишь с одного конца, называемого вершиной стека, иначе говоря: стек – структура данных, функционирующая по принципу LIFO (last in — first out, «последним пришёл — первым вышел»). Источник «www.intuit.ru»

Изобразить эту структуру данных лучше в виде вертикального списка, например, стопки каких-либо вещей, где чтобы воспользоваться одной из них нужно поднять все те вещи, что лежат выше нее, а положить предмет можно лишь на вверх стопки. Источник «https://yandex.ru/images/search?text=стек»



Рис 2. Пример работы структуры данных «Стек»

5.3 Очередь


Структура данных «Очередь» использует принцип организации FIFO (First In, First Out — «первым пришёл — первым вышел»). В некотором смысле такой метод более справедлив, чем тот, по которому функционирует стек, ведь простое правило, лежащее в основе привычных очередей в различные магазины, больницы считается вполне справедливым, а именно оно является базисом этой структуры.



Рис 3. Пример работы структуры данных «Очередь»

В данной курсовой работе используется структура данных двумерный массив. Двумерный массив – это одномерный массив, ячейка которого хранит одномерный массив. Так как эта позволяет хранить в себе поля значений, т.е. использование некого аналога объектов с требуемы полями. Данный тип структуры данных подходит для поставленной задачи.

6 Архитектура программы


После составления математической модели и выбор подходящей для задачи структуры данных, была проведена работа с построением архитектуры программы. Ниже предоставлена схема, разбитая на отдельные блоки, выполняющие определённо заданные функции.



Рис 4. Архитектура программы «Расчёта суммы кредита»

  1. Функция (Sort) – сортировка кредитов (полей матрицы) по заданному столбцу.

1.1) Функция (BubbleSort) – реализация базовой сортировки массива.

  1. Функция (countCredit) – подсчёт и вывод на консоль ежемесячного платежа и суммы кредита.

2.1) Функция (calculate) – реализует подсчёт кредитной ставки.

  1. Функция (Init) – заполнение двумерного массива специализированными данными.

  2. Функция (countAveragePrice) – подсчёт средней стоимости кредитного товара.

  3. Функция (countProductsQuantity) – подсчёт количества товара, стоимость которого выше 20 000 рублей.

  4. Функция (countTotalCreditPrice) – общая сумма товаров, взятых в кредит.

  5. Функция (printCredit) – вывод на консоль информацию о кредите.

  6. Функция (totalInitialFee) – сумма первоначального взноса всех кредитов.


Все блок-схемы подпрограмм можно найти в приложении.

7 Алгоритм решения задачи


Опираясь на математическую модель и архитектуру, предполагается написание программного обеспечения в которой: при запуске по происходит инициализация структуры данных, заполнение констант, обозначающих маркер столбца матрицы. После этого программа запускает все подпрограммы, вызванные в главном методе. Основными подпрограммами ПО являются:

  1. Заполнение матрицы специализированными в определенном диапазоне данными.

  2. Расчёт суммы кредита и ежемесячного платежа.

  3. Средняя стоимость товаров, проданных в кредит.

  4. Количество товаров, стоимость которых превышает 20 000 рублей.

  5. Сумму первоначальных взносов по всем кредитам.

  6. Сортировка кредитов по заданному значению.


8 Заключение


В ходе выполнения курсовой работы были выполнены следующие задачи:

  1. Был проведён анализ и выбор языка программирования для реализации поставленной задачи.

  2. Была составлена математическая модель для реализации поставленной задачи.

  3. Был проведен анализ базовых структур данных с учётом языка программирования и поставленной задачи и выбран наиболее подходящий вариант структуры данных.

  4. Была разработана архитектура программного обеспечения.

  5. Был разработан алгоритм и его реализация на выбранном языке для реализации поставленной задачи.

  6. Был разработан код программного обеспечения, который оптимизирован для решения поставленной задачи. Проведено тестирование на случайных данных.

  7. В ходе тестирования были выявлены незначительные отклонения, исправленные успешно.

В итоге была написана программа полностью соответствующая поставленной задаче. В дальнейшей разработке программа легко подвластная масштабированию и пере использованию реализованных подпрограмм в будущем функционале или в иных проектах.

Анализ и реализация данной задачи выполнена.

9 Список использованных источников




  1. Информатика и программирование : учебное пособие / И. А. Рычка. – Петропавловск-Камчатский : КамчатГТУ, 2014. – 230 с. Учебное пособие Информатика и программирование

  2. Основные структуры данных. [Электронный ресурс]. – 2018. – Режим доступа к ресурсу: https://kvodo.ru/data-structures-introduction.html.

  3. Популярные языки программирования [Электронный ресурс] – Режим доступа к ресурсу: https://ru.wikipedia.org/wiki/.

  4. Основные структуры данных. Матчасть. Азы [Электронный ресурс]. – 2017. – Режим доступа к ресурсу: https://habr.com/ru/post/422259/.

  5. Блок-схема [Электронный ресурс] – Режим доступа к ресурсу: https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0.

  6. Кредит. Основы [Электронный ресурс] – Режим доступа к ресурсу: https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B5%D0%B4%D0%B8%D1%82.

  7. Роберт С. Алгоритмы на Java / Седжвик Роберт. – Москва, издательство « Диасофт», 2013.- 688 с.



9 Приложения




Рис 5. Блок-схема функции countCredit.



Рис 6. Блок-схема функции calculate.



Рис 7. Блок-схема функции countTotalCreditPrice.



Рис 8. Блок-схема функции countproductsQuantity.



Рис 9. Блок-схема функции countAveragePrice.



Рис 10. Блок-схема метода bubbleSort



Рис 11. Блок-схема main.



12. Блок-схема функции sort.



Рис 13. Блок-схема функции init.



Рис 5. Блок-схема функции init



Рис 6. Блок-схема функции countAveragePrice



Рис 7. Блок-схема countCredit



Рис 8. Блок-схема функции sort

Код программы «Расчет суммы кредита»

package study;

import java.util.Random;

public class Main {

  /**

   * Предусмотреть заполнение входных данных датчиком случайных чисел,

   * вывод исходной информации на экран, наглядный вид результатов. Для

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

   * максимального и минимального значения в ней.

   * 


     * 1. Создать программу для расчета суммы кредита и ежемесячных платежей 20

   * клиентов, если известна стоимость товара, годовая процентная ставка,

   * первоначальный взнос и срок кредита. Рассчитать среднюю стоимость товаров,


   * проданных в кредит, количество товаров, стоимость которых превышает 20000

   * рублей, сумму первоначального взноса всех клиентов.

   *

   * @param args

   */

  private static final int[][] clientCredits = new int[20][5];

  private static final int price = 0;

  private static final int annualInterestRate = 1;

  private static final int anInitialFee = 2;

  private static final int creditTerm = 3;

  private static final int productsQuantity = 4;

  public static void main(String[] args) {

    init();

    countCredit();

    countProductsQuantity();

    countTotalCreditPrice();

    // price or annualInterestRate or anInitialFee or creditTerm or productsQuantity

    sort("price");

    totalInitialFee();

    countAveragePrice();

  }

  private static void printMatrix() {

    for (int i = 0; i < clientCredits.length; i++) {

      printCredit(clientCredits[i]);

    }

  }

  private static void totalInitialFee() {

    int res = 0;

    for (int i = 0; i < clientCredits.length; i++) {

      res += clientCredits[i][anInitialFee];

    }

    System.out.println("Total iinitial fee: " + res);

  }

  private static void sort(String column) {

    switch (column) {

      case "price":

        bubbleSort(price);

        break;

      case "annualInterestRate":

        bubbleSort(annualInterestRate);

        break;

      case "anInitialFee":

        bubbleSort(anInitialFee);

        break;

      case "creditTerm":

        bubbleSort(creditTerm);

        break;

      case "productsQuantity":

        bubbleSort(productsQuantity);

        break;

    }

  }

  private static void bubbleSort(int column) {

    int n = clientCredits.length;

    for (int i = 0; i < n - 1; i++)

      for (int j = 0; j < n - i - 1; j++)

        if (clientCredits[j][column] > clientCredits[j + 1][column]) {

          int[] temp = clientCredits[j];

          clientCredits[j] = clientCredits[j + 1];

          clientCredits[j + 1] = temp;

        }

  }

  private static void countAveragePrice() {

    int sumProductPrice = 0;

    int sumProductQuantity = 0;

    for (int i = 0; i < clientCredits.length; i++) {

      sumProductPrice += clientCredits[i][productsQuantity] * clientCredits[i][price];

      sumProductQuantity += clientCredits[i][productsQuantity];

    }

    System.out.println("Average price: " + sumProductPrice / sumProductQuantity);

  }

  private static void countProductsQuantity() {

    int res = 0;

    for (int i = 0; i < clientCredits.length; i++) {

      if (clientCredits[i][price] >= 20000)

        res += clientCredits[i][productsQuantity];

    }

    System.out.println("Total products quantity where price >=20 000: " + res);

  }

  private static void countTotalCreditPrice() {

    int res = 0;

    for (int i = 0; i < clientCredits.length; i++) {

      res += clientCredits[i][price];

    }

    System.out.println("Total products price: " + res);

  }

  private static void countCredit() {

    for (int clientNum = 0; clientNum < clientCredits.length; clientNum++) {

      int calculate = calculate(clientCredits[clientNum][price] - clientCredits[clientNum][anInitialFee],


              clientCredits[clientNum][creditTerm], clientCredits[clientNum][annualInterestRate]);

      System.out.println("+============CLIENT " + clientNum + "==============+");

      printCredit(clientCredits[clientNum]);

      System.out.print("Month pay: " + calculate);

      System.out.println("\tFull credit total: " + calculate * clientCredits[clientNum][creditTerm]);

    }

  }

  public static int calculate(int loan, double month, double interestRate) {

    double pow = Math.pow((1 + interestRate / 100 / 12), (month));

    return (int) (loan * ((interestRate / 100 / 12) * pow) / (pow - 1));

  }

  private static void init() {

    Random random = new Random();

    for (int i = 0; i < clientCredits.length; i++) {

      for (int i1 = 0; i1 < clientCredits[i].length; i1++) {

        if (i1 == price) {

          clientCredits[i][i1] = random.nextInt(100000) + 1000;

        } else if (i1 == annualInterestRate) {

          clientCredits[i][i1] = random.nextInt(50) + 1;

        } else if (i1 == anInitialFee) {

          clientCredits[i][i1] = random.nextInt(clientCredits[i][price] - clientCredits[i][price] / 2);

        } else if (i1 == creditTerm) {

          clientCredits[i][i1] = random.nextInt(24) + 2;

        } else if (i1 == productsQuantity) {

          clientCredits[i][i1] = random.nextInt(6) + 1;

        }

        System.out.print(clientCredits[i][i1] + " ");

      }

      System.out.println();

    }

  }

  private static void printCredit(int[] arr) {

    System.out.println("price : " + arr[price] + ", annualInterestRate: " + arr[annualInterestRate]

            + ", anInitialFee: " + arr[anInitialFee] + ", creditTerm: " + arr[creditTerm]);

  }

}