How to grade a student software project? Situation

Students have three weeks to write a little application (UI, some logic, event handling, persist data to a file). They are given one page with some requirements (input). They are supposed to hand in a compilable and running application (output). No software documentation required.

Question

How would you grade a software project? What criteria would you use? Can you give examples?

Idea

There are a few areas that seem important to me.


Are all the given requirements implemented?
Is error handling implemented or does the application crash when the user inputs invalid data?
Does the user interface look good, is it usable?
Is the code well structured?

Each class in a separate file
Small methods which do one single task
Public methods are documented

Can I save the data, quit the application, restart it again, and all the data is reloaded?


Those criteria are very vague, I know. For each of the above criteria, I don't know when to give an A and when to give an F. Any suggestions to improve the criteria and any suggestions on how to grade it?
My policy, my 2 cents:


Part of the grading corresponds to the expectation of the "customer". if this project is considered as an actual development project in industry, does it deserves that the customer is paying its full price. For instance, I will give 10 points (over 20) for that criteria. If the software fulfil all the requirements then the student is awarded the 10 points, otherwise he/she starts losing some of the points.
Part of the grading is for the quality of the code (structure, naming of variable, algorithmic aspects, etc.). I give 5 points at max here.
The rest is for the tasks around the code: modeling, UML stuff, reports, etc. The last 5 points can be found here.