Most of the function you want can be easily implemented with EJS. The only problem is how to enter the data.
Because EJS was designed for simulation. It is weak in data set input from user.
I will try to work on this issue. Please let me know if you have better suggestions.