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

Категория: Не указан

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

Добавлен: 03.12.2023

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

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

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

Данный текст проверяет, что после завершения работы программы в файл "users.out" были записаны корректные данные о профилях пользователей и файл существует.
На рисунке 11 продемонстрированы результаты прошедшего тестирования.



Рисунок 11 – Результат тестирования

5 Вывод


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

Во время разработки проекта «Фитнес-трекер» использовалась библиотека java.io и java.util. java.io необходим для хранения бинарных данных в сериализированном виде, а также чтения их и вывод на экран пользователя. java.util используется для подключения списков и ввода с клавиатуры.

Итоговое приложение соответствует заявленным требованиям. Наиболее важный модуль программы протестирован и исправно функционирует.

ПРИЛОЖЕНИЕ

Main


package Violet.WorkoutTracker;

import javax.naming.InvalidNameException;
import java.io.IOException;

public class Main {

public static void main(String[] args) throws IOException, InvalidNameException, ClassNotFoundException {
WorkoutSession workout = new WorkoutSession();
workout.run();
}

}

WorkoutSession


package Violet.WorkoutTracker;

import javax.naming.InvalidNameException;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;

public class WorkoutSession {
private boolean init = false;
private int userId = 0;
//private ArrayList workout;
private ArrayList
users;

public WorkoutSession(){
}

public boolean isInteger(Object object) {
if(object instanceof Integer) {
return true;
} else {
String string = object.toString();
try {
Integer.parseInt(string);
} catch(Exception e) {
return false;
}
}

return true;
}

public void readUsers() throws IOException, ClassNotFoundException {
Path currentPath = Paths.get("").toAbsolutePath();

String tmp = currentPath.toString() + "/users.out";
File f = new File(tmp);
if (!f.exists()) return;

FileInputStream fis = new FileInputStream("users.out");

boolean cont = true;
try ( ObjectInputStream input = new ObjectInputStream(fis)){
while(cont) {
ArrayList
obj = (ArrayList
) input.readObject();
if (obj != null) {
users = obj;
}
}
} catch (IOException | ClassNotFoundException e) {
cont = false;
}

}


public void login() throws IOException, ClassNotFoundException {

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String cmdOp;

while (!init) {

System.out.print("Do you have a profile?(y/n): ");
cmdOp = bufferedReader.readLine();

if (cmdOp.equals("y")) {

if (users.size() == 0) {
System.out.println("profiles do not exist");
continue;
}
System.out.println("Available profiles: ");
for (int i = 0; i < users.size(); i++) {
System.out.print(i + 1 + " " + users.get(i).getName() + "\n");
}

System.out.print("Select your profile:");
cmdOp = bufferedReader.readLine();

if (!isInteger(cmdOp)) {
System.out.println("Try again");
continue;
}

userId = Integer.parseInt(cmdOp) - 1;

if (userId >= users.size() || userId < 0) {
System.out.println("Wrong number, try again");
continue;
}

init = true;
break;

} else if (cmdOp.equals("n")) {

System.out.print("Write your name:");
cmdOp = bufferedReader.readLine();

if (cmdOp.equals("")){
System.out.println("Wrong name");
continue;
}
users.add(new Profile(cmdOp));
continue;

} else continue;
}
}

private void process(ArrayList workout) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String cmdOp;

while (init) {
System.out.println();
for (int i = 0; i < workout.size(); i++) {
System.out.print(i + 1 + " ");
workout.get(i).display();
}

System.out.print("Choose your workout: ");
cmdOp = bufferedReader.readLine();

if (!isInteger(cmdOp)) {
System.out.println("Write number and try again");
continue;
}

int exerciseId = Integer.parseInt(cmdOp);

if (exerciseId > workout.size() || exerciseId < 1) {
System.out.println("Wrong number, try again");
continue;
}

System.out.print("Start training?(y/n): ");
cmdOp = bufferedReader.readLine();

double start = 0, time = 0;
if (cmdOp.equals("y")) {
start = System.currentTimeMillis();
System.out.print("Write `stop` when you finish: ");
while (true) {
if (cmdOp.equals("stop")) {
time = (System.currentTimeMillis() - start) / (1e3 * 3600 * 1000);
workout.get(exerciseId - 1).allCal += time * workout.get(exerciseId - 1).getCalPerHour();
break;
}
cmdOp = bufferedReader.readLine();
if (!cmdOp.equals("stop")){
System.out.print("Please, write word correctly(`stop`):");
}
}
} else continue;

System.out.print("Time = " + time + " hour " + "\nyou spent " + workout.get(exerciseId - 1).allCal + " cal\n" +
"your " + workout.get(exerciseId - 1).getType() + " was amazing, continue?(y/n): ");

users.get(userId).addCal( workout.get(exerciseId - 1).allCal);
users.get(userId).addTime( time );

workout.get(exerciseId - 1).clear();

cmdOp = bufferedReader.readLine();

if (cmdOp.equals("y")) {
continue;
} else if (cmdOp.equals("n")) {
System.out.println("\n\nWell done " + users.get(userId).getName() + ", whole time = " + users.get(userId).getTime() + " hour " + "\nyou spent " + users.get(userId).getCal() + " cal");
break;
} else System.out.println("Wrong, break");

break;
}
}

public ArrayList createWorkout(){
ArrayList exercise = new ArrayList<>();
exercise.add(new Training("push_ups", 345.0));
exercise.add(new Training("jump rope", 413.0));
exercise.add(new Training("squats", 284.1));
return exercise;
}

public void run() throws IOException, InvalidNameException, ClassNotFoundException {

ArrayList workout = createWorkout();
users = new ArrayList
();
readUsers();
login();
process(workout);

FileOutputStream fos = new FileOutputStream( "users.out" );
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(users);
out.close();
}
}

Profile


package Violet.WorkoutTracker;

import java.io.Serializable;

public class Profile implements Serializable {
private String name;
private double allCal = 0;
private double allTime = 0;

Profile(String name){
this.name = name;
}

public void addTime(double dt){
this.allTime += dt;
}

public void addCal(double new_cal){
this.allCal += new_cal;
}


public String getName(){
return this.name;
}

public double getTime(){
return this.allTime;
}

public double getCal(){
return this.allCal;
}
}

Training


package Violet.WorkoutTracker;

public class Training{
private String type;
private double calPerHour;
public double allCal;

Training(String type, double calPerHour){
this.type = type;
this.calPerHour = calPerHour;
}

public double getCalPerHour(){
return calPerHour;
}

void display(){
System.out.println(type);
}

String getType(){ return type; }

void clear(){
allCal = 0.0;
}
}

TestWorkout


package Violet.WorkoutTracker;

import org.junit.Assert;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;

import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

public class TestWorkout {
@Test
public void testFunc() throws Exception{
WorkoutSession app = new WorkoutSession();
// проверка функций
String word = "q";
Assert.assertFalse(app.isInteger(word));

ArrayList wrkt = app.createWorkout();

for (int i = 0; i < wrkt.size(); i++) {
assertTrue( wrkt.get(i).getCalPerHour() >= 0);
}

}
@Test
public void testAfterWork() throws Exception{
//сначала запускается программа, потом уже проверяется
//после окончания функции обязаельно:
// -должен существовать файл для сериализации
// -должен быть как минимум 1 профиль, после правильного завершения прог.

Path currentPath = Paths.get("").toAbsolutePath();

String tmp = currentPath.toString() + "/users.out";

File f = new File(tmp);

Assert.assertEquals(true, f.exists());

ArrayList
users = new ArrayList<>();
FileInputStream fis = new FileInputStream("users.out");
boolean cont = true;
try ( ObjectInputStream input = new ObjectInputStream(fis)){
while(cont) {
ArrayList
obj = (ArrayList
) input.readObject();
if (obj != null) {
users = obj;
}
}
} catch (IOException | ClassNotFoundException e) {
cont = false;
}

Assert.assertNotEquals(0, users.size());
}

}