Students Attendance Management System Mi
Students Attendance Management System Mi
https://www.scribd.com/document/795828759/Students-Attendance-Management-System-Mi
ABSTRACT
presence in class. It is maintained on the daily basis of their attendance. the staffs will be
provided with the separate username & password to make the student’s status.
The staffs handling the particular subjects responsible to make the attendance
for all students. Only if the student present on that particular period, the attendance will
be calculated. The students attendance reports based on weekly and consolidate will be
generated.
LIST OF FIGURES
Content
Introduction
Feasibility study
System design
System implementation
Testing
LIST OF TABLES
Teachers
Admins
Classes
Students
attendance
OBJECTIVE:
Planning.
Scheduling.
The Existing system is a manual entry for the students. Here the attendance will
be carried out in the hand written registers. It will be a tedious job to maintain the record
for the user. The human effort is more here. The retrieval of the information is not as easy
as the records are maintained in the hand written registers.
This application requires correct feed on input into the respective field. Suppose
the wrong inputs are entered, the application resist to work. so the user find it difficult to
use.
PROPOSED SYSTEM:
To overcome the drawbacks of the existing system, the proposed system has
been evolved. This project aims to reduce the paper work and saving time to generate
accurate results from the student’s attendance. The system provides with the best user
interface.
The efficient reports can be generated by using this proposed system.
Feasibility analysis begins once the goals are defined. It starts by generating broad
possible solutions, which are possible to give an indication of what the new system
should look lime. This is where creativity and imagination are used. Analysts must think
up new ways of doing things- generate new ideas. There is no need to go into the detailed
system operation yet. The solution should provide enough information to make
reasonable estimates about project cost and give users an indication of how the new
system will fit into the organization. It is important not to exert considerable effort at this
stage only to find out that the project is not worthwhile or that there is a need
significantly change the original goal.
Feasibility of a new system means ensuring that the new system, which we are
going to implement, is efficient and affordable. There are various types of feasibility to
be determined. They are,
Economically Feasibility:
Technical feasibility:
The technical requirement for the system is economic and it does not use any
other additional Hardware and software. Technical evaluation must also assess whether
the existing systems can be upgraded to use the new technology and whether the
organization has the expertise to use it.
Install all upgrades framework into the .Net package supported widows based
application. this application depends on Microsoft office and intranet service ,database.
Enter their attendance and generate report to excel sheet.
Operational Feasibility:
The system working is quite easy to use and learn due to its simple but attractive
interface. User requires no special training for operating the system. Technical
performance include issues such as determining whether the system can provide the right
information for the Department personnel student details, and whether the system can be
organized so that it always delivers this information at the right place and on time using
intranet services. Acceptance revolves around the current system and its personnel.
SYSTEM SPECIFICATION
HARDWARE REQUIREMENTS (Minimum Requirement)
Minimum RAM:-1GB
Hard Disk:-128 GB
Flask is a lightweight and flexible micro web framework for Python. It's designed getting
started with web development in Python easy and straightforward. One of the reasons Flask is
popular among developers is its simplicity and minimalism, making it an excellent choice for
building small to medium-sized web applications and APIs.
To start working with Flask in Visual Studio Code (VS Code), you'll need to have Python
installed on your system. Python is a prerequisite for Flask since Flask is a Python web
framework. You can download and install Python from the official Python website, making
sure to choose the version that matches your operating system.
Once Python is installed, you can proceed to install Flask. Flask can be easily installed using
pip, Python's package installer. Open your command line or terminal and run the following
command:
This command will download and install Flask along with its dependencies onto your system.
With Flask installed, you're now ready to create your first Flask project.
It's a good practice to work within a virtual environment when developing Python applications
to manage dependencies cleanly and avoid conflicts with other projects. You can create a
virtual environment using the venv module, which is included with Python. Navigate to your
project directory in the terminal and run the following command to create a virtual
environment named 'venv':
Activating the virtual environment isolates your project's dependencies, ensuring that any
packages you install are scoped to your project and won't affect other projects or the system-
wide Python installation.
With the virtual environment activated, you can now initialize your Flask application. Create a
new Python file, such as app.py, in your project directory. This file will serve as the entry point
for your Flask application. In app.py, you'll import the Flask class from the flask package and
create an instance of it to define your application's routes and behavior.
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
In this example, we import the Flask class from the flask package and create a new instance of
it, naming our application app. We then use the @app.route() decorator to define a route for
the root URL ('/'). When a user visits the root URL in their web browser, the index() function is
called, and the string 'Hello, World!' is returned as the response.
Finally, we use the app.run() method to start the Flask development server. Setting
debug=True enables debug mode, which provides helpful debugging information and
automatically restarts the server when changes are made to the code.
To run your Flask application, open a terminal in VS Code, navigate to your project directory,
and execute the app.py file with the Python interpreter:
python app.py
This command starts the Flask development server, which listens for incoming HTTP requests
on port 5000 by default. You can now open a web browser and navigate to
http://localhost:5000 to view your Flask application in action.
In VS Code, you can take advantage of its powerful features for Python development while
working on your Flask project. VS Code provides syntax highlighting, code completion, and
linting out of the box for Python code, making it easier to write clean and error-free code.
Additionally, you can install extensions from the VS Code marketplace to further enhance your
development experience, such as Flask snippets for quickly generating Flask code snippets or
the Python extension for additional features like debugging and unit testing.
As you continue developing your Flask application in VS Code, you can organize your code
into separate modules and packages, define more routes and views, work with templates for
rendering dynamic HTML content, and integrate with databases to build more complex web
applications.
Overall, Flask and Visual Studio Code make for a powerful combination for web development
in Python, offering a simple yet effective environment for building web applications quickly
and efficiently. With Flask's minimalistic approach and VS Code's robust features, you'll be
well-equipped to tackle a wide range of web development projects with ease.
Features of Flask:
Lightweight: Flask is a lightweight and minimalist web framework for Python, making it easy to get started
with web development without unnecessary overhead.
Routing: Flask provides a simple yet powerful routing system, allowing developers to define URL routes
and associate them with view functions that handle requests.
Templating: Flask supports template engines like Jinja2, which allow for dynamic generation of HTML
content based on data passed from the application.
Modular: Flask follows a modular design philosophy, allowing developers to choose and integrate only the
components they need for their application, resulting in a more flexible and streamlined development
process.
RESTful: Flask is well-suited for building RESTful APIs, thanks to its support for HTTP methods and
request/response handling.
Extensions: Flask has a rich ecosystem of extensions that provide additional functionality, such as
authentication, database integration, caching, and more.
Pythonic: Flask embraces Python's philosophy of simplicity and readability, making it easy for Python
developers to understand and work with.
Sql server
Sql has come with purpose of improving manageability and
performance in all areas, right from the process of installation, server configuration, database
upgrades to application tuning, space and storage management and so on. This sql
version has been designed to reduce the cost of manageability and deliver high
performance for all key workloads. Also various new features are provided for high-
availability, including new flashback capabilities, virtualization of computing resources
in Grid environment that reduce the cost of hardware and storage, security enhancement,
Business intelligent solutions etc. Let have a glance at some exiting features of sql
Clustering
Grid computing
Server manageability
Network management
Storage management
Database Configuration: Flask allows you to configure different types of SQL databases such as SQLite,
MySQL, PostgreSQL, etc., by specifying the database connection URI in the Flask application
configuration.
Database Session Management: Flask-SQLAlchemy manages database sessions for you, allowing you to
easily commit changes or roll back transactions within your Flask application.
Database Transactions: SQLAlchemy provides support for database transactions, allowing you to group
multiple database operations into a single transaction to ensure atomicity and consistency.
Security: Flask-SQLAlchemy provides features for securing your database interactions, such as
parameterized queries to prevent SQL injection attacks.
PROJECT DESCRIPTION
PROBLEM DEFINITION:
This system developed will reduce the manual work and avoid
redundant data. By maintaining the attendance manually, then efficient reports cannot
be generated. The system can generate efficient weekly,consolidate report based on
the attendance. As the attendances are maintained in registers it has been a tough task
for admin and staff to maintain for long time. Instead the software can keep long and
retrieve the information when needed.
PROJECT OVERVIEW
Attendance Management System basically has two main modules for proper
functioning
Admin module is has rights for creating any new entry of faculty and
student details.
User has a rights of making daily attendance, generating report.
Attendance report can be taken by given details of student details,
date, class.
MODULE DESCRIPTION
The system should be designed in such a way that only authorized people should
be allowed to access some particular modules. The records should be modified by only
administrators and no one else. The user should always be in control of the application
and not the vice versa.
The user interface should be consistent so that the user can handle the application
with ease and speed. The application should be visually, conceptually clear.
5.3.1 ADMINISTRATOR MODULE:
Student Details:
Attendance details:
It assists the staff to mark attendance to the students for their subject. This
will authenticate the staff before making the entry.
Report details:
2. consolidate report get all student attendance details from starting date
to ending date status help for the eligibility criteria of the student to
attend the examination
SYSTEM IMPLEMENTATION
PERSON
ENTRY
LOGIN
INVALID
UID / PWD
USER
AUTHENDICAT CHECK
DATABASE
ION
ADMIN
STAFF
ACCESS
ACCESS
DATABASE
DFD level 1:
DFD level 2:
Admin:
ALLOCATION
Get details
STUDENTS
ATTANDANCE
contribution VIEW
Stored data from
ADMIN ACCESS STAFFS Get details
database
TIME TABLE
UPDATE
REPORT
staffs:
UPDATE
ATTENDANCE
Attendance
USER entry
Attendance table
REPORT
SYSTEM DESIGN:
Entity Relationship Diagram:
year DoB
IIIIV dept Address
II V
Name
VI
I mno
VII
Rolllno
TTaabblleennaammee day SSttaattus
Time table Student details
user
*
*
1
date
1 hour
1
Attandance* Attendance details
* subjject
*
Authendication
Rolll no
*
*
Staffs details
subjject
password
Subjject
Staff name
code
Staffs Table:
To create username and password for the staff details.
INPUT DESIGN
Input design is part of overall system design that requires special attention
designing input data is to make the data entered easy and free from errors. The input
forms are designed using the controls available in .NET framework. Validation is made
for each and every data that is entered. Help information is provided for the users during
when the customer feels difficult.
Input design is the process of converting the user originated inputs to a computer
based format. A system user interacting through a workstation must be able to tell the
system whether to accept the input to produce reports. The collection of input data is
considered to be most expensive part of the system design. Since the input has to be
planned in such a manner so as to get relevant information, extreme care is taken to
obtain pertinent information
This project first will entered to the input of allocation forms it will be created on
student details form and subject entry form, time table form .it will helps to calculate
subject wise attendance system. next one if u want any verification on your data’s also
available in details show forms. Attendance to entered single subject wise or all subject
wise attendance system available in this project.
OUTPUT DESIGN
Output design this application “Student Attendance management system”
generally refers to the results and information that are generated by the system for many
end-users; output is the main reason for developing the system and the basis on which
they evaluate the usefulness of the application.
As the outputs are the most important sources of information to the users, better
design should improve the system’s relationships with us and also will help in decision
making. Form design elaborates the way output is presented and the layout available for
capturing information.
One of the most important factors of the system is the output it produces. This
system refers to the results and information generated. Basically the output from a
computer system is used to communicate the result of processing to the user.
Attendance management system to show the report subject wise attendance
maintaining by staffs. Taken as a whole report obtain on a administrator privileges only.
this forms will show weekly report and consolidate report generated date, batch, and
class wise to our end user. we want to change our report to convert Excel format .if you
want change any modification.
SYSTEM TESTING
Introduction
Once source code has been generated, software must be tested to uncover (and
correct) as many errors as possible before delivery to customer. Our goal is to design a
series of test cases that have a high likelihood of finding errors. To uncover the errors
software techniques are used. These techniques provide systematic guidance for
designing test that
(1) Exercise the internal logic of software components, and
(2) Exercise the input and output domains of the program to uncover
errors In program function, behavior and performance.
Steps: Software is tested from two different perspectives:
(1) Internal program logic is exercised using ―White box‖ test case design
Techniques.
(2) Software requirements are exercised using ―block box‖ test case
Design techniques.
In both cases, the intent is to find the maximum number of errors with the
Minimum amount of effort and time.
Testing Methodologies:
A strategy for software testing must accommodate low-level tests that are
necessary to verify that a small source code segment has been correctly implemented as
well as high-level tests that validate major system functions against customer
requirements. A strategy must provide guidance for the practitioner and a set of
milestones for the manager. Because the steps of the test strategy occur at a time when
deadline pressure begins to rise, progress must be measurable and problems must surface
as early as possible. Following testing techniques are well known and the same strategy is
adopted during this project testing.
Unit testing:
Unit testing focuses verification effort on the smallest unit of software design-
the software component or module. The unit test is white-box oriented. The unit testing
implemented in every module of student attendance management System. by giving
correct manual input to the system ,the datas are stored in database and retrieved. If you
want required module to access input or get the output from the End user. any error will
accrued the time will provide handler to show what type of error will accrued .
System testing:
System testing is actually a series of different tests whose primary purpose is to
fully exercise the computer-based system. Below we have described the two types of
testing which have been taken for this project. it is to check all modules worked on input
basis .if you want change any values or inputs will change all information. so specified
input is must.
Performance Testing
Performance testing is designed to test the run-time performance of software
within the context of an integrated system. Performance testing occurs throughout all
steps in the testing process. Even at the unit level, the performance of an individual
module may be assessed as white-box tests are conducted.
This project reduce attendance table, codes. it will generate report fast.no have
extra time or waiting of results .entered correct data will show result few millisecond. just
used only low memory of our system. Automatically do not getting access at another
software. Get user permission and access to other applications.
Test cases
Test case is an object for execution for other modules in the architecture does not
represent any interaction by itself. A test case is a set of sequential steps to execute a test
operating on a set of predefined inputs to produce certain expected outputs. There are two
types of test cases:-manual and automated. A manual test case is executed manually
while an automated test case is executed using automation.
In system testing, test data should cover the possible values of each parameter
based on the requirements. Since testing every value is impractical, a few values should
be chosen from each equivalence class. An equivalence class is a set of values that should
all be treated the same.
Ideally, test cases that check error conditions are written separately from the
functional test cases and should have steps to verify the error messages and logs.
Realistically, if functional test cases are not yet written, it is ok for testers to check for
error conditions when performing normal functional test cases. It should be clear which
test data, if any is expected to trigger errors.
TEST CASE:
APP.PY
app = Flask(__name__)
app.secret_key = '12345' #Add your secret key here
db = mysql.connector.connect(
host='localhost',
user='root', #add your username here
password='',#add your password here
database='students' # add your db name here
)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/index')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
role = request.form['role']
cur = db.cursor()
if role == 'teacher':
cur.execute("SELECT * FROM teachers WHERE username = %s AND password = %s",
(username, password))
user = cur.fetchone()
if user:
session['loggedin'] = True
session['username'] = user[0]
session['role'] = 'teacher'
return redirect('/teacher/dashboard')
else:
error = 'Invalid login credentials.'
return render_template('login.html', error=error)
elif role == 'admin':
cur.execute("SELECT * FROM admins WHERE username = %s AND password = %s",
(username, password))
user = cur.fetchone()
if user:
session['loggedin'] = True
session['username'] = user[0]
session['role'] = 'admin'
return redirect('/admin/admin_dashboard')
else:
error='Invalid login credentials'
return render_template('login.html',error=error)
cur.close()
return render_template('login.html')
@app.route('/get_student',methods=['POST','GET'])
def get_student():
if request.method=='POST':
student_id=request.form['student_id']
cur = db.cursor()
cur.execute("SELECT * FROM students WHERE student_id = %s", (student_id,))
student = cur.fetchone()
if student:
message="Fetched student details"
return render_template('update_student.html', student=student, msg=message)
else:
error = "Invalid Student ID"
return render_template('update_student.html', err=error)
return render_template('update_student.html')
@app.route('/teacher/dashboard')
def teacher_dashboard():
if 'loggedin' in session and session['role'] == 'teacher':
# Fetch username from the session
username = session.get('username')
@app.route('/teacher/teacher_profile')
def teacher_profile():
cur = db.cursor()
cur.execute("SELECT teacher_name, email, phone FROM teachers WHERE username = %s",
(session['username'],))
profile_data = cur.fetchone()
cur.close()
return render_template('teacher_profile.html', profile_data=profile_data)
@app.route('/teacher/update_profile', methods=['POST'])
def update_profile():
name = request.form.get('name')
email = request.form.get('email')
phone = request.form.get('phone')
cur = db.cursor()
cur.execute("UPDATE teachers SET teacher_name = %s, email = %s, phone = %s WHERE username =
%s",(name, email, phone, session['username']))
db.commit()
cur.close()
return redirect('/teacher/teacher_profile')
@app.route("/teacher/mark_attendance/<class_id>", methods=['GET'])
def display_attendance_form(class_id):
if 'loggedin' in session and session['role'] == 'teacher':
cur = db.cursor()
cur.execute("SELECT * FROM classes WHERE class_id = %s", (class_id,))
classes = cur.fetchone()
cur.execute("SELECT * FROM students WHERE class_sec = %s", (classes[3],))
students = cur.fetchall()
cur.close()
return render_template('mark_attendance.html', students=students, class_date=classes[4],
class_name=classes[1], class_sec=classes[3], class_id=classes[0])
else:
return redirect('/teacher/mark_attendance/<class_id>')
@app.route("/teacher/mark_attendance/<class_id>", methods=['POST'])
def update_attendance(class_id):
if 'loggedin' in session and session['role'] == 'teacher':
attendance_data = request.form.getlist('attendance')
cur = db.cursor()
cur.execute("SELECT class_name FROM classes WHERE class_id=%s",(class_id,))
class_name=cur.fetchone()
cur.execute("DELETE FROM attendance WHERE class_id = %s", (class_id,))
db.commit()
cur.execute("SELECT class_date FROM classes WHERE class_id = %s", (class_id,))
class_date = cur.fetchone()
cur.execute("SELECT class_sec FROM classes WHERE class_id = %s", (class_id,))
class_sec = cur.fetchone()
cur.execute("SELECT student_id FROM students WHERE class_sec=%s", (class_sec[0],))
students = [student[0] for student in cur.fetchall()]
student_ids = []
for student_id in students:
if str(student_id) in attendance_data:
student_ids.append(student_id)
present_students = []
absent_students = []
for student_id in students:
if student_id in student_ids:
cur.execute("INSERT INTO attendance (class_id, student_id, class_date, status) VALUES (%s,
%s, %s, %s)",
(class_id, student_id, class_date[0], 'present'))
else:
cur.execute("INSERT INTO attendance (class_id, student_id, class_date, status) VALUES (%s,
%s, %s, %s)",
(class_id, student_id, class_date[0], 'absent'))
db.commit()
cur.execute("SELECT student_id FROM attendance WHERE status='present' and class_id=%s",
(class_id,))
present_std=cur.fetchall()
for i in present_std:
cur.execute("SELECT student_name,phone FROM students WHERE student_id=%s",(i[0],))
student_det=cur.fetchone()
present_students.append((i[0],student_det[0],student_det[1]))
cur.execute("SELECT student_id FROM attendance WHERE status='absent' and class_id=%s",
(class_id,))
absent_std=cur.fetchall()
for i in absent_std:
cur.execute("SELECT student_name,phone FROM students WHERE student_id=%s",(i[0],))
student_det=cur.fetchone()
absent_students.append((i[0],student_det[0],student_det[1]))
cur.close()
return render_template('get_attendance.html',
class_name=class_name,class_sec=class_sec,class_date=class_date,present_students=present_students,
absent_students=absent_students)
else:
return redirect('/teacher/mark_attendance/<class_id>')
@app.route('/admin/admin_dashboard')
def admin_dashboard():
if 'loggedin' in session and session['role'] == 'admin':
return render_template('admin_dashboard.html')
else:
return redirect('/')
cur = db.cursor()
cur.execute("SELECT student_id, student_name FROM students WHERE class_sec = %s",
(class_sec,))
students = cur.fetchall()
cur.close()
@app.route('/admin/admin_profile')
def admin_profile():
cur = db.cursor()
cur.execute("SELECT admin_name, email, phone FROM admins WHERE username = %s",
(session['username'],))
profile_data = cur.fetchone()
cur.close()
return render_template('admin_profile.html', profile_data=profile_data)
@app.route('/admin/update_admin_profile', methods=['POST'])
def update_admin_profile():
name = request.form.get('name')
email = request.form.get('email')
phone = request.form.get('phone')
cur = db.cursor()
cur.execute("UPDATE admins SET admin_name = %s, email = %s, phone = %s WHERE username =
%s",(name, email, phone, session['username']))
db.commit()
cur.close()
return redirect('/admin/admin_profile')
@app.route('/logout')
def logout():
session.pop('loggedin', None)
session.pop('username', None)
session.pop('role', None)
return redirect('/')
if __name__ == '__main__':
app.run(debug=True)
TEMPLATE / ADD_CLASS.HTML
<!DOCTYPE html>
<html>
<head>
<title>Add Class</title>
<style>
body {
font-family: Arial, sans-serif;
background: url("{{ url_for('static', filename='bg.png') }}") no-repeat center center fixed;
background-size: cover;
}
h2 {
color: #333;
text-align: center;
margin-top: -35px;
margin-bottom:10%;
}
form {
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
max-width: 400px;
margin: 0 auto;
}
label {
display: block;
margin-bottom: 10px;
color: #333;
font-weight: bold;
}
input[type="text"],
select,
input[type="date"] {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
margin-bottom: 10px;
font-size: 16px;
}
input[type="submit"] {
padding: 10px 16px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
width: 100%;
}
input[type="submit"]:hover {
background-color: #0056b3;
}
.nav {
margin-top: -8px;
padding: 10px;
background-color: #0099CC;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nav a {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.nav a:hover {
background-color: black;
color: white;
}
</style>
</head>
<body>
<div class="nav">
<a class="dash-link" href="/teacher/dashboard">Dashboard</a>
<a class="profile-link" href="/teacher/teacher_profile">Profile</a>
<a class="logout-link" href="/logout">Logout</a>
</div>
<h2><strong>Add Class</strong></h2>
<form method="POST" action="{{ url_for('add_class') }}">
<label for="class_section">Class Section</label>
<select id="class_section" name="class_section" required>
<option value="" disabled selected>Select Class Section</option>
{% for section in class_sections %}
<option value="{{ section[0] }}">{{ section[0] }}</option>
{% endfor %}
</select>
<label for="class_name">Subject Name</label>
<input type="text" id="class_name" name="class_name" placeholder="Subject" required>
<label for="attendance_date">Attendance Date (yyyy-mm-dd)</label>
<input type="date" id="attendance_date" name="attendance_date" required pattern="\d{4}-\d{2}-\d{2}"
title="Please enter a date in the format yyyy-mm-dd">
<br>
<input type="submit" value="Add">
</form>
</body>
</html>
ADMIN_DASHBOARD .HTML
<!DOCTYPE html>
<html>
<head>
<title>Admin Dashboard</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous">
<style>
body {
font-family: Arial, sans-serif;
background: url("{{ url_for('static', filename='bg.png') }}") no-repeat center center fixed;
background-size: cover;
}
.dashboard-box {
background-color: rgba(0, 0, 0, 0.6);
margin-top: 20%;
margin-bottom: 5em;
padding: 1em;
color: #fff;
border-radius: 10px;
box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
margin-left:-200px;
margin-right:-200px;
}
.dashboard-title {
text-align: center;
margin-bottom: 2em;
}
select {
display: block;
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
margin-bottom: 20px;
}
.nav {
margin: 0;
padding: 10px;
background-color: #0099CC;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nav a {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.nav a:hover {
background-color: black;
color: white;
}
.profile-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left:20px;
}
.profile-link:hover {
background-color: black;
}
.logout-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left:20px;
}
.logout-link:hover {
background-color: black;
}
.h1, h1 {
font-size: 1.8rem;
margin-left: 42%;
margin-top: -45px;
margin-bottom: 20px;
}
.service-box {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 40px;
padding: 20px;
background-color:#bfd3f3;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
transition: transform 0.3s;
}
.service-box:hover {
transform: translateY(-5px);
}
.service-box h3 {
color: #333333;
margin-bottom: 10px;
font-size: 24px;
}
.service-box p {
color: #666666;
font-size: 16px;
}
.btn-primary {
background-color: #89aae0;
border: none;
color: #013b79;
padding: 10px 20px;
font-size: 18px;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
cursor: pointer;
margin-bottom:5px;
}
.btn-primary:hover {
background-color:#4659d5;
}
</style>
</head>
<body>
<div class="nav">
<a class="profile-link" href="/admin/admin_profile">Profile</a>
<a class="logout-link" href="/logout">Logout</a>
</div>
<h1><strong>Admin Dashboard</strong></h1>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="dashboard-box">
<h2 class="dashboard-title">Services</h2>
<div class="row">
<div class="col-md-4">
<div class="service-box">
<h3>Teacher Registration</h3>
<p>Register teachers here!!</p>
<a href="{{ url_for('register') }}" class="btn btn-primary">Register here</a>
</div>
</div>
<div class="col-md-4">
<div class="service-box">
<h3>Student Registration</h3>
<p>Register and update student details here!!</p>
<a href="{{ url_for('student_register') }}" class="btn btn-primary">Register here</a>
<a href="{{ url_for('update_student') }}" class="btn btn-primary">Student details</a>
<a href="{{ url_for('student_register') }}" class="btn btn-primary">Attendance</a>
</div>
</div>
<div class="col-md-4">
<div class="service-box">
<h3>Attendance Report</h3>
<p>Get daily attendance reports here!!</p>
<a href="{{ url_for('get_attendance_report') }}" class="btn btn-primary">Get reports here</a>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
ADMIN-PROFILE .HTML
<!DOCTYPE html>
<html>
<head>
<title>Profile</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #b3d4e1;
}
.profile-box {
background-color: rgb(0,153,204);
margin-top: 45px;
margin-bottom: 5em;
padding: 1em;
color: #fff;
border-radius: 10px;
box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
}
.profile-title {
text-align: center;
margin-bottom: 2em;
}
h2 {
color: #333;
}
form {
background-color: #83a9da;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
label {
display: block;
margin-bottom: 5px;
color: #333;
}
input[type="text"],
input[type="email"] {
width: 200px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
margin-bottom: 10px;
}
input[type="submit"] {
padding: 8px 16px;
background-color: #202124;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #0056b3;
}
.nav {
margin: 0;
padding: 10px;
background-color:#b2d2df;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nav a {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.nav a:hover {
background-color: black;
color: white;
}
.dash-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left:40px;
}
.dash-link:hover {
background-color: black;
color:white;
}
.logout-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left:20px;
}
.logout-link:hover {
background-color: black;
color:white;
}
</style>
</head>
<body>
<div class="nav">
<a class="dash-link" href="/admin/admin_dashboard">Dashboard</a>
<a class="logout-link" href="/logout">Logout</a>
</div>
<div class="profile-box">
<h2 class="profile-title">Profile</h2>
<p><strong>Name:</strong> {{ profile_data[0] }}</p>
<p><strong>Email:</strong> {{ profile_data[1] }}</p>
<p><strong>Phone:</strong> {{ profile_data[2] }}</p>
</div>
<h3>Update Profile</h3>
<form method="POST" action="/admin/update_admin_profile">
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="{{ profile_data[0] }}" required>
<br>
<label for="email">Email:</label>
<input type="email" id="email" name="email" value="{{ profile_data[1] }}" required>
<br>
<label for="phone">Phone:</label>
<input type="text" id="phone" name="phone" value="{{ profile_data[2] }}" required>
<br>
<input type="submit" value="Update">
</form>
</body>
</html>
ATTENDANCE_REPORT.HTML
<!DOCTYPE html>
<html>
<head>
<title>Attendance Report</title>
<style>
body {
font-family: Arial, sans-serif;
background: url("{{ url_for('static', filename='bg.png') }}") no-repeat center center fixed;
background-size: cover;
}
h1 {
color: #333;
text-align: center;
margin-bottom: 80px;
margin-top: -45px;
}
form {
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 2px 2px 15px 0px rgba(0, 0, 0, 0.7);
max-width: 600px;
margin: 0 auto;
margin-bottom: 30px;
}
label {
display: block;
margin-bottom: 10px;
font-weight: bold;
}
select,
input[type="date"] {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
margin-bottom: 10px;
font-size: 16px;
}
input[type="submit"] {
padding: 10px 16px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
width: 100%;
}
.details {
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 2px 2px 15px 0px rgba(0, 0, 0, 0.7);
max-width: 500px;
margin-top: -10px;
margin-left: 470px;
margin-bottom: 30px;
}
.details p {
margin-bottom: 10px;
}
table {
width: 100%;
border-collapse: collapse;
}
th, td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
.attendance-status {
font-weight: bold;
text-transform: uppercase;
}
.nav {
margin-top: -10px;
padding: 10px;
background-color:#b2d2df;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nav a {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.nav a:hover {
background-color: black;
color: white;
}
.dash-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left:40px;
}
.dash-link:hover {
background-color: black;
color:white;
}
.logout-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left:20px;
}
.logout-link:hover {
background-color: black;
color:white;
}
.table-details {
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 2px 2px 15px 0px rgba(0, 0, 0, 0.7);
max-width: 800px;
margin: 0 auto;
margin-bottom: 30px;
overflow-x: auto;
}
.table-details table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
.table-details th,
.table-details td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
word-wrap: break-word;
}
.table-details thead th {
background-color: #007bff;
color: #fff;
}
.table-details tbody td {
background-color: #fff;
}
</tbody>
</table>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Attendance Report</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #b3d4e1;
padding: 20px;
}
h2 {
color: #333;
text-align: center;
margin-bottom: 10%;
margin-top: -40px;
}
.container {
background-color: #fff;
border-radius: 5px;
box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 30px;
}
th, td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
.nav {
margin: -30px;
padding: 10px;
background-color: #0099CC;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nav a {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.nav a:hover {
background-color: black;
color: white;
}
.details {
margin-top: 30px;
}
.details h3 {
margin-top: 0;
}
.details ul {
list-style-type: none;
padding: 0;
}
.details li {
margin-bottom: 5px;
}
</style>
</head>
<body>
<div class="nav">
<a class="dash-link" href="/teacher/dashboard">Dashboard</a>
<a class="profile-link" href="/teacher/teacher_profile">Profile</a>
<a class="logout-link" href="/logout">Logout</a>
</div>
<h2>Attendance Report</h2>
<div class="container">
<div class="details">
<h3>Class Details:</h3>
<ul>
<li><strong>Class Name:</strong> {{ class_name[0] }}</li>
<li><strong>Class Section:</strong> {{ class_sec[0] }}</li>
<li><strong>Class Date:</strong> {{ class_date[0] }}</li>
</ul>
</div>
<!-- Details of the students in attendance -->
<div class="details">
<h3>Details of the students in attendance</h3>
<table>
<thead>
<tr>
<th>Student ID</th>
<th>Student Name</th>
<th>Phone Number</th>
</tr>
</thead>
<tbody>
{% for student in present_students %}
<tr>
<td>{{ student[0] }}</td>
<td>{{ student[1] }}</td>
<td>{{ student[2] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- Details of the absent students -->
<div class="details">
<h3>Details of the absent students</h3>
<table>
<thead>
<tr>
<th>Student ID</th>
<th>Student Name</th>
<th>Phone Number</th>
</tr>
</thead>
<tbody>
{% for student in absent_students %}
<tr>
<td>{{ student[0] }}</td>
<td>{{ student[1] }}</td>
<td>{{ student[2] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</body>
INDEX.HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Attendance Monitoring System</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous">
<style>
body {
background: url("{{ url_for('static', filename='bg.png') }}") no-repeat center center fixed;
background-size: cover;
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
}
.container {
background: rgba(0, 0, 0, 0.6);
margin: 3em auto 5em;
padding: 1em;
color: #fff;
border-radius: 10px;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.7);
}
.section-title {
margin: 0;
padding: 1em 0;
text-align: center;
}
.login-btn {
background-color: #007bff;
color: #fff;
border: none;
padding: 10px 20px;
border-radius: 5px;
font-size: 18px;
cursor: pointer;
transition: background-color 0.3s;
text-decoration: none;
display: inline-block;
}
.login-btn:hover {
background-color: #0069d9;
}
.features-section {
margin: 3em auto 5em;
padding: 2em;
border-radius: 10px;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.7);
text-align: center;
color: #fff;
}
.features-title {
margin: 0 0 2em;
color: #fff;
}
.features-list {
list-style-type: none;
padding: 0;
margin: 1em 0;
}
.features-list li {
margin-bottom: 1em;
display: flex;
align-items: center;
}
.features-list li:before {
content: "\2022";
color: #007bff;
font-weight: bold;
display: inline-block;
width: 1em;
margin-right: 0.5em;
}
</style>
</head>
<body>
<div class="container">
<h1 class="section-title">Attendance Monitoring System</h1>
<div class="row justify-content-center">
<div class="col-md-4">
<div class="text-center">
<a href="{{ url_for('login') }}" class="login-btn">Login</a>
</div>
</div>
</div>
<div class="features-section">
<h2 class="features-title">Features of the Attendance Monitoring System:</h2>
<ul class="features-list">
<li>Efficient and Automated Attendance Tracking</li>
<li>Real-time Attendance Reporting</li>
<li>Easy Integration with Existing Systems</li>
<li>User-friendly Interface</li>
<li>Secure Data Management</li>
</ul>
</div>
</div>
</body>
</html>
LOGIN.HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous">
<style>
body {
background: url("{{ url_for('static', filename='bg.png') }}") no-repeat center center fixed;
background-size: cover;
}
.col-lg-4{
background: rgba(0,0,0,0.6);
margin-top:125px ;
padding-top:1em;
padding-bottom:3em;
color:#fff;
border-radius:10px;
-webkit-box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
-moz-box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
margin-left:auto; margin-right: auto;
}
.col-lg-12{
background: rgba(0,0,0,0.6);
max-height: 20px ;
padding-top:1em;
padding-bottom:3em;color:#fff;
border-radius:10px;
-webkit-box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
-moz-box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
margin-left:auto;
margin-right: auto;
}
.radio-group {
margin-top: 10px;
padding: 10px;
}
.radio-group label {
margin-right: 10px;
}
.btn {
margin-top:20px;
margin-bottom:-40px;
display: inline-block;
font-weight: 400;
margin-left: 40%;
text-align: center;
white-space: nowrap;
vertical-align: middle;
}
</style>
</head>
<body>
<div class="col-lg-12">
<a href="{{ url_for('index') }}">
<h5 class="text-left"> Home</h5>
</a>
</div>
<div class="col-lg-4">
<form method="POST">
<fieldset class="form-group">
<legend class="border-bottom mb-4"> Log In </legend>
</fieldset>
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Enter your
username" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="Enter your
password" required>
</div>
<div class="radio-group">
<label>
<input type="radio" name="role" value="teacher" required>
Teacher
</label>
<label>
<input type="radio" name="role" value="admin" required>
Admin
</label>
</div>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Login!</button>
</div>
</form>
{% if error %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endif %}
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-
KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-
ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-
JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Mark Attendance</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #b3d4e1;
}
h2 {
color: #333;
text-align: center;
}
form {
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 2px 2px 15px 0px rgba(0, 3, 0, 0.7);
max-width: 600px;
margin: 0 auto;
}
.student-row {
margin-bottom: 10px;
}
.student-name {
display: inline-block;
width: 200px;
color: #333;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 30px;
}
th, td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
.attendance-checkbox {
margin-right: 10px;
}
.submit-button {
padding: 8px 16px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
.submit-button:hover {
background-color: #0056b3;
}
.nav {
margin-top: -67px;
margin-bottom: 80px;
padding: 10px;
background-color: #0099CC;
display: flex;
justify-content: flex-end;
align-items: center;
}
.nav a {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.nav a:hover {
background-color: black;
color: white;
}
.profile-link,
.dash-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.profile-link:hover,
.dash-link:hover {
background-color: black;
color: white;
}
.logout-link {
display: inline-block;
padding: 8px 16px;
background-color: #333;
color: #fff;
text-decoration: none;
border-radius: 5px;
margin-left: 20px;
}
.logout-link:hover {
background-color: black;
color: white;
}
</style>
</head>
<body>
<h2>Mark Attendance</h2>
<div class="nav">
<a class="dash-link" href="/teacher/dashboard">Dashboard</a>
<a class="profile-link" href="/teacher/teacher_profile">Profile</a>
<a class="logout-link" href="/logout">Logout</a>
</div>
<form method="POST" action="{{ url_for('update_attendance', class_id=class_id) }}">
<label for="class_date">Class Date:</label>
<input type="text" id="class_date" name="class_date" value="{{ class_date }}" disabled><br>
<label for="class_name">Class Name:</label>
<input type="text" id="class_name" name="class_name" value="{{ class_name }}" disabled><br>
<label for="class_sec">Class Section:</label>
<input type="text" id="class_sec" name="class_sec" value="{{ class_sec }}" disabled><br>
<table>
<thead>
<tr>
<th>Student ID</th>
<th>Student Name</th>
<th>Attendance</th>
</tr>
</thead>
<tbody>
</form>
<script>
document.getElementById('select-all-checkbox').addEventListener('change', function () {
var checkboxes = document.querySelectorAll('input[name="attendance"]');
for (var checkbox of checkboxes) {
checkbox.checked = this.checked;
}
});
</script>
</body>
</html>
CONCLUSION AND FUTURE ENHANCEMENT
Conclusion
To conclude, Project Data Grid works like a component which can access all the
databases and picks up different functions. It overcomes the many limitations
incorporated in the attendance.
Easy implementation Environment
Generate report Flexibly
Scope for future development
The project has a very vast scope in future. The project can be implemented on
intranet in future. Project can be updated in near future as and when requirement for the
same arises, as it is very flexible in terms of expansion. With the proposed software of
database Space Manager ready and fully functional the client is now able to manage and
hence run the entire work in a much better, accurate and error free manner. The following
are the future scope for the project.
REFERENCE
Open-School: Open-School is an open-source student information system (SIS) that includes modules for attendance
management among other features. It allows schools to manage student attendance records efficiently. Open-School
Fedena: Fedena is a comprehensive school management software that includes features for attendance tracking,
timetable management, and more. It is widely used by educational institutions worldwide. Fedena
TimeTrex: TimeTrex is a workforce management software that includes features for employee attendance tracking.
While primarily designed for businesses, it can be adapted for educational institutions to manage student attendance.
TimeTrex
Moodle: Moodle is a popular open-source learning management system (LMS) that includes plugins for attendance
tracking. Educational institutions can use Moodle to manage course materials, assessments, and attendance. Moodle
Biometric Attendance Systems: Biometric attendance systems use biometric authentication methods such as
fingerprint scanning or facial recognition to track student attendance accurately. Various vendors offer biometric
attendance systems tailored for educational institutions.
Mobile Apps: Many educational institutions develop custom mobile apps for students to mark their attendance
conveniently using their smartphones. These apps often integrate with the school's student information system.
Research Papers and Case Studies: Academic databases such as Google Scholar and IEEE Xplore contain research
papers and case studies on student attendance management systems. These resources can provide insights into best
practices and innovative approaches in this area