Programa simples em C++ para manipular dados de usuários!
Publicado por Perfil removido (última atualização em 27/01/2014)
[ Hits: 6.002 ]
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;
}
clean.h - Biblioteca para limpar um determinado espaço no terminal
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









