Python课设实验 之 车票订购系统.(sqlite数据库 储存.)

要求: 

第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文库icon-default.png?t=LA92https://download.csdn.net/download/kilig_CSM/68857848

(本报告包含课设目的,开发环境,课设内容,需求分析,设计过程,存储方式,过程及代码,调试过程,小结,参考文献.) 

 感想: 

该题需要用到基础的sql语句,以及对sqlist 函数的基本应用.

 需要注意的是当sql语句报错时可以将该语句以字符串的形式打印出来,以方便查找具体错误.

你可能感兴趣的:(Pyhon,python,list,c++,数据库)