
Курсач технологии программированияV2
.pdf
Глава 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 |
|
Изм. |
Лист |
№ докум. |
Подп. |
Дата |
|
|
|
|