예제 #1
0
        private void GestioneUtenti()
        {
            do
            {
                ColoreTitoli();
                Console.WriteLine("\n\t*** CREA UTENTI PER UNIMOL COIN ***");
                ColoreNormale();

                Console.WriteLine("Inserisci un nome utente (minimo 4 caratteri):");
                var nome = Console.ReadLine();

                if (!string.IsNullOrEmpty(nome) && nome.Length > 3)
                {
                    NormalizzaNome(ref nome);
                }
                else
                {
                    nome = CreaUtenteTest(ref _numUtentiTest);
                }

                var utenteDaRegistrare = new Utente(nome);

                if (SmartContract.VerificaOmonimie(utenteDaRegistrare))
                {
                    Console.WriteLine($"Utente registrato: {nome}");
                    UniMolCoin.Utenti.Add(utenteDaRegistrare);
                }
                else
                {
                    ColoreAvvisi();
                    Console.WriteLine("\t*** Errore utente già presente. ***");
                    ColoreNormale();
                }

                ColoreRecap();
                Console.Write("\tVuoi inserire un altro utente? Digita 0 per terminare o qualunque altro tasto per continuare: ");

                ColoreNormale();

                _risposta = Console.ReadLine();
                Console.WriteLine();
            } while (!((int)OpzioniMenu.Annulla).ToString().Equals(_risposta));


            while (UniMolCoin.Utenti.Count < 3)
            {
                var utenteTest = new Utente(CreaUtenteTest(ref _numUtentiTest));
                if (SmartContract.VerificaOmonimie(utenteTest))
                {
                    UniMolCoin.Utenti.Add(utenteTest);
                }
            }

            ColoreRecap();
            Console.WriteLine("\n\t*** Riepilogo utenti creati ***");
            ColoreNormale();
            foreach (var utente in UniMolCoin.Utenti)
            {
                utente.CreaPortafogli();
                Console.WriteLine($"\tNome: {utente.Nome} \t ID associato: {utente.IdUnivoco} \t Saldo iniziale: {utente.Saldo.Count}");
            }
        }
예제 #2
0
        private void GestioneMenu()
        {
            var selezione = (int)OpzioniMenu.Annulla;

            do
            {
                var moneteCircolanti = UniMolCoin.AggiornaBilancio();

                ColoreTitoli();
                Console.WriteLine("\n\t*** MENU UNIMOL COIN ***");
                Console.WriteLine("\t=========================");
                Console.WriteLine($"\t{(int)OpzioniMenu.AggiungiTransazione}. Aggiungere una transazione.");
                Console.WriteLine($"\t{(int)OpzioniMenu.MostraBlockChain}. Mostra la BlockChain.");
                Console.WriteLine($"\t{(int)OpzioniMenu.MostraSmartContract}. Mostra lo SmartContract di UniMol Coin.");
                Console.WriteLine($"\t{(int)OpzioniMenu.VerificaSaldo}. Verifica saldo di uno specifico utente.");
                Console.WriteLine($"\t{(int)OpzioniMenu.Esci}. Esci.");
                Console.WriteLine("\t=========================");
                ColoreNormale();
                Console.Write("\tInserisci una scelta: ");

                var azione = Console.ReadLine();

                try
                {
                    selezione = Convert.ToInt16(azione);
                    Console.Clear();
                }
                catch (Exception exception)
                {
                    ColoreAvvisi();
                    Console.WriteLine("\t\n*** Errore. Operazione non riconosciuta, riprova! ***");
                    ColoreNormale();
                    Console.WriteLine(exception.Message);
                }

                if (UniMolCoin.IsValido())
                {
                    switch (selezione)
                    {
                    case (int)OpzioniMenu.AggiungiTransazione:
                        ColoreTitoli();
                        Console.WriteLine("\t\n*** REGISTRA TRANSAZIONE ***");
                        ColoreNormale();
                        Console.WriteLine($"Per favore, inserisci il nome del mittente ( {(int)OpzioniMenu.Annulla} per annullare)");
                        var nomeMittente = Console.ReadLine();

                        if ((nomeMittente == ((int)OpzioniMenu.Annulla).ToString()) || (string.IsNullOrEmpty(nomeMittente)))
                        {
                            break;
                        }

                        NormalizzaNome(ref nomeMittente);

                        Console.WriteLine($"Per favore, inserisci il nome del destinatario ( {(int)OpzioniMenu.Annulla} per annullare)");
                        var nomeDestinatario = Console.ReadLine();
                        if ((nomeDestinatario == ((int)OpzioniMenu.Annulla).ToString()) || (string.IsNullOrEmpty(nomeDestinatario)))
                        {
                            break;
                        }

                        NormalizzaNome(ref nomeDestinatario);

                        Console.WriteLine($"Per favore, inserisci l'importo ( {(int)OpzioniMenu.Annulla} per annullare)");
                        var importo = Console.ReadLine();

                        if (importo == ((int)OpzioniMenu.Annulla).ToString())
                        {
                            break;
                        }

                        if (Convert.ToInt32(importo) < 0)
                        {
                            ColoreAvvisi();
                            Console.WriteLine("\t*** Errore. Importo non valido. ***");
                            break;
                        }



                        if ((UniMolCoin.VerificaUtente(nomeMittente)) &&
                            (UniMolCoin.VerificaUtente(nomeDestinatario)))
                        {
                            var mittente     = UniMolCoin.RicercaUtente(nomeMittente);
                            var destinatario = UniMolCoin.RicercaUtente(nomeDestinatario);

                            if (SmartContract.VerificaSaldo(mittente.Nome, destinatario.Nome, Convert.ToInt32(importo)))
                            {
                                SmartContract.TrasferisciMoneta(Convert.ToInt32(importo), mittente, destinatario);

                                UniMolCoin.CreaTransazione(new Transazione(mittente, destinatario, Convert.ToInt32(importo)));

                                var randomMiner = new Random();

                                //il miner sarà estratto casualmente tra la lista degli utenti
                                UniMolCoin.MinaTransazioni(UniMolCoin.Utenti[randomMiner.Next(0, UniMolCoin.Utenti.Count)]);

                                Console.WriteLine(JsonConvert.SerializeObject(UniMolCoin, Formatting.Indented));
                            }
                            else
                            {
                                ColoreAvvisi();
                                Console.WriteLine("\t*** Errore: Transazione non valida, importo più alto della capacità di spesa del mittente. ***");
                            }
                        }
                        else
                        {
                            ColoreAvvisi();
                            Console.WriteLine("\t*** Errore. Verificare i valori inseriti di mittente e destinatario. ***");
                        }

                        break;

                    case (int)OpzioniMenu.MostraBlockChain:
                        ColoreTitoli();
                        Console.WriteLine("\t\n*** MOSTRA BLOCKCHAIN ***");
                        ColoreNormale();
                        Console.WriteLine(JsonConvert.SerializeObject(UniMolCoin, Formatting.Indented));
                        ColoreRecap();
                        Console.WriteLine($"Sono in circolazione {moneteCircolanti} UniMolCoin");
                        ColoreNormale();
                        break;

                    case (int)OpzioniMenu.MostraSmartContract:
                        ColoreTitoli();
                        Console.WriteLine("\t\n*** MOSTRA SMART CONTRACT ***\n");
                        ColoreRecap();
                        SmartContract.MostraContratto();
                        ColoreNormale();
                        break;

                    case (int)OpzioniMenu.VerificaSaldo:
                        ColoreTitoli();
                        Console.WriteLine("\t\n*** MOSTRA SALDO UTENTE ***");
                        ColoreNormale();
                        Console.WriteLine("Inserisci il nome dell'utente di cui mostrare il saldo: ");
                        var nomeUtente = Console.ReadLine();

                        try
                        {
                            NormalizzaNome(ref nomeUtente);
                            var utenteCercato = UniMolCoin.RicercaUtente(nomeUtente);
                            ColoreRecap();
                            Console.WriteLine($"\tNome: {utenteCercato.Nome}" +
                                              $"\n\tID: {utenteCercato.IdUnivoco}" +
                                              $"\n\tSaldo: {utenteCercato.Saldo.Count}");
                        }
                        catch (Exception)
                        {
                            ColoreAvvisi();
                            Console.WriteLine("\t*** Errore. Input non valido o utente non trovato. ***");
                        }

                        ColoreNormale();
                        break;

                    case (int)OpzioniMenu.Esci:
                        ColoreAvvisi();
                        Console.WriteLine("\t\n*** Arrivederci! ***");
                        ColoreNormale();
                        break;

                    default:
                        Console.Clear();
                        ColoreAvvisi();
                        Console.WriteLine("\t\n*** Errore. Operazione non riconosciuta, riprova! ***");
                        ColoreNormale();
                        break;
                    }
                }
                else
                {
                    ColoreAvvisi();
                    Console.WriteLine("*** Errore. BlockChain non valida! ***");
                    selezione = (int)OpzioniMenu.Esci;
                }
            } while (!((int)OpzioniMenu.Esci).Equals(selezione));
        }