Abbellimento codice iniziale
This commit is contained in:
parent
7a8c35dc14
commit
ba18d30b82
181
Program.cs
181
Program.cs
@ -1,9 +1,180 @@
|
|||||||
namespace Rubrica_Miglioria;
|
namespace Rubrica_Miglioria;
|
||||||
|
|
||||||
class Program
|
class Program {
|
||||||
{
|
static void Main(string[] args) {
|
||||||
static void Main(string[] args)
|
Console.Clear();
|
||||||
{
|
const int DIMENSIONE_RUBRICA = 100;
|
||||||
Console.WriteLine("Hello, World!");
|
int scelta = 0;
|
||||||
|
string nome = "";
|
||||||
|
string numeroditelefono, tipologia;
|
||||||
|
bool check = false;
|
||||||
|
bool check2 = false;
|
||||||
|
bool check3 = false;
|
||||||
|
int contatore = 0;
|
||||||
|
string nomeesatto;
|
||||||
|
string nomeapprossimato;
|
||||||
|
string messaggio;
|
||||||
|
string[] nomi = new string[DIMENSIONE_RUBRICA];
|
||||||
|
string[] numeriditelefono = new string[DIMENSIONE_RUBRICA];
|
||||||
|
Voce singolavoce = null;
|
||||||
|
Voce[] vocidellarubrica = new Voce[DIMENSIONE_RUBRICA];
|
||||||
|
Rubrica rubrica = null;
|
||||||
|
do {
|
||||||
|
Console.WriteLine("1)Aggiungi nuova voce in rubrica");
|
||||||
|
Console.WriteLine("2)Ricerca esatta per nome");
|
||||||
|
Console.WriteLine("3)Ricerca approsimata per nome");
|
||||||
|
Console.WriteLine("4)Stampa completa rubrice");
|
||||||
|
Console.WriteLine("5)Esci");
|
||||||
|
scelta = Convert.ToInt32(Console.ReadLine());
|
||||||
|
switch (scelta) {
|
||||||
|
case 1:
|
||||||
|
if (contatore > DIMENSIONE_RUBRICA - 1) {
|
||||||
|
Console.WriteLine($"Limite di {DIMENSIONE_RUBRICA} voci nella rubrica raggiunta");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
do {
|
||||||
|
check2 = false;
|
||||||
|
Console.WriteLine("Inserisci il nome della voce che andrà nella rubrica telefonica");
|
||||||
|
nome = Console.ReadLine().ToLower();
|
||||||
|
nomi[contatore] = nome;
|
||||||
|
tipologia = "nome";
|
||||||
|
check2 = VerificaCorrettezza(nome, tipologia);
|
||||||
|
check3 = VerificaDoppione(nome, nomi, contatore);
|
||||||
|
if (nome.Length > 40) {
|
||||||
|
Console.WriteLine("il nome non può essere lungo più di 40 caratteri");
|
||||||
|
}
|
||||||
|
if (check2 == true) {
|
||||||
|
Console.WriteLine("il nome non può contenere dei numeri");
|
||||||
|
}
|
||||||
|
if (check3 == true) {
|
||||||
|
Console.WriteLine("Questo nome esiste già nelle rubrica");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (nome.Length > 40 || check2 == true || check3 == true);
|
||||||
|
do {
|
||||||
|
check2 = false;
|
||||||
|
Console.WriteLine("Inserisci il numero di telefono della voce che andrà nella rubrica telefonica");
|
||||||
|
numeroditelefono = Console.ReadLine();
|
||||||
|
numeroditelefono = numeroditelefono.ToLower();
|
||||||
|
numeriditelefono[contatore] = numeroditelefono;
|
||||||
|
tipologia = "numero di telefono";
|
||||||
|
check2 = VerificaCorrettezza(numeroditelefono, tipologia);
|
||||||
|
check3 = VerificaDoppione(numeroditelefono, numeriditelefono, contatore);
|
||||||
|
if (numeroditelefono.Length > 20) {
|
||||||
|
Console.WriteLine("il numero di telefono non può essere lungo più di 20 caratteri");
|
||||||
|
}
|
||||||
|
if (check2 == true) {
|
||||||
|
Console.WriteLine("il numero di telefono deve contenere solo numeri");
|
||||||
|
}
|
||||||
|
if (check3 == true) {
|
||||||
|
Console.WriteLine("Questo numero di telefono esiste già nelle rubrica");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (numeroditelefono.Length > 20 || check2 == true || check3 == true);
|
||||||
|
singolavoce = new Voce(nome, numeroditelefono);
|
||||||
|
vocidellarubrica[contatore] = singolavoce;
|
||||||
|
rubrica = new Rubrica(vocidellarubrica);
|
||||||
|
contatore++;
|
||||||
|
check = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (check == false) {
|
||||||
|
Console.WriteLine("devi prima aggiungere una voce in rubrica");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
do {
|
||||||
|
check2 = false;
|
||||||
|
Console.WriteLine("Inserisci il nome esatto che stai cercando");
|
||||||
|
nomeesatto = Console.ReadLine();
|
||||||
|
nomeesatto = nomeesatto.ToLower();
|
||||||
|
tipologia = "nome";
|
||||||
|
check2 = VerificaCorrettezza(nome, tipologia);
|
||||||
|
if (nomeesatto.Length > 40) {
|
||||||
|
Console.WriteLine("il nome non può essere lungo più di 40 caratteri");
|
||||||
|
}
|
||||||
|
if (check2 == true) {
|
||||||
|
Console.WriteLine("il nome non può contenere dei numeri");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (nomeesatto.Length > 40 || check2 == true);
|
||||||
|
messaggio = rubrica.EsistenzaNomeEsatto(nomeesatto, contatore);
|
||||||
|
Console.WriteLine(messaggio);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (check == false) {
|
||||||
|
Console.WriteLine("devi prima aggiungere una voce in rubrica");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
do {
|
||||||
|
check2 = false;
|
||||||
|
Console.WriteLine("Inserisci il nome approsimato che stai cercando");
|
||||||
|
nomeapprossimato = Console.ReadLine();
|
||||||
|
nomeapprossimato = nomeapprossimato.ToLower();
|
||||||
|
tipologia = "nome";
|
||||||
|
check2 = VerificaCorrettezza(nome, tipologia);
|
||||||
|
if (nomeapprossimato.Length > 40) {
|
||||||
|
Console.WriteLine("il nome non può essere lungo più di 40 caratteri");
|
||||||
|
}
|
||||||
|
if (check2 == true) {
|
||||||
|
Console.WriteLine("il nome non può contenere dei numeri");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (nomeapprossimato.Length > 40 || check2 == true);
|
||||||
|
rubrica.EsistenzaNomeApprosimato(nomeapprossimato, contatore);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (check == false) {
|
||||||
|
Console.WriteLine("devi prima aggiungere una voce in rubrica");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rubrica.StampaRubricaCompleta(contatore);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Console.WriteLine("Questa scelta non esiste");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (scelta != 5);
|
||||||
|
Console.WriteLine("Chiusura effettuta con successo");
|
||||||
|
}
|
||||||
|
static bool VerificaDoppione(string p_stringa, string[] p_stringhe, int p_contatore) {
|
||||||
|
bool check = false;
|
||||||
|
if (p_contatore != 0) {
|
||||||
|
for (int i = 0; i < p_contatore; i++) {
|
||||||
|
if (p_stringhe[i] == p_stringa) {
|
||||||
|
check = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return check;
|
||||||
|
}
|
||||||
|
static bool VerificaCorrettezza(string p_stringa, string p_tipologia) {
|
||||||
|
bool check = false;
|
||||||
|
string corretezzanome = "1234567890";
|
||||||
|
string corretezzanumeroditelefono = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàèéìòùÀÈÉÌÒÙáéíóúÁÉÍÓÚâêîôûÂÊÎÔÛäëïöüÄËÏÖÜãõñÃÕÑçÇß¡¿€£¥¢¤!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ \r\n";
|
||||||
|
if (p_tipologia == "nome") {
|
||||||
|
for (int i = 0; i < p_stringa.Length; i++) {
|
||||||
|
if (corretezzanome.Contains(p_stringa[i])) {
|
||||||
|
check = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (p_tipologia == "numero di telefono") {
|
||||||
|
for (int i = 0; i < p_stringa.Length; i++) {
|
||||||
|
if (corretezzanumeroditelefono.Contains(p_stringa[i])) {
|
||||||
|
check = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return check;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
54
Rubrica.cs
54
Rubrica.cs
@ -1,5 +1,59 @@
|
|||||||
namespace Rubrica_Miglioria;
|
namespace Rubrica_Miglioria;
|
||||||
|
|
||||||
class Rubrica {
|
class Rubrica {
|
||||||
|
Voce[] vocidellarubrica;
|
||||||
|
|
||||||
|
public Rubrica(Voce[] p_vocidellarubrica)
|
||||||
|
{
|
||||||
|
this.vocidellarubrica = p_vocidellarubrica;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Setvocidellarubrica(Voce[] p_vocidellarubrica)
|
||||||
|
{
|
||||||
|
this.vocidellarubrica = p_vocidellarubrica;
|
||||||
|
}
|
||||||
|
public Voce[] GetVocidellarubrica()
|
||||||
|
{
|
||||||
|
return this.vocidellarubrica;
|
||||||
|
}
|
||||||
|
public string EsistenzaNomeEsatto(string p_nomeesatto, int p_contatore)
|
||||||
|
{
|
||||||
|
string nomedellarubrica = "";
|
||||||
|
string numeroditelefonodellarubrica = "";
|
||||||
|
string messaggio = "non esiste il nome " + p_nomeesatto + " all'interno della rubrica";
|
||||||
|
for (int i = 0; i < p_contatore; i++)
|
||||||
|
{
|
||||||
|
nomedellarubrica = this.vocidellarubrica[i].GetNome();
|
||||||
|
if (p_nomeesatto == nomedellarubrica)
|
||||||
|
{
|
||||||
|
messaggio = "esiste il nome " + p_nomeesatto + " all'interno della rubrica" + "e il suo numero di telefono è " + (numeroditelefonodellarubrica = this.vocidellarubrica[i].Getnumeroditelefono());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return messaggio;
|
||||||
|
}
|
||||||
|
public void EsistenzaNomeApprosimato(string p_nomeapprosimato, int p_contatore)
|
||||||
|
{
|
||||||
|
string nomedellarubrica = "";
|
||||||
|
string numeroditelefonodellarubrica = "";
|
||||||
|
for (int i = 0; i < p_contatore; i++)
|
||||||
|
{
|
||||||
|
nomedellarubrica = this.vocidellarubrica[i].GetNome();
|
||||||
|
if (nomedellarubrica.StartsWith(p_nomeapprosimato))
|
||||||
|
{
|
||||||
|
Console.WriteLine("esiste il nome " + nomedellarubrica + " e il suo numero di telefono è: " + (numeroditelefonodellarubrica = this.vocidellarubrica[i].Getnumeroditelefono()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void StampaRubricaCompleta(int p_contatore)
|
||||||
|
{
|
||||||
|
string nomedellarubrica = "";
|
||||||
|
string numeroditelefonodellarubrica = "";
|
||||||
|
for (int i = 0; i < p_contatore; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine("nome: " + (nomedellarubrica = this.vocidellarubrica[i].GetNome()));
|
||||||
|
Console.WriteLine("numero di telefono: " + (numeroditelefonodellarubrica = this.vocidellarubrica[i].Getnumeroditelefono()));
|
||||||
|
Console.WriteLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
23
Voce.cs
23
Voce.cs
@ -1,5 +1,28 @@
|
|||||||
namespace Rubrica_Miglioria;
|
namespace Rubrica_Miglioria;
|
||||||
|
|
||||||
class Voce {
|
class Voce {
|
||||||
|
string nome;
|
||||||
|
string numeroditelefono;
|
||||||
|
|
||||||
|
public Voce(string p_nome, string p_numeroditelefono)
|
||||||
|
{
|
||||||
|
this.nome = p_nome;
|
||||||
|
this.numeroditelefono = p_numeroditelefono;
|
||||||
|
}
|
||||||
|
public void SetNome(string p_nome)
|
||||||
|
{
|
||||||
|
this.nome = p_nome;
|
||||||
|
}
|
||||||
|
public void SetNumeroditelefono(string p_numeroditelefono)
|
||||||
|
{
|
||||||
|
this.numeroditelefono = p_numeroditelefono;
|
||||||
|
}
|
||||||
|
public string GetNome()
|
||||||
|
{
|
||||||
|
return this.nome;
|
||||||
|
}
|
||||||
|
public string Getnumeroditelefono()
|
||||||
|
{
|
||||||
|
return this.numeroditelefono;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
BIN
bin/Debug/net9.0/Rubrica_Miglioria
Executable file
BIN
bin/Debug/net9.0/Rubrica_Miglioria
Executable file
Binary file not shown.
23
bin/Debug/net9.0/Rubrica_Miglioria.deps.json
Normal file
23
bin/Debug/net9.0/Rubrica_Miglioria.deps.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v9.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v9.0": {
|
||||||
|
"Rubrica_Miglioria/1.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"Rubrica_Miglioria.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"Rubrica_Miglioria/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
bin/Debug/net9.0/Rubrica_Miglioria.dll
Normal file
BIN
bin/Debug/net9.0/Rubrica_Miglioria.dll
Normal file
Binary file not shown.
BIN
bin/Debug/net9.0/Rubrica_Miglioria.pdb
Normal file
BIN
bin/Debug/net9.0/Rubrica_Miglioria.pdb
Normal file
Binary file not shown.
12
bin/Debug/net9.0/Rubrica_Miglioria.runtimeconfig.json
Normal file
12
bin/Debug/net9.0/Rubrica_Miglioria.runtimeconfig.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"runtimeOptions": {
|
||||||
|
"tfm": "net9.0",
|
||||||
|
"framework": {
|
||||||
|
"name": "Microsoft.NETCore.App",
|
||||||
|
"version": "9.0.0"
|
||||||
|
},
|
||||||
|
"configProperties": {
|
||||||
|
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
|
||||||
22
obj/Debug/net9.0/Rubrica_Miglioria.AssemblyInfo.cs
Normal file
22
obj/Debug/net9.0/Rubrica_Miglioria.AssemblyInfo.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Rubrica_Miglioria")]
|
||||||
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a8c35dc14d3f94742b1739914f0c1734fbd4634")]
|
||||||
|
[assembly: System.Reflection.AssemblyProductAttribute("Rubrica_Miglioria")]
|
||||||
|
[assembly: System.Reflection.AssemblyTitleAttribute("Rubrica_Miglioria")]
|
||||||
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
||||||
|
// Generated by the MSBuild WriteCodeFragment class.
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
08edd7693ed88a88b67a3d844ce1f743c8ffacd35a9ff767cd5bae496a22411b
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
is_global = true
|
||||||
|
build_property.TargetFramework = net9.0
|
||||||
|
build_property.TargetPlatformMinVersion =
|
||||||
|
build_property.UsingMicrosoftNETSdkWeb =
|
||||||
|
build_property.ProjectTypeGuids =
|
||||||
|
build_property.InvariantGlobalization =
|
||||||
|
build_property.PlatformNeutralAssembly =
|
||||||
|
build_property.EnforceExtendedAnalyzerRules =
|
||||||
|
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||||
|
build_property.RootNamespace = Rubrica_Miglioria
|
||||||
|
build_property.ProjectDir = /home/Verde/git/Rubrica_Miglioria/
|
||||||
|
build_property.EnableComHosting =
|
||||||
|
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||||
|
build_property.EffectiveAnalysisLevelStyle = 9.0
|
||||||
|
build_property.EnableCodeStyleSeverity =
|
||||||
8
obj/Debug/net9.0/Rubrica_Miglioria.GlobalUsings.g.cs
Normal file
8
obj/Debug/net9.0/Rubrica_Miglioria.GlobalUsings.g.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// <auto-generated/>
|
||||||
|
global using global::System;
|
||||||
|
global using global::System.Collections.Generic;
|
||||||
|
global using global::System.IO;
|
||||||
|
global using global::System.Linq;
|
||||||
|
global using global::System.Net.Http;
|
||||||
|
global using global::System.Threading;
|
||||||
|
global using global::System.Threading.Tasks;
|
||||||
BIN
obj/Debug/net9.0/Rubrica_Miglioria.assets.cache
Normal file
BIN
obj/Debug/net9.0/Rubrica_Miglioria.assets.cache
Normal file
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
81a9309d4b011cce7eed8d10551813d1fe4ff508969ada1600a9d276a4ff626a
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
/home/Verde/git/Rubrica_Miglioria/bin/Debug/net9.0/Rubrica_Miglioria
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/bin/Debug/net9.0/Rubrica_Miglioria.deps.json
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/bin/Debug/net9.0/Rubrica_Miglioria.runtimeconfig.json
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/bin/Debug/net9.0/Rubrica_Miglioria.dll
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/bin/Debug/net9.0/Rubrica_Miglioria.pdb
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.GeneratedMSBuildEditorConfig.editorconfig
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.AssemblyInfoInputs.cache
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.AssemblyInfo.cs
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.csproj.CoreCompileInputs.cache
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.dll
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/refint/Rubrica_Miglioria.dll
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.pdb
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/Rubrica_Miglioria.genruntimeconfig.cache
|
||||||
|
/home/Verde/git/Rubrica_Miglioria/obj/Debug/net9.0/ref/Rubrica_Miglioria.dll
|
||||||
BIN
obj/Debug/net9.0/Rubrica_Miglioria.dll
Normal file
BIN
obj/Debug/net9.0/Rubrica_Miglioria.dll
Normal file
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
62202b9df737cdcd60bdcd615c08e9b8fa1ff7a6cf05d5984c23d9418d373ebf
|
||||||
BIN
obj/Debug/net9.0/Rubrica_Miglioria.pdb
Normal file
BIN
obj/Debug/net9.0/Rubrica_Miglioria.pdb
Normal file
Binary file not shown.
BIN
obj/Debug/net9.0/apphost
Executable file
BIN
obj/Debug/net9.0/apphost
Executable file
Binary file not shown.
BIN
obj/Debug/net9.0/ref/Rubrica_Miglioria.dll
Normal file
BIN
obj/Debug/net9.0/ref/Rubrica_Miglioria.dll
Normal file
Binary file not shown.
BIN
obj/Debug/net9.0/refint/Rubrica_Miglioria.dll
Normal file
BIN
obj/Debug/net9.0/refint/Rubrica_Miglioria.dll
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user