TypeScript 语言 实战项目 图书管理系统

TypeScript阿木 发布于 2025-05-28 3 次阅读


TypeScript语言实战项目:图书管理系统开发指南

随着互联网技术的飞速发展,各类管理系统在企业和组织中扮演着越来越重要的角色。图书管理系统作为其中的一员,旨在帮助图书馆、书店等机构实现图书的采购、借阅、归还等管理功能。本文将围绕TypeScript语言,详细介绍如何使用TypeScript开发一个功能完善的图书管理系统。

一、项目背景

图书管理系统的主要功能包括:

1. 图书信息管理:包括图书的添加、修改、删除、查询等操作。
2. 读者信息管理:包括读者的添加、修改、删除、查询等操作。
3. 借阅管理:包括图书的借阅、归还、续借等操作。
4. 统计分析:包括图书借阅统计、读者借阅统计等。

二、技术选型

1. TypeScript:作为JavaScript的超集,TypeScript提供了静态类型检查、接口、类等特性,有助于提高代码的可维护性和可读性。
2. Node.js:作为JavaScript的运行环境,Node.js可以方便地实现后端服务。
3. Express:作为Node.js的Web框架,Express可以快速搭建RESTful API。
4. MongoDB:作为NoSQL数据库,MongoDB可以存储图书、读者、借阅等数据。

三、项目结构


book-system/
├── src/
│ ├── models/ 数据模型
│ ├── routes/ 路由
│ ├── controllers/ 控制器
│ ├── services/ 服务层
│ ├── utils/ 工具类
│ └── app.ts 应用入口
├── public/
│ └── index.html 前端页面
├── package.json
└── tsconfig.json

四、开发步骤

1. 初始化项目

使用npm初始化项目:

bash
npm init -y

然后,安装所需的依赖:

bash
npm install express mongoose body-parser cors

2. 创建数据模型

在`src/models`目录下,创建`Book.ts`和`Reader.ts`文件,分别定义图书和读者数据模型:

typescript
// src/models/Book.ts
import mongoose, { Document } from 'mongoose';

interface IBook extends Document {
title: string;
author: string;
isbn: string;
publishDate: Date;
status: string; // 'available' | 'borrowed'
}

const bookSchema = new mongoose.Schema({
title: { type: String, required: true },
author: { type: String, required: true },
isbn: { type: String, required: true },
publishDate: { type: Date, required: true },
status: { type: String, enum: ['available', 'borrowed'], default: 'available' },
});

export default mongoose.model('Book', bookSchema);

// src/models/Reader.ts
import mongoose, { Document } from 'mongoose';

interface IReader extends Document {
name: string;
phone: string;
email: string;
}

const readerSchema = new mongoose.Schema({
name: { type: String, required: true },
phone: { type: String, required: true },
email: { type: String, required: true },
});

export default mongoose.model('Reader', readerSchema);

3. 创建路由

在`src/routes`目录下,创建`bookRoutes.ts`和`readerRoutes.ts`文件,分别定义图书和读者路由:

typescript
// src/routes/bookRoutes.ts
import express, { Request, Response } from 'express';
import { Book } from '../models/Book';

const router = express.Router();

router.get('/', async (req: Request, res: Response) => {
const books = await Book.find();
res.json(books);
});

router.post('/', async (req: Request, res: Response) => {
const book = new Book(req.body);
await book.save();
res.status(201).json(book);
});

// ... 其他路由 ...

export default router;

// src/routes/readerRoutes.ts
import express, { Request, Response } from 'express';
import { Reader } from '../models/Reader';

const router = express.Router();

router.get('/', async (req: Request, res: Response) => {
const readers = await Reader.find();
res.json(readers);
});

router.post('/', async (req: Request, res: Response) => {
const reader = new Reader(req.body);
await reader.save();
res.status(201).json(reader);
});

// ... 其他路由 ...

export default router;

4. 创建控制器

在`src/controllers`目录下,创建`bookController.ts`和`readerController.ts`文件,分别定义图书和读者控制器:

typescript
// src/controllers/bookController.ts
import { Request, Response } from 'express';
import { Book } from '../models/Book';

export const getBooks = async (req: Request, res: Response) => {
const books = await Book.find();
res.json(books);
};

export const createBook = async (req: Request, res: Response) => {
const book = new Book(req.body);
await book.save();
res.status(201).json(book);
};

// ... 其他控制器 ...

// src/controllers/readerController.ts
import { Request, Response } from 'express';
import { Reader } from '../models/Reader';

export const getReaders = async (req: Request, res: Response) => {
const readers = await Reader.find();
res.json(readers);
};

export const createReader = async (req: Request, res: Response) => {
const reader = new Reader(req.body);
await reader.save();
res.status(201).json(reader);
};

// ... 其他控制器 ...

5. 创建服务层

在`src/services`目录下,创建`bookService.ts`和`readerService.ts`文件,分别定义图书和读者服务层:

typescript
// src/services/bookService.ts
import { Book } from '../models/Book';

export const getBooks = async () => {
return await Book.find();
};

export const createBook = async (data: any) => {
const book = new Book(data);
await book.save();
return book;
};

// ... 其他服务 ...

// src/services/readerService.ts
import { Reader } from '../models/Reader';

export const getReaders = async () => {
return await Reader.find();
};

export const createReader = async (data: any) => {
const reader = new Reader(data);
await reader.save();
return reader;
};

// ... 其他服务 ...

6. 创建工具类

在`src/utils`目录下,创建`auth.ts`文件,用于处理用户认证:

typescript
// src/utils/auth.ts
import jwt from 'jsonwebtoken';

export const generateToken = (user: any) => {
return jwt.sign(user, 'your_secret_key', { expiresIn: '1h' });
};

export const verifyToken = (token: string) => {
return jwt.verify(token, 'your_secret_key');
};

7. 创建应用入口

在`src/app.ts`文件中,配置Express应用:

typescript
// src/app.ts
import express from 'express';
import mongoose from 'mongoose';
import bookRoutes from '../routes/bookRoutes';
import readerRoutes from '../routes/readerRoutes';

const app = express();

app.use(express.json());
app.use('/api/books', bookRoutes);
app.use('/api/readers', readerRoutes);

mongoose.connect('mongodb://localhost:27017/book-system', {
useNewUrlParser: true,
useUnifiedTopology: true,
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});

五、前端页面

在`public/index.html`文件中,创建一个简单的图书管理系统前端页面:

html

图书管理系统

图书管理系统

const getBooks = async () => {
const response = await axios.get('/api/books');
const books = response.data;
const booksContainer = document.getElementById('books');
books.forEach(book => {
const bookElement = document.createElement('div');
bookElement.innerText = `${book.title} by ${book.author}`;
booksContainer.appendChild(bookElement);
});
};

getBooks();

六、总结

本文详细介绍了使用TypeScript开发图书管理系统的过程。通过配置Node.js、Express、MongoDB等环境,并使用TypeScript编写后端API和前端页面,实现了图书的添加、修改、删除、查询等操作。在实际开发过程中,可以根据需求添加更多功能,如借阅管理、统计分析等。希望本文能对您在TypeScript开发方面的学习有所帮助。