Dev - C++ - Suplico ayuda con mi proyecto final de Programación

   
Vista:

Suplico ayuda con mi proyecto final de Programación

Publicado por Clemente clementekuchle@hotmail.com (3 intervenciones) el 04/12/2015 02:32:34
Hola estimados programadores, estudio en un Tecnológico, y una de mis debilidades ha sido siempre el de la programación. Al principio era fácil, pero ahora con esto de los arreglos...simplemente es demasiado para mí, y todo lo que me enseñas está en chino desde mi perspectiva.
Por favor, ustedes son expertos, este proyecto les será pan comido, estoy seguro! Les pido que me ayuden:(

DEBE ESTAR EN LENGIAJE C

P.S : Un amigo que hizo el mismo proyecto que yo me dijo que él lo resolvio (se lo resolvieron) haciendo un arreglo con cuatro corchetes, osea algo así x[a][b][c][d], no tengo in idea de qué signifique eso, pero si ustedes pueden encontrar una mejor manera de resolverlo entonces les estaré eternamente agradecidos!

El proyecto lo muestro en las imágenes que subí.


Progra1
Progra2
Progra3
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Suplico ayuda con mi proyecto final de Programación

Publicado por agustin (306 intervenciones) el 04/12/2015 13:13:31
Y en que quieres exactamente que te ayudemos? Eso se puede resolver de varias formas y la que le hicieron a tu amigo es la más fácil de implementar pero la más complicada de entender ya que un array con muchas dimensiones es puede confundir y mucho. Otra opción es crear tipos definidos por nosotros y crear arrays de esos tipos y enlazarlos entre sí. O sea:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef struct Departamento{
   char trabajador[6][50];
};
typedef struct Tienda{
   Departamento departamento[6];
};
typedef struct Empresa {
   Tienda tienda[6];
};
 
int main {
   Empresa emp [2];
   //para acceder a un empleado en concreto
   strcpy ( emp[0].tienda[3].departamento[2].trabajador[5], "Manolo");
   printf ("%s",emp[0].tienda[3].departamento[2].trabajador[5]);
   return 0;
}
Esta hecho en el móvil así que supongo que tendrá fallos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suplico ayuda con mi proyecto final de Programación

Publicado por agustin (306 intervenciones) el 04/12/2015 15:05:19
Aqui lo tienes con mas curro en el pc:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
#define LARGO_CADENA 50
#define NTRABAJADORES 6
#define NDEPARTAMENTOS 6
#define NTIENDAS 6
 
typedef struct{
   char trabajador[NTRABAJADORES][LARGO_CADENA];
}Departamento;
 
typedef struct{
   Departamento departamento[NDEPARTAMENTOS];
}Tienda;
 
typedef struct{
   Tienda tienda[NTIENDAS];
}Empresa;
 
void LimpiarEmpleados(Empresa *emp);
void ListarEmpleados(Empresa emp);
void IngresarEmpleado(Empresa *emp);
void EliminarEmpleado(Empresa *emp);
int Menu(void);
 
int main(){
   int salir=0;
   Empresa emp;
 
   LimpiarEmpleados(&emp);
 
   do{
      switch(Menu())
      {
         case 0:
            salir=1;
         break;
 
         case 1:
            //Para guardar el nombre de un empleado en concreto
            IngresarEmpleado(&emp);
         break;
 
         case 2:
            ListarEmpleados(emp);
         break;
 
         case 3:
            EliminarEmpleado(&emp);
         break;
 
         default:
            printf("Opcion no valida.\n");
      }
      system("PAUSE");
      system("CLS");
   }while(salir != 1);
   return 0;
}
 
int Menu()
{
   int op;
 
   printf("Mi gestion de empleados de la empresa\n");
   printf("-------------------------------------\n\n");
   printf("1.Ingresar nuevo empleado\n");
   printf("2.Listar todos los empleados de la empresa\n");
   printf("3.Eliminar empleado\n");
   printf("0.Salir\n");
   scanf("%i",&op);
   return op;
}
 
void LimpiarEmpleados(Empresa *emp)
{
   int indTienda,indDepartamento,indTrabajador;
 
   //Limpio la memoria para todos los nombres de trabajadores de la empresa
   for(indTienda=0;indTienda < NTIENDAS;indTienda++)
      for(indDepartamento=0;indDepartamento < NDEPARTAMENTOS;indDepartamento++)
         for(indTrabajador=0;indTrabajador < NTRABAJADORES;indTrabajador++)
            memset(emp->tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador],'\0',LARGO_CADENA);
}
 
void ListarEmpleados(Empresa emp)
{
   int indTienda,indDepartamento,indTrabajador;
 
   printf("Listado de nombres de trabajadores de la empresa:\n");
   for(indTienda=0;indTienda < NTIENDAS;indTienda++)
      for(indDepartamento=0;indDepartamento < NDEPARTAMENTOS;indDepartamento++)
         for(indTrabajador=0;indTrabajador < NTRABAJADORES;indTrabajador++)
            if(strcmp(emp.tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador],"")!=0)
               printf("Tienda[%i]->Departamento[%i]->Trabajador[%i]: %s",indTienda,indDepartamento,indTrabajador,emp.tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador]);
}
 
void IngresarEmpleado(Empresa *emp)
{
   int indTienda,indDepartamento,indTrabajador;
   char sobreescribir='S';
 
   do{
      printf("Introduce el indice de tienda (rango de 0 a %i): ",NTIENDAS);
      scanf("%i",&indTienda);
      if(indTienda < 0 || indTienda >= NTIENDAS)
         printf("Ingresa un indice de tienda valido.\n");
   }while(indTienda < 0 || indTienda >= NTIENDAS);
 
   do{
      printf("Introduce el indice del departamento (rango de 0 a %i): ",NDEPARTAMENTOS);
      scanf("%i",&indDepartamento);
      if(indDepartamento < 0 || indDepartamento >= NDEPARTAMENTOS)
         printf("Ingresa un indice de departamento valido.\n");
   }while(indDepartamento < 0 || indDepartamento >= NDEPARTAMENTOS);
 
   do{
      printf("Introduce el indice del trabajador (rango de 0 a %i): ",NTRABAJADORES);
      scanf("%i",&indTrabajador);
      if(indTrabajador < 0 || indTrabajador >= NTRABAJADORES)
         printf("Ingresa un indice de trabajador valido.\n");
      else if(strcmp(emp->tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador],"")!=0){
         printf("Ya existe un nombre en dicha posicion: %s\n",emp->tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador]);
         printf("Pulse 'S' para sobreescribir o cualquier otra tecla para cancelar: ");
         scanf("%c",&sobreescribir);
      }
   }while(indTrabajador < 0 || indTrabajador >= NTRABAJADORES);
 
   if(toupper(sobreescribir) == 'S'){
      fflush(stdin);
      printf("Ingresa el nombre del empleado: ");
      fgets(emp->tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador],LARGO_CADENA-1,stdin);
   }
}
 
void EliminarEmpleado(Empresa *emp)
{
   int indTienda,indDepartamento,indTrabajador;
 
   do{
      printf("Introduce el indice de tienda (rango de 0 a %i): ",NTIENDAS);
      scanf("%i",&indTienda);
      if(indTienda < 0 || indTienda >= NTIENDAS)
         printf("Ingresa un indice de tienda valido.\n");
   }while(indTienda < 0 || indTienda >= NTIENDAS);
 
   do{
      printf("Introduce el indice del departamento (rango de 0 a %i): ",NDEPARTAMENTOS);
      scanf("%i",&indDepartamento);
      if(indDepartamento < 0 || indDepartamento >= NDEPARTAMENTOS)
         printf("Ingresa un indice de departamento valido.\n");
   }while(indDepartamento < 0 || indDepartamento >= NDEPARTAMENTOS);
 
   do{
      printf("Introduce el indice del trabajador (rango de 0 a %i): ",NTRABAJADORES);
      scanf("%i",&indTrabajador);
      if(indTrabajador < 0 || indTrabajador >= NTRABAJADORES)
         printf("Ingresa un indice de trabajador valido.\n");
   }while(indTrabajador < 0 || indTrabajador >= NTRABAJADORES);
 
   memset(emp->tienda[indTienda].departamento[indDepartamento].trabajador[indTrabajador],'\0',LARGO_CADENA-1);
}

PD: La idea no es dartelo hecho, es darte la caña para que aprendas a pescar y con lo que te doy si le haces un par de añadiduras/modificaciones te vale perfectamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suplico ayuda con mi proyecto final de Programación

Publicado por agustin (306 intervenciones) el 04/12/2015 22:50:34
Mira a ver si esto se acerca a lo que quieres hacer:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//---------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define NSUCURSALES 8
#define NDEPARTAMENTOS 6
#define NVENDEDORES 4
#define NDIAS 7
//---------------------------------------------------------------------------
 
int guardar(int compania[NSUCURSALES][NDEPARTAMENTOS][NVENDEDORES][NDIAS],char *ruta);
//---------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
   int compania[NSUCURSALES][NDEPARTAMENTOS][NVENDEDORES][NDIAS];
 
   memset(&compania,0,sizeof(compania));
 
   //Prueba para meter algunos datos de ventas
   //Tu tendrás que elegir como haces para rellenar esos datos
   //Si los pides usando el teclado o lo que sea
   compania[7][5][3][0]=1525;
   compania[7][5][1][6]=525;
   compania[7][5][1][4]=150;
   compania[7][5][3][4]=1050;
   compania[1][5][1][4]=150;
   compania[7][4][1][4]=150;
 
   //Guardo en un archivo todo el reporte
   if(guardar(compania,"Salida.txt")==0)
      printf("Guardado satisfactorio.\n");
   else
      printf("Huvo un error al guardar el reporte\n");
   system("PAUSE");
   return 0;
}
//---------------------------------------------------------------------------
 
int guardar(int compania[NSUCURSALES][NDEPARTAMENTOS][NVENDEDORES][NDIAS],char *ruta)
{
   FILE *archivo;
   int indexSucursal,indexDepartamento,indexVendedor,indexDia;
   int totalVendedor,totalDepartamento,totalSucursal,totalDepartamentoDia[7],totalGeneralDia[7];
   int retval;
 
   struct{
      int Sucursal;
      int Ventas;
   }MejorSucursal;
 
   struct{
      int Sucursal;
      int Departamento;
      int Ventas;
   }MejorDepartamento;
 
   struct{
      int Sucursal;
      int Departamento;
      int Vendedor;
      int Ventas;
   }MejorVendedor;
 
   MejorVendedor.Ventas=0;
   archivo=fopen(ruta,"w");
 
   if(archivo != NULL){
      memset(totalGeneralDia,0,sizeof(totalGeneralDia));
      fprintf(archivo,"-------------------------\n");
      fprintf(archivo,"REPORTE SEMANAL DE VENTAS\n");
      MejorSucursal.Sucursal=0;
      MejorSucursal.Ventas=0;
      for(indexSucursal=0;indexSucursal < NSUCURSALES;indexSucursal++){
         fprintf(archivo,"-------------------------\n");
         fprintf(archivo,"Sucursal %d\n",indexSucursal+1);
         MejorDepartamento.Ventas=0;
         MejorDepartamento.Departamento=0;
         totalSucursal=0;
         for(indexDepartamento=0;indexDepartamento < NDEPARTAMENTOS;indexDepartamento++){
            fprintf(archivo,"-------------------------\n");
            fprintf(archivo,"Departamento %d\n",indexDepartamento+1);
            fprintf(archivo,"-------------------------\n");
            fprintf(archivo,"              ");
            for(indexDia=0;indexDia < NDIAS;indexDia++)
               fprintf(archivo,"   Dia %d",indexDia+1);
            fprintf(archivo,"   TOTAL\n");
            memset(totalDepartamentoDia,0,sizeof(totalDepartamentoDia));
            totalDepartamento=0;
            for(indexVendedor=0;indexVendedor < NVENDEDORES;indexVendedor++){
               fprintf(archivo,"Vendedor %d    ",indexVendedor+1);
               totalVendedor=0;
               for(indexDia=0;indexDia < NDIAS;indexDia++){
                  totalVendedor += compania[indexSucursal][indexDepartamento][indexVendedor][indexDia];
                  fprintf(archivo,"%8d",compania[indexSucursal][indexDepartamento][indexVendedor][indexDia]);
                  totalDepartamentoDia[indexDia] += compania[indexSucursal][indexDepartamento][indexVendedor][indexDia];
                  totalGeneralDia[indexDia] += compania[indexSucursal][indexDepartamento][indexVendedor][indexDia];
                  totalDepartamento += compania[indexSucursal][indexDepartamento][indexVendedor][indexDia];;
                  if(totalVendedor > MejorVendedor.Ventas){
                     MejorVendedor.Sucursal=indexSucursal;
                     MejorVendedor.Departamento=indexDepartamento;
                     MejorVendedor.Vendedor=indexVendedor;
                     MejorVendedor.Ventas=totalVendedor;
                  }
               }
               if(MejorDepartamento.Ventas < totalDepartamento){
                  MejorDepartamento.Ventas = totalDepartamento;
                  MejorDepartamento.Departamento = indexDepartamento;
                  MejorDepartamento.Sucursal = indexSucursal;
               }
               fprintf(archivo,"%8d\n",totalVendedor);
            }
            totalSucursal += totalDepartamento;
            fprintf(archivo,"Totales       ");
            for(indexDia=0;indexDia < NDIAS;indexDia++)
               fprintf(archivo,"%8d",totalDepartamentoDia[indexDia]);
            fprintf(archivo,"\n\n");
            if(MejorSucursal.Ventas < totalSucursal){
                  MejorSucursal.Ventas = totalSucursal;
                  MejorSucursal.Sucursal = indexSucursal;
            }
         }
      }
      fprintf(archivo,"Total General\n");
      fprintf(archivo,"de Produccion ");
      for(indexDia=0;indexDia < NDIAS;indexDia++)
         fprintf(archivo,"%8d",totalGeneralDia[indexDia]);
      fprintf(archivo,"\n\n");
      fprintf(archivo,"El departamento que mas vendio fue el %d de la sucursal %d y vendio %d\n",MejorDepartamento.Departamento+1,MejorDepartamento.Sucursal+1, MejorDepartamento.Ventas);
      fprintf(archivo,"La sucursal con mejores ventas es la %d y vendio %d\n",MejorSucursal.Sucursal+1,MejorSucursal.Ventas);
      fprintf(archivo,"El mejor vendedor es el %d del departamento %d de la sucursal %d y vendio %d\n",MejorVendedor.Vendedor+1,MejorVendedor.Departamento+1,MejorVendedor.Sucursal+1,MejorVendedor.Ventas);
      fclose(archivo);
      retval=0;
   }else{
      retval=-1;
   }
   return retval;
}
//---------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suplico ayuda con mi proyecto final de Programación

Publicado por Clemente (3 intervenciones) el 06/12/2015 05:14:01
Muchísimas gracias por tu ayuda:) de verdad que sí son buenos en esto!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suplico ayuda con mi proyecto final de Programación

Publicado por Clemente (3 intervenciones) el 06/12/2015 05:05:26
Muchísimas gracias por tu ayuda:))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar