-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLibraryManagementSystem
More file actions
178 lines (155 loc) · 5.48 KB
/
LibraryManagementSystem
File metadata and controls
178 lines (155 loc) · 5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
-- Create the database
CREATE DATABASE LibraryManagementSystem;
-- Use the database
USE LibraryManagementSystem;
-- Create the Students table
CREATE TABLE Students (
StudentID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
PasswordHash VARCHAR(255) NOT NULL,
RecoveryQuestion VARCHAR(255),
RecoveryAnswer VARCHAR(255),
RegistrationDate DATETIME DEFAULT CURRENT_TIMESTAMP,
LastUpdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Create the Admins table
CREATE TABLE Admins (
AdminID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
PasswordHash VARCHAR(255) NOT NULL,
LastUpdated DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Create the Categories table
CREATE TABLE Categories (
CategoryID INT AUTO_INCREMENT PRIMARY KEY,
CategoryName VARCHAR(100) NOT NULL
);
-- Create the Authors table
CREATE TABLE Authors (
AuthorID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100) NOT NULL
);
-- Create the Books table
CREATE TABLE Books (
BookID INT AUTO_INCREMENT PRIMARY KEY,
Title VARCHAR(200) NOT NULL,
CategoryID INT,
AuthorID INT,
AvailableCopies INT NOT NULL DEFAULT 0,
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID),
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);
-- Create the IssuedBooks table
CREATE TABLE IssuedBooks (
IssueID INT AUTO_INCREMENT PRIMARY KEY,
StudentID INT,
BookID INT,
IssueDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ReturnDate DATETIME,
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (BookID) REFERENCES Books(BookID)
);
-- Insert sample data into Students table
INSERT INTO Students (Name, Email, PasswordHash, RecoveryQuestion, RecoveryAnswer)
VALUES
('Alice Johnson', 'alice.johnson@example.com', SHA2('password123', 256), 'Your first pet\'s name?', 'Buddy'),
('Bob Smith', 'bob.smith@example.com', SHA2('bobpassword', 256), 'Your mother\'s maiden name?', 'Smith'),
('Charlie Brown', 'charlie.brown@example.com', SHA2('charlie123', 256), 'Your favorite color?', 'Blue'),
('Diana Prince', 'diana.prince@example.com', SHA2('wonderwoman', 256), 'Your birthplace?', 'Themyscira'),
('Eve Adams', 'eve.adams@example.com', SHA2('evepassword', 256), 'Your favorite book?', '1984'),
('Frank White', 'frank.white@example.com', SHA2('frank123', 256), 'Your first school?', 'Springfield'),
('Grace Hopper', 'grace.hopper@example.com', SHA2('grace123', 256), 'Your favorite teacher?', 'Mr. Johnson'),
('Hannah Lee', 'hannah.lee@example.com', SHA2('hannah123', 256), 'Your childhood nickname?', 'Hanny');
-- Insert sample data into Admins table
INSERT INTO Admins (Name, Email, PasswordHash)
VALUES
('Admin One', 'admin1@library.com', SHA2('admin123', 256)),
('Admin Two', 'admin2@library.com', SHA2('adminpass', 256));
-- Insert sample data into Categories table
INSERT INTO Categories (CategoryName)
VALUES
('Fantasy'),
('Mystery'),
('Thriller'),
('Horror'),
('Science Fiction'),
('Non-Fiction'),
('Romance'),
('Adventure');
-- Insert sample data into Authors table
INSERT INTO Authors (Name)
VALUES
('J.K. Rowling'),
('George Orwell'),
('J.R.R. Tolkien'),
('Agatha Christie'),
('Dan Brown'),
('Stephen King'),
('Jane Austen'),
('Mark Twain');
-- Insert sample data into Books table
INSERT INTO Books (Title, CategoryID, AuthorID, AvailableCopies)
VALUES
('Harry Potter and the Sorcerer\'s Stone', 1, 1, 5),
('1984', 5, 2, 3),
('The Hobbit', 8, 3, 4),
('Murder on the Orient Express', 2, 4, 6),
('The Da Vinci Code', 3, 5, 2),
('The Shining', 4, 6, 3),
('Pride and Prejudice', 7, 7, 7),
('The Adventures of Tom Sawyer', 8, 8, 5);
-- Insert sample data into IssuedBooks table
INSERT INTO IssuedBooks (StudentID, BookID, IssueDate, ReturnDate)
VALUES
(1, 1, '2023-12-01', '2023-12-09'),
(2, 3, '2023-12-05', NULL),
(3, 5, '2023-12-10', NULL),
(4, 6, '2023-12-12', '2023-12-18'),
(5, 2, '2023-11-25', '2023-12-01'),
(6, 4, '2023-11-20', '2023-11-29'),
(7, 7, '2023-12-15', NULL),
(8, 8, '2023-12-18', NULL);
-- Queries to demonstrate functionalities
-- 1. View all books available in the library
SELECT
Books.BookID,
Books.Title,
Categories.CategoryName,
Authors.Name AS AuthorName,
Books.AvailableCopies
FROM Books
JOIN Categories ON Books.CategoryID = Categories.CategoryID
JOIN Authors ON Books.AuthorID = Authors.AuthorID;
-- 2. Update a student's profile (example: update email for StudentID 1)
UPDATE Students
SET Email = 'new.alice@example.com'
WHERE StudentID = 1;
-- 3. View issued books for a specific student
SELECT
IssuedBooks.IssueID,
Books.Title,
IssuedBooks.IssueDate,
IssuedBooks.ReturnDate
FROM IssuedBooks
JOIN Books ON IssuedBooks.BookID = Books.BookID
WHERE IssuedBooks.StudentID = 1;
-- 4. Admin adding a new book
INSERT INTO Books (Title, CategoryID, AuthorID, AvailableCopies)
VALUES ('The Catcher in the Rye', 6, 8, 4);
-- 5. Admin updating book details
UPDATE Books
SET AvailableCopies = 10
WHERE BookID = 1;
-- 6. Admin deleting a book
DELETE FROM Books
WHERE BookID = 8;
-- 7. Admin searching a student by ID
SELECT * FROM Students WHERE StudentID = 1;
-- 8. Admin viewing student details
SELECT * FROM Students;
-- 9. Admin changing their password
UPDATE Admins
SET PasswordHash = SHA2('newadminpassword', 256)
WHERE AdminID = 1;