Ir ao conteúdo
  • Cadastre-se

C++ Como fazer um pequeno sistema de departamento pessoal?


Tony Soprano

Posts recomendados

Faça em C/C++, um sistema para o departamento pessoal de uma empresa. O sistema deve possuir um menu principal através do qual o usuário pode escolher a opção que deseja. As operações (opções do menu principal) são:

 

1.) Inclusão de um novo funcionário: Neste caso, deve-se entrar com o código, o nome, o endereço e o número de dependentes do funcionário. Em seguida, deve-se entrar com a relação de projetos nos quais o funcionário trabalha (código, nome e número de horas trabalhadas por semana em um projeto). Cada funcionário pode trabalhar em, no máximo, 5 projetos diferentes. Não existem funcionários com o mesmo código.

 

2.) Inclusão de novos projetos para um funcionário: Neste caso, deve-se entrar com o código do funcionário para o qual se deseja acrescentar novos projetos. Então, o sistema deve apresentar os dados do funcionário e a relação de projeto nos quais ele já trabalha. Em seguida, deve-se entrar com os novos projetos a serem incluídos (código, nome e número de horas trabalhadas por semana no projeto). Se o funcionário não existe, deve ser apresentado uma mensagem de erro.

 

Pessoal estou simplesmente perdido em listas encadeadas, tô fazendo facul e o EAD tá me matando😥. Enfim, qualquer ajuda tô aceitando, se puderem me mostrar como fazer essas duas ficarei muito grato. Por enquanto estou com essa estrutura básica(C++):

 

   

    #include <iostream>
    #include <windows.h>
    
    #define MAXTAM 5
    #define INICIO 1
    
    typedef int TChave;
    
    typedef struct TCelula_str *TApontador; 
    
    typedef struct {
        TChave codigo; // codigo do projeto 
        char nome[30]; // nome do projeto 
        int horas; // numero de horas trabalhas no projeto 
    } TProjeto;
    
    typedef struct {
        TProjeto item [MAXTAM];
        int primeiro;
        int ultimo;
    } TListaSequencial;
    
    typedef struct { 
        TChave numero; // codigo do funcionario
        char endereco [40]; // endereco do funcionario
        int dependentes; // numero de dependentes do funcionario
        TListaSequencial projetos; // Lista Sequencial que guarda os projetos nos quais o funcionario trabalha
    } TFuncionario;
    
    typedef struct TCelula_str {
        TFuncionario item;
        TApontador prox;
    } TCelula;
    
    typedef struct {
        TApontador primeiro ;
        TApontador ultimo;
    } TListaEncadeada;
     
    using namespace std;
    
    // Funções(parâmetros)
    void menu();
    void CriaListaVazia (TListaEncadeada * lista);
    
    
    int main() {
      UINT CPAGE_UTF8 = 65001;
      UINT CPAGE_DEFAULT = GetConsoleOutputCP();
      SetConsoleOutputCP(CPAGE_UTF8);
      TListaEncadeada lista;
      CriaListaVazia (&lista);
      int op;
      
       do {
            menu();
            cout << "Escolha a opção: ";
            cin >> op;
            system("cls");
            switch(op) {
                case 1:
                    break;
                case 2:
                    break;
                case 3: 
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    cout << "Volte sempre!" << endl;
                    system("pause");
                    break;
            }
        } while(op != 7);
    
      return 0;
    }
    
    void menu() {    
         system("color 0B");
         cout<<"  \n        ����������������������������������������������������������������";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        �                     DEPARTAMENTO PESSOAL                     �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        ����������������������������������������������������������������";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 1 - INCLUIR NOVO FUNCIONÁRIO                                 �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 2 - INCLUIR NOVO PROJETO                                     �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 3 - EXCLUIR PROJETO                                          �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 4 - EXCLUIR FUNCIONÁRIO                                      �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 5 - CONSULTAR FUNCIONÁRIO                                    �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 6 - IMPRIMIR CONTRA-CHEQUE                                   �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        � 7 - SAIR                                                     �";
         cout<<"  \n        �                                                              �";
         cout<<"  \n        ����������������������������������������������������������������\n\n";
    }
    
    void CriaListaVazia (TListaEncadeada * lista) {
        lista->primeiro = new TCelula;
        lista->ultimo = lista->primeiro;
        lista->primeiro->prox = NULL;
    }
    
    int VerificaListaVazia (TListaEncadeada lista) {
        return (lista.primeiro == lista.ultimo);
    }

 

Link para o comentário
Compartilhar em outros sites

Isso que postou é na prática um programa em C não em C++

 

Está certo de que precisa programar essas listas? Nada apareceu no enunciado. C++ oferece listas, pilhas, filas, conjuntos, mapas e outras estruturas prontas para usar, bem como mais de uma centena de algoritmos.

 

Sobre o programa, em C ou C++

 

  • Evite perder tempo com cores e alinhamento de itens e menus antes do programa estar pronto. Isso por exemplo
     
        UINT CPAGE_UTF8    = 65001;
        UINT CPAGE_DEFAULT = GetConsoleOutputCP();
        SetConsoleOutputCP(CPAGE_UTF8);

    de nada vai servir para o projeto

  • não escreva um programa interativo. Só vai perder tempo
  • Em C++ é muito mais simples de escrever essas coisas do que em C. Use mais de C++ ;)
  • Evite void. coisas como void xx() são em geral um desastre.
  • Uma função menu deveria retornar a opção...
  • 20 cout de uma linha é muito menos que um cout de 20 linhas. Não use isso. E se é só para mostrar o texto use puts(). Mais simples e MUITO mais rápido

Sobre a lista, se precisa de fato programar isso

 

Ao usar uma estrutura de dados, como uma lista encadeada, entenda que uma estrutura é um container. Até tem esse nome em C++. Em java são chamadas coleções. Se programar uma estrutura dessas como se fosse um elemento com um ponteiro dentro só vai trabalhar mais e à toa. Em geral uma estrutura tem nós e cada nó tem uma referência a um dado. Por exemplo uma lista não é um nó, um nó não é uma lista. E os nós em geral tem uma referência a UM registro d dados. E nesse registro um campo é a chave, que se usa para comparar dois registros e dar uma noção de ordenação.
 

No enunciado não há qualquer referência a estruturas de dados ou detalhes de implementação. Está certo de que dee usar listas encadeadas? Está certo de que precisa programar as funções de lista? 

 

De todo modo você tem uma coleção de funcionários e cada um pode atuar em até 5 projetos. Nenhum dos dois casos parece muito adequado a usar uma lista, mas é uma opção.

 

Escreva em torno dos dados

 

E preste atenção ao modelo e à estrutura das coisas. C++ é talvez a melhor linguagem para escrever esssas coisas rápido.

 

Não entendi isso:

 

typedef struct
{
    TProjeto item[MAXTAM];
    int      primeiro;
    int      ultimo;
} TListaSequencial;

typedef struct
{
    TChave numero;        // codigo do funcionario
    char   endereco[40];  // endereco do funcionario
    int    dependentes;   // numero de dependentes do funcionario
    TListaSequencial
        projetos;  // Lista Sequencial que guarda os projetos nos quais
                   // o funcionario trabalha
} TFuncionario;

 

ListaSequencial é só um array.  Para que o primeiro e o último se os MAXTAM já foram alocados? Não basta um contador? E para que existe ListaSequencial se tal vetor só existe dentro de funcionário e tem tamanho fixo? Não bastaria um int com o código do projeto e um valor negativo indicando que não está em uso?

 

Evite isso:

 

    typedef struct TCelula_str* TApontador;

 

Não há razão para usar typedef em C++.

 

E em C não há razão para criar um tipo Apontador. Porque? porque a linguagem já tem isso. Só está criando novas representações que nada vão agregar exceto chance de erro.

 

Se TCelula existe então está claro em C ou C++ que um ponteiro para célula é

 

	TCelula    cel;
	TCelula*   pCel = &cel;

 

E se precisar de um ponteiro para TApontador? TApontador* é TCelula**. Vai criar outro nome, algo como TApontadorApontador? Ou bastam os dois asteriscos, na linguagem desde os anos 70? Evite isso. Não crie nomes para ponteiros.

 

Sugiro evitar esse tipo de comentário:
 

    Chave  codigo;    // codigo do projeto
    char   nome[30];  // nome do projeto
    int    horas;     // numero de horas trabalhas no projeto

 

Dá pra imaginar o que é código, o que nome... Comente os detalhes da implementação... Algo como

 

    Chave  codigo;    // formato NNNNN sem DV
    char   nome[30];  // formato PXXX-N etc..
    int    horas;     // horas por SEMANA

 

Exemplo

 

Isso é algo parecido com seu modelo

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

using Chave = int;

struct Projeto
{
    Chave  codigo;
    string nome;
    int    horas;

}

struct Funcionario
{
    Chave  numero;       // codigo do funcionario
    string endereco;     // endereco do funcionario
    int    dependentes;  // numero de dependentes do funcionario
    vector<Projeto> prj;
}

struct Celula
{
    Funcionario* item;
    Celula*      prox;
}

struct Lista
{
    Celula primeiro;
    int    tamanho;
}

 

Isso se não puder declarar simplesmente

 

	list<Funcionario>    cadastro; // ex.

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!