Learning Platform Development in
Learning Platform Development in
3-2018
Recommended Citation
Arora, Dipti, "Learning Management System (LMS) Using C#, ASP.Net and SQL SERVER" (2018). Culminating Projects in Computer
Science and Information Technology. 25.
https://repository.stcloudstate.edu/csit_etds/25
This Starred Paper is brought to you for free and open access by the Department of Computer Science and Information Technology at theRepository at
St. Cloud State. It has been accepted for inclusion in Culminating Projects in Computer Science and Information Technology by an authorized
administrator of theRepository at St. Cloud State. For more information, please contact [email protected].
Learning Management System (LMS) Using C#, ASP.Net and SQL SERVER
by
Dipti Arora
A Starred Paper
Master of Science
in Computer Science
March 2018
Abstract
Table of Contents
Page
Section
1. Introduction ............................................................................................................. 7
6. Conclusion .............................................................................................................. 50
4
References .......................................................................................................................... 51
Appendix ............................................................................................................................ 53
5
List of Tables
Table Page
List of Figures
Figure Page
1. Introduction
educational learning opportunities over the internet. As internet connection speeds keep
improving and more and more digital content becomes available, education is becoming
accessible anywhere anytime. Better interaction and knowledge acquisition techniques have
resulted from the open education provided via internet platforms. Learning management systems
developed over the years to deliver courseware, have made e-learning popular. Organizations
have also been actively involved in the use of learning management systems to deliver online
training to their employees and customers. Traditional classrooms have been transformed due to
technological and market forces, which have seen virtual learning gaining a strong foothold in
social and experiential education. Currently, most LMS provide extra functionality, which
includes social knowledge components that enable the users to consult peers, raise queries and
contribute to content. The LMS market is predicted to grow at a rate of 16% from 2016 to 2020.
The two main users of learning management systems are learners and administrators. Learners
are the people who receive training through the platform, which enables them to access various
learning materials such as course catalogs, course information, and evaluation. On the other
hand, administrators are the people who manage the learning management system by creating
various courses and putting up tools that enable learners to track their progress. Learning
management systems are used in centralizing, deploying and measuring different types of
training.
8
LMS stores information about the student’s learning curves by keeping student records and
learning data. This functionality enables the system to generate user performance. Most
companies prefer to use LMS because it provides training to keep all the courses and learner’s
data during the sessions. LMS plays a key role in enabling the access and management of content
The rapid development of LMSs has highlighted the issue of proper regulation of
implementation for the system. For this purpose, the “Shareable Content Object Reference
Model (SCORM)” has been developed to provide an outline, define the requirements, and issue
an effective implementation plan for the LMS. However, changing the architecture of existing
Some LMS were developed before the inception of SCORM, and their upgrading can be
challenging. Freeware and open-source LMSs may be an option as they provide rich features that
are comparable with high values patented LMS [1]. Nonetheless, it is not an easy decision to
discard the previous products or upgrade them to the SCORM standard since changes in LMS
support can disrupt the course development process creating confusion for both teachers and
students. Further, the cost factor cannot be ignored. Issues related to funding may prevent
successful implementation of a new learning management system. All the expenses related to
acquisition and running of an LMS must be taken into account, including subscription, hosting,
Powerful software, which has enabled the management of complex databases, has been
9
combined with great digital frameworks so that curriculums, training platforms, and evaluation
tools are managed effectively. This feature has enabled most organizations to expand and
achieve their learning goals. Self-learning has also been enhanced hence enabling people to
multi-task since acquiring education has become a very flexible process due to the availability of
these systems.
The main objective of this paper is to create a new LMS named LearningMadeEasy4u
(LME4u), which satisfies the requirements of an LMS. To develop the requirements for LME4u,
Cost, stability and security are key considerations in choosing a LMS. Based on market
▪ Proprietary LMS
▪ Standards-based LMS
Proprietary LMS can be defined as systems, which are developed in-house then sold for a
fee for use by institutes. Currently, these kinds of LMS are at the end of their existence. The
systems were developed by considering the computer-based training (CBT) systems to provide
information. Before the concept of e-learning and SCORM based systems, proprietary LMS was
used widely in the market. Clients who have purchased these kinds of systems say that the
investment versus the cost of maintenance is in the ratio of 1:3, which implies that for each dollar
of cost for purchasing such a system, extra three dollars are required for its maintenance [2]. This
LMS are the additional costs incurred in distributing it to the students and the difficulty of
words, it does not give users sufficient chance to test the new features of the proprietary LMS. In
addition, source code is also not readily available for clients; hence customizing the learning
portal becomes an impossible task. Proprietary LMS were however advantageous since they are
reliable and enables the creation of training modules and supported learning processes in an
efficient manner. In addition, they offered accountability for the way the system functioned.
Standards-Based LMS functions based on the SCORM standard. This sort of learning
management system is rapidly developing. The biggest names in the field of proprietary LMS are
now shifting toward standards-based learning management system to remain an integral part of
the market. This adaptability of standards has paved the way for the incorporation of other
components and better interoperability level for LMS. Moreover, it has changed the e-learning
contents as well since most organizations today use SCORM. However, the issue is that SCORM
is continually changing due to innovative progress and new outcomes [1]. One of the examples
of these kinds of LMS is Docebo, which is based on SCORM and XAPI standards.The
importance of SCORM is based in the fact that successful learning is reliant on the ability of an
LMS to read and run various reports on course content. Learning management systems cannot
achieve anything if they do not have quality content and a platform to distribute the
the learning platforms and course content hence enabling them to work together.
11
Proprietary LMS maintains a closed kind of approach. In other words, it does not offer an
effective way to connect with people neither does it enable the use of sharing content or social
interaction. Numerous developments of the LMS frameworks have guaranteed that their
framework is “really open”. However, as we start working with those LMS frequently, they turn
out not to be really open. Open here means that these kinds of LMS would promote open
interaction, and open connection. New versions of LMS are mostly built on the foundation of
openness. [3] Majority of such LMS have a free basic package and can be used limitlessly.
Therefore, adding advanced features to the system would mean that money has to be paid by the
organization. The advantage of such a system is that it is customizable and easy to grasp its use.
The users of such a system are able to access source code, hence personalize their own learning
portal, add whatever features they want and fix any bugs. Open systems are mainly built by
collaborative communities hence leading to better systems due to the combined knowledge of
different people. However, the disadvantage is that open systems have many costs, which are not
obvious to the user at first purchase. Some of these costs are for hosting, system maintenance,
There are certain features in learning management systems that ensure the highest level
of learnability and usability for students and administrators. The following attributes can be
Scalability–this refers to the ability of the computing processes to be used in a wide range
of capabilities. An effective LMS should be able to manage a large amount of data and any
number of users at a given time. LMS should be scalable to handle the request for new users as
well.
profitability of the LMS. It also reduces the cost of learning through managing course content,
Ease of Use–A good LMS system should enable the user to have a good user experience
when using it. The user should be able to learn how to operate the system in an easily. The
Integration–A good LMS should have data sharing capabilities so that students are able
to gain the most out of it. In an organization, the LMS should be linkable with systems such as
talent management, management of workers, human resource information system, and customer
relationship management system and compliance platforms. In a university setting, the same
management capability. The system should be able to support the latest standards of online
learning and link the learners to web content that is hosted on other systems. The system should
13
also enable learning to be organized into an effective path and materials for learning to be shared
mobile learning system. Students should be able to access content through a tablet or mobile
phone. The LMS should therefore be designed in such a way that it has adjustable screens that
can fit into different devices. Mobile learning will enhance interaction and users will be able to
Blended Learning–LMS should be able to support both online and offline learning.
Testing and Assessment–he LMS should allow for flexible testing and assessment by
allowing for pre-tests and post-tests. Test banks should be available on the system and multiple
should, therefore, be able to provide learning path reports, exam reports and in the case of
Security–The LMS system must be secure so that hackers are not able to access and
breach any data. The data must be protected, and authorizations carefully handled. Data integrity
has to be maintained and personal data of students is protected by having secure sign-on
procedures.
This helps to communicate well to students who want to enroll in the systems.
14
E-Commerce–The LMS should have functionalities that support payment gateways that
can be used by those enrolling. E-mail notifications should be enabled, and the system should be
framework and to strengthen it. It requires meeting the ever-increasing requests of students, to
meet developing infrastructural needs, and to address the constraints of financing, workforce
preparation, and boost and set staff for current and future challenges [4].
Maintenance and Support–Providing proper support and maintenance can help the
universities to be more receptive to the development of advanced features for LMS. Maintenance
through quick fixes and updating in “day in” and “day out” support for the workforce, staff and
students are two contributing elements, which guarantee the success of any LMS.
15
3. Project Overview
This project starts with a review of existing web-based learning management systems,
their abilities, related standards, best-known attributes, and development in accordance with the
Shareable Content Object Reference Model (SCORM). After reviewing the features, we selected
those that that we will incorporate in our learning management system. The project includes the
core phases of software development life cycle starting from requirements gathering and going
until implementation. The final product is our LME4Uwhich is a learning management system.
• Rapid development has opened the horizon with a worldview in support of web-based
learning since it provides remarkable information to people who intend to learn [5].
With the arrival of modern technologies, the internet has offered a platform for online
• It has been proved that internet learning has numerous advantages that have upgraded
the knowledge of people. One of the surveys has discovered the various potential
benefits in electronic and web-based learning using the internet. LMS gives learners
flexibility, and many such advantages. Web-based teaching also helps to upgrade the
nature of teaching and learning. It gives the learners a superior learning background
compared to ordinary routine programs. These online learning systems have uplifted
learning ability and showed a significant difference from those who were studying
traditionally [6].
16
• Schools are utilizing LMS as a learning tool to support information exchange between
the teachers and learners. LMS provides more insight on learning to the instructor and
student as it is able to monitor learning progress. These learning systems have led to
tremendous gains as one can plan himself or herself, in terms of the amount of
learning they are able to do within a certain period. Educational material contained in
• The learning management system provides more opportunities for students and
• Dropping maintenance charges due to reduced content duplication and very less
online platforms. Some jobs for example require physical skills that students cannot
gain online. In professions like nursing, for example, physical presence of a student is
cannot be acquired through online materials hence affecting the abilities of some
students.
• Another drawback is that LMS can give students tunnel vision, meaning that they
may not consider any other learning opportunities outside the learning management
17
system. If they are constantly training at home for example, they may not realize that
by interacting and speaking to other students, they may learn more through
• Informal learning is also difficult to incorporate through an LMS. The trainers may
not also be able to use different teaching styles. The personality of some good trainers
may also not come out through online learning, as they are not directly interacting
• The pace of advancement of students may also be greatly affected through online
learning. The learners may lag behind in the learning path as students may choose not
to read the required material on time. Some students may also read course material at
a very quick pace while others may prefer to do it slowly hence it becomes a task for
the lecturer to synchronize both of these teams without having offline activity. This
• Teachers have to take in extra work especially in the primary stages when the LMS is
launched. The teacher may have to handle a physical classroom while at the same
time having online students, yet they have to make sure the learning paths are at a
similar stage. Teachers may therefore feel overwhelmed before they find a strategy
that works for them to enable effective learning outcomes for all of their students.
• Plagiarism is another problem with LMS. Students are tempted to look up everything
in the internet hence affecting quality of work. Fair assessment will be affected.
18
management and teachers are using LMS for purposes of adding content on the web without
applying some academic criteria. This particular technique is not recommended due to reasons
such as unplanned implementation of LMS. Likewise, the teacher’s academic aptitude might be a
problem.
According to some analysts the LMS is not very flexible in allowing the use of
constructive learning procedures. Some LMS may repeat the normal face-to-face guidelines. The
Staff who offers education online, wants to utilize specialized options that are more like
conventional methods of instructing [7]. There is a consensus among some part of the academic
It has been observed that in some cases the web-based learning tools utilizes constructive and
LMS has been evolving over the years, and one of the current trends that have been
adopted is training through storytelling. This practice is done through the use of technology, and
it has helped many institutions to engage with and retain their students. Videos and online games
have enabled this to take effect, hence capturing the required attention of students and enhancing
19
their learning experience. Another trend that has started taking effect is micro learning whose
aim is to reduce the amount of information that students take in, as some of it may not be
necessary. LMS are slowly beginning to adopt micro learning by breaking down modules into
smaller pieces. This has been made better through use of videos or activities. Due to this,
students can remember a lot of information hence reducing mental burnout. Artificial
Intelligence is on the rise and enables many data inputs to be accepted hence helping students to
improve their learning skills. Combining it with LMS enhances learning experiences as
ingenious ways of delivering content are discovered. Virtual reality has made LMS very
attractive to students. The current versions make users view, listen and interact using keyboards
and controllers. Students can simulate real situations in safe and controlled environments. This
leads to better training for students. Social media has also taken the LMS scene by storm.
Current systems are integrating with social media profiles of students hence leading to better
interaction and engagement. Through this, tasks like group work have become easy, and students
can form online study groups. There is a greater focus on enhancing user and administrator
experience. More and more LMS are focusing on efficiency, speed, relevance, and usability.
Many organizations want to satisfy the needs of a rapidly changing student population. They are
therefore borrowing from the best features of the most popular systems. Use of analytics is on
the rise. There is a great shift from marketing courseware so that consumption of content is
increased, to using analytical data and intelligence that shows the needs of the learner hence
creating better content that directly targets a learner. Better learning initiatives are being
The focus of an LMS is to ensure efficient delivery of content to students, keep track of
their learning paths and performance while ensuring effective content management. Content
management maximizes one’s investment hence allowing effective reuse and content delivery.
The management of content will ensure that the LMS files are stored and organized well and
there is version-controlled access to data. A number of LMS therefore have the following
Course Copying–Various LMS include the option of backing up all courses and using
back-ups to create other copies. Individual parts of a module should also have the ability of being
exported or imported into other courses. One should also be able to export quizzes into other
courses [10].
Archiving and account deactivation–Some LMS have features, which allow archiving
and deactivation of any courses, which are outdated so that learners are unable to view them.
Administrators are able to view and edit them as necessary or reactivate them.
elements such as videos, audios or any other file formats. They also have an inbuilt video and
Glossary–A number of LMS have a glossary that assists users to understand any terms
Search Feature–LMS are enabled with search systems so that students can find learning
objects that they are looking for. Field users can be searched using username, email ID or user
profile.
Learning paths have been customized –Various LMS contain learning paths which can
been customized by adding content like videos , courses, evaluation courses and any other
Mobile device support–Some LMS deliver content to mobile devices. Layout changes
should be possible.
Social Elements Integration–Various LMS integrate social elements through social media
platforms like Facebook, linked in and twitter. This allows for effective collaboration in learning.
Learning Content should be Printable–An LMS should allow for download and printing
As LME4U takes effect, various improvements can be made with time. The security
features of the system should be enhanced to ensure that information is secure. Methods of
securing the system should, therefore, be analyzed so that the risk of hacking is reduced. Users,
for example, should be encouraged to use complex passwords as per IT security policies.
Forums can be added to this system. Through this, there will be interactive learning as
students taking one similar course can interact in one forum. Discussions make learning more
exciting and lead to better learning outcomes. The other improvement, which can be made, is the
integration of LME4U with social media for better learning experiences. This will assist
27
instructors to reach students from anywhere in a more comfortable way, and students will also be
able to interact with each other and learn from each other [21].
Notifications, messages, and alerts should also be incorporated into the system.
Whenever a student registers for a course, takes a quiz or has anything upcoming, the system
should be able to notify them through notifications on email or mobile phone. This will ensure
LME4U should support blended learning. The system should, therefore, recommend
offline knowledge, which should have a learning path. The offline education should be combined
with e learning so that they follow the same learning path. There should be support to document
Video Conferencing should be included in the system. This will give instructors an easy
time when they want to demonstrate some activities or provide clear examples. It will also help
4. Design of LME4U
This section lists some of the features of the newly created LME4U system.
In the Instructor module, the course facilitator can upload file using Upload File () action
method in Instructor Controller. The student module allows the student to download files using
Downloads File () and Download () action method. In the future LME4U will have generic
upload limits as 600MB. Normal documents like ppt,docx and pdf will have a limit of 200MB.
4.1.2 Messaging
The messaging feature in LME4u allows instructors and students to write messages to
each other. This is found in the action method in StudentController and InstructorController =
The quiz module enables an instructor to generate the quiz against a course using “Quiz
Generator” page and there can only be one quiz against one course. The instructor must select
the questions from the question bank of that course. The instructor action method is
InstructorController = Quiz Generator(), SelectQuestions(). Students are able to take quizzes for
courses in which they have enrolled, and results are shown at the end of each quiz. The action
The instructor module allows facilitators to view all courses from the database by
clicking on the ‘courses list’, located at the navigation bar. The action method for this feature is
29
instructor is able to view assigned courses by clicking on the “My Courses” in left side bar. The
able to add new questions with options inside the course and can show the questions of a course.
Students are also able to view all courses from the database by clicking on the “Courses List” in
navigation bar. All the courses taken by the student can also be viewed by clicking “My
Courses” in left side bar. The Student can also take courses the he has not taken already, as a
The system enables both students and facilitators to log into the system using provided
passwords and usernames. Each user has a unique username and password, which can be
changed later according to the user’s preference. However, a user is only able to sign in to the
The databases consist of instructor and student course assignment modules. The tables
also contain course information modules needed by students as well as databank of questions that
are used for assessment. The database tables also hold users’ information such as name,
Software Details It is a no-cost system. It allows This is a system, which is fully The system has full
trainers to customize their own customizable to one’s own needs support for SCORM and
online private hub that is filled and has simple analytics on the is customizable.
with vibrant courses for e-learning environment. Has
education at any location and strong support for SCORM &
any time. It provides a complete Tincan, selling courses,
set of tools, which are learner- videoconferences, gamification
centric and a collaborative and user profiles which can be
learning environment, which extended. It is built with a
enhance teaching and learning. responsive design in mind.
Pricing Info Moodle is free with no Talent LMS gives a free version The new LMS system is
licensing fees and is offered as and eight paid editions, which free and has no licensing
an open source module under are competitively priced fees.
General Public License. This depending on a business size and
assists business in carrying out need. The free version supports a
projects, while benefiting from maximum of 5 users and 10
cost savings, flexibility and all courses. The LMS provides
the other advantages of using standard and unlimited plans
Moodle. where they can be billed either
monthly or annually.
Available Moodle can be integrated with Talent LMS can be integrated The New LMS can be
Integration a variety of programs to meet with the following applications: integrated with many
the needs of a website. • Zapier programs.
• Zopim
• Mail Chimp
• Sales Force
31
Available Devices Moodle is available on Talent LMS is available on The New LMS is Web-
Windows and Android Windows, Android, Web-based, based.
Mac and iPhone/iPad
ASP.Net was used to develop LME4U. It provided services, which enabled creation and
execution of various web applications for LME4U using server-side technology. The web form
controls were used in building the user interface. SQL server is used in database creation for
32
LME4U. The database stores the structure of the data in form of tables and has other helper
objects. The SQL server has various functions that enhance performance of LME4U.
The instructor activity diagram shows the process that will occur once an instructor logs
in into the system. If the instructor is new, he or she will be directed to the sign-up portal. Once
this occurs they will need a course that can be assigned to them. Only after assigning the course,
the instructor will also be able to access quizzes for those courses. The other modules like
The instructor use case is shown below, and it shows the various options available in the
instructor module.
34
Enrollments *
EnrollID Results *
StudentID QuizID
CourseID EnrollID
Grade TotalMarks
ObtainedMarks
Instructors *
InstID
FirstName
LastName
Email
password
Repassword
Students *
ID
FirstName
LastName
Email
password Messages
MessageId
RePassword
MessageBody
Options
ID DateTime
[Option] SenderStudentId
Courses * SenderInstructorId
Status
ID
QuestionID RecieverStudentId
CourseID
RecieverInstructorId
CourseTitle
SenderName
InstID
RecieverName
QuizQuestions * Questions *
ID ID
QuestionID
Quizs * Question
ID QuizID CourseID
Title
CourseID
InstID
The student use case contains the options showed in the diagram.
36
37
4.3 Screenshots
LMS Dashboard–The Dashboard gives an overall view of the courses and quizzes taken.
My Courses–Only the courses the student registered for will show here.
41
Register Course–A student can register for a course by selecting one of the courses from
Student Quiz–A quiz can be assigned by instructor and a student can take a quiz for that
course.
View Profile Student–The profile shows the information about the student.
Current Password does not Match–Password needs to match your current password in
Enter New Password and Confirm Password–New password can be entered here.
45
Download Course Files–Students can download all course files related to courses.
Instructor–Message.
48
User Acceptance–the user acceptance test provides an efficient way to determine the
usability of the system and evaluate whether the system meets all user requirements. This test
can be achieved by explaining and giving surveys or questionnaires to learners to fill in through
1. Time to learn–The time to learn can be assessed to evaluate if it is user friendly by analyzing the
modules such as shown in Table 2. These are rough estimates which are based off on a single
user as a student and Instructor. It is assumed that the instructor can understand a LMS better
since they are more exposed to it and have prior experience. The time to learn for an instructor
will be less as compared to a student. However, as more and more users grow, these estimates
can definitely change as the time to learn for every user could be different.
seconds
seconds
49
Seconds
Seconds applicable
2. Error Rate by users–This will be represented by the number of mistakes that users do
when they login to LME4U for the first time an example is loading of file types,
which are not supported by the system or putting in wrong login details.
rate. It will show the student pass and fail rates. It will also give data on which
courses students are more likely to fail or pass. This will assist in future resource
planning.
questionnaires, which will be analyzed to determine the user level of satisfaction with
the system. The questionnaire will have questions on LME4U general layout and
design, LMS functionality, Ease of use, learnability, system usefulness and overall
satisfaction.
50
5. Conclusion
requirements specifications for a new LMS. These requirements include developing a back-end
system using ASP.Net and SQL server. ASP.Net has numerous advantages as it enhances
performance through early binding, just-in-time functions, caching and native optimization. It
also makes it easier for simple tasks like client authentication and submission of forms. We
described LME4u, its design, and features, in detail. Our LME4u has several advantages. The
first advantage is that there is a course module, which enables the instructor and student to view
all courses including the ones that have not been taken. There is also a quiz module hence the
instructor can generate quizzes and students can see their quiz results. The messaging module
enhances communication between the student and instructor while the file upload and download
Finally, we identified the main areas in which LME4u could be improved. Some of these
areas included enhancing the security features of LME4U, adding forums, integration with social
media and enabling notifications or message alerts. Other improvement suggestions were the
References
[1] S. A. Ahmad, U. B. Chinade, A. M. Gambaki, S. Ibrahim, and N. A. Ala, “The need for
MOODLE as a learning management system in Nigerian universities: Digesting
University Utara Malaysia Learning Zone as a case study,” Academic Research
International, vol. 2, no. 3, p. 444, 2012.
[3] F. Sandnes, H. Jian, S. Hagen, and O. Talberg, “Student evaluation of the learning
management system frontier from an HCI perspective,” in International Conference on
Engineering Education–ICEE, 2007.
[7] D. Chappell, Understanding. NET: A tutorial and analysis. Pearson Education, 2002.
[8] C. Vrasidas, “Issues of pedagogy and design in e-learning systems,” in Proceedings of the
2004 ACM Symposium on Applied Computing, pp. 911-915. ACM.
[10] C. Sailer, P. Kiefer, and M. Raubal, “An integrated learning management system for
location-based mobile learning,” International Association for Development of the
Information Society, 2015.
[15] P. Long and J. Mott, “The N2GDLE Vision: The ‘Next’ Next Generation Digital Learning
Environment,” 2017.
[16] “The new role of the Learning Management System (LMS),” .NetDimensions,
http://www.netdimensions.com/talent-management-suite/learning-management-system-
lms.php.
[17] “Developmental math–an open program: Personalized learning paths,” Connected PD,
https://connectedpd.wordpress.com/2012/10/27/163934985/, 2012.
[18] “Learn on the go with Docebo Mobile Learning app,” Docebo, https://www.docebo.
com/mobile-learning-lms-app-elearning-platform/.
[19] “Top ten learning management systems for your company,” Learning Management
Finance Online, https://learning-management.financesonline.com/top-10-learning-
management-software-solutions-for-your-company, 2017.
[20] How Do I Register and Create Accounts? Cambridge University Press. https://www.
cambridgelms.org/main/p/ru/frequentlyaskedquestions.
Appendix
Source Code
Model : Based on the MVC. This contains all the source code related to Model.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
[Key]
Dbconnect.cs
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
Instructor.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
56
namespace E_Learning_Managment_System.Models
[Key]
Instructorcourseassignment.cs
/// Model for storing the courses assigned to all of the instructors
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
57
namespace E_Learning_Managment_System.Models
[Key]
Messages.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
58
using System.Web;
namespace E_Learning_Managment_System.Models
[Key]
Options.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassOptions
[Key]
}
60
Questions.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassQuestions
[Key]
Quiz.cs
/// Model for quiz which shows the title of the quiz and that the quiz is of which course
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassQuiz
[Key]
QuizQuestions.cs
/// This model is used to store the different questions of every quiz
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassQuizQuestions
[Key]
Result.cs
/// This is the model for the result generated of the student
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassResult
[Key]
Student.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassStudent
[Key]
}
66
studentcourseassignment.cs
/// This model is used to store student's courses in which they are registered
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.Models
publicclassStudentCourseAssignment
[Key]
}
67
View
Databaseoperations.cs
/// the function that adds student's record in the database during signup
using E_Learning_Managment_System.Models;
using E_Learning_Managment_System.Models.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace E_Learning_Managment_System.ViewModel
db.Student.Add(std);
db.SaveChanges();
}
68
db.Instructor.Add(inst);
db.SaveChanges();
/// the function that gets the student's record from database when his/her profile is opened
return db.Student.Find(p);
/// this function gets the instructor's record from the database when his/her profile in opened
return db.Instructor.Find(p);
69
senderType)
if(senderType == "student")
where student.FirstName.StartsWith(prefix)
recieverType = "student",
senderType = "student",
val = student.ID,
}).ToList();
where teacher.FirstName.StartsWith(prefix)
recieverType = "instructor",
senderType = "student",
val = teacher.ID,
}).ToList();
return Student.Concat(Teacher).ToList();
where student.FirstName.StartsWith(prefix)
recieverType = "student",
senderType = "instructor",
val = student.ID,
}).ToList();
where teacher.FirstName.StartsWith(prefix)
recieverType = "instructor",
senderType = "instructor",
val = teacher.ID,
}).ToList();
return Student.Concat(Teacher).ToList();
return null;
if (message.MessageId == default(int))
db.Messages.Add(message);
db.SaveChanges();
/// <returns></returns>
message.RecieverStudentId).ToList();
73
message.SenderStudentId).ToList();
return c;
null)
message.RecieverInstructorId).ToList();
message.SenderStudentId).ToList();
return c;
!= null)
{
74
message.RecieverInstructorId).ToList();
message.SenderInstructorId).ToList();
return c;
null)
message.RecieverStudentId).ToList();
message.SenderInstructorId).ToList();
return c;
return null;
}
75
myId).ToList();
x.Last());
myId).ToList();
var chatWithStudent =
sendingMsgToStudent.Concat(recievingMsgFromStudent).OrderBy(t =>
t.DateTime).ToList();
var chatWithInstructor =
sendingMsgToInstructor.Concat(recievingMsgFromInstructor).OrderBy(t =>
t.DateTime).ToList();
foreach(var s in chatWithStudent)
if(myId != s.RecieverStudentId)
var p = s.RecieverStudentId;
x.RecieverStudentId == p);
int i = 1;
if (i == 1)
firstRow = t;
else if (i == 2)
secondRow = t;
i++;
deleteRows.Add(firstRow);
deleteRows.Add(secondRow);
}
78
var p = 0;
if (s.SenderInstructorId != null)
p = s.SenderInstructorId ?? default(int);
p = s.RecieverInstructorId ?? default(int);
|| x.RecieverInstructorId == p);
int i = 1;
{
79
if (i == 1)
firstRow = t;
else if (i == 2)
secondRow = t;
i++;
deleteRows.Add(secondRow);
deleteRows.Add(firstRow);
}
80
var allLatestMessages =
chatWithStudent.Concat(chatWithInstructor).ToList();
try
allLatestMessages.Remove(del);
db.SaveChanges();
catch{ }
!= null)
myId).ToList();
81
x.Last());
myId).ToList();
var chatWithInstructor =
sendingMsgToInstructor.Concat(recievingMsgFromInstructor).OrderBy(t =>
t.DateTime).ToList();
var chatWithStudent =
sendingMsgToStudent.Concat(recievingMsgFromStudent).OrderBy(t =>
t.DateTime).ToList();
if (myId != s.RecieverInstructorId)
var p = s.RecieverInstructorId;
p || x.RecieverInstructorId == p);
int i = 1;
if (i == 1)
firstRow = t;
else if (i == 2)
secondRow = t;
i++;
}
83
deleteRows.Add(firstRow);
deleteRows.Add(secondRow);
var p = 0;
if (s.SenderStudentId != null)
p = s.SenderStudentId ?? default(int);
{
84
p = s.RecieverStudentId ?? default(int);
x.RecieverStudentId == p);
int i = 1;
if (i == 1)
firstRow = t;
else if (i == 2)
secondRow = t;
i++;
{
85
deleteRows.Add(secondRow);
deleteRows.Add(firstRow);
var allLatestMessages =
chatWithInstructor.Concat(chatWithStudent).ToList();
try
allLatestMessages.Remove(del);
db.SaveChanges();
catch { }
86
return null;
Views
Index.cshtml
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>LearningMadeEasy4u</title>
87
</head>
<body>
<div class="container">
<div class="navbar-header">
target="#main-nav">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<h3>LearningMadeEasy4u</h3>
</div>
88
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
</li>
<li class="dropdown">
@Html.ActionLink("Student Login","Login","Student")
</li>
<li class="dropdown">
</li>
</ul>
</div>
</div>
</div>
speed="8" data-opacity="true">
</div>
</div>
<div class="container">
<div class="page-section-heading">
<h2 class="text-display-1">Features</h2>
</div>
<div class="media">
<div class="panel-body">
</div>
</div>
</div>
90
<div class="media-body">
<div class="panel-body">
<p>We have the best tutors with advance level of skills. Hurry and get them more are
waiting.</p>
</div>
</div>
</div>
</div>
<div class="media">
<div class="panel-body">
</div>
</div>
</div>
<div class="media-body">
<div class="panel-body">
<p>Tutors with extra skills will be available for students to message them privately.</p>
</div>
</div>
</div>
</div>
<div class="media">
<div class="panel-body">
</div>
</div>
</div>
<div class="media-body">
<div class="panel-body">
<p>This website has some top level tutors who are expert in their respective fields.</p>
</div>
</div>
</div>
</div>
92
<div class="media">
<div class="panel-body">
</div>
</div>
</div>
<div class="media-body">
<div class="panel-body">
<p>Every course will contain their respective source files, Such as document files, pdf
</div>
</div>
</div>
</div>
<div class="media">
<div class="panel-body">
</div>
</div>
</div>
<div class="media-body">
<div class="panel-body">
<p>After the completion of course you have to give a final test, which will be taken in
order to test your skills and in the end if you pass it you will be given a certificate.</p>
</div>
</div>
</div>
</div>
<div class="media">
<div class="panel-body">
</div>
</div>
94
</div>
<div class="media-body">
<div class="panel-body">
<p>Each and every day out tutors are uploading new and latest tutorials.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<br />
src="~/Views/Home/images/photodune-6745579-modern-creative-man-relaxing-on-
opacity="true" data-speed="8">
<div class="v-center">
<div class="page-section">
Home</h1>
95
<br />
</div>
</div>
</div>
</div>
<section class="footer-section">
<div class="container">
<div class="row">
<ul class="list-unstyled">
<li><a href="#">Partners</a></li>
<li><a href="#">Privacy</a></li>
</ul>
</div>
<ul class="list-unstyled">
<li><a href="">Courses</a></li>
<li><a href="">Tutors</a></li>
<li><a href="">Pricing</a></li>
</ul>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-btn">
</span>
</div>
</div>
97
<br />
<p>
</p>
<p class="text-subhead">
</p>
</div>
</div>
</div>
</section>
<footer class="footer">
</footer>
<!-- Inline Script for colors and config objects; used by various external scripts; -->
<script>
98
var colors = {
"danger-color": "#e74c3c",
"success-color": "#81b53e",
"warning-color": "#f0ad4e",
"inverse-color": "#2c3e50",
"info-color": "#2d7cb5",
"default-color": "#6e7882",
"default-light-color": "#cfd9db",
"purple-color": "#9D8AC7",
"mustard-color": "#d4d171",
"lightred-color": "#e15258",
"body-bg": "#f6f6f6"
};
var config = {
theme: "html",
skins: {
"default": {
"primary-color": "#42a5f5"
};
</script>
<script src="~/Design/js/app/app.js"></script>
99
<script src="~/Design/js/vendor/all.js"></script>
</body>
</html>
Addquestions.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<br>
@using (Html.BeginForm())
<divclass="container"style="width:80%;">
<tr>
<td></td>
<td>@Html.Label("Question")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"checkedvalue="1"></td>
<td>@Html.Label("Option 1:")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"value="2"></td>
<td>@Html.Label("Option 2:")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"value="3"></td>
<td>@Html.Label("Option 3:")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"value="4"></td>
<td>@Html.Label("Option 4:")</td>
</tr>
<tr>
<td></td><td></td>
<td>
<inputtype="text"name="CourseID"value="@ViewBag.CourseID"hidden/>
<inputtype="submit"style="width:150px;"value="Add"class="btn btn-primary"/>
<buttontype="button"class="btn btn-
<buttontype="button"class="btn btn-
success"onclick="location.href='@Url.Action("ShowMyCourses", "Instructor",
Courses</button>
</td>
</tr>
102
</table>
</div>
</div>
</div>
<script>
$(function () {
$("form").validate({
rules: {
Question: "required",
Option1: "required",
Option2: "required",
Option3: "required",
Option4: "required",
},
messages: {
},
form.submit();
});
});
</script>
change.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<br>
104
@using (Html.BeginForm())
<divclass="container"style="width:80%;">
<tr>
<td></td>
<td>@Html.Label("Question")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"checkedvalue="1"></td>
<td>@Html.Label("Option 1:")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"value="2"></td>
<td>@Html.Label("Option 2:")</td>
</tr>
105
<tr>
<td><inputtype="radio"name="Check"value="3"></td>
<td>@Html.Label("Option 3:")</td>
</tr>
<tr>
<td><inputtype="radio"name="Check"value="4"></td>
<td>@Html.Label("Option 4:")</td>
</tr>
<tr>
<td></td><td></td>
<td>
<inputtype="text"name="CourseID"value="@ViewBag.CourseID"hidden/>
<inputtype="submit"style="width:150px;"value="Add"class="btn btn-primary"/>
<buttontype="button"class="btn btn-
<buttontype="button"class="btn btn-
success"onclick="location.href='@Url.Action("ShowMyCourses", "Instructor",
Courses</button>
</td>
</tr>
</table>
</div>
</div>
</div>
<script>
$(function () {
$("form").validate({
rules: {
Question: "required",
Option1: "required",
Option2: "required",
Option3: "required",
Option4: "required",
107
},
messages: {
},
form.submit();
});
});
</script>
changepassword.cshtml
@model E_Learning_Managment_System.Models.Instructor
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
108
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<!-- In this container the wrong password error message will be shown -->
<ahref="#"class="close"data-dismiss="alert"aria-label="close">×</a>
<strong>@ViewBag.wrongpassword</strong>
@{
ViewBag.wrongpassword = null;
</div>
<formaction="/Instructor/ChangePassword"method="post">
<divclass="panel-body">
<divclass="form-group">
<divclass="form-control-material">
109
<inputtype="password"name="password"class="form-control"/>
</div>
</div><br><br>
<inputtype="submit"class="btn btn-primary"/>
</div>
</form>
</div>
</div>
<script>
$(function () {
$("form").validate({
rules: {
password: "required"
},
messages: {
},
form.submit();
}
110
});
});
</script>
DownloadFile.cshtml
@model List<string>
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<tablestyle="width:100%;"class="table table-bordered">
<tr>
<th>File Name</th>
<th>Link</th>
</tr>
111
<tr>
<td>
@Model[i].ToString()
</td>
<td>
@Model[i].ToString() })
</td>
</tr>
</table>
</div>
</div>
InstructorIndex.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
112
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher"id="content">
<divclass="st-content">
<divclass="st-content-inner padding-none">
<divclass="container-fluid">
<divclass="page-section">
<h1class="text-display-1">Dashboard</h1>
</div>
<divclass="row"data-toggle="isotope">
<divclass="panel-heading">
</div>
<ulclass="list-group">
113
var i = 1;
if (i <= 3)
<divclass="media-body">
<ahref="#"class="text-subhead list-group-link">@c.CourseTitle</a>
</div>
<divclass="media-right">
<divclass="progress-bar progress-bar-green-300"role="progressbar"aria-
valuenow="45"aria-valuemin="0"aria-valuemax="100"style="width: 45%;">
</div>
</div>
</div>
</li>
i++;
else
{
114
break;
else
<divclass="media-body">
</div>
</li>
</ul>
<divclass="panel-footer text-right">
relative"data-z="0"data-hover-z="1"data-animated>View all</a>
</div>
</div>
</div>
</div>
</div>
115
</div>
</div>
</div>
Login.cshtml
@model E_Learning_Managment_System.Models.ViewModel.LoginViewModel
<head>
<title>Home Page</title>
<linktype="text/css"href="~/Design/css/vendor/all.css"rel="stylesheet">
<linktype="text/css"href="~/Design/css/app/app.css"rel="stylesheet"/>
</head>
<bodyclass="login">
<divid="content">
<divclass="container-fluid">
<divclass="lock-container">
<imgsrc="~/Views/Home/images/login.png"class="img-circle width-80">
116
<ahref="#"class="close"data-dismiss="alert"aria-label="close">×</a>
@ViewBag.Message
</div>
@using (Html.BeginForm()) {
<divclass="panel-body">
<divclass="form-group">
"color:red" })
</div>
<divclass="form-group">
"color:red" })
</div>
unlock-alt"></i>
<ahref="#"class="forgot-password">Forgot password?</a>
@class = "link-text-color" })
</div>
</div>
</div>
</div>
</div>
<footerclass="footer">
</footer>
<!-- Inline Script for colors and config objects; used by various external scripts; -->
<script>
118
var colors = {
"danger-color": "#e74c3c",
"success-color": "#81b53e",
"warning-color": "#f0ad4e",
"inverse-color": "#2c3e50",
"info-color": "#2d7cb5",
"default-color": "#6e7882",
"default-light-color": "#cfd9db",
"purple-color": "#9D8AC7",
"mustard-color": "#d4d171",
"lightred-color": "#e15258",
"body-bg": "#f6f6f6"
};
var config = {
theme: "html",
skins: {
"default": {
"primary-color": "#42a5f5"
};
</script>
<scriptsrc="~/Design/js/vendor/all.js"></script>
119
<scriptsrc="~/Design/js/app/app.js"></script>
</body>
Messages.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<style>
.disabled {
pointer-events: none;
cursor: default;
opacity: 0.5;
#historyclick:hover {
#historyclick:active {
</style>
<!-- Input field with the name of user who is loggged in but the field is hidden -->
<!-- Inpout field with the id of the user who is logged in but the field is hidden -->
<div class="st-content">
<div class="container-fluid">
<div class="media-left">
<!-- Input field for entering the name of recipient to the the message -->
</div>
<div class="media-body">
<div class="form-group">
121
<div class="input-group">
</a>
</div>
</div>
</div>
</a>
</div><br><br>
</div>
<div id="MessageContent">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var id = 0;
var recieverType;
//whenever the page opens this function is called everytime which then further calls
GetMessages() in it self
$(function () {
123
$(document).ready(function () {
GetMessages();
});
});
//Function for getting the name suggestion when writing the recipient name in write
$(function () {
$("#searchTerm").autocomplete({
$.ajax({
url: '/Home/AutocompleteSuggestions/',
data: "{ 'prefix': '" + request.term + "' , 'senderType': '" + senderType + "'}",
dataType: "json",
type: "POST",
$("#SendButton").addClass("disabled");
$("#MessageBody").addClass("disabled");
$("#MessageContent").html("");
GetMessages();
return item;
}))
},
},
});
},
id = i.item.val;
recieverType = i.item.recieverType;
senderType = i.item.senderType;
name = i.item.label;
check = "selected";
$("#SendButton").removeClass("disabled");
$("#MessageBody").removeClass("disabled");
GetMessages();
},
minLength: 1
});
});
125
function SendMessage() {
if ($("#WriteMessage").val() != '')
$("#WriteMessage").val('');
GetMessages();
});
else
function GetMessages() {
{
126
shadow'>" +
hidden />" +
body message'>" +
"</a></h4>" +
value.dateTime + "</p>" +
});
$("#MessageContent").html(htmlBody);
});
recieverType };
if (value.name == sessionValue) {
class='media-body message'>" +
value.dateTime + "</p>" +
else {
class='media-body message'>" +
"</a></h4>" +
value.dateTime + "</p>" +
});
$("#MessageContent").html(htmlBody);
});
}
129
//Whenever you click on the message in all message's chat history then this function is
called
$("#searchTerm").val(recieverName);
id = recieverId;
recieverType = type;
name = recieverName;
check = "selected";
recieverType };
$("#SendButton").removeClass("disabled");
$("#MessageBody").removeClass("disabled");
$("#MessageContent").html("");
GetMessages();
});
</script>
130
Profile.cshtml
@model E_Learning_Managment_System.Models.Instructor
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<ahref="#"class="close"data-dismiss="alert"aria-label="close">×</a>
<strong>@ViewBag.password</strong>
@{
ViewBag.password = null;
</div>
<divclass="st-content">
<divclass="st-content-inner padding-none">
<divclass="container-fluid">
<divclass="page-section third">
<ulclass="nav nav-tabs">
</ul>
<divclass="tab-content">
<divid="account"class="tab-pane active">
<formclass="form-horizontal">
<divclass="form-group">
<divstyle="float:right;">
<br><br><br><br><labelfor="changepassword"class="col-md-2 control-
label"><ahref="/Instructor/ChangePassword">Change Password</a></label>
</div>
132
<labelfor="inputEmail3"class="col-sm-2 control-label">Avatar</label>
<divclass="col-md-6">
<divclass="media v-middle">
<divclass="media-left">
</div>
</div>
</div>
</div>
</div>
<divclass="form-group">
<divclass="col-md-10">
<divclass="row">
<divclass="form-control-material">
</div>
</div>
</div>
<divclass="col-md-10">
<divclass="row">
<divclass="form-control-material">
</div>
</div>
</div>
</div>
<divclass="form-group">
<labelfor="inputEmail3"class="col-md-2 control-label">Email</label>
<divclass="col-md-6">
<divclass="form-control-material">
<divclass="input-group">
<spanclass="input-group-addon"><iclass="fa fa-envelope"></i></span>
= "form-control", id = "inputEmail3" })
</div>
</div>
</div>
</div>
</form>
134
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
QuizGenerator.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<br><h4style="color:red;margin-left:10px;">Note:</h4>
135
<formaction="/Instructor/SelectQuestions">
<labelstyle="font-family:Calibri;font-size:15px;">Title:</label>
<inputtype="text"name="Title"class="form-control"style="font-family:Calibri;font-
size:15px;"/><br>
<!-- Course for the quiz will be selected from this dropdownlist -->
<labelstyle="font-family:Calibri;font-size:15px;">Course:</label>
<selectname="CourseID"class="form-control"style="font-family:Calibri;font-
size:15px;">
<optiondisabledselected>--Select a Course--</option>
@course.CourseTitle</option>
</select><br>
136
<center><inputtype="submit"value="Generate"style="width:15%;"class="btn btn-
primary"></center>
</form>
</div>
</div>
<script>
$(function () {
$("form").validate({
rules: {
Title: "required",
CourseID: "required",
},
messages: {
},
form.submit();
137
});
});
</script>
Showallcourses.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<br><h3style="margin-left:10px; text-align:center;">Courses</h3>
<!-- If there are courses in the database then they will be shown here -->
<table>
<tr>
<td><pstyle="font-family:Calibri; font-size:18px"><b>Course
Title</b> :</p></td>
align:center;"> @c.CourseTitle</p></td>
</tr>
<tr>
<td><pstyle="font-family:Calibri; font-size:15px;text-align:right;"><b>Course
ID </b>:</p></td>
align:left;"> @c.CourseID</p></td>
</tr>
</table>
</div>
else
<!-- If there are no courses in the database then "no courses" message will be shown here
-->
<table>
<tr>
</tr>
</table>
</div>
</div>
Showquizzes.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<!-- whenever a new quiz is made then its success message will be shown here -->
<ahref="#"class="close"data-dismiss="alert"aria-label="close">×</a>
<strong>@ViewBag.QuizAlert</strong>
@{
ViewBag.QuizAlert = null;
</div>
<!-- All quizes will be shown here with quiz title and course id -->
<table>
<tr>
<td><pstyle="font-family:Calibri; font-size:18px"><b>Quiz
Title</b> :</p></td>
align:center;"> @q.Title</p></td>
</tr>
<tr>
141
<td><pstyle="font-family:Calibri; font-size:15px;text-align:right;"><b>Course
ID </b>:</p></td>
align:left;"> @q.CourseID</p></td>
</tr>
</table>
<buttontype="button"onclick="location.href='@Url.Action("ShowQuizQuestions",
Questions</button><br><br>
</div>
else
<!-- If there are no quizzes in the database then this error message will be displayed -->
<table>
<tr>
!</b></p></td>
</tr>
</table>
142
</div>
</div>
showquizquestion.cshtml
<!-- All questions that were selected to be given in the quiz will be shown here for
LME4U-->
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<br>
<tr>
143
<thstyle="width:318px; text-align:center;">
<h3>Questions</h3>
</th>
</tr>
<!-- All questions that were selected to be given in the quiz will be shown here -->
<tr>
<tdstyle="padding-left:10px;">@q.Question</td>
</tr>
</table>
<buttontype="button"class="btn btn-
success"onclick="location.href='@Url.Action("ShowQuizes", "Instructor",
Quizes</button>
</div>
</div>
Signup.cshtml
@model
E_Learning_Managment_System.Models.ViewModel.InstructorSignUpViewModel
144
<!DOCTYPEhtml>
<htmlclass="hide-sidebar ls-bottom-footer"lang="en">
<head>
<metacharset="utf-8">
<metahttp-equiv="X-UA-Compatible"content="IE=edge">
<metaname="viewport"content="width=device-width, initial-scale=1">
<metaname="description"content="">
<metaname="author"content="">
<title>LearningMadeEasy4u</title>
<linkhref="~/Design/css/vendor/all.css"rel="stylesheet"/>
<linkhref="~/Design/css/app/app.css"rel="stylesheet"/>
</head>
<bodyclass="login">
<divid="content">
<divclass="container-fluid">
<divclass="lock-container">
<h1class="text-display-1">Create account</h1>
<divclass="panel-body">
@using (Html.BeginForm())
145
<divclass="form-group">
= "color:red" })
</div>
<divclass="form-group">
= "color:red" })
</div>
<divclass="form-group">
146
"color:red" })
</div>
<divclass="form-group">
@style = "color:red" })
</div>
<divclass="form-group">
@style = "color:red" })
147
</div>
<divclass="form-group text-center">
<divclass="checkbox">
<inputtype="checkbox"id="agree"required="required"/>
</div>
</div>
<divclass="text-center">
</div>
</div>
</div>
</div>
</div>
</div>
<footerclass="footer">
</footer>
<!-- Inline Script for colors and config objects; used by various external scripts; -->
<script>
var colors = {
"danger-color": "#e74c3c",
"success-color": "#81b53e",
"warning-color": "#f0ad4e",
"inverse-color": "#2c3e50",
"info-color": "#2d7cb5",
"default-color": "#6e7882",
"default-light-color": "#cfd9db",
"purple-color": "#9D8AC7",
"mustard-color": "#d4d171",
"lightred-color": "#e15258",
"body-bg": "#f6f6f6"
};
var config = {
theme: "html",
skins: {
"default": {
"primary-color": "#42a5f5"
};
149
</script>
<scriptsrc="~/Scripts/jquery-3.1.1.min.js"></script>
<scriptsrc="~/Scripts/jquery.validate.min.js"></script>
<scriptsrc="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<scriptsrc="~/Design/js/vendor/all.js"></script>
<scriptsrc="~/Design/js/app/app.js"></script>
</body>
</html>
UploadFile.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/InstructorLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<!-- Success message for adding file will be shown here -->
<ahref="#"class="close"data-dismiss="alert"aria-label="close">×</a>
<strong>@ViewBag.FileAlert</strong>
@{
150
ViewBag.FileAlert = null;
</div>
<table>
<tr>
<td>
<label>upload file:</label><br>
<inputtype="file"name="file"/><br>
<inputtype="submit"/>
</td>
</tr>
</table>
151
</div>
</div>
Student-Takecourse.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/StudentLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<formaction="/Student/TakeCourse"method="post">
<selectname="CourseID"class="form-control"style="font-family:Calibri;font-
size:18px;">
}
152
else
<optiondisabledselected>--Select a Course--</option>
@course.CourseTitle</option>
</select><br>
<center><inputtype="submit"value="Register"style="width:15%;"class="btn btn-
primary"></center>
</form>
</div>
</div>
<script>
$(function () {
$("form").validate({
rules: {
CourseID: "required"
153
},
messages: {
},
form.submit();
});
});
</script>
Signup.cshtml
@model
E_Learning_Managment_System.Models.ViewModel.StudentSignUpViewModel
<!DOCTYPEhtml>
<htmlclass="hide-sidebar ls-bottom-footer"lang="en">
<head>
<metacharset="utf-8">
<metahttp-equiv="X-UA-Compatible"content="IE=edge">
<metaname="viewport"content="width=device-width, initial-scale=1">
<metaname="description"content="">
154
<metaname="author"content="">
<title>LearningMadeEasy4u</title>
<scriptsrc="~/Scripts/jquery-3.1.1.min.js"></script>
<linkhref="~/Design/css/vendor/all.css"rel="stylesheet"/>
<linkhref="~/Design/css/app/app.css"rel="stylesheet"/>
</head>
<bodyclass="login">
<divid="content">
<divclass="container-fluid">
<divclass="lock-container">
<h1class="text-display-1">Create account</h1>
<divclass="panel-body">
@using (Html.BeginForm())
<divclass="form-group">
@style = "color:red" })
</div>
<divclass="form-group">
@style = "color:red" })
</div>
<divclass="form-group">
= "color:red" })
</div>
<divclass="form-group">
@style = "color:red" })
</div>
<divclass="form-group">
@style = "color:red" })
</div>
<divclass="form-group text-center">
<divclass="checkbox">
<inputtype="checkbox"id="agree"required="required"/>
</div>
</div>
157
<divclass="text-center">
</div>
</div>
</div>
</div>
</div>
</div>
<footerclass="footer">
</footer>
<!-- Inline Script for colors and config objects; used by various external scripts; -->
<script>
var colors = {
"danger-color": "#e74c3c",
"success-color": "#81b53e",
"warning-color": "#f0ad4e",
158
"inverse-color": "#2c3e50",
"info-color": "#2d7cb5",
"default-color": "#6e7882",
"default-light-color": "#cfd9db",
"purple-color": "#9D8AC7",
"mustard-color": "#d4d171",
"lightred-color": "#e15258",
"body-bg": "#f6f6f6"
};
var config = {
theme: "html",
skins: {
"default": {
"primary-color": "#42a5f5"
};
</script>
<scriptsrc="~/Design/js/vendor/all.js"></script>
<scriptsrc="~/Design/js/app/app.js"></script>
<scriptsrc="~/Scripts/jquery.validate.min.js"></script>
<scriptsrc="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
159
</body>
</html>
QuizResult.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/StudentLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<br><h3style="text-align:center;">Results</h3>
<tablestyle="width:100%;"class="table table-bordered">
<tr>
<th>Quiz ID</th>
<th>Student ID</th>
<th>Instructor ID</th>
<th>Course Code</th>
160
<th>Total Marks</th>
<th>Obtained Marks</th>
</tr>
@foreach(var r in Model)
<tr>
<td>
@r.QuizID
</td>
<td>
@r.StudentID
</td>
<td>
@r.InstructorID
</td>
<td>
@r.CourseID
</td>
<td>
@r.TotalMarks
</td>
<td>
@r.ObtainedMarks
161
</td>
</tr>
</table>
</div>
</div>
Quiz.cshtml
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/StudentLayout.cshtml";
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<!-- When the quiz is finished then its result will be displayed here -->
@if(ViewBag.finish == "yes")
success"onclick="location.href='@Url.Action("StartQuiz", "Student",
Quiz</button><br><br>
<tableclass="table table-bordered">
<tr>
Marks</b></h3></th>
Marks</b></h3></th>
</tr>
<tr>
size:15px"><b>@ViewBag.ObtainedMarks</b></p></td>
size:15px"><b>@ViewBag.TotalMarks</b></p></td>
</tr>
</table>
</div>
<!-- this will show a message for telling that there are no quiz is scheduled against this
course -->
success"onclick="location.href='@Url.Action("StartQuiz", "Student",
163
Quiz</button><br><br>
<table>
<tr>
course !</b></p></td>
</tr>
</table>
</div>
<br><h3style="margin-left:10px; text-align:center;">Quiz</h3>
<formaction="/Student/Quiz"method="post">
<inputtype="text"name="QuizID"value="@ViewBag.QuizID"hidden/>
<tableclass="table table-borderless">
<tr>
164
<tdstyle="width:10px; overflow:hidden;">
</td>
<tdstyle="overflow:hidden;text-overflow:ellipsis;">
<h3><b>Question:</b></h3><br>
<center><pstyle="font-family:Calibri;font-
size:18px;">@ViewBag.Question.Question</p></center><inputtype="text"value="@Vie
wBag.Question.ID"name="QuestionID"hidden/>
</td>
</tr>
<tr>
<tdstyle="text-align:right;">
<inputtype="radio"value="@o.ID"name="SelectedOption"/>
</td>
<td>
<pstyle="font-family:Calibri;font-size:15px;">@o.Option</p>
</td>
</tr>
<tr>
165
<td></td>
<td>
<spanclass="glyphicon glyphicon-forward"></span></button></center>
</td>
</tr>
</table>
</form>
</div>
</div>
DownloadFile.cshtml
@model List<string>
@{
ViewBag.Title = "LearningMadeEasy4u";
Layout = "~/Views/Shared/StudentLayout.cshtml";
}
166
<divclass="st-pusher well"style="overflow:scroll;"id="content">
<tablestyle="width:100%;"class="table table-bordered">
<tr>
<th>File Name</th>
<th>Link</th>
</tr>
<tr>
<td>
@Model[i].ToString()
</td>
<td>
@Model[i].ToString() })
</td>
</tr>
}
167
</table>
</div>
</div>
Controllers
HomeController.cs
using E_Learning_Managment_System.Models;
using E_Learning_Managment_System.Models.ViewModel;
using E_Learning_Managment_System.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace E_Learning_Managment_System.Controllers
return View();
[HttpPost]
if(Session["StudentID"] != null)
return Json(suggestions);
return Json(suggestions);
return Json(null);
}
169
[HttpPost]
// Save messages
db.PostMessage(message);
/// <summary>
/// function used to get old messages from the chat with a specific person
/// </summary>
/// <returns></returns>
[HttpPost]
if (messages != null)
170
messageModel.messageBody = item.MessageBody;
messageModel.dateTime = DateTimeConverter(item.DateTime);
messageModel.name = item.SenderName;
messagesList.Add(messageModel);
return Json(messagesList);
/// <summary>
/// </summary>
/// <returns></returns>
[HttpPost]
if(messages.Count > 0)
var id = 0;
if(model.senderType == "student")
if (model.id == item.SenderStudentId)
if (item.RecieverStudentId != null)
id = item.RecieverStudentId ?? default(int);
name = item.RecieverName;
userType = "student";
id = item.RecieverInstructorId ?? default(int);
name = item.RecieverName;
172
userType = "instructor";
if (item.SenderStudentId != null)
id = item.SenderStudentId ?? default(int);
name = item.SenderName;
userType = "student";
id = item.SenderInstructorId ?? default(int);
name = item.SenderName;
userType = "instructor";
if (model.id == item.SenderInstructorId)
{
173
if (item.RecieverInstructorId != null)
id = item.RecieverInstructorId ?? default(int);
name = item.RecieverName;
userType = "instructor";
id = item.RecieverStudentId ?? default(int);
name = item.RecieverName;
userType = "student";
if (item.SenderInstructorId != null)
id = item.SenderInstructorId ?? default(int);
name = item.SenderName;
userType = "instructor";
{
174
id = item.SenderStudentId ?? default(int);
name = item.SenderName;
userType = "student";
messageModel.messageBody = item.MessageBody;
messageModel.dateTime = DateTimeConverter(item.DateTime);
messageModel.id = id;
messageModel.name = name;
messageModel.recieverType = userType;
messageModel.senderType = model.senderType;
messagesList.Add(messageModel);
return Json(messagesList);
/// function for mapping model for student or for instructor on all messages page
{
175
if(model.senderType == "student")
message.SenderStudentId = model.id;
message.RecieverStudentId = model.id;
message.SenderInstructorId = model.id;
message.RecieverInstructorId = model.id;
return message;
/// <summary>
/// function for mapping model for student or for instructor for messaging with a
specific user
message.DateTime = DateTime.UtcNow;
message.MessageBody = model.messageBody;
message.MessageId = model.messageId;
176
if (model.recieverType == "student")
message.RecieverStudentId = model.id;
message.RecieverInstructorId = model.id;
if (model.senderType == "student")
message.SenderStudentId = Convert.ToInt32(Session["StudentID"]);
message.SenderInstructorId = Convert.ToInt32(Session["InstructorID"]);
message.SenderName = Session["Name"].ToString();
message.RecieverName = model.name;
return message;
}
177
Instructorcontroller.cs
using E_Learning_Managment_System.Models;
using E_Learning_Managment_System.Models.ViewModel;
using E_Learning_Managment_System.ViewModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace E_Learning_Managment_System.Controllers
if (Session["InstructorID"] != null)
instructorId).ToList();
foreach(var c in courses)
courseList.Add(course);
ViewBag.mycourses = courseList;
return View();
else
}
179
if (Session["InstructorID"] != null)
Instructor instructor =
obj.SearchAndReturnInstructor(Convert.ToInt32(Session["InstructorID"]));
ViewBag.password = TempData["Password"];
return View(instructor);
else
if (Session["InstructorID"] != null)
return View();
else
180
[HttpPost]
file.SaveAs(path);
return View();
/// <summary>
/// </summary>
/// <returns></returns>
if (Session["InstructorID"] != null)
else
return View();
[HttpPost]
Session.Remove("StudentID");
if (ModelState.IsValid)
try
== inst.password);
Session["InstructorID"] = ins.ID;
182
Session["IsStudent"] = false;
return RedirectToAction("Index");
catch
return View();
return View();
if (Session["InstructorID"] != null)
items.Add(file.Name);
return View(items);
else
System.Net.Mime.MediaTypeNames.Application.Octet)
FileDownloadName = FileName
};
}
184
if (Session["InstructorID"] != null)
else
return View();
[HttpPost]
if (ModelState.IsValid)
i.FirstName = inst.FirstName;
i.LastName = inst.LastName;
i.Email = inst.Email;
i.password = inst.password;
185
i.Repassword = inst.Repassword;
obj.InstructorSignUp(i);
return View();
/// this function checks that if email already exists or not during signup
[HttpPost]
Session.Abandon();
return RedirectToAction("Login","Instructor");
}
186
if (Session["InstructorID"] != null)
return View();
else
if (Session["InstructorID"] != null)
{
187
courseList.Add(course);
ViewBag.Courses = courseList;
return View();
else
/// <summary>
/// </summary>
/// <returns></returns>
if (Session["InstructorID"] != null)
if (Session["InstructorID"] != null)
188
== instructorId).ToList();
course.CourseID);
courseList.Add(searchedCourse);
ViewBag.Courses = courseList;
return View();
else
if (Session["InstructorID"] != null)
x.InstructorID == instructorID).ToList();
if (instructorCourses != null)
try
quizesList.Add(quiz);
catch { }
190
ViewBag.QuizAlert = TempData["quizalert"];
return View(quizesList);
else
if (Session["InstructorID"] != null)
questionsList.Add(a);
191
return View(questionsList);
else
if (Session["InstructorID"] != null)
x.InstructorID == instructorID).ToList();
if (instructorCourses != null)
192
try
if (q != null)
courseList.Add(c);
catch { }
return View(courseList);
else
}
193
/// this function is used to select the questions to be given in the quiz
if (Session["InstructorID"] != null)
ViewBag.CourseID = CourseID;
ViewBag.CourseTitle = Title;
return View(questions);
else
[HttpPost]
Title)
quiz.CourseID = CourseID;
quiz.Title = Title;
db.Quiz.Add(quiz);
db.SaveChanges();
quizQuestion.QuestionID = qID;
quizQuestion.QuizID = quiz.ID;
db.QuizQuestions.Add(quizQuestion);
db.SaveChanges();
/// using this function, the instructor can add question into the subjects he is assigned
if (Session["InstructorID"] != null)
ViewBag.CourseID = CourseID;
return View();
else
[HttpPost]
question.CourseID = fc["CourseID"];
question.Question = fc["Question"];
196
db.Questions.Add(question);
db.SaveChanges();
option.Option = fc["Option"+i];
option.QuestionID = question.ID;
if(i == check)
option.Status = "correct";
else
option.Status = "wrong";
db.Options.Add(option);
db.SaveChanges();
ViewBag.CourseID = fc["CourseID"];
return View();
197
if (Session["InstructorID"] != null)
return View(questions);
else
if (Session["InstructorID"] != null)
return View();
198
else
[HttpPost]
if (Session["InstructorID"] != null)
if (ins.password == password)
Session["PasswordCheck"] = "yes";
else
Session["PasswordCheck"] = "no";
return View();
return View();
if (Session["InstructorID"] != null)
if (check == "yes")
Session.Remove("PasswordCheck");
return View();
else
}
200
[HttpPost]
if (Session["InstructorID"] != null)
s.password = ins.password;
s.Repassword = ins.RePassword;
db.SaveChanges();
return View();
Studentcontroller.cs
201
using E_Learning_Managment_System.Models;
using E_Learning_Managment_System.Models.ViewModel;
using E_Learning_Managment_System.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace E_Learning_Managment_System.Controllers
if (Session["StudentID"] != null)
try
studentId).ToList();
courseList.Add(course);
try
course.CourseID).ToList();
try
203
x.StudentID == studentId).ToList();
resultList.Add(r);
catch { }
catch { }
catch { }
ViewBag.mycourses = courseList;
ViewBag.results = resultList;
return View();
else
{
204
if (Session["StudentID"] != null)
items.Add(file.Name);
return View(items);
else
System.Net.Mime.MediaTypeNames.Application.Octet)
FileDownloadName = FileName
};
if (Session["StudentID"] != null)
return RedirectToAction("Index","Student");
else
return View();
206
[HttpPost]
Session.Remove("InstructorID");
if (ModelState.IsValid)
try
std.password);
Session["StudentID"] = s.ID;
catch
return View();
}
207
return View();
if (Session["StudentID"] != null)
else
return View();
[HttpPost]
if (ModelState.IsValid)
s.FirstName = std.FirstName;
s.LastName = std.LastName;
s.Email = std.Email;
s.password = std.password;
s.RePassword = std.RePassword;
obj.StudentSignUp(s);
return View();
/// this function checks that if email already exists or not during signup
[HttpPost]
{
209
Session.Abandon();
return RedirectToAction("Login","Student");
if (Session["StudentID"] != null)
Student std =
obj.SearchAndReturnStudent(Convert.ToInt32(Session["StudentID"]));
ViewBag.password = TempData["Password"];
return View(std);
else
{
210
if (Session["StudentID"] != null)
return View();
else
if (Session["StudentID"] != null)
{
211
courseList.Add(course);
ViewBag.Courses = courseList;
return View();
else
/// this function is used to show those courses to students in which they are
registered
if (Session["StudentID"] != null)
if (Session["StudentID"] != null)
212
studentId).ToList();
course.CourseID);
ViewBag.Courses = courseList;
return View();
else
}
213
if (Session["StudentID"] != null)
allCourses = db.Course.ToList();
courses = db.Course.ToList();
studentID);
if (myCourses != null)
if (i.CourseID == j.CourseID)
try
214
courses.Remove(c);
catch { }
return View(courses);
else
[HttpPost]
StudentCourseAssignment();
215
studentCourseAssignment.CourseID = CourseID;
studentCourseAssignment.StudentID = (int)Session["StudentID"];
db.StudentCourseAssignment.Add(studentCourseAssignment);
db.SaveChanges();
return RedirectToAction("ShowMyCourses","Student");
/// this shows all the quizes of those subjects in which the student is enrolled
if (Session["StudentID"] != null)
studentId).ToList();
course.CourseID);
216
searchedCourse.CourseID);
quizList.Add(q);
ViewBag.Quizes = quizList;
return View();
else
/// <returns>question</returns>
{
217
if (Session["StudentID"] != null)
try
marks = 0;
rand_question.Clear();
int number;
do
} while (rand_question.Contains(number));
rand_question.Add(number);
1).Take(1).ToList();
218
optionList.Add(o);
ViewBag.Options = optionList;
ViewBag.QuizID = quizID;
catch
ViewBag.Question = null;
return View();
else
[HttpPost]
x.Status == "correct");
if(SelectedOption.HasValue)
if (correctOption.ID == SelectedOption)
marks = marks + 1;
int number;
220
do
} while (rand_question.Contains(number));
rand_question.Add(number);
a.QuestionID).Skip(pick).Take(1).ToList();
optionList.Add(o);
ViewBag.Options = optionList;
}
221
ViewBag.QuizID = QuizID;
ViewBag.finish = "no";
else
ViewBag.finish = "yes";
ViewBag.TotalMarks = count_total_questions;
ViewBag.ObtainedMarks = marks;
course.CourseID);
result.QuizID = QuizID;
result.StudentID = studentId;
result.InstructorID = instructor.InstructorID;
result.CourseID = course.CourseID;
result.TotalMarks = ViewBag.TotalMarks;
result.ObtainedMarks = ViewBag.ObtainedMarks;
222
db.Result.Add(result);
db.SaveChanges();
return View();
/// this function is used to show quiz result after the quiz is finished
if (Session["StudentID"] != null)
return View(result);
else
return RedirectToAction("Login","Student");
if (Session["StudentID"] != null)
return View();
else
[HttpPost]
if (Session["StudentID"] != null)
if (std.password == password)
Session["PasswordCheck"] = "yes";
else
Session["PasswordCheck"] = "no";
return View();
return View();
/// <summary>
/// </summary>
/// <returns></returns>
if (Session["StudentID"] != null)
if (check == "yes")
Session.Remove("PasswordCheck");
225
return View();
else
[HttpPost]
if (Session["StudentID"] != null)
s.password = std.password;
s.RePassword = std.RePassword;
db.SaveChanges();
return RedirectToAction("Profile","Student");
return View();
Description of Code
Database Updates:
Course Module:
• In Instructor module, the instructor can view all of the courses from DB by clicking
ShowAllCourses() ).
• In Instructor module, the instructor can view the courses that are assigned to him by
clicking on the “My Courses” in left side bar. (Action method in InstructorController
= ShowMyCourses() )
• In “My Courses” the instructor can add new questions with options inside the course
AddQuestions() )
227
• In Student module, the student can also view all of the courses from DB by clicking
ShowAllCourses() )
• In Student module, the student can also view all of the courses he/she has taken by
clicking on the “My Courses” in left side bar. (Action method in StudentController =
ShowMyCourses() )
• The Student can also take courses the he hasn’t taken already, as a drop-down list is
TakeCourse() )
Quiz Module:
• In Instructor module, the instructor can generate the quiz against a course using “Quiz
Generator” page and there can only be one quiz against one course. In this, the
instructor has to select the questions from the question bank of that course. (Action
• In student module, the student can give quiz of every course he/she has taken. The
result will be shown to the student at the end of quiz. (Action method in
Messaging Module:
• Student can send messages to instructors and vice versa. (Action method in
• In Instructor module, the instructor can upload file using UploadFile() action method
in InstructorController.
• In student module, the student can download file using DownloadsFile() and