中南民族大学(003)(课程设计报告)(10061103)(张名扬)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//将文件中的数据传递给变量
{
ifstream in_stream;
in_stream.open("flyinfo.txt");
//文件读取操作
if(in_stream.fail())
{
//判断文件是否成功打开
cout<<"fail!!!!!!!!!!!!!"<<endl;
exit(1);
}
for(int i=1;!in_stream.eof()&&(i<16);i++)
****************************************\n"<<endl;
cout<<"航班号 起飞时间 到达时间 起飞站 终点站 班期 机型 票价
余票\n"<<endl;
百度文库
}
//显示主体信息
void Cout_info2_1(Node p[])//方式一
{
cout<<" "<<p->info. f_num;
姓名 : 张名扬
抽象数据类型定义
《数据结构》课程设计
void F_By_FN(flight F[])
//通过航班号实现二分查找法查找 void
F_By_Time(flight F[],int Time)
//通过起飞/到达时间查询
void F_By_Address(flight F[],int AD) //通过站点查询
//head 为收集链表的头指针
for(i++; i<r; i++)
if(sllist[i].f!=NULL)
{ p->next=sllist[i].f; p=sllist[i].e; } // 收集非空队列
p->next=NULL;
}
(*plist)->next=head;
}3、总体设计流程
3 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
//head 为收集链表的头指针
for(i++; i<r; i++)
if(sllist[i].f!=NULL)
{ p->next=sllist[i].f; p=sllist[i].e; } // 收集非空队列
p->next=NULL;
}
(*plist)->next=head;
}
void initfo(Node list[])
{
int i,j,k;
RadixNode *p, *head;
head=(*plist)->next;
for(j=d-1; j>=0; j--) //进行 d 次分配和收集
{
p=head;
for(i=0; i<r; i++)
{
sllist[i].f=NULL; sllist[i].e=NULL; //清队列
{
char f_num[10]; //航班号
char s_add[10]; //起飞站
char a_add[10]; //终点站
char work_date[10]; //班期
int s_time; //起飞时间
int a_time; //到达时间
char FlightType[4]; //机型
int price;
3、输入输出形式
①输入的形式和输入值的范围:
输入的形式可以以数字,字母加数字,汉字的形式输入;输入范围
②输出的形式;
输出的形式:以航班的具体信息形式输出。
③程序所能达到的功能;
程序所能达到的功能包括:查询、订票和添加新的航班。
三 概要设计
1 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
{
in_stream>>list[i].key
>>list[i].info. f_num
>>list[i].info. s_add
>>list[i].info.a_add
>>list[i].info.work_date
>>list[i].info.s_time
>>list[i].info.a_time
5 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
姓名 : 张名扬
《数据结构》课程设计
struct Node;
//单链表结点类型
typedef struct Node RadixNode;
struct Node
{
KeyType key[D]; //关键字
DataType info; //数据信息
}
while(p!=NULL)
{
k=p->key[j];
//按排序码的第 j 个分量进行分配
if(sllist[k].f==NULL) sllist[k].f=p; // 若第 k 个堆为空,则当前记录为队头
else (sllist[k].e)->next=p;
// 否则当前记录链接到第 k 队的队尾
cout<<" "<<p->info.price<<"元"<<endl;
cout<<" "<<p->info.yu;
}
void Cout_info2_2(flight F[],int i)//方式二
{
cout<<" "<<F[i]. f_num;
cout<<" "<<F[i].s_time;
8 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
RadixNode *next;
};
typedef RadixNode * RadixList;
typedef struct SLNode
{
RadixNode *f;
//对列的头指针
RadixNode *e;
//对列的尾指针
}SLList;
SLList sllist[R];
void radixSort(RadixList * plist, int d, int r) //基数排序
void copy(flight F[],Node element[])
//将排好的序列(链表)转化成顺序
表存储形式
9 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
姓名 : 张名扬
《数据结构》课程设计
{ RadixList p=element; p=p->next; int i; for(i=0;i<N && p!=NULL;i++) { strcpy(F[i]. f_num,p->info. f_num); F[i].s_time=p->info.s_time; F[i].a_time=p->info.a_time; strcpy(F[i]. s_add,p->info. s_add); strcpy(F[i].a_add,p->info.a_add); strcpy(F[i].work_date,p->info.work_date); strcpy(F[i].FlightType,p->info.FlightType); F[i].price=p->info.price; F[i].yu=p->info.yu; p=p->next; }
}
while(p!=NULL)
{
k=p->key[j];
//按排序码的第 j 个分量进行分配
if(sllist[k].f==NULL) sllist[k].f=p; // 若第 k 个堆为空,则当前记录为队头
6 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
姓名 : 张名扬
p=p->next;
}
cout<<endl;
}
void output_ALL_info2(flight F[]) //方式二
{
Cout_info1();
for(int i=0;i<N;i++)
{
Cout_info2_2(F,i);
}
cout<<endl;
}
//--------------信 息 复 制----------------
>>list[i].info.FlightType
7 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
姓名 : 张名扬
《数据结构》课程设计
>>list[i].info.price >>list[i].info.yu; list[i].next=NULL; } } //------------信 息 显 示------------
//票价
int yu;
//余票
}DataType;
struct flight Flight[N];
//-----------按航班号进行基数排序-----------
typedef char KeyType; #define D 7 #define R 'a'
// D 为排序码的最大位数 // R 为基数,这里为小于字母'a'代表的整型值
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include <fstream>
#define N 15 //航班数
#include <cstdlib>
using namespace std;
//航班信息
typedef struct flight
cout<<" "<<p->info.s_time;
cout<<" "<<p->info.a_time;
cout<<" "<<p->info. s_add;
cout<<" "<<p->info.a_add;
cout<<" "<<p->info.work_date;
cout<<" "<<p->info.FlightType;
{
int i,j,k;
RadixNode *p, *head;
head=(*plist)->next;
for(j=d-1; j>=0; j--) //进行 d 次分配和收集
{
p=head;
for(i=0; i<r; i++)
{
sllist[i].f=NULL; sllist[i].e=NULL; //清队列
sllist[k].e=p;
2 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
姓名 : 张名扬
《数据结构》课程设计
p=p->next;
}
i=0;
while(sllist[i].f==NULL) i++;
// 从 r 个队列中找出第一个非空的队列
p=sllist[i].e; head=sllist[i].f;
cout<<" "<<F[i].yu<<endl;
}
//显示所有航班信息
void output_ALL_info1(Node element[]) //方式一
{
RadixList p=element;
Cout_info1();
p=p->next;
while(p!=NULL)
{
Cout_info2_1(p);
//按表的格式输出某个航班信息
void Cout_info1()
//显示头部信息
{
cout<<"
***************************************\n"<<endl;
cout<<"
*************航 班 信 息***************\n"<<endl;
cout<<"
姓名 : 张名扬
《数据结构》课程设计
开始
初始化信息
从文件获取 数据 排序
以文件的 形式存储
数据
查询
判断操作 订票
显示排序内 容
按
按
起
起
始
止
站
时
间
按
航
班
号
显示内容
结束
4 中南民族大学计算机科学学院 专业:计算机科学与技术 学号: 10061103
姓名 : 张名扬
《数据结构》课程设计
四 详细设计
代码段
《数据结构》课程设计
else (sllist[k].e)->next=p;
// 否则当前记录链接到第 k 队的队尾
sllist[k].e=p;
p=p->next;
}
i=0;
while(sllist[i].f==NULL) i++;
// 从 r 个队列中找出第一个非空的队列
p=sllist[i].e; head=sllist[i].f;
《数据结构》课程设计
一 目的
航班信息的查询与检索
本系统的设计目的主要为实现:1.为客户提供航线查询功能: 根据旅客提出的终 点站名输出下列信息 航班号、飞机号、星期几飞行;2.为客户提供订票功能:为客户需要, 提供相应航班的售票余票信息.
二 需求分析
1、要解决的问题
1.为客户提供航线查询功能: 根据旅客提出的终点站名输出下列信息 航班号、飞机 号、星期几飞行;2.为客户提供订票功能:为客户需要,提供相应航班的售票余票信息.
void mainmenu() //主菜单
void copy(flight F[],Node element[])
//将排好的序列(链表)转化成顺序
表存储形式
void Cout_info1()
//显示头部信息
具体算法实现
//----------基数排序-----------
void radixSort(RadixList * plist, int d, int r) //基数排序
姓名 : 张名扬
《数据结构》课程设计
cout<<" "<<F[i].a_time;
cout<<" "<<F[i]. s_add;
cout<<" "<<F[i].a_add;
cout<<" "<<F[i].work_date;
cout<<" "<<F[i].FlightType;
cout<<" "<<F[i].price<<"元";
2、问题分析
1.对航班的信息进行排序和查找,可以按航班号,起点站,终点站,起飞时间和到达 时间进行查询.2 采用快速排序法对航班号进行排序 3.采用二分查找法对排好序的航班进行 查询.4.每条航班记录包含八项内容:航班号、起点站、终点站、班期、起飞时间、到达时 间、飞机型号以及票价等 5.航班信息事先存入文件,要查询的信息全部从文件中读取