Programa simples em C++ para manipular dados de usuários!

Publicado por Perfil removido (última atualização em 27/01/2014)

[ Hits: 5.799 ]

Download projeto.tar




Um programa simples em C++ para manipular dados de usuários!

É o meu primeiro script que posto aqui! Então perdoem-me pela falta de comentários no código e por outros problemas.
Estou postando com o objetivo de receber opiniões que possam me ajudar na aprendizagem dessa maravilhosa linguagem orientada a objetos que é o C++.
Por favor comentem sobre a organização do código etc...

  



Esconder código-fonte

Arquivo main.cpp:

#include "projeto2.h"
#include <cstring>
#include <unistd.h>
#include <sys/wait.h>
class char_pointers
{
public:
char comandoch;
char *ps;
string comando;
char_pointers();
~char_pointers();

} t0;

char_pointers::char_pointers()
{
    cout<<"\nChamando construtor!"<<endl;
    ps=&comandoch;

}
char_pointers::~char_pointers()
{
    cout<<"\nChamando destrutor!"<<endl;

}


int main(){

pid_t filho;
int status;

//char comandoch;
//char *ps;
//char *comando=new char;
//ps=&comandoch;
for(;;){
cout<<"\nComando (h -- para ajuda): ";
cin>>t0.comando;
cin.ignore(sizeof(t0.comando),'\n');

if(t0.comando.size() > 1){cout<<"\n Comando não encontrado"<<endl;}

else
{
strcpy(t0.ps,t0.comando.c_str());

if(t0.comandoch=='q')
break;

switch(t0.comandoch)
{
case 'h':
{
cout<<"\nw -- adiciona um novo usuário"<<endl<<"d -- deleta um usuário"<<endl<<"a -- deleta todos os usuários"<<endl<<"r -- lista os atuais usuários"<<endl<<"c -- escreve informações adicionais sobre usuários"<<endl<<"l -- ler as informações adionais sobre um determinado usuário"<<endl<<"e -- exclui o arquivo de comentários de um usuário!"<<endl<<"q -- sai do programa"<<endl<<"h -- exibe essa ajuda"<<endl;
    break;
}
case 'w':
{

filho=fork();
    if(filho==0){
    string name;
    string idade;
    cout<<"\nEntre com o nome do usuário: ";
    getline(cin,name);
    cout<<"\nEntre com a idade: ";
    getline(cin,idade);
    cp.write_values(name,idade);
    _exit(0);
}
else{waitpid(filho,&status,0);}

break;
}
case 'r':{
cp.read_values();
break;
}
case 'd':{
string item;
cout<<"\nDe o nome da pessoa a ser deletada!: ";
getline(cin,item);
cp.erase_user(item);

}
case 'a':
{
    cp.erase_all();
    break;
}
case 'c':
{
    string name;
    cout<<"\nDigite o nome do usuário que terá informações adicionais escritas!"<<endl<<"Nome: ";
    getline(cin,name);
    cp.write_aditionals_values(name);

    break;
}
case 'l':
{
    string name;
    cout<<"\nDigite o nome do usuário!: ";
    getline(cin,name);
    cp.read_aditionals_values(name);
    break;
}
case 'e':
{
    string name;
    cout<<"\nDigite o nome do usuário: ";
    getline(cin,name);
    cp.erase_aditionals_values(name);
    break;
}

 default:
 {
    cout<<"\nComando não encontrado"<<endl;
 }



}


}





}

return EXIT_SUCCESS;
}





Arquivo projeto2.h:


#ifndef PROJETO2_H_INCLUDED
#define PROJETO2_H_INCLUDED



#endif // PROJETO2_H_INCLUDED
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <termios.h>
#include <unistd.h>

using namespace std;

//enum
//{
    //EXIT_SUCCESS,EXIT_FAILURE             //esse trexo foi marcado pois aparentemente a biblioteca cstdlib ja definiu os EXIT_SUCCESS e EXIT_FAILURE
                                            //para usar os meus valores seria necessário declara-los dentro de um namespace !
//};

class set_buffer
{
    struct termios new_conf,old_conf;

    public:
    void off(){
    tcgetattr(STDIN_FILENO,&old_conf);
new_conf=old_conf;
    new_conf.c_lflag &= ~(ICANON|ECHO);
    tcsetattr(STDIN_FILENO,TCSADRAIN,&new_conf);

    }
void restore()
{



tcsetattr(STDIN_FILENO,TCSADRAIN,&old_conf);
}


} buffer;


class  file_status
{
    public:
    bool write_status();
    bool read_status();
    bool read_file_status(string);
    bool write_file_status(string);
} cs;


class person_date: public file_status
{
string name;
int idade;

public:
int write_values(string,string);
int read_values();
int erase_user(string);
bool verific_item(string);
int erase_all();
int write_aditionals_values(string);
int read_aditionals_values(string);
int erase_aditionals_values(string);
bool verifc_item_alpha(string);
} cp;




bool file_status::write_status()
{
    ofstream file;
    file.open("cadastros",ios::app);                 // ios::app (muito importante);
    if(file.is_open()&&file.good())
    {
    file.close();return true;
    }

    else
    {
         file.close();return false;
    }

}





bool file_status::read_status()
{
ifstream file;
file.open("cadastros");
if(file.is_open()&&file.good())
{
    file.close();return true;
}
else
{
file.close();return false;

}

}

bool person_date::verific_item(string _item)
{
   if(read_status()==true)
   {
           ifstream file;
           file.open("cadastros");
           string dados;
           while(!file.eof())
           {
            getline(file,dados);
            if(dados==_item){return true;}


           }
    return false;
   }
else{clog<<"\nNão foi possível abrir arquivo cadastros para verificação!"<<endl;return EXIT_FAILURE;}

}
bool file_status::write_file_status(string file)
{
const char * filech= file.c_str();

ofstream out;
out.open(filech,ios::app);
if(out.is_open()&&out.good())
{
    out.close();return true;
}
else{out.close();return false;}


}

bool file_status::read_file_status(string file)
{
    const char *filech=file.c_str();
    ifstream input;
    input.open(filech);
    if(input.is_open()&&input.good())
    {
        input.close();return true;
    }

else{input.close();return false;}

}
bool person_date::verifc_item_alpha(string _item)
{
    if(_item=="nada foi digitado no campo idade!"){return false;}
    if(_item==" ano de idade"){return false;}
    if(_item==" anos de idade"){return false;}
    if(_item=="**"){return false;}

    for(int i=0;i < (int)_item.size();i++)
    {
        if(!isalpha(_item[i])&&!isspace(_item[i])){
        return false;
        }
    }
    return true;
}

int person_date::write_values(string _name,string _idade)
{
write_status();
int i;

for( i=0;i < (int)_name.size();i++)
{
    if(!isalpha(_name[i])&&!isspace(_name[i]))
    {
        cout<<"\nNome não pode conter numeros ou caracteres que não fazem parte do alphabeto"<<endl;return 0;
    }


}
if(read_status()==true)
{
    ifstream file;
    file.open("cadastros");
    string dados;
    while(!file.eof())
    {
        getline(file,dados);
        if(dados==_name){cout<<"\nUsuário ja existe "<<endl;return 0;}
    }


}
else
{
    clog<<"\nNão foi possível abrir o arquivo cadastros para verificação de usuário!"<<endl;return EXIT_FAILURE;
}


for( i=0; i < (int)_idade.size();i++)
{
    if(!isdigit(_idade[i])){cout<<"\nIdade deve conter somente numeros!";return 0;}


}

if(write_status()==true)
{
name=_name;
const char* _idadech= _idade.c_str();
idade=atoi(_idadech);

ofstream arq;
arq.open("cadastros", ios::app);

if(_idade.size()==0){
arq<<name<<endl<<"  "<<"nada foi digitado no campo idade!"<<endl<<"**"<<endl;
}
if(_idade.size() == 1 ){
arq<<name<<endl<<"  "<<idade<<" ano de idade"<<endl<<"**"<<endl;
}
if(_idade.size() > 1)
{
    arq<<name<<endl<<"  "<<idade<<" anos de idade"<<endl<<"**"<<endl;
}

arq.close();
}

else
{
    clog<<"\nNão foi possivel abrir o arquivo cadastros para escrita"<<endl;return EXIT_FAILURE;
}


return EXIT_SUCCESS;
}



int person_date::read_values()
{
    if(read_status()==true)
    {
       ifstream file;
       file.open("cadastros");
       string dados;
       while(!file.eof())
       {
        getline(file,dados);

        if(dados=="**"){cout<<"\n";}

        else{cout<<dados;}


       }

file.close();
    }
else
{
clog<<"\nNão foi possivel abrir arquivo cadastros para leitura!"<<endl;return EXIT_FAILURE;
}

return EXIT_SUCCESS;
}




int person_date::erase_user(string _item)
{
    if(verific_item(_item)==false){cout<<"\nUsuário não encontrado!"<<endl;return 0;}


    if(read_status()==true&&write_status()==true)
    {
        vector<string> lines;
        string dados;
        ifstream event;
        event.open("cadastros");

        while(!event.eof())
        {
            getline(event,dados);
            lines.push_back(dados);
        }
        event.close();

        for(int i=0;i <(int)lines.size();i++)
        {
           if(lines[i]==_item){
           lines[i]="";
           lines[i+1]="";
           lines[i+2]="";
           }

        }
        ofstream file;
        file.open("cadastros",ios::out|ios::trunc);
        for(vector<string>::iterator i= lines.begin(); i != lines.end();i++)
        {
            file<<*i<<endl;
        }
        file.close();

const char *_itemch=_item.c_str();
remove(_itemch);

    }
else{cout<<"\nNão foi possivel abrir arquivo para operações!"<<endl;return EXIT_FAILURE;}

return EXIT_SUCCESS;
}

int person_date::erase_all(){
if(write_status()==true&&read_status()==true)
{
ifstream user;
user.open("cadastros");
string user_dados;

while(!user.eof())
{
    getline(user,user_dados);
    if(verific_item(user_dados)==true)
    {
        if(verifc_item_alpha(user_dados)==true)
        {
            const char* user_dadosch=user_dados.c_str();
            remove(user_dadosch);
        }

    }

}
user.close();


    ofstream file;

    file.open("cadastros",ios::trunc);
    file.close();
}

else{clog<<"\nErro ao abrir arquivo  para escrita!"<<endl;return EXIT_FAILURE;}

return EXIT_SUCCESS;
}


int person_date::write_aditionals_values(string _name)
{

if(verific_item(_name)==true){

if(write_file_status(_name)==true){
ofstream file;
const char *_namech=_name.c_str();
file.open(_namech,ios::app);
cout<<"\nDe um breve comentário adicional sobre esse usuário!"<<endl<<"\ndigite (q) entre os intervalos para sair!"<<endl<<endl;
int c=0;
int i=1;
string dados;
buffer.off();
do{

buffer.restore();
cout<<"\nline "<<i<<"#: ";
i++;
getline(cin,dados);

file<<dados<<endl;
buffer.off();

}while((c=getchar())!='q');
buffer.restore();
file.close();


}

else{clog<<"\nNão foi possível abrir arquivo para escrita";return EXIT_FAILURE;}

}
else{cout<<"\nUsuário não existe!"<<endl;}
return 0;
}

int person_date::read_aditionals_values(string _name)
{
    if(verific_item(_name)==true)
    {
      if(read_file_status(_name)==true){
      const char * _namech=_name.c_str();
      ifstream file;
      file.open(_namech);
      string dados;
      while(!file.eof())
      {
         getline(file,dados);
         cout<<dados<<endl;
      }

      file.close();

      }

    else{clog<<"\nNão foi possivel abrir arquivo para leitura!"<<endl<<"Arquivo não pode ser lido por algum motivo ou ele não existe!"<<endl<<"Tem certeza que esse usuário possui um arquivo de comentários?"<<endl;}

    }
else{cout<<"\nUsuário não existe!"<<endl;}
return EXIT_SUCCESS;
}

int person_date::erase_aditionals_values(string _name)
{
if(verific_item(_name)==true){
const char* _namech=_name.c_str();
remove(_namech);

}

else{cout<<"\nUsuário não existe!"<<endl;}

return EXIT_SUCCESS;
}

Scripts recomendados

Aloca String

Linguagem C estruturada, parte 3 - Sistema Numérico Hexadecimal

Ordenando números em arquivo

2 Programinhas em C para conversão de bases

Convertendo char em string


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts