0% found this document useful (0 votes)
117 views67 pages

Students Attendance Management System Mi

Uploaded by

psnpchodmarine
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
117 views67 pages

Students Attendance Management System Mi

Uploaded by

psnpchodmarine
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 67

STUDENT ATTENDANCE MANAGEMENT SYSTEM

1. Issac dhanish (22504278), 2. Indira A (22504277), 3. Kaviya (22504281), 4. Maheswari C (22504285),


5. Suresh M (22504302)

https://www.scribd.com/document/795828759/Students-Attendance-Management-System-Mi

ABSTRACT

Student attendance management system deals with the maintenance of the

student’s attendance details. It is generates the attendance of the student on basis of

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:

“Attendance Management System” is software developed for


maintaining the attendance of the student on the daily basis in the collage. Here the
staffs, who are handling the subjects, will be responsible to mark the attendance of the
students. Each staff will be given with a separate username and password based on
the subject they handle. An accurate report based on the student attendance is
generated here. This system will also help in evaluating attendance eligibility criteria
of a student. Report of the student’s attendance on weekly and monthly basis is
generated.
INTRODUCTION
Analysis can be defined as breaking up of any whole so as to find out their nature,
function etc. It defines design as to make preliminary sketches of; to sketch a pattern or
outline for plan. To plan and carry out especially by artistic arrangement or in a skillful
wall. System analysis and design can be characterized as a set of techniques and
processes, a community of interests, a culture and an intellectual orientation.
The various tasks in the system analysis include the following.
 Understanding application.

 Planning.

 Scheduling.

 Developing candidate solution.

 Performing trade studies.

 Performing cost benefit analysis.

 Recommending alternative solutions.

 Selling of the system.

 Supervising, installing and maintaining the system.


This system manages to the analysis of the report creation and develops manual
entry of the student attendance. First design the students entry form , staff allocation and
time table allocation forms. This project will helps the attendance system for the
department calculate percentage and reports for eligibility criteria of examination .The
application attendance entry system will provide flexible report for all students.
EXISTING SYSTEM

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.

Advantages of Proposed System


 It is trouble-free to use.
 It is a relatively fast approach to enter attendance
 Is highly reliable, approximate result from user
 Best user Interface
 Efficient reports
FEASIBILITY STUDY:

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:

Development of this application is highly economically feasible. The only thing


to be done is making an environment with an effective supervision.
It is cost effective in the sense that has eliminated the paper work completely. The
system is also time effective because the calculations are automated which are made at
the end of the month or as per the user requirement.

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

SOFTWARE REQUIREMENTS (minimum Requirement)


 Operating system :Windows 10
 Front-End Language : html , css ,java script
 Frame work : bootstrap
 Back-End : python
 Database : sql server
 Back-End Connectivity: flask
SOFTWARE DESCRIPTION

PACKAGE - VISUAL STUDIO 2010


Microsoft Visual Studio is an integrated development environment (IDE)
from Microsoft.It is used to develop console and graphical user
interface applications along with Windows Forms or WPF applications, web sites, web
applications, and web services in both native codetogether with managed code for all
platforms supported by Microsoft Windows, flask Framework, and python language .
Visual Studio code supports different programming languages by means of
language services, which allow the code editor and debugger to support (to varying
degrees) nearly any programming language, provided a language-specific service exists.
Visual Studio also includes a web-site editor and designer that allows web pages
to be authored by dragging and dropping widgets. It is used for developing FLASK
application efficiently to get input and output design easiest one. It will be run at
windows application .

DEVELOPMENT TOOLS AND TECHNOLOGIES

Vs code The latest version of vs code which runs on flask framework 4.


Iterators, Call Hierarchy, Caller Information and Global Keyword in Namespace
Statements are some of the major features introduced in this version of VB. Visual
studio code an object-oriented computer programming language that can be viewed as an
evolution of the classic Vs code implemented on the flask Framework. Microsoft
currently supplies two main editions of IDEs for developing in Visual Basic: Microsoft
Visual Studio 2012, which is commercial software and Visual Basic Express Edition
2012,which is free of charge. The command-line compiler, VBC.EXE, is installed as part
of the freeware .NET Framework SDK. Mono also includes a command-line compiler.
FLASK

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:

pip install flask

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':

python -m venv venv


Once the virtual environment is created, you can activate it. On Windows, you can activate the
virtual environment by running:
venv\Scripts\activate

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.

Here's a simple example of a Flask application defined in app.py:

from flask import Flask

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

 Space,object transaction management

 Back up recovery management

 Reduce down time for application and database upgrades

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:

In this module deals with the allocation of roll no and personal


details for new batch.It will generate of personal details of student and
academic details of the students with the photos.
 Staff Details:

 It helps to allot the subject and the subject code to the


particular staffs.

 It provides the facility to have a user name and password to


the staffs .

 Time table details:

 It will retrieve the subject information from the subject


database and assign time table to the staffs.

 It will help the admin, staff to make the entry of attendance


based of the subject and period allotted to the respective
staff.

 Attendance details:

 It will be makes to the attendance database all students.


Entered attendance to stored in the database subject ,period
wise into the particular date.

 It will help s to the get report of weekly and consolidate of


the attendance.
Report details:
Report can be taken by daily,weekly and consolidate:
 weekly report get all hour details of attendance starting date to ending
date and display the status

 Consolidate report get all student attendance details starting date to


ending date status help for the eligibility criteria of the student to
attend the examination.

5.3.2 STAFFS MODULE:


 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:

1. weekly report get particular hour details of attendance from starting


date to ending date and display the status .

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

Data Flow Diagram


DFD level 0:

ATTANDANCE MANAGEMENT SYSTEM REPORT


USER

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

Use case Diagram:


Database Design:

Staffs Table:
 To create username and password for the staff details.

FIELDS DATATYPE CONSTRAINTS DESCRIPTION

Scode varchar(20) primarykey Define separate


subject code id

Ssname Varchar(15) NotNull Short subject name


(ex:cpp)

Sname Varchar(20) NotNull Staffs name

Password Varchar(20) NotNull Staff login password


Student table:
 To create table for Student personal details for our department.

FIELDS DATATYPE CONSTRAINTS DESCRIPTION

Rollno Varchar(15) Primarykey Student rollnumber

Name Varchar(20) NotNull Student name

Dept Varchar(30) NotNull Department name

Year Number NotNull Batch year

DOB Varchar(20) NotNull Student date of birth

ADDRESS Varchar(20) NotNull Student permanent


address

MNO Varchar(20) NotNull Student mobile


number

EID Varchar(30) NotNull Student E-mail id

CSTATUS Varchar(20) NotNull Student status for


dayscholler/Hosteller

Table:5.7.2.3 –Staff Details Table


Attendance table:
 To create attendance details for particular class .

FIELDS DATATYPE CONSTRAINTS DESCRIPTION


Dates Date Primarykey Enter day by day
attendance
Hour Number primarykey Set particular hour only

Subject Varchar(15) NotNull Particular Subject


Rollno Varcahar(20) NotNull Enter Present absent
(1 to 60) details in particular
student(ex:M11MCA001)

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.

The output is designed in such a way that it is attractive, convenient and


informative. Forms are designed with various features, which make the console output
more pleasing.

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:

Agent and admin login form


Sno Test case Test case Test case Step Expected Actual Test
id name desc result Result case
status
pass/fail
1 Login Validate To verify Enter the
Login Login Pass
admin login that login login successful successful
name on name andor an error
login passwordmessage
page and click
“In valid
submit login or
button password”
must be
displayed
2 Login Validate To verify Enter the Login Login Pass
Staff login that login login successful successful
name on name and or an error
login password message
page and click “In valid
submit login or
button password”
must be
displayed
3 Password Validate To verify Enter An error An error fail
password that password message message
password and login “password “password
on login name invalid” invalid”
page click must be must be
submit displayed displayed
button
System implementation is the important stage of project when the theoretical
design is tuned into practical system. The main stages in the implementation are as
follows:
 Planning
 Training
 System testing and
 Changeover Planning
Planning is the first task in the system implementation. At the time of
implementation of any system people from different departments and system analysis
involve. They are confirmed to practical problem of controlling various activities of
people outside their own data processing departments.
The line managers controlled through an implementation coordinating committee.
The committee considers ideas, problems and complaints of user department, it must also
consider:
 The implication of system environment
 Self selection and allocation for implementation tasks
 Consultation with unions and resources available
 Standby facilities and channels of communication
Student Attendance management system will implement student details ,staff handle
subjects details, separate login details ,time table details. It will used to entered subject
wise attendance .This application elaborate attendance table generate weekly, consolidate
report provide to the End user. Mostly this application will calculate date wise attendance
.To select starting date to end date generate reports at the time of activities.
SYSTEM MAINTENANCE
Software maintenance is far more than finding mistakes. Provision must be made
for environment changes, which may affect either the computer, or other parts of the
computer based systems. Such activity is normally called maintenance. It includes both
the improvement of the system functions and the corrections of faults, which arise during
the operation of a new system.
It may involve the continuing involvement of a large proportion of computer
department recourses. The main task may be to adapt existing systems in a changing
environment.
Back up for the entire database files are taken and stored in storage devices like
flash drives, pen drives and disks so that it is possible to restore the system at the earliest.
If there is a breakdown or collapse, then the system gives provision to restore database
files. Storing data in a separate secondary device leads to an effective and efficient
maintains of the system. The nominated person has sufficient knowledge of the
organization’s computer passed based system to be able to judge the relevance of each
proposed change.

APP.PY

from flask import Flask, render_template, request, redirect, session


import mysql.connector

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('/register', methods=['GET', 'POST'])


def register():
if request.method == "POST":
username = request.form['username']
name = request.form['name']
password = request.form['password']
email = request.form['email']
phone = request.form['phone']
cursor = db.cursor()
query = "SELECT username FROM teachers WHERE username = %s"
cursor.execute(query, (username,))
existing_user = cursor.fetchone()
if existing_user:
error_message = "Username already exists. Please choose a different one."
return render_template('teacher_registration.html', error=error_message)
insert_query = "INSERT INTO teachers (teacher_name, username, password, email, phone)
VALUES (%s, %s, %s, %s, %s)"
cursor.execute(insert_query, (name, username, password, email, phone))
db.commit()
return render_template('teacher_registration.html', message="Teacher successfully registered.")
return render_template('teacher_registration.html')

@app.route('/student_register', methods=['GET', 'POST'])


def student_register():
if request.method == "POST":
student_id = request.form['student_id']
name = request.form['name']
class_sec = request.form['class_sec']
email = request.form['email']
phone = request.form['phone']
cursor = db.cursor()
query = "SELECT student_id FROM students WHERE student_id = %s"
cursor.execute(query, (student_id,))
existing_user = cursor.fetchone()
if existing_user:
error_message = "Invalid student_id"
return render_template('student_registration.html', error=error_message)
insert_query = "INSERT INTO students (student_id, student_name, class_sec, email, phone)
VALUES ( %s, %s, %s, %s, %s)"
cursor.execute(insert_query, (student_id, name, class_sec, email, phone))
db.commit()
return render_template('student_registration.html', message="Student successfully registered.")
return render_template('student_registration.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('/update_student', methods=['GET', 'POST'])


def update_student():
if request.method == 'POST':
student_id = request.form['student_id']
new_name = request.form['new_name']
new_email = request.form['new_email']
new_phone = request.form['new_phone']
cur = db.cursor()
cur.execute("SELECT * FROM students WHERE student_id = %s", (student_id,))
student = cur.fetchone()
if student:
cur.execute("UPDATE students SET student_name = %s, email = %s, phone = %s WHERE
student_id = %s",(new_name, new_email, new_phone, student_id))
db.commit()
message = "Student ID " +str(student_id)+" details have been successfully updated."
return render_template('update_student.html', student=student, message=message)
else:
error = "Invalid Student ID"
return render_template('update_student.html', error=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')

# Fetch classes for the logged-in teacher


cur = db.cursor()
cur.execute("SELECT * FROM classes WHERE teacher_username = %s", (username,))
classes = cur.fetchall()
cur.close()

# Pass both username and classes to the template


return render_template('teacher_dashboard.html', classes=classes, username=username,
session_username=username) # Pass session_username
else:
return redirect('/')

@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/add_class', methods=['GET', 'POST'])


def add_class():
if 'loggedin' in session and session['role'] == 'teacher':
cur = db.cursor()
if request.method == 'POST':
class_name = request.form['class_name']
class_section = request.form['class_section']
attendance_date = request.form['attendance_date']
cur.execute("INSERT INTO classes (class_sec, class_name,class_date, teacher_username)
VALUES (%s,%s, %s, %s)",(class_section,class_name,attendance_date, session['username']))
db.commit()
cur.close()
return redirect('/teacher/dashboard')
cur.execute('SELECT DISTINCT class_sec from classes')
class_sections = cur.fetchall()
cur.close()
return render_template('add_class.html', class_sections=class_sections)
else:
return redirect('/')

@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('/')

@app.route("/admin/get_attendance_report", methods=['GET', 'POST'])


def get_attendance_report():
if 'loggedin' in session and session['role'] == 'admin':
if request.method == 'POST':
class_sec = request.form.get('class_sec')
class_date = request.form.get('class_date')
class_name = request.form.get('class_name')

cur = db.cursor()
cur.execute("SELECT student_id, student_name FROM students WHERE class_sec = %s",
(class_sec,))
students = cur.fetchall()

cur.execute("SELECT student_id, status FROM attendance WHERE class_id IN (SELECT


class_id FROM classes WHERE class_sec = %s AND class_date = %s AND class_name = %s)",
(class_sec, class_date, class_name))
attendance = cur.fetchall()

cur.close()

return render_template('attendance_report.html', class_sec=class_sec, class_date=class_date,


class_name=class_name, students=students, attendance=attendance)
else:
cur = db.cursor()
cur.execute("SELECT DISTINCT class_sec FROM classes")
secs = cur.fetchall()
cur.execute("SELECT DISTINCT class_name FROM classes")
class_names = cur.fetchall()
cur.close()

return render_template('attendance_report.html', class_secs=secs, class_names=class_names)


else:
return redirect('/admin/login')

@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;
}

.table-details tbody tr:nth-child(even) {


background-color: #f2f2f2;
}
</style>
</head>
<body>
<div class="nav">
<a class="dash-link" href="/admin/admin_dashboard">Dashboard</a>
<a class="dash-link" href="/admin/get_attendance_report">Attendance Report</a>
<a class="logout-link" href="/logout">Logout</a>
</div>
<h1>Attendance Report</h1>
<div class="container">
<form method="POST" action="/admin/get_attendance_report">
<label for="class_sec">Class Section:</label>
<select name="class_sec" id="class_sec">
{% for sec in class_secs %}
<option value="{{ sec[0] }}">{{ sec[0] }}</option>
{% endfor %}
</select>
<br><br>
<label for="class_name">Class Name:</label>
<select name="class_name" id="class_name">
{% for class_name in class_names %}
<option value="{{ class_name[0] }}">{{ class_name[0] }}</option>
{% endfor %}
</select>
<br><br>
<label for="attendance_date">Class Date (yyyy-mm-dd);</label>
<input type="date" id="class_date" name="class_date" required pattern="\d{4}-\d{2}-\d{2}" title="Please enter
a date in the format yyyy-mm-dd"><br><br>
<input type="submit" value="Generate Report">
</form>
<br><br>
<div class="details">
<p>Class Section: <strong>{{ class_sec }}</strong></p>
<p>Class Name: <strong>{{ class_name }}</strong></p>
<p>Class Date: <i><strong>{{ class_date }}</strong></i></p>
</div>
<div class="table-details">
<table>
<thead>
<tr>
<th>Student ID</th>
<th>Student Name</th>
<th>Attendance Status</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr>
<td>{{ student[0] }}</td>
<td>{{ student[1] }}</td>
<td>
{% set attendance_found = false %}
{% for att in attendance %}
{% if att[0] == student[0] %}
{{ att[1] }}
{% set attendance_found = true %}
{% endif %}
{% endfor %}
</td>
</tr>
{% endfor %}

</tbody>
</table>
</div>
</div>
</body>
</html>

GET _ ATTEDANCE .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>

MARK_ ATTENDANCE . 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>

{% for student in students %}


<tr>
<td>{{ student[0] }}</td>
<td>{{ student[1] }}</td>
<td>
<input type="checkbox" name="attendance" value="{{ student[0] }}">
</td>
</tr>
{% endfor %}
<tr>
<td colspan="3">
<label for="select-all-checkbox">Select All:</label>
<input type="checkbox" id="select-all-checkbox">
</td>
</tr>
</tbody>
</table>
<br>
<input type="submit" value="Submit" class="submit-button">

</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

You might also like