Está en la página 1de 24

UNIVERSIDAD

CONTINENTAL
PA3
FUNDAMENTOS DE
PROGRAMACIÓN

PARTICIPANTES:
.-HANCCO PACCARA LUIS OMAR
70111811@CONTINENTAL.EDU.PE
.-MARCOS ROBERTO LI MORENO
45494150@CONTINENTAL.EDU.PE
.-DAVID TURPO CHIPANA
73209681

…………………..…………………………….
……
- CURSO:

1
Criterio Detalle
Temas Módulos para la programación: función y procedimiento.
Resultado de Al finalizar la unidad, el estudiante será capaz de aplicar módulos de programación y librerías de
aprendizaje de programación.
la unidad
Tipo de
producto Desarrollar un proyecto utilizando el IDE Dev C++, aplicar módulos, líbrerias y estructuras de
académico control.

CASO: LIBRERÍA COLIBRÍ DORADO

Una empresa desea registrar las ventas de libros, con las siguientes opciones:

MENÚ DE OPCIONES

[1]. REGISTRAR VENTA.


[2]. REPORTAR VENTA
[3]. SALIR.

El usuario primero debe escoger la primera opción, para el ingreso de datos, luego la segunda opción,
para ver los resultados de las ventas. Si desea continuar con otro registro de ventas deberá volver a
escoger la opción 1, luego la opción 2. Si no desea continuar el registro de ventas escoger la opción
Salir.

Opción 1:
a) En esta opción el usuario debe ingresar los siguientes datos, además debe realizar su validación
respectiva
 Género (M-Masculino/F-Femenino).
 Tipo de Libro(1-Ficción / 2-Novelas / 3-Cuentos/4-Física Cuántica). Según el tipo seleccionado el
precio es el siguiente:
Tipo de Libros Precio (S/.)
1-Ficción 90
Enunciado 2-Novelas 100
/Consigna 3-Cuentos 80
4-Física Cuántica 150
 Cantidad de libros. (debe ser mayor a cero).

b) Luego de pedir la cantidad de libros, mostrar: Importe Bruto, Monto de descuento e Importe Neto
 Importe Bruto = cantidad x precio.
 Monto de Descuento = Importe Bruto x porcentaje de Descuento

Se aplica un porcentaje de descuento en función a la cantidad de libros y Tipo de libros

Cantidad 1-Ficción 2-Novelas 3-Cuentos 4-Física Cuántica


de libros (% de (% de (% de (% de
descuento) descuento) descuento) descuento)
1-2 5% 8% 9% 2%
3-6 6% 16% 18% 2%
>7 8% 32% 36% 4%

 Importe Neto = Importe Bruto – Monto de Descuento

Opción 2:
En esta opción se debe mostrar el resultado siguiente:
 Cantidad de venta registradas de libros de Física Cuántica
 Cantidad de ventas registradas de libros de Ficción que tengan un descuento de 6%.
 Cantidad de ventas registradas de clientes varones cuyo Descuento Neto sea >=200 y <=2500
 Monto total de Importe Neto
 Monto total de Importe Neto de los clientes mujeres que compraron libros de Novelas
 Promedio de Importe Neto de clientes varones que compraron libros de Cuentos.

2
IMAGEN DEL CÓDIGO EN C++ Y DE LA EJECUCIÓN CON EL INGRESO Y
REPORTE DE DATOS, PARA LOS CASOS PROPUESTOS
Librería.h
 ConvierteDatos.h

3
4
 LecturaDatos.h

5
6
Programa
 COLIBRI.CPP

7
8
9
10
ELABORA EL CÓDIGO FUENTE EN C++ PARA LOS CASOS PROPUESTOS.
Librería.h
 ConvierteDatos.h

/*
Funciones para validar los tipos de datos ingresados:
atoi -> para numeros enteros.
atof -> para numeros reales.
isalpha -> para letras
*/

#include <iostream> //libreria para lectura y escritura de datos


#include <stdlib.h> //libreria para atoi y atof
#include <ctype.h> //libreria para isalpha

#include "LecturaDatos.h" //llamado a la libreria LecturaDatos

using namespace std;

//función para validar que el dato ingresado es Entero


int esEntero() {
char cadena[10]; //variable que tomara el valor de teclado
int e; //para tomar el valor final en digitos enteros

do { //bucle para ingreso de un numero entero


cin>>cadena; //Lectura de teclado

//condicional para validar si es numero entero o no


if (leedatoe(cadena)) {
e = atoi(cadena); //"e" toma el valor transformado
en entero de la cadena
}
else {
cout<<"\nERROR. Ingrese un valor entero:\t"; //mensaje de
error
}

} while (!leedatoe(cadena)); //se repetirá hasta que la cadena ingresando sea


solo enteros

return e; //retorna el número entero ya convertido y validado


}

//función para validar que el dato ingresado es Real

11
float esDecimal() {
char cadena[10]; //variable que tomara el valor el teclado
float f; //para tomar el valor final en decimales

do { //bucle para ingreso de un numero decimal


cin>>cadena;//lectura de teclado

//condicional para validar si es numero decimal o no


if (leedatof(cadena)) {
f = atof(cadena); //"f" toma el valor transformado en decimal
de la cadena
}
else {
cout<<"\nERROR. Ingrese un valor decimal:\t"; //mensaje de
error
}

}while (!leedatof(cadena)); //se repetirá hasta que la cadena ingresada sea


un decimal

return f; //retorna el número decimal ya convertido y validado


}

//función para validar que el dato ingresado sean Letras de A-Z


char esLetra () {
char c; //para tomar el valor final en caracter

do { //bucle para ingreso de caracteres


c = leedatoc(); //llamado a la funcion para lectura de teclado

//condicional para validar si son solo letras o no


if (isalpha(c)) {
return c; //retorna el valor ingresado en caso sea
solo letras
}
else {
cout<<"\nERROR. Ingrese una letra:\t"; //en caso no sólo
sean letras
}
}while (!isalpha(c)); //se repetirá hasta que la cadena ingresada sean letras
}

//función para validar que el dato ingresado sean cadenas de solo letras
string esPalabra() {

12
char cadena [100]; //variable que tomara el valor del teclado
string p; //para tomar el valor final en cadena de
caracteres

do { //bucle para ingreso de caracteres


cin>>cadena; //lectura de teclado

//condicional para validar si la cadena de caracteres son solo letras


if (leedatos(cadena)) {
p = cadena; //"p" toma el valor validado de la
cadena de solo letras
}
else {
cout<<"\nERROR. Ingrese una cadena: "; //en caso no
sólo sean letras
}
}while (!leedatos(cadena)); //se repetirá hasta que la cadena ingresada sean
letras

return p; //retorna la cadena de caracteres ya convertido y


validado
}

 LecturaDatos.h

#include<iostream>
#include<string.h>

using namespace std;

//Numeros enteros ingresados

int leedatoe(char *cadena){ //parámetro de cadena ingresada


//declaraciones de variables
int i, valor;

//buble para comporbar caracteres


for (i=0; i<strlen(cadena); i++) {
valor = cadena[ i ] - '0'; //caracter a la variable valor

// condicional para evaluar la varible no es un dígito


if (valor<0 || valor>9) {

13
//condicional para evaluar si aún hay caracteres que
evaluar
if (i==0 && valor==-3)
continue;

return 0; //se retorna 0, en caso el valor no


sea digito
}
}

return 1; // se retorna 0, en caso el valor no sea digito


}

//funcion por validacion de numeros reales ingresados

float leedatof(char *cadena){ // parámetro de cadena ingresada


//declaracion de variables
int i, valor;
int tiene_punto = 0;

// bucle para comprobar cada caracter ingresado


for (i=0; i<strlen(cadena); i++) {
valor = cadena[ i ] - '0'; // se asigna cada caracter a
la variable valor

//condicional para evaluar si el caracter no es un dígito


if(valor=0 || valor>9) {
//condicional para evaluar si aún hay caracteres que
evaluar
if (i==0 && valor==-3)
continue;

//condicional para evaluar si el caracter no es un


dígito, pero si un "." decimal
if(valor==-2 && !tiene_punto){
tiene_punto =1;
continue;
}

return 0; //se retorna 0, en caso el valor no


sea digito
}

14
}

return 1; //se retorna 1, en caso la cadena de caracteres


sean sólo digitos
}

//funcion para lectura de caracteres


char leedatoc() {
char dato;
cin>>dato;
return dato;
}

//funciones para Lectura de cadenas de caracteres


int leedatos(char palabra[]) {
//declaracion de variables
int i=0;

//bucle para examinar que cada caracter es una letra


while (palabra[i]) {
//condicional para evaluar la letra y el espacio
if (!isalpha(palabra[i]) && palabra [i]!=' ')
return 0; //en caso no es una letra o espacio

i++; //contador para avanzar al siguiente caracter de la


cadena
}

return 1; //retorna 1, en caso toda la cadena son sólo de letras


}

Programa
 Colibri.cpp

#include <iostream> //libreria para lectura y escritura de datos


#include "ConvierteDatos.h" //llamado a libreria convierteDatos

using namespace std;

//declaracion de Métodos
void Menu();

15
void Registrar();
void Proceso();
void Reportar();
void Salir();

//declaración de variables globales


//de entrada
int Opcion, TipoLibro, Cantidad;
char Genero;

//de proceso
float PrecioLibro, ImporteBruto, MontoDescuento, ImporteNeto,
Descuento;
int CantVaronCuento=0;
float MonNetoVaronCuento=0;

//de salida
int CantFisica=0,CantFiccion=0, CantVaron=0;
float MonNetoTotal=0,MonNetoMujerNovela=0,PromNetoVaronCuento=0;

//Método Principal
int main() {
//llamado al Menu de Opciones
Menu();

return 0;
}

//Método para el Menú principal


void Menu() {
do{ //bucle para mostrar el Menu principal muchas veces
cout<<endl;
cout<<"\n.................................................";
cout<<"\n................ MENU DE OPCIONES................";
cout<<"\n.................................................";
cout<<"\n\t\t1.Registrar Venta";
cout<<"\n\t\t2.Reportar Venta";
cout<<"\n\t\t3.Salir\n\n";

do { //bucle para validar el rango de ingreso entre 1-3


cout<<" --------------------- >>> Ingrese opcion:\t";

16
Opcion = esEntero(); //llamado a la función para validar que
sea un entero

if (Opcion<1 || Opcion>3) //Condiocional que evalua si la Opcion


esta entre 1-3
cout<<"\nERROR. La opcion no existe.";
}while (Opcion<1 || Opcion>3); //bucle termina cuando ingrese un valor
entre 1-3

//condicional multiple para cada opcion ingresada


switch (Opcion) {
//para la opcion 1
case 1:
cout<<endl;
Registrar(); //llamado al método Registrar ()
break;

//para la opcion 2
case 2:
cout<<endl;
Reportar(); //llamado al método Reportar()
break;

//para la opcion 3
case 3:
cout<<endl;
Salir(); //llamado al método Salir ()
break;
}
} while (Opcion!=3); //el bucle termina cuando se ingresa la opcion 3

//Método para Registrar los datos solicitados


void Registrar () {
//bucle para el registro de genero del cliente M o F
do {
cout<<" --------------------- >>> Digite Genero del cliente (M/F):\t";
Genero = esLetra(); //Llamado a la funcion para validar que sea
letra

if (Genero!='M' && Genero!='m' && Genero!='F' && Genero!='f')


cout<<"\nERROR. Solo se permite M o F. ";
//condicional que evalua si el genero es M o F

17
} while (Genero!='M' && Genero!='m' && Genero!='F' && Genero!
='f'); //termina cuando se ingrese M o F

//Menu de Tipos de Libros y Precios

cout<<"\n.................................................";
cout<<"\n..............TIPOS DE LIBROS ...................";
cout<<"\n.................................................";
cout<<"\n\t\t1.Ficcion\t\tS/90";
cout<<"\n\t\t2.Novelas\t\tS/100";
cout<<"\n\t\t3.Cuentos\t\tS/80";
cout<<"\n\t\t4.Fisica Cuantica\tS/150\n\n";

//bucle para el registro de tipo de libro, del 1-4


do {
cout<<" --------------------- >>> Digite Tipo deseado (1-4):\t";
TipoLibro = esEntero(); // llamado a la funcion para validar que sea
entero

if (TipoLibro<1 || TipoLibro>4) //condicional que evalua si


el valor es de 1-4
cout<<"\nERROR. Solo se permite valor 1-4. ";
} while (TipoLibro<1 || TipoLibro>4); //termina cuando se ingrese un valor
entre 1-4

//bucle para el registro de cantidad de libros


do {
cout<<" --------------------- >>> Digite Cantidad:\t";
Cantidad = esEntero(); //llamado a la función para validar que sea
entero

if (Cantidad<=0) //condicional que evalua si el valor es mayor a


0.
cout<<"\nERROR. Solo se permite valor > 0. ";
} while (Cantidad<=0); //termina cuando se ingrese un valor mayor a 0.

//llamado al método Proceso ()


Proceso();
cout<<"\n.................................................";
cout<<"\n >>>>>>>> Importe Bruto:\t\tS/ "<<ImporteBruto;
//Reporte de Importe Bruto del pedido
cout<<"\n >>>>>>>> Monto Descuento:\t\tS/ "<<MontoDescuento;
//Reporte de Monto de Descuento del pedido

18
cout<<"\n >>>>>>>> Importe Neto:\t\tS/ "<<ImporteNeto;
//Reporte de Importe Neto a pagar el cliente
cout<<"\n.................................................";
}

//Método para analizar el Proceso necesario


void Proceso() {
//Condicional según el tipo de libro pedido
switch (TipoLibro) {
case 1:
PrecioLibro = 90; //asignación del precio unitario
del libro

//Condicional para asignar el descuento para cada caso según


la cantidad de libros
if (Cantidad>=1 && Cantidad<=2) { Descuento=0.05; }
else if (Cantidad>=3 && Cantidad<=6) { Descuento=0.06; }
else { Descuento=0.08; }

break;

case 2:
PrecioLibro = 100; //asignación del precio unitario del libro

//Condicional para asignar el descuento para cada caso según


la cantidad de libros
if (Cantidad>=1 && Cantidad<=2) { Descuento=0.08; }
else if (Cantidad>=3 && Cantidad<=6) { Descuento=0.16; }
else { Descuento=0.32; }

break;

case 3:
PrecioLibro = 80; //asignación del precio unitario del libro

//Condicional para asignar el descuento para cada caso según


la cantidad de libros
if (Cantidad>=1 && Cantidad<=2) { Descuento=0.09; }
else if (Cantidad>=3 && Cantidad<=6) { Descuento=0.18; }
else { Descuento=0.36; }

break;

19
case 4:
PrecioLibro = 150; //asignación del precio unitario del libro

//Condicional para asignar el descuento para cada caso según


la cantidad de libros
if (Cantidad>=1 && Cantidad<=2) { Descuento=0.02; }
else if (Cantidad>=3 && Cantidad<=6) { Descuento=0.02; }
else { Descuento=0.04; }

break;
}

//Operaciones para el cálculo de importes


ImporteBruto = Cantidad * PrecioLibro;
MontoDescuento = ImporteBruto * Descuento;
ImporteNeto = ImporteBruto - MontoDescuento;

//procedimientos para los reportes solicitados


//Cantidad de ventas registradas de libros de fisica cuantica
if (TipoLibro == 4) {
CantFisica++; //contador para la cantidad de ventas
registradas de este tipo de libro
}

//cantidad de ventas registradas de libros de Ficcion de descuento del


0.06
if (TipoLibro==1 && Descuento== 0.06) {
CantFiccion++; //contador para la cantidad de
ventas registradas de este tipo de libro y su descuento
}

//cantidad de ventas registradas de clientes varones con descuento


neto >=200 y <=2500
if ((Genero=='m' || Genero=='M') && (MontoDescuento>=200 &&
MontoDescuento<=2500)) {
CantVaron++; //contador para la cantidad de
clientes varones con el descuento mencionado
}

//monto total de Importe neto


MonNetoTotal += ImporteNeto; //acumulador que suma el monto
total que el cliente paga en cada pedido.

20
//monto total de importe neto de clientes mujeres que compraron
Novelas
if ((Genero=='f' || Genero=='F') && (TipoLibro==2)) {
MonNetoMujerNovela += ImporteNeto;
//acumulador que suma el importe neto de mujeres que compraron Novelas
}

//promedio de importe neto de clientes varones que compraron


cuentos
if ((Genero=='m' || Genero=='M') && (TipoLibro==3)) {
CantVaronCuento++; //contador cuantos clientes
varones de Cuentos hay
MonNetoVaronCuento+=ImporteNeto; //acumulador de
monto total pagado por varones que compraron cuentos
}

PromNetoVaronCuento = MonNetoVaronCuento /
CantVaronCuento; //calculo promedio

//Método para Reportar la información solicitada


void Reportar () {
cout<<"\n >>>> Cantidad de ventas registradas de libros de Fisica
Cuantica:\t\t\t\t\t"<<CantFisica;
cout<<"\n >>>> Cantidad de ventas registradas de libros de Ficcion que
tengan un descuento de 6%: \t\t"<<CantFiccion;
cout<<"\n >>>> Cantidad de ventas registradas de clientes varones cuyo
Descuento neto sea >=200 y <=2500:\t"<<CantVaron;
cout<<"\n >>>> Monto total de Importe Neto:\t\t\t\t\t\t\t\t\t\
t"<<MonNetoTotal;
cout<<"\n >>>> Monto total de Importe Neto de los clientes mujeres que
compraron libro de Novelas:\t\t"<<MonNetoMujerNovela;
cout<<"\n >>>> Promedio de Importe Neto de clientes varones que
compraron libros de Cuentos:\t\t\t"<<PromNetoVaronCuento;
}

//Metodo para Despedir al usuario


void Salir () {
cout<<"\n\tLIBRERIA COLIBRI.\n\tGRACIAS POR SU VISITA.
VUELVA PRONTO.... \n";
}

21
INGRESO Y REPORTE DE DATOS

22
23
24

También podría gustarte