|
We can help you with coding problems. But forums like this are not the place the be teaching entire algorithms. You'll have much better (and faster!) results searching the web for "Ant algorithm". On Yahoo, I came up with LOTS of documents and code samples...
There's even an article here on CodeProject: http://www.codeproject.com/cpp/GeneticandAntAlgorithms.asp[^]
RageInTheMachine9532
|
|
|
|
|
I am having to change my code so that I will have some subs and so that I can call on the subs. Here is my code for under the btncalculate button. Could anybody give me suggestions on how to put in subs and to change my code where it will still work.
Private Sub btncalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncalculate.Click
Dim amount As Single
'Finding out how much they will be payig just for the room - with no extras.
If radstandard.Checked = True Then
costofroom.Text = standardrate
costofroom.Text = Format(standardrate, "currency")
ElseIf raddeluxe.Checked = True Then
costofroom.Text = deluxerate
costofroom.Text = Format(deluxerate, "currency")
ElseIf radsuite.Checked = True Then
costofroom.Text = suiterate
costofroom.Text = Format(suiterate, "currency")
End If
'Figuring out how many days that they want the room.
numberofdays.Text = DateDiff(DateInterval.Day, dtparrival.Value, dtpcheckout.Value) + 1
'Finding out the cost if they need an additional bed.
Dim newcharge As Double = rollawaybed * Val(numberofdays.Text)
If chkbed.Checked = True Then
rollawaybedcharge.Text = Format(newcharge, "currency")
Else : rollawaybedcharge.Text = 0
rollawaybedcharge.Text = Format(0, "currency")
End If
'Finding out how many are going to be in the room.
'Finding out how much it is going to cost for more than 2 people in the room.
Dim additionalguest As Double = ((nudguest.Text - 2) * 10) * Val(numberofdays.Text)
If nudguest.Text > 2 Then
additionalguestcharge.Text = additionalguest
additionalguestcharge.Text = Format(additionalguest, "currency") '((((nudguest.Text - 2) * 10) * Val(numberofdays.Text)), "currency")
Else
additionalguestcharge.Text = 0
additionalguestcharge.Text = Format(0, "Currency")
End If
'Calculating just how much the room is going to cost with the number of Days staying there.
subtotal.Text = ((numberofdays.Text) * (costofroom.Text))
subtotal.Text = Format(((numberofdays.Text) * (costofroom.Text)), "currency")
'Calculating the total for the room with everything
total = CInt(CInt(subtotal.Text) + CInt(additionalguestcharge.Text) + CInt(rollawaybedcharge.Text))
txttotal.Text = Format(total, "C")
I am not sure what to do. I am confused on how to do this.
End Sub
Thank you,
ibok23
|
|
|
|
|
I was also told to move my subs around. Not sure what this means.
Thank you,
ibok23
|
|
|
|
|
well i dunno how much help this is going to be... very tired, i cant read all that right now, lol.. but
do u simply need to create subs for the fact that some1 wants you to and you dont know how?
i can start you off with this one. put this one in its own sub 4 sure. to do it, just go and cut the text from the button click event code and make another sub and paste the code in there, as shown:
private sub SetCost()
'Finding out how much they will be payig just for the room - with no extras.
If radstandard.Checked = True Then
costofroom.Text = standardrate
costofroom.Text = Format(standardrate, "currency")
ElseIf raddeluxe.Checked = True Then
costofroom.Text = deluxerate
costofroom.Text = Format(deluxerate, "currency")
ElseIf radsuite.Checked = True Then
costofroom.Text = suiterate
costofroom.Text = Format(suiterate, "currency")
End If
end sub
and to call this from the button click code, simply, in the button click event code type SetCost() . it will then go out and do the code in the SetCost method and return to the button click event where it left off.
since this section doesnt deal with any of the variables in the rest of the button click code, it can definetly b put in its own sub.
you should b able to separate the rest. just b logical about it, look thru it. ex., the ''Figuring out how many days that they want the room.' comment you have there can b cut and pasted into another new sub, called, say, RoomDays, whatever. just follow the same example as the SetCost sub. dont separate parts in2 its own sub if it has variables that are also required in the button click event.
... well, you can use functions for this rather than subs, but keep it simple for now and use subs. lol... forget that last sentence, it was more 4 other ppl reading this and yelling at me about it.
NOTE: i STRONGLY suggest (as all programmers will), since you seem somewhat new, start using camel casting for your variables. this means, when u declare a variable (anything..[to an extent].. when you NAME something), use lower case for all letters, except the 1st letter of every word after the 1st word...
ex:
costofroom should be camel casted to costOfRoom . MUCH easier for other people to read and help you debug code. prettier for the eyes. nearly a standard.
------------------------
Jordan.
III
|
|
|
|
|
Ok,
I have moved that over underneath the Private sub costofroom_textchanged section.
Now underneath the btncalculte I wrote costofroom() and I got errors.
Now what am I doing wrong?
Did I move it to the wrong section? I do not have
private sub setcost () I tried to put that under the private sub costofroom and it gave me an error.
if i need to copy it over and paste it here let me know.
Thank you,
ibok23
|
|
|
|
|
I've rewritten some of your code in your first post. It should provide a couple of examples for you to follow. You can rewrite three more sections of your original code into Functions. I'll leave it to you to figure out which sections and how to write the functions:
Private Sub btncalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncalculate.Click
'Finding out how much they will be payig just for the room - with no extras.
CalculateBaseCostOfRoom()
'Figuring out how many days that they want the room.
numberofdays.Text = CalculateDays(dtparrival.Value, dtpcheckout.Value)
'Finding out the cost if they need an additional bed.
Dim newcharge As Double = rollawaybed * Val(numberofdays.Text)
If chkbed.Checked = True Then
rollawaybedcharge.Text = Format(newcharge, "currency")
Else
rollawaybedcharge.Text = Format(0, "currency")
End If
'Finding out how much it is going to cost for more than 2 people in the room.
additionalguestcharge.Text = Format(additionalguest, "currency")
'Calculating just how much the room is going to cost with the number of Days staying there.
subtotal.Text = Format(((numberofdays.Text) * (costofroom.Text)), "currency")
'Calculating the total for the room with everything
total = CInt(CInt(subtotal.Text) + CInt(additionalguestcharge.Text) + CInt(rollawaybedcharge.Text))
txttotal.Text = Format(total, "C")
End Sub
' I know this is the long way to write these, but it's easier to follow for beginners...
'This Sub doesn't take any parameters and doesn't return any value to the caller.
Private Sub CalculateBaseCostOfRoom()
If radstandard.Checked = True Then
costofroom.Text = Format(standardrate, "currency")
ElseIf raddeluxe.Checked = True Then
costofroom.Text = Format(deluxerate, "currency")
ElseIf radsuite.Checked = True Then
costofroom.Text = Format(suiterate, "currency")
End If
End Sub
'This Function takes two DateTime objects as parameters. These will come from the Value properties
'of your DateTimePicker controls, dtpArrival and dtpCheckout. This Function will return a Long type
'value representing the number of nights these dates span.
Private Function CalculateDays(ByVal startDate As DateTime, ByVal endDate As DateTime) As Long
Dim numDays As Long
numDays = DateDiff(DateInterval.Day, startDate, endDate) + 1
Return numDays
End Function
'This Function doesn't take any parameters, but will return a Double type value representing the
'additional cost of the room.
Private Function CalculateAdditionalGuests() As Double
Dim additionalguest As Double
If Val(nudguest.Text) > 2 Then
additionalguest = ((Val(nudguest.Text) - 2) * 10) * Val(numberofdays.Text)
Else
additionalguest = 0
End If
Return additionalguest
End Function
RageInTheMachine9532
|
|
|
|
|
ibok23 wrote:
If radstandard.Checked = True Then
costofroom.Text = standardrate
costofroom.Text = Format(standardrate, "currency")
ElseIf raddeluxe.Checked = True Then
costofroom.Text = deluxerate
costofroom.Text = Format(deluxerate, "currency")
ElseIf radsuite.Checked = True Then
costofroom.Text = suiterate
costofroom.Text = Format(suiterate, "currency")
End If
The bolded sections of your code are unnecessary. You're assigning a value to a TextBox then immediately replacing that value with a different one. Your code is full of this pattern. Shorten it up by removing the first assignment, like this:
If radstandard.Checked = True Then
costofroom.Text = Format(standardrate, "currency")
ElseIf raddeluxe.Checked = True Then
costofroom.Text = Format(deluxerate, "currency")
ElseIf radsuite.Checked = True Then
costofroom.Text = Format(suiterate, "currency")
End If
RageInTheMachine9532
|
|
|
|
|
Thanks,
I am suppose to be calling on subs and not have everything underneath the button calculate. I am trying the suggestion up top, but not sure where to copy and paste this section and how to call upon it.
Thank you,
ibok23
|
|
|
|
|
I think I figured it out. I created its own private sub then called for the sub. I wasn't suppose to put it under the btn for that box. My fault.
Thanks for the suggestions and examples - it helps.
Tammy
Thank you,
ibok23
|
|
|
|
|
ya.. i think u were getting the errors from afew posts earlier from the sub that you made with the "_textchanged" at the end of it.. since you never made a sub called exactly "costofrooms", but rather "costofrooms_textchanged". the error occured b/c there was no sub existing that you were tryting to call (costofrooms()), right?
all working now?
------------------------
Jordan.
III
|
|
|
|
|
As far as I know. I am just in the process of commenting on the code itself.
Thank you,
ibok23
|
|
|
|
|
alrighty. hope i was of some assistance.
and remember... CAMEL CASTING.
------------------------
Jordan.
III
|
|
|
|
|
don't worry you were. Thanks.
Tammy
Thank you,
ibok23
|
|
|
|
|
I'm creating an n-tier application that I want to implement decent error handling in. Its probably best to describe an Example and request comment.
The presentation layer is a form to Redeem a coupon. The user enters into the form details and has a submit button.
The business logic layer (Redeem function) will do some basic checking such as the coupon hasnt been validated already or cancelled or expired and if OK will perform the status chnage to indicate that it has now been redeemed.
The data access layer consists of simple getstatus and changestatus functions to call stored procedures.
In this example the data access or business logic layers could fail as a result of a whole host of items - such as SQL problems or invalid status for the action.
If I went with the approach I'm more familar with which is from a VB6 background - I could return different codes from the functions and track in the calling function and control the actions as a result of these different problems. I'd probably set up a enumeration in a interface file used by all components - so that I dont just use magic numbers but that the return code is either success or a code indicating cause of the problem. But I'd still need some exception handling to deal with all other eventuallities.
The more .NET approach may be to create custom exceptions for the application. And throw these errors instead of return codes. This would allow the exceptions to bubble to a layer where they are dealt with. The functions would then return either a success or throw an exception.
Only small simple functions that only require a success or failure would possibly use return code values other than success.
This would require some custom exceptions created for situations like ItemDoesntExist and InvalidStateTransition but I could see this being a nice approach as all functions would have exception handlers and a pretty standard template would be used by deafult on all functions with addition of catch statements for more specifics to be dealt with.
In above example I'd have a different form that would be called if something didn't exist to if the action was invalid because say the status' were incorrect. This is why I'd need specific reasons as to why something had failed.
Any thoughts on these two approaches ? I could use either.....
|
|
|
|
|
I think that it would be better to use Exceptions as the .NET framework itself uses it.
"I think there is a world market for maybe 5 computers"
Thomas Watson, chairman of IBM, 1943
"There is no reason anyone would want a computer in their home"
Ken Olson, chairman & founder of Digital equipment, 1977
"This 'telephone' has too many shortcomings to be seriously considered as a means of communication. The device is ingerently of no value to us."
Western Union internal memo, 1876
"640 K ought to be enough for anybody."
Bill Gates, 1981
"Computers in the future may
|
|
|
|
|
I add data using the following method:
Open "text.txt" For Append As #1
Write #1, Display.Text, ID.Text
Close #1
'next section adds data in text.txt to a list box
Open "text.txt" For Input As #1
x = 1
Do While Not EOF(1)
Input #1, username, user_id
List1.AddItem username
x = x + 1
Loop
Close #1
How do i delete the data which i select from the list box??
|
|
|
|
|
Using a text file, it's a pain in the butt.
What you have to do is, literally, rewrite the text file.
1) Open the text file you have -> we'll call it source.txt
2) Open a second text file -> we'll call it target.txt
3) Read a line from source.txt
4) Is this the line you want to delete?
No -> Write this line to Target.txt
5) Read the next line from source.txt until you reach the end of the file.
6) Close both files
RageInTheMachine9532
|
|
|
|
|
Heres what i have so far:
Open "source.txt" For Append As #1<br />
Open "target.txt" For Input As #2<br />
<br />
x = 1<br />
Do While Not EOF(1)<br />
Input #1, UserName, UserID<br />
If Not UserName = NewUser.User.Selected(nIndex) Then 'Is this kinda what you meant in step 4? NewUser is form name, User is list box name.<br />
Print #2, UserName, UserID<br />
End If<br />
x = x + 1<br />
Loop<br />
Close #1<br />
Close #2
Its not writing the taget.txt
|
|
|
|
|
Pugzley wrote:
Open "source.txt" For Append As #1
Open "target.txt" For Input As #2
x = 1
Do While Not EOF(1)
Input #1, UserName, UserID
If Not UserName = NewUser.User.Selected(nIndex) Then
Print #2, UserName, UserID
End If
x = x + 1
Loop
Close #1
Close #2
There's a few thing wrong with this:
1) What's with 'x'? It's never used in this algorithm so remove it.
2) Your reading from your target file and write to your source file. Not good unless you want to erase all of your data.
3) Open your source file for input and your target file for output, not append. Remember, you have to rewrite your entire file to do this.
Fixed version:
Open "source.txt" For Input As #1
Open "target.txt" For Output As #2
Do While Not EOF(1)
Input #1, UserName, UserID
If Not UserName = NewUser.User.Selected(nIndex) Then
Print #2, UserName, UserID
End If
Loop
Close ' Close with no parameters will close ALL open files you opened with Open.
RageInTheMachine9532
|
|
|
|
|
OK, now it copies the data to the other file, however it includes the data that I want to exclude
|
|
|
|
|
Then the compare is not coming up with the correct result:
Open "source.txt" For Input As #1
Open "target.txt" For Output As #2
Do While Not EOF(1)
Input #1, UserName, UserID
If Not UserName = NewUser.User.Selected(nIndex) Then
Print #2, UserName, UserID
End If
Loop
Close ' Close with no parameters will close ALL open files you opened with Open.
You're going to have to step through the code, as it's running, and make sure that what you're comparing is what your expecting.
RageInTheMachine9532
|
|
|
|
|
What you have to do is, literally, rewrite the text file.
1) Open the text file you have -> we'll call it source.txt
2) Open a second text file -> we'll call it target.txt
3) Read a line from source.txt
[b]4) Is this the line you want to delete?
No -> Write this line to Target.txt[/b]
5) Read the next line from source.txt until you reach the end of the file.
6) Close both files
How do I do the section in bold??
|
|
|
|
|
Anonymous wrote:
What you have to do is, literally, rewrite the text file.
1) Open the text file you have -> we'll call it source.txt
2) Open a second text file -> we'll call it target.txt
3) Read a line from source.txt
4) Is this the line you want to delete?
No -> Write this line to Target.txt
5) Read the next line from source.txt until you reach the end of the file.
6) Close both files
How do I do the section in bold??
If UserName <> SelectedUserName Then
Print #2, UserName, UserID
End If
If this is not the line we are looking for, write it to the target file...
RageInTheMachine9532
|
|
|
|
|
I got most of it working except for the part where I remove ALL items that are selected. The program is just removing the items that are high lighted, instead of all that are selected.
<br />
Open "source.txt" For Input As #1<br />
Open "target.txt" For Output As #2<br />
Do While Not EOF(1)<br />
Input #1, UserName, UserID<br />
<br />
If Not NewUser.User.List(User.ListIndex) = UserName Then<br />
Write #2, UserName, UserID<br />
End If<br />
Loop<br />
Close<br />
<br />
Kill "source.txt"<br />
Name "target.txt" As "address.add"
How do i delete all selected items??
|
|
|
|
|
Ahhh! You never mentioned that before!
To do that, you have to compare each selected item to the one you've read. All you do is loop through all of your selected items. I can't give you the EXACT code because I don't know how your keeping track of what's been selected in what control:
Dim i As Integer
Open "source.txt" For Input As #1
Open "target.txt" For Output As #2
Do While Not EOF(1)
Input #1, UserName, UserID
For i = 0 to NewUser.User.List.Count - 1 ' Or whatever your tracking them in
If NewUser.User.List(i) = UserName Then
Exit For ' If the a match is found, skip to the next line in the file
End If
Write #2, UserName, UserID ' This statement will only execute if the selected list
' does NOT match the current line in the file
Next
Loop
Close
RageInTheMachine9532
|
|
|
|
|