Application en langage C sur la gestion des contacts
Application en langage C sur la gestion des contacts
Cet article propose en détaille une application en langage C sur la gestion des contacts.
Cette application de gestion des contacts vous permet de sauvegarder vos contactes avec les libellés suivantes :
Nom - Prénom - Tel de Domicile - Tel de portable - Email - Ville
Vous pourrez télécharger le fichier au format zip il contient le code sources complet.
Extrait du code source :
#include <QtGui>
#include "ajoutercontact.h"
// Constructeur
ajoutercontact::ajoutercontact(QWidget *parent): QDialog(parent){
setupUi(this);
path = ":/Images/ajouter.png" ;
line = "";
this->setPhoto(path);
ReadAndAplyConfiguration();
ValiderLesChamps();
connect(OkButton, SIGNAL(clicked()), this, SLOT(accept()));
}
void ajoutercontact::ValiderLesChamps(){
QRegExp RegEmail("^[\\w|\\.]+@[\\w]+\\.[\\w]{2,4}$") ;
this->EmailLineEdit->setValidator(new QRegExpValidator(RegEmail,this));
QRegExp RegTel("[0-9]{10}");
this->DomicileLineEdit->setValidator(new QRegExpValidator(RegTel,this));
this->PortableLineEdit->setValidator(new QRegExpValidator(RegTel,this));
}
void ajoutercontact::Afficherstring(QString s) {
QMessageBox::information(this,"info",s);
}
void ajoutercontact::on_ParcourirButton_clicked() {
QString newpath = QFileDialog::getOpenFileName(this, tr("Ajouter une image "),
QString(),
"Images (*.png *.gif *.jpg *.jpeg)");
if(newpath.isNull()) newpath = this->path;
else {
this->setPhoto(newpath);
this->path = "C:/Contact/Images/"+GenerateName();
QFile::copy(newpath,path);
}
}
void ajoutercontact::setPhoto(QString path) {
QPixmap map;
map.load(path);
this->PhotoLabel->setPixmap(map.scaled(80,80));
}
QString ajoutercontact::GenerateName() {
QString name;
int diff = 'Z'-'A';
for(int i=0 ; i < 10 ; i++){
char c = 'A'+(rand() % diff);
name += QChar(c);
}
return name;
}
void ajoutercontact::ReadAndAplyConfiguration() {
QFile Config(Configuration);
Config.open(QIODevice::ReadOnly);
int r = atoi(Config.readLine());
int g = atoi(Config.readLine());
int b = atoi(Config.readLine());
this->setPalette(QColor(0,0,0));
this->setPalette(QPalette(QColor(r,g,b)));
Config.close();
}
void ajoutercontact::on_EmailLineEdit_textChanged() {
this->OkButton->setEnabled(this->EmailLineEdit->hasAcceptableInput()&&
this->DomicileLineEdit->hasAcceptableInput()&&
this->PortableLineEdit->hasAcceptableInput());
}
void ajoutercontact::on_DomicileLineEdit_textChanged() {
this->OkButton->setEnabled(this->PortableLineEdit->hasAcceptableInput());
}
void ajoutercontact::on_PortableLineEdit_textChanged() {
this->OkButton->setEnabled(this->DomicileLineEdit->hasAcceptableInput());
}
… … …
#include "mainwindow.h"
#include "ajoutercontact.h"
#include "apropos.h"
#include "finder.h"
#include <QTableWidgetItem>
#include <QImage>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
ReadAndAplyConfiguration();
CreateMenu();
CreateActions();
CreateDirectoryContact();
CreateDirectoryImages();
CreateFileContact();
InitialiserTableWidget();
RemplireTableWidget();
RemplireFormulaire();
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::closeEvent(QCloseEvent *event){
int r = QMessageBox::warning(this, tr("Confirmation"),
tr("Etes vous sûre de vouloire <B>quitter</b> ? "),
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No);
if (r == QMessageBox::Yes) event->accept();
else event->ignore();
}
void MainWindow::CreateDirectoryContact(){
QString ContDirName = "C:/Contact" ;
QDir ContDir(ContDirName) ;
if (!ContDir.exists()) ContDir.mkdir(ContDirName);
}
void MainWindow::CreateDirectoryImages(){
QString ImagDirName = "C:/Contact/Images" ;
QDir ImagDir(ImagDirName) ;
if(!ImagDir.exists()) ImagDir.mkdir(ImagDirName) ;
}
void MainWindow::CreateFileContact(){
QFile file(Contact) ;
file.open(QIODevice::ReadWrite) ;
file.close();
}
void MainWindow::CreateMenu(){
connect(ui->menuFichiers->addAction("&Quitter Ctrl+Q"),SIGNAL(triggered()),this,SLOT(Quitter()));
connect(ui->menuContact->addAction(tr("&New contact Ctrl+N")),SIGNAL(triggered()),this,SLOT(NewContact()));
connect(ui->menuContact->addAction(tr("&Modify contact Ctrl+M")),SIGNAL(triggered()),this,SLOT(ModifyContact()));
connect(ui->menuContact->addAction(tr("&Find Contact Ctrl+F")),SIGNAL(triggered()),this,SLOT(FindContact()));
connect(ui->menuContact->addAction(tr("&Delete contact Ctrl+D")),SIGNAL(triggered()),this,SLOT(DeleteContact()));
connect(ui->menuTrier->addAction(tr("Par &Nom")),SIGNAL(triggered()),this,SLOT(TrierParNom()));
connect(ui->menuTrier->addAction(tr("Par &Prénom")),SIGNAL(triggered()),this,SLOT(TrierParPrenom()));
ui->menuEditer->addSeparator();
connect(ui->menuEditer->addAction(tr("&Théme")),SIGNAL(triggered()),this,SLOT(DefineTheme()));
connect(ui->menuAid->addAction(tr("&Apropos")),SIGNAL(triggered()),this,SLOT(Apropos()));
}
void MainWindow::CreateActions(){
New = new QAction(tr("&New"),this);
New->setIcon(QIcon(":/Images/new.png"));
New->setShortcut(tr("Ctrl+N"));
New->setStatusTip(tr("Add new Contact"));
connect(New, SIGNAL(triggered()), this, SLOT(NewContact()));
Delete = new QAction(tr("&Delete"),this);
Delete->setIcon(QIcon(":/Images/Delete.png"));
Delete->setShortcut(tr("Ctrl+D"));
Delete->setStatusTip(tr("Delete selected contact"));
connect(Delete,SIGNAL(triggered()),this,SLOT(DeleteContact()));
Modify = new QAction(tr("&Modify"),this);
Modify->setIcon(QIcon(":/Images/Modify.png"));
Modify->setShortcut(tr("Ctrl+M"));
Modify->setStatusTip(tr("Modify selected contact"));
connect(Modify,SIGNAL(triggered()),this,SLOT(ModifyContact()));
FindAction = new QAction(tr("&Find"),this);
FindAction->setIcon(QIcon(":/Images/Find.png"));
FindAction->setShortcut(tr("Ctrl+F"));
FindAction->setStatusTip(tr("Find selected contact"));
connect(FindAction,SIGNAL(triggered()),this,SLOT(FindContact()));
ui->ToolBar->addAction(New);
ui->ToolBar->addAction(Delete);
ui->ToolBar->addAction(Modify);
ui->ToolBar->addAction(FindAction);
}
void MainWindow::InitialiserTableWidget(){
QStringList listHeader ; listHeader <<"Nom "<<"Prénom ";
ui->tableWidget->setRowCount(0);
ui->tableWidget->setColumnCount(2);
ui->tableWidget->setHorizontalHeaderLabels(listHeader);
}
void MainWindow::RemplireTableWidget(){
QFile contact(Contact) ;
QTextStream fichierContact(&contact) ;
QString line ;
QStringList list ;
int row = 0 ;
contact.open( QIODevice::ReadOnly) ;
while ( !fichierContact.atEnd() ){
line = fichierContact.readLine();
list = line.split("|");
ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
ui->tableWidget->setItem(row,0,new QTableWidgetItem(list[0]));
ui->tableWidget->setItem(row,1,new QTableWidgetItem(list[1]));
row ++ ;
}
contact.close();
if (ui->tableWidget->rowCount() == 0) {
ui->SupprimerButton->setEnabled(false);
Delete->setEnabled(false);
Modify->setEnabled(false);
FindAction->setEnabled(false);
}
else {
ui->SupprimerButton->setEnabled(true);
Modify->setEnabled(true);
FindAction->setEnabled(true);
}
}
void MainWindow::RemplireFormulaire(){
QFile contact(Contact) ;
contact.open(QIODevice::ReadOnly) ;
QString line ;
QStringList list ;
QTextStream fichierContact(&contact) ;
int row = 0 ;
// if the file is empty then set default photo
this->SetPhoto(":/Images/ajouter.png");
while ( !fichierContact.atEnd()){
line = fichierContact.readLine();
list = line.split("|");
// Manipuler La photo
this->SetPhoto(list[2]);
// Manipuler Telephones
ui->DomicileLabel->setText(list[3]);
ui->PortableLabel->setText(list[4]);
//Manipuler L'email
ui->EmailLabel->setText(list[5]);
// Manipuler La ville
ui->VilleLabel->setText(list[6]);
row ++ ;
}
}
void MainWindow::RemovePhoto(QString path){
QFile ImgASupprimer (path) ;
ImgASupprimer.remove();
}
void MainWindow::SetPhoto(QString path){
QPixmap map;
map.load(path);
ui->PhotoLabel->setPixmap(map.scaled(80,80));
}
void MainWindow::on_tableWidget_cellChanged(int row, int column) {
QTableWidgetItem *item = ui->tableWidget->item(row,column);
if (column == 0) ui->NomLabel->setText(item->text());
else ui->PrenomLabel->setText(item->text());
}
void MainWindow::on_tableWidget_itemSelectionChanged() {
// Manipuler le nom + Prenom
int SelIndex = ui->tableWidget->currentRow();
ui->PrenomLabel->setText(ui->tableWidget->item(SelIndex, 0)->text());
ui->NomLabel->setText(ui->tableWidget->item(SelIndex, 1)->text());
// Manipuler La photo
QFile contact(Contact);
QTextStream fichierContact(&contact) ;
contact.open(QIODevice::ReadOnly);
int count = 0 ;
QString line ;
while(count <= SelIndex ){
line = fichierContact.readLine();
count ++ ;
}
contact.close();
QStringList list = line.split("|") ;
QPixmap map ;
map.load(list[2]);
ui->PhotoLabel->setPixmap(map.scaled(80,80));
// Manipuler Telephone
ui->DomicileLabel->setText(list[3]);
ui->PortableLabel->setText(list[4]);
ui->EmailLabel->setText(list[5]);
ui->VilleLabel->setText(list[6]);
if (ui->tableWidget->currentRow() == -1 ) Modify->setEnabled(false);
}
QString MainWindow::ToString(int num){
QVariant v_num;
v_num.setValue(num);
return v_num.toString();
}
void MainWindow::MisAjour(){
SetTableWidgetEmpty();
InitialiserTableWidget();
RemplireTableWidget();
RemplireFormulaire();
}
void MainWindow::SetTableWidgetEmpty(){
ui->tableWidget->clear();
}
void MainWindow::on_SupprimerButton_clicked() {
this->DeleteContact();
}
void MainWindow::RemoveLineFromFile(int index) {
QStringList listline , lineConcerne;
QString line;
QFile fichier(Contact);
QTextStream in(&fichier);
fichier.open(QIODevice::ReadWrite);
while (!in.atEnd()) listline.append(in.readLine());
fichier.close(); fichier.remove();
fichier.open(QIODevice::ReadWrite);
for(int i=0 ; i<listline.length(); i++){
if (i != index )
in << listline.at(i) << "\n" ;
else { // On recupere le nom d'image pour pouvoire la supprimer
line = listline.at(i);
lineConcerne = line.split("|");
this->RemovePhoto(lineConcerne[2]);
}
}
fichier.close();
}
void MainWindow::NewContact() {
ajoutercontact AjCon(this);
if (AjCon.exec() == QDialog::Accepted){
QString line ;
line = line + AjCon.PrenomLineEdit->text()+"|";
line = line + AjCon.NomLineEdit->text()+"|";
line = line + AjCon.path+"|" ;
line = line + AjCon.DomicileLineEdit->text()+"|";
line = line + AjCon.PortableLineEdit->text()+"|";
line = line + AjCon.EmailLineEdit->text()+"|";
line = line + AjCon.VilleComboBox->currentText()+"|";
if(ContactExist(AjCon.NomLineEdit->text(),AjCon.PrenomLineEdit->text()) == -1 ) { // contact n'exist pas
//ajouter la ligne au fichier
QFile fichier(Contact);
QTextStream in(&fichier);
if(fichier.open(QIODevice::ReadWrite)) {
while(!in.atEnd()){in.readLine();}
in << line ;
in << "\n" ;
} else QMessageBox::warning(this,"Attention","Impossible d'ouvrir le fichier de contact");
} else {
int rep = QMessageBox::information(this,"Information",
tr("Ce Contact existe déjà ! Voullez vous l'écrasser ? "),
QMessageBox::Yes | QMessageBox::Default , QMessageBox::No);
if (rep == QMessageBox::Yes){
// Supprimer l'encien
RemoveLineFromFile(ContactExist(AjCon.NomLineEdit->text(),AjCon.PrenomLineEdit->text()));
AddLineIntoFile(line,ContactExist(AjCon.NomLineEdit->text(),AjCon.PrenomLineEdit->text()));
}
}
}