Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - JohnAMH

#1
Buenas, tengo un problema con la parte final de este código, y es que quiero que el programa me lea todos los préstamos que he hecho, pero solo me sale 1, más concretamente el primero. Por ejemplo, yo en el programa pongo información sobre 4 películas que quiero para alquilar, pero al final, cuando le pido al programa que me lea los datos del fichero txt, solo me lee los de la primera pelicula. Quisiera saber que poner para que me lea toda la información de las películas, y no solo de la primera.
Por cierto, también hay un pequeño error, que es que desde el "nombre de la pelicula" hasta "subtitulos?" los datos de sus respectivas preguntas son de la primera pelicula, pero después, a partir de "minutos", los datos los recoge de la última película que puse.

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;
#include <fstream>
#include <iomanip>
#include <cctype>

typedef enum { action, adventure, scifi, comedy, drama, mystery, horror } tGenre;
typedef enum { spanish, english, french, german, italian, portuguese } tLanguage;

tGenre readGenre();
string genreToStr(tGenre genre);
tLanguage readLanguage();
string languageToStr(tLanguage lang);

int main() {

string gen;
string language;
string str;
string nif;
string date;
string title;
string director;
tGenre genre;
tLanguage lang;
int minutes;
int days;
char aux;
char result;
bool subtitles = true;
ofstream outputFile;
ifstream inputFile;

outputFile.open("rentals.txt",ios::out);
do {
cout << "Film title (# to end): ";
cin.sync();
getline(cin, title);
if (title != "#" ) {
outputFile << title << endl;
cout << "Film director: ";
cin.sync();
getline (cin, director);
outputFile << director << endl;
genre = readGenre();
gen = genreToStr(genre);
outputFile << gen << endl;
lang = readLanguage();
language = languageToStr(lang);
outputFile << language << endl;
cout << "Film with subtitles (y/n)?: ";
cin >> aux;
aux = toupper (aux);
if (aux == 'Y') {
outputFile << aux << endl;
outputFile << true << endl;
subtitles = false;
}
else {
subtitles = true;
}
cout << "Minutes: ";
cin.sync();
cin >> minutes;
outputFile << minutes << endl;
cout << "Client NIF: ";
cin.ignore();
cin >> nif;
outputFile << nif << endl;
cout << "Rental Date: ";
cin.sync();
cin >> date;
outputFile << date << endl;
cout << "Rental Days: ";
cin.sync();
cin >> days;
outputFile << days << endl;
}
} while (title != "#");
outputFile << "#" << endl;

inputFile.open("rentals.txt",ios::in);
while (!inputFile.eof() && aux == 'Y' || aux == 'N')  {
int rental;
getline(inputFile, title);
getline(inputFile, director);
getline(inputFile, gen);
getline(inputFile, language);
inputFile >> subtitles;
inputFile >> minutes;
getline(inputFile, nif);
getline(inputFile, date);
inputFile >> days;
switch (aux) {
case 'Y':
if (subtitles == false) {
rental = ++rental;
cout << "Rental " << rental << endl;
cout << title << " (" << director << "), " << gen << ", " << language << " (subt. Spanish), " << minutes << " min." << endl;
cout << "Client: " << nif << " - " << date << ", " << days << " days" << endl;
subtitles = true;
}
break;
case 'N':
if (subtitles == true) {
rental = ++rental;
cout << "Rental " << rental << endl;
cout << title << " (" << director << "), " << gen << ", " << language << ", " << minutes << " min." << endl;
cout << "Client: " << nif << " - " << date << ", " << days << " days" << endl;
subtitles == false;
break;
}
default:
exit(1);
}
}

inputFile.close();
outputFile.close();

return 0;
}

Repito, lo único que me falla es la parte en el que el programa tiene que leer la información que hay en el fichero, es decir, la del inputFile.
#2
Buenos días, tengo un problema urgente con un ejercicio de c++ que me cuesta solucionar. el ejercicio es el siguiente:
Escribir un programa que ofrezca las siguientes opciones:
1. Client data
2. Sale data
3. Invoice
4. Totals
5. Restart
0. Exit
El programa mostrará el menú hasta que el usuario elija la opción.
. Por ahora lo que llevó es esto. Seguramente haya mucha cosa innecesaria. Si es así, me lo podéis decir. Espero respuesta.
Muchas gracias de antemano.

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;
#include <cctype>
#include <iomanip>

int menu();
double cost(int descPercentage, double total, double final, double amountDisc, double amountVAT);

       int main() {
int option;
int units;
int readCost;
int readMenu;
int descPercentage;
const int VAT = 21;
const int DISCOUNT = 15;
double price;
double total;
double readcost;
double final;
double amountDisc;
double amountVAT;
       bool sale = false;
bool client = false;
char discount;
string product;
string name, nif, address;

cout << "1. Client Data" << endl;
cout << "2. Sale Data" << endl;
cout << "3. Invoice" << endl;
cout << "4. Totals" << endl;
cout << "5. Restart" << endl;
cout << "0. Exit" << endl;
cout << "Option: ";
cin >> option;
cout << endl;
switch (option) {
case 1:
if (client == false) {
cout << "Client Name: ";
cin.sync();
getline (cin, name);
cout << "Client NIF: ";
getline (cin, nif);
cout << "Client Address: ";
getline (cin, address);
cout << client;
cout << endl;
}
case 2:
if (sale == true) {
readMenu = menu();
cout << "Product Name: ";
cin.sync();
getline (cin, product);
cout << "Product Price: ";
cin >> price;
cout << "Discount (y/n): ";
cin >> discount;
discount = toupper(discount);
if (discount == 'Y') {
descPercentage = DISCOUNT;
}
else {
descPercentage = 0;
}
cout << "Units: ";
cin >> units;
sale = true;
cout << sale;
cout << endl;
}
else if (sale != false){
cout << "No sale data!" << endl;
cout << endl;
readMenu = menu();
}
case 3:
if (client == false) {
cout << "No client data!" << endl;
cout << endl;
readMenu = menu();
client = false;
cout << client;
}
else {
readMenu = menu ();
cout << endl << "Invoice:" << endl;
cout << setw(50) << right << name << endl;
cout << setw(50) << right << nif << endl;
cout << setw(50) << right << address << endl << endl;
readMenu = menu ();
client = true;
cout << client;
}
             case 4:
if (sale == false) {
cout << "No sale data!" << endl;
cout << "1. Client Data" << endl;
cout << "2. Sale Data" << endl;
cout << "3. Invoice" << endl;
cout << "4. Totals" << endl;
cout << "5. Restart" << endl;
cout << "0. Exit" << endl;
cout << "Option: ";
cin >> option;
sale = false;
cout << sale;
}
else {
readcost = cost(descPercentage, total, final, amountDisc, amountVAT);
cout << "Product: " << product << endl;
cout << setw(40) << left << "Unit Price";
cout << setw(10) << right << fixed << setprecision(2) << price << endl;
cout << setw(40) << left << "Units";
cout << setw(7) << right << units << endl;
cout << setw(40) << left << "Total";
cout << setw(10) << right << fixed << setprecision(2) << total << endl;
cout << setw(40) << left << "Discount";
cout << setw(7) << right << descPercentage << " %" << endl;
cout << setw(50) << right << fixed << setprecision(2) << -amountDisc << endl;
cout << setw(40) << left << "Total after discount";
cout << setw(10) << right << fixed << setprecision(2) << total << endl;
cout << setw(40) << left << "VAT";
cout << setw(7) << right << VAT << " %" << endl;
cout << setw(50) << right << fixed << setprecision(2) << amountVAT << endl;
cout << setw(40) << left << "Final Price";
cout << setw(10) << right << fixed << setprecision(2) << final << endl;
sale = true;
cout << sale;
}
case 5:
system ("CLS");
break;
default:
cout << "1. Client Data" << endl;
cout << "2. Sale Data" << endl;
cout << "3. Invoice" << endl;
cout << "4. Totals" << endl;
cout << "5. Restart" << endl;
cout << "0. Exit" << endl;
cout << "Option: ";
cin >> option;
cout << endl;
}
return 0;
}

     int menu() {

int option;
int readMenu;

cout << "1. Client Data" << endl;
cout << "2. Sale Data" << endl;
cout << "3. Invoice" << endl;
cout << "4. Totals" << endl;
cout << "5. Restart" << endl;
cout << "0. Exit" << endl;
cout << "Option: ";
cin >> option;
cout << endl;
while (option <= -1 || option >= 6) {
cout << "1. Client Data" << endl;
cout << "2. Sale Data" << endl;
cout << "3. Invoice" << endl;
cout << "4. Totals" << endl;
cout << "5. Restart" << endl;
cout << "0. Exit" << endl;
cout << "Option: ";
cin >> option;
cout << endl;
}
return option;
}
double cost(int descPercentage, double total, double final, double amountDisc, double amountVAT) {
const int VAT = 21;
const double DISCOUNT = 15;
char discount;

amountDisc = total * descPercentage / 100;
total = total - amountDisc;
amountVAT = total * VAT / 100;
final = total + amountVAT;

return final;
}