第2题 编写车票订购系统
(1)上网查询郑州到北京、西安、石家庄、济南、太原、武汉的距离以及票价,用数据库保存车次信息。
(2)要求输入目的地,能够查询到里程和票价信息。
(3)用数据库存储每一次售票记录,包括:售票流水号,起点站,终点站,里程,金额等数据,并统计所有存储记录的总售票金额及各站的旅客流量(进站流量+出站流量)。
(4)能够打印票据信息,包括订票人信息、票价、票据号、车次等信息。
程序应采用模块化设计,主函数是程序入口,各模块独立,可分块调试,各模块由主函数控制调用。编写主菜单函数,返回相应的功能选项数字,主函数根据此数字调用相应的功能函数。编写各功能模块函数。最后进行综合调试。
import random
import sqlite3
import time
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
'''con.execute("create table date_piao (piao_id text primary key ,"#票据号
"name text not null,"#订票人姓名
"name_id text not null,"#订票人身份证号
"number text not null,"#订票人电话号码
"start_place text not null,"#起点
"finish_place text not null,"#终点
"che_id text not null,"#车次号
"distance real not null,"#两站之间距离
"money real not null)")#票价
con.execute("create table date_zong (place text primary key ,"#站点名称
"zhan_in integer not null,"#入站流量
"zhan_out integer not null,"#出站流量
"getmoney real not null)")#该站点收的钱
con.execute("create table piao_new(id text primary key ,"#车次号,同时也是主键
"start_place text not null,"#起始地点列表
"finish_place text not null ,"#终止地点列表
"distance real not null,"#两站点之间的距离
"num integer not null,"#剩余票数
"money real not null)")#票价'''
Cur.close()
con.close()
def find_key(key):#查找这个站点的行是否已经插入在表中.
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
# print("select * from "+"date_zong"+ " where place = " +key )
Cur.execute("select * from "+"date_zong"+ " where place = " +key )
for row in Cur:
return True #有该站点
return False #没该站点
def pay():
flag=input('您是否想要买票(是请输入1,否请输入0):')
if flag == '1':
piao_id=input('请输入您想要购买的序列号:')
pao_id1=piao_id
piao_id='\''+piao_id+'\''#sql语言里的序列号格式
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("update piao_new set num = num-1 where id = "+piao_id )
information_id=time.strftime("%d%m%y%H%M%S",time.localtime())+pao_id1#生成票据号 格式为 买票时间加火车的序列号
Cur.execute("select * from piao_new where id = "+piao_id)
information=[]
for row in Cur:
str1 = str(row)
information.append(str1[1:len(str1) - 1].split(', '))
information_money=information[0][5]#票价
information_start_place=information[0][1]#起点
information_finish_place=information[0][2]#终点
information_che=pao_id1#车次序列号
information_distance=information[0][3]#距离
Cur.execute("insert into date_piao values ('"+information_id+"',"#票据号
"'"+name+"',"#姓名
"'"+name_id+"',"#身份证号
"'"+number+"',"#电话号
+information_start_place+","#起点
+information_finish_place+","#终点
"'"+information_che+"',"#车次号
+information_distance+","#两站点之间距离
+information_money+")")#票价
if find_key(information_start_place) : #当进站点存在时修改信息.
Cur.execute("update date_zong set zhan_in = zhan_in+1 ,"#加入站流量加钱
" getmoney = getmoney + "+information_money+
" where place = " + information_start_place)
else: #当进站点不存在时插入该行
Cur.execute("insert into date_zong values ("+information_start_place+",1,0,"+information_money+")")
if find_key(information_finish_place) :#出站点存在时修改信息
Cur.execute("update date_zong set zhan_out = zhan_out+1 ," # 加出站流量加钱
" getmoney=getmoney +" + information_money +
" where place = " + information_finish_place)
else:#当出站点不存在时插入该行
Cur.execute("insert into date_zong values (" + information_finish_place + ",0,1,0 )")
con.commit()
print('买票成功')
Cur.close()
con.close()
else:
print('谢谢您的使用.')
def find_piao(start_place1,finish_place1):
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
'''Cur.execute("insert into piao_new values ('g589','郑州东','北京西',213.323,31,250.0)")
con.commit()
Cur.execute("select * from piao_new")#查询所有行
for row in Cur:
print(row)'''
# print("select * from piao_new where start_place="+start_place1+' and finish_place='+finish_place1)
Cur.execute("select * from piao_new where start_place="+start_place1+' and finish_place='+finish_place1)
flag=0
for row in Cur:
print(row)
flag=1
Cur.close()
con.close()
if flag :
pay()
else:
print("想要查询的车次不存在.")
def find_date_piao():
piao_id=input("请输入想要查询的票据号(如果想查询所有数据输入-1):")
if piao_id == '-1':
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("select * from date_piao") # 查询所有行
for row in Cur:
print(row)
Cur.close()
con.close()
else:
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("select * from date_zong where piao_id = "+"'"+piao_id+"'") # 查询所有行
for row in Cur:
print(row)
Cur.close()
con.close()
def find_date_zong():
place=input("请输入想要查询的站点名(如果想查询所有站点输入-1):")
if place == '-1':
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("select * from date_zong") # 查询所有行
for row in Cur:
print(row)
Cur.close()
con.close()
else:
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("select * from date_piao where piao_id = " + "'" + place+ "'") # 查询所有行
for row in Cur:
print(row)
Cur.close()
con.close()
def insert():#Cur.execute("insert into piao_new values ('h87563459','石家庄','北京',213.323,50,309)")
start_place=input('请输入出发站:')
finish_place=input("请输入终点站:")
distance=input("请输入两站点之间所格距离(km):")
piao_sum=input("请输入该车次有多少票:")
id_che=input("请输入车次号:")
money=input("请输入该车票价格:")
start_place="'"+start_place+"'"
finish_place="'"+finish_place+"'"
id_che="'"+id_che+"'"
try :
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("insert into piao_new values ("+id_che+","+start_place+","+finish_place+","+distance+','+piao_sum+","+money+")")
Cur.close()
con.close()
print("添加成功.")
except :
print("添加失败,可能是车次号已存在.")
def delete():
id=input("请输入你想要删除车次的车次号:")
id="'"+id+"'"
try :
con = sqlite3.connect("车票.db") # 打开/建立数据库
Cur = con.cursor() # 创建游标对象
Cur.execute("delete from piao_new where id = "+id)
Cur.close()
con.close()
print("删除成功.")
except :
print("删除失败,可能是因为要删除的车次号不存在.")
while True :
print('1.乘客权限')
print('2.管理员权限')
power=int(input('请输入你权限的序列号:'))
if power == 1 :
name=input('请输入您的真实姓名:')
name_id=input('请输入您的身份证号:')
number=input('请输入您的电话号码:')
if name!='' and name_id!='' and number!='':
print('登录成功')
start_place=input('请输入你要查询的出发地:')
finish_place=input('请输入你要查询的终点站:')
find_piao('\''+start_place+'\'','\''+finish_place+'\'')
else :
print('请输入合法字符:')
elif power == 2 :
print('管理员登陆成功.')
print("1.查询票据购买信息.")
print("2.查询站点统计信息")
print("3.管理站点信息")
h=input("请输入序列号:")
if h == '1' :
find_date_piao()
elif h == '2' :
find_date_zong()
elif h == '3':
x=input("插入(1) or 删除 (2) :")
if x== "1":
insert()
elif x== "2":
delete()
else:
print('请输入正确的序列号.')
else:
print('请输入正确的序列号.')
重要语句后边有注释以便理解.
本实验具体内容于:Python课设实验报告.docx-讲义文档类资源-CSDN文库https://download.csdn.net/download/kilig_CSM/68857848
(本报告包含课设目的,开发环境,课设内容,需求分析,设计过程,存储方式,过程及代码,调试过程,小结,参考文献.)
该题需要用到基础的sql语句,以及对sqlist 函数的基本应用.
需要注意的是当sql语句报错时可以将该语句以字符串的形式打印出来,以方便查找具体错误.