Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсач технологии программированияV2

.pdf
Скачиваний:
4
Добавлен:
09.11.2024
Размер:
826.46 Кб
Скачать

Глава 3. Расчеты и оценки.

3.1. Расчет по метрике указателей свойств.

Таблица 2 – Информационные характеристики ПО

Характеристика

 

Количество

Сложность

 

Итого

 

 

 

 

 

 

Внешние вводы, EI

 

3

4

12

 

 

 

 

 

 

Внешние выводы, EO

 

15

3

45

 

 

 

 

 

 

Внешние запросы, EIN

 

4

4

16

 

 

 

 

 

 

Внутренние логические

 

5

6

30

файлы, ILF

 

 

 

 

 

 

 

 

 

 

 

Внешние интерфейсные

 

6

5

30

файлы, ELF

 

 

 

 

 

 

 

 

 

 

 

Количество алгоритмов

 

0

3

0

 

 

 

 

 

 

Итого

 

33

25

84

 

 

 

 

 

Таблица 3 – Системные параметры.

 

 

 

 

 

 

 

Системный параметр

 

 

 

Значение

 

 

 

 

 

Передачи данных

 

 

 

3

 

 

 

 

Распределенная обработка данных

 

 

3

 

 

 

 

 

Производительность

 

 

 

3

 

 

 

Распространенность используемой конфигурации

 

2

 

 

 

 

 

Оперативный ввод данных

 

 

 

3

 

 

 

Эффективность работы конечного пользователя

 

4

 

 

 

 

 

Оперативное наблюдение

 

 

 

3

 

 

 

 

 

Сложность обработки

 

 

 

3

 

 

 

 

 

Повторная используемость

 

 

 

3

 

 

 

 

 

Легкость инсталляции

 

 

 

3

 

 

 

 

 

Легкость эксплуатации

 

 

 

3

 

 

 

 

Разнообразные условия размещения

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

32

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

Простота изменений

2

 

 

Итого:

31

 

 

Далее выполним расчеты метрики – количество функциональных показателей FP по формуле:

84*(0,65 + 0,01* 31) = 81

Далее FP пересчитаем в LOC: 30 * 81 = 2430

Разработка клиент-серверной программы, состоящей из 81 функциональных пунктов, оценивается в 5 месяцев.

3.2. Оценка быстродействия

Замеры скорости кнопки «Добавить в заказ».

00:00:00.0000823

00:00:00.0000856

00:00:00.0000889

00:00:00.0000922

00:00:00.0000855

00:00:00.0000832

00:00:00.0000878

00:00:00.0000911

00:00:00.0000865

Замеры скорости кнопки перехода в «Меню» и «Корзину».

00:00:00.0001234

00:00:00.0001356

00:00:00.0001489

00:00:00.0001522

00:00:00.0001456

00:00:00.0001389

00:00:00.0001523

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

33

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

00:00:00.0001654

00:00:00.0001598

Замеры скорости кнопки «Закзать».

00:00:00.0002345

00:00:00.0002567

00:00:00.0002890

00:00:00.0003234

00:00:00.0002987

00:00:00.0002765

00:00:00.0003123

00:00:00.0003456

00:00:00.0003289

Вывод: Система работает стабильно и быстро.

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

34

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

Заключение

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

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

Кроме того, приложение может быть использовано для продвижения заведения,

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

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

отслеживание статуса заказа, просмотр истории заказов, а также интеграция с системами лояльности и бонусными программами. Это позволит еще больше оптимизировать работу заведения общественного питания и повысить качество обслуживания посетителей

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

35

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

Список литературы

1.Киберфорум. Форум программистов и системных администраторов. URL: https://www.cyberforum.ru (дата обращения: 31.07.2024)

2.Android Developers. Официальный сайт разработчиков Android. URL: https://developer.android.com/ (дата обращения: 01.08.2024)

3.Java Documentation. Документация по языку программирования Java.

URL: https://docs.oracle.com/en/java/ (дата обращения: 01.08.2024)

4. Stack Overflow. Вопросы и ответы по программированию. URL: https://stackoverflow.com/ (дата обращения: 03.08.2024)

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

36

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

Приложение 1

package com.example.fooddeliveryapp1; import android.content.Intent;

import android.content.SharedPreferences; import android.os.Bundle;

import android.support.v7.app.AppCompatActivity; import android.util.Log;

import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;

import java.util.HashMap; import java.util.Map;

public class LoginActivity extends AppCompatActivity { public static final String PREFS_NAME = "MyPrefs"; public static final String USER_ID_KEY = "userId"; Connection connection;

Map<String, UserInfo> userCredentials = new HashMap<>(); @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login_page); EditText login = findViewById(R.id.editTextLogin);

EditText password = findViewById(R.id.editTextPassword); Button loginButton = findViewById(R.id.login_button); Button regButton = findViewById(R.id.register_button); SQL_Controller sql_con = new SQL_Controller(); connection = sql_con.connectionClass();

try {

String sqlStatement = "SELECT LOGIN, STATUS, ID FROM [deliveryDB].[dbo].[user_table]"; PreparedStatement ps = connection.prepareStatement(sqlStatement);

ResultSet set = ps.executeQuery(); while (set.next()) {

String loginStr = set.getString("LOGIN"); String status = set.getString("STATUS"); int id = set.getInt("ID");

userCredentials.put(loginStr, new UserInfo(status, id));

}

}catch (Exception e) { Log.e("Error: ", e.getMessage());

}

loginButton.setOnClickListener(view -> {

String enteredLogin = login.getText().toString();

String enteredPassword = password.getText().toString();

if (enteredLogin.isEmpty() || enteredPassword.isEmpty()) {

Toast.makeText(LoginActivity.this, "Please fill in all fields", Toast.LENGTH_SHORT).show(); } else {

UserInfo userInfo = userCredentials.get(enteredLogin); if (userInfo == null) {

Toast.makeText(LoginActivity.this, "User does not exist", Toast.LENGTH_SHORT).show(); login.setText("");

password.setText("");

}else {

//Save the user's ID in SharedPreferences

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

SharedPreferences.Editor editor = settings.edit();

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

37

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

editor.putInt(USER_ID_KEY, userInfo.getId()); editor.apply();

Intent intent;

switch (userInfo.getStatus()) { case "user":

intent = new Intent(LoginActivity.this, MainActivity.class); break;

case "admin":

intent = new Intent(LoginActivity.this, AdminMenuActivity.class); break;

default:

Toast.makeText(LoginActivity.this, "Invalid user", Toast.LENGTH_SHORT).show(); login.setText("");

password.setText("");

return;

}

startActivity(intent);

}

}

});

regButton.setOnClickListener(view -> {

Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); startActivity(intent);

});

}

private static class UserInfo { private final String status; private final int id;

public UserInfo(String status, int id) { this.status = status;

this.id = id;

}

public String getStatus() { return status;

}

public int getId() { return id;

}

}

}

package com.example.fooddeliveryapp1; import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity; import android.util.Log;

import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import java.sql.PreparedStatement; import java.util.ArrayList;

import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement;

public class MenuActivity extends AppCompatActivity {

private String getDescriptionFromDatabase(String itemName) { String description = "";

try {

SQL_Controller sql_con = new SQL_Controller();

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

38

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

Connection connection = sql_con.connectionClass();

String sqlStatement = "SELECT * FROM [deliveryDB].[dbo].[menu_table] WHERE NAME = ?"; PreparedStatement ps = connection.prepareStatement(sqlStatement);

ps.setString(1, itemName); ResultSet set = ps.executeQuery(); if (set.next()) {

description = set.getString("DESCRIPTION");

}

set.close();

ps.close();

connection.close(); } catch (Exception e) {

Log.e("Error: ", e.getMessage());

}

return description;

}

private String getPriceFromDatabase(String itemName) { String price = "";

try {

SQL_Controller sql_con = new SQL_Controller(); Connection connection = sql_con.connectionClass();

String sqlStatement = "SELECT * FROM [deliveryDB].[dbo].[menu_table] WHERE NAME = ?"; PreparedStatement ps = connection.prepareStatement(sqlStatement);

ps.setString(1, itemName); ResultSet set = ps.executeQuery(); if (set.next()) {

price = set.getString("PRICE");

}

set.close();

ps.close();

connection.close();

}catch (Exception e) { Log.e("Error: ", e.getMessage());

}

return price;

}

private String getIDFromDatabase(String itemName) { String id = "";

try {

SQL_Controller sql_con = new SQL_Controller(); Connection connection = sql_con.connectionClass();

String sqlStatement = "SELECT * FROM [deliveryDB].[dbo].[menu_table] WHERE NAME = ?"; PreparedStatement ps = connection.prepareStatement(sqlStatement);

ps.setString(1, itemName); ResultSet set = ps.executeQuery(); if (set.next()) {

id = set.getString("ID");

}

set.close();

ps.close();

connection.close();

}catch (Exception e) { Log.e("Error: ", e.getMessage());

}

return id;

}

Connection connection; @Override

protected void onCreate(Bundle savedInstanceState) {

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

39

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu_page); ListView listView = findViewById(R.id.menu_list); SQL_Controller sql_con = new SQL_Controller(); connection = sql_con.connectionClass();

try {

String sqlStatement = "Select * from [deliveryDB].[dbo].[menu_table]"; Statement smt = connection.createStatement();

ResultSet set = smt.executeQuery(sqlStatement); ArrayList<String> list = new ArrayList<String>(); while (set.next()) {

String str = set.getString("NAME"); list.add(str);

}

ArrayAdapter arrayAdapter = new ArrayAdapter(MenuActivity.this, android.R.layout.simple_list_item_1, list);

listView.setAdapter(arrayAdapter);

connection.close();

}catch (Exception e) { Log.e("Error: ", e.getMessage());

}

listView.setOnItemClickListener((parent, view, position, id) -> {

String selectedItemName = (String) parent.getItemAtPosition(position);

String selectedItemDescription = getDescriptionFromDatabase(selectedItemName); String selectedItemPrice = getPriceFromDatabase(selectedItemName);

String selectedItemID = getIDFromDatabase(selectedItemName); Intent intent = new Intent(MenuActivity.this, PositionInfo.class); intent.putExtra("selected_item_name", selectedItemName); intent.putExtra("selected_item_description", selectedItemDescription); intent.putExtra("selected_item_price", selectedItemPrice); intent.putExtra("selected_item_id", selectedItemID); startActivity(intent);

});

}

}

package com.example.fooddeliveryapp1; import android.content.Intent;

import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

import android.util.Log; import android.widget.Button;

import android.widget.EditText; import android.widget.Toast; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;

public class RegisterActivity extends AppCompatActivity { Connection connection;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); SQL_Controller sql_con = new SQL_Controller(); connection = sql_con.connectionClass();

EditText name = findViewById(R.id.editTextTextPersonName); EditText login = findViewById(R.id.editTextTextEmailAddress2); EditText phone = findViewById(R.id.editTextPhone);

EditText password = findViewById(R.id.editTextTextPassword2);

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

40

Изм.

Лист

№ докум.

Подп.

Дата

 

 

 

Button reg_finish = findViewById(R.id.reg_finish); reg_finish.setOnClickListener(view -> {

String regName = name.getText().toString(); String regNumber = phone.getText().toString(); String regLogin = login.getText().toString(); String regPass = password.getText().toString();

if (regName.isEmpty() || regNumber.isEmpty() || regLogin.isEmpty() || regPass.isEmpty()){

Toast.makeText(this, "Заполните все поля", Toast.LENGTH_SHORT).show();

}

else { try {

String sqlStatement = "Insert into [deliveryDB].[dbo].[user_table] (LOGIN, PASSWORD, STATUS, NAME, NUMBER) VALUES (?,?,?,?,?)";

PreparedStatement ps = connection.prepareStatement(sqlStatement); ps.setString(1, regLogin);

ps.setString(2, regPass); ps.setString(3, "user"); ps.setString(4, regName); ps.setString(5, regNumber); ps.executeUpdate();

Toast.makeText(this, "Успешно добавлено", Toast.LENGTH_SHORT).show(); connection.close();

}

catch (Exception e){

Log.e("Ошибка: ", e.getMessage());

}

Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); startActivity(intent);

}

});

}

}

package com.example.fooddeliveryapp1; import android.content.Intent;

import android.content.SharedPreferences; import android.os.Bundle;

import android.support.annotation.Nullable;

import android.support.v7.app.AppCompatActivity; import android.util.Log;

import android.widget.Button; import android.widget.ListView; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;

import java.util.ArrayList;

public class CartActivity extends AppCompatActivity { private ArrayList<CartItem> cartItems;

private CartAdapter cartAdapter; @Override

protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cart_page);

SharedPreferences settings = getSharedPreferences(LoginActivity.PREFS_NAME, 0); int userId = settings.getInt(LoginActivity.USER_ID_KEY, -1);

cartItems = new ArrayList<>();

cartAdapter = new CartAdapter(this, cartItems); ListView listView = findViewById(R.id.cartListView); listView.setAdapter(cartAdapter);

 

 

 

 

 

 

Лист

 

 

 

 

 

КП-09.03.02-11-638-ПЗ

 

 

 

 

 

 

41

Изм.

Лист

№ докум.

Подп.

Дата