简单的车票订购系统

该博客介绍了如何使用Python的SQLite3库设计一个简单的火车票预订系统。系统包括添加车次、查询车次信息、购票、打印票据、后台管理等功能,并通过数据库存储车次和售票记录。用户可以输入目的地查询里程和票价,管理员可以进行车次的增删改查及查看售票记录。
摘要由CSDN通过智能技术生成

一、设计目的

(1)上网查询郑州到北京、西安、石家庄、济南、太原、武汉的距离以及票价,用数据库保存车次信息。
(2)要求输入目的地,能够查询到里程和票价信息。
(3)用数据库存储每一次售票记录,包括:售票流水号,起点站,终点站,里程,金额等数据。
(4)能够打印票据信息,包括订票人信息、票价、票据号、车次等信息。

二、所需要的知识

  • Python的SQLite3数据库编程
    头文件 :import sqlite3
    创建数据库和表
    对数据库的插入、更新、和删除操作
    数据库表的查询操作
#打开数据库
def opendb():
    Con=sqlite3.connect("d:\\notes.db")
    Cur1=Con.execute("create table if not exists data1(num ,name char(5),id char(10),train_number varchar(4),train_time varchar(10),start varchar(10),end varchar(10),distance char(5),money char(5))")
    Cur2=Con.execute("create table if not exists train_number(num ,time varchar(10),start varchar(10),end varchar(10),distance char(5),money char(5))")
    return Con ,Cur1 ,Cur2
#添加车次
def add_destination():
                     
                     data=into()
                     hel=opendb()
                     hel[0].execute("insert into train_number(num,time,start,end,distance,money) values (?,?,?,?,?,?)",data)
                     hel[0].commit()
                     print("添加数据成功")
                     hel[0].close()

三、需要设计的模块

  • 主函数
  • 管理员账号管理界面的函数
  • 用户登录的函数
  • 后台管理员界面的函数
  • 后台修改
  • 后台添加
  • 后台查看
  • 用户购票函数
  • 后台查看售票记录函数

四、源代码

#输入信息

import os
import pickle
import sqlite3
#车次信息
#def train_num_find():
#打开数据库
def opendb():
    Con=sqlite3.connect("d:\\notes.db")
    Cur1=Con.execute("create table if not exists data1(num ,name char(5),id char(10),train_number varchar(4),train_time varchar(10),start varchar(10),end varchar(10),distance char(5),money char(5))")
    Cur2=Con.execute("create table if not exists train_number(num ,time varchar(10),start varchar(10),end varchar(10),distance char(5),money char(5))")
    return Con ,Cur1 ,Cur2
def main():  # 主函数
    while True:
        print('-' * 30)
        print('------菜单------')
        print('1.查询车次信息')
        print('2.购票')
        print('4.后台管理员界面')
        print('5.管理员的账号管理界面')
        print('6.退出程序')
        print('-' * 30)
        num = int(input('请选择你的操作:\n'))
        if num == 1:
            distance_find()
            continue
        if num == 2:
        
            buy()
            continue
        if num == 5:
            manager_account()
            continue
        if num == 6:
            break
        if num == 4:
            manager()
            continue
        else:
            print('请重新做出你的选择!!')
def w_buy_data():
    name_=input("请输入你的名字:")
    id_=input("请输入你的id:")
    mudidi=input("请输入你要买的票的目的地:")
    return mudidi,name_,id_
def buy():
     #售票号'10086'
    buy_data=w_buy_data()
    hel=opendb()
    cur=hel[0].cursor()
    cur.execute("select * from train_number where end=?",(buy_data[0],))
    hel[0].commit()
    for row in cur:
        print(row)
    checi=input("请输入你选的车次号:")
    cur.execute("select * from train_number where num=?",(checi,))
    hel[0].commit()
    for row in cur: 
        train_num=row[0]
        train_time=row[1]
        train_start=row[2]
        train_end=row[3]
        train_distance=row[4]
        train_money=row[5]
    hel[0].execute("insert into data1(num,name,id,train_number,train_time,start,end,distance ,money) values (?,?,?,?,?,?,?,?,?)",('10086',buy_data[1],buy_data[2],train_num,train_time,train_start,train_end,train_distance,train_money))
    hel[0].commit()
    print("购票成功!!")
    cur.close()
    hel[0].close()
    
def manager_account():  # 管理员账号管理界面的函数
    def new_():
        file_path = 'D:\车票订购系统\info.pkl'
        a = input('请设置你的账号:')
        b = input('请设置入你的密码:')
        w = input('请再次输入你的的密码:')
        d = {
            'user': a,
            'password': b
        }
        if b == w:
            if os.path.exists(file_path) and os.path.getsize(file_path):
                o = open('info.pkl', 'rb')
                m = pickle.load(o)
                print(m)
                with open('info.pkl', 'ab') as fp:
                    pickle.dump(d, fp)
                print('您已经注册成功!!')
            else:
                with open('info.pkl', 'wb') as fp:
                    pickle.dump(d, fp)
                print('您已经注册成功!!')
        else:
            print('对不起,你两次输入的密码不一致,请您重新输入!!')
            
    def xiaohui():
        h = open('info.pkl', 'w+')  # 清空文件里的内容。。。
        h.truncate()
        print('你已经销毁成功。。。')
        
    while True:
        print('-----管理员的账号管理界面------\n'
              '1.注册\n'
              '2.注销原有的所有账户\n'
              '3.退出管理员的账号管理界面')
        choice = input('请做出你的选择:\n')
        if choice == '1':
            new_()
        if choice == '2':
            xiaohui()
        elif choice == '3':
            break
        else:
            print('请重新做出你的选择')


def login():  # 用户登录的函数
    with open('info.pkl', 'rb') as fp:
        q = input('请输入你的的账号:')
        w = input('请输入你的的密码:')
        while True:
            try:
                data = pickle.load(fp)
                if q == data['user'] and w == data['password']:
                    print('您已经登录成功!!!')
                    return True

            except:
                break

def login():  # 用户登录的函数
    with open('info.pkl', 'rb') as fp:
        q = input('请输入你的的账号:')
        w = input('请输入你的的密码:')
        while True:
            try:
                data = pickle.load(fp)
                if q == data['user'] and w == data['password']:
                    print('您已经登录成功!!!')
                    return True

            except:
                break
def manager():  # 后台管理员界面的函数
    if login():
        while True:
            print('-' * 30)
            print('-----后台管理员界面-----')
            print('1.添加车次')
            print('2.删除车次')
            print('3.修改车次')
            print('4.查看所有车次信息')
            print('5.删除所有车次')
            print('6.查看售票记录')
            print('7.退出')
            print('-' * 30)
            num = input('请做出你的选择:\n')     
            if num == '3':
                revise_destination()
                continue
            if num == '1':
                add_destination()
                continue
            if num == '2':
                clear_destination()
                continue
            if num == '4':
                show_all()
                continue 
            if num == '7':
                print('-' * 25)
                print('------菜单------')
                print('1.距离查询')
                print('2.票价查询')
                print('3.车次信息')
                print('4.后台管理员界面')
                print('5.管理员的账号管理界面')
                print('6.退出程序')
                print('-' * 25)
                break
            if num == '5':
                clear_all()
                continue
            if num =='6':
                see_data()
                continue
            else:
                print('请重新做出你的选择...')
    else:
        print('对不起,你登录失败,不可以让您进入后台管理员界面')
def w_distance_data():
    mudidi=input("请输入你要查询的目的地:")
    return mudidi
def distance_find():
    distance_data=w_distance_data()
    hel=opendb()
    cur=hel[0].cursor()
    cur.execute("select * from train_number where end=?",(distance_data,))
    hel[0].commit()
    for row in cur:
        print(row)
    cur.close()
    hel[0].close()        
#输入修改的目的地
def w_revise_data():
    old_destination=input("请输入你要改的目的地:")
    new_destination=input("请输入你的新地址:")
    return  new_destination,old_destination

#修改目的地
def revise_destination():
    revise_data=w_revise_data()
    hel=opendb()
    hel[0].execute("Update train_number set end=? where end=?",revise_data)
    hel[0].commit()
    print("修改数据成功")
    hel[0].close()

#输入数据
def into():
    num_=input("请输入车次号:")
    time_=input("请输入发车时间:")
    start_=input("请输入添加起始地:")
    end_=input("请输入添加目的地:")
    money_=input("请输入票的价格:")
    distance_=input("请输入之间的距离:")
    return num_,time_,start_,end_,distance_,money_

#添加车次
def add_destination():
                     
                     data=into()
                     hel=opendb()
                     hel[0].execute("insert into train_number(num,time,start,end,distance,money) values (?,?,?,?,?,?)",data)
                     hel[0].commit()
                     print("添加数据成功")
                     hel[0].close()
#查看所有
def show_all():
                     hel=opendb()
                     Cur=hel[0].cursor()
                     Cur.execute("select * from train_number")
                     for row in Cur:
                       print(row)
#查看所有售票记录
def see_data():
                     hel=opendb()
                     Cur=hel[0].cursor()
                     Cur.execute("select * from data1")
                     for row in Cur:
                       print(row)

#请输入你要修改的地址
def w_clear_destination():
    clear_destination=input("请输入你要删除的目的地:")
    return clear_destination

#删除目的地
def clear_destination():
    clear_data=w_clear_destination()
    hel=opendb()
    hel[0].execute("delete from train_number where end=?",(clear_data,))
    hel[0].commit()
    print("删除数据成功")
    hel[0].close()
#删除所有
def clear_all():
    hel=opendb()
    hel[0].execute("drop table train_number ")
    hel[0].commit()
if __name__=='main':
    main()
main()

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

”陈小伟“

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值