This is essentially the same problem as de-bouncing.
You do not just read the switch once before you act on it, you use the loop() to read it again and again and only consider it actuated when it reads the same every time while millis() advances by 10; that is to say it must stay closed for all of 10 milliseconds.
This is far more effective than fiddling about with capacitors though the capacitor will not hurt (much). This is what microcontrollers are for - to solve problems.
Now with proper coding, you can get rid of the delay() functions and enable your device to do all of the alarm function while "simultaneously" performing a number of other tasks as well. Otherwise what you have described so far could just as easily be done by a 555 timer or two.
I suggest you have a go at figuring this out; if you are really stuck I can give you some code to do this properly. :grinning: