la sauvegarde du dictionnaire des composant dans la classe build ne fonctionne pas

master
Clement LESME 1 year ago
parent e89abf6fbf
commit 1305bfe4ca

@ -6,12 +6,13 @@ namespace CanYouBuildIt;
public partial class App : Application
{
//public Manager manager { get; private set; } = new Manager(new Stub());
public Manager manager { get; private set; } = new Manager(new DataContractPersistance.DataContractPers());
// -- Défini si on charge les données depuis un fichier ou le stub -- //
public Manager manager { get; private set; } = new Manager(new Stub());
//public Manager manager { get; private set; } = new Manager(new DataContractPersistance.DataContractPers());
public App()
{
manager.chargeDonne();
//manager.Persi = new DataContractPersistance.DataContractPers();
manager.Persi = new DataContractPersistance.DataContractPers();
manager.sauvegardeDonnee();
Debug.WriteLine(manager.listUtil[0]);
InitializeComponent();

@ -62,6 +62,9 @@
<MauiXaml Update="Views\Login.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Views\Ordinateur.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Views\SignIn.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>

@ -116,12 +116,5 @@
<d2p1:password>0000</d2p1:password>
<d2p1:username>Kevin</d2p1:username>
</d2p1:Utilisateur>
<d2p1:Utilisateur>
<d2p1:Builds xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
<d2p1:listBuild i:nil="true" />
<d2p1:listFav xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
<d2p1:password>nouna</d2p1:password>
<d2p1:username>nouna</d2p1:username>
</d2p1:Utilisateur>
</lu>
</DataToPersist>

@ -1,29 +0,0 @@
<Frame>
<VerticalStackLayout>
<Image Source="{Binding manager.listBuild[0].image}"
Grid.Row="0" Grid.Column="0"
HeightRequest="200"/>
<Label Text="{Binding manager.listBuild[0].prix}"/>
</VerticalStackLayout>
</Frame>
<Image Source="pc3.png"
Grid.Row="0" Grid.Column="2"
HeightRequest="200"
/>
<Image Source="pc3.png"
Grid.Row="0" Grid.Column="4"
HeightRequest="200"
/>
<Image Source="pc2.png"
Grid.Row="1" Grid.Column="1"
HeightRequest="200"
/>
<Image Source="pc4.png"
Grid.Row="1" Grid.Column="3"
HeightRequest="200"
/>
<Image Source="pc2.png"
Grid.Row="1" Grid.Column="5"
HeightRequest="200"
/>

@ -14,8 +14,8 @@ namespace CanYouBuildIt.DataContractPersistance
{
public string FilePath { get; set; }
public string FileName { get; set; } = "UserData.xml";
//Charge les données sauvegardées dans un fichier de format xml
public DataToPersist chargeDonnee()
{
//-- Chemin de sauvegarde --//
@ -36,6 +36,7 @@ namespace CanYouBuildIt.DataContractPersistance
return data;
}
//Sauvegarde les données dans un fichier de format xml
public void sauvegardeDonnee(DataToPersist data)
{
//-- Chemin de sauvegarde --//

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace CanYouBuildIt.DataContractPersistance
{
//Crée une structure de donnée pour pouvoir renvoyer plusieurs type à la fois
public class DataToPersist
{
public List<Utilisateur> lu = new List<Utilisateur>();

@ -21,10 +21,10 @@ namespace CanYouBuildIt.Model
[DataMember]
public string image { get; private set; }
[DataMember]
public Dictionary<TypeComposant, Composant> dComp { get; private set;}
public Dictionary<TypeComposant, Composant> dComp { get; private set;} //Contient tous les composant d'un build, chacun étant d'un type distinct
//Constructeur de la classe Build qui demande le nom d'une image et les composants du build
public Build(string image,Composant v1, Composant v2, Composant v3, Composant v4, Composant v5, Composant v6, Composant v7, Composant v8 = null, Composant v9 = null, Composant v10 = null)
{
id = nbId;
@ -32,7 +32,7 @@ namespace CanYouBuildIt.Model
this.image = image;
Dictionary<TypeComposant, Composant> dComp = new Dictionary<TypeComposant, Composant>();
//-- ajoue de chaque élément + calcule du prix total
//Ajoue de chaque élément + calcule du prix total
dComp.Add(v1.type,v1);
prix = prix + v1.prix;
dComp.Add(v2.type,v2);
@ -47,6 +47,7 @@ namespace CanYouBuildIt.Model
prix = prix + v6.prix;
dComp.Add(v7.type,v7);
prix = prix + v7.prix;
//verifie si les valeurs "non obligatoire" ne sois pas null, et les rentre dans le dictionnaire
if (v8 != null)
{
dComp.Add(v8.type, v8);
@ -63,10 +64,7 @@ namespace CanYouBuildIt.Model
prix = prix + v10.prix;
}
}
}
}
}
}
}

@ -7,6 +7,7 @@ using System.Threading.Tasks;
namespace CanYouBuildIt.Model
{
//Permet de définir strictement les types qu'un Composant peut avoir
public enum TypeComposant
{
Boitier,

@ -7,6 +7,8 @@ using System.Threading.Tasks;
namespace CanYouBuildIt.Model
{
//Permet de donnée un type commun au stub et au DataContractPersi pour pouvoir passer de un à l'autre
//sans changer de type d'attribut dans le manager
public interface IPersistanceManager
{
public DataToPersist chargeDonnee();

@ -1,6 +1,7 @@
using CanYouBuildIt.DataContractPersistance;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.Serialization;
using System.Security.Cryptography;
@ -30,14 +31,18 @@ namespace CanYouBuildIt.Model
Persi = pers;
}
//Utilise le chargeDonnee donnée de la persistance (de stub ou de DataContractPersi)
public void chargeDonne()
{
DataToPersist donnee = Persi.chargeDonnee();
listUtil.AddRange(donnee.lu);
listComp.AddRange(donnee.lc);
listBuild.AddRange(donnee.lb);
Debug.WriteLine("srv<wrv<zrev<zrev");
Debug.WriteLine(listBuild[0].dComp);
}
//Utilise le sauvegardeDonnee donnée de la persistance (de DataContractPersi)
public void sauvegardeDonnee()
{
DataToPersist data = new DataToPersist();
@ -47,22 +52,26 @@ namespace CanYouBuildIt.Model
Persi.sauvegardeDonnee(data);
}
//Ajoute l'utilisateur passé en paramètre a la liste d'utilisateur du manager
public int ajouterUtilisateur(Utilisateur utilisateur)
{
listUtil.Add(utilisateur);
return listUtil.Count-1 ;
}
//Ajoute le composant passé en paramètre a la liste de composant du manager
public void ajouterComposant(Composant composant)
{
listComp.Add(composant);
}
//Ajoute le build passé en paramètre a la liste de build du manager
public void ajouterBuild(Build build)
{
listBuild.Add(build);
}
//Permet de savoir si un username existe ou si il est déjà attribué (et return l'indice dans la liste du manager)
public int rechercheUsername(string usern)
{
for (int i = 0; i < listUtil.Count; i++ )
@ -74,6 +83,7 @@ namespace CanYouBuildIt.Model
return -1;
}
//Permet de chercher un mot de passe pour savoir si il correspond au bonne utilisateur (et return l'indice dans la liste du manager)
public int recherchePwd(string pwd)
{
for (int i = 0; i < listUtil.Count; i++)

@ -35,7 +35,7 @@ namespace CanYouBuildIt.Model
lc.Add(new Composant("Kingston Kit mémoire FURY Beast 16 Go (2 x 8 Go) 3200 MHz DDR4 CL16", TypeComposant.RAM, (float)49.99, "https://www.amazon.fr/Kingston-3200MHz-M%C3%A9moire-KF432C16BBK2-16/dp/B097K2WBL3/"));
lc.Add(new Composant("Crucial BX500 1 To",TypeComposant.SSD,(float)74.95, "https://www.ldlc.com/fiche/PB00281733.html"));
lc.Add(new Composant("Seagate BarraCuda 2 To (ST2000DM005) ", TypeComposant.HDD,(float)62.95, "https://www.ldlc.com/fiche/PB00254339.html"));
//-- Test pour un deuxième build --//
lc.Add(new Composant("Corsair Vengeance RGB RS 16 Go (2 x 8 Go) DDR4 3200 MHz CL16", TypeComposant.RAM, (float)60.70, "https://www.cdiscount.com/informatique/memoire-ram/memoire-ram-corsair-vengeance-rgb-rs-ddr4/f-10716-cor0840006649007.html?idOffre"));
lc.Add(new Composant("Samsung SSD 980 M.2 PCIe NVMe 1 To", TypeComposant.SSD, (float)57.37, "https://www.amazon.fr/s?k=samsung+ssd+980+m.2+pcie+nvme+1to&ref=nb_sb_noss"));
lc.Add(new Composant("NZXT H5 Flow Noir", TypeComposant.Boitier, (float)109.36, "https://www.ldlc.com/fiche/PB00532181.html"));

@ -54,8 +54,6 @@
<ColumnDefinition />
</Grid.ColumnDefinitions>
</Grid>
@ -79,7 +77,7 @@
</Grid.ColumnDefinitions>
<Button BackgroundColor="DimGrey"
Clicked="NavLogin"
Clicked="NavOrdi"
Grid.Row="0" Grid.Column="2"
HorizontalOptions="Center"
Text="Configurateur"

@ -7,10 +7,11 @@ namespace CanYouBuildIt.Views;
public partial class Acceuil : ContentPage
{
public Manager manager => (App.Current as App).manager;
bool connecte = false;
int user;
public Manager manager => (App.Current as App).manager; //Permet d'acceder à toutes les valeurs sauvegarder de l'app
bool connecte = false; //Permet de vérifier si un utilisateur est connecter (pour par exemple acceder à ses favoris
int user; //Adresse de l'utilisateur connecter dans la liste d'utilisateur du manager
//Constructeur par default utiliser lors de l'ouverture de l'app
public Acceuil()
{
InitializeComponent();
@ -18,6 +19,7 @@ public partial class Acceuil : ContentPage
showGrid();
}
//Constructeur utiliser lors de la connexion d'un utilisateur.
public Acceuil(int iduser)
{
InitializeComponent();
@ -37,6 +39,7 @@ public partial class Acceuil : ContentPage
Debug.WriteLine("Utilisateur créé");
}*/
//Vérifie si l'utilisateur et connecter puis empile la fenetre des favoris de l'utilisateur
public async void NavFav(object sender, EventArgs e)
{
if (connecte)
@ -49,21 +52,31 @@ public partial class Acceuil : ContentPage
}
}
//Empile la fenetre des credits
public async void NavCreds(object sender, EventArgs e)
{
await Navigation.PushAsync(new Credits());
}
//Empile la fenetre de connexion
public async void NavLogin(object sender, EventArgs e)
{
await Navigation.PushAsync(new Login());
}
//Empile la fenetre d'un pc
public async void NavOrdi(object sender, EventArgs e)
{
await Navigation.PushAsync(new Ordinateur(0));
}
//Ferme l'application
public void ToQuit(object sender, EventArgs e)
{
App.Current.Quit();
}
//Permet d'afficher les pc selon leur nombre dans la grid de ma page d'accueil
public void showGrid()
{
int row = 0;
@ -77,15 +90,16 @@ public partial class Acceuil : ContentPage
ImageButton imagebtn = new ImageButton()
{
Source = manager.listBuild[i].image,
HeightRequest = 200
BackgroundColor = Color.FromHex("#119FA8"),
CornerRadius = 10,
HeightRequest = 200,
Margin = new Thickness(1.5,0,1.5,0)
};
Debug.WriteLine("position :");
Debug.WriteLine(i);
Debug.WriteLine(row);
//Défini la case de la grille ou sera l'image
Grid.SetRow(imagebtn, row);
Grid.SetColumn(imagebtn, i);
//Met l'image dans la grille
gridacc.Children.Add(imagebtn);
}

@ -7,23 +7,25 @@ public partial class Credits : ContentPage
InitializeComponent();
}
//dépile la fenêtre pour retourner à la précédente
public async void BackHome(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
// -- Les 3 fonctions suivantes ouvre dans un navigateur les sites internet suivant : -- //
//LDLC
public async void lienLDLC(object sender, EventArgs e)
{
await Launcher.OpenAsync(new Uri("https://www.ldlc.com/configurateur/"));
}
//CanYouRunIt
public async void lienCanYou(object sender, EventArgs e)
{
await Launcher.OpenAsync(new Uri("https://www.systemrequirementslab.com/cyri"));
}
//LeDénicheur
public async void lienDenicheur(object sender, EventArgs e)
{
await Launcher.OpenAsync(new Uri("https://ledenicheur.fr/"));

@ -12,7 +12,8 @@ public partial class Favoris : ContentPage
user = iduser;
}
public async void BackHome(object sender, EventArgs e)
//dépile la fenêtre pour retourner à la précédente
public async void BackHome(object sender, EventArgs e)
{
await Navigation.PopAsync();
}

@ -3,13 +3,14 @@ using CanYouBuildIt.Model;
public partial class Login : ContentPage
{
public Manager manager => (App.Current as App).manager;
public Manager manager => (App.Current as App).manager; //Permet d'acceder à toutes les valeurs sauvegarder de l'app
public Login()
{
InitializeComponent();
}
//Boutton de confirmation des infos entrée dans les champs
private async void BoutonValider(object sender, EventArgs e)
{
error.IsVisible = false;
@ -18,6 +19,9 @@ public partial class Login : ContentPage
string MdpUlti = Mdp.Text;
string Name = Nom.Text;
//Vérifie si tout les critères sont validé :
//Tous les champs remplis
if (Name == null || MdpUlti == null)
error.IsVisible = true;
else
@ -25,11 +29,13 @@ public partial class Login : ContentPage
int idname = manager.rechercheUsername(Name);
int idmdp = manager.recherchePwd(MdpUlti);
//Pseudo et mot de passe existant
if (idname == -1 && idmdp == -1)
wrong.IsVisible = true;
//Mot de passe correspondant à l'utilisateur
else if(idname != idmdp)
wrong.IsVisible = true;
else if (idname != -1 && idmdp != -1)
else
{
valide.IsVisible = true;
await Task.Delay(1000);
@ -38,12 +44,14 @@ public partial class Login : ContentPage
}
}
}
//dépile la fenêtre pour retourner à la précédente
private async void BackHome(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
//Empile la fenetre d'Inscription
private async void NavSignIn(object sender, EventArgs e)
{
await Navigation.PushAsync(new SignIn());

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="CanYouBuildIt.Views.Ordinateur"
Title="Ordinateur"
BackgroundColor="#26B4BE">
<VerticalStackLayout>
<ImageButton Source="logoapp.png"
Clicked="BackHome"
MaximumHeightRequest="150"/>
<Grid x:Name="pcG">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="0" Grid.Column="0"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="CPU"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="0" Grid.Column="1"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="Boitier"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="0" Grid.Column="2"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="RAM"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="1" Grid.Column="0"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="GPU"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="1" Grid.Column="2"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="Ventirad"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="2" Grid.Column="0"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="CarteMère"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="2" Grid.Column="2"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="Ventilo"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="3" Grid.Column="0"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="SSD"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="3" Grid.Column="1"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="Alimentation"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
<Frame BackgroundColor="#16A4AE"
CornerRadius="10"
Grid.Row="3" Grid.Column="2"
HeightRequest="250"
Margin="2,5,2,5">
<Label Text="HDD"
HorizontalOptions="Start"
VerticalOptions="Start">
</Label>
</Frame>
</Grid>
</VerticalStackLayout>
</ContentPage>

@ -0,0 +1,56 @@
using CanYouBuildIt.Model;
using System.Diagnostics;
namespace CanYouBuildIt.Views;
public partial class Ordinateur : ContentPage
{
public Manager manager => (App.Current as App).manager;
//public Dictionary<TypeComposant, Composant> dico = new Dictionary<TypeComposant, Composant>();
public Ordinateur(int IdPc)
{
InitializeComponent();
//dico = manager.listBuild[IdPc].dComp;
Debug.WriteLine("srebvg<srdebvwwdrvg");
Debug.WriteLine(manager.listBuild[IdPc].dComp[TypeComposant.Boitier].id);
fillGrid(IdPc);
}
//dépile la fenêtre pour retourner à la précédente
public async void BackHome(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
public void fillGrid(int Pc)
{
/*
//Défini la case de la grille ou sera l'image
Grid.SetRow(,);
Grid.SetColumn(,);
//Met l'image dans la grille
pcG.Children.Add();
*/
//doit récuperer dico du bon pc via indice manager
//CPU 00, boitier 01, Ram 02
//gpu 10, , Ventirad 12
//carteMère 20, , Ventilo 22
//ssd 30, alim 31 , hdd 32
Label cpu = new Label()
{
//Text = dico[TypeComposant.Processeur].id,
TextColor = Color.FromArgb("#000000")
};
//Défini la case de la grille ou sera l'image
Grid.SetRow(cpu, 0);
Grid.SetColumn(cpu, 0);
//Met l'image dans la grille
pcG.Children.Add(cpu);
}
}

@ -21,14 +21,19 @@ public partial class SignIn : ContentPage
string cMdpUtil = cMdp.Text;
string Name = Nom.Text;
//Vérifie si tout les critères sont validé :
//Tous les champs remplis
if (Name == null || MdpUtil == null || cMdpUtil ==null)
vide.IsVisible = true;
//Aucun autre user avec le même pseudo
else if (manager.rechercheUsername(Name) != -1)
userNameUsed.IsVisible = true;
//Mot de passe de plus de 4 caractères
else if (MdpUtil.Length <4)
wrong.IsVisible=true;
//Mot de passe et confirmation égale
else if (MdpUtil != cMdpUtil)
nequal.IsVisible = true;
else if (manager.rechercheUsername(Name) != -1)
userNameUsed.IsVisible = true;
else
{
valide.IsVisible = true;
@ -40,6 +45,7 @@ public partial class SignIn : ContentPage
}
}
//dépile la fenêtre pour retourner à la précédente
public async void BackLogin(object sender, EventArgs e)
{
await Navigation.PopAsync();

Loading…
Cancel
Save