Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
brookmj

E nescessario banco de dados

Recommended Posts

Bom como iniciante em programação tenho um projeto mas não sei os passos para executá-lo direito.

bom quero criar um software simples graficamente , mas mas vão ser inseridas nele informações ,

essas informações serão consultadas e convertidas  .

O que quero explicando melhor e cria um software para uma padaria por exemplo, para administrar

custos de produtos e receitas apenas mas terá que salvar essa receita e que tenha como editá-la quando necessário.

Ex:

produto                          medida       valor

Farinha                         400g            ""<-- aqui vai atualizar automático o valor pois ja terei adicionado farinha antes assim como agora adiciono a receita dessa massa

açúcar                            15g

sal                                  5g   

manteiga p/ folhados    350g         

 

Rendimento <--- aqui eu coloco o peso que rendeu essa receita

 

Total custo                      ""<-- e aqui o programa me da o valor por quilo .

 

e dessa mesmo forma posso adicionar qualquer receita mas para ingredientes comprados adicionarei de outra forma

mas teria q salvar essa receita e ela iria para a mesmo lista de todos assim ao criar uma nova receita posso chamar

essa massa e o peso dela e ter o custo de um pastel por exemplo e quando eu alterar o preço da farinha alteraria tudo.

sei que da pra fazer tudo isso em Excel.

Mas gostaria de fazer de uma forma que ficasse independente instalasse o programa e pronto poderia ser usado.

Obrigado por ler ate aqui. Mas a duvida vem agora sei que tem mysql mas dai o "cliente" teria que instalar xammp e por ai vai

quero saber se tem como fazer so com manipulação de txt acredito que nao . mas então como eu deveria fazer pra não

 instalar muita coisa no pc do dito cliente pois tenho que ter em mente que ele pode ser burro e so ira digitar e editar os campos . e assim trabalhara eficientemente????

 

Agradeço a ajuda. alias perguntei aqui porque pretendo criar em c# ou C++ mas se tiver uma forma melhor de fazer isso agradeço também

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 minutos atrás, brookmj disse:

quero saber se tem como fazer so com manipulação de txt acredito que nao

Claro que da para fazer em um txt, ou inclusive em vários(Um por cada receita). porém se o que você quer é usar uma BD, se não me engano a maioria das BDs possuem "binds" que a conectam com praticamente com a grande maioria dos linguagens.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 minutos atrás, brookmj disse:

quero saber se tem como fazer so com manipulação de txt acredito que nao

Claro que da para fazer em um txt, ou inclusive em vários(Um por cada receita). porém se o que você quer é usar uma BD, se não me engano a maioria das BDs possuem "binds" que a conectam com praticamente com a grande maioria dos linguagens.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, vangodp disse:

Claro que da para fazer em um txt, ou inclusive em vários(Um por cada receita). porém se o que você quer é usar uma BD, se não me engano a maioria das BDs possuem "binds" que a conectam com praticamente com a grande maioria dos linguagens.

sim entendo mas nao quero que seja uma db nao e obrigatorio tem que ser smples ao usuario entende tipo em farios txt o programa vai puxar o produto e o valor dele e alteralo em todo o programa por exemplo?

porque como disse na maioria dos casos que vi tem que instalar programas de 3ªs ai se o usuario faz algo errado no pc e da bug, mas se for so o programa ele no maximo tem que começar uma nova lita de itens e receitas um novo arquivo e pronto 

Editado por brookmj

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso o que você quer é um simples CRUD, não acho que tenha problemas algum em usar txts

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, vangodp disse:

Isso o que você quer é um simples CRUD, não acho que tenha problemas algum em usar txts

ta bom e com ess CRUD funcionaria em txt com interface grafica e reediçao do façor da farinha por exemplo iria alterar o valor de toras as receitas lincadas a farinha??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui deixo um exemplo de um CRUD algo incompleto. Se não lembro mal falta poder alterar dados, porém inserir, listar, excluir sim estão incluídos. Até mesmo tem uma opção que organiza de forma alfabética a lista de contatos.
 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <windows.h>

using namespace std;

struct Agenda{
	char nome[50]; 
	int telefoneFixo; 
	int telefoneCelular; 
	char email[100];	
}agenda={0};

//Prototipos funções básicas
int  menu(int opc);
void tomarDadosContato   ( Agenda& contato );
int  lerDadosArquivo     ( FILE* arquivo, Agenda& contato );
void imprimirContato     ( Agenda& contato );
void guardarDadosArquivo ( FILE* arquivo, Agenda* contato );
void pausa();
void limparTela();
void copiar( Agenda* A, Agenda* B );

//Prototipos funções do menú
void incluir();
void listar ();
void ordenar();
void excluir();

int main (){
    //ajusta o console a 70 letras e 50 linhas
    system("MODE CON cols=70 lines=50");
    
    //Permite letras como ç, ã, á etc
    setlocale(LC_ALL, "Portuguese");

    bool sair = false;
    int opc = 0;
    while( !sair ){
    	switch ( menu(opc) ) {
		    case 1: incluir();   break;
		    case 2: listar ();   break;
		    case 3: ordenar();   break;
		    case 4: excluir();   break;
		    case 0: sair = true; break;             
		    default: printf( "Não existe essa opcao\n" ); pausa(); break;
		}//FIN SWITCH
		
    }//FIN WHILE
    
    return 0;
}//FIN MAIN

//Implementação funções do menú
void incluir(){
    //Função que inclui um contato novo al final do arquivo agenda.txt
    
    limparTela();
    FILE* arquivo = fopen( "agenda.txt", "a" );
    if ( arquivo == NULL ){
    	printf ("Nao foi posivel abrir o arquivo incluir o contato.\n");
    	return;
    }
    
	Agenda contato   = {0};
	tomarDadosContato  ( contato );
    guardarDadosArquivo( arquivo, &contato );
    printf("Contato guardado corretamente. ");
    pausa();
    fclose(arquivo);
    return;
}                
void listar (){
    //Função que imprime todos os contatos de agenda.txt na tela.
    
    limparTela();
    //preparamos um arquivo de leitura.
    FILE* arquivo = fopen( "agenda.txt", "r" );
    if ( arquivo == NULL ){
    	printf ("Nao foi posivel abrir o arquivo para listar os contatos.\n");
    	return;
    }

	Agenda contato;
	rewind(arquivo);
	//Lemos um a um e mostramos na tela.
	while ( lerDadosArquivo( arquivo, contato ) != EOF ){ //A funçao leerDadosArquivo le um usuario por vez, e se chega no fim do arquivo retorna EOF(fim do arquivo.).
        //Evitamos listar contatos excluidos.
        if ( contato.nome[0] != '*' ){
            imprimirContato( contato );
        }
    }
	pausa();
	fclose(arquivo);
    return;
}
void ordenar(){
	limparTela();
    //Abrimos um arquivo para modo leitura.
    FILE* arquivo = fopen( "agenda.txt", "r" );
    if ( arquivo == NULL ){
        printf("Não foi possivel abrir o arquivo para contar usuarios. ");
        pausa();
        limparTela();
        return;
    }
    
    //Contamos quantos usuarios tem no arquivo... 
    Agenda contato;
    int contador = 0;  //Somente interos positivos
    while ( lerDadosArquivo( arquivo, contato ) != EOF ){
        //...excluindo os que estão marcados de esta forma: "**** **** **** *****"
        if ( contato.nome[0] != '*' ){
            contador++;
        }
    }
    
    //Informamos quantos contatos existem no arquivo excluindo os marcados com '*'.
    printf("Encontrados %d contatos validos. ", contador);
	pausa();
    
    //Reservamos memoria dinamica para cargar contatos validos(excluindo os marcados) na free storage(heap).
    Agenda* lista = ( Agenda * )calloc( contador, sizeof( Agenda ) ); //calloc reserva memoria e tambem formata toda ela com nulos.
    
    //voltamos ao principio do arquivo
    rewind(arquivo);
    int indice = 0;
    while ( lerDadosArquivo(arquivo, contato) != EOF ){
        if ( contato.nome[0]!= '*' ){
            //
            copiar( &contato, &lista[indice]); 
            indice++;
            if ( indice > contador ){
                indice = contador; //Isso evita que nos ultrapassamos o rango maximo.
            }
        }
    }
    fclose(arquivo);
    
    
    printf ("Sem organizar:\n\n");
    for( int i = 0; i< contador; i++){
        imprimirContato( lista[i] );
    }

    for ( int i = 0; i < contador; i++ ){
        for ( int j = 0; j < contador; j++ ) {
            if ( i != j ){
                if ( strcmp ( lista[i].nome, lista[j].nome ) < 0 ) {
                    copiar(&lista[i], &contato);
                    copiar( &lista[j], &lista[i] );
                    copiar( &contato, &lista[j]);
                }
            }
        }
    }    
    
    printf ("Organizados:\n\n");
    for( int i = 0; i< contador; i++){
        imprimirContato( lista[i] );
    }
    
    //Procedemos a guardar em um novo arquivo.
    FILE* novoArquivo = fopen("agenda.txt", "w"); //De esta vez o modo é destrutivo, assim que borrará todo o conteudo que estiver no arquivo antigo
    if ( novoArquivo == NULL ){
        printf("Não foi possivel abrir o arquivo para guardar os dados organizados. ");
        pausa();
        limparTela();
        return; 
    }
    
    //Guardando a lista organizada no arquivo.
    indice = 0;
    while ( indice < contador ){
        guardarDadosArquivo( novoArquivo, &lista[indice]);
        indice++;
    }
    
    //liberando recursos
    free(lista);          //memoria dinamica deve ser liberada antes de sair
    fclose(novoArquivo); //fechamos o novo arquivo
    
    //Avisamos que tudo termino corretamente
    printf("Arquivo organizado. ");
    pausa();
    return;
}
void excluir(){
	//Função que procura um contato, se o encontrar troca todas as letras do campo de esse contato por asteriscos'*'.
	
	limparTela();
	FILE* arquivo = fopen("agenda.txt", "r+");
	if(arquivo == NULL){
        printf("Nao foi possivel abrir o arquivo para excluir o contato");
        return;
	}
	Agenda contato;
	bool encontrado = false;	
	fpos_t antesDeUsuario = 0;
	
	//perguntamos por qual contato queremos eliminar
	printf("Nome do contato a excluir?: ");
	char nome[50] = {0};
	scanf("%s%*c",nome);
	limparTela();
    
    //buscamos no arquivo o usuario tomado anteriormente
	rewind(arquivo);
    fgetpos( arquivo, &antesDeUsuario);
    while ( lerDadosArquivo( arquivo, contato ) != EOF ){
        if ( strcmp(nome, contato.nome) == 0 ){
            encontrado = true;
            break;
        }
        fgetpos( arquivo, &antesDeUsuario); 
	}
	
	//Si o contato existe excluimos ele transformando suas letras em asteriscos'*' deixando marcado no arquivo.
	if ( encontrado == true ){
        char linha[200] = {0};
        fsetpos( arquivo, &antesDeUsuario );
        fgets(linha,200, arquivo);
        
        for( int i = 0; linha[i] != '\0'; i++ ){
            if ( linha[i] != ' ' && linha[i] != '\r' && linha[i] != '\n' ){
                linha[i] = '*';
            }
        }
        fsetpos( arquivo, &antesDeUsuario );
        fputs(linha, arquivo);
        fclose(arquivo);
        
        printf("Contato excluido. ");
        pausa();
        limparTela();
        return;
	
	//Si o usuario não estiver no arquivo avisamos e saimos sem alterar nada.
	}else{
        limparTela();
        printf("Não existe esse contato. ");
        pausa();
        fclose(arquivo);
        return;
	}
	//Fin da função.
}

//Implementação funções básicas
int  menu( int opc ){
    //Esse é o menu de opções
    limparTela();
    printf("Escolha uma opção \n1-Incluir \n2-Listar \n3-Ordenar \n4-Excluir \n0-Sair \n?>>");
    scanf(" %d%*c",&opc );
    return opc; //<-retorna a opção para o switch desde aqui a main deixando a mesma más organizada.
}
void tomarDadosContato  ( Agenda& contato ){
	//Pede ao usuario os dados do contato a incluir ao arquivo e guarda ele no contato recebido por referencia.
	printf("Entre com os dados do usuario\n\n");
	printf ("Nome....: "); scanf ( "%s%*c", contato.nome );
	printf ("Tel fixo: "); scanf ( "%d%*c", &contato.telefoneFixo );
	printf ("Tel cel.: "); scanf ( "%d%*c", &contato.telefoneCelular );
	printf ("e-mail..: "); scanf ( "%s%*c", contato.email );
	return;    
}
int  lerDadosArquivo    ( FILE* arquivo, Agenda& contato ){
    //Le um usuario por vez, e se chega no fim do arquivo retorna EOF(fim do arquivo.). É uma versao más curta do fscanf praticamente.
    return fscanf ( arquivo, "%s %d %d %s%*c", contato.nome, &contato.telefoneFixo, &contato.telefoneCelular, contato.email );
} 
void imprimirContato    ( Agenda& contato ){
    //imprime o contato recebido por referencia.
    printf("%s %d %d %s\n", contato.nome, contato.telefoneFixo, contato.telefoneCelular, contato.email);
    return;
}
void guardarDadosArquivo( FILE* arquivo, Agenda* contato ){
    //Escreve os dados do contato tomados previamente normalmente por tomarDadosContato na posiçao atual em que esteja o descritor de archivo ou tambem chamado cursor.
    fprintf( arquivo, "%s %d %d %s\n", contato->nome, contato->telefoneFixo, contato->telefoneCelular, contato->email );
    return;
}
void pausa(){
    //pausa o programa. É melhor opção que usar system("pause"); já que nao precisamos incluir más headers.
    printf("Presione uma tecla para continuar...");
    scanf("%*c");
    return;
}
void limparTela(){
    //bastante obvio que limpa nossa só no windows. si estamos en linux é só incluir aqui a funçao que limpa tela no linux ;)
    
    //v1
    //COORD inicio = {0, 0};
    //int linhas = 100;
    //int colunas = 60;
    //DWORD n;
    //FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ', linhas*colunas, inicio, &n);
    
    //v2
    COORD coord;
    DWORD written;
    CONSOLE_SCREEN_BUFFER_INFO info;
    
    coord.X = 0;
    coord.Y = 0;
    GetConsoleScreenBufferInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &info );
    FillConsoleOutputCharacter ( GetStdHandle ( STD_OUTPUT_HANDLE ), ' ',
    info.dwSize.X * info.dwSize.Y, coord, &written );
    SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
    return;
}
void copiar( Agenda* A, Agenda* B ){
    //Copia contato A em contato B recebido por punteiros.
    strcpy( B->nome, A->nome );
    B->telefoneFixo = A->telefoneFixo;
    B->telefoneCelular =A->telefoneCelular;
    strcpy( B->email, A->email ); 
}

Se puder roda-lo ao executar o programa pede os dados de usuários como nome, tel, mov, email, etc, trás fechar o programa você pode perceber que é criado um arquivo junto ao programa, uma mini BD porém feita 100% pelo programa. Seria coisa de fazer algo parecido porém mais funcional.

adicionado 6 minutos depois
3 minutos atrás, brookmj disse:

ta bom e com ess CRUD funcionaria em txt com interface grafica e reediçao do façor da farinha por exemplo iria alterar o valor de toras as receitas lincadas a farinha??

Seria o caso de você ter uma lista de preços, e se quiser saber quanto custa fazer esse bolo é só consultar todos os ingredientes nessa tal lista de preços. você até pode adicionar a mão de obra se quiser. E também poderia deixar que o programa pergunte se alguma coisa extra seja adicionada, depende do seu nível como programador mas realmente as possibilidades seriam praticamente infinitas. >_<

Sobre interfaces não vejo nenhum problema, eu não sou especialista em interfaces mas incluir uma interface acredito que não seja muito problema, porém requer algo de experiência em interfaces claro, não é do dia para a noite que você faz um programa desses. Se você souber C# acho que seria uma boa escolha, e se souber C++ então... >_<

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@vangodp

a parte da experiencia eu entendo que tenho pouca mas meu problema estava em nao saber do que ir atras

estava perdido. mas a mini db que tu disse que cria ela e em txt certo me confundi rapidamente porque nao entendi se ainda e txt ou esse codigo cria uma diferente

Compartilhar este post


Link para o post
Compartilhar em outros sites

100% txt. O programa cria uma agenda e a salva em txt, logo o programa faz coisas como inclusão, busca, organização alfabética do arquivo, elimina usuários, etc do txt. Se souber rodar o programa, como falei o programa tem um menu não é gráfico, porém é funcional, ele te da opções como inserir, buscar, eliminar, etc, se inserimos ao menos um usuário, ao fechar o programa você pode ver que junto na pasta do executável do programa aparece um txt com os dados das pessoas que foram inseridas, é uma BD porém em txt. :lol:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×