第一篇:C语言程序设计——飞机订票系统
C语言程序设计——飞机订票系统
代码如下:”
#include“stdio.h” #include“stdlib.h” #include“string.h”
#defineLENsizeof(structplane)#defineMAX 10;structplane { char destination[12];char num[10];char time[12];int price;int amount;};typedefstructplanePLANE;PLANE a[100];void menu();void input();void search();void preserve();void planeadd();void delplane();
void main(){ system(“cls”);menu();} void menu(){ char *menu[] = { ************** 欢迎进入飞机订票系统*************,“ a:输入航线 ”,“ b:查询航线 ”,“ c:退订票系统 ”,“ d:追加航线 ”,“ e:删除航线 ”,“ f: 退出 ”,“****************************************************” };int i;char NO;int quit = 0;do
{
system(“cls”);
for(i = 0;i<9;i++)
printf(“n%s”, menu[i]);
printf(“n请输入服务代码a,b,c,d,e或fn”);
NO = getchar();
switch(NO)
{
case'a': input();break;
case'b': search();break;
case'c': preserve();break;
case'd': planeadd();break;
case'e': delplane();break;
case'f': quit = 1;break;
} } while(!quit);}
void input(){ int i, n;FILE *fp;system(“cls”);if((fp = fopen(“D:file”, “wb”))== NULL){
printf(“error!n”);exit(0);} printf(“n请输入航班总数n:”);scanf(“%d”, &n);printf(“n请按下面提示输入航班信息:起点站:沈阳”);for(i = 0;i printf(“nt请输入终点:”); scanf(“%s”, a[i].destination); printf(“t 航班班次:”); scanf(“%s”, a[i].num); printf(“t 时间:”); scanf(“%s”, a[i].time); printf(“t 票价:”); scanf(“%d”, &a[i].price); printf(“t机票总数:”); scanf(“%d”, &a[i].amount); fwrite(&a[i], sizeof(PLANE), 1, fp);} fclose(fp);} void search(){ int i, j = 0, k = 101;char str[12];FILE *fp;PLANE b[5];if((fp = fopen(“D:file”, “rb”))== NULL){ printf(“error!n”); exit(0);} printf(“n请输入航班号:”);scanf(“%s”, str);while(fread(&b[j], LEN, 1, fp)!= 0) j++;for(i = 0;i if(strcmp(b[i].num, str)== 0) { printf(“沈阳至%s 航班号:%s 时间:%s 票价:%d 剩余票数:%dn”, b[i].destination, b[i].num, b[i].time, b[i].price, b[i].amount); k = i; } if(k == 101) printf(“对不起,没有您需要的航线。”);fclose(fp);system(“pause”);} void preserve(){ int a = 0, i = 0, k, m, n, x;char str[12];PLANE preserve[10];FILE *fp;if((fp = fopen(“D:file”, “rb”))== NULL){ printf(“error!n”); exit(0);} printf(“请输入航班号:”);scanf(“%s”, str);while(fread(&preserve[i], LEN, 1, fp)!= 0){ if(strcmp(preserve[i].num, str)== 0) printf(“沈阳至%s 航班号:%s 时间:%s 价格:%d 剩余票数:%d”, preserve[i].destination, preserve[i].num, preserve[i].time, preserve[i].price, preserve[i].amount); k = i; i++;} fclose(fp);printf(“n请输入订退票代码:0-订票 1-退票”);scanf(“%d”, &m);if(m == 0){ printf(“沈阳至%s 航班号:%s 时间:%s 价格:%d元剩余票数:%d”, preserve[k].destination, preserve[k].num, preserve[k].time, preserve[k].price, preserve[k].amount); printf(“n请输入订票总数n:”); scanf(“%d”, &n); x = preserve[k].price*n; printf(“n应付款%d元”, x); preserve[k].amount = preserve[k].amount1; del = 1; printf(“n成功删除信息!!”);} if(del == 0) { printf(“系统中不存在要删除的信息!”);menu();} else { if((fp = fopen(“D:file”, “wb+”))== NULL);{printf(“文件有错误不能打开!”); exit(0); } } for(i = 0;i fwrite(&delplane[i], LEN, 1, fp); fclose(fp);} } #include //包含access函数的头文件 #define N 9999 //定义最多的航班数 #define PRINT “%dtt%stt%stt星期%stt%dn ”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count //宏定义输出格式 struct air //定义结构体数组 { int num; //定义航班号 char start[20];//航班起始站 char over[20];//终点站 char time[10];//飞行时间 int count; //机票数量 }s[N]; int i,m=0; //定义全局变量 char ii[10]; void add();//函数声明增加航班信息函数 void print(); //显示航班信息 void search();//查找航班信息 void dingpiao();//订票业务 void tuipiao();//退票 void read();//读取文件 void save();//保存文件 void output();//输出格式 void paixu();//航班排序 void chushihua();//系统初始化 void build();//建立数据文件 void paixu1();//按航班号从小到大排序 void paixu2();//从大到小 void main()//主函数 { int j; chushihua();//系统初始化判断是否存在原始数据文件 printf(“ 欢迎使用飞机订票系统n”);//打印出系统主界面 do { printf(“================================== ”); printf(“1.增加航班信息n” “t2.浏览航班信息n” “tt3.查找航班信息(按航班号)tt╮(╯_╰)╭n” “ttt4.航班排序(按航班号)n” “tttt5.订票业务n” “to(︶︿︶)ottt6.退票业务n” “tttttt0.退出n”);printf(“================================== ”); printf(“请在0-6中选择以回车键结束: ”);scanf(“%d”,&j);switch(j){ case 1: add();//调用增加航班函数 break; case 2:print();//调用显示模块 break; case 3:search();//调用查找模块 break; case 4:paixu();//调用排序函数 break; case 5:dingpiao();//调用订票模块 break; case 6:tuipiao();//调用退票模块 break; case 0: //退出系统 save(); printf(“谢谢使用,再见!”); break;} }while(j!=0);//判断是否调用其他函数 } void chushihua()//定义系统初始化函数 { if(access(“hangban.dat”,0)){ build();} else read();} void build()//定义建立数据文件函数 { FILE *fp;//定义文件指针 if((fp=fopen(“hangban.dat”,“wb”))==NULL)//打开文件并判定是否出错 { printf(“创建文件失败!”);//打印出错提示 getchar(); return;} printf(“请依次输入航班信息(以回车键结束):n”); //打印提示信息 printf(“------------n”);for(i=0;i printf(“请输入航班号: ”); scanf(“%d”,&s[i].num);//输入航班号 printf(“请输入起始站: ”); scanf(“%s”,s[i].start);//输入起始站 printf(“请输入终点站: ”); scanf(“%s”,s[i].over);//输入终点站 printf(“请输入时间(星期几): ”); scanf(“%s”,s[i].time);//输入时间 printf(“请输入机票数: ”); scanf(“%d”,&s[i].count);//输入机票数 fwrite(&s[i],sizeof(struct air),1,fp); m++; printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”); scanf(“%s”,ii); if(strcmp(ii,“y”)!=0) //判断是否继续添加航班信息 { fclose(fp); //关闭文件 return; } } } void read() //定义读取文件函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“r”))==NULL){ printf(“创建文件失败!”); getchar(); return;} i=0;while(!feof(fp)){ fread(&s[i],sizeof(struct air),1,fp);//逐块读取数据 i++; m++;//计算存在航班数 } m--;fclose(fp);} void save()//定义保存函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“wb”))==NULL) { printf(“创建文件失败!”); getchar(); return;} for(i=0;i //逐块保存数据 fwrite(&s[i],sizeof(struct air),1,fp);fclose(fp);} void add()//定义增加航班信息函数 { do{ printf(“请依次输入您要增加的航班信息(以回车键结束): n”); //打印提示信息 printf(“------------n”); printf(“请输入航班号: ”); scanf(“%d”,&s[m].num);//读取航班号 printf(“请输入起始站: ”); scanf(“%s”,s[m].start);//读取起始站 printf(“请输入终点站: ”); scanf(“%s”,s[m].over);//读取终点站 printf(“请输入时间: ”); scanf(“%s”,s[m].time);//读取时间 printf(“请输入机票数: ”); scanf(“%d”,&s[m].count);//读取机票数 m++; printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”); scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判断是否继续添加 } void output()//定义输出格式函数 { printf(“航班号tt起始站tt终点站tt时间tt机票数n”);//信息标题 for(i=0;i printf(PRINT);//打印出信息 } void print()//定义显示航班信息函数 { printf(“n目前我们有如下航班:n”);output(); //调用输出格式函数 printf(“n请按回车键返回上层菜单 ”);getchar();getchar();} void search()//定义查询函数 { int n; do { printf(“n请输入航班号: ”); scanf(“%d”,&n);//输入查询的航班号 for(i=0;i { if(s[i].num==n)//按航班号判定输出条件 { printf(“n您所查找的航班信息为:n ”); printf(“航班号tt起始站tt终点站tt时间tt机票数 nn”); printf(PRINT);//显示信息 printf(“n查询完毕,按回车键继续”); getchar(); getchar(); return; } } printf(“n对不起,没有您需要的信息!n ”);printf(“是否重新查找?请键入y或n以回车键结束 ”);scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判定是否重新查找 } void dingpiao()//定义订票业务函数 { int n;char a[10]=“y”;do { search();//调用查询模块 if(!strcmp(ii,“n”)) { printf(“对不起!没有找到您所需要的航班,所以不能订票。n”);//未查找到所需航班 printf(“n请按回车键返回上层菜单 ”); getchar(); getchar(); strcpy(ii,“n”); break; } do { printf(“请输入您要订的机票数(以回车键结束): ”); scanf(“%d”,&n);//输入所订机票数 if(n<=0) //判定机票数是否出错 { printf(“输入错误!至少需订1张机票。n”); } else if(s[i].count==0)//判定机票是否售完 { printf(“对不起,你所选择的航班的机票已售完!n”); break; } else if(s[i].count!=0&&s[i].count>=n)//判定机票数是否大于等于订票数 { s[i].count=s[i].count-n; printf(“订票成功!”); break; } else if(s[i].count { printf(“对不起,你所选择的航班只剩 %d张机票n”, s[i].count); printf(“是否需要重新输入机票数?请输入y或n以回车键结束: ”);//判定是否重新输入订票数 scanf(“%s”,a); } }while(!strcmp(a,“y”)); printf(“是否需要订其他航班的机票?请输入y或n以回车键结束: ”); scanf(“%s”,a);}while(!strcmp(a,“y”));//判定是否继续订票 } void tuipiao()//定义退票函数 { int n;char a[10];do { search();//调用查询函数 if(!strcmp(ii,“n”)) { printf(“对不起!没有找到您所需要的航班,所以不能退票。n”); printf(“n请按回车键返回上层菜单 ”); getchar(); getchar(); strcpy(ii,“n”); break; } printf(“请输入您要退的机票数目: ”); scanf(“%d”,&n);//输入所退票数 if(n<=0) //判定票数是否有效 printf(“输入错误!至少需退1张机票。”); else { s[i].count=s[i].count+n; printf(“退票成功!”); } printf(“是否继续? 请键入y或n以回车键结束: ”);//判定是否继续退票 scanf(“%s”,a);}while(!strcmp(a,“y”));//判定并跳出循环 } void paixu()//定义排序函数 { int n; printf(“n******************************************************************************** ”); printf(“1.按航班号从小到大排序n” “t2.按航班号从大到小排序n”);printf(“******************************************************************************** ”); printf(“请在1-2中选择以回车键结束: ”);scanf(“%d”,&n);//输入排序方式 switch(n){ case 1:paixu1();//调用从小到大排序函数 break; case 2:paixu2();//调用从大到小排序函数 break;} printf(“排序后的航班信息为:n”);output(); //显示排序后航班信息 printf(“n请按回车键返回上层菜单 ”); getchar(); getchar();} void paixu1()//定义从小到大排序函数 { int k,j;struct air t;for(i=0;i { k=i; for(j=i+1;j if(s[k].num>s[j].num) k=j; if(i!=k) { t=s[k]; s[k]=s[i]; s[i]=t; } } } void paixu2()//定义从大到小排序函数 { } int k,j;struct air t;for(i=0;i if(s[k].num k=j;if(i!=k){ t=s[k]; s[k]=s[i]; s[i]=t;} } 飞机订票系统 1.需求分析 描述要求编程解决的问题。以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定: (a)输入的形式和输入值的范围; (b)输出的形式; (c)程序所能达到的功能; (d)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 2.概要设计 给出程序要达到的具体的要求。描述解决相应问题算法的设计思想。描述所设计程序的各个模块(即函数)功能。说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 3.详细设计 实现概要设计中定义的所有数据类型,对每个操作只需要写出流程或伪码算法;对主程序和其他模块也都需要写出流程或伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。设计出良好的输入输出界面(清晰易懂)。 4.调试分析 内容包括: (a)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析; (b)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想; (c)经验和体会等。 5.用户使用说明 说明如何使用你编写的程序,详细列出每一步的操作步骤。 6.测试结果 设计测试数据,或具体给出测试数据。要求测试数据能全面地测试所设计程序的功能。列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。 7.测试情况:给出程序的测试情况,并分析运行结果 附录(非必须,按照需要添加) 带注释的源程序。可以只列出程序文件名的清单。 需求分析 任务:通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) 查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况; 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班; 退票: 可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 概要设计 详细设计 详列函数 void list(){ struct airline *info; int i=0; info=start; printf(“起点城市t终点城市t航班号t起飞时间t降落时间t总票数t余票数n”); while(i { display(info); info++; i++; } printf(“nn”);} 查询函数 void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“请输入要起飞城市的名称:”); scanf(“%s”,qiname); printf(“请输入要抵达城市的名称:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“没有这条航线!n”); } else { printf(“起飞城市t降落城市t航班号t起飞时间t降落时间t总票数t余票数n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“请输入航班号:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“没有这条航线!n”); return NULL;} 订票函数 void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“请输入您的起飞城市:”); scanf(“%s”,qiname); printf(“请输入您的降落城市:”); scanf(“%s”,jiangname); printf(“请输入您需要的票数:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“请输入您的姓名:”); scanf(“%s”,name); printf(“请输入您的身份证号:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息为:n”); display(info); for(i=0;i { printf(“%s的座位号是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“订票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } 退票函数 void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“请输入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您没有订过票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} 存储结构 typedef struct passenger { char name[10]; int tickets; char id[30]; struct passenger *next;} linklist;typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo;调试分析 查看航线信息 查询航线 ① 输入起飞城市 ② 输入抵达城市 ③ 输出航班信息 办理订票业务 ① 查询符合的航班 ② 查询余票量 ③ 输出航班信息 办理退票业务 源代码 #include char name[10]; int tickets; char id[30]; struct passenger *next;} linklist; typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo; struct airline *start; void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){ struct airline *info; int i=0; info=start; printf(“起点城市t终点城市t航班号t起飞时间t降落时间t总票数t余票数n”); while(i { display(info); info++; i++; } printf(“nn”);} void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“请输入要起飞城市的名称:”); scanf(“%s”,qiname); printf(“请输入要抵达城市的名称:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“没有这条航线!n”); } else { printf(“起飞城市t降落城市t航班号t起飞时间t降落时间t总票数t余票数n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“请输入航班号:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“没有这条航线!n”); return NULL;} linklist *insertlink(linklist *head,int amount,char name[],char id[]){ linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); strcpy(new1->name,name); new1->tickets=amount; new1->next=NULL; strcpy(new1->id,id); if(head==NULL) { head=new1; new1->next=NULL; } else { while(p1->next!=NULL) p1=p1->next; p1->next=new1; } return head;} void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“请输入您的起飞城市:”); scanf(“%s”,qiname); printf(“请输入您的降落城市:”); scanf(“%s”,jiangname); printf(“请输入您需要的票数:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“请输入您的姓名:”); scanf(“%s”,name); printf(“请输入您的身份证号:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息为:n”); display(info); for(i=0;i { printf(“%s的座位号是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“订票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“请输入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您没有订过票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} int menu_select(){ int c; char s[20]; printf(“ 订票系统n”); printf(“-------------n”); printf(“ 1.查看航线信息 printf(” 2.查询航线 printf(“ 3.办理订票业务 printf(” 4.办理退票业务 printf(“ 5.退出系统 printf(”-------------n“); do { printf(”请选择(1-5):“); scanf(”%s“,s); c=atoi(s); } while(c<1||c>6); return c; n”);n“);n”);n“); n”); } int main(){ struct airline air[MAXSIZE]= { {“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40} }; start=air; while(1) { system(“cls”); switch(menu_select()) { case 1: list(); break; case 2: search(); break; case 3: order(); break; case 4: returnticket(); break; case 5: exit(0); } getch(); } } 经验体会 1、通过设计飞机订票系统,加深了对链表的运用和理解。 2、通过多组测试数据,发现了程序的问题,并做了调整、3、通过设计选择菜单,对选择结构有更深刻的了解。 飞机订票系统 1.概述(设计题目与可行性分析) 1.1设计题目:飞机订票系统 1.2可行性分析 飞机订票系统是为机场工作人员和客户提供订票退票等与机票相关内容的管理系统,方便机场工作人员对机票的管理,以提高机场工作人员对机票管理工作的效率。当前飞机订票问题:手工订票所产生的客座率低。而我们的目标是:建立一个飞机订票系统数据库。 1.2.1研究现有系统,画现有系统的流程图 了解当前系统能够完成的功能及组成 航班管理:票据管理 售票点:直接面向用户 航班管理 票据管理 票库 订票库 订票管理 出售管理 打印机票 售票点1 售票点n 现有系统:票据都分布在各个售票点 1.2.2导出新系统的高层逻辑结构 数据流图的基本符号: 数据源/终点(人机界面): 加工处理: 文件名 文件: 数据流名 数据流: 票价信息 机票 查订票号 订票处理 客户信息 出票处理 订票记录 顾客 订票信息 订票号 库存信息 票价信息 票价管理 航班管理 航班信息 操作员 航班信息 保存 新系统的数据流图: 说明:流向文件的数据流的名可以省略 1.2.3可行性分析报告 随着Internet的迅速发展和用户数量的急剧增加,互联网对于企业和事业单位的运营和发展日益重要,网上交易也逐渐被人们认可,并成为未来交易的发展方向。在这种情况下,很多原有的C/S模式的系统也逐步向B/S模式靠拢,飞机订票系统也不例外。 飞机订票系统是飞机旅游服务信息系统的一个重要组成部分。为旅客提供优质便捷的服务,为了提高飞机客运的售票效率,丰富飞机客运的营销手段,飞机售票总站的下属代售点可以通过公用的互联网资源,建立数据库,实现网上的售票,查询及管理工作。 2.系统目标和设计原则 2.1系统目标: 建立一个飞机订票系统数据库。 2.1.1系统简介: 本系统是专为乘坐飞机的旅客准备的,旅客只需把自己的信息(姓名.性别.工作单位.身份证号.旅行时间.旅行目的地)预先交给旅行社,旅行社就可以将信息输入本系统,系统就可以为旅客安排航班,打印出取票通知和帐单。旅客只要在飞机起飞的前一天凭取票通知单和帐单交款取单,系统校对无误即印出机票给旅客。 2.2设计原则 2.2.1根据实际情况考虑三种可行性 技术可行性、经济可行性、操作可行性 2.2.2提出侯选方案、提出各种各样的实现方案 主机(纯主机型、C/S型)、开发环境、网络方案、对提出的每个方案进行成本估计 硬件、软件费用投资(根据各公司的报价)开发成本估计(任务估算法) 运行费用、投资回收期 纯收入:通过本系统的运行、投资回收后的收入 3、描述推荐理由:分别从技术、经济、用户、投资方的不同角度考虑 3.支撑环境规划 3.1整体系统运作图 3.2运行环境 服务器:硬件配置:CPU Intel P4 1.2G以上 内存256 硬盘 80G以上 软件配置:Windows 2000/2003 SERVER SQL SERVER 2000 4.系统功能结构 1、录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) 2、查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况; 3、订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班; 4、退票:可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 5、修改航班信息:当航班信息改变可以修改航班数据文件。 5.数据库设计 5.1概念结构设计 E-R图如下: 5.2逻辑结构设计 1.航空公司表:AIRLINE 2.客户表CUSTOMER 3、飞机表PLANE 4.航线表LINE 5.航班表FLIGHT 6.订票表BOOKTICKET 5.3实现设计 实现以下操作: 1、注册航空公司: 2、增加飞机: 3、增加航线: 4、增加航班: 5、增加客户: 6、建立一个订票的存储过程,存储过程名为Book_Ticket,请完成以下存储过程,实现订票的操作: a)指定要订的航班号(HID)及客户的编号(KID); b)先查看客户是否为特殊客户,如果不是,票价不打折扣; c)否则如果客户航程超过5万公里,票价7折,超过15万公里,票价打5折; d)查看客户订票以后,所有乘客的票数是否超过总的座位数,如果超过,回滚订票操作; e)要求在操作过程中使用到事务技术。 CREATE PROCEDURE Book_ticket @HID VARCHAR(20) @HID VARCHAR(20) AS DECLARE @TRANS_NAME VARCHAR(20)select @TRANS_NAME=’ ’ BEGIN TRANSACTION DECLARE @Bookid int,@seats int,@IsSpec char(1)/*定义订票里程DIST、折扣率discount、总的订票里程distance、票价PRICE(实型)*/ select @Isspec=Isspec,@distance=Points FROM Customer where select @discount=1 IF @ BEGIN END /*选择出票价*/ SELECT @PRICE=PRICE FROM FLIGHT WHERE /*加入客户订票信息*/ /*将客户新订票里程的信息累计到用户信息里面*/ UPDATE SET WHERE /*查看客户订票后,是否超过可容纳的座位数目,如果超过,取消所有操作*/ SELECT booked=count(*)FROM WHERE FID= /*查看额定座位容量*/ SELECT @seats=seatsnum FROM WHERE IF @BOOKED>@SEATS ELSE COMMIT TRANSACTION GO 7.运行这个订票操作的存储过程(自己设定客户及航班) book_ticket , 8.事务运行成功后,再显示各表的数据,按表分别写出来。 6.总体实施计划 6.1可行性研究: 研究现有系统,画现有系统的流程图,编写可行性分析报告 6.2进行数据库设计: 概念结构设计,逻辑结构设计,实现设计 6.3概要设计: 从数据流图导出初始结构图,设计优化 6.4详细设计: 结构化的程序设计,采用流程图的形式 6.5保密设计 1.每个用户需要注册才能进入航空订票信息系统,并进行网上订票的。用户必须 用自己真实的身份进行注册。 2.系统要另外在备一份数据库,防止系统出现错误而使数据信息丢失的可能性。 3.系统要安装防火墙,防止黑客入侵破坏系统。还有就是安装杀毒软件,防止 病毒入侵而导致系统瘫痪。 6.6维护设计 系统设置提供管理员操作页面: 1.提供管理员密码,方便维护操作.2.固定时间对系统进行维护和检测.3.若系统出现瘫痪时,可出动备用系统维持运转.4.定期对系统进行更新整顿清空.7.总结 这次数据库课程设计的“飞机订票系统”,通过近一周的上机操作,充分应用了所学的数据库的知识,并去图书馆查阅了一些书集和上网搜索一部分相当资料,粗略设计出该系统。总体上来说,这次课程设计还是比较成功的,充分运用了所学的软件工程设计、数据库的设计,设计出E-R图、流程图、数据库基本表,从整体规划出了系统的运行环境和系统实现的功能。 当然,由于学艺不精,在课程设计的过程也碰到的一些问题。其中,画E-R图时,各实体中的关系的确定,由于对系统还不够了解而找不到一个准确的词来形容;总体规划时,材料太多,不易整理;相关数据库技术方面没有多注意,这次课程设计的重点只在对整个系统的总体思路设计。 其实这些通过最近的课程设计觉得最重要一点就是:我们一定要自己动手,这样才能真正的学到东西。书本知识固然重要,但我们更要学会将书本知识应用到实际的工作中。实践中才会发现错误,也才能改进,才能达到学习的最终目的。 最后感谢在这次课程设计中帮助过我的老师,同学!8.参考文献 物流信息系统 赵刚 四川大学人民出版社 2002/9 物流信息管理 尹涛 东北财经大学出版社 2005/1 数据库系统概论 王珊 萨师煊 高等教育出版社 2006/5 数据库技术与应用-Access2000篇 郭力平人民邮电出版社 2002/8 软件设计师教程 陈平禇华 清华大学出版社 2006/6 文章引用自: 飞机订票系统 —项目风险评估报告 本文档的范围和目的 本文主要针对飞机订票系统软件开发涉及到的风险,包括在软件开发周期过程中可能出现的风险以及软件实施过程中外部环境的变化可能引起的风险等进行评估。在文中对所提到的风险都一一做了详细的分析,并提出了相应的风险回避措施。主要风险综述 任何软件的开发,其主要风险均来自于两个方面,一是软件管理,二是软件体系结构。软件产品的开发是工程技术与个人创作的有机结合。软件开发是人的集体智慧按照工程化的思想进行发挥的过程。软件管理是保证软件开发工程化的手段。软件体系结构的合理程度是取决于集体智慧发挥的程度和经验的运用。 1、软件是否能够按工期的要求完成:时间定为2个月,能按期完成。 2、软件需求的调研是否深入透彻:软件的需求的调研花了一个月,已了解大致的需求。 3、软件的实现技术手段是否能够同时满足性能要求:由于是第一次,所以难免会有一些不足,但会尽力去客服。 4、软件的可伸缩性:预设计为满足未来3-5年的需要。 5、软件的可维护性:软件的维护也是必然的事情,为了保证软件的较长使用寿命,软件就必须适应不断的业务需求变化,根据业务需求的变化对软件进行修改,软件代码无需修改,仅仅是在系统提供的配置文件中进行适当的修改,然后软件重新加载进入运行状态,就完成了系统部分功能和性能要求的变化。对于重大改动,需要打开源代码进行修改的,也仅仅是先继承原先的代码,然后用新的功能接替原先的调用接口,这样将把软件改动量减小到最低。 项目管理的风险 一般参与软件开发的人员和其责任如下: 由于软件开发小组共有5人,项目经理1人 主要职责:进行全局把握 制定项目开发计划和开发策略,参与项目核心系统的分析设计,同时努力保证开发计划的按时完成和开发策略的真正贯彻落实。 其他4人 主要职责:进行软件系统的分析和设计工作,书写软件需求分析和系统设计相关文档,进行详细设计,和软件系统的代码实现,并进行适当的白盒测试。 软件技术风险 本系统拟订采用的两个重大的软件技术是面向对象的构件和基于微软的COM组件技术。组件和构件技术都是为了提高软件的可靠性和软件的可扩展性而采用的技术手段。从技术成熟度上说不存在风险,但为了实现良好的软件构架和稳定的组件,与传统开发方法比较,有相当的多的额外工作需要做,这会给项目工期带来较大的风险。 回避和控制这部分风险的办法是在项目进行的过程不断的对该阶段进行风险估计和指定有效的里程碑。同时采用“范例”方式提高开发人员的构件组件的分析识别能力,适时调整构件组件的数量和粒度。 软件需求阶段的风险 软件的开发是以用户的需求开始,以书面的形式形成《用户需求》这一重要的文档。需求分析更多的是开发方确认需求的可行性和一致性的过程,在此阶段需要和用户进行广泛的交流和确认。需求和需求分析的任何疏漏造成的损失会在软件系统的后续阶段被一级一级地放大,因此本阶段的风险最大。 设计阶段的风险 设计的主要目的在于软件的功能正确的反映了需求。可见需求的不完整和对需求分析的不完整和错误,在设计阶段被成倍地放大。设计阶段的主要任务是完成系统体系结构的定义,使之能够完 成需求阶段的即定目标;另一方面也是检验需求的一致性和需求分析的完整性和正确性。 设计本身的风险主要来自于系统分析人员。分析人员在设计系统结构时过于定制,系统的可扩展性较弱,会给后期维护带来巨大的负担,和维护成本的激增。对用户来说系统的使用比例会有明显的折扣,甚至造成软件寿命过短。反之,软件结构的过于灵活和通用,必然引起软件实现的难度增加,系统的复杂度会上升,这又会在实现和测试阶段带来风险,系统的稳定性也会受到影响。 设计阶段蕴涵的另一种风险来自于设计文档。文档的不健全不仅会造成实现阶段的困难,更会在后期的测试和维护造成灾难性的后果,所以我们会在整个设计过程中对文档的编写非常重视。 实现阶段引入的风险 软件的实现从某种意义上讲是软件代码的生产。原代码本身也是文档的一部分,同时它又是将来运行于计算机系统之上的实体。源代码书写的规范性,可读性是该阶段的主要风险来源。规范的代码生产会把属于程序员自身个性风格的成分引入代码的比例降到最低限度,从而减小了系统整合的风险。第二篇:C语言课程设计——飞机订票系统源代码
第三篇:数据结构课程设计 飞机订票系统
第四篇:数据库课程设计+飞机订票系统
第五篇:飞机订票系统风险评估