From b795f17e1994b28761647cc631afb359981df391 Mon Sep 17 00:00:00 2001 From: Giacomo Radaelli Date: Sat, 8 Apr 2023 16:09:45 +0200 Subject: [PATCH] Aggiunto Inventory --- .gitignore | 1 + NetBeans Projects/Inventory/build.xml | 73 + NetBeans Projects/Inventory/manifest.mf | 3 + .../Inventory/nbproject/build-impl.xml | 1799 +++++++++++++++++ .../Inventory/nbproject/genfiles.properties | 8 + .../nbproject/private/config.properties | 0 .../nbproject/private/private.properties | 8 + .../Inventory/nbproject/private/private.xml | 7 + .../Inventory/nbproject/project.properties | 98 + .../Inventory/nbproject/project.xml | 16 + .../Inventory/src/inventory/Inventory.java | 98 + .../Inventory/src/inventory/Inventory.jet | 1 + .../Inventory/src/inventory/Inventory.png | Bin 0 -> 17032 bytes .../Inventory/src/inventory/Item.java | 73 + .../Inventory/src/inventory/Tester.java | 37 + 15 files changed, 2222 insertions(+) create mode 100644 NetBeans Projects/Inventory/build.xml create mode 100644 NetBeans Projects/Inventory/manifest.mf create mode 100644 NetBeans Projects/Inventory/nbproject/build-impl.xml create mode 100644 NetBeans Projects/Inventory/nbproject/genfiles.properties create mode 100644 NetBeans Projects/Inventory/nbproject/private/config.properties create mode 100644 NetBeans Projects/Inventory/nbproject/private/private.properties create mode 100644 NetBeans Projects/Inventory/nbproject/private/private.xml create mode 100644 NetBeans Projects/Inventory/nbproject/project.properties create mode 100644 NetBeans Projects/Inventory/nbproject/project.xml create mode 100644 NetBeans Projects/Inventory/src/inventory/Inventory.java create mode 100644 NetBeans Projects/Inventory/src/inventory/Inventory.jet create mode 100644 NetBeans Projects/Inventory/src/inventory/Inventory.png create mode 100644 NetBeans Projects/Inventory/src/inventory/Item.java create mode 100644 NetBeans Projects/Inventory/src/inventory/Tester.java diff --git a/.gitignore b/.gitignore index 1229e6f..f9c8a7c 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ hs_err_pid* /NetBeans Projects/BankAccount/nbproject/private/ /NetBeans Projects/BankAccount/build/ /NetBeans Projects/BankAccount/dist/ +/NetBeans Projects/Inventory/build/ diff --git a/NetBeans Projects/Inventory/build.xml b/NetBeans Projects/Inventory/build.xml new file mode 100644 index 0000000..d60ad7c --- /dev/null +++ b/NetBeans Projects/Inventory/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project Inventory. + + + diff --git a/NetBeans Projects/Inventory/manifest.mf b/NetBeans Projects/Inventory/manifest.mf new file mode 100644 index 0000000..1574df4 --- /dev/null +++ b/NetBeans Projects/Inventory/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/NetBeans Projects/Inventory/nbproject/build-impl.xml b/NetBeans Projects/Inventory/nbproject/build-impl.xml new file mode 100644 index 0000000..2e9b149 --- /dev/null +++ b/NetBeans Projects/Inventory/nbproject/build-impl.xml @@ -0,0 +1,1799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set platform.home + Must set platform.bootcp + Must set platform.java + Must set platform.javac + + The J2SE Platform is not correctly set up. + Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. + Either open the project in the IDE and setup the Platform with the same name or add it manually. + For example like this: + ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file) + or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + ${platform.java} -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NetBeans Projects/Inventory/nbproject/genfiles.properties b/NetBeans Projects/Inventory/nbproject/genfiles.properties new file mode 100644 index 0000000..da2aa07 --- /dev/null +++ b/NetBeans Projects/Inventory/nbproject/genfiles.properties @@ -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 diff --git a/NetBeans Projects/Inventory/nbproject/private/config.properties b/NetBeans Projects/Inventory/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/NetBeans Projects/Inventory/nbproject/private/private.properties b/NetBeans Projects/Inventory/nbproject/private/private.properties new file mode 100644 index 0000000..721cc40 --- /dev/null +++ b/NetBeans Projects/Inventory/nbproject/private/private.properties @@ -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 diff --git a/NetBeans Projects/Inventory/nbproject/private/private.xml b/NetBeans Projects/Inventory/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/NetBeans Projects/Inventory/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/NetBeans Projects/Inventory/nbproject/project.properties b/NetBeans Projects/Inventory/nbproject/project.properties new file mode 100644 index 0000000..290c72e --- /dev/null +++ b/NetBeans Projects/Inventory/nbproject/project.properties @@ -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 diff --git a/NetBeans Projects/Inventory/nbproject/project.xml b/NetBeans Projects/Inventory/nbproject/project.xml new file mode 100644 index 0000000..af13edf --- /dev/null +++ b/NetBeans Projects/Inventory/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + Inventory + + + + + + + + + + diff --git a/NetBeans Projects/Inventory/src/inventory/Inventory.java b/NetBeans Projects/Inventory/src/inventory/Inventory.java new file mode 100644 index 0000000..36b4213 --- /dev/null +++ b/NetBeans Projects/Inventory/src/inventory/Inventory.java @@ -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 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; + } +} diff --git a/NetBeans Projects/Inventory/src/inventory/Inventory.jet b/NetBeans Projects/Inventory/src/inventory/Inventory.jet new file mode 100644 index 0000000..f3906e9 --- /dev/null +++ b/NetBeans Projects/Inventory/src/inventory/Inventory.jet @@ -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"} diff --git a/NetBeans Projects/Inventory/src/inventory/Inventory.png b/NetBeans Projects/Inventory/src/inventory/Inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9e56cd9e011add4f61e27a41bad10176102c0a GIT binary patch literal 17032 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 H-h2E%Go!a^ literal 0 HcmV?d00001 diff --git a/NetBeans Projects/Inventory/src/inventory/Item.java b/NetBeans Projects/Inventory/src/inventory/Item.java new file mode 100644 index 0000000..e5254f3 --- /dev/null +++ b/NetBeans Projects/Inventory/src/inventory/Item.java @@ -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; + } +} diff --git a/NetBeans Projects/Inventory/src/inventory/Tester.java b/NetBeans Projects/Inventory/src/inventory/Tester.java new file mode 100644 index 0000000..bdd7d98 --- /dev/null +++ b/NetBeans Projects/Inventory/src/inventory/Tester.java @@ -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()); + } +}