From b795f17e1994b28761647cc631afb359981df391 Mon Sep 17 00:00:00 2001 From: Giacomo Radaelli Date: Sat, 8 Apr 2023 16:09:45 +0200 Subject: [PATCH 1/3] 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()); + } +} From 76b1f794a4256f21c0fd4a0570ede2c21a3a3ae5 Mon Sep 17 00:00:00 2001 From: Giacomo Radaelli Date: Mon, 10 Apr 2023 14:18:38 +0200 Subject: [PATCH 2/3] Aggiornato Prodotti --- NetBeans Projects/Prodotti/Prodotti.jet | 1 + NetBeans Projects/Prodotti/Prodotti.png | Bin 0 -> 27587 bytes .../Prodotti/nbproject/build-impl.xml | 88 ++++++++++++------ .../Prodotti/nbproject/genfiles.properties | 6 +- .../nbproject/private/config.properties | 0 .../nbproject/private/private.properties | 8 +- .../Prodotti/nbproject/private/private.xml | 10 +- .../Prodotti/nbproject/project.properties | 10 +- .../Prodotti/nbproject/project.xml | 1 + .../Prodotti/src/prodotti/Alimentari.java | 37 +++++--- .../Prodotti/src/prodotti/DataFormattata.java | 41 ++++++++ .../Prodotti/src/prodotti/DataNumerica.java | 39 ++++++++ .../Prodotti/src/prodotti/ListaSpesa.java | 36 ++++--- .../Prodotti/src/prodotti/NonAlimentari.java | 11 ++- .../Prodotti/src/prodotti/Prodotti.java | 37 +++----- 15 files changed, 235 insertions(+), 90 deletions(-) create mode 100644 NetBeans Projects/Prodotti/Prodotti.jet create mode 100644 NetBeans Projects/Prodotti/Prodotti.png create mode 100644 NetBeans Projects/Prodotti/nbproject/private/config.properties create mode 100644 NetBeans Projects/Prodotti/src/prodotti/DataFormattata.java create mode 100644 NetBeans Projects/Prodotti/src/prodotti/DataNumerica.java diff --git a/NetBeans Projects/Prodotti/Prodotti.jet b/NetBeans Projects/Prodotti/Prodotti.jet new file mode 100644 index 0000000..4dc9527 --- /dev/null +++ b/NetBeans Projects/Prodotti/Prodotti.jet @@ -0,0 +1 @@ +{"diagram":"ClassDiagram","nodes":[{"methods":"+ applicaSconto()\n+ toString() : String","name":"NonAlimentari","x":540,"y":440,"attributes":"- materialePrincipale : String","id":2,"type":"ClassNode"},{"methods":"+ getCodiceBarre() : int\n+ getDescrizione() : String\n+ getPrezzo() : double\n+ applicaSconto()\n+ toString() : String\n+ equals(o : Object) : boolean\n+ hashCode() : int\n# setPrezzo(nuovoPrezzo : double)","name":"Prodotti","x":370,"y":120,"attributes":"- codiceBarre : int\n- descrizione : String\n- prezzo : double","id":0,"type":"ClassNode"},{"methods":"+ applicaSconto()\n+ toString() : String\n# setDate(oggi : DataFormattata)","name":"Alimentari","x":290,"y":430,"attributes":"- scadenza : DataNumerica","id":1,"type":"ClassNode"}],"edges":[{"Generalization Type":"Inheritance","start":2,"end":0,"type":"GeneralizationEdge"},{"Generalization Type":"Inheritance","start":1,"end":0,"type":"GeneralizationEdge"}],"version":"3.5"} diff --git a/NetBeans Projects/Prodotti/Prodotti.png b/NetBeans Projects/Prodotti/Prodotti.png new file mode 100644 index 0000000000000000000000000000000000000000..f258f364f868200c5eb2644ef4d972a76d674c57 GIT binary patch literal 27587 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 ZK_2TNh-jLFALlxBQO6irtY!D`{{W?|ED`_! literal 0 HcmV?d00001 diff --git a/NetBeans Projects/Prodotti/nbproject/build-impl.xml b/NetBeans Projects/Prodotti/nbproject/build-impl.xml index fb6628c..a90096a 100644 --- a/NetBeans Projects/Prodotti/nbproject/build-impl.xml +++ b/NetBeans Projects/Prodotti/nbproject/build-impl.xml @@ -119,7 +119,43 @@ is divided into following sections: - + + + + + + + + + + + + + + + + + + + + + + + + + + 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) + @@ -242,20 +278,6 @@ is divided into following sections: - - - - - - - - - - - - - - @@ -343,7 +365,7 @@ is divided into following sections: - + @@ -394,7 +416,7 @@ is divided into following sections: - + @@ -436,7 +458,7 @@ is divided into following sections: - + @@ -515,7 +537,7 @@ is divided into following sections: - + @@ -543,7 +565,7 @@ is divided into following sections: - + @@ -619,7 +641,7 @@ is divided into following sections: - + @@ -850,6 +872,9 @@ is divided into following sections: + + + @@ -899,7 +924,7 @@ is divided into following sections: - + @@ -933,7 +958,7 @@ is divided into following sections: - + @@ -965,7 +990,7 @@ is divided into following sections: - + @@ -1199,7 +1224,7 @@ is divided into following sections: To run this application from the command line without Ant, try: - java -jar "${dist.jar.resolved}" + ${platform.java} -jar "${dist.jar.resolved}" @@ -1301,8 +1326,8 @@ is divided into following sections: - - + + @@ -1495,16 +1520,19 @@ is divided into following sections: + + + - + - + - + diff --git a/NetBeans Projects/Prodotti/nbproject/genfiles.properties b/NetBeans Projects/Prodotti/nbproject/genfiles.properties index c371171..19157ee 100644 --- a/NetBeans Projects/Prodotti/nbproject/genfiles.properties +++ b/NetBeans Projects/Prodotti/nbproject/genfiles.properties @@ -1,8 +1,8 @@ -build.xml.data.CRC32=2fdcd13d +build.xml.data.CRC32=24751a7c build.xml.script.CRC32=7d6b168c 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=2fdcd13d -nbproject/build-impl.xml.script.CRC32=fc1dc10f +nbproject/build-impl.xml.data.CRC32=24751a7c +nbproject/build-impl.xml.script.CRC32=6509df98 nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.106.0.48 diff --git a/NetBeans Projects/Prodotti/nbproject/private/config.properties b/NetBeans Projects/Prodotti/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/NetBeans Projects/Prodotti/nbproject/private/private.properties b/NetBeans Projects/Prodotti/nbproject/private/private.properties index a2ad8bd..721cc40 100644 --- a/NetBeans Projects/Prodotti/nbproject/private/private.properties +++ b/NetBeans Projects/Prodotti/nbproject/private/private.properties @@ -1,2 +1,8 @@ compile.on.save=true -user.properties.file=/home/giacomo/.netbeans/17/build.properties +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/Prodotti/nbproject/private/private.xml b/NetBeans Projects/Prodotti/nbproject/private/private.xml index 1a110b8..f99e863 100644 --- a/NetBeans Projects/Prodotti/nbproject/private/private.xml +++ b/NetBeans Projects/Prodotti/nbproject/private/private.xml @@ -3,10 +3,12 @@ - file:/home/giacomo/NetBeansProjects/Prodotti/src/prodotti/Alimentari.java - file:/home/giacomo/NetBeansProjects/Prodotti/src/prodotti/Prodotti.java - file:/home/giacomo/NetBeansProjects/Prodotti/src/prodotti/NonAlimentari.java - file:/home/giacomo/NetBeansProjects/Prodotti/src/prodotti/ListaSpesa.java + file:/media/gicorada/Scuola/Anni%20Severi/22-23/Informatica/java-scuola/NetBeans%20Projects/Prodotti/src/prodotti/NonAlimentari.java + file:/media/gicorada/Scuola/Anni%20Severi/22-23/Informatica/java-scuola/NetBeans%20Projects/Prodotti/src/prodotti/ListaSpesa.java + file:/media/gicorada/Scuola/Anni%20Severi/22-23/Informatica/java-scuola/NetBeans%20Projects/Prodotti/src/prodotti/DataFormattata.java + file:/media/gicorada/Scuola/Anni%20Severi/22-23/Informatica/java-scuola/NetBeans%20Projects/Prodotti/src/prodotti/Prodotti.java + file:/media/gicorada/Scuola/Anni%20Severi/22-23/Informatica/java-scuola/NetBeans%20Projects/Prodotti/src/prodotti/Alimentari.java + file:/media/gicorada/Scuola/Anni%20Severi/22-23/Informatica/java-scuola/NetBeans%20Projects/Prodotti/src/prodotti/DataNumerica.java diff --git a/NetBeans Projects/Prodotti/nbproject/project.properties b/NetBeans Projects/Prodotti/nbproject/project.properties index be08150..1f503c5 100644 --- a/NetBeans Projects/Prodotti/nbproject/project.properties +++ b/NetBeans Projects/Prodotti/nbproject/project.properties @@ -1,9 +1,10 @@ annotation.processing.enabled=true annotation.processing.enabled.in.editor=false -annotation.processing.processor.options= annotation.processing.processors.list= annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=EsPasqua +application.vendor=gicorada build.classes.dir=${build.dir}/classes build.classes.excludes=**/*.java,**/*.form # This directory is removed when the project is cleaned: @@ -32,6 +33,7 @@ dist.jar=${dist.dir}/EsPasqua.jar dist.javadoc.dir=${dist.dir}/javadoc dist.jlink.dir=${dist.dir}/jlink dist.jlink.output=${dist.jlink.dir}/EsPasqua +endorsed.classpath= excludes= includes=** jar.compress=false @@ -44,8 +46,8 @@ javac.modulepath= javac.processormodulepath= javac.processorpath=\ ${javac.classpath} -javac.source=11 -javac.target=11 +javac.source=17 +javac.target=17 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} @@ -75,7 +77,7 @@ main.class=prodotti.ListaSpesa manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF mkdist.disabled=false -platform.active=default_platform +platform.active=Zulu_17.0.6_10 run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/NetBeans Projects/Prodotti/nbproject/project.xml b/NetBeans Projects/Prodotti/nbproject/project.xml index 4a17984..3bbe7d5 100644 --- a/NetBeans Projects/Prodotti/nbproject/project.xml +++ b/NetBeans Projects/Prodotti/nbproject/project.xml @@ -4,6 +4,7 @@ EsPasqua + diff --git a/NetBeans Projects/Prodotti/src/prodotti/Alimentari.java b/NetBeans Projects/Prodotti/src/prodotti/Alimentari.java index 67d8475..199842f 100644 --- a/NetBeans Projects/Prodotti/src/prodotti/Alimentari.java +++ b/NetBeans Projects/Prodotti/src/prodotti/Alimentari.java @@ -1,30 +1,41 @@ package prodotti; -import java.util.Date; - - - /** - * - * @author giacomo + * Classe che rappresenta Prodotti alimentari + * @author radaelli11353 */ public class Alimentari extends Prodotti { - Date scadenza; + private DataNumerica scadenza; + static DataNumerica oggi; - public Alimentari(int codiceBarre, String descrizione, double prezzo, Date scadenza) { + public Alimentari(int codiceBarre, String descrizione, double prezzo, DataNumerica scadenza) { super(codiceBarre, descrizione, prezzo); this.scadenza = scadenza; } + + //Necessario per impostare data di oggi a tutti gli Alimentari + public Alimentari() { + super(0, "", 0); + } + + /** + * Metodo che aggiorna la data del giorno attuale + * @param oggi Nuova data + */ + public void setDate(DataFormattata oggi) { + Alimentari.oggi = (DataNumerica) oggi; + } @Override public void applicaSconto() { - //condizione da implementare - if(true) { + int delta = scadenza.getDifference(oggi); + if(delta > -10 && delta < 0) { setPrezzo(getPrezzo() - getPrezzo()* 0.2); } } - - - + @Override + public String toString() { + return "Alimentari[" + getDescrizione() + ", " + getPrezzo() + "€, scade il " + scadenza.stringaFormattata() + ", codice a barre " + getCodiceBarre() + "]"; + } } diff --git a/NetBeans Projects/Prodotti/src/prodotti/DataFormattata.java b/NetBeans Projects/Prodotti/src/prodotti/DataFormattata.java new file mode 100644 index 0000000..d139013 --- /dev/null +++ b/NetBeans Projects/Prodotti/src/prodotti/DataFormattata.java @@ -0,0 +1,41 @@ +package prodotti; + +/** + * Classe che rappresenta una data senza fornire metodi per la formattazione + * @author radaelli11353 + */ +public abstract class DataFormattata implements Comparable { + private int giorno; + private int mese; + private int anno; + + public DataFormattata(int giorno, int mese, int anno) { + if(giorno >= 1 && giorno <= 31) this.giorno = giorno; + else throw new IllegalArgumentException("Il numero del giorno non è valido"); + if(mese >= 1 && mese <= 12) this.mese = mese; + else throw new IllegalArgumentException("Il numero del mese non è valido"); + this.anno = anno; + } + + protected int getGiorno() { + return giorno; + } + + protected int getMese() { + return mese; + } + + protected int getAnno() { + return anno; + } + + @Override + public int compareTo(DataFormattata o) { + if(this.anno != o.anno) return this.anno - o.anno; + if(this.mese != o.mese) return this.mese - o.mese; + return this.giorno - o.giorno; + } + + + public abstract String stringaFormattata(); +} diff --git a/NetBeans Projects/Prodotti/src/prodotti/DataNumerica.java b/NetBeans Projects/Prodotti/src/prodotti/DataNumerica.java new file mode 100644 index 0000000..b365b8f --- /dev/null +++ b/NetBeans Projects/Prodotti/src/prodotti/DataNumerica.java @@ -0,0 +1,39 @@ +package prodotti; + +/** + * Classe che rappresenta una data numerica + * @author radaelli11353 + */ +public class DataNumerica extends DataFormattata { + + public DataNumerica(int giorno, int mese, int anno) { + super(giorno, mese, anno); + } + + @Override + public String stringaFormattata() { + int g = getGiorno(); + int m = getMese(); + int a = getAnno(); + + String res = (g<10) ? "0"+g : ""+g; + res += "/"; + res += (m<10) ? "0"+m : "" + m; + + return res + "/" + a; + } + + /** + * Restituisce i giorni di differenza tra le due date + * @param o Altra data + * @return Differenza tra i giorni, Integer.MIN_VALUE se mese o anno diverso (per il problema del numero variabile di giorni al mese + */ + public int getDifference(DataNumerica o) { + //Provvisorio, per il problema del numero di giorni variabile. + //Non dovrebbe influire con l'esecuzione richesta da Alimentari, altrimenti andrebbe riscritto + if(getAnno() != o.getAnno() || getMese() != o.getMese()) return Integer.MIN_VALUE; + + return compareTo(o); + } + +} diff --git a/NetBeans Projects/Prodotti/src/prodotti/ListaSpesa.java b/NetBeans Projects/Prodotti/src/prodotti/ListaSpesa.java index e7a0b36..2a1eb51 100644 --- a/NetBeans Projects/Prodotti/src/prodotti/ListaSpesa.java +++ b/NetBeans Projects/Prodotti/src/prodotti/ListaSpesa.java @@ -2,35 +2,49 @@ package prodotti; import java.util.ArrayList; import java.util.Scanner; -import java.util.Date; /** - * - * @author giacomo + * Classe di test per Prodotti + * @author radaelli11353 */ public class ListaSpesa { public static void main(String[] args) { ArrayList listaSpesa = new ArrayList<>(); Scanner in = new Scanner(System.in); - System.out.println("Hai la tessera fedeltà?"); - boolean tessera = (in.next().equalsIgnoreCase(sì)) ? true : false; + //Metodo provvisorio per sistemare la data in tutti gli Alimentari + DataNumerica oggi = new DataNumerica(12, 2, 2023); + Alimentari a = new Alimentari(); + a.setDate(oggi); - System.out.println("Inserisci il numero di prodotti"); + + System.out.print("Hai la tessera fedeltà? (S/n) "); + boolean tessera = in.next().equalsIgnoreCase("s"); + + System.out.print("Inserisci il numero di prodotti: "); int n = in.nextInt(); for(int i = 0; i < n; i++) { - String tipoProdotto = in.next().toLowerCase(); - if(tipoProdotto.equals("alimentari")) { - System.out.println("Inserisci i dati del prodotto nel formato:\nCodiceBarre\ndescrizione\nprezzo\nscadenza"); - listaSpesa.add(new Alimentari(in.nextInt(), in.nextLine(), in.nextDouble(), new Date())); + System.out.print("Alimentari (a) o non alimentari (n)? (a/n) "); + char tipoProdotto = in.next().toLowerCase().charAt(0); + if(tipoProdotto == 'a') { + //System.out.println("Inserisci i dati del prodotto nel formato:\nCodiceBarre\ndescrizione\nprezzo\nscadenza"); + listaSpesa.add(new Alimentari(1234, "Prova alimentare", 10.00, new DataNumerica(10, 2, 2023))); + } else if(tipoProdotto == 'n') { + //System.out.println("Inserisci i dati del prodotto nel formato:\nCodiceBarre\ndescrizione\nprezzo\nmateriale principale"); + listaSpesa.add(new NonAlimentari(4321, "Prova non alimentare", 100.00, "vetro")); } } - double prezzo; + double prezzo = 0; + System.out.println("Elementi nella lista:"); for(Prodotti p : listaSpesa) { + if(tessera) p.applicaSconto(); prezzo += p.getPrezzo(); + System.out.println(p); } + + System.out.println("\n--- Prezzo finale: " + prezzo + "€ ---"); } } diff --git a/NetBeans Projects/Prodotti/src/prodotti/NonAlimentari.java b/NetBeans Projects/Prodotti/src/prodotti/NonAlimentari.java index 16df36e..593ca53 100644 --- a/NetBeans Projects/Prodotti/src/prodotti/NonAlimentari.java +++ b/NetBeans Projects/Prodotti/src/prodotti/NonAlimentari.java @@ -1,8 +1,8 @@ package prodotti; /** - * - * @author giacomo + * Classe che rappresenta Prodotti non alimentari + * @author radaelli11353 */ public class NonAlimentari extends Prodotti { String materiale; @@ -18,5 +18,12 @@ public class NonAlimentari extends Prodotti { setPrezzo(getPrezzo() - getPrezzo()* 0.1); } } + + @Override + public String toString() { + return "NonAlimentari[" + getDescrizione() + ", " + getPrezzo() + "€, fatto di " + materiale + ", codice a barre " + getCodiceBarre() + "]"; + } + + } diff --git a/NetBeans Projects/Prodotti/src/prodotti/Prodotti.java b/NetBeans Projects/Prodotti/src/prodotti/Prodotti.java index c3f4dca..cbbbfd1 100644 --- a/NetBeans Projects/Prodotti/src/prodotti/Prodotti.java +++ b/NetBeans Projects/Prodotti/src/prodotti/Prodotti.java @@ -2,14 +2,13 @@ package prodotti; import java.util.Objects; - - /** - * Class Prodotti + * Classe che rappresenta Prodotti generici + * @author radaelli11353 */ public class Prodotti { - private int codiceBarre; - private String descrizione; + private final int codiceBarre; + private final String descrizione; private double prezzo; public Prodotti(int codiceBarre, String descrizione, double prezzo) { @@ -19,29 +18,33 @@ public class Prodotti { } /** - * Get the value of codiceBarre - * @return the value of codiceBarre + * Ritorna il valore di codiceBarre + * @return valore di codiceBarre */ public int getCodiceBarre () { return codiceBarre; } /** - * Get the value of descrizione - * @return the value of descrizione + * Ritorna la descrizione + * @return descrizione */ public String getDescrizione () { return descrizione; } /** - * Get the value of prezzo - * @return the value of prezzo + * Ritorna il prezzo + * @return prezzo */ public double getPrezzo () { return prezzo; } + /** + * Modifica il prezzo + * @param nuovoPrezzo Prezzo nuovo + */ protected void setPrezzo(double nuovoPrezzo) { prezzo = nuovoPrezzo; } @@ -53,21 +56,11 @@ public class Prodotti { prezzo = prezzo - prezzo * 0.05; } - - /** - * - * @return String - */ @Override public String toString() { - return "Prodotto[descrizione: " + descrizione + ", prezzo:" + prezzo + ", codice a barre:" + codiceBarre; + return "Prodotto[" + descrizione + ", prezzo:" + prezzo + ", codice a barre:" + codiceBarre + "]"; } - - /** - * @param o - * @return boolean - */ @Override public boolean equals(Object o) { if(o == null) return false; From ea5a4f50c9870d533bc9bca25a80e5552578c509 Mon Sep 17 00:00:00 2001 From: Giacomo Radaelli Date: Wed, 12 Apr 2023 22:10:15 +0200 Subject: [PATCH 3/3] Aggiunta ricerca sequenziale e binaria Classe Research con test --- NetBeans Projects/Research/build.xml | 73 + .../Research/build/built-jar.properties | 4 + .../build/classes/.netbeans_automatic_build | 0 .../build/classes/.netbeans_update_resources | 0 NetBeans Projects/Research/dist/README.TXT | 32 + NetBeans Projects/Research/manifest.mf | 3 + .../Research/nbproject/build-impl.xml | 1799 +++++++++++++++++ .../Research/nbproject/genfiles.properties | 8 + .../nbproject/private/private.properties | 2 + .../Research/nbproject/private/private.xml | 10 + .../Research/nbproject/project.properties | 95 + .../Research/nbproject/project.xml | 16 + .../Research/src/research/Research.java | 40 + .../Research/src/research/Tester.java | 29 + 14 files changed, 2111 insertions(+) create mode 100644 NetBeans Projects/Research/build.xml create mode 100644 NetBeans Projects/Research/build/built-jar.properties create mode 100644 NetBeans Projects/Research/build/classes/.netbeans_automatic_build create mode 100644 NetBeans Projects/Research/build/classes/.netbeans_update_resources create mode 100644 NetBeans Projects/Research/dist/README.TXT create mode 100644 NetBeans Projects/Research/manifest.mf create mode 100644 NetBeans Projects/Research/nbproject/build-impl.xml create mode 100644 NetBeans Projects/Research/nbproject/genfiles.properties create mode 100644 NetBeans Projects/Research/nbproject/private/private.properties create mode 100644 NetBeans Projects/Research/nbproject/private/private.xml create mode 100644 NetBeans Projects/Research/nbproject/project.properties create mode 100644 NetBeans Projects/Research/nbproject/project.xml create mode 100644 NetBeans Projects/Research/src/research/Research.java create mode 100644 NetBeans Projects/Research/src/research/Tester.java diff --git a/NetBeans Projects/Research/build.xml b/NetBeans Projects/Research/build.xml new file mode 100644 index 0000000..4ce3b02 --- /dev/null +++ b/NetBeans Projects/Research/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project Research. + + + diff --git a/NetBeans Projects/Research/build/built-jar.properties b/NetBeans Projects/Research/build/built-jar.properties new file mode 100644 index 0000000..286abab --- /dev/null +++ b/NetBeans Projects/Research/build/built-jar.properties @@ -0,0 +1,4 @@ +#Wed, 12 Apr 2023 18:25:23 +0200 + + +/home/gicorada/NetBeansProjects/Research= diff --git a/NetBeans Projects/Research/build/classes/.netbeans_automatic_build b/NetBeans Projects/Research/build/classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/NetBeans Projects/Research/build/classes/.netbeans_update_resources b/NetBeans Projects/Research/build/classes/.netbeans_update_resources new file mode 100644 index 0000000..e69de29 diff --git a/NetBeans Projects/Research/dist/README.TXT b/NetBeans Projects/Research/dist/README.TXT new file mode 100644 index 0000000..7c39cc4 --- /dev/null +++ b/NetBeans Projects/Research/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "Research.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/NetBeans Projects/Research/manifest.mf b/NetBeans Projects/Research/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/NetBeans Projects/Research/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/Research/nbproject/build-impl.xml b/NetBeans Projects/Research/nbproject/build-impl.xml new file mode 100644 index 0000000..b5c72dc --- /dev/null +++ b/NetBeans Projects/Research/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/Research/nbproject/genfiles.properties b/NetBeans Projects/Research/nbproject/genfiles.properties new file mode 100644 index 0000000..fd04491 --- /dev/null +++ b/NetBeans Projects/Research/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=c8928208 +build.xml.script.CRC32=1d33b430 +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=c8928208 +nbproject/build-impl.xml.script.CRC32=8b411319 +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.106.0.48 diff --git a/NetBeans Projects/Research/nbproject/private/private.properties b/NetBeans Projects/Research/nbproject/private/private.properties new file mode 100644 index 0000000..e17ea87 --- /dev/null +++ b/NetBeans Projects/Research/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=/home/gicorada/.netbeans/17/build.properties diff --git a/NetBeans Projects/Research/nbproject/private/private.xml b/NetBeans Projects/Research/nbproject/private/private.xml new file mode 100644 index 0000000..717d2fc --- /dev/null +++ b/NetBeans Projects/Research/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/home/gicorada/NetBeansProjects/Research/src/research/Research.java + file:/home/gicorada/NetBeansProjects/Research/src/research/Tester.java + + + diff --git a/NetBeans Projects/Research/nbproject/project.properties b/NetBeans Projects/Research/nbproject/project.properties new file mode 100644 index 0000000..4bbba12 --- /dev/null +++ b/NetBeans Projects/Research/nbproject/project.properties @@ -0,0 +1,95 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +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}/Research.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/Research +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=17 +javac.target=17 +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=Research +main.class=research.Tester +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=Zulu_17.0.6_10 +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/Research/nbproject/project.xml b/NetBeans Projects/Research/nbproject/project.xml new file mode 100644 index 0000000..5506239 --- /dev/null +++ b/NetBeans Projects/Research/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + Research + + + + + + + + + + diff --git a/NetBeans Projects/Research/src/research/Research.java b/NetBeans Projects/Research/src/research/Research.java new file mode 100644 index 0000000..c3594b2 --- /dev/null +++ b/NetBeans Projects/Research/src/research/Research.java @@ -0,0 +1,40 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template + */ +package research; + +/** + * + * @author gicorada + */ +public class Research { + + public static int sequenziale(T oggetto, T[] array) { + for(int i = 0; i < array.length; i++) { + if(oggetto.compareTo(array[i]) == 0) return i; + } + return -1; + } + + public static int binario(T oggetto, T[] array) { + int primo = 0; //Primo elemento della parte selezionata + int ultimo = array.length - 1; //Ultimo elemento della parte selezionata + int medio; //Elemento centrale, idealmente l'elemento cercato + while(primo <= ultimo) { + medio = (primo + ultimo) / 2; + T ogMedio = array[medio]; + + if(oggetto.compareTo(ogMedio) < 0) ultimo = medio -1; + else { + if(oggetto.compareTo(ogMedio) > 0) { + primo = medio + 1; + } + else return medio; + } + } + + return -1; + } + +} diff --git a/NetBeans Projects/Research/src/research/Tester.java b/NetBeans Projects/Research/src/research/Tester.java new file mode 100644 index 0000000..d62f5f3 --- /dev/null +++ b/NetBeans Projects/Research/src/research/Tester.java @@ -0,0 +1,29 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package research; + +/** + * + * @author gicorada + */ +public class Tester { + public static void main(String[] args) { + int dim = 500000; + Integer[] lista = new Integer[dim]; + + for (int i = 0; i < dim; i++) { + lista[i] = i; + + } + + for (int i = 0; i < dim; i++) { + if(Research.sequenziale(i, lista) != Research.binario(i, lista)) { + System.out.println("ERRORE CON " + i); + } + + if(i % 10000 == 0) System.out.println("Arrivato a " + i); + } + } +}