当前位置:文档之家› 东华大学 数据结构课程设计

东华大学 数据结构课程设计

目录设计题目一航空订票系统任务 (2)功能要求 (2)需求分析 (2)概要设计 (3)详细设计 (5)调试分析 (13)用户手册 (14)测试结果 (14)设计题目二哈希表查找的设计任务 (19)功能要求 (19)需求分析 (19)概要设计 (19)详细设计 (20)调试分析 (24)用户手册 (25)测试结果 (25)设计题目一航空订票系统任务航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。

试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。

功能要求1) 录入:可以录入航班情况2) 查询:可以查询某个航线的情况(如输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4) 退票:可退票,退票后修改相关数据文件;5) 客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号;6) 修改航班信息:当航班信息改变可以修改航班数据文件。

需求分析宏观需求分析1)采用现有的软硬件环境及先进的管理系统方案,从而达到充分利用现有资源,提高系统应用效果的目的。

2)尽量达到系统操作过程中的直观、方便、实用、安全等要求。

3)系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。

4)系统应具备维护功能,及时根据用户需求进行数据的添加、删除、修改等操作。

具体需求分析菜单是应用程序中非常重要的组成部分,通过菜单,应用程序可以实现不同的功能,通过本系统的设计,可以实现应用程序的菜单。

1)录入航线信息编写void input()函数来输入全部航线信息。

其中调用了int check(char s[])函数,该函数的功能是检查信息是否重复;以及void save()从而存储全部航线信息。

2)按航班号查询航班信息编写void search_num()函数来实现查询航班信息的宫呢个。

这个函数中需要输入要查询的航班号,通过void search_num()函数来寻找这个航线然后输出该航线的全部信息。

3)按航线查询航班信息编写void search_line()函数来实现查询航线的功能。

用户输入出发城市以及抵达城市名后,该函数会在航线信息链表中进行查询。

如果有该城市,则会输出此航线的信息。

4)办理订票业务编写void booking()函数来实现订票功能。

首先提示用户输入个人及航班号,然后查找此航班,如果该航班存在,则会提示用户输入订单信息,在订票乘员名单域中添加客户信息。

5)办理退票业务编写void cancel()函数来实现退票功能。

首先提示用户输入订单编号,然后查找此订单,如果该订单存在,则提示退票成功并将乘员信息中的该乘员信息删除,修改航班的剩余票数信息。

6)查询客户资料编写void search_customer()函数来实现客户资料查询功能,输出订单编号、客户姓名、证件号、订票量以及航班号。

7)修改航班信息编写void edit()来实现修改航班信息的功能。

在检查输入航班号与原航班号不重复之后输入航班号的全部信息并保存。

8)退出系统用户在菜单页面下输入8回车即exit(0),即可退出系统。

概要设计typedef struct Flight//航班信息{char FlightNumber[20];//航班号char SPlace[20];//出发城市char DPlace[20];//到达城市char SEtime[20];//起飞--降落时间int price;//价格int discount;//折扣率(%)int total;//总票数int left;//剩余票数}Flight;typedef struct Order//订单信息{int OrderNumber;//订单编号char PName[10];//客户姓名char ID[20];//证件号char FlightNumber[20];//航班号int num;//订票数量}Order;void duqu()//读取文件信息char menu()//菜单void save()//录入信息void input() //输入航班信息int check(char s[])//检查是否重复void search_num()//航班信息查询(按航班号)void search_line() //航班信息查询(按路线)void booking()//订票void cancel()//退票void search_customer()//客户资料查询void edit()//修改航班信息int main()库函数:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<malloc.h>程序调用关系:save()check() main() search_num()duqu() menu() input()search_line() save()详细设计#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<malloc.h>#define N 100//最大容量#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef struct Flight//航班信息{char FlightNumber[20];//航班号char SPlace[20];//出发城市char DPlace[20];//到达城市char SEtime[20];//起飞--降落时间int price;//价格int discount;//折扣率(%)int total;//总票数int left;//剩余票数}Flight;typedef struct Order//订单信息{int OrderNumber;//订单编号char PName[10];//客户姓名char ID[20];//证件号char FlightNumber[20];//航班号int num;//订票数量}Order;int i,j;int air_num=0;//航班数int order_num=0;//订单数char t;//获取客户选择的变量char filenamef[]="flight.txt";//航班文件名char filenameo[]="order.txt";//订单文件名Flight fl[N];Order od[N];int check(char s[]);void duqu()//读取文件信息{FILE *fp;if((fp=fopen(filenamef,"r"))!=NULL)//打开文件读取航班信息{i=0;while(!feof(fp))//读取文件{fscanf(fp,"%s%s%s%s%d%d%d%d",&fl[i].FlightNumber,&fl[i].SPlace,&fl[i].DPlac e,&fl[i].SEtime,&fl[i].price,&fl[i].discount,&fl[i].total,&fl[i].left);//fscanf 用于从文件读入数据if(!feof(fp))//feof(fp)返回0才可进行对文件的操作i++;}air_num=i;//航班数量fclose(fp);//关闭文件}if((fp=fopen(filenameo,"r"))!=NULL)//打开文件读取订单信息{i=0;while(!feof(fp))//读取文件{fscanf(fp,"%d%s%s%s%d",&od[i].OrderNumber,&od[i].PName,&od[i].ID,&od[i].Fli ghtNumber,&od[i].num);if(!feof(fp))i++;}order_num=i;//订单数量fclose(fp);//关闭文件}}void save()//录入信息{FILE *fp;//定义标准数据结构,用于文件if((fp=fopen(filenamef,"w"))!=NULL)//打开文件保存航班信息(fopen标准函数,打开磁盘文件flight.txt,用于读,送返指针,指向FILE类型对象){for(i=0;i<air_num;i++)//写入文件{fprintf(fp,"%s %s %s %s %d %d %d %d\n",fl[i].FlightNumber,fl[i].SPlace,fl[i].DPlace,fl[i].SEtime,fl[i].price,fl[i].discou nt,fl[i].total,fl[i].left);}fclose(fp);//关闭文件}if((fp=fopen(filenameo,"w"))!=NULL)//打开文件保存订单信息{for(i=0;i<order_num;i++)//写入文件{fprintf(fp,"%d\t%s\t%s\t%s\t%d\n",od[i].OrderNumber,od[i].PName,od[i].ID,od[i].Fli ghtNumber,od[i].num);}fclose(fp);//关闭文件}}void input()//输入航班信息{for(i=air_num;i<N;i++){printf("请输入航班号:");gets(fl[i].FlightNumber);while(check(fl[i].FlightNumber)!=1)//检查是否重复{printf("航班号重复,请重新输入:");gets(fl[i].FlightNumber);}printf("出发城市:");gets(fl[i].SPlace);printf("到达城市:");gets(fl[i].DPlace);printf("起飞时间--到达时间:");gets(fl[i].SEtime);printf("价格:");scanf("%d",&fl[i].price);printf("折扣率(%%):");scanf("%d",&fl[i].discount);printf("总票数:");scanf("%d",&fl[i].total);printf("剩余票数:");scanf("%d",&fl[i].left);getchar();//消除回车air_num++;//航班数加1printf("航班信息录入完成! 继续录入?(Y/N):");while(1){t=getchar(); //输入一个字符型数据,把值赋给变量tgetchar(); //消除上一步产生的回车符if(t=='y' || t=='Y' || t=='n' || t=='N')break;elseprintf("请重新输入:");}if(t=='n' || t=='N')break;}save();//保存}int check(char s[])//检查是否重复{int g=0;for(;g<air_num;g++)if(strcmp(fl[g].FlightNumber,s)==0 && g!=i)//对比是否相同相同就说明重复了return g;//表示重复了return 1;//遍历了整个数组都没发现重复的表示没有重复}void edit()//修改航班信息{char s[100];printf("请输入要修改的航班号:");gets(s);for(i=0;i<air_num;i++)//查询是否存在输入的信息if(strcmp(fl[i].FlightNumber,s)==0)break;//存在结束循环if(i==air_num){printf("没有您输入航班信息,请按回车键返回!");getchar();return;}printf("请输入新的航班号:");gets(fl[i].FlightNumber);while(check(fl[i].FlightNumber)!=1)//检查是否重复{printf("航班号重复,请重新输入:"); //检查后发现重复gets(fl[i].FlightNumber);}printf("请更新下列信息:\n");printf("出发城市:");gets(fl[i].SPlace);printf("到达城市:");gets(fl[i].DPlace);printf("起飞时间--到达时间:");gets(fl[i].SEtime);printf("价格:");scanf("%d",&fl[i].price);printf("折扣率(%%):");scanf("%d",&fl[i].discount);printf("总票数:");scanf("%d",&fl[i].total);printf("剩余票数:");scanf("%d",&fl[i].left);getchar();//消除回车save();//保存printf("修改成功!\n");system("pause");//任意键继续}void booking()//订票{i=order_num;printf("请输入您的姓名:");gets(od[i].PName);printf("请输入您的证件号:");gets(od[i].ID);printf("请输入订票的航班号:");gets(od[i].FlightNumber);for(j=0;j<air_num;j++)if(strcmp(fl[j].FlightNumber,od[i].FlightNumber)==0 )//对比是否相同break;if(j==air_num)//表示航班不存在{printf("航班号不存在!请按回车键返回!");getchar();return;}printf("请输入订票数量:");scanf("%d",&od[i].num);fl[j].left-=od[i].num;//新的剩余票数printf("请输入订单编号:");scanf("%d",&od[i].OrderNumber);getchar();//消除回车order_num++;//订单数加1save();//保存到文件printf("订票成功!\n");system("pause");//任意键继续}void cancel()//退票{int num;printf("请输入要退票的订单编号:");scanf("%d",&num);getchar();//消除回车for(i=0;i<order_num;i++)if(od[i].OrderNumber==num)//检查是否存在订单编号break;if(i==order_num){printf("订单不存在!请按回车键返回!");getchar();return;}j=check(od[i].FlightNumber);//获取航班的下标fl[j].left+=od[i].num;//新的剩余票数od[i]=od[order_num-1];//最后一条订单覆盖退票的订单order_num--;//订单数减1save();//保存printf("退票成功!\n");system("pause");//任意键继续}void search_num()//航班信息查询(按航班号){char s[100];printf("请输入要查询的航班号:\n");gets(s);for(i=0;i<air_num;i++)//查询是否存在输入的信息if(strcmp(fl[i].FlightNumber,s)==0)break;//存在结束循环if(i==air_num){printf("航班号不存在!请按回车键返回!");getchar();return;}printf("查询成功!\n\n");printf(" 航班号出发城市到达城市起飞时间--到达时间价格折扣率(%%) 总票数剩余票数\n");printf(" %s %s %s %s %d %d %d %d\n",fl[i].FlightNumber,fl[i].SPlace,fl[i].DPlace,fl[i].SEtime,fl[i].price,fl[i].discou nt,fl[i].total,fl[i].left);printf("********************************************************************* *****\n");printf("\n");system("pause");//任意键继续}void search_line() //航班信息查询(按路线){char s[20],e[20];int flag=0;printf("请输入要查询的路线的起点:");gets(s);printf("请输入要查询的路线的终点:");gets(e);printf("查询成功!\n\n");printf(" 航班号出发城市到达城市起飞时间--到达时间价格折扣率(%%) 总票数剩余票数\n");for(i=0;i<air_num;i++)//查找信息if(strcmp(fl[i].SPlace,s)==0 && strcmp(fl[i].DPlace,e)==0) {printf(" %s %s %s %s %d %d %d %d\n",fl[i].FlightNumber,fl[i].SPlace,fl[i].DPlace,fl[i].SEtime,fl[i].price,fl[i].discou nt,fl[i].total,fl[i].left);}printf("********************************************************************* *****\n");printf("\n");flag=1;//标记找到了信息if(flag==0){printf("航班信息不存在!\n");}system("pause");//任意键继续}void search_customer()//客户资料查询{printf(" 订单编号客户姓名证件号订票量航班号\n");for(i=0;i<order_num;i++)//查询是否存在输入的信息{printf(" %d %s %s %d %s\n",od[i].OrderNumber,od[i].PName,od[i].ID,od[i].num,od[i].FlightNumber);}printf("******************************************************************\n") ;printf("\n");system("pause");//任意键继续}char menu()//菜单{char c;printf(" 欢迎来到航空订票系统!\n");printf(" ** ==>1 录入航班情况**\n");printf(" ** ==>2 航班信息查看(航班号查询)**\n");printf(" ** ==>3 航班信息查看(站站查询)**\n");printf(" ** ==>4 订票**\n");printf(" ** ==>5 退票**\n");printf(" ** ==>6 客户资料**\n");printf(" ** ==>7 航班信息修改**\n");printf(" ** ==>8 退出**\n");printf("请选择功能:\n");c=getchar();getchar();//消除缓存中的换行符return c;}int main(){duqu();//读取文件信息while(1){t=menu();//获取选择switch(t){case '1': input(); break;//航班信息录入case '2': search_num(); break;//航班信息查询(按航班号)case '3': search_line(); break;//航班信息查询(按路线)case '4': booking(); break;// 订票case '5': cancel(); break;// 退票case '6': search_customer(); break;// 客户资料case '7': edit(); break;//航班信息修改case '8': exit(0);//退出}}}调试分析1)考虑将数据保存在文件中,这样可以防止数据全部存储在内存中造成的丢失现象,以及实现数据的及时存储功能。

相关主题