Programma in c#

Dan7e

Utente Attivo
761
65
CPU
i5 750
Scheda Madre
Asus P7P55D
HDD
meccanico
RAM
4 GB 1600 Mhz Corsair
GPU
Nvidia Gtx 275
Monitor
Samsun 24"
PSU
corsair 550 W
Case
cooler master centurion
OS
W7 64 bit
Buongiorno,

sono un neofita nello sviluppo in c#. Al lavoro (studio ingegneria) ho sviluppato alcuni programmi semplici in vb e per un cliente importante vorrei convertire il programma che sto sviluppando su Excel/vbb in c#. Nel mio programmino ho molti dati che ora sono strutturati all’interno di tabelle Excel e per dirla semplicemente devo prendere quei dati e utilizzarli per dei calcoli e alla fine semplicemente esportare i risultati.
Vorrei capire come posso gestire tutte queste tabelle di dati e se qualcuno potesse gentilmente indirizzarmi su come usualmente si gestiscono in un caso come il mio in modo che possa studiarlo. Il programma è semplice si tratta di prendi un dato da una tabella X moltiplicalo per Y e così via. Ma visto che la mole di dati è ampia non posso pensare che sia l’utente che compili tutti i campi ogni volta

grazie a tutti
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,224
1,855
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Dovresti dare più dettagli, comunque sicuramente un database ti tornerebbe utile.

Però dovresti fare almeno qualche esempio con dati reali.
 
  • Mi piace
Reazioni: BAT

Dan7e

Utente Attivo
761
65
CPU
i5 750
Scheda Madre
Asus P7P55D
HDD
meccanico
RAM
4 GB 1600 Mhz Corsair
GPU
Nvidia Gtx 275
Monitor
Samsun 24"
PSU
corsair 550 W
Case
cooler master centurion
OS
W7 64 bit
Grazie per la risposta domani posterò un set di dati in modo che tu possa capire meglio
IMG_7177.jpeg
Questa è una tabella tipica. L’utente deve scegliere ad esempio C24 e io devo da prima salvare le corrispondenti proprietà all’interno di variabili e poi usarli nei calcoli
IMG_7178.jpeg
Altro esempio utente sceglie il diametro della vite e in base al catalogo devo salvare le corrispondenti proprietà che poi verranno utilizzate per il calcolo della resistenza
 
Ultima modifica da un moderatore:

bigendian

Utente Attivo
766
436
OS
Linux
Ma perche non continuare a usare visual basic o magari visual c etc da excel stesso ? Mi pare visual C si potesse usare, che e' ottimo.
 

Dan7e

Utente Attivo
761
65
CPU
i5 750
Scheda Madre
Asus P7P55D
HDD
meccanico
RAM
4 GB 1600 Mhz Corsair
GPU
Nvidia Gtx 275
Monitor
Samsun 24"
PSU
corsair 550 W
Case
cooler master centurion
OS
W7 64 bit
Ma perche non continuare a usare visual basic o magari visual c etc da excel stesso ? Mi pare visual C si potesse usare, che e' ottimo.
Perché l’idea è di creare alla fine un installer. I file Excel sono craccabili in modo molto semplice e non si vorrebbe dare al cliente la possibilità di modificare il programma o in casi estremi che il cliente ci molli subito visto che poi non h a più bisogno della consulenza in modo continuativo
 

bigendian

Utente Attivo
766
436
OS
Linux
un idea, ma non sono espertissimo nel settore

Dare al cliente un indirizzo web, dove sceglie la vite.
I calcoli li fa un backend lato server, tipo php (o roba piu aggiornata del php), cosi lui non sa quali calcoli fai.

Eviti di dargli altri installer ad ogni aggiornamento
 
  • Mi piace
Reazioni: DispatchCode

Dan7e

Utente Attivo
761
65
CPU
i5 750
Scheda Madre
Asus P7P55D
HDD
meccanico
RAM
4 GB 1600 Mhz Corsair
GPU
Nvidia Gtx 275
Monitor
Samsun 24"
PSU
corsair 550 W
Case
cooler master centurion
OS
W7 64 bit
un idea, ma non sono espertissimo nel settore

Dare al cliente un indirizzo web, dove sceglie la vite.
I calcoli li fa un backend lato server, tipo php (o roba piu aggiornata del php), cosi lui non sa quali calcoli fai.

Eviti di dargli altri installer ad ogni aggiornamento
Sto studiando c# a livello personale quindi mi piaceva l’idea di usare quello. Il sito web sarebbe una qualcosa in cui partire proprio da zero
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,224
1,855
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Finalmente riesco a risponderti... tutte le volte che ero al pc, me ne scordavo.

Allora, magari sono dati che non cambieranno mai (nel senso, che non servirà aggiungerli o toglierli dall'insieme che gestisci) ma io lo prevederei.
Gestirei il tutto con un database; considerando il tipo di applicazione, ti direi di partire con SQLite. Così lo porti in giro con l'applicazione e ti eviti installazioni e dipendenze varie da gestire.

Andresti a popolare le tabelle del tuo database con tutti i dati che ci sono li presenti. Potrebbe non essere proprio immediata come struttura; in generale per ogni record (riga di dati nella tabella del db) dovrai popolare tutti i campi che hai nella prima colonna (pressione, trazione parallela etc etc). Queste saranno di fatto le tue colonne della tabella del db.

Quindi sia il "codice" (C14, C16 etc etc) che le voci della prima colonna, saranno colonne del tuo database. Quando l'utente sceglie C18, tu farai una cosa tipo (esempio):

(il nome della tabella lo darò poco sensato immagino, non conoscendo di che si tratta nello specifico)
SQL:
SELECT * FROM tbl_resistenze WHERE codice='C20';

Puoi anche avere un tipo di struttura diversa, dipende da come vuoi impostare i tuoi dati. Ti potrebbe servire una colonna ulteriore per capire la "tipologia" (salvata come id numerico), che andrà mappata in un'altra tabella ("pioppo e conifere", "latifoglie" etc. dipende se ti serve come dato anche).

Un'altra alternativa: ti fai una tabella con i "codici" (C14, C16 etc) ed eventualmente altre proprietà che ti servono (e qui ci aggiungi la "tipologia" di cui sopra) e poi nell'altra tabella setti le specifiche associandole al codice. Questa tabella avrà come colonne ciò che hai nella colonna 1 nella prima immagine; in più avrà come colonna il "codice", tipo "id_codice", che sarà l'ID dell'elemento nella tabella codici.
Quest'ultimo che ti ho descritto è meglio del primo. In questo caso per tirar fuori i dati di C20, farai tipo:

SQL:
SELECT * FROM tbl_resistenze WHERE id_codice=4;

se ti servono i dati della "tabella dei codici" dovrai fare una join, eg tipo:

SQL:
SELECT * FROM tbl_resistenze JOIN tbl_codici ON tbl_codici.id = id_codice WHERE id_codice=4;

(sono un pò arrugginito non tocco SQL da 1 annetto buono :D ma penso sia corretto anche sintatticamente)

Ad ogni modo un database lo devi avere, scordati di memorizzare tutto senza un DB. Questo vale anche se ti fai un'applicazione web, come suggerito da bigendian: in questo caso puoi usare MySQL..

E' MOLTO più veloce e semplice se fai un software web con backend in PHP (per esempio) e con grafica HTML+CSS (+ JS) rispetto a un software in C#, però dipende quanto conosci già le librerie grafiche con quest'ultimo.

Il vantaggio di avere un DB è anche in caso di aggiunta di un "C100", lo puoi fare molto semplicemente (puoi fare anche una parte del sw dedicata proprio alla gestione di queste tabelle interne).

Io ho immaginato questo tipo di struttura, ma considera che se hai tabelle identiche con i medesimi dati (colonne del db) puoi anche usare strutture diverse per gestire i dati; dipende bene cosa dovrai memorizzare. Ti consiglio di studiare anche SQL comunque, se non lo conosci.

Ah, in merito al non dare al cliente i dati, la cosa migliore è stare sul web: il tutto sarebbe gestito dal backend, quindi il cliente non potrebbe fare nulla (mi ero perso questa parte, sorry).

PS: non l'ho precisato, ma se ogni riga è calcolata mediante formule, allora ti basta il primo valore, così il cliente non sa che formula usi (e puoi fare il db locale e darlo al cliente, tanto solo del primo valore non saprebbe che farsene). In tal caso però puoi anche ripensare la cosa evitando un database.

Tieni a mente che reversare un programma in C# se non protetto è un gioco da ragazzi comunque.
 
  • Mi piace
Reazioni: bigendian

Dan7e

Utente Attivo
761
65
CPU
i5 750
Scheda Madre
Asus P7P55D
HDD
meccanico
RAM
4 GB 1600 Mhz Corsair
GPU
Nvidia Gtx 275
Monitor
Samsun 24"
PSU
corsair 550 W
Case
cooler master centurion
OS
W7 64 bit
Finalmente riesco a risponderti... tutte le volte che ero al pc, me ne scordavo.

Allora, magari sono dati che non cambieranno mai (nel senso, che non servirà aggiungerli o toglierli dall'insieme che gestisci) ma io lo prevederei.
Gestirei il tutto con un database; considerando il tipo di applicazione, ti direi di partire con SQLite. Così lo porti in giro con l'applicazione e ti eviti installazioni e dipendenze varie da gestire.

Andresti a popolare le tabelle del tuo database con tutti i dati che ci sono li presenti. Potrebbe non essere proprio immediata come struttura; in generale per ogni record (riga di dati nella tabella del db) dovrai popolare tutti i campi che hai nella prima colonna (pressione, trazione parallela etc etc). Queste saranno di fatto le tue colonne della tabella del db.

Quindi sia il "codice" (C14, C16 etc etc) che le voci della prima colonna, saranno colonne del tuo database. Quando l'utente sceglie C18, tu farai una cosa tipo (esempio):

(il nome della tabella lo darò poco sensato immagino, non conoscendo di che si tratta nello specifico)
SQL:
SELECT * FROM tbl_resistenze WHERE codice='C20';

Puoi anche avere un tipo di struttura diversa, dipende da come vuoi impostare i tuoi dati. Ti potrebbe servire una colonna ulteriore per capire la "tipologia" (salvata come id numerico), che andrà mappata in un'altra tabella ("pioppo e conifere", "latifoglie" etc. dipende se ti serve come dato anche).

Un'altra alternativa: ti fai una tabella con i "codici" (C14, C16 etc) ed eventualmente altre proprietà che ti servono (e qui ci aggiungi la "tipologia" di cui sopra) e poi nell'altra tabella setti le specifiche associandole al codice. Questa tabella avrà come colonne ciò che hai nella colonna 1 nella prima immagine; in più avrà come colonna il "codice", tipo "id_codice", che sarà l'ID dell'elemento nella tabella codici.
Quest'ultimo che ti ho descritto è meglio del primo. In questo caso per tirar fuori i dati di C20, farai tipo:

SQL:
SELECT * FROM tbl_resistenze WHERE id_codice=4;

se ti servono i dati della "tabella dei codici" dovrai fare una join, eg tipo:

SQL:
SELECT * FROM tbl_resistenze JOIN tbl_codici ON tbl_codici.id = id_codice WHERE id_codice=4;

(sono un pò arrugginito non tocco SQL da 1 annetto buono :D ma penso sia corretto anche sintatticamente)

Ad ogni modo un database lo devi avere, scordati di memorizzare tutto senza un DB. Questo vale anche se ti fai un'applicazione web, come suggerito da bigendian: in questo caso puoi usare MySQL..

E' MOLTO più veloce e semplice se fai un software web con backend in PHP (per esempio) e con grafica HTML+CSS (+ JS) rispetto a un software in C#, però dipende quanto conosci già le librerie grafiche con quest'ultimo.

Il vantaggio di avere un DB è anche in caso di aggiunta di un "C100", lo puoi fare molto semplicemente (puoi fare anche una parte del sw dedicata proprio alla gestione di queste tabelle interne).

Io ho immaginato questo tipo di struttura, ma considera che se hai tabelle identiche con i medesimi dati (colonne del db) puoi anche usare strutture diverse per gestire i dati; dipende bene cosa dovrai memorizzare. Ti consiglio di studiare anche SQL comunque, se non lo conosci.

Ah, in merito al non dare al cliente i dati, la cosa migliore è stare sul web: il tutto sarebbe gestito dal backend, quindi il cliente non potrebbe fare nulla (mi ero perso questa parte, sorry).

PS: non l'ho precisato, ma se ogni riga è calcolata mediante formule, allora ti basta il primo valore, così il cliente non sa che formula usi (e puoi fare il db locale e darlo al cliente, tanto solo del primo valore non saprebbe che farsene). In tal caso però puoi anche ripensare la cosa evitando un database.

Tieni a mente che reversare un programma in C# se non protetto è un gioco da ragazzi comunque.
Ti ringrazio molto dei consiglio che mi hai dato. Per la parte di sicurezza ci penserò in un secondo momento per ora mi accontento di riuscire a fare un qualcosa che funziona anche per ampliare le miei conoscenze e formarmi ulteriormente
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili