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

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

[ Hits: 5.815 ]

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

Simulador de Cronômetro com 2 digitos

Cálculo de Bhaskara para raízes reais e complexas

fibonacci

PS.c e PS.pas - Pega Senha

Digitar dados em um vetor, guardando-os sequencialmente em um arquivo texto


  

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