#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int codigo;
char nombre[30];
int precio;
}flor;
typedef struct
{
int dni;
char nombre[30];
}cliente;
typedef struct
{
int dni;
char nombref[30];
char nombrec[30];
int cantidad;
int precio;
int ptotal;
}venta;
void entradaflores();
void entradaclientes();
void ventaflores();
venta *cargarventa(int *n);
void ordenar(venta v[],int n);
void listado();
/* ====================================================================================================== */
main()
{
system("title EXAMEN RECUPERACION MARZO 2011 - Miguel Angel Alvarez");
char option;
int n,exit=0;
venta *v;
do{
system("cls");
printf("\n FLORES TRASSIERRA \n ---------------------------------------------- \n");
printf(" [1] Entrada de flores.\n");
printf(" [2] Entrada de clientes.\n");
printf(" [3] Ventas de flores.\n");
printf(" [4] Ordenar fichero ventas.\n");
printf(" [5] Listado de ventas por flores.\n");
printf(" [6] Salir.");
switch(option=getch()){
case '1':printf("\n");entradaflores();break;
case '2':printf("\n");entradaclientes();break;
case '3':printf("\n");ventaflores();break;
case '4':printf("\n");v=cargarventa(&n);ordenar(v,n);break;
case '5':printf("\n");listado();break;
case '6':printf("\n");exit=1;break;
default:printf("\n\n Opcion erronea\n");
}
printf("\n\n");
system("pause");
}
while(exit==0);
}
/* ====================================================================================================== */
void entradaflores()
{
FILE *fp;
flor pr,aux;
int repetido=0,h=0;
fp=fopen("flores.bin","ab+");
fclose(fp);
do{
repetido=0;
printf("\n---- 0 para salir ----\n");
printf("Codigo: "); fflush(stdin); scanf("%i",&aux.codigo);
/* Comprobamos si ha introducido un 0 para salir. */
if(aux.codigo==0){
break;h=1;
}
printf("Nombre: "); fflush(stdin); gets(aux.nombre);
printf("Precio: "); fflush(stdin); scanf("%i",&aux.precio);
/* Comprobamos si ha introducido un codigo de flor repetido. */
fp=fopen("flores.bin","rb");
do{
fread(&pr,sizeof(flor),1,fp);
if(aux.codigo==pr.codigo){repetido=1;}
}
while(!feof(fp) && repetido==0);
fclose(fp);
if(repetido==1){
printf("\n\nError. Codigo repetido.\n");
}
else{
pr.codigo=aux.codigo;
strcpy(pr.nombre,aux.nombre);
pr.precio=aux.precio;
fp=fopen("flores.bin","ab+");
fwrite(&pr,sizeof(flor),1,fp); /* Datos correctos. Escritura en fichero. */
fclose(fp);
}
}
while(h==0);
}
/* ====================================================================================================== */
void entradaclientes()
{
FILE *fp;
cliente pr,aux;
int repetido=0;
fp=fopen("clientes.bin","ab+");
fclose(fp);
repetido=0;
printf("\nDNI: "); fflush(stdin); scanf("%i",&aux.dni);
/* Comprobamos si ha introducido un DNI repetido. */
fp=fopen("clientes.bin","rb");
do{
fread(&pr,sizeof(cliente),1,fp);
if(aux.dni==pr.dni){repetido=1;}
}
while(!feof(fp) && repetido==0);
fclose(fp);
printf("Nombre: "); fflush(stdin); gets(aux.nombre);
if(repetido==1){
printf("\n\nError. DNI repetido.\n");
}
else{
pr.dni=aux.dni;
strcpy(pr.nombre,aux.nombre);
fp=fopen("clientes.bin","ab+");
fwrite(&pr,sizeof(cliente),1,fp); /* Datos correctos. Escritura en fichero. */
fclose(fp);
}
}
/* ====================================================================================================== */
void ventaflores()
{
FILE *fp,*fp2,*fp3;
cliente prc,auxc;
flor prf,auxf;
venta prv;
int q=0,dnisi=0,florsi=0;
/* Comprobamos si ha introducido un DNI existente. */
printf("\nDNI: "); fflush(stdin); scanf("%i",&auxc.dni);
fp=fopen("clientes.bin","rb");
do{
fread(&prc,sizeof(cliente),1,fp);
if(auxc.dni==prc.dni){dnisi=1;}
}
while(!feof(fp) && dnisi==0);
fclose(fp);
/* Comprobamos si ha introducido una flor existente. */
printf("Nombre flor: "); fflush(stdin); gets(auxf.nombre);
fp2=fopen("flores.bin","rb");
do{
fread(&prf,sizeof(flor),1,fp2);
if(strcmp(auxf.nombre,prf.nombre)==0){florsi=1;}
}
while(!feof(fp) && florsi==0);
fclose(fp);
/* Comprobaciones realizadas. */
if(dnisi==0 || florsi==0){
printf("El DNI o la Flor es inexistente.");
}
else{
printf("Cantidad: "); fflush(stdin); scanf("%i",&prv.cantidad);
strcpy(prv.nombrec,prc.nombre);
strcpy(prv.nombref,prf.nombre);
prv.precio=prf.precio;
prv.ptotal=prf.precio*prv.cantidad;
/* Imprimimos datos en pantalla. */
printf("\n\tCliente: %s",prv.nombrec);
printf("\n\tFlor: %s",prv.nombref);
printf("\n\tCantidad: %i",prv.cantidad);
printf("\n\n\tPRECIO/U: %i",prv.precio);
printf("\n\tPRECIO TOTAL: %i\n",prv.ptotal);
/* Escribimos datos en fichero. */
fp=fopen("ventas.bin","ab+");
fwrite(&prv,sizeof(venta),1,fp);
fclose(fp);
}
}
/* ====================================================================================================== */
venta *cargarventa(int *n)
{
FILE *fp;
venta *v;
venta pr;
int i;
*n=0;
fp=fopen("ventas.bin","rb");
do{
fread(&pr,sizeof(venta),1,fp);
if(feof(fp)){
break;
}
(*n)++;
}
while(!feof(fp));
v=malloc(sizeof(venta)*(*n)); /* Multiplica el tamaño de tipo por X elementos. */
rewind(fp);
for(i=0;i<*n;i++){
fread(&pr,sizeof(venta),1,fp);
v[i]=pr;
}
fclose(fp);
return v;
}
/* ====================================================================================================== */
void ordenar(venta v[],int n)
{
FILE *fp;
venta pr,aux;
int i=0,j=0;
fp=fopen("ventas.bin","wb");
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(strcmp(v[i].nombref,v[j].nombref)==1){
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
}
fwrite(v,sizeof(venta),n,fp);
fclose(fp);
/* Mostrar fichero ordenado. */
fp=fopen("ventas.bin","rb");
printf("\nVENTAS FLORES TRASSIERRA\n\n");
do{
fread(&pr,sizeof(venta),1,fp);
if(feof(fp)){
break;
}
printf("%s [%s] %i\t%i euros | %i euros\n",pr.nombref,pr.nombrec,pr.cantidad,pr.precio,pr.ptotal);
}
while(!feof(fp));
fclose(fp);
}
/* ====================================================================================================== */
void listado(venta v[],int n)
{
FILE *fp;
venta pr;
int total,preciof,i,j;
/* Mostrar fichero ordenado. */
printf("\nVENTAS FLORES TRASSIERRA\n\n");
fp=fopen("ventas.bin","rb");
do{
fread(&pr,sizeof(venta),1,fp);
if(feof(fp)){break;}
for(i=0;i<n;i++){
if(feof(fp)){break;}
printf("%s\n",pr.nombref);
for(j=0;j<n;j++){
if(feof(fp)){break;}
printf("\t%s %i\t%i euros\n",pr.nombrec,pr.cantidad,pr.precio);
preciof=pr.precio;
total=total+preciof;
}
printf("\n\t\t\t\tTOTAL: %i euros.\n\n",total);
total=0;
}
}while(!feof(fp));
fclose(fp);
}
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
class persona{
public:
int edad;
char estadoCivil;
char nombre[20];
void inicializarPersona(int ed,char ec,char nm[20]){
edad=ed;
estadoCivil=ec;
strcpy(nombre,nm);
}
void mostrarPersona(){
cout << "Edad: " << edad << "\n";
cout << "Estado civil: " << estadoCivil << "\n";
cout << "Nombre: " << nombre << "\n";
}
};
class profesor:public persona{
public:
char departamento[20];
char adscripcion[20];
profesor(int ed,char ec,char nm[20],char dep[20],char ads[20]){
edad=ed;
estadoCivil=ec;
strcpy(nombre,nm);
strcpy(departamento,dep);
strcpy(adscripcion,ads);
}
void mostrarProfesor(){
cout << "\n";
mostrarPersona();
cout << "\nDepartamento: " << departamento << "\n";
cout << "Adscripcion: " << adscripcion << "\n\n";
}
~profesor(){
cout << "\n\nLiberando memoria...\n";
}
};
class alumno:public persona{
public:
int curso;
int numAsignaturas;
void inicializarAlumno(int cu,int na){
curso=cu;
numAsignaturas=na;
}
void mostrarAlumno(){
cout << "\n";
mostrarPersona();
cout << "\nCurso: " << curso << "\n";
cout << "Num. de Asignaturas: " << numAsignaturas << "\n";
}
void obtieneBeca(alumno alum,profesor prof){
if(alum.curso==4 && alum.numAsignaturas<3){
cout << "El profesor...\n\n";
cout << "Nombre: " << prof.nombre << " | Estado civil: " << prof.estadoCivil << " | Edad: " << prof.edad;
cout << "\nDepartamento: " << prof.departamento << " | Adscripcion: " << prof.adscripcion;
cout << "\n\n Ha seleccionado al alumno...\n\n";
cout << "Nombre: " << alum.nombre << " | Estado civil: " << alum.estadoCivil << " | Edad: " << alum.edad;
cout << "\nCurso: " << alum.curso << " | Asignaturas: " << alum.numAsignaturas;
}
else{
cout << "BECA DENEGADA\nEl alumno no esta en el curso 4 o cursa 3 o mas asignaturas.";
}
}
};
/* MAIN --------------------------------------------------------------------------------------- */
main(){
alumno alum;
profesor prof(50,'c',"Antonio Hernandez","Informatica","Titular");
char opcion,ec,nm[20],dep[20],ads[20];
int ed,cu,na,i=0;;
do{
system("cls");
cout << "1. Introduccion de datos de un alumno\n";
cout << "2. Mostrar datos del alumno\n";
cout << "3. Mostrar datos del profesor\n";
cout << "4. Comprobar si alumno obtiene beca con profesor\n";
cout << "5. Salir" << "\n\n";
cout << "Introduce opcion: "; fflush(stdin); cin >> opcion;
switch(opcion){
case '1':
cout << "\nIntroduce nombre: "; fflush(stdin); cin >> nm;
cout << "Introduce curso: "; fflush(stdin); cin >> cu;
cout << "Introduce num. asignaturas: "; fflush(stdin); cin >> na;
cout << "Introduce edad: "; fflush(stdin); cin >> ed;
cout << "Introduce estado civil (s/c): "; fflush(stdin); cin >> ec;
alum.inicializarPersona(ed,ec,nm);
alum.inicializarAlumno(cu,na);
cout << "\n\nAlumno almacenado correctamente.\n";
i=1;
system("pause");
break;
case '2':
if(i==0){
cout << "\n\nAun no ha introducido el alumno!\n";
}
else{
alum.mostrarAlumno();
}
system("pause");
break;
case '3':
prof.mostrarProfesor();
system("pause");
break;
case '4':
if(i==0){
cout << "\n\nAun no ha introducido el alumno!\n";
}
else{
alum.obtieneBeca(alum,prof);
system("pause");
}
break;
case '5':
break;
default:
cout << "Opcion introducida incorrecta.\n\n";
break;
}
}while(opcion!='5');
cout << "\n\n";
system("pause");
}
/* FIN ----------------------------------------------------------------------------------------- */
![](http://gamersmafia.com/storage/comments/126/26/problem_face_by_brunowskisigs.png)
Sin más.
PS: Dejaos de miedos que la programación es sólo pensar con lógica y ser constante, y si se te da bien ni eso.