با Node.js و Python یک CLI زمانبندی اتوبوس را کدنویسی کنید [ + Sqlite3 ]
![با Node.js و Python یک CLI زمانبندی اتوبوس را کدنویسی کنید [ + Sqlite3 ] با Node.js و Python یک CLI زمانبندی اتوبوس را کدنویسی کنید [ + Sqlite3 ]](https://nabfollower.com/blog/wp-content/uploads/2023/03/با-Nodejs-و-Python-یک-CLI-زمانبندی-اتوبوس-را-کدنویسی-780x470.png)
سلام بچه ها 👋
این یک آموزش در مورد نحوه ایجاد یک سیستم جدول زمانی اتوبوس با استفاده از Node JS است [ +bonus: Python version in the video].
متوجه شدم که بسیاری از برنامه نویسان مبتدی بلافاصله پس از یادگیری اصول جاوا اسکریپت، React و Vue را یاد می گیرند. در واقع این یک اشتباه مهلک است، شما باید از ES6، نمونه اولیه، توابع مرتبه بالاتر، عملکردهای پیکان، وعده ها، توابع پاسخ به تماس و غیره و غیره آگاه باشید.
بنابراین در این آموزش، من در حال ساخت یک برنامه خط فرمان ساده هستم که به کاربران اجازه می دهد تا برنامه اتوبوس را مشاهده و به روز کنند. این برنامه از چندین بسته خارجی از جمله Figlet، Chalk، SQLite3 و Readline استفاده می کند.
بخش اول کد پایگاه داده SQLite3 را راه اندازی می کند و آن را با برخی از داده های برنامه گذرگاه اولیه اولیه تنظیم می کند. ما با استفاده از بسته sqlite3 یک اتصال پایگاه داده جدید ایجاد می کنیم و سپس یک جدول جدید به نام برنامه ایجاد می کنیم. جدول زمانبندی دارای دو ستون است: زمان و مسیر. ستون زمان به عنوان کلید اصلی تنظیم می شود، به این معنی که باید برای هر ردیف در جدول منحصر به فرد باشد. سپس آرایه ای از داده های برنامه ریزی اولیه ایجاد می کنیم و از یک دستور آماده برای درج داده ها در جدول زمان بندی استفاده می کنیم.
import figlet from 'figlet';
import chalk from 'chalk';
import sqlite3 from 'sqlite3';
import readline from 'readline';
const db = new sqlite3.Database('bus_schedule.db');
db.serialize(() => {
db.run('CREATE TABLE IF NOT EXISTS schedule (time TEXT PRIMARY KEY, route TEXT)');
const initialSchedule = [
['8:00am', 'Route 1'],
['9:30am', 'Route 2'],
['11:00am', 'Route 3'],
['1:00pm', 'Route 1'],
['2:30pm', 'Route 2'],
['4:00pm', 'Route 3']
];
const stmt = db.prepare('INSERT OR IGNORE INTO schedule (time, route) VALUES (?, ?)');
initialSchedule.forEach((scheduleItem) => {
stmt.run(scheduleItem);
});
stmt.finalize();
});
در مرحله بعد، ما از بسته Figlet برای ایجاد یک عنوان هنری بزرگ ASCII برای برنامه خود استفاده می کنیم. اگر بسته Figlet با خطا مواجه شد، یک پیغام خطا را در کنسول چاپ می کنیم و از برنامه خارج می شویم. در غیر این صورت، عنوان را در کنسول با متن آبی چاپ می کنیم.
پس از چاپ سرفصل، از بسته Chalk برای چاپ جدول زمانی اتوبوس فعلی از پایگاه داده به کنسول استفاده می کنیم. ما از متد db.all() برای بازیابی تمام سطرها از جدول زمانبندی استفاده می کنیم و سپس از یک حلقه forEach برای چاپ هر سطر در کنسول در متن سبز و زرد استفاده می کنیم.
// Print the heading using Figlet
figlet('Bus Schedule', (err, heading) => {
if (err) {
console.log(chalk.red('Error: Failed to generate heading.'));
return;
}
console.log(chalk.blue(heading));
// Print the current schedule from the database using Chalk
console.log('Current bus schedule:');
db.all('SELECT * FROM schedule', (err, rows) => {
if (err) {
console.log(chalk.red('Error: Failed to retrieve bus schedule.'));
return;
}
rows.forEach((row) => {
console.log(chalk.green(row.time) + ': ' + chalk.yellow(row.route));
});
console.log('');
promptUser();
});
});
در نهایت، یک تابع ()promptUser تعریف میکنیم که از بسته Readline برای درخواست دادههای زمانبندی اتوبوس جدید از کاربر استفاده میکند. این تابع یک رابط Readline جدید ایجاد می کند و از متد rl.question() استفاده می کند تا از کاربر بخواهد مسیر و زمان اتوبوس جدید را وارد کند. اگر کاربر یک رشته خالی وارد کند، پیام خداحافظی را به کنسول چاپ می کنیم، اتصال پایگاه داده را می بندیم و از برنامه خارج می شویم. در غیر این صورت، ورودی کاربر را تجزیه می کنیم و از یک دستور آماده برای درج داده ها در جدول زمان بندی استفاده می کنیم. اگر درج موفقیت آمیز باشد، یک پیام موفقیت آمیز را به کنسول چاپ می کنیم و دوباره تابع ()promptUser را فراخوانی می کنیم تا از کاربر اطلاعات بیشتری را درخواست کنیم.
// Prompt the user to enter new bus routes and times and update the database
function promptUser() {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Enter a new bus route and time (e.g. \'5:00pm Route 4\'), or press enter to quit: ', (input) => {
rl.close();
if (input.trim() === '') {
console.log('Goodbye!');
db.close();
return;
}
const [time, route] = input.trim().split(' ');
if (!time || !route) {
console.log(chalk.red('Error: Invalid input. Please enter the bus route and time in the correct format.'));
promptUser();
return;
}
db.run('INSERT OR IGNORE INTO schedule (time, route) VALUES (?, ?)', [time, route], (err) => {
if (err) {
console.log(chalk.red('Error: Failed to add new bus route.'));
promptUser();
return;
}
console.log(chalk.green('New bus route added successfully!'));
promptUser();
});
});
}
اگر میخواهید نحوه انجام همان برنامه را با پایتون ببینید، آموزش ویدیویی را بررسی کنید:
https://www.youtube.com/watch?v=DZUl3oJGZTk
به طور کلی، این برنامه CLI نحوه ساخت یک برنامه خط فرمان ساده را نشان میدهد که از بستههای خارجی کمی برای تولید یک برنامه اتوبوس رنگی استفاده میکند و به شما امکان میدهد تنها با افزودن مسیرها و زمان با استفاده از پایگاه داده SQLite3، برنامه را تغییر دهید.
این برنامه به گونه ای طراحی شده است که استفاده از آن ساده و آسان باشد، با اعلان های واضح و پیام های خطا برای راهنمایی کاربر.
امیدوارم مورد پسند شما واقع شود، لطفاً فراموش نکنید که ویدیو را لایک کنید، آن را با دوستان خود به اشتراک بگذارید و کانال من را سابسکرایب کنید تا آموزش ها و شورت های جدید آپلود شده هر هفته را از دست ندهید.
با من در شبکه های اجتماعی ارتباط برقرار کنید: