机票管理数据结构课程设计==
数据结构课程设计--航班信息查询与检索系统

一、设计题目设计一个航班信息查询与检索系统。
二、基本要求1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。
2、要有输入模块3、对航班信息进行排序与查找。
三、运行环境CPU:奔腾3;操作系统:Windows 98;编程工具:TC2.0。
四、算法设计思想1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
2、流程图3、各函数说明(1)、一趟数字字符分配函数void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)(2)、一趟数字字符收集函数void collect(slnode *sl,int i,arrtype_n f,arrtype_n e)(3)、一趟字母字符分配函数void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e)(4)、一趟字母字符收集函数void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e)(5)、链式基数排序函数void radixsort(sllist &l)(6)、按指针链重新整理静态链表void arrange(sllist &l)//重新整理(7)、二分查找函数int binsearch(sllist l,keytype key[]) (8)、顺序查找函数void seqsearch(sllist l,keytype key[],int i) (9)、查询检索菜单控制程序void searchcon(sllist l)(10)、录入航班数据函数void inputdata(sllist &l)(11)、主函数void main()五、源代码#include "stdafx.h"#include <stdio.h>#include <string.h>#define maxspace 100#define keylen 7#define radix_n 10#define radix_c 26typedef char keytype;typedef struct{char start[6];char end[6];char sche[10];char time1[5];char time2[5];char model[4];int price;}infotype;typedef struct{keytype keys[keylen];infotype others;int next;}slnode;typedef struct{slnode sl[maxspace];int keynum;int length;}sllist;typedef int arrtype_n[radix_n];typedef int arrtype_c[radix_c];void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,p;for(j=0;j<radix_n;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<radix_n-1){for(j=j+1;j<radix_n-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,p;for(j=0;j<radix_c;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<radix_c-1){for(j=j+1;j<radix_c-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void radixsort(sllist &l)//链式{int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0;for(i=l.keynum-1;i>=2;i--){distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);}for(i=1;i>=0;i--){distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);}}void arrange(sllist &l) //重新整理{int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<i)p=l.sl[p].next;q=l.sl[p].next;if(p!=i){temp=l.sl[p];l.sl[p]=l.sl[i];l.sl[i]=temp;l.sl[i].next=p;}p=q;}}int binsearch(sllist l,keytype key[]){int low,high,mid;low=1;high=l.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,l.sl[mid].keys)==0)return mid;else if(strcmp(key,l.sl[mid].keys)<0)high=mid-1;elselow=mid+1;}return 0;}void seqsearch(sllist l,keytype key[],int i){int j,k,m=0;printf("*************************************************************\n"); printf("* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); for(j=1;j<=l.length;j++){switch(i){case 2:k=strcmp(key,l.sl[j].others.start);break;case 3:k=strcmp(key,l.sl[j].others.end);break;case 4:k=strcmp(key,l.sl[j].others.time1);break;case 5:k=strcmp(key,l.sl[j].others.time2);break;}if(k==0){m=1;printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[j].keys,l.sl[j].others.start,l.sl [j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.price);}}if(m==0)printf("* 无此航班信息,可能是输入错误!*\n");printf("*************************************************************\n"); }void searchcon(sllist l){keytype key[keylen];int i=1,k;while(i>=1&&i<=5){printf("\********************\n");printf(" * 航班信息查询系统*\n");printf(" ********************\n");printf(" * 1.航班号*\n");printf(" * 2.起点站*\n");printf(" * 3.终点站*\n");printf(" * 4.起飞时间*\n");printf(" * 5.到达时间*\n");printf(" * 0.退出系统*\n");printf(" ********************\n");printf(" 请选择(0-5):");scanf("%d",&i);printf("\n");switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=binsearch(l,key);printf("*************************************************************\n"); if(k==0)printf("* 无此航班信息,可能是输入错误!*\n");else{printf("* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);}printf("*************************************************************\n"); break;case 2:printf("输入要查询的航班起点站名:");scanf("%s",key);seqsearch(l,key,i);break;case 3:printf("输入要查询的航班终点站名:");scanf("%s",key);seqsearch(l,key,i);break;case 4:printf("输入要查询的航班起飞时间:");scanf("%s",key);seqsearch(l,key,i);break;case 5:printf("输入要查询的航班到达时间:");scanf("%s",key);seqsearch(l,key,i);break;case 0:printf("\n\n\n 再见\n\n\n");}}}void inputdata(sllist &l){int i=++l.length;char yn='y';while(yn=='y'||yn=='Y'){printf("航班号起点站终点站航班期起飞时间到达时间机型票价\n"); scanf("%s%s%s%s%s%s%s%d",l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price);++i; getchar();radixsort(l);arrange(l);printf("继续输入吗?y/n:");scanf("%c",&yn);}l.length=i-1;}void main(){sllist l;l.keynum=6;l.length=0;inputdata(l);searchcon(l);}六、运行结果1、录入航班信息编译后运行,显示:航班号起点站终点站航班期起飞时间到达时间机型票价录入:MU4594昆明西安 1.3.5.6 10151140 3281160↙显示:继续输入吗?y/n:录入:y↙显示:航班号起点站终点站航班期起飞时间到达时间机型票价录入:SC7425青岛海口 1.3.6 19202120 DH41630↙显示:继续输入吗?y/n:录入:n↙2、航班信息查询录入航班信息后,屏幕显示:********************* 航班信息查询系统********************** 1.航班号** 2.起点站** 3.终点站** 4.起飞时间** 5.到达时间** 0.退出系统*********************请选择(0-5):录入:1↙显示:输入要查询的航班号(字母要大写):录入:MU4594↙显示:航班号起点站终点站航班期起飞时间到达时间机型票价MU4594-昆明-西安-1.3.5.6 -1015 -1140 -328 -1160 录入:2↙显示:输入要查询的航班起点站名:录入:青岛↙显示:航班号起点站终点站航班期起飞时间到达时间机型票价SC7425-青岛-海口-1.3.6 -1920-2120 -DH4-1630↙录入:2↙显示:输入要查询的航班起点站名:录入:广州↙显示:* 无此航班信息,可能是输入错误!*七、收获与体会本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。
数据结构程序设计机票管理系统

数据结构程序设计机票管理系统机票管理系统是一种用于记录和管理机票信息的软件系统。
它可以帮助旅行代理人或航空公司方便地管理和处理所有相关的机票信息,包括航班信息、乘客信息、座位预订等。
本文将介绍机票管理系统的设计和实现。
首先,我们需要定义几个核心的数据结构来表示机票管理系统中的各种对象。
这些数据结构包括:1.航班信息:包括航班号、起飞时间、到达时间、出发地和目的地等信息。
3.座位信息:包括座位号、票价、座位类型等信息。
接下来,我们需要设计一个合适的数据结构来存储和管理机票信息。
可以使用数据库来存储这些信息,使用关系数据库管理系统(如MySQL)或非关系数据库(如MongoDB)来存储和查询数据。
我们可以创建几个数据库表来存储不同类型的数据。
例如,可以创建一个航班信息表、乘客信息表和座位信息表。
每个表都有相应的字段来保存具体的信息。
对于程序设计方面,可以使用面向对象的编程语言来实现机票管理系统。
我们可以创建几个类来表示航班、乘客和座位等对象。
每个类都有相应的属性和方法来对数据进行操作。
例如,可以创建一个Flight类来表示航班信息。
Flight类可以包含航班号、起飞时间、到达时间、出发地和目的地等属性。
它还可以包含方法来查询和更新航班信息。
类似地,可以创建Passenger类来表示乘客信息,Seat类来表示座位信息。
这些类可以与数据库表中的数据进行对应,可以为每个类创建对应的表和字段。
在机票管理系统中,用户可以使用不同的功能来查询和管理机票信息。
1.查询航班信息:用户可以根据航班号、起飞时间和目的地等条件来查询航班信息。
2.预订座位:用户可以根据航班信息选择座位,并填写乘客信息进行预订。
3.取消座位:用户可以取消已预订的座位,并将座位标记为可用状态。
4.修改航班信息:管理员可以修改航班的起飞时间、到达时间和票价等信息。
为了实现这些功能,我们可以在程序中定义相应的逻辑和用户界面。
用户可以通过命令行界面或图形界面与机票管理系统进行交互。
数据结构课程教学设计-飞机订票系统设计与实现(里面附有源代码)

2.2.3 客户退票模块
void cancel(passengerList *&PList,flightnode *&h)函数调用intdelete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num)函数,将相应的顾客结点删除,并修改相应的航班信息。
int isFull; //航班是否满仓
struct flightnode *next;//指向下一个结点
}flightnode;//航班结点
(2)客户的资料:为了便于插入、删除和修改,其采用项:
姓名
证件号
航班号
订票数量
订单号
void find_same_flight(flightnode *l,char *flight_num):在客户订票时,当客户输入的航班号对应的航班已满仓时,提供其他可选航班并输出显示。
void cancel(passengerList *&PList,flightnode *&h):完成客户退票,将客户的订单从客户链表中删除,并修改相应的航班信息。
(2)可以查询某个航线的情况:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞抵达城市,查询飞机航班情况;
数据结构课程设计之飞机订票系统

数据结构课程设计之飞机订票系统青岛理工大学数据结构课程设计报告题目: 飞机订票系统院(系):学生姓名: 班级: 学号:起迄日期: 指导教师:指导教师评语: 成绩:签名:年月日2010—2011年度第 2 学期一、需求分析1.问题描述:设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。
2.基本功能1,录入航班信息。
没个航班的信息包括:航班号,起飞、抵达城市,座位总数,剩余座位数。
数据由使用者输入。
数据存储在txt文件中,采用线性表的链式结构。
2,加载航班和客户信息。
可以自动加载保存在txt文件中的航班和客户的信息。
3,查询航班。
可以通过输入航班号,查询该航班的所有信息。
可以通过输入起飞抵达的城市,查询航班的信息。
4,订票。
客户的信息包括:姓名,证件号,所订票的航班号,座号。
用户输入要订票的航班号,如果该航班未满,则订票成功,并记录客户的信息。
如果该航班已满,则订票失败,输出所有未满的航班信息,供用户选择。
5,退票。
删除退票用户的订票信息,相应的航班的剩余票数增加1。
6,修改航班信息。
用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。
7,保存操作。
把当前的航班信息,和用户信息分别保存在txt文件中。
8,输出所有客户信息。
按一定的格式输出用户的姓名,证件号码,航班号,座号。
9,输出所有航班信息。
按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。
0,退出系统。
3.输入输出在控制台下,根据提示输入要完成功能的标号,然后在提示下选择性的输入航班号、起飞抵达地、证件号码,或者姓名等。
系统会根据用户的输入输出相应的航班信息或者用户信息。
二、概要设计1.设计思路:对于航班和用户,分别定义不同的数据结构,并且采用线性表的链式结构进行存储。
然后根据要完成的功能,分模块用函数实现。
所用到的算法主要有:链表的创建,增加,遍历,插入,删除。
数据结构课程设计航空订票系统

航空客运订票系统的设计与实现一、设计目的:设计一个航班订票系统,提高对信息管理、信息查找和排序算法的应用能力。
二、问题的描述:航空客运订票的业务包括查询航线和客票预定的信、客票预定和办理退票等,设计一个程序以使上述任务借助计算机完成。
三、数据结构的设计://航线结构struct airline{char cityname[15]; //终点站char airnum[15]; //航班号char planenum[15]; //飞机号char qjtime[15]; //起降时间int price; //价格int disc; //折扣int num; //总座位数int rempla; //剩余位置(票数)linklist *order;linkqueue wait;}line;//定义链表队列typedef struct wait{char name[6];int ordnum;struct wait *next;} qnode,*qptr;//无票时其余等候买票队列typedef struct listqueue{qptr front; //对头qptr rear; //队尾}linkqueue;typedef struct order{char name[15]; //客户姓名char crenum[15]; //证件号char airnum[15]; //航班号char planenum[15]; //飞机号int ordnum; //订票数量int rempla; //剩余位置int num; //总座位数char qjtime[15]; //起降时间struct order *next;}linklist;建立了航班的终点站,航班号,飞机号,起降时间,价格,折扣,总座位数,剩余位置,指向客户信息truct order指针,等候买票的队列的结构体信息。
建立了客户的客户姓名,证件号,航班号,飞机号,订票数量,剩余位置,总座位数,起降时间,链接下一位的指针的结构体信息。
(完整版)数据结构课程设计-航空客运订票系统

嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:1503指导老师:***实验题目:航空客运订票系统学号:姓名:上机时间:1.需求分析(1)航空管理。
每条航班所涉及的信息有:终点站名、航班号、飞机型号、飞行周日(星期几)、乘员定额、余票量。
(2)客户管理。
有关订票的客户信息(包括姓名、订票量、航位等级(1,2和3))以及等候替补的客户名单(包括姓名、所需票量)。
(3)系统实现的主要操作和功能。
系统实现的主要操作和功能如下:①查询航班。
根据旅客提出的终点站名输入下列信息:航班号、飞机型号、飞机日期、余票额。
②承办订票业务。
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队后补。
③承办退票业务。
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先查询排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则询问其他排队候补的客户。
2.概要设计1)本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面2)存储结构设计本系统主要采用链表结构类型存储航班信息和订票的乘客信息。
航班信息链表结点由10个分量构成,乘客信息链表由5个分量构成。
3)系统功能设计本系统分为以下5个功能模块。
(1)航班管理。
航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航班。
(2)订票办理。
在添加了航班的基础上可办理订票业务。
乘客根据所需航班输入终点站名和订票量订票。
如果订票量超过余票量,则会提示是否成为候补乘客;如果订票成功,则会要求输入订票乘客的姓名及所订票的舱位等级。
(3)退票办理。
已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。
、(4)乘客管理。
可以查看已经订票的乘客信息和候补乘客的信息。
航空订票系统C++数据结构课程设计报告

一.需求分析:通过此系统可以实现如下功能:1.航班信息录入每个航班信息包括航班号、起飞时间、降落时间、起飞地点、将落地点、票价、折扣、剩余票量。
通过剩余票量可以确定该航班是否已满。
2.航班信息查询通过航班号或者起飞地点、降落地点查询所需要的航班信息。
3.订票输入姓名和所要订的航班的航班号订票。
4.退票输入姓名和所订的航班的航班号办理退票。
5.修改航班信息输入航班号修改该航班的起飞和降落时间以修改航班的起降时间。
6.退出退出的同时将信息写入文件。
二.总体设计:结构体:struct flight //航班信息{int a1; //航班号string a2; //起飞时间string a3; //降落时间char a4[10]; //起飞城市char a5[10]; //降落城市int a6; //价格int a7; //票价折扣int a8; //余票}fl[10];struct customer //客户信息{char name[10]; //定义字符型数组姓名name[10]int seat; //定义整型变量座位号seatint num; //定义整型变量航班号numchar no[18]; //证件号noint ps; //订票数psstring qfs; //起飞时间qfsstring jls; //降落时间jlschar qfd[10]; //起飞城市qfdchar jld[10]; //降落城市jldint pj; //票价pj}cu[200];使用的函数:void luru(); //声明录入函数void chaxun(); //声明查询函数void chaxun1(); //声明查询方式1函数 void chaxun2(); //声明按查询方式2函数 void dingpiao(); //声明订票函数 void tuipiao(); //声明退票函数 void xiugai(); //声明修改函数 void menu(); //声明主菜单函数 void duqu(); //声明文件读取函数 void tuichu(); //声明退出并保存函数通过各个函数的调用以实现航班信息录入,航班信息查询,订票,退票,修改航班信息。
数据结构课程设计飞机票订票系统大学论文

学号成都理工大学计算机科学与技术系数据结构课程设计设计说明书题目订票系统学生姓名班级成绩指导教师(签字)计算机科学与技术系2016 年9 月20 日目录第1章问题描述 (1)(1)录入: (1)(2)查询: (1)(3)订票: (1)(4)退票: (1)1、开发环境 (2)2、组成框图 (2)3、流程图 (3)第3章详细设计 (4)1.根据飞机订票系统的可设要求,要实现以下功能: (4)2.具体的方法及函数调用的思想: (4)struct://它相当于一种记录 (4)3.方法的实现: (5)1)input( ); //录入 (5)2)find( ); //查询,按终点站来查询 (6)3)string time(short begin_hour,char begin_minute); //调用系统时间 (6)4)order( ); //办理订票函数 (6)5)refund( ); //办理退票函数 (6)第4章测试结果及分析 (7)执行结果: (7)参考文献 (10)附录:源代码 (10)1第1章问题描述通过此系统可以实现如下功能:(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;(3)订票:可以订票,如果该航班已经无票,可以提供相关可选择航班;(4)退票:订票数量及航班情况。
第2章概要设计1、开发环境系统环境:Microsoft Windows®10 专业版开发环境:Microsoft Visual Studio 2015开发平台:Win64开发语言:C++硬件环境:(1) CPU:Intel Core i5(2)内存:4GB(3)显示卡:NVIDIA GeForce GTX950M2、组成框图3、流程图第3章详细设计1.根据飞机订票系统的可设要求,要实现以下功能:(1)录入:录入航班情况(2)查询:可以查询某个航线的情况可以输入抵达城市,查询飞机航班情况;(3)订票:1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北工业大学 计算机科学与软件学院 《数据库原理》课程实验报告 题 目: 机票管理数据结构课程设计
年 月 日 角色 学号 姓名 班级 承担工作 组长 108400 XXX 网络C102 第一部分 组员 108456 XXX 网络C102 第二部分 组员 108610 XXX 网络C102 第五部分 组员 108664 XXX 网络C102 第三部分 组员 108438 XXX 网络C102 第四部分 组员 108581 XXX 网络C102 第六部分 机票预订系统 1 需求分析 为方便旅客,某航空公司拟开发一个机票预定系统。旅客可通过旅行社或机场前台向该系统查询航班情况(按目的地、起飞时间、航班班次等)。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,打印取票通知和账单,旅客在收到取票通知和账单后可交费并于飞机起飞前24小时凭取票通知和账单到机场前台取票,经系统校对信息无误后打印机票给旅客,旅客也可以直接到机场前台购票。旅客也可向系统提出退票要求,系统针对具体情况计算手续费后进行相应退票处理。 1.1系统功能分析 本系统设有三部分, 分为旅行社登录部分、机场前台登录部分和管理员登陆部分。不同部分通过不同的用户名进入机票预订系统的不同界面进行操作。 1)旅行社界面 查询:可对航班信息进行查询操作; 预订:可对旅客选定的航班进行预定操作并记录旅客预定信息; 帮助:提供系统使用帮助文档; 退出:关闭当前页面。 2) 机场前台界面 查询:可对航班信息进行查询操作; 售票:可对旅客选定的航班进行操作记录旅客信息并打印机票; 取票:根据旅客提供的订单号核实旅客预定信息,打印机票; 退票:根据旅客提供的订单号核实旅客预定信息,为旅客提供退票服 务; 帮助:提供帮助文档,方便旅客使用该系统; 退出:关闭当前页面。 3)系统管理员界面 查询机票信息:可对航班信息进行查询操作; 录入/修改机票信息:可对旅客信息进行添加、修改、浏览操作; 删除机票信息:可对旅客订票信息进行删除操作; 帮助:提供系统使用帮助文档; 退出:关闭当前页面。 机票预订系统主功能图: 机票预订系统数据流图:
3.机票预订系统数据字典 在数据流图的基础上,定义数据字典。数据字典是关于数据库中数据的描述,它的作用是在软件分析和设计过程中为有关人员提供关于数据描述信息的查询,以保证数据的一致性。下面举例说明数据字典的定义。 数据项以“订单号”为例。描述如下: 数据项名:订单号 别名:订单号 含义:唯一标识旅客预订的机票信息 类型:数字型 取值范围:0000000000至999999999 取值含义:标示订单
数据结构以“fly表” 为例,描述如下: 数据结构名:fly表 含义说明:定义了一个航班的有关信息 组成:航班号,日期,起飞时间,到达时间,出发地点、到达地点,票价,票余量
数据存储以“预定机票信息表” 为例,描述如下: 数据存储名:lvke表 说明:旅客信息表情况 流出数据流:查询旅客信息 流入数据流:填写订票信息 数据描述:身份证号,姓名,性别,联系电话,订单号,日期,目的地,座位号 二.机票预订系统概念结构设计 根据需求分析,我们知道机票预订系统的实体有:航班和旅客。 航班实体的属性有:航班号,日期,航班起飞时间,航班到达时间,目的地,票价,票余量 旅客实体的属性有:身份证号,姓名,联系电话,航班号,日期,目的地,座位号 他们之间有M:N的订购关系,即一旅客可以定多个航班,一个航班也可以被多个旅客订购。 按照以上机票预定系统总框架图,设计实体属性图以及局部E-R图 系统总结构设计视图E-R图 三.机票预订系统逻辑结构设计 1.E-R图向关系模型的转换 将图3.4总体概念结构E-R图转化成关系模型。 旅行社(账号,密码)
订单信息(订单号,航班号,过期时间,票价) 旅客信息(旅客姓名,性别,身份证号,联系方式,订单号,航班号) 此关系模型包含关系“包含”所对应的关系模型 机场前台(账号,密码) 系统管理员(账号,密码) 机票信息(航班号,起飞日期,起飞地点,到达地点,起飞时间,到达时间,座位类型,机票价格,系统管理员账号) 此模型包含关系“管理”所对应的关系模型 预定(旅行社账号,订单号,航班号,过期时间,票价) 查询(旅行社账号,航班号) 售票(机场前台账号,订单号,航班号) 2.数据模型的优化 1、确定数据依赖 退票信息(订单号,旅客姓名,电话号,身份证号)根据这个关系写出数据依赖 订单号→旅客姓名,订单号→电话号,订单号→身份证号 旅客(旅客姓名,身份证号,电话号,性别,工作单位) 旅客姓名→身份证号,旅客姓名→电话号,旅客姓名→性别,旅客姓名→工作单位 航班信息表(航班号,起飞地,目的地,起飞时间) 航班号→起飞地,航班号→目的地,航班号→起飞时间 取票通知单(旅客姓名,取票时间,航班号,座位号,机票类型) 旅客姓名→取票时间,旅客姓名→航班号,旅客姓名→座位号, 旅客姓名→机票类型 航班座位信息表(座位号,航班号,座位信息,机票类型) (座位号,航班号)→座位信息,(座位号,航班号,座位信息)→机票类型 2、 对各关系模式间数据依赖进行极小化处理,消除冗余 订单号→旅客姓名,订单号→电话号,订单号→身份证号,旅客姓名→性别 旅客姓名→工作单位,旅客姓名→取票时间,旅客姓名→航班号 旅客姓名→座位号,旅客姓名→机票类型,航班号→起飞地,航班号→目的地 航班号→起飞时间,(座位号,航班号)→座位信息 3、 看这些模式是否符合要求,确定是否要对某些模式进行合并或者分解 最终分解成第三范式: (订单号,电话号,身份证号)(订单号,旅客姓名)(旅客姓名,取票时间,性别,工作单位,机票类型)(旅客姓名,航班号)(旅客姓名,座位号)(航班号,座位号,机票类型)(航班号,起飞地,目的地,起飞时间)
四.机票预订系统物理结构设计 机票预订系统数据库(access)各个表设计如下:
机票预订系统旅客信息表(lvke) 字段名 数据类型 长度 约束 姓名 文本 50 不为空 性别 文本 2 不为空 身份证号 数字 20 不为空 电话号 数字 11 不为空 订单号 数字 10 主键
机票预订系统航班信息表(fly) 字段名 数据类型 长度 约束 航班号 文本 50 主键 起飞时间 时间/日期 不为空 到达时间 时间/日期 不为空 出发地点 文本 50 到达地点 文本 50 不为空 票价 数字 不为空 票余量 数字 不为空
五.部分实验代码: 5.1添加: aConnection.Open(); string strSQL1 = "select * from fly where 航班号='" + textBox1.Text.Trim() + "'"; OleDbCommand comm1 = new OleDbCommand(strSQL1, aConnection); if (null != comm1.ExecuteScalar()) MessageBox.Show("已有此航班,请重新输入", "提示"); else {
try { //aConnection.Open(); String strSQL = "INSERT INTO fly(" + "起飞日期,航班号,起飞时间,到达时间,起飞地点,到达地点,头等舱票价,公务舱票价,经济舱票价,头等舱余票,公务舱余票,经济舱余票) " + "VALUES('" + dateTimePicker1.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + textBox11.Text + "')"; OleDbCommand myCmd = new OleDbCommand(strSQL, aConnection); myCmd.ExecuteNonQuery(); MessageBox.Show("插入操作成功"); OleDbCommand comm = new OleDbCommand("select * from fly", aConnection); OleDbDataAdapter adapter = new OleDbDataAdapter(comm); OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); DataSet ds = new DataSet(); adapter.Fill(ds, "fly"); dataGridView1.DataSource = ds.Tables["fly"]; textBox1.Clear(); aConnection.Close();
} catch (Exception ex) { MessageBox.Show("Error in handling: " + ex.Message); } } 5.2删除: try {