Sie sind auf Seite 1von 13

29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz


Martin Cruz 
 Blogueando sobre

 programación!

INICIO

+ TEMAS

L-SYSTEM ESTRUCTURA DE DATOS MANEJO DE ARCHIVOS ER Y AUTÓMATAS ÁRBOLES DE BÚSQUEDA OPENGL

+ LENGUAJES + FRAMEWORKS Y OTROS

C++ JAVA PHP ASSEMBLER LARAVEL ANDROID GIT SOBRE MÍ

Registros en C++ / Uso de struct


en C++
By Martin Cruz. Published on 11:18.
6

Un registro, en programación, es un tipo de dato estructurado formado


por la unión de varios elementos bajo una misma estructura. Estos
elementos pueden ser, o bien datos elementales (entero, real,
carácter,...), o bien otras estructuras de datos. A cada uno de esos
elementos se le llama campo.

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 1/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

Un ejemplo de eso seria hacer un registro de vendedores donde nos


pedirían información sobre, nombre, apellido, dirección, DNI, numero
de artículos, articulos vendidos, artículos que quedan, precio de cada
uno, el precio de todos los artículos de cada vendedor; para todo eso
necesitariamos usar REGISTROS ya que solo con vectores no
prodriamos afrontar el problema. Aqui les dejare un el ejercicio del
mismo que me dejaron el la universidad sobre un registro de
vendedores implementado en C++ y lo compartire con ustedes. El
enunciado del problema es el siguiente:

Implementa en C++:

Debo registrar vendedores (dni, nombres, apellidos, dirección(calle,


numero, urbanización) ) con sus respectivos productos vendidos
(producto, cantidad, precioventa).

Implementa el sistema usando registros y funciones. El sistema debe


permitir:

a) Registrar “N” vendedores con sus respectivos “Pk” productos.


b) Mostrar todos los vendedores con todos sus datos y sus respectivos
productos.
c) Mostrar los datos de un vendedor especí힣�co (ingresando su número
de orden)
d) Mostrar los productos vendidos de un vendedor especí힣�co
(ingresando su número de orden): producto, cantidad, precioventa,
Subtotal. y 힣�nalmente el Total

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 2/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

Subtotal = cantidad * precioventa


Total = sumatoria de los subtotales

e) Eliminar un vendedor especí힣�co (ingresando su número de orden)


f) Búsqueda por dni: ingresa el dni de un vendedor y que muestre su
dirección

Implementación:
1 /*
2 * C++ ‐ Agenda con uso de struct
3 *
4 * Copyright 2014 Martin Cruz Otiniano 
5 *
6 * Site: martincruz.me
7 */
8
9 #include <iostream>
10 #include <stdlib.h>
11
12 #define MAXCAD 50
13 #define MAX_V 100     // numero de vendedores
14 #define MAX_PV 100    // maximo de productos vendidos
15
16 using namespace std;
17  
18 struct unProducto {
19     char name_prod[MAXCAD];  // nombre del producto
20     int  cantidad;
21     int  precio  ;
22     int  subtotal;
23 };
24  
25 struct variosProductos {
26     int numProd ;             // numero de productos por vendedor
27     unProducto vp[MAX_PV];      //varios productos cada uno en una posicion del  vector
28     int precioTotal ;
29 };
30  
31 struct Vendedor {
32     char nombre[MAXCAD]   ;
33     char apellido[MAXCAD] ;
34     char direccion[MAXCAD];
35     int  DNI     ;
36     variosProductos P  ;
37 };
38  

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 3/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

39 struct Vendedor lista[MAX_V]; // creamos un array de tvendedores
40 struct Vendedor aux;
41  
42  
43 void registrar_productos(int nv, int np)
44 {
45     // nv ‐> numero de vendedor
46  
47     for(int i=0; i<np; i++)
48     {
49         cout<<"\n\tProducto "<< i+1 <<endl;
50         cin.ignore();
51         cout<<"\t\tNombre   : " ;
52         cin.getline( lista[nv].P.vp[i].name_prod, MAXCAD );
53  
54         //cin.ignore();
55         cout<<"\t\tCantidad : ";
56         cin>> lista[nv].P.vp[i].cantidad ;
57  
58         //cin.ignore();
59         cout<<"\t\tPrecio   : ";
60         cin>> lista[nv].P.vp[i].precio ;
61  
62         lista[nv].P.vp[i].subtotal = lista[nv].P.vp[i].cantidad * lista[nv].
63  
64         if(lista[nv].P.vp[i].subtotal==0)
65             cout<<"Subtotal 0";
66  
67         lista[nv].P.precioTotal = lista[nv].P.precioTotal +  lista[nv].
68  
69     }
70  
71 }
72 void registrar_vendedores(int n)
73 {
74     int np ;  //  numero de productos por cada vendedor
75     for(int i=0; i<n; i++)
76     {
77         cout<<"\nVENDEDOR "<< i+1 << "\n";
78  
79         cin.ignore();  cout << "   Nombres   : ";  cin.getline( lista[i].
80         cin.ignore();  cout << "   Apellidos : ";  cin.getline( lista[i].
81         cin.ignore();  cout << "   Direccion : ";  cin.getline( lista[i].
82         cin.ignore();  cout << "   D N I     : ";  cin>> lista[i].DNI ;
83  
84         cout<<"\n   > Numero de productos: ";      cin>> lista[i].P.numProd
85  

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 4/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

86         registrar_productos( i ,lista[i].P.numProd );
87     }
88 }
89  
90 void datosVendedor(int x, int num)
91 {
92     if(num>0)
93     {
94         cout<<endl<<endl;
95         cout << "\t" << lista[x].nombre <<' '<< lista[x].apellido << endl;
96         cout << "   DNI      :  "<< lista[x].DNI       << endl;
97         cout << "   Direccion:  "<< lista[x].direccion << endl;
98     }
99     else
100         cout<<"\n\tRegistro vacio..!";
101  
102 }
103  
104 void prodVendedor(int x, int num)
105 {
106     if(num>0)
107     {
108         cout<<endl<<endl;
109         cout << "   Productos de " << lista[x].nombre <<' '<< lista[x].
110  
111         for(int i=0; i<lista[x].P.numProd; i++)
112         {
113             cout<<"\n   Producto "<< i+1                      <<endl;
114             cout<<"\tNombre  : " << lista[x].P.vp[i].name_prod  <<endl;
115             cout<<"\tCantidad: " << lista[x].P.vp[i].cantidad <<endl;
116             cout<<"\tPrecio  : " << lista[x].P.vp[i].precio     <<endl;
117             cout<<"\tSubtotal: " << lista[x].P.vp[i].subtotal <<endl ;
118         }
119         cout<<endl;
120         cout<<"  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐"<<endl;
121         cout<<"  PRECIO TOTAL:   "<< lista[x].P.precioTotal;
122     }
123     else
124         cout<<"\n\tRegistro vacio..!";
125  
126 }
127  
128 void mostrar_productos(int nv)
129 {
130     cout<<"   Productos: \n\n";
131     for(int i=0; i<lista[nv].P.numProd; i++)
132     {

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 5/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

133         cout<<"\t‐ " << lista[nv].P.vp[i].name_prod <<endl ;
134     }
135 }
136  
137 void mostrar_vendedores(int num)
138 {
139     if( num>0)
140     {
141         cout<<"\n\nMostrando lista de Vendedores\n";
142         for(int i=0; i<num; i++)
143         {
144             cout<<endl<<endl;
145             cout<< i+1<<". "<< lista[i].nombre <<' '<< lista[i].apellido
146             cout << "   DNI      :  "<< lista[i].DNI       << endl;
147             cout << "   Direccion:  "<< lista[i].direccion << endl;
148  
149             mostrar_productos( i );
150             cout<<endl;
151  
152         }
153     }
154     else
155         cout<<"\n\tRegistro vacio..!";
156 }
157  
158 void eliminar_vendedor( int x, int &num)
159 {
160     if(num>0)
161     {
162         for(int i=x; i<num‐1; i++)
163             lista[i] = lista[i+1];
164  
165         num‐‐;
166     }
167     else
168         cout<<"\n\tRegistro vacio..!";
169  
170 }
171  
172 void buscar_vendedor( int num)
173 {
174     int band = 0;
175  
176     if(num>0)
177     {
178         for(int i=0; i<num; i++)
179         {

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 6/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

180             if(lista[i].DNI==aux.DNI)
181             {
182                 cout<<"\n\n La direccion de "<<lista[i].nombre<<" "
183                     <<lista[i].apellido<<" es : "
184                     <<lista[i].direccion <<endl ;
185                 band = 1 ;
186                 break;
187             }
188         }
189     }
190     else
191         cout<<"\n\tRegistro vacio..!";
192  
193     if(band==0)
194         cout<<"\n\n\tEl vendedor no fue encontrado..! :S"<<endl;
195  
196 }
197  
198 void menu1()
199 {
200     cout<<"\n\t\tREGISTRO DE VENDEDORES\n\n";
201     cout<<" 1. Registrar vendedores                       "<<endl;
202     cout<<" 2. Mostrar registro de vendedores y productos "<<endl;
203     cout<<" 3. Mostrar datos de un vendedor               "<<endl;
204     cout<<" 4. Mostrar productos vendidos de un vendedor  "<<endl;
205     cout<<" 5. Eliminar vendedor del registro             "<<endl;
206     cout<<" 6. Buscar direccion de vendedor por DNI       "<<endl;
207     cout<<" 7. Salir                                      "<<endl;
208  
209     cout<<"\n Ingrese opcion : ";
210 }
211  
212 /*                      funcion principal
213 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
214  
215 int main()
216 {
217     int num=0;  // numero de vendores
218     int op;   // opcion del menu
219     int num_vendedor ;
220    
221     system("color 0b");
222  
223     do
224     {
225         menu1();  cin>> op;
226  

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 7/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

227         switch(op)
228         {
229             case 1:
230                 cout<<"\n Numero de vendedores: ";
231                 cin>> num;
232                 registrar_vendedores(num);  cout<<endl;
233                 break;
234  
235             case 2:
236                 mostrar_vendedores(num);
237                 break;
238  
239             case 3:
240                 cout<<"\n Ingrese numero de vendedor: ";
241                 cin>> num_vendedor ;
242                 datosVendedor( num_vendedor‐1, num);
243                 break;
244  
245             case 4:
246                 cout<<"\n Ingrese numero de vendedor: ";
247                 cin>> num_vendedor ;
248                 prodVendedor( num_vendedor‐1, num);
249                 break;
250  
251             case 5:
252                 cout<<"\n Ingrese numero de vendedor: ";
253                 cin>> num_vendedor ;
254                 eliminar_vendedor( num_vendedor‐1, num);
255                 cout<<"\n\n\t\tVendedor eliminado ..!"<<endl;
256                 break;
257  
258             case 6:
259                 cout<<"\n Ingrese numero de DNI: ";
260                 cin>> aux.DNI;
261                 buscar_vendedor(num);
262                 break;
263  
264         }
265        
266         cout<<endl<<endl;
267         system("pause");  system("cls");
268  
269     } while(op != 7);
270  
271  
272     return 0;
273 }

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 8/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

agenda.cpp hosted with ❤ by GitHub view raw

Martin Cruz
Desarrollador Web | Estudiante de Ing. Informática
 Website  Twitter  Facebook  Google+

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 9/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

6 comentarios

Añade un comentario

Mejores comentarios

luis escalante hace 3 años


 Hermano buenas noches, podria explicarme el mismo ejercicio pero en c? por favor.

Ädn_O'z hace 3 años


 ¿Para hacer algo similar pero con doble enlace? ¿Tendrás ese ejemplo?

hace 3 años
 gracias por todo esta excelente el ejemplo

hace 3 años
 
XVRE...!!!

Martin Cruz hace 3 años


 
using namespace std; sirve para poder usar cout y cin sin anteponer "std::" en cout y cin. Ejemplo: st
sdt::cin>> var; MAXCAD es una macro que se de͈ne en la cabezera del programa( #de͈ne MAXCAD
valor para poder usarlo en cualquier parte del programa, funciona como una constante. Puedes pon
gustas, por ejemplo #de͈ne longitud_maxima 100 // Puse MAXCAD porque hacia referencia ala lon
cadenas que iba a usar. Espero haberte ayudado. Saludos..

hace 3 años
 
disculpa que signi͈ca lo siguiente : using namespace std; struct unProducto { char name_prod[MAX
maxcad por otra cosa o para que sirve?

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 10/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

Martin Cruz Blog
976 likes

Like Page Share

Be the first of your friends to like this

ACERCA DE
Martin Cruz
Seguir 174

Ver todo mi per힣�l

DESTACADOS

Arboles Binarios de Busqueda en C++ |


Recorrido por niveles (Amplitud)
Hola a todos en esta ocasión compartire sobre
este tema de Arboles Binarios de Búsqueda,
como un poco de teoría para su mejor
entendimient...

Listas Enlazadas Simples Lineales en C++

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 11/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

En esta ocasión les compartire


este programa que hize sobre
listas  enlazadas simples que hace
los siguiente: Inserta al inicio, 힣�nal,
en ...

Obtener numeros aleatorios en C++ (rand,


srand)
Es algo muy frecuente, cuando ya dominas
todo eso de pedir y almacenar datos, ahora tu
profesor te pedirá que tus programas generen
números ...

Pilas en C++
Una pila (stack en inglés) es una
lista ordinal o estructura de datos
en la que el modo de acceso a sus
elementos es de tipo LIFO (del inglé...

CATEGORIAS
Estructura de Datos
Computacion Gra힣�ca OpenGL Ubuntu L-
System Pilas/Stack Recursividad Arboles C
plusplus CodeBlocks Listas/Lists Android Colas
IDE Java Laravel Tecnicas en construccion de
programas Teoria de la Computacion Algoritmos
voraces Algoritmos y Programacion Algortimos de

busqueda Assembler Automatas Deployment Expresiones

Regulares Ficheros Heroku Organizacion de Archivos PHP

STL

BLOGS AMIGOS
Making Code
Aprendamos Javascript desde cero
Hace 1 mes
Aplicando Scrum
La Importancia de Formar un Equipo
Hace 4 meses
Mis Apuntes sobre Tecnología
API SellerCenter Linio Consulta POST
Hace 11 meses
Codigo de Relleno

Usando
http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html Fuentes Propias para Aplicaciones 12/13
29/12/2016 Registros en C++ / Uso de struct en C++ | Martin Cruz

Usando Fuentes Propias para Aplicaciones


en Java
Hace 1 año
Code Botic

SEGUIDORES
Seguidores (17)

Seguir

2015 © Martin Cruz | Design by Way2themes

http://blog.martincruz.me/2012/10/registros­en­c­uso­de­struct­en­c_4493.html 13/13

Das könnte Ihnen auch gefallen