Aggiunto Inventory

This commit is contained in:
Giacomo R. 2023-04-08 16:09:45 +02:00
parent d43a183326
commit b795f17e19
15 changed files with 2222 additions and 0 deletions

1
.gitignore vendored
View File

@ -34,3 +34,4 @@ hs_err_pid*
/NetBeans Projects/BankAccount/nbproject/private/
/NetBeans Projects/BankAccount/build/
/NetBeans Projects/BankAccount/dist/
/NetBeans Projects/Inventory/build/

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="Inventory" default="default" basedir=".">
<description>Builds, tests, and runs the project Inventory.</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar: JAR building
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="Inventory-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
</project>

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
build.xml.data.CRC32=ec0e7c8c
build.xml.script.CRC32=7b7b3108
build.xml.stylesheet.CRC32=f85dc8f2@1.106.0.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=ec0e7c8c
nbproject/build-impl.xml.script.CRC32=7dee9c4b
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.106.0.48

View File

@ -0,0 +1,8 @@
compile.on.save=true
do.depend=false
do.jar=true
do.jlink=false
javac.debug=true
javadoc.preview=true
jlink.strip=false
user.properties.file=/home/gicorada/.netbeans/17/build.properties

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group/>
</open-files>
</project-private>

View File

@ -0,0 +1,98 @@
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
annotation.processing.processors.list=
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=Inventory
application.vendor=gicorada
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
build.dir=build
build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket
debug.classpath=\
${run.classpath}
debug.modulepath=\
${run.modulepath}
debug.test.classpath=\
${run.test.classpath}
debug.test.modulepath=\
${run.test.modulepath}
# Files in build.classes.dir which should be excluded from distribution jar
dist.archive.excludes=
# This directory is removed when the project is cleaned:
dist.dir=dist
dist.jar=${dist.dir}/Inventory.jar
dist.javadoc.dir=${dist.dir}/javadoc
dist.jlink.dir=${dist.dir}/jlink
dist.jlink.output=${dist.jlink.dir}/Inventory
endorsed.classpath=
excludes=
includes=**
jar.compress=false
javac.classpath=
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.external.vm=true
javac.modulepath=
javac.processormodulepath=
javac.processorpath=\
${javac.classpath}
javac.source=16
javac.target=16
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
javac.test.modulepath=\
${javac.modulepath}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
javadoc.author=false
javadoc.encoding=${source.encoding}
javadoc.html5=false
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
# The jlink additional root modules to resolve
jlink.additionalmodules=
# The jlink additional command line parameters
jlink.additionalparam=
jlink.launcher=true
jlink.launcher.name=Inventory
main.class=inventory.Tester
manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false
platform.active=Zulu_17.0.6_10
project.license=apache20
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
# Space-separated list of JVM arguments used when running the project.
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
# To set system properties for unit tests define test-sys-prop.name=value:
run.jvmargs=
run.modulepath=\
${javac.modulepath}
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
run.test.modulepath=\
${javac.test.modulepath}
source.encoding=UTF-8
src.dir=src
test.src.dir=test

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.java.j2seproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>Inventory</name>
<explicit-platform explicit-source-supported="true"/>
<source-roots>
<root id="src.dir"/>
</source-roots>
<test-roots>
<root id="test.src.dir"/>
</test-roots>
</data>
</configuration>
</project>

View File

@ -0,0 +1,98 @@
/*
* Copyright 2023 radaelli11353.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package inventory;
import java.util.ArrayList;
/**
* Metodo che simula un inventario
* @author radaelli11353
*/
public class Inventory {
private ArrayList<Item> list;
/**
* Costruttore
*/
public Inventory() {
list = new ArrayList<>();
}
/**
* Aggiunge un oggetto all'inventario.
* @param name Nome dell'oggetto
* @param quantity Quantità iniziale
* @param price Prezzo unitario dell'oggetto
*/
public void addItem(String name, int quantity, double price) {
list.add(new Item(name, quantity, price));
}
/**
* Aggiunge una quantità di oggetti già presenti.
* Se gli oggetti non sono presenti nell'inventario, non fa niente
* @param itemName Nome dell'oggetto da ricercare
* @param quantity Quantità da aggiungere all'oggetto
*/
public void increaseQuantity(String itemName, int quantity) {
for(int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals(itemName)) {
list.get(i).modifyQuantity(quantity);
return;
}
}
}
/**
* Diminuisce di una quantità oggetti già presenti.
* Utilizza increaseQuantity per diminuire in numero di oggetti
* @param itemName Nome dell'oggetto da ricercare
* @param quantity Quantità da rimuovere all'oggetto
*/
public void decreaseQuantity(String itemName, int quantity) {
if(quantity < 0) quantity = -quantity;
increaseQuantity(itemName, -quantity);
}
/**
* Resistuisce la quantità di oggetti di un determinato tipo presenti.
* @param itemName Nome dell'oggetto da ricercare
* @return Numero degli item presenti nell'Inventory, -1 se non presenti
*/
public int getQuantity(String itemName) {
for(int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals(itemName)) {
return list.get(i).getQuantity();
}
}
return -1;
}
/**
* Restituisce il valore complessivo di tutti gli oggetti dell'inventario.
* @return Valore complessivo dell'inventario
*/
public double getTotalValue() {
double totalValue = 0;
for(Item i : list) {
totalValue += i.getPrice() * i.getQuantity();
}
return totalValue;
}
}

View File

@ -0,0 +1 @@
{"diagram":"ClassDiagram","nodes":[{"methods":"+additem(name: String, quantity: int, price: double): void\n+increaseQuantity(itemName: String, quantity: int): void\n+decreaseQuantity(itemName: String, quantity: int): void\n+getQuantity(itemName: String): void\n+getTotalValue(): double","name":"Inventory","x":380,"y":100,"attributes":"","id":0,"type":"ClassNode"},{"methods":"#getName(): String\n#getQuantity(): int\n#getPrice(): double","name":"Item","x":840,"y":100,"attributes":"-name: String\n-quantity: int\n-price: double","id":1,"type":"ClassNode"}],"edges":[],"version":"3.5"}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,73 @@
/*
* Copyright 2023 radaelli11353.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package inventory;
/**
* Classe che simula un oggetto con nome, quantità e prezzo
* @author radaelli11353
*/
public class Item {
private String name;
private int quantity;
private double price;
/**
* Costruttore parametrico completo
* @param name Nome dell'oggetto
* @param quantity Quantità iniziale
* @param price Prezzo dell'oggetto
*/
public Item(String name, int quantity, double price) {
if(quantity < 0) throw new IllegalArgumentException();
if(price < 0) throw new IllegalArgumentException();
this.name = name;
this.quantity = quantity;
this.price = price;
}
/**
* Modifica la quantità dell'oggetto
* @param modifier
*/
protected void modifyQuantity(int modifier) {
if(!(quantity + modifier >= 0)) throw new IllegalArgumentException("La quantità minima per oggetto è 0");
quantity += modifier;
}
/**
* Getter nome
* @return Nome oggetto
*/
public String getName() {
return name;
}
/**
* Getter quantità
* @return Quantità degli oggetti
*/
public int getQuantity() {
return quantity;
}
/**
* Getter prezzo
* @return Prezzo dell'oggetto
*/
public double getPrice() {
return price;
}
}

View File

@ -0,0 +1,37 @@
/*
* Copyright 2023 radaelli11353.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package inventory;
/**
* Classe di test per Inventory
* @author gicorada
*/
public class Tester {
public static void main(String[] args) {
Inventory inv = new Inventory();
inv.addItem("Prova1", 5, 10.00);
System.out.println(inv.getQuantity("Prova1"));
inv.increaseQuantity("Prova1", 7);
System.out.println(inv.getQuantity("Prova1"));
inv.decreaseQuantity("Prova1", 2);
System.out.println(inv.getQuantity("Prova1"));
System.out.println(inv.getTotalValue());
}
}