Programa simples em C++ para manipular dados de usuários!
Publicado por Perfil removido (última atualização em 27/01/2014)
[ Hits: 5.815 ]
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...
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; }
Simulador de Cronômetro com 2 digitos
Cálculo de Bhaskara para raízes reais e complexas
Digitar dados em um vetor, guardando-os sequencialmente em um arquivo texto
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (16)
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)