Initial commit

This commit is contained in:
2026-01-15 08:39:04 +00:00
commit e492db40d2
9 changed files with 1131 additions and 0 deletions

View File

@@ -0,0 +1,740 @@
<!DOCTYPE html>
<!-- saved from url=(0140)file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/ai/ai-lab/ai7-m3/Student%20Database%20Search%20System%20_%20Beginner's%20Guide.html -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Student Database Search System | Beginner's Guide</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
color: #1a1a1a;
line-height: 1.4;
height: 100vh;
overflow: hidden;
background: linear-gradient(rgba(255, 255, 255, 0.98), rgba(255, 255, 255, 0.99));
}
.presentation-container {
max-width: 900px;
height: 100vh;
margin: 0 auto;
display: flex;
flex-direction: column;
padding: 0 20px;
}
.slide {
display: none;
flex: 1;
padding: 40px 30px;
background: transparent;
overflow-y: auto;
max-height: calc(100vh - 100px);
}
.active {
display: block;
animation: fadeIn 0.5s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* Title Slide */
.title-slide {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
height: 100%;
}
.thesis-title {
font-weight: 800;
font-size: 2.8rem;
color: #2c3e50;
margin-bottom: 10px;
line-height: 1.1;
}
.thesis-subtitle {
font-size: 1.3rem;
color: #3498db;
margin-bottom: 40px;
font-weight: 500;
}
/* Typography */
h1 {
font-weight: 700;
font-size: 2.2rem;
color: #2c3e50;
margin-bottom: 25px;
line-height: 1.1;
}
h2 {
font-weight: 600;
font-size: 1.8rem;
color: #2c3e50;
margin-bottom: 25px;
}
h3 {
font-weight: 600;
font-size: 1.2rem;
color: #3498db;
margin-bottom: 15px;
margin-top: 25px;
}
p {
font-size: 1rem;
color: #4a5568;
margin-bottom: 15px;
}
.lead {
font-size: 1.1rem;
color: #2c3e50;
font-weight: 500;
margin-bottom: 20px;
}
/* Code Blocks - FIXED for proper indentation */
.code-block {
background: #1e1e1e;
color: #d4d4d4;
padding: 25px;
border-radius: 8px;
margin: 20px 0;
font-family: 'Courier New', Consolas, Monaco, monospace;
font-size: 0.9rem;
line-height: 1.5;
overflow-x: auto;
white-space: pre; /* This preserves indentation! */
}
.code-comment { color: #6a9955; }
.code-keyword { color: #569cd6; }
.code-function { color: #dcdcaa; }
.code-string { color: #ce9178; }
.code-builtin { color: #4ec9b0; }
.code-number { color: #b5cea8; }
/* Feature Boxes */
.feature-box {
background: #f8fafc;
padding: 25px;
border-radius: 10px;
margin: 25px 0;
border-left: 4px solid #3498db;
}
.feature-item {
display: flex;
align-items: flex-start;
margin-bottom: 15px;
}
.feature-number {
background: #3498db;
color: white;
width: 28px;
height: 28px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 15px;
flex-shrink: 0;
font-weight: bold;
font-size: 0.9rem;
}
/* Video Container */
.video-container {
background: #f0f2f5;
padding: 25px;
border-radius: 10px;
margin: 25px 0;
text-align: center;
}
.video-link {
display: inline-block;
background: #ff0000;
color: white;
padding: 15px 30px;
border-radius: 6px;
text-decoration: none;
font-weight: 600;
margin: 15px 0;
transition: background 0.3s;
}
.video-link:hover {
background: #cc0000;
}
/* Database Concepts */
.database-concept {
background: #fff;
padding: 20px;
border-radius: 8px;
margin: 15px 0;
border: 2px solid #e0e6ed;
}
.concept-title {
color: #2c3e50;
font-weight: 600;
margin-bottom: 10px;
display: block;
}
/* Navigation */
.navigation {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 20px;
background: rgba(255, 255, 255, 0.95);
border-top: 1px solid #e2e8f0;
height: 70px;
flex-shrink: 0;
}
.nav-btn {
padding: 10px 25px;
background: #3498db;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 0.95rem;
font-weight: 500;
transition: all 0.3s ease;
}
.nav-btn:hover:not(:disabled) {
background: #2980b9;
}
.nav-btn:disabled {
background: #cbd5e0;
cursor: not-allowed;
}
.slide-counter {
font-weight: 600;
color: #4a5568;
font-size: 0.95rem;
}
/* Responsive */
@media (max-width: 768px) {
.slide {
padding: 30px 20px;
}
.thesis-title {
font-size: 2.2rem;
}
h1 {
font-size: 1.8rem;
}
h2 {
font-size: 1.5rem;
}
.code-block {
padding: 20px;
font-size: 0.85rem;
}
}
</style>
<link href="./Student Database Search System _ Beginner&#39;s Guide_files/css2" rel="stylesheet">
</head>
<body>
<div class="presentation-container">
<!-- Slide 1: Title -->
<div class="slide active" id="slide1">
<div class="title-slide">
<div>
<h1 class="thesis-title">Student Database Search System</h1>
<p class="thesis-subtitle">From Excel to Database - A Beginner's Journey</p>
</div>
<div class="author-info" style="margin-top: 50px; padding-top: 30px; border-top: 2px solid #e0e6ed; width: 100%; max-width: 600px;">
<p><strong>Goal:</strong> Build a working search system in 1 hour</p>
<p><strong>Prerequisites:</strong> No database experience needed!</p>
</div>
</div>
</div>
<!-- Slide 2: What is a Relational Database? -->
<div class="slide" id="slide2">
<h1>What Is a Relational Database?</h1>
<p class="lead">Beginner's Guide to Understanding Database Fundamentals</p>
<div class="feature-box">
<h3>You'll Learn:</h3>
<div class="feature-item">
<div class="feature-number">1</div>
<div>What tables, fields, records, and keys are</div>
</div>
<div class="feature-item">
<div class="feature-number">2</div>
<div>How relationships connect data across tables</div>
</div>
<div class="feature-item">
<div class="feature-number">3</div>
<div>Why primary keys and foreign keys are critical</div>
</div>
<div class="feature-item">
<div class="feature-number">4</div>
<div>The role of SQL (Structured Query Language)</div>
</div>
<div class="feature-item">
<div class="feature-number">5</div>
<div>Real-world examples in banks, hospitals, and apps</div>
</div>
</div>
<div class="database-concept">
<span class="concept-title">Think of it like this:</span>
<p>A relational database is like a digital filing cabinet with labeled folders (tables) that are connected to each other.</p>
<p>Each folder contains specific information that can be linked to other folders.</p>
</div>
</div>
<!-- Slide 3: Watch Learning Video -->
<div class="slide" id="slide3">
<h2>Let's Watch and Learn</h2>
<p class="lead">Take 10 minutes to understand relational databases</p>
<div class="video-container">
<h3>What Is a Relational Database? | Beginner's Guide</h3>
<p>By Knewget (30.3K subscribers)</p>
<a href="https://www.youtube.com/watch?v=zDNAOM6Mx4E" target="_blank" class="video-link">
▶ Watch Video on YouTube
</a>
<p style="margin-top: 20px; color: #666;">
This video explains everything you need to know about databases in plain English.
Perfect for beginners!
</p>
</div>
<div class="feature-box">
<h3>Key Takeaways:</h3>
<div class="feature-item">
<div class="feature-number"></div>
<div><strong>Tables</strong> = Excel sheets with rows and columns</div>
</div>
<div class="feature-item">
<div class="feature-number"></div>
<div><strong>Rows</strong> = Individual records (like a student)</div>
</div>
<div class="feature-item">
<div class="feature-number"></div>
<div><strong>Columns</strong> = Fields of information (name, grade, etc.)</div>
</div>
<div class="feature-item">
<div class="feature-number"></div>
<div><strong>Primary Key</strong> = Unique ID for each row</div>
</div>
<div class="feature-item">
<div class="feature-number"></div>
<div><strong>Foreign Key</strong> = Link to another table</div>
</div>
</div>
</div>
<!-- Slide 4: Our Project - What We're Building -->
<div class="slide" id="slide4">
<h2>Our 1-Hour MVP Project</h2>
<p class="lead">Simple Python program to search student schedules</p>
<div class="database-concept">
<span class="concept-title">Current Problem:</span>
<p>School data is in messy Excel sheets that are hard to search.</p>
<p>We need to find information quickly!</p>
</div>
<h3>Search Examples We'll Build:</h3>
<div class="feature-box">
<div class="feature-item">
<div class="feature-number">1</div>
<div>
<strong>Find homeroom teacher:</strong><br>
"Who is the homeroom teacher for student Alex?"
</div>
</div>
<div class="feature-item">
<div class="feature-number">2</div>
<div>
<strong>Find students in a subject:</strong><br>
"Show me all students in Math class 4A"
</div>
</div>
<div class="feature-item">
<div class="feature-number">3</div>
<div>
<strong>Simple database search:</strong><br>
"Search for any information across all sheets"
</div>
</div>
</div>
</div>
<!-- Slide 5: Step 1 - Setup -->
<div class="slide" id="slide5">
<h2>Step 1: Setup (5 minutes)</h2>
<div class="code-block"><span class="code-comment"># 1. Create a new file called "school_search.py"</span>
<span class="code-comment"># 2. Open it in any text editor</span>
<span class="code-comment"># 3. Start with this basic setup:</span>
<span class="code-keyword">import</span> pandas <span class="code-keyword">as</span> pd
<span class="code-keyword">def</span> <span class="code-function">main</span>():
<span class="code-comment"># Main function - everything starts here</span>
print(<span class="code-string">"=== School Search System ==="</span>)
<span class="code-comment"># Load our Excel file</span>
file_path = <span class="code-string">"school_data.xlsx"</span>
<span class="code-keyword">try</span>:
<span class="code-comment"># Read the Excel file</span>
excel_file = pd.ExcelFile(file_path)
print(<span class="code-string">f"Success! Found </span>{len(excel_file.sheet_names)}<span class="code-string"> sheets"</span>)
<span class="code-keyword">return</span> excel_file
<span class="code-keyword">except</span> Exception <span class="code-keyword">as</span> e:
print(<span class="code-string">f"Error: </span>{e}<span class="code-string">"</span>)
<span class="code-keyword">return</span> <span class="code-keyword">None</span>
<span class="code-keyword">if</span> __name__ == <span class="code-string">"__main__"</span>:
main()</div>
<div class="feature-box">
<h3>To Install Required Libraries:</h3>
<div class="code-block" style="margin: 10px 0; padding: 15px; background: #2c3e50;"><span class="code-comment"># Open Command Prompt or Terminal and type:</span>
pip install pandas</div>
<p>That's it! Pandas will help us read Excel files easily.</p>
</div>
</div>
<!-- Slide 6: Step 2 - Simple Search Function -->
<div class="slide" id="slide6">
<h2>Step 2: Create Search Function (15 minutes)</h2>
<div class="code-block"><span class="code-comment"># Add this function to your file (under the imports)</span>
<span class="code-keyword">def</span> <span class="code-function">simple_search</span>(excel_file, search_term):
<span class="code-comment">"""Search for any term across all sheets"""</span>
results = []
<span class="code-keyword">for</span> sheet_name <span class="code-keyword">in</span> excel_file.sheet_names:
<span class="code-comment"># Read each sheet</span>
df = pd.read_excel(excel_file, sheet_name=sheet_name)
<span class="code-comment"># Search in all cells</span>
<span class="code-keyword">for</span> row_idx, row <span class="code-keyword">in</span> df.iterrows():
<span class="code-keyword">for</span> col_name, cell_value <span class="code-keyword">in</span> row.items():
<span class="code-keyword">if</span> pd.notna(cell_value):
<span class="code-keyword">if</span> search_term.lower() <span class="code-keyword">in</span> str(cell_value).lower():
results.append({
<span class="code-string">'sheet'</span>: sheet_name,
<span class="code-string">'row'</span>: row_idx + 2, <span class="code-comment"># Excel row number</span>
<span class="code-string">'column'</span>: col_name,
<span class="code-string">'value'</span>: str(cell_value)
})
<span class="code-keyword">return</span> results</div>
<h3>Update Your Main Function:</h3>
<div class="code-block"><span class="code-keyword">def</span> <span class="code-function">main</span>():
print(<span class="code-string">"=== School Search System ==="</span>)
<span class="code-comment"># Load data</span>
data = pd.ExcelFile(<span class="code-string">"school_data.xlsx"</span>)
<span class="code-comment"># Test search</span>
print(<span class="code-string">"\nSearching for 'Math'..."</span>)
math_results = simple_search(data, <span class="code-string">"Math"</span>)
<span class="code-keyword">for</span> result <span class="code-keyword">in</span> math_results[:5]: <span class="code-comment"># Show first 5 results</span>
print(<span class="code-string">f"Found in </span>{result['sheet']}<span class="code-string">, row </span>{result['row']}<span class="code-string">: </span>{result['value']}<span class="code-string">"</span>)
print(<span class="code-string">f"\nTotal found: </span>{len(math_results)}<span class="code-string"> results"</span>)</div>
</div>
<!-- Slide 7: Step 3 - Specific Searches -->
<div class="slide" id="slide7">
<h2>Step 3: Add Specific Searches (15 minutes)</h2>
<div class="code-block"><span class="code-comment"># Function to find homeroom teacher</span>
<span class="code-keyword">def</span> <span class="code-function">find_teacher</span>(excel_file, student_name):
<span class="code-comment">"""Find homeroom teacher for a student"""</span>
<span class="code-keyword">for</span> sheet_name <span class="code-keyword">in</span> excel_file.sheet_names:
df = pd.read_excel(excel_file, sheet_name=sheet_name)
<span class="code-comment"># Look for student name</span>
<span class="code-keyword">for</span> idx, row <span class="code-keyword">in</span> df.iterrows():
<span class="code-keyword">for</span> cell_value <span class="code-keyword">in</span> row.values:
<span class="code-keyword">if</span> pd.notna(cell_value) <span class="code-keyword">and</span> student_name <span class="code-keyword">in</span> str(cell_value):
<span class="code-comment"># Check if teacher info is in same row</span>
<span class="code-keyword">for</span> col <span class="code-keyword">in</span> df.columns:
<span class="code-keyword">if</span> <span class="code-string">"teacher"</span> <span class="code-keyword">in</span> str(col).lower() <span class="code-keyword">or</span> <span class="code-string">"преподаватель"</span> <span class="code-keyword">in</span> str(col).lower():
<span class="code-keyword">if</span> pd.notna(row[col]):
<span class="code-keyword">return</span> row[col]
<span class="code-keyword">return</span> <span class="code-string">"Teacher not found"</span></div>
<div class="code-block"><span class="code-comment"># Function to find students by class</span>
<span class="code-keyword">def</span> <span class="code-function">find_students_in_class</span>(excel_file, class_name):
<span class="code-comment">"""Find all students in a specific class (like 4A)"""</span>
students = []
<span class="code-keyword">for</span> sheet_name <span class="code-keyword">in</span> excel_file.sheet_names:
df = pd.read_excel(excel_file, sheet_name=sheet_name)
<span class="code-keyword">for</span> idx, row <span class="code-keyword">in</span> df.iterrows():
<span class="code-keyword">for</span> cell_value <span class="code-keyword">in</span> row.values:
<span class="code-keyword">if</span> pd.notna(cell_value) <span class="code-keyword">and</span> class_name <span class="code-keyword">in</span> str(cell_value):
<span class="code-comment"># Look for student names in this row</span>
<span class="code-keyword">for</span> col <span class="code-keyword">in</span> df.columns:
<span class="code-keyword">if</span> <span class="code-string">"name"</span> <span class="code-keyword">in</span> str(col).lower() <span class="code-keyword">or</span> <span class="code-string">"фио"</span> <span class="code-keyword">in</span> str(col).lower():
<span class="code-keyword">if</span> pd.notna(row[col]):
students.append(row[col])
<span class="code-keyword">return</span> list(set(students)) <span class="code-comment"># Remove duplicates</span></div>
</div>
<!-- Slide 8: Step 4 - Complete Program -->
<div class="slide" id="slide8">
<h2>Step 4: Complete Program (10 minutes)</h2>
<div class="code-block"><span class="code-comment"># school_search.py - COMPLETE PROGRAM</span>
<span class="code-keyword">import</span> pandas <span class="code-keyword">as</span> pd
<span class="code-comment"># [PASTE ALL FUNCTIONS FROM PREVIOUS SLIDES HERE]</span>
<span class="code-comment"># 1. simple_search() function</span>
<span class="code-comment"># 2. find_teacher() function</span>
<span class="code-comment"># 3. find_students_in_class() function</span>
<span class="code-keyword">def</span> <span class="code-function">main</span>():
<span class="code-comment"># 1. Load the data</span>
print(<span class="code-string">"=== Student Database Search ==="</span>)
<span class="code-keyword">try</span>:
<span class="code-comment"># Change this to your actual file name</span>
data = pd.ExcelFile(<span class="code-string">"Распределение по группам Технолицей 2025_2026 - 4.xlsx"</span>)
print(<span class="code-string">f"✓ Loaded: </span>{len(data.sheet_names)}<span class="code-string"> sheets"</span>)
<span class="code-keyword">except</span>:
print(<span class="code-string">"✗ Error: Make sure the Excel file is in the same folder!"</span>)
<span class="code-keyword">return</span>
<span class="code-comment"># 2. Example searches</span>
print(<span class="code-string">"\n--- Example 1: Find Teacher ---"</span>)
teacher = find_teacher(data, <span class="code-string">"Арефьев"</span>)
print(<span class="code-string">f"Homeroom teacher: </span>{teacher}<span class="code-string">"</span>)
print(<span class="code-string">"\n--- Example 2: Find Students ---"</span>)
students = find_students_in_class(data, <span class="code-string">"4A"</span>)
print(<span class="code-string">f"Students in 4A: </span>{len(students)}<span class="code-string"> found"</span>)
<span class="code-keyword">for</span> student <span class="code-keyword">in</span> students[:3]: <span class="code-comment"># Show first 3</span>
print(<span class="code-string">f" • </span>{student}<span class="code-string">"</span>)
print(<span class="code-string">"\n--- Example 3: General Search ---"</span>)
results = simple_search(data, <span class="code-string">"Math"</span>)
print(<span class="code-string">f"Found 'Math' </span>{len(results)}<span class="code-string"> times"</span>)
print(<span class="code-string">"\n=== Search Complete ==="</span>)
<span class="code-keyword">if</span> __name__ == <span class="code-string">"__main__"</span>:
main()</div>
<div class="feature-box">
<h3>How to Run:</h3>
<div class="feature-item">
<div class="feature-number">1</div>
<div>Save all code in "school_search.py"</div>
</div>
<div class="feature-item">
<div class="feature-number">2</div>
<div>Put your Excel file in same folder</div>
</div>
<div class="feature-item">
<div class="feature-number">3</div>
<div>Open terminal in that folder</div>
</div>
<div class="feature-item">
<div class="feature-number">4</div>
<div>Type: <code>python school_search.py</code></div>
</div>
</div>
</div>
<!-- Slide 9: Next Steps & Database Connection -->
<div class="slide" id="slide9">
<h2>Next Step: Real Database</h2>
<p class="lead">Moving from Excel to SQLite database</p>
<div class="code-block"><span class="code-comment"># Simple SQLite database setup (future enhancement)</span>
<span class="code-keyword">import</span> sqlite3
<span class="code-keyword">def</span> <span class="code-function">create_database</span>():
<span class="code-comment"># Connect to database (creates if doesn't exist)</span>
conn = sqlite3.connect(<span class="code-string">'school.db'</span>)
cursor = conn.cursor()
<span class="code-comment"># Create tables (like in the video!)</span>
cursor.execute(<span class="code-string">'''CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
grade TEXT,
class TEXT,
homeroom_teacher_id INTEGER
)'''</span>)
cursor.execute(<span class="code-string">'''CREATE TABLE IF NOT EXISTS teachers (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
subject TEXT
)'''</span>)
conn.commit()
conn.close()
print(<span class="code-string">"Database created successfully!"</span>)</div>
<div class="database-concept">
<span class="concept-title">Database vs Excel:</span>
<p><strong>Excel:</strong> Good for viewing, bad for searching</p>
<p><strong>Database:</strong> Fast searching, relationships, scalable</p>
</div>
<div class="feature-box">
<h3>Your 1-Hour MVP is Complete!</h3>
<p>You've built a working search system that can:</p>
<p>• Search across all Excel sheets</p>
<p>• Find teachers for students</p>
<p>• List students in classes</p>
<p>• Be extended to a real database</p>
</div>
</div>
<!-- Navigation -->
<div class="navigation">
<button class="nav-btn" id="prev-btn" onclick="prevSlide()" disabled="">← Back</button>
<div class="slide-counter">
<span id="current-slide">1</span> of <span id="total-slides">9</span>
</div>
<button class="nav-btn" id="next-btn" onclick="nextSlide()">Next →</button>
</div>
</div>
<script>
let currentSlide = 1;
const totalSlides = 9;
function showSlide(slideNumber) {
document.querySelectorAll('.slide').forEach(slide => {
slide.classList.remove('active');
});
document.getElementById(`slide${slideNumber}`).classList.add('active');
document.getElementById(`slide${slideNumber}`).scrollTop = 0;
document.getElementById('current-slide').textContent = slideNumber;
document.getElementById('prev-btn').disabled = slideNumber === 1;
document.getElementById('next-btn').disabled = slideNumber === totalSlides;
if (slideNumber === totalSlides) {
document.getElementById('next-btn').textContent = 'Finish';
} else {
document.getElementById('next-btn').textContent = 'Next →';
}
}
function nextSlide() {
if (currentSlide < totalSlides) {
currentSlide++;
showSlide(currentSlide);
}
}
function prevSlide() {
if (currentSlide > 1) {
currentSlide--;
showSlide(currentSlide);
}
}
// Initialize
showSlide(1);
// Keyboard navigation
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowRight' || e.key === ' ' || e.key === 'Enter') {
nextSlide();
} else if (e.key === 'ArrowLeft') {
prevSlide();
}
});
// Touch swipe for mobile
let touchStartY = 0;
let touchEndY = 0;
document.addEventListener('touchstart', (e) => {
touchStartY = e.changedTouches[0].screenY;
});
document.addEventListener('touchend', (e) => {
touchEndY = e.changedTouches[0].screenY;
const swipeThreshold = 100;
if (touchEndY < touchStartY - swipeThreshold) {
nextSlide();
}
if (touchEndY > touchStartY + swipeThreshold) {
prevSlide();
}
});
</script>
</body></html>