一、设计目的
(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()