当前位置:首页 » 操作系统 » 订票系统数据库设计

订票系统数据库设计

发布时间: 2022-05-11 13:52:32

‘壹’ 铁路订票系统中,为了统计行程的里程(经过多个站点),数据库的设计应该是怎么样的啊~

数据库中存放每相邻两个站点间的里程.
然后在实际的程序中进行操作
对一段路程分成几段,再分别得到,最后计算

‘贰’ 飞机订票系统设计 c语言

(已修改,请用最新的代码)代码说明:

1级菜单:选择购买的航班号,并显示对应座位状态。

(我只做测试,所以初始化initFlight函数中我只初始了2个航班,需要自己按照我的代码添)

(注意:实际开发软件,链表数据是从数据库中读取的,需要实时同步,如果要多次调用initFlight函数,记得自己写一个释放内存的函数,把所有链表“SINFO和FLINFO”节点都释放掉,释放函数我没写,需要你自己写!!!)

2级菜单:选择购买对应座位号,完成购买,并实时显示购买结果。

位置编号、座位最大排数、舱室类型、折扣等参数均由常量参数空值,需要修改自行改常量。

注意:舱室类型(我默认3个类型头等舱、公务舱、经济舱)对应折扣参数:tDiscount二维数组。如要如要添加新的舱室类型,必须将参数常量TYPESIZE、typeName、types、tDiscount这4个同时修改,具体看代码备注!!

座位票价=基础票价*类型折扣*时段折扣。

因为飞机不让吸烟,所以我没做吸烟区(笑),如果你需要,可以作为类型自行添加!

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
#include<time.h>
//-----------------------相关参数,想改变,在这里修改!!!!!!!-----------------------------
constfloattimeDiscount=1;//时段折扣,影响所有航班最终价格,默认1
constcharcID[5]="ABCD";//位置编号
constintmaxRow=20;//位置最大排号
//注意:如果修改类型数量,types和tDiscount必须同时修改!!!
#defineTYPESIZE3//类型数量
constchartypeName[TYPESIZE][10]={"头等舱","公务舱","经济舱"};
constinttypes[TYPESIZE][2]={{1,2},{3,4},{5,20}};//排号对应类型。1~2排头等舱,3~4排公务舱,5~20排经济舱
constfloattDiscount[TYPESIZE]={1.5,1.3,1};//类型折扣。头等舱1.5倍,公务舱1.3倍,经济舱1倍

//-------------------------------------------------------------------------------
typedefstructseatInfo//座位信息,一条链表对应一个航班信息,链表顺序从第一排左边第一个开始往后A1~D1,A2~D2。。。
{
charcloID;//位置编号A、B、C、D
introw;//位置排号
inttype;//座位所属类型:0:头等舱、1:公务舱、2:经济舱,不同类型对应不同的类型折扣tDiscount
intsell;//出售状态,0:未出售;1:已出售
structseatInfo*next;
}SINFO;
typedefstructflightInfo//航班信息
{
charfid[10];//航班号
time_ttfTime;//起飞时间
time_tldTime;//降落时间
chartoCity[20];//抵达城市
floattPrice;//基础票价,不同位置具有不同折扣,座位票价=基础票价*类型折扣*时段折扣
structflightInfo*next;
structseatInfo*sHead;//对应座位链表的头节点
}FLINFO;
voidmeError(void*p);
SINFO*getSINFO();//获取座位链表
//addFLINFO:添加航班信息链表的节点flinfoHead:头节点(第一次传NULL会自动生成),flinfoTail:尾节点,fNew:要添加的结构信息(成员指针无需赋值)
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew);//返回尾节点
time_tgetTime_tfromStr(char*sTime);//将YYYY-MM-DDhh:mm:ss格式的时间字符串转换成time_t型数值
FLINFO*initFlight();//初始化航班信息,返回航班链表头节点,如果想手动输入,请在这里添加!!!正常软件开发,这一步应该是从数据库读取!
char*getTString(structtm*tm0);//通过tm获取时间字符串
voidshowSinfo(FLINFO*flinfo);//显示航班对应座位信息
voidprintfFlinfo(FLINFO*flinfoHead);
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid);//选择航班号,返回节点
voidshowSinfo(FLINFO*flinfo);//显示航班对应座位信息
SINFO*selectSinfo(FLINFO*flinfo,char*sid);//选择座位,返回节点
intmain()
{
FLINFO*flinfoHead=initFlight(),*ffSelect=NULL;
SINFO*sfSelect=NULL;
charfid[10]={0},sid[10]={10};
while(1)
{
ffSelect=NULL;
sfSelect=NULL;
memset(fid,0,10);
memset(sid,0,10);
printfFlinfo(flinfoHead);
printf("请输入要购买的航班号:");
scanf("%s",fid);
ffSelect=selectFlinfo(flinfoHead,fid);
if(!ffSelect)
{
printf("未找到对应航班,按任意键继续----- ");
getch();
system("cls");
continue;
}
system("cls");
printf("航班号:%s座位信息如下: ",ffSelect->fid);

showSinfo(ffSelect);
printf("请输入要购买的座位编号(输入0返回主菜单):");
scanf("%s",sid);
if(!strcmp(sid,"0"))
{
system("cls");
continue;
}
else
{
sfSelect=selectSinfo(ffSelect,sid);
if(!sfSelect||sfSelect->sell)
{
printf("未找到对应座位或该座位已出售,请重新输入!按任意键继续----- ");
getch();
system("cls");
continue;
}
printf("购买成功!按任意键继续-----");
sfSelect->sell=1;
getch();
system("cls");
}

}
return0;
}
SINFO*selectSinfo(FLINFO*flinfo,char*sid)//选择座位,返回节点
{
SINFO*sinfoHead=flinfo->sHead;
while(sinfoHead->next)
{
if(sinfoHead->next->cloID==sid[0]&&sinfoHead->next->row==atoi(sid+1))
returnsinfoHead->next;
sinfoHead=sinfoHead->next;
}
returnNULL;
}
voidshowSinfo(FLINFO*flinfo)//显示航班对应座位信息
{
SINFO*sinfoHead=flinfo->sHead,*sfp=NULL;
inti,j,k,row=maxRow,clo=strlen(cID);
chartypeStr[10]={0};
for(i=0;i<row;i++)
{
//---------读取座位所属舱室------------
memset(typeStr,0,10);
for(k=0;k<TYPESIZE;k++)
if(i+1>=types[k][0]&&i+1<=types[k][1])
strcpy(typeStr,typeName[k]);
//--------------------------------------
printf(" ");
for(j=0;j<clo;j++)
printf("-------------");
printf(" ");
sfp=sinfoHead;

for(j=0;j<clo;j++)
{
printf("|%c%02d|",sfp->next->cloID,sfp->next->row);
sfp=sfp->next;
}
printf(" ");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c|",sfp->next->sell?2:1);
sfp=sfp->next;
}
printf(" ");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%6s:%4.0f|",typeStr,flinfo->tPrice*tDiscount[sfp->next->type]*timeDiscount);
sfp=sfp->next;
}
printf(" ");
sinfoHead=sfp;
}
for(j=0;i<clo;j++)
printf("-------");
printf(" ");

}
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid)//选择航班号,返回节点
{
while(flinfoHead->next)
{
if(!strcmp(flinfoHead->next->fid,fid))
returnflinfoHead->next;
flinfoHead=flinfoHead->next;
}
returnNULL;
}
voidprintfFlinfo(FLINFO*flinfoHead)
{
while(flinfoHead->next)
{
printf("目的地:%s,航班号:%s ----起飞时间:%s,抵达时间:%s ",flinfoHead->next->toCity,flinfoHead->next->fid,getTString(localtime(&flinfoHead->next->tfTime)),getTString(localtime(&flinfoHead->next->ldTime)));
flinfoHead=flinfoHead->next;
}
}
char*getTString(structtm*tm0)//通过tm获取时间字符串
{
char*str=(char*)malloc(sizeof(char)*20),num[5]={0};
meError(str);
memset(str,0,20);
sprintf(num,"%4d",tm0->tm_year+1900);
strcat(str,num);
strcat(str,"-");

memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mon);
strcat(str,num);
strcat(str,"-");

memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mday);
strcat(str,num);
strcat(str,"");

memset(num,0,5);
sprintf(num,"%02d",tm0->tm_hour);
strcat(str,num);
strcat(str,":");

memset(num,0,5);
sprintf(num,"%02d",tm0->tm_min);
strcat(str,num);
strcat(str,":");

memset(num,0,5);
sprintf(num,"%02d",tm0->tm_sec);
strcat(str,num);
returnstr;
}
time_tgetTime_tfromStr(char*sTime)//将YYYY-MM-DDhh:mm:ss格式的时间字符串转换成time_t型数值
{
time_trt;
structtm*tm1=NULL;
rt=time(NULL);
tm1=localtime(&rt);
sscanf(sTime,("%4d-%2d-%2d%2d:%2d:%2d"),&tm1->tm_year,&tm1->tm_mon,&tm1->tm_mday,&tm1->tm_hour,&tm1->tm_min,&tm1->tm_sec);
tm1->tm_year-=1900;
tm1->tm_mon--;
rt=mktime(tm1);

returnrt;

}
FLINFO*initFlight()//初始化航班信息,返回航班链表头节点,如果想手动输入,请在这里添加!!!正常软件开发,这一步应该是从数据库读取!
{
FLINFO*ffHead=NULL,*flinfoTail=NULL,fNew;
//--------添加一个航班信息----需要增加按照我下面调用方式写--------------------------------
strcpy(fNew.fid,"CI502");
fNew.tfTime=getTime_tfromStr("2019-02-2003:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2005:20:30");
strcpy(fNew.toCity,"台北");
fNew.tPrice=1000;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
//--------------------------------------------------------------------------------------------
strcpy(fNew.fid,"9C8921");
fNew.tfTime=getTime_tfromStr("2019-02-2014:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2016:40:30");
strcpy(fNew.toCity,"香港");
fNew.tPrice=500;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
returnffHead;
}
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew)//返回尾节点
//添加航班信息链表的节点flinfoHead:头节点(第一次传NULL会自动生成),flinfoTail:尾节点,fNew:要添加的结构信息(成员指针无需赋值)
{
FLINFO*flinfoHead=*ffHead;
if(flinfoHead==NULL)
{
*ffHead=(FLINFO*)malloc(sizeof(FLINFO));
flinfoHead=*ffHead;
meError(flinfoHead);
flinfoHead->next=NULL;
}
FLINFO*flinfoNew=(FLINFO*)malloc(sizeof(FLINFO));
meError(flinfoNew);
flinfoNew->next=NULL;
flinfoNew->fid[0]=0;
strcpy(flinfoNew->fid,fNew.fid);
flinfoNew->ldTime=fNew.ldTime;
flinfoNew->tfTime=fNew.tfTime;
flinfoNew->toCity[0]=0;
strcpy(flinfoNew->toCity,fNew.toCity);
flinfoNew->tPrice=fNew.tPrice;
flinfoNew->sHead=getSINFO();
if(flinfoHead->next==NULL)
flinfoHead->next=flinfoNew;
else
flinfoTail->next=flinfoNew;
flinfoTail=flinfoNew;
returnflinfoTail;
}
SINFO*getSINFO()//获取座位链表
{
intmaxClo=strlen(cID),cnt=maxClo*maxRow,clo=0,row=1,i;
SINFO*sinfoHead=(SINFO*)malloc(sizeof(SINFO)),*sinfoTail=NULL;
meError(sinfoHead);
sinfoHead->next=NULL;
SINFO*sinfoNew=NULL;
while(cnt--)//按顺序生成对应数量的座位链表
{
if(clo==maxClo)
clo=0,row++;
if(row==maxRow+1)
row=1;

sinfoNew=(SINFO*)malloc(sizeof(SINFO));
meError(sinfoNew);
sinfoNew->cloID=cID[clo];
sinfoNew->row=row;
for(i=0;i<TYPESIZE;i++)
if(row>=types[i][0]&&row<=types[i][1])
{
sinfoNew->type=i;
break;
}
sinfoNew->sell=0;
sinfoNew->next=NULL;
if(sinfoHead->next==NULL)
sinfoHead->next=sinfoNew;
else
sinfoTail->next=sinfoNew;
sinfoTail=sinfoNew;
clo++;
}
returnsinfoHead;
}
voidmeError(void*p)//内存申请失败
{
if(p==NULL)
{
printf(" 异常:内存申请失败!回车结束程序! ");
while(getch()!=' ');
exit(0);
}
}

‘叁’ 影院订票系统,管理员可以删除用户订单吗

在电影开场前一个小时是可以用户自行取消订单的。

管理员能否取消你可以去影院问问。

为楼主找到以下参考信息:

inemaTicketingSystem(电影院售票系统)

一、主要功能

  • 用户登录注册

  • 影院影片查看

  • 影院影片搜索

  • 电影采购

  • 订单查询

  • 后台管理

  • 二、功能设计

    (1)用户注册: 用户在注册页面填写注册相关信息,如果填写正确则检查是否为新用户,如果为新用户则转发到注册成功页面;如果填写注册相关信息错误或不是新用户则进行再次填写。

    3.2 电影院售票系统的数据表设计

    根据E-R图的分析与设计可以将相应的实体与联系转换成数据表进行存储。本系统的数据表包含影片表、影院表、场次表、用户表、订单表。

    (1)影片表主要是用来记录影片信息的,存储信息包括影片ID号、影片中文名、影片英文名、海报图片、简介、片长、上映日期、评分、来源、演员、导演、类型等。详细说明如表3-1所示。

    表 3-1 影片表(movie)

    序号

    表字段

    类型

    详细说明

    1 mid Int(11) 影片ID号,主键

    2 chinese_name Varchar(255) 影片中文名

    3 english_name Varchar(255) 影片英文名

    4 img_url Varchar(255) 影片海报

    5 type Varchar(2) 影片的类型

    6 length Varchar(255) 影片的播放时长

    7 release_date date 影片的上映时间

    8 introction Varchar(1000) 影片的简介

    9 rating Varchar(45) 影片的评分

    10 country Varchar(45) 影片拍摄的国家

    11 actors Varchar(45) 影片的演员

    12 director Varchar(45) 影片的导演

    (2)影院表主要是用来记录各城市的影院信息的,主要包括影院ID、影院名、地址、电话、城市。详细说明如3-2所示。

    表3-2 影院表(cinema)

    序号

    表字段

    类型

    详细说明

    1 cid Int(11) 影院ID,主键

    2 name Varchar(255) 影院名称

    3 address Varchar(1000) 影院的地址

    4 phone Varchar(45) 影院的电话

    5 city Varchar(45) 影院的所在城市

    (3)场次表是由影片表和影院表的多对多联系产生的,另外它还具有包括了其他信息。其他信息主要有放映室、语言、价格、放映日期、放映时间、已购座位号。详细说明如表3-3所示。

    表 3-3 场次表(screen)

    序号

    表字段

    类型

    详细说明

    1 sid Int(11) 场次ID号,主键

    2 cid Int(11) 影院的ID号,外键

    3 mid Int(11) 影片的ID号,外键

    4 language Varchar(255) 场次播放的影片语言

    5 price float 场次的价格

    6 room Varchar(255) 场次的房间号

    7 show_date date 播放日期

    8 show_time Varchar(255) 播放时间

    9 seat Varchar(255) 已购买的座位号 每个座位号用0和1表示 0:没有被购买 1:已经被购买

    (4)用户表是用来记录用户的基本信息的,主要有用户名、密码、手机号。另外还记录了用户的类型是普通用户还是管理员。详细说明如表3-4所示。

    表 3-4 用户表(user)

    序号

    表字段

    类型

    详细说明

    1 uid Int(11) 用户ID号,主键

    2 username Varchar(255) 用户名称

    3 phone Varchar(255) 用户的手机号码

    4 password Varchar(255) 用户的密码

    5 type Varchar(2) 用户的类型 0:普通用户 1:管理员

    (5)订单表是由场次表和用户名的多对多联系产生的。由此产生的另外的信息还有座位号。详细说明如表3-5所示。

    表3-5 订单表(flim_order)

    序号

    表字段

    类型

    详细说明

    1 fid Int(11) 订单ID号,主键

    2 sid Int(11) 场次ID号,外键

    3 uid Int(11) 用户ID号,外键

    4 seat Varchar(255) 购买的座位号 座位号用0和1对应 0:没有购买 1:购买了对应座位号

‘肆’ 用Java做一个演唱会在线订票系统需要创建哪几张Oracle数据库表

要根据你的需求来具体分析,先不要管数据库怎么设计,得先把需求了解清楚。每一个细节可能会涉及到哪些操作,哪些操作需要涉及到哪些信息,哪些信息需要对应哪些表。

‘伍’ 飞机订票系统设计 使用数据库来编写程序!

void dingpiao()//订票模块
{
int n;
char a[10];
do
{
search();//调用查询模块
printf("请输入您要订的机票数以回车键结束: ");
scanf("%d",&n);//读取所订机票数
if(n<0)
{
printf("请输入有效的机票数! ");//判断机票数是否出错
break;
}
if(s[i].count!=0&&s[i].count>=n)//判断是否出错
{
s[i].count=s[i].count-n;
save();//调用保存函数
printf("订票成功! ");
break;
}
if(s[i].count<n)//判断是否出错
{
printf("请输入有效的机票数: ");
break;
}
printf("是否继续? 请输入yes或no以回车键结束: ");//判断是否继续订票
scanf("%s",a);
}while(!strcmp(a,"yes"));//判断结束

}

void tuipiao()//退票模块
{
int n;
char a[10];
do
{
search();//调用查询模块
printf("请输入您要退的机票数目: ");
scanf("%d",&n);//输入所退票数
if(n<0) //判断票数是否有效
printf("请输入有效的机票数! ");
s[i].count=s[i].count+n;
save(); //调用保存模块
printf("退票成功! ");
printf("是否继续? 请键入yes或no以回车键结束: ");//判断是否继续退票
scanf("%s",a);
}while(!strcmp(a,"yes"));//判断并跳出循环

getchar();
}
void xiugai() //修改模块
{
struct xiu //定义结构体
{
int no;
char name1[20];
char name2[20];
char time[20];
int count;
}x[1];
char j[10];
char f[]="2008china";//设置密码
int n;
printf("请输入密码并以回车键结束: ");
scanf("%s",f);//读取密码
if(strcmp(f,"2008china")==0)//判断是否出错
{
read();//调用读取模块
do
{
printf( "请选择修改方式: "
"*1,按航班号修改: "
"*2,按航线修改: ");
printf("请在1---2中修改以回车键结束: ");
scanf("%d",&n);//读取修改方式
switch(n)
{
case 1:printf("请输入航班号: ");
scanf("%d",&x[0].no);//读取航班号
break;
case 2:printf("请输入起始站: ");
scanf("%s",x[0].name1);//读取起始站
printf("请输入终点站: ");
scanf("%s",x[0].name2);//读取终点站
break;
}

‘陆’ 那个我也想要一个数据库设计事例,就是火车售票管理SQL

目录
概述: 5
1. 需求分析 5
1.1 用户需求: 5
1.2 业务流程分析: 6
1.3 信息需求分析 6
1.4 功能需求分析: 7
2. (数据库)概念(模型)设计 8
2.1构思ERD的四条原则及根据这些原则相应得出的实体、联系及其属性: 9
2.2、系统具体E-R图: 9
3. (数据库)逻辑(模型)设计 10
3.1 一般逻辑模型设计: 10
3.2 具体逻辑模型设计: 11
4. 数据库物理设计与数据库保护设计 12
5. 处理功能设计 12
5.1 主控模块设计: 12
5.2 子模块设计: 13
6. 数据库应用系统的实现 14
6.1 数据库及其表结构的建立: 14
6.2 创建表的相关视图: 16
6.3 各表关系图, 16
6.4 数据输入:利用系统录入数据,如下图为各表内容: 17
6.5 模块实现: 18
7. 数据库应用系统运行 26
7.1 写出系统操作使用的简要说明。 26
7.2 按使用说明运行系统并打印出运行结果。 26
7.3 系统评价: 27

报告内容
概述:
随着国民经济快速发展, 人们出行、交通越来越频繁, 对服务的快捷、便利性要求也越来越高。从而对客运行业的建设与管理提出了更高的要求。为适应和推动客运行业的发展, 各种交通公司和部门开始广泛采用使用日趋成熟的计算机技术和数据库技术来实现票务信息的现代化管理,具有手工管理所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本底等。这些优点能够极大地提高信息管理和业务管理的效率。
本学生火车订票系统正是通过数据库存储信息实现高效率管理。该实验设计首先进行需求分析,然后在需求文档的指导下实现系统的功能,如操作员的信息管理功能及普通学生的火车信息查询、订票、退票等功能,最终实现的是学生购得一张自己满意的票券,同时力求通过数据库系统及计算机在其中的运用达到提高工作效率,节约人力资源的效果。

1. 需求分析
1.1 用户需求:
(一)、问题描述:
学生火车票定票系统
(1)背景:一年两次的火车票订票管理
(2)主要实现以下功能:
1)学生基本信息的管理,尤其是所在地
2)学生购票的基本信息,尤其是价钱和车票目的地
3)购票以后的分发管理
4)退票的管理
5)信息的统计和查询
6)操作员管理
(二)、目的及现状:
1)、实验目的:
数据库设计就是要使学生采用本课程中学习的数据库设计方法,运用其基本思路与主要图表工具完成一个自己所了解的业务的数据库应用系统信息需求分析与数据库的概念设计、逻辑设计、物理设计以及处理功能设计,用自己熟悉的数据库管理系统、程序设计语言及其相关开发工具实现该系统,并运行、评价、改进之;在此基础上严格按本大纲所附报告提纲撰写课程设计报告。通过本设计进一步弄懂数据库系统及其相关的基本概念,理解数据库系统的系统结构、主要特点,掌握数据库设计的原理、方法及其基本过程,初步具备数据库应用设计的能力,初步形成运用数据库应用系统解决管理决策中的实际问题的基本素质。
2)、现状和系统要求:
在传统模式下利用人工进行火车订票业务,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,给各相关部门工作人员带来了很大困难,严重影响了他们的工作效率。运用计算机技术和数据库技术来实现票务信息的现代化管理,具有手工管理所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本底等。这些优点能够极大地提高信息管理和业务管理的效率。
在本系统中,系统用户共有两种, 并根据用户权限的不同而实现不同的功能,如操作员
拥有添加、修改、删除某火车相关信息及修改自己的个人信息的功能。学生有对车票信息、、哪一车次哪天还剩余多少张票和自己所订票券的查询功能,订票功能及退票功能。系统利用计算机和数据库的高效率大大减轻了学校票点工作人员的劳动强度, 提高了各部门的工作效率。
1.2 业务流程分析:
(一)、描述系统的业务流程:
本系统共有两种用户, 根据用户权限的不同而实现不同的功能。
操作员的权限最大,他进入系统必须先登录。操作员可以添加、修改、删除某车票的相关信息,可以修改自己的个人信息;查询、删除学生的订票情况,确认学生是否已付款取票等。
学生可以按目的地的车次对车票信息进行查询,可以订票,订票时须录入自己的信息及所选择的车次,系统将检查该车次票数是否已订完或不足,若已订完或不足则提示错误信息并返回到订票界面,订票成功后将生成订票单。学生还可以对自己所订的票券即订票单进行查询,以及查询哪一车次哪天还剩余多少张票。用户付款和取票可在学校票点完成。
(二)、初步业务流程图:

1.3 信息需求分析
1.3.1 资料收集

1.3.2 事项分析:
在本火车票订票系统中,各资料的基本数据项列举如下:
学生资料:学号,姓名,密码,所在学院,专业,班级,电话,目的城市
车票基本信息:车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数
车次详细信息:ID号,车次号,途径站,票价,
订票单信息:订单号,订票人学号,订单时间,付款取票与否
订票具体信息:ID号,订单号,所得车次号,目的城市,订票数,总票价,取票时间
订票点信息:票点号,票点主任的员工号,联系电话,所在校区
操作员资料:员工号,票点号,密码,姓名,性别,电话
1.4 功能需求分析:
(一)、完善业务流程图:

(二)、功能层次图:
本系统共有两种用户, 根据用户权限的不同而实现不同的功能,如操作员查询、添加、修改、删除某火车相关信息及查询、修改自己的个人信息的功能。学生对车票信息、、哪一车次哪天还剩余多少张票和订票功能以及对自己所订票券的查询功能、退票功能。

2. (数据库)概念(模型)设计
2.1构思ERD的四条原则及根据这些原则相应得出的实体、联系及其属性:

① 原则1 (确定实体):能独立存在的事物,例如人、物、事、地、团体、机构、活动、事项等等,在其有多个由基本项描述的特性需要关注时,就应把它作为实体。
在本系统中,实体主要有学生、操作员、车票信息、车票详细信息表、订票单,订票详细信息表,订票点。
②原则2 (确定联系):两个或多个实体间的关联与结合,如主管,从属,组成,占有,作用,配合,协同等等,当需要予以关注时,应作为联系。实体间的联系可分为一对一、一对多、多对多等三类,在确定联系时还要确定其类型。
在本系统中,学生、车票信息、订票单和订票详细信息表之间存在“订购”的联系,一个车票信息可以被多个学生购买,而一个学生只可以购买多个车次所属的一到两张车票,它们之间的联系是一对多的“购买”联系,同时一次登录无论订多少车次只生成一张订票单。订票点和操作员之间存在“隶属”的联系,它们之间的联系是一对多的“隶属”联系;车票信息和车票详细信息表之间存在“包含”与被包含的关系;订票单和订票详细信息表之间也存在“包含”与被包含的关系。
③原则3 (确定属性):实体的属性是实体的本质特征。实体应有标识属性(能把不同个体区分开来的属性组),并指定其中一个作为主标识。联系的属性是联系的结果或状态。
从这条原则可得到实体和联系的属性如下:
学生(学号,姓名,密码,所在学院,专业,班级,电话,目的城市)
车票基本信息(车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数)
车次详细信息(ID号,车次号,途径站,票价)
订票单信息(订单号,订票人学号,订单时间,付款取票与否)
订票具体信息(ID号,订单号,所得车次号,目的城市,订票数,总票价,取票时间)
订票点(票点号,票点主任的员工号,所在校区,电话)
操作员(员工号,票点号,密码,姓名,性别,电话)

④原则4(一事一地):信息分析中得到的基本项要在且仅在实体联系图中的一个地方作为属性出现。
根据以上的分析,可以画出本系统的原始ERD的基本结构。如

2.2、系统具体E-R图:

3. (数据库)逻辑(模型)设计
3.1 一般逻辑模型设计:
(一)、由ERD导出一般关系模型的四条原则:
原则1(实体转换为关系模式):ERD中每个独立的实体转换为一个关系模式,实体的属性组成关系的属性,实体的主标识转换成关系的主码。
原则2(从实体及其主从联系转换为关系模式):ERD中一个从实体及其主从联系转换为一个关系,从实体的属性及其主实体关系的属性组成的属性,其主实体关系的主码,在主从关系联系为一对多联系时还要加上可把同一主实体个体所对应的从实体个体区分开来的,从实体的一组属性,作为该关系的主码。对子类实体可作类似一对一联系的从实体的转换。
原则3(一对多联系在关系模式中的表示):ERD中的一个一对多联系通过在其“多”实体关系上增加“1”实体关系的主码(作为外码)和联系本身的属性来表示。
原则4(多对多联系转换为关系):ERD中的一个多对多联系转换为一个关系,其被联系实体关系的主码和该联系本身的属性一起组成的属性,被联系关系的主码组成该关系的复合主码。

(二)、数据库初步构思的关系框架:
通过ERD转换为一般关系模型四条原则分析,得到须在数据库中进行存储的一般关系模型如下(带下划线的为主码,带#的为外键):
学生(学号,姓名,密码,所在学院,专业,班级,电话,目的城市)
车票基本信息(车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数)
车次详细信息(ID号,车次号#,途径站,票价)
订票单信息(订单号,订票人学号#,订单时间,付款取票与否)
订票具体信息(ID号,订单号#,所得车次号#,目的城市,订票数,总票价,取票时间)
订票点(票点号,票点主任的员工号#,所在校区)
操作员(员工号,密码,姓名,性别,电话)
3.2 具体逻辑模型设计:
(1)、Student表:用来保存学生信息:
项名 类型 长度 小数位 值域 主键 外键 空键
学号 字符 12 是 非空
姓名 字符 20 非空
密码 字符 12 非空
学院 字符 40 非空
专业 字符 30 非空
班级 数据 4 0 >0 非空
电话 字符 12 非空
目的城市 字符 30 非空
(2)、Ticket表:用来保存车票信息表
项名 类型 长度 小数位 值域 主键 外键 空键
车次号 字符 20 是 非空
出发站 字符 30 非空
开车时间 日期 8 非空
到达站 字符 30 非空
到达时间 日期 8 非空
车票种类 字符 20 非空
余票数 数据 8 0 >0 非空
(3)、Citysite表:用来保存车票详细信息表:
项名 类型 长度 小数位 值域 主键 外键 空键
ID号 整数,自动编号 8 是 非空
车次号 字符 20 是 非空
途径城市 字符 30 非空
票价 decimal 非空

(4)、Ticketsite表:用来保存订票点表:
项名 类型 长度 小数位 值域 主键 外键 空键
票点号 整数,自动编号 8 0 是 非空
票点主任员工号 整数,自动编号 8 0 是 非空
联系电话 字符 12 非空
所在校区 字符 40 非空
(5)、Admin表:用来保存操作员表:
项名 类型 长度 小数位 值域 主键 外键 空键
员工号 整数,自动编号 8 0 是 非空
用户名 字符 20 非空
密码 字符 12 非空
姓名 字符 20 非空
性别 字符 4 非空
电话 字符 12 非空
(6)、Book表:用来保存订单表:
项名 类型 长度 小数位 值域 主键 外键 空键
订单号 整数,自动编号 8 0 是 非空
学号 字符 是 非空
订单时间 字符 非空
付款取票与否 整数 2 0 非空
(7)、Ticket表:用来保存取票单表:
项名 类型 长度 小数位 值域 主键 外键 空键
ID号 整数,自动编号 8 0 是 非空
取票号 字符 8 0 是 非空
车次号 字符 是 非空
目的城市 字符 非空
订票数 数据 8 0 >0 非空
总票价 Decimal 非空
取票时间 日期 8 非空
4. 数据库物理设计与数据库保护设计
根据表的结构关系,本系统采用SQL Server 2000数据库。SQL Server 2000是微软公司关系型数据库产品,它是在由MS SQL Server 7.0建立的坚固基础之上产生的。客户的需求极大的推动了该产的革新,SQL Server2000在易用性、可缩放性和可靠性,以及数据仓库等诸多方面有了很大的增强。这使得SQL Server 2000在很多数据库产品发展最快的应用领域(如电子商务、移动计算、分支自动化、商业级应用和数据交换中心等)中成为领先者
在数据库中创建表的同时须创建相关的索引。索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。本数据库表较为简单,且每个表中定义主键约束或者唯一性键约束,已经间接创建了索引,故无需再创建索引。
5. 处理功能设计
5.1 主控模块设计:

(1)、登录系统模块:
在登录窗体界面中,你可以输入代码和密码,选择你的身份(操作员或系统管理员),确认后就可进入主界面窗体。如果你是学生,且还没注册,可以在此窗体界面上点击“注册”,在注册界面输入所要求的项,确定后重新返回登录界面,用你刚注册的账号登录进入主界面。
在主界面中包含上述模块图的几部分,根据身份,即是用户或者管理员,对应权限不同,分为不同的主界面,即用户主界面和管理员主界面。
(2)、系统设置模块图:
用户:在此模块用户可以查询、修改自身注册信息以及退出登录,退出系统后将返回登录界面。

管理员模块:在此模块管理员除了拥有用户的各项设置外还可以注册新的管理员,但为了安全起见,此功能只有当登录人是票点主任时才可执行。

5.2 子模块设计:
5.2.1、管理员模块
1、车票信息管理模块:在此模块,管理员可以执行车票信息录入、查询、删除和修改功能,不过删除和修改功能须当该车次没有被预订的情况下才可执行。

2、订票管理模块:在此模块,管理员可以查询所有订单情况、已付款取票和未付款取票的订单情况,还可以按学号查询某学生的订票情况以及各种统计信息,并在学生来付款取票时执行“付款”操作。另外还可以在订单已付款或学生取消订单时删除订单。

5.2.2、用户模块:
1、订票管理模块:在此模块,用户可以查询车票信息和自身订票情况。查询车票情况分为按车次、按目的地、按起始站—目的站查询,当查询到自身所想要的车票时即可订票,但注意预定票的目的地须与学生家乡所在城市相符,否则系统不允许订票;查询自身订票情况包括订单信息及金额统计,还须注意订票信息上要求的取票期限,订票人须在规定期限内去所在校区的票点付款取票,逾期票点工作人员将不予处理。

2、用户小贴士模块:在这里,用户将了解本订票系统的订票流程及相关规定及用户订票后付款取票地点的信息等。

6. 数据库应用系统的实现
6.1 数据库及其表结构的建立:
利用SQLServer企业管理器创建数据库Tickets,然后创建表:
1、学生表Book
create table Student
(Sno varchar(12) primary key, Sname varchar(20) not null,
Ssex varchar(4) not null, Spw varchar(12) not null, //密码
Sadm varchar(40) not null, //学院
Sdept varchar(30) not null, Sclass numeric(4) not null,
Stel varchar(12) not null, //电话
Semail varchar(50) not null, Shcity varchar(30) not null //所在地
);
2、车票信息表Ticket
create table Ticket
(Tno varchar(20) primary key, //车次号
Startcity varchar(30) not null, Starttime varchar(20) not null,
Endcity varchar(100) not null, Endtime varchar(20) not null,
Ttype varchar(20) CHECK (Ttype IN('硬座','软座','硬卧','软卧')),
Tickets int not null //票数
);
3、车次站次信息表Citysite
create table Citysite
(Cityno numeric(8) identity(1,1), //票点号
Tno varchar(20), City varchar(100),
Tprice decimal not null, //票价
primary key (Cityno,Tno),
foreign key (Tno) references Ticket(Tno) on delete cascade
)
4、订票单表Book
create table Book
(Bno numeric(8) identity(1,1) primary key, Sno varchar(12),
Maketime datetime not null, judge int,
foreign key (Sno) references Student(Sno),);
5、订票详细信息表Bookno
create table Bookno
(ID numeric(8) identity(1,1) primary key,
Bno numeric(8), Tno varchar(20), City varchar(100),
Booktime varchar(20) not null, Ticketnums int not null,
Price decimal not null, //票价
Pickdate datetime not null, foreign key (Tno) references Ticket(Tno),
foreign key (Bno) references Book(Bno));
6、操作员表Operater
create table Operater
(Adname varchar(20) primary key, //登录用户名
Adpw varchar(12) not null, //登录密码
Opname varchar(20) not null, //员工真实姓名
Opsex varchar(4) not null, Optel varchar(12) not null,
Opemail varchar(50) not null);
7、订票点表Ticketsite
create table Ticketsite
(Siteno numeric(8) primary key identity, //票点号
Adname varchar(20), // 票点主任登录名
Sitetel varchar(12) not null, Siteaddr varchar(40),
foreign key (Adname) references Operater(Adname));
//为安全起见,学校各校区订票点内容的添加要以直接输入数据库的方式进行
insert into Ticketsite(Adname,Sitetel,Siteaddr) values('linyp','870432','龙洞校区行政楼205')
insert into Ticketsite(Adname,Sitetel,Siteaddr) values('admin','87084432','大学城校区E区205')
6.2 创建表的相关视图:
1、创建V_Book视图,得到对于某种车票的订票人数和订票张数
create view V_Book(Tno,stu_no,sumticket)
as
select Tno,count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno group by Tno
2、创建W_Book视图,得到对于所有订票学生的人数和订票总张数
create view W_Book(stu_nums,sumtickets)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno
3、创建P_Book视图,得到对于已付款取票的人数和车票总张数
create view P_Book(cout_no,cout_nums)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno and judge=1
4、创建M_Book视图, 得到对于某一订票的总金额
create view M_Book(Allprice)
as select sum(Tprice*Ticketnums) from Book,Bookno,Citysite
where Bookno.Bno=Book.Bno and Bookno.Tno=Citysite.Tno and Bookno.City=Citysite.City
6.3 各表关系图,

易知表Ticket与表Citysite之间是父表与子表的关系:

表Book与表Bookno之间也是父表与子表的关系:

它们之间都是父表对子表的一对多的关系。
根据表之间的结构关系图,可以得出各表的完整性约束条件如下图:
表名 主键列名 外键
外键列名 参照表
Student Sno 无
Ticket Tno 无
Citysite Cityno Tno Ticket
Book Bno Sno Student
Bookno ID Bno,Tno Book,Ticket
Operater Adname 无
Ticketsite Siteno Adname Operater

6.4 数据输入:利用系统录入数据,如下图为各表内容:

6.5 模块实现:
本次系统设计我前台采用JSP技术,后台采用SQL Server 2000,操作系统采用Windows XP。
JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

‘柒’ 怎么用数据库语言做订票系统

包含的表主要有
列车(列车编号,车种,始发站,始发站,终到站,发时,到时,里程)
车站(车站id,车站名)
经过(列车编号,车站名,站次,里程,到时,发时)
车票(车票编号,车次,发站,到站,发站次,到站次,发时,到时,座位类型,座位号,车票日期,票价)
主要是这四个表,查询插入操作有些复杂不过都能完成
详细看列车票务系统数据库课程设计说明书,文库里有

‘捌’ 数据库管理系统怎么做譬如说火车票订票管理系统!

设计数据库,
开发前台界面,连接数据库数据(查询、插入、增加,更新等操作)

热点内容
安卓手机用什么软件传软件到苹果 发布:2024-10-09 09:11:02 浏览:367
苹果安卓怎么传抖音 发布:2024-10-09 09:10:18 浏览:822
连接电视路由器如何设置密码 发布:2024-10-09 09:10:16 浏览:781
c语言取模与取余 发布:2024-10-09 08:52:51 浏览:267
安卓怎么像苹果一样滑动返回 发布:2024-10-09 08:20:46 浏览:758
gp数据库行 发布:2024-10-09 08:10:37 浏览:417
会计公需课登录密码是什么 发布:2024-10-09 08:08:20 浏览:800
wps怎么怎么加密码忘了怎么办 发布:2024-10-09 07:54:30 浏览:992
埋堆堆怎样更改缓存路径 发布:2024-10-09 07:48:12 浏览:550
壹号本1s加存储 发布:2024-10-09 07:43:51 浏览:546