python实现高铁售票系统源代码

是一个比较大的项目,需要设计和实现许多不同的功能,包括用户注册和登录、列车信息管理、票务管理、支付处理等等。下面是一个简单的Python实现,提供一个基本的框架,可以根据需要进行修改和扩展。

首先,需要使用Python的一个web框架,比如Django或Flask。这里以Flask为例,具体步骤如下:

创建一个Flask应用程序

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

设计数据库模型

这里使用SQLite作为数据库,设计两个表格,分别存储用户信息和车票信息:

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tickets.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

class Ticket(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    train_no = db.Column(db.String(80), unique=True, nullable=False)
    departure_time = db.Column(db.DateTime, nullable=False)
    arrival_time = db.Column(db.DateTime, nullable=False)
    price = db.Column(db.Float, nullable=False)
    count = db.Column(db.Integer, nullable=False)

创建用户注册和登录功能

from flask import request, redirect, url_for, render_template, session
from werkzeug.security import generate_password_hash, check_password_hash

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = User(username=username, password=generate_password_hash(password))
        db.session.add(user)
        db.session.commit()
        return redirect(url_for('login'))
    return render_template('register.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = User.query.filter_by(username=username).first()
        if user and check_password_hash(user.password, password):
            session['user_id'] = user.id
            return redirect(url_for('index'))
        else:
            return render_template('login.html', error='Invalid username or password')
    return render_template('login.html')

创建列车信息管理功能

@app.route('/trains', methods=['GET'])
def trains():
    trains = Ticket.query.all()
    return render_template('trains.html', trains=trains)

@app.route('/trains/new', methods=['GET', 'POST'])
def new_train():
    if request.method == 'POST':
        train_no = request.form['train_no']
        departure_time = request.form['departure_time']
        arrival_time = request.form['arrival_time']
        price = request.form['price']
        count = request.form['count']
        ticket = Ticket(train_no=train_no, departure_time=departure_time, arrival_time=arrival_time, price=price, count=count)
        db.session.add(ticket)
        db.session.commit()
        return redirect(url_for('trains'))
    return render_template('new_train.html')

创建票务管理和支付处理功能

@app.route('/trains/<int:id>/book', methods=['POST'])
def book_train(id):
    ticket = Ticket.query.get(id)
    if ticket.count > 0:
        ticket.count -= 1
        db.session.commit()
        return 'Booked successfully'
    else:
        return 'No tickets available'

@app.route('/trains/<int:id>/cancel', methods=['POST'])
def cancel_train(id):
    ticket = Ticket.query.get(id)
    ticket.count += 1
    db.session.commit()
    return 'Cancelled successfully'

@app.route('/checkout', methods=['POST'])
def checkout():
    user_id = session.get('user_id')
    if not user_id:
        return redirect(url_for('login'))
    tickets = []
    total_price = 0
    for key, value in request.form.items():
        if key.startswith('ticket_') and value.isdigit():
            ticket_id = int(key[len('ticket_'):])
            count = int(value)
            ticket = Ticket.query.get(ticket_id)
            if ticket.count >= count:
                tickets.append((ticket, count))
                total_price += ticket.price * count
            else:
                return 'Not enough tickets available'
    if total_price > 0:
        return render_template('checkout.html', tickets=tickets, total_price=total_price)
    else:
        return 'No tickets selected'

创建模板文件

最后,需要创建一些HTML模板文件,用于显示不同的页面,比如注册页面、登录页面、列车信息页面、购票页面等等。这些模板文件需要使用Jinja2模板引擎,可以在Flask应用程序中配置Jinja2来使用。以下是一个简单的HTML模板文件示例:

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    <h1>{{ title }}</h1>
    {% if message %}
    <p>{{ message }}</p>
    {% endif %}
    <form method="post" action="{{ action }}">
      <label for="username">Username:</label>
      <input type="text" name="username" id="username" required>
      <br>
      <label for="password">Password:</label>
      <input type="password" name="password" id="password" required>
      <br>
      <input type="submit" value="{{ button_label }}">
    </form>
  </body>
</html>

以上是一个简单的Python实现高铁售票系统的示例,其中涉及到许多细节需要处理,比如身份验证、数据验证、错误处理等等。需要根据实际需求进行修改和扩展。

猜你喜欢: