Design help for a Online Questionnaire /Exam Application
I am developing a web application which will deal with online examination. The requirement is:
- There can be n-number of开发者_StackOverflow社区 sections in an exam and admin users should be able to create questions/answers and add to an exam.
- The questions should be displayed for a certain amount of time in the browser with timeclock and it should move to next question automatically.
- User should not be allowed to open any other instance of the browser or login from another IP if the exam is in progress.
I am seeking community vote of how would someone design the application to meet all these criterias? What patterns should be used? What components can help to reduce the development time etc..
My technology stack is C#, ASP.NET MVC or ASP.NET with SQL Server.
Thanks in advance!!!
Rather than re-invent the wheel, you should look at a solution such as the Open Source DotNetNuke and either buy/build an extension for the portion specific to your scenario.
I think for the user app, you should consider a Silverlight app as this will give you granular and secure control over the experience.
Overall the solution would be like this:
- DotNetNuke provides the foundation portal/Content Management so you can create a highly customized experience around the exam experience including support for user management etc.
- The DotNetNuke extension would enable authorized administrators to manage exams and exam questions.
- A webservice wrapper would provide access to the business controller used by the DotNetNuke extension.
- A Silverlight app would interact with the webservice to enable authenticated users to take their exams
Overall, such a solution would give you a high degree of control over the user experience while enabling you to focus time/resources that are only specific to your situation while leveraging an existing, robust and popular solution on which to build your solution.
(Full disclosure: I am one of the co-founders of the company that manages DotNetNuke. In fairness, you can replace my suggestion for DotNetNuke with Orchard or Umbraco and the solution would be equally valid.)
For the Database side of things you would want something like:
Table Exams (ExamID, ExamName) //to hold all exams
Table Users(UserID, Username, Login, Password) //to hold all users
Table OpenExams(Exam_ID, User_ID) //to hold open exams
Table ExamSections(SectionID, Exam_ID, SectionName) //to hold sections of exams
Table Questions(QuestionID, Section_ID, QuestionName, Question, Answer) //to hold questions
This of course at its most basic and only 1 approach of many. You would need to add fields where required.
As for item 2, i would probably do it in the application layer (or in VS). I dont have much experience in web dev, but i would think that ASP could handle that. For item 3, you could run a simple SQl statement to get if the user trying to access the exam is currently taking the exam.
Lets also start mapping the processes: User: 1. User logs in (to prevent multiple exams by one user). 2. User "starts" an exam -> Time is noted on the server-side and timer triggered on client-side. User gets a dynamic exam page 1. 3. User is done with page 1, clicks next -> Ajax-reloading the page content (the questions part). Timer for page 2 is started (server and client side) 3.a) detected login from a different IP - session broken, user marked as cheater :) or the login is simply rejected.
- User times out on page 2 -> the page content (answers) are automatically submited. the timers are set for page 3. user gets page 3.
- User clicks finish -> the exam is finished. Admin:
- Logs in -> show "add exam" option and table of existing exams
- Adds an exam - open "exam page", add a new "exam" entity
- Adds a page - > new "page" entity added to this exam, questions table is loaded in the gui
- adds a question -> new "question" object added to page
- end page -> the page is saved. options for end exam or add page are here.
- add page -> go to step 3
- finish exam -> save exam
- optionally mark exam as "active/inactive"
- add tables with "students" and their results and stuff like that.
This needs a lot of work, but when you have this you have the idea of what you need to put in your design.
精彩评论