|
Hi guys, I'm Pete an IT technician from the UK, previosly i only ever delt with Visual Basic but unfortunatly for a course i'm doing i have to write a program in C++ and everything i'm trying comes out wrong - i would be very greatfull if anyone could post examples of any code that could help me.
The task is to write the code for a simple ATM simulation
-When started a welcome message shoudl appear
-The user must then register their details to open an account
once the user has sucessfully registered their details a logon screen shoudl appear asking for thier pin number
-3 wrong pin numbers would result in the program shutting down
-A valid pin entry would take the user toa menu syetem with the following options.
Withdraw Cash
Deposit Cash
Request an overdraft
Quit
The program must display these menu options untill the quit option is chosen
An overdraft will be apporoved automatically if the user has over £500 in their account, if the user has between £250 and £500 then they must seek approval from their branch. if they have kess than £250 they overdraft request would be rejected.
I realise this is a long way below the levels of most of you guys but any ideas or sample codes would be greatly appreciated
|
|
|
|
|
I doubt you will receive any extensive help in terms of actual code. I recommend that you start the project and then post specific questions.
Kuphryn
|
|
|
|
|
Well unfortunatly i don't really know enough about C++ (and programming genrally) to ask any specific questions
i'll paste the code here (bearing in mind how new i am to this so it's very basic and untidy) - any tips anyone could give me would be greatly apprieciated
Cheers
}
<br />
<br />
<br />
<br />
<br />
#include<iostream>
#include<stdlib.h>
using namespace std;
<br />
int main()
{<br />
int pin =1234;<br />
int reg =0;<br />
int wrongpin =0;<br />
int mmchoice =0;<br />
int withdraw =0;<br />
int money =0;<br />
int deposit =0;<br />
<br />
cout<<"Welcome To Petes Bank "<<endl;
cout<<"Press any key to continue..."<<endl;<br />
system("pause");<br />
<br />
cout<<"Do you wish to register with us? "<<endl;
cout<<"1 - Yes"<<endl;<br />
cout<<"2 - No"<<endl;<br />
cin>>reg;<br />
system("pause");<br />
<br />
while ((reg !=1) && (reg !=2))<br />
{ <br />
cout<<"Error please retry"<<endl;<br />
cout<<"Press Any Key"<<endl;<br />
system("pause");<br />
cout<<"Do you wish to register with us? "<<endl;
cout<<"1 - Yes"<<endl;<br />
cout<<"2 - No"<<endl;<br />
cin>>reg;
}<br />
<br />
if (reg==1)<br />
{<br />
cout<<"How Much do you have in your acount"<<endl;<br />
cin>>money;<br />
<br />
cout<<"Your Pin is 1234"<<endl;
system("pause");<br />
system("cls");
<br />
cout<<"Please enter pin"<<endl;<br />
cin>>pin;<br />
<br />
while ((pin !=1234) && (wrongpin !=3));<br />
{ <br />
wrongpin = wrongpin+1;<br />
cout<<"Error Wrong Pin"<<endl;<br />
cout<<"Please enter pin"<<endl;<br />
cin>>pin;<br />
<br />
}<br />
else if ((pin==1234) && (wrongpin !=3));<br />
{<br />
cout<<"Welcome to the Main menu"<<endl;<br />
cout<<endl;<br />
cout<<"/t /t Please Select from the following options"<<endl;<br />
cout<<endl;<br />
cout<<"1 - Withdraw Cash"<<endl;<br />
cout<<"2 - Deposit Cash"<<endl;<br />
cout<<"3 - Request Overdraft"<<endl;<br />
cout<<"4 - Quit"<<endl;<br />
cin>>mmchoice;<br />
<br />
while ((mmchoice !=1) && (mmchoice !=2) && (mmchoice !=3) && mmchoice !=4)<br />
{ <br />
cout<<"Error please retry"<<endl;<br />
cout<<"Press Any Key"<<endl;<br />
system("pause");<br />
cout<<"Welcome to the Main menu"<<endl;<br />
cout<<endl;<br />
cout<<"/t /t Please Select from the following options"<<endl;<br />
cout<<endl;<br />
cout<<"1 - Withdraw Cash"<<endl;<br />
cout<<"2 - Deposit Cash"<<endl;<br />
cout<<"3 - Request Overdraft"<<endl;<br />
cout<<"4 - Quit"<<endl;<br />
cin>>mmchoice;<br />
}<br />
<br />
else if (mmchoice = 1);<br />
{<br />
cout<<"How much would you like to withdraw?"<<endl;<br />
cin>>withdraw;<br />
system("cls");<br />
money = money - withdraw<br />
cout<<"Please take your "<<withdraw<<" Pounds"<<endl;<br />
cout<<"Your Balance is "<<money<<" Pounds"<<endl;<br />
system("pause");<br />
<br />
return 0;<br />
}<br />
else if (mmchoice = 2);<br />
{<br />
cout<<"How much would you like to Deposit?"<<endl;<br />
cin>>deposit;<br />
system("cls")<br />
money = money + deposit<br />
cout<<"Your Balance is "<<money<<" Pounds"<<endl;<br />
system("pause");<br />
<br />
return 0;<br />
}<br />
else if (mmchoice = 3)<br />
{<br />
if (money >500)<br />
cout<<"Your overdraft has been approved!"<<endl;<br />
<br />
system("pause");<br />
<br />
return 0;<br />
<br />
if ((money <=500) && (money >250));<br />
cout<<"Please contact your branch"<br />
system("pause")<br />
<br />
return 0;<br />
<br />
if (money <=250);<br />
cout<<"Sorry you cannot have an overdraft"<br />
system("pause")<br />
<br />
return 0;<br />
}<br />
<br />
else if (mmchoice = 4);<br />
{<br />
cout<<"thankyou for using Pete's bank"<br />
system("pause")<br />
<br />
return 0;<br />
}<br />
<br />
<br />
}<br />
else if ((pin!=1234) && (wrongpin ==3))<br />
{<br />
cout<<"Sorry you have Entered the wrong pin 3 times, the system will now shut down"<<endl;<br />
system("pause");<br />
<br />
return 0;<br />
<br />
}<br />
<br />
if (reg ==2)<br />
<br />
cout<<"goodbye"<<endl;<br />
system("pause");<br />
<br />
return 0;<br />
<br />
|
|
|
|
|
The other poster was right - we're glad to help, but we won't do your homework for you.
Pete Forster wrote:
#include //IO Library Mandatory
#include //Standard Library for DOS commands Mandatory
//#include //Includes String library
using namespace std; //For object orientation Mandatory
As a matter of form, it's better to use the syntax
using std::endl;
using std::cout;
etc. Do you *need* to use the dos library ? I think it's a bit ugly, personally.
Also, the includes didn't show up because you didn't tick 'display this message as-is', or use the buttons above the smileys to put in <> as < >. I presume you included <iostream> and <string> as opposed to <iostream.h> and <string.h> ? If not, the code is wrong and reference to namespace std is superfluous.
Pete Forster wrote:
cout<<"Please enter pin"<<endl;
cin>>pin;
while ((pin !=1234) && (wrongpin !=3));
{
wrongpin = wrongpin+1;
cout<<"Error Wrong Pin"<<endl;
cout<<"please enter="" pin"<<endl;
cin="">>pin;
}
else if ((pin==1234) && (wrongpin !=3));
Your while and if statements have semicolons after them. I suspect this is your main problem. The semicolon means that the code afterwards is always run. This can be valid, a loop and perform the desired actions by itself at times, but you want this
while (pin != 1234 && wrongpin <3 ) // no semicolon and extra brackets were superfluous.
{
++wrongpin; // Same as wrongpin = wrongpin + 1
// etc.
}
I'd also be inclined to use do...while loops so your input statement need only occur the once.
Pete Forster wrote:
while ((mmchoice !=1) && (mmchoice !=2) && (mmchoice !=3) && mmchoice !=4)
Just a suggestion, but this would be tighter as
while (mmchoice < 1 || mmchoice > 4)
Also, you created all these variables at the top, and a lot of them are just reused temporaries. C requires variables declared at the top, for C++, I prefer to declare them as I need them. They are only ints today, but if you're creating something resource hungry, it's better not to do it until you need it. ( Of course, if your teacher is an old C programmer, he may disagree and it may cost you marks, so ask him/her first )
Pete Forster wrote:
if (money >500)
cout<<"Your overdraft has been approved!"<<endl;
system("pause");
return 0;
if="" ((money="" <="500)" &&="" (money="">250));
cout<<"Please contact your branch"
system("pause")
return 0;
if (money <=250);
cout<<"Sorry you cannot have an overdraft"
system("pause")
Two problems here ( unless I'm misreading the code ).
1. 'Magic' numbers are evil. If you want to have a a limit, set it at the top of your code like this:
const int nMaximumWithdrawal = 500;
Then if you want to change the value later, you can do so easily without introducing bugs.
2. I suspect this code is supposed to refer to the customers balance to check if it's an overdraft, instead of a predefined value.
Good luck !!!
Christian
No offense, but I don't really want to encourage the creation of another VB developer.
- Larry Antram 22 Oct 2002
C# will attract all comers, where VB is for IT Journalists and managers - Michael
P Butler 05-12-2002
It'd probably be fairly easy to make a bot that'd post random stupid VB questions, and nobody would probably ever notice - benjymous - 21-Jan-2003
|
|
|
|
|
Hello there,
Watch out for this classic C++ mistake:
You code:
else if (mmchoice = 1);
should be:
else if (nmchoice == 1)
Note the semicolons should not be there and the double == sign.
The double == is comparing while the single = is assigning.
Art
|
|
|
|
|
hi
i need to know a way to convert CString variable to Hex char
afender
|
|
|
|
|
<br />
CString str = ...;<br />
int n = _ttoi(str);<br />
<br />
CString sHex;<br />
sHex.Format(_T("%X"), n);<br />
|
|
|
|
|
What do you mean?
If you want to 'dump' the contents of a CString as hex, you could do the following:
CString string;
for (int = 0; i < string.GetLength(); i++) {
#if defined UNICODE
printf("%04X",string[i]);
#else
printf("%02X",(unsigned)string[i]);
#endif
}
If your CString contains a hex value, and you want to convert it to an integer,
CString string = "1234ABCD";
int value;
sscanf(string,"%x",&value);
Software Zen: delete this;
|
|
|
|
|
how to find out in CListCtrl whether item's checkbox was selected or not?
|
|
|
|
|
|
I wrote MFC app that required displaying Unicode text in RichEdit and other Unicode stuff. I used VC7 and Unicode version of MFC. Under WinNT/XP all works fine. Is it possible to use Microsoft Layer for Unicode to avoid special adaptation of that app for Win9x/Me? I followed the instructions in MSDN, but my App still doesn’t work under Win9x, its main window does not appear. It seems to me my app has Unicode version of WinMain. How Layer for Unicode treat all this?
|
|
|
|
|
hi,
Win 9x does not support unicode itself, you must re-write the unicode functions yourself, and all functions/class export the normal char in stead
w-char but Inside in your own class/functions w_char could be used....
i think it is very hard to make your program real unicode support for win'9x
(perhaps you make a special resource file for translated texts,
win'9x has a good support of russian/baltic/other east-european languagues it self, but Asian Languages like chinese / japanese / koreoan / sanskriet is very poor)
dan o
|
|
|
|
|
Now i have another problem!
How can i display images in the picture control by pressing the same button?
i mean if i press the button once a bitmap to be displayed,if i press the button again another bitmap to be displayed..
Thanks again!
|
|
|
|
|
Maybe you can use Davide Calabro's CButtonST v3.8 (MFC Flat buttons)[^], which allows for what you want and much more.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
As I understand you want to change the bitmaps of the control on clicking a button.
You may do this by storing the bitmaps in HBITMAP array and sending the STM_SETIMAGE on each click after changing the bitmaps array counter.
This code may illustrate.
HBITMAP hBitmaps[4];
int index = 0
.
.
.
case IDC_YOURBUTTON:
index++;
index = index < 4 ? index : 0;
HWND hWnd = ::GetDlgItem(hDlg, IDC_MYPICTURE);
::SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmaps[index]);
.
.
.
note that we do not delete the current bitmap in the control as in the last post becaues we want to preserve the bitmaps to continue the switching.
|
|
|
|
|
Is there a way to split a CString as you can in Perl?
Need to find a way to take a string and split it based on a delemiter.
for example if I have a string that looks like
c:\data\moredata\evenmoredata\datafile.dat
I need to be able to split "datafile" from the string. Since the open file Dialog supports multiple selections I can't use .GetFileTitle();
Any ideas?
|
|
|
|
|
|
Hello there,
Use CString's ReverseFind(..) function to get the position of the first backslash starting the search from the end of the string then use the Right(..) function to extract the datafile.dat name. If you don't want the extenstion you could use the Reverse find funcion again on the initial string and use the Mid(..) function to extract the name between the last backslash and the period.
Alternatively you could have called CString's GetBuffer(..) on the string and tokenize the result it using strtok() or some other low lever function. I would advise the first approach.
Art
|
|
|
|
|
I Looked over MSDN information on both ReverseFind() and strtok() before you posted this information. I did not really understand the ReverseFind() function when I first read the information, and ended up implementing strtok() to do the work, however the code that I am using to do it looks rather nasty.. but it works.. however I will look more into ReverseFind() and see if I can implement this for hopefully cleaner code.
Thank you very much for the information.
|
|
|
|
|
Here you are:
CString sPath(_T("c:\\data\\moredata\\evenmoredata\\datafile.dat"));
int nPos1 = sPath.ReverseFind('\\');
int nPos2 = sPath.ReverseFind('.');
if(nPos1 > -1 && nPos2 > -1)
{
CString sFile = sPath.Mid(nPos1+1, nPos2 - nPos1 -1);
AfxMessageBox(sFile);
}
-----------------
The ReverseFind fn just searches the string starting from the end toward the beginning and stops when it encounters the character it is looking for. The position it reports is referenced from the beginning of the string.
Art
|
|
|
|
|
Hi fellow experts, I got stuck by the following errors:
1, ::GetUserNameEx , this function, as MSDN stated, is declared in Secext.h, but after I included Secext.h I got a whole truck of compiler errors, all of which are located in Secext.h. For example:
d:\ms visual studio\vc98\include\secext.h(22) : error C2146: syntax error : missing ';' before identifier 'UserName'
d:\ms visual studio\vc98\include\secext.h(22) : error C2501: 'SECURITY_STRING' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(22) : error C2501: 'UserName' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(23) : error C2146: syntax error : missing ';' before identifier 'LogonDomainName'
d:\ms visual studio\vc98\include\secext.h(23) : error C2501: 'SECURITY_STRING' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(23) : error C2501: 'LogonDomainName' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(24) : error C2146: syntax error : missing ';' before identifier 'LogonServer'
d:\ms visual studio\vc98\include\secext.h(24) : error C2501: 'SECURITY_STRING' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(24) : error C2501: 'LogonServer' : missing storage-class or type specifiers
d:\ms visual studio\vc98\include\secext.h(33) : error C2146: syntax error : missing ';' before identifier 'GetSecurityUserInfo'
2, ::ListView_SortItemsEx , this function, as MSDN stated, is declared in commctrl.h, but after I included commctrl.h the compiler still says ListView_SortItemsEx is an "undeclared identifier".
How can I solve those? Thanks a lot.
|
|
|
|
|
|
I'm using STL vector to store file names as I retrieve them from FindNextFile() but when I try to access different locations in the vector, they all return the last file added. Am I storing or accessing incorrectly?
<br />
vector<char *> file_names;<br />
<br />
HANDLE Hnd;<br />
WIN32_FIND_DATA WFD;<br />
<br />
Hnd = FindFirstFile( "*.175", &WFD);<br />
file_names.push_back(WFD.cFileName);<br />
int i=0;<br />
while ( FindNextFile( Hnd, &WFD) ) {<br />
file_names.push_back(WFD.cFileName);<br />
cout << file_names[i] < endl;
i++;<br />
}<br />
for(int i=0; i <=file_names.size(); i++) {<br />
cout << file_names[i] << endl;<br />
cout << file_names.at(i) << endl;<br />
}<br />
<br />
vector <char *>::iterator f;<br />
for ( f = file_names.begin(); f != file_names.end(); f++)<br />
cout << *f << endl;<br />
|
|
|
|
|
The vector holds a set of pointers.
One solution is to copy the actual file name to a string container and then store it in the vector.
Kuphryn
|
|
|
|
|
kiken wrote:
file_names.push_back(WFD.cFileName);
Think about what that is doing. It's storing the address of the cFileName array over and over. You need to store copies of each name as they are returned. One way to do that is to use a vector<string>
--Mike--
The Internet is a place where absolutely nothing happens.
-- Strong Bad
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|