Sistema bancario (cajero automático) [C++] [CMD]

Iniciado por HelThunk, 3 Abril 2015, 02:21 AM

0 Miembros y 2 Visitantes están viendo este tema.

HelThunk

Buenas a todos, hoy vengo a presentarles un programa que he hecho (estoy totalmente abierto a criticas, tanto constructivas como destructivas), me ha llevado bastante tiempo (8 - 9 h) y mucho esfuerzo, no espero para nada que valoréis esto, es más, quiero que me digáis todo lo que pensáis, quiero mejorar (estoy aprendiendo de forma autodidacta) y simplemente, me anotare vuestras aportaciones, para intentar mejorar en futuros proyectos. Gracias con antelación  :rolleyes:

*Si alguien se siente ofendido al ver que, una persona que no tiene apenas conocimientos sobre este tema se quiere adentrar, pido disculpas con antelación (eso si, tengo mucho interés, así que mi objetivo es aprender, y no voy a parar hasta conseguirlo..)

*Me gusta la programación, y por ende, estoy intentando aprender por mi cuenta, me he visto muchos vídeos, he leído mucha información, pero como podéis comprobar, aun me falta un laaaaargo camino, el cual pienso recorrer con muchas ganas (sinceramente estoy muy perdido, así que cualquier ayuda es bienvenida).

Si vas a probar el programa;
Usuario; helthunk
Contraseña = 1234


Código (cpp) [Seleccionar]

// BancoHelThunk.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;

int saldo = 5000;
bool esalir = false;
bool salir1 = false;
bool eexit = false;



void menu(){
//menu en bucle
do{
   cout << "SELECCIONE UNA OPCION (Inserte el boton correspondiente);" << endl;
cout << "Consultar mi saldo ; 1" << endl;
   cout << "Retirar dinero ; 2" << endl;
   cout << "Ingresar dinero ; 3" << endl;
   cout << "Hacer una transferencia bancaria ; 4" << endl;
   cout << "'Hackear' el servidor para sacar dinero gratis ; 5" << endl;
   cout << "Jugar al HelPacMan; 6" << endl;
   cout << "Contactar con el soporte; 7" << endl;
   cout << "Salir; 8" << endl;
int num;
cin >> num;
//respuesta a menu
bool eexit1 = false;
while (!eexit1){
bool meexit = false;
system("cls");
if (num == 1 && !meexit){
system("cls");
cout << "Usted dispone de " << saldo << " euros, qu\202 desea hacer?"<< endl<<endl;
//invocamos un comenu
cout << "SELECCIONE UNA OPCION (Inserte el boton correspondiente);" << endl;
cout << "Volver al menu principal ; 1" << endl;
cout << "Salir del programa; 2" << endl;

int s;
cin >> s;
if (s == 1){
//volvemos a invocar el menu saliendo de esta condicion
system("cls");
meexit = false;
menu();

}
else if (s == 2){
//salimos de todos los bucles internos y exteros (finalizando el programa)
meexit = true;
eexit = true;
esalir = true;
eexit1 = true;

}
else cout << "Por favor, inserte un valor valido;" << endl;
system("pause");
}
bool meexit1 = false;
if (num == 2 && !meexit1){
//cambiamos el valor del saldo restandole la cantidad que desea retirar, no dejandole
//retirar mas de lo que tiene
system("cls");
cout << "Cuanto desea retirar?" << endl;
int s1;
cin >> s1;
if (saldo >= s1){
saldo = saldo - s1 ;
cout << "Usted acaba de retirar " << s1 << " euros, le queda/n " << saldo <<"en su cuenta"<< endl;
cout << "Que desea hacer?" << endl << endl;
//invocamos el comenu
cout << "SELECCIONE UNA OPCION (Inserte el boton correspondiente);" << endl;
cout << "Volver al menu principal ; 1" << endl;
cout << "Salir del programa; 2" << endl;
int s;
cin >> s;
if (s == 1){
//volvemos a invocar el menu saliendo de esta condicion
system("cls");
menu();
}
else if (s == 2){
//salimos de todos los bucles internos y exteros (finalizando el programa)
meexit = true;
eexit = true;
esalir = true;
eexit1 = true;
}
else{
cout << "Por favor, inserte un valor valido;" << endl;
system("pause");
}
}
else if (saldo < s1){
cout << "AQUI NO REGALAMOS DINERO, SOLO PUEDE SACAR MENOS DINERO DEL QUE POSEE" << endl;
system("pause");
system("cls");
cout << "Que desea hacer?" << endl;
int s2;
cout << "SELECCIONE UNA OPCION (Inserte el boton correspondiente);" << endl;
cout << "Extraer dinero ; 1" << endl;
cout << "Volver al menu principal; 2" << endl;
cin >> s2;
bool meexit3 = false;

if (s2 == 1 && !meexit3){
//volvemos a extraer dinero
system("cls");
meexit = true;
}
else if (s2 == 2){
//salimos de todos los bucles internos
system("cls");
meexit3 = true;
meexit = true;
eexit = true;
eexit1 = true;
}
else{
cout << "Por favor, inserte un valor valido;" << endl;
system("pause");
}
}
else{
cout << "Por favor, introduzca un numero valido" << endl;
system("pause");
}

}
bool meexit4 = false;
if (num == 3 && !meexit4){
system("cls");
cout << "Cuanto desea ingresar?" << endl;
int s4;
cin >> s4;
saldo = saldo + s4;
cout << "Usted acaba de ingresar " << s4 << " euros, su saldo aumenta a  " << saldo << endl;
cout << "Que desea hacer?" << endl << endl;
//invocamos el comenu
cout << "SELECCIONE UNA OPCION (Inserte el boton correspondiente);" << endl;
cout << "Volver al menu principal ; 1" << endl;
cout << "Salir del programa; 2" << endl;
int s;
cin >> s;
if (s == 1){
//volvemos a invocar el menu saliendo de esta condicion
system("cls");
meexit4 = true;
menu();
}
else if (s == 2){
//salimos de todos los bucles internos y exteros (finalizando el programa)
meexit4 = true;
eexit = true;
esalir = true;
eexit1 = true;
}
else{
cout << "Por favor, inserte un valor valido;" << endl;
system("pause");
}


}
bool meexit5 = false;
bool meexit7 = false;
if (num == 4 && !meexit5){
system("cls");
if (num == 4 && !meexit5){
system("cls");
cout << "Esta usted apunto de hacer una transferencia bancaria, esta usted seguro?" << endl;
string rspta1, rspta2;
cin >> rspta1;
float dinero, cuenta;

if (rspta1 == "Si" || rspta1 == "sI" || rspta1 == "SI" || rspta1 == "si"){
cout << "Ingrese el numero de cuenta al cual desea hacer la transferencia" << endl;
cin >> cuenta;
cout << "Ingrese la cantidad a dar;" << endl;
cin >> dinero;
if (saldo < dinero){
cout << "no tienes esa cantidad de dinero" << endl;
system("pause");
system("cls");
break;
}
else if (saldo <= dinero){
cout << "Estas a punto de dar " << dinero << " a este numero de cuenta;" << cuenta << endl;
cout << "Desea usted continuar?" << endl;
cin >> rspta2;


if (rspta2 == "sI" || rspta2 == "SI" || rspta2 == "Si" || rspta2 == "si"){
saldo = saldo - dinero;
cout << "La transferencia se ha realizado con exito" << endl;
system("cls");
meexit5 = true;
eexit1 = true;
}
else if (rspta2 == "no" || rspta2 == "NO" || rspta2 == "si" || rspta2 == "si"){
cout << "Deacuerdo, usted sera redireccionado al menu principal" << endl;
system("pause");
system("cls");
meexit5 = true;
}
else{
cout << "Por favor, responda 'si' o 'no'" << endl;
system("pause");
}
}
else cout << "Por favor introduzca un numero valido" << endl;
system("pause");
system("cls");
}
if (rspta1 == "No" || rspta1 == "NO" || rspta1 == "nO" || rspta1 == "no"){
cout << "Vovliendo al menu principal" << endl;
system("pause");
system("cls");
meexit5 = true;
eexit1 = true;
}
else{
cout << "Por favor introduzca si o no" << endl;
system("pause");
}
}
}
else if (num == 5){
system("cls");
cout << "Enserio pensabas que iba a ser tan facil?" << endl;
cout << "DESPIDETE DE TU TARJETA BANCARIA"<<endl;
cout << "DESPIDETE DE TU TARJETA BANCARIA" << endl;
cout << "DESPIDETE DE TU TARJETA BANCARIA" << endl;
cout << "DESPIDETE DE TU TARJETA BANCARIA" << endl;
cout << "Cargando archivos CML en la tarjeta A34sT" << endl;
for (int A1 = 0; A1 < 9; A1++){
cout << ".";
Sleep(100);
}
cout <<endl<< "Cargando archivos CML en la tarjeta A34rre24sT" << endl;
for (int A1 = 0; A1 < 9; A1++){
cout << ".";
Sleep(125);
}
cout << endl << "Cargando archivos CML en la tarjeta 789S23" << endl;
for (int A1 = 0; A1 < 25; A1++){
cout << ".";
Sleep(30);
}
cout << endl << "Cargando archivos CML en la tarjeta AS58sST" << endl;
for (int A1 = 0; A1 < 15; A1++){
cout << ".";
Sleep(90);
}
cout << endl << "Cargando archivos CML en la tarjeta Aer54drET" << endl;
for (int A1 = 0; A1 < 9; A1++){
cout << ".";
Sleep(60);
}
cout << endl << "Cargando archivos CML en la tarjeta 23ìo44e24sT" << endl;
for (int A1 = 0; A1 < 9; A1++){
cout << ".";
Sleep(100);
}
cout << endl << "Cargando archivos CML en la tarjeta M4563S23" << endl;
for (int A1 = 0; A1 < 15; A1++){
cout << ".";
Sleep(150);
}
cout << endl << "Cargando archivos CML en la tarjeta AS30215sST" << endl;
for (int A1 = 0; A1 < 6; A1++){
cout << ".";
Sleep(90);
}
cout << endl << "Cargando archivos CML en la tarjeta Ae8T" << endl;
for (int A1 = 0; A1 < 9; A1++){
cout << ".";
Sleep(130);
}
saldo = 0;
cout << endl<<"DATOS CARGADOS CON EXITO, SU SALDO ES DE "<<saldo<<" DOLARES" << endl;
cout << "DATOS CARGADOS CON EXITO, SU SALDO ES DE " << saldo << " DOLARES" << endl;
cout << "DATOS CARGADOS CON EXITO, SU SALDO ES DE " << saldo << " DOLARES" << endl;
system("pause");
system("cls");
break;
}
else if (num == 6){
system("cls");
cout << "Estas en el banco, no en la consola" << endl;
system("pause");
system("cls");
break;
}
else if (num == 7){
system("cls");
cout << "Para contactar con el soporte, envie un correo a xxx.xxx o llame al 672676276" << endl;
system("pause");
system("cls");
break;
}
//respuesta 8 salimos de todo, cierre de programa
else if (num == 8){
system("cls");
eexit = true;
eexit1 = true;
esalir = true;
salir1 = true;

}

else if (num <0 && !meexit7 || num >8 && !meexit7){
system("cls");
cout << "VALOR ERRONEO!!, CERRARNDO EL SISTEMA POR SEGURIDAD" << endl;
cout << "VALOR ERRONEO!!, CERRARNDO EL SISTEMA POR SEGURIDAD" << endl;
cout << "VALOR ERRONEO!!, CERRARNDO EL SISTEMA POR SEGURIDAD" << endl;
cout << "VALOR ERRONEO!!, CERRARNDO EL SISTEMA POR SEGURIDAD" << endl;
cout << "VALOR ERRONEO!!, CERRARNDO EL SISTEMA POR SEGURIDAD" << endl;
cout << "VALOR ERRONEO!!, CERRARNDO EL SISTEMA POR SEGURIDAD" << endl;
system("pause");
eexit1 = true;
eexit = true;
esalir = true;
salir1 = true;


}

}
} while (!esalir);
}

int menu1(void){
//menu dentro de selección
bool eexit = false;
bool meexit = true;
cout << "SELECCIONE UNA OPCION (Inserte el boton correspondiente);" << endl;
cout << "Volver al menu principal ; 1" << endl;
cout << "Salir del programa; 2" << endl;

int s;
cin >> s;
if (s == 1){
//volvemos a invocar el menu saliendo de esta condicion
system("cls");
menu();
}
else if (s == 2){
//salimos de todos los bucles internos y exteros (finalizando el programa)
meexit = true;
eexit = true;
esalir = true;
}
else cout << "Por favor, inserte un valor valido;" << endl;
return 1;

}

int _tmain(int argc, _TCHAR* argv[])
{
cout << "BIENVENIDO AL BANCO HELTHUNDER" << endl;
bool exit = false;
do{
cout << "INGRESE SU NOMBRE DE USUARIO Y SU PASSWORD" << endl;
//asignamos valores de nobmre y contraseña
string nombre,contra, contraco = "a",nombreco = "h";
cin >> nombre >> contra;
system("cls");
// si la contraseña y el nobmre coinciden con x palabra le damos aceso al menu

if (nombre == "helthunk" && contra == "1234"){
system("cls");
cout << "BIENVENIDO, EL BANCO HELTHUNDER LE DESEA UNA BUENA INSTANCIA" << endl;
cout << "Qu\202 desea hacer?" << endl << endl;
//invocamos la funcion del menu
menu();
}
else {
cout << "Ese nombre de usuario y/o password no existen, por favor, intentelo de nuevo" << endl;
system("pause");
}
} while (!eexit);

return 0;
}


Todo consejo es bien acogido.

boy-ka

system("pause"); Solo funciona para los sistemas operativos que tengan el comando PAUSE, lo demás es bastante básico el código, pero bueno estás empezando.

Siguiendo con lo mismo, cuando haces una llamada a system, es como si usaras batch, y puede hacer que el programa se trabe esperando respuesta del comando que llames con sl System, haciendo así que vaya más lento o que de error en caso de que al comando que llames no existe.

En fin, solo eso por lo demás supongo que bien para ser nuevo en esto, aunque hay varias formas de hacer lo que hiciste más simplificado pero BUUEEEENO XD bien para comenzar.

crack81

La verdad me da gusto que la gente se esfuerze programando

Primero te felicito y te animo a seguir, mientras otros se ponen a flojear tu haces tu esfuerzo y te aseguro que con el tiempo te se sera recompenzado.

Ahora te voy a hacer algunos pequeños consejos no los tomes a mal solo son opiniones que he adquirido con la experiencia  y es por eso quiero que te ahorres el trabajar demas.

1: Evita en lo maximo declarar variables globales como lo has hecho en tus primeras lneas de la 10-14, no es una buena costumbre ademas que si ingresas en la poo esta estrictamente prohibido utilizarlas, recuerdad que c++ tambien posee poo

2:Evita utilizar el system("pause") en vez de eso utiliza funciones nativas de c++ como serian cin.get();
utilizar comandos del sistemas provoca que tu programa pierda portabilidad



3: No combines  a c++ con c aunque son leguajes similares no se deben mezclar o se tendria que hacerlo en las menores ocasiones, te lo digo porque en la funcion menu1 estas declarando menu1(void) cuando esto es propiamente de c no de c++, en c++ dejar el parentesis solo es completamente valido


4: En esa misma funcion, la funcion retorna un entero cuando no seria necesario, lo mas correcto seria declarar la funcion como void porque el retorno de 1 que hace, es inecesario

5:Cuando tengas muchas condicionales siempre tendremos la opcion de los switch que en velocidad de ejecucion siempre seran mas optimos que los if-else ademas que se ven mas limpios


6; Intenta modularizar tu codigo es decir no hagas funciones demasiado grandes porque al final no se pueden leer de manera comodas, intenta que tu programa se dividad en pequeñas partes o funciones que vaya resolviendo problemas pequeños y en su conjunto resuelvan el problema final.


Espero mis consejos te ayuden y sean de aprendizaje
por ultimo parace que estas utilizando c++ builder, te felicito a ver si tienes chancita y le das una mirada a mi querido Delphi que anda en busca de nuevos desarrolladores jovenes.


Saludos...
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

HelThunk

Cita de: boy-ka en  3 Abril 2015, 05:23 AM
system("pause"); Solo funciona para los sistemas operativos que tengan el comando PAUSE, lo demás es bastante básico el código, pero bueno estás empezando.

Siguiendo con lo mismo, cuando haces una llamada a system, es como si usaras batch, y puede hacer que el programa se trabe esperando respuesta del comando que llames con sl System, haciendo así que vaya más lento o que de error en caso de que al comando que llames no existe.

En fin, solo eso por lo demás supongo que bien para ser nuevo en esto, aunque hay varias formas de hacer lo que hiciste más simplificado pero BUUEEEENO XD bien para comenzar.

Me lo anoto, gracias por echar una mano :D

Cita de: crack81 en  3 Abril 2015, 07:34 AM
La verdad me da gusto que la gente se esfuerze programando

Primero te felicito y te animo a seguir, mientras otros se ponen a flojear tu haces tu esfuerzo y te aseguro que con el tiempo te se sera recompensado.

Graacias :D, comentarios como los tuyos ayudan a seguir con muchas ganas ^^

Cita de: crack81 en  3 Abril 2015, 07:34 AM
Ahora te voy a hacer algunos pequeños consejos no los tomes a mal solo son opiniones que he adquirido con la experiencia  y es por eso quiero que te ahorres el trabajar demas.

1: Evita en lo maximo declarar variables globales como lo has hecho en tus primeras lneas de la 10-14, no es una buena costumbre ademas que si ingresas en la poo esta estrictamente prohibido utilizarlas, recuerdad que c++ tambien posee poo
¿Entonces los pongo dentro de la función principal no?

Cita de: crack81 en  3 Abril 2015, 07:34 AM
2:Evita utilizar el system("pause") en vez de eso utiliza funciones nativas de c++ como serian cin.get();
utilizar comandos del sistemas provoca que tu programa pierda portabilidad
Perfecto, ¿entonces ahora en vez de poner system("pause") pongo cin.get() no?, o tengo que añadir alguna biblioteca?

Cita de: crack81 en  3 Abril 2015, 07:34 AM
3: No combines  a c++ con c aunque son leguajes similares no se deben mezclar o se tendria que hacerlo en las menores ocasiones, te lo digo porque en la funcion menu1 estas declarando menu1(void) cuando esto es propiamente de c no de c++, en c++ dejar el parentesis solo es completamente valido
Me lo anoto.

Cita de: crack81 en  3 Abril 2015, 07:34 AM
4: En esa misma funcion, la funcion retorna un entero cuando no seria necesario, lo mas correcto seria declarar la funcion como void porque el retorno de 1 que hace, es inecesario
En el comentario 6 especifico el por que de esto.

Cita de: crack81 en  3 Abril 2015, 07:34 AM
5:Cuando tengas muchas condicionales siempre tendremos la opcion de los switch que en velocidad de ejecucion siempre seran mas optimos que los if-else ademas que se ven mas limpios
Me lo anoto.

Cita de: crack81 en  3 Abril 2015, 07:34 AM
6; Intenta modularizar tu codigo es decir no hagas funciones demasiado grandes porque al final no se pueden leer de manera comodas, intenta que tu programa se dividad en pequeñas partes o funciones que vaya resolviendo problemas pequeños y en su conjunto resuelvan el problema final.
Al principio intentaba dividir todo en funciones, pero el problema vino cuando en la función menu() intentaba invocar a la función menu1(), me daba errores, intente muchas cosas diferentes, como cambiar el orden de estos, crear un menu3() que fuese = a menu1(), utilizar el menu1(void), colocarlo en forma de entero en vez de void.. y nada, ningún método me funciono, así que decidí ponerlo todo dentro del submeno.

Cita de: crack81 en  3 Abril 2015, 07:34 AM
Espero mis consejos te ayuden y sean de aprendizaje
por ultimo parece que estas utilizando c++ builder, te felicito a ver si tienes chancita y le das una mirada a mi querido Delphi que anda en busca de nuevos desarrolladores jovenes.
Tus consejos me han ayudado muchísimo ^^. un placer ver que la gente se interesa por echar una mano a gente nueva :D, por cierto, me interesaría mucho eso del Delphi ya que programo solo y no tengo con quien comentar las cosas ni nada, y pues estar en un grupo iría perfecto (Desconozco que es el Delphi, he buscado en google y no he visto algo relacionado con el tema).
*Utilizo Microsoft Visual Studio

Un saludo ^^

crack81

¿Entonces los pongo dentro de la función principal no?

si esas variables las necesitas en la funcion menu pues entonces las declaras ahi.


Perfecto, ¿entonces ahora en vez de poner system("pause") pongo cin.get() no?, o tengo que añadir alguna biblioteca?

No necesitas ninguna libreria adicional solo la <iostream>


Bueno respecto a Delphi y a C++ builder puedes revisar su pagina oficial
http://www.embarcadero.com/es/products/application-development

si te intersa alguno de los dos puedes econtrar mas informacion en los foros
http://clubdelphi.com/http://delphiaccess.com/foros/


si no conoces delphi y quisieras tutoriales puedes consultar este hilo
donde te seran proporcionados, desde un nivel basico hasta un avanzado

http://clubdelphi.com/foros/showthread.php?t=85907
http://www.programacionfacil.com/borland_delphi/start.html
http://www.programacionfacil.com/pascal/start.html


Solo te recuerdo que Delphi estas basado en lenguaje object pascal o sea el pascal orientado a objetos y con todas las caracterisitcas de los nuevos lenguajes

Tambien Delphi al ser el heredero de pascal posee una sintaxis mas sencilla y clara que c o c++
por lo que desarrollar siempre es mas comodo e intuitivo
en las ultimas versiones de Delphi como c++ builder puedes desarrollar para
windows, mac, iosx, android
practicamente con el mismo codigo


si al final eres mas de lenguaje c++ te aconsejo mirar a c++ builder
aqui unos tutorailes muy interesantes

http://www.programacionfacil.com/cpp_builder/start.html
http://elvex.ugr.es/decsai/builder/


ojo tanto en la version de c++ builder como Delphi no es necesario utilizar sus ultimas versiones, mas si eres novato en ellos

yo utilizo las versiones 2010 y me van de perlas
pero aun asi, si quieres probar sus ultimas versiones no hay problema


Bueno si te decides por alguno que bueno, si siguens con visual studio esta bien, el chiste es no dejar de programar

Si tienes dudas puedes contacatarme por mensaje privado y si esta en mis posibilidades te pudo ayudar.





Si C/C++ es el padre de los lenguajes entonces ASM es dios.

HelThunk

Creo que me voy a quedar con c++, me gusta mucho (no se por que), he visto otros lenguajes como phyton, ruby.. y sinceramente no me llaman..

Muchas gracias por tu ayuda ^^, la verdad es que tengo muchísimas dudas, pero no quiero molestarte, así que no te preocupes jaja, de momento me apaño googleando  :rolleyes:

tremolero

A mi lo unico que se me ocurre como consejo, ya que yo tampoco tengo la misma practica que ellos, es que en el caso de querer comparar el SI o NO, en vez de crear todas las posibles combinaciones de mayusculas o minusculas, es que el valor que ellos introduzcan lo conviertas todo a minusculas o mayusculas.

Piensa en que al ser solo 2 letras, al cuadrado son 4 posibles, pero como la respuesta tenga varias letras mas, te volveras loco escribiendo todas las posibilidades.

Un saludo y sigue asi :P

HelThunk

Cita de: tremolero en  4 Abril 2015, 18:37 PM
A mi lo unico que se me ocurre como consejo, ya que yo tampoco tengo la misma practica que ellos, es que en el caso de querer comparar el SI o NO, en vez de crear todas las posibles combinaciones de mayusculas o minusculas, es que el valor que ellos introduzcan lo conviertas todo a minusculas o mayusculas.

Piensa en que al ser solo 2 letras, al cuadrado son 4 posibles, pero como la respuesta tenga varias letras mas, te volveras loco escribiendo todas las posibilidades.

Un saludo y sigue asi :P

¿Cómo convierto las combinaciones en minúsculas o mayúsculas?

crack81

Puedes usar las funciones toupper y tolower
que convierte un string a minusculas o mayusculas seguna quieras
puede revisar su referencia en estos links

http://www.cplusplus.com/reference/cctype/toupper/
http://www.cplusplus.com/reference/cctype/tolower/

Repecto a las dudas,  puedes hacermelas no importa, solo espero que a veces tengas paciencia porque por si alguna razon no te respondo rapido.
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

HelThunk

#9
Cita de: crack81 en  5 Abril 2015, 01:12 AM
Puedes usar las funciones toupper y tolower
que convierte un string a minusculas o mayusculas seguna quieras
puede revisar su referencia en estos links

http://www.cplusplus.com/reference/cctype/toupper/
http://www.cplusplus.com/reference/cctype/tolower/

Repecto a las dudas,  puedes hacermelas no importa, solo espero que a veces tengas paciencia porque por si alguna razon no te respondo rapido.

He intentado usar toupper y tolower, pero no consigo que me salga.. ¿me podrías poner un ejemplo? (si es en c++ mejor, así no mezclo c con c++)

*Cosas que he intentado;
Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[] = { "Prueba" };
std::cout << str[i] << std::endl;
while (str[i]){
std::cout << (tolower(str[i]));
i++;
}

std::cin.get();
return 0;
}


Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[] = { "Prueba" };
char c;
std::cout << str[i] << std::endl;
while (str[i]){
c = str[i];
std::cout << (tolower(str[i]));
i++;
}

std::cin.get();
return 0;
}


Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>
#include <ctype.h>
int main()
{
int i = 0;
char str[7] = { "Prueba" };
std::cout << str[i] << std::endl;
while (str[i]){
std::cout << (tolower(str[i]));
i++;
}

std::cin.get();
return 0;
}

[He intentado más cosas pero es una tonteria ponerlo todo.. :S]

Esto funciona, pero no lo comprendo.. ;

Código (cpp) [Seleccionar]

/* toupper example */
#include <stdio.h>
#include <ctype.h>
int main ()
{
 int i=0;
 char str[]="Test String.\n";
 char c;
 while (str[i])
 {
   c=str[i];
   putchar (toupper(c));
   i++;
 }
 return 0;
}