Since there are a variety of lengths and depths , there are many different methods to measure bodies of water. In the link you provided the first method shows how to calculate the discharge using the cross sectional of the stream and a current meter. A cross-sectional is basically a 2d slice of the stream with sections cut into equal width and a variable length (depth). In calculus its a similar process called Riemann sums in which you approximate the area underneath a curve using rectangles or trapezoids. You would basically calculate the area of each rectangle and add them together to find the approximation.
For discharge after you find the area of one rectangle you multiply by the the velocity that is calculated by the current meter in that subsection. Which gives you the discharge for one rectangle. You would then repeat this process for each subsection and add them together to find the total discharge.
ADCPs are much easier to work with for larger bodies of water and even ocean velocity measurements. Ships have adcps attached underneath the ship itself to calculate the velocity. There are many types of ADCPs, but all of them send out High frequency beams which change in frequency as it hits the water molecules and other particles. The beam is sent back to the ADCP, in which it uses that change to calculate the measurement. Different frequencies work better depending on the depth in which it is used at.
You can also look into Drifters as well as they are another method for measuring water flow.
My work currently is actually using the data gathered from different sources and comparing their measurements to predictions called (HYCOM). This is so engineers can improve on navigation and other devices needing the velocity measurements. I just write programs all day to do these analyses as a job.