数据结构课程设计,链表的增删改查,航空订票系统,c++程序

直接就上源码了,就一个程序很简单,vc++创建的成.cpp类型就可以。代码注释也有,祝大家期末课设愉快。

 

 (最近电脑硬盘坏了,后悔很多资料没有备份,以后尽量把写过的代码上传,也算给自己做个备份吧)

 

​
#include<iostream>
using namespace std;
#include<fstream>
#include<stdlib.h>
#include<string.h>

typedef struct Node
{
	int hangbanhao;
    char jixing[10];
    char qifeichengshi[10];
	char jiangluochengshi[10];
	char qifeishijian[10];
	char jiangluoshijian[10];
    int zuoweishu;
	int piaojia;
    struct Node *next;
}LNode,*LinkList;

typedef struct CK
{
  char name[10];
  char id[18];

  struct CK *next;
}ck,*cke;

void import(int n,LinkList &L)//录入航班函数: n为所要录入航班的数量:
{
    L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;
	LNode * tail=L;//等价LinkList tail=L;
    for(int i=0; i<n; i++)
     {
		LNode *p=(LinkList)malloc(sizeof(LNode));//就是创建一个p结点,关键就是写法,LNdoe *p;
        cout<<"请输入第"<<i+1<<"个航班的航班号 ";
        cin>>p->hangbanhao;
		cout<<"请输入第"<<i+1<<"个航班的机型 ";
        cin>>p->jixing;
		cout<<"请输入第"<<i+1<<"个航班的起飞城市 ";
        cin>>p->qifeichengshi;
		cout<<"请输入第"<<i+1<<"个航班的降落城市 ";
        cin>>p->jiangluochengshi;
		cout<<"请输入第"<<i+1<<"个航班的起飞时间 ";
		cin>>p->qifeishijian;
		cout<<"请输入第"<<i+1<<"个航班的降落时间 ";
		cin>>p->jiangluoshijian;
	    cout<<"请输入第"<<i+1<<"个航班的座位数 ";
		cin>>p->zuoweishu;
		cout<<"请输入第"<<i+1<<"个航班的票价";
		cin>>p->piaojia;
		
		p->next=NULL;
		tail->next=p;
		tail=p;//尾插法,根据循环画图可知,tail指针始终在最后p31
	}
}
//写入本地文件,并读取输出显示
void show_L(LinkList &L)
{
  ofstream out("out.txt");//实例化一个对象  
   if (out.is_open()) 
   {
      LinkList p=L->next;
      while(p){
		out<<"航班号:";
	    out<<p->hangbanhao;
	    out<<" 机型:";
		out<<p->jixing;
        out<<" 起飞城市:";
	    out <<p->qifeichengshi;
		out<<" 降落城市:";
		out <<p->jiangluochengshi;
		out<<" 起飞时间:";
		out <<p->qifeishijian;
        out<<" 降落时间:";
		out <<p->jiangluoshijian;
		out<<" 座位数:";
		out<<p->zuoweishu;
		out<<" 票价:";
		out<<p->piaojia;
		
		out<< "\n";//用于换行,是下面in.getline的关键
	    p=p->next;
	  }
   
   }
   out.close(); //写完

    char buffer[256]; 
    ifstream in("out.txt");  
	if (! in.is_open())  
       { cout << "Error opening file"; exit (1); }  
       while (!in.eof() )  
       {  
           in.getline (buffer,100);  
           cout << buffer << endl;  
       }  
}
//按航班号查找
LinkList GetElem_L(LinkList &L,int e)
{
      LinkList p=L->next;
      while(p)
	  {
		if(p->hangbanhao!=e)
			p=p->next;
		else return p;
	  }
     return 0;
}
//按航班起降城市查找
LinkList GetElem_Lc(LinkList &L,char qi[10],char ji[10])
{
      LinkList p=L->next;
      while(p)
	  {
		if(strcmp(p->qifeichengshi,qi)!=0||strcmp(p->jiangluochengshi,ji)!=0)
			p=p->next;
		else return p;
	  }
      return 0;
}

//删除
int ListDelete_L(LinkList &L,int e){
	LinkList p=L;
	while(p->next&&p->next->hangbanhao!=e){
		p=p->next;//直到查找到要删除的结点
	}
	if(!p->next)
		return 0;
	LinkList q=p->next;
	p->next=q->next;//课本p29,p->next=p->next->next;
	free(q);//本题q是需要删除的结点
	return 1;
}
//插入
int ListInsert_L(LinkList &L,int i){

	LinkList p=L;//i为插入的位置
	int j=0;
	while(p&&j<i-1){
		p=p->next;
		++j;
	}
	if(!p||j>i-1)
		return 0;
	LNode *s=(LinkList)malloc(sizeof(LNode));
	cout<<"输入航班号:";
	cin>>s->hangbanhao;
	cout<<"输入机型:";
	cin>>s->jixing;
	cout<<"输入起飞城市:";
	cin>>s->qifeichengshi;
	cout<<"输入降落城市:";
	cin>>s->jiangluochengshi;
	cout<<"输入起飞时间:";
	cin>>s->qifeishijian;
	cout<<"输入降落时间:";
	cin>>s->jiangluoshijian;
	cout<<"输入座位数:";
	cin>>s->zuoweishu;
	cout<<"输入票价:";
	cin>>s->piaojia;
	
	s->next=p->next;
	p->next=s;//课本p29,s->next=p->next;p->next=s;
	return 1;
}
//修改
LinkList xiugai(LinkList &L,int yxg)
{
  LinkList q=L->next;
      while(q)
	  {
		if(q->hangbanhao!=yxg)
			q=q->next;
		else return q;
	  }
  return 0;
}
//乘客信息录入
void importren(int n,cke &C)//录入航班函数: n为所要录入航班的数量:
{
    C=(cke)malloc(sizeof(ck));
	C->next=NULL;
	ck*ta=C;
    for(int i=0; i<n; i++)
     {
		ck *p=(cke)malloc(sizeof(ck));//就是创建一个p结点,关键就是写法,LNdoe *p;
        cout<<"请输入第"<<i+1<<"个乘客的姓名 ";
        cin>>p->name;
		cout<<"请输入第"<<i+1<<"个航班的身份证ID ";
        cin>>p->id;
		
	    p->next=NULL;
		ta->next=p;
		ta=p;//尾插法,根据循环画图可知,tail指针始终在最后p31
	}
}
//订票乘客信息和航班信息写入本地和读取
void show_dp(cke &C,LinkList &R)
{
  ofstream out("dinpiao.txt");//实例化一个对象  
   if (out.is_open()) 
   {
      cke p=C->next;
      while(p){
		out<<"姓名 ";
	    out<<p->name;
	
	    out<<"  身份证ID ";
		out<<p->id;
		out<< "\n";//用于换行,是下面in.getline的关键
	    p=p->next;
	  }
	  if(R->zuoweishu-1>=0)
	  {
	   out<<"航班号:"<<R->hangbanhao;
	   out<<" 机型:"<<R->jixing;
	   out<<" 起飞城市:"<<R->qifeichengshi;
	   out<<" 降落城市:"<<R->jiangluochengshi;
	   out<<" 起飞时间:"<<R->qifeishijian;
	   out<<" 降落时间:"<<R->jiangluoshijian;
	   out<<" 座位数:"<<R->zuoweishu-1;//订票之后座位数减一
	   out<<" 票价:"<<R->piaojia;
	   out<< "\n";//用于换行,是下面in.getline的关键
	   out<<"订票成功";
	   out<< "\n";//用于换行,是下面in.getline的关键
	  }
	  else 
	  {
		out<<"航班号:"<<R->hangbanhao;
	    out<<" 机型:"<<R->jixing;
	    out<<" 起飞城市:"<<R->qifeichengshi;
	    out<<" 降落城市:"<<R->jiangluochengshi;
	    out<<" 起飞时间:"<<R->qifeishijian;
	    out<<" 降落时间:"<<R->jiangluoshijian;
	    out<<" 座位数:"<<R->zuoweishu;
	    out<<" 票价:"<<R->piaojia;
	    out<< "\n";//用于换行,是下面in.getline的关键
        out<<"该航班暂无票,请选择其他航班";
		out<< "\n";//用于换行,是下面in.getline的关键
	  }
   }
   out.close(); //写完
    char buffer[256]; 
    ifstream in("dinpiao.txt");  
	if (! in.is_open())  
       { cout << "Error opening file"; exit (1); }  
       while (!in.eof() )  
       {  
           in.getline (buffer,100);  
           cout << buffer << endl;  
       }  
}
//退票乘客信息和航班信息写入本地和读取
void show_tp(cke &C,LinkList &R)
{
  ofstream out("dinpiao.txt");//实例化一个对象  
   if (out.is_open()) 
   {
      cke p=C->next;
      while(p){
		out<<"姓名 ";
	    out<<p->name;
	
	    out<<"身份证ID ";
		out<<p->id;
		out<< "\n";//用于换行,是下面in.getline的关键
	    p=p->next;
	  }
	  out<<"航班号 "<<R->hangbanhao;
	  out<<" 机型:"<<R->jixing;
	  out<<" 起飞城市:"<<R->qifeichengshi;
	  out<<" 降落城市:"<<R->jiangluochengshi;
	  out<<" 起飞时间:"<<R->qifeishijian;
	  out<<" 降落时间:"<<R->jiangluoshijian;
	  out<<" 座位数:"<<R->zuoweishu;//退票之后不需要加1,用最初的座位数;
	  out<<" 票价:"<<R->piaojia;
	  out<< "\n";//用于换行,是下面in.getline的关键
	  out<<"退票成功";
	  out<< "\n";//用于换行,是下面in.getline的关键
   }
   out.close(); //写完
    char buffer[256]; 
    ifstream in("dinpiao.txt");  
	if (! in.is_open())  
       { cout << "Error opening file"; exit (1); }  
       while (!in.eof() )  
       {  
           in.getline (buffer,100);  
           cout << buffer << endl;  
       }  
}
void menu()
{
    cout<<"欢迎使用航空订票系统"<<endl;
    cout<<"1请先录入航班信息"<<endl;
    cout<<"2根据航班号查找航班"<<endl;
	cout<<"3根据起降城市查找航班"<<endl;
    cout<<"4删除航班"<<endl;
    cout<<"5插入航班"<<endl;
    cout<<"6修改航班"<<endl;
	cout<<"7订票录入乘客信息"<<endl;
	cout<<"8退票"<<endl;
}
int main()
{   
   LinkList L;//L是指针 航班
   cke C;//乘客
    while(1)
	{
	  
      menu();
      int caozuo;
      cout<<"请选择操作";
      cin>>caozuo;

      switch(caozuo)
	  {
	case 1:
//创建
	  int num;
      cout<<"请输入要录入的航班数:";
      cin>>num;
      cout<<endl;
      import(num,L);//录入航班函数: n为所要录入航班的数量:
      cout<<endl;
      cout<<"航班信息录入成功";
      cout<<endl<<endl;
//写入本地文件,并读取输出显示
      show_L(L);
	  break;
    case 2:
//根据航班号查找
      int dchbh;//根据航班号查找
 	  printf("请输入待查航班号:");
      cin>>dchbh;
	  LinkList p;
	  p=GetElem_L(L,dchbh);//查找
	  cout<<"待查航班为:";
	  cout<<"航班号:"<<p->hangbanhao;
	  cout<<" 机型:"<<p->jixing;
	  cout<<" 起飞城市:"<<p->qifeichengshi;
	  cout<<" 降落城市:"<<p->jiangluochengshi;
	  cout<<" 起飞时间:"<<p->qifeishijian;
	  cout<<" 降落时间:"<<p->jiangluoshijian;
	  cout<<" 座位数:"<<p->zuoweishu;
	  cout<<" 票价:"<<p->piaojia;
      cout<<endl<<endl;
      break;
    case 3:
//根据起降城市查找
       char qi[10];
	   char ji[10];
	   printf("请输入待查航班起降城市:");
	   cout<<"输入起飞城市:";
	   cin>>qi;
	   cout<<"输入降落城市:";
	   cin>>ji;
	   LinkList J;
	   J=GetElem_Lc(L,qi,ji);//查找
	   cout<<"待查航班为:";
	   cout<<"航班号:"<<J->hangbanhao;
	   cout<<" 机型:"<<J->jixing;
	   cout<<" 起飞城市:"<<J->qifeichengshi;
	   cout<<" 降落城市:"<<J->jiangluochengshi;
	   cout<<" 起飞时间:"<<J->qifeishijian;
	   cout<<" 降落时间:"<<J->jiangluoshijian;
	   cout<<" 座位数:"<<J->zuoweishu;
	   cout<<" 票价:"<<J->piaojia;
       cout<<endl<<endl;
	   break;
    case 4:
//删除
      int shanchu;
	  printf("请输入要删除的航班号:");
	  scanf("%d",&shanchu);
	  ListDelete_L(L,shanchu);//删除
	  show_L(L);
	  cout<<endl<<endl;
	  break;
    case 5:
//插入
   //这里位置始终在第一行
      ListInsert_L(L,1);//插入
      show_L(L);
	  cout<<endl<<endl;
      break;
	case 6:
//修改
      printf("请输入要修改的航班号:"); 
      int yxg;
      cin>>yxg;
      LinkList q;
	  q=xiugai(L,yxg);//修改
	  cout<<"航班号修改为:";
	  cin>>q->hangbanhao;
	  cout<<"航班机型修改为:";
	  cin>>q->jixing;
	  cout<<"航班起飞城市修改为:";
	  cin>>q->qifeichengshi;
	  cout<<"航班降落城市修改为:";
	  cin>>q->jiangluochengshi;
	  cout<<"航班起飞时间修改为:";
	  cin>>q->qifeishijian;
	  cout<<"航班降落时间修改为:";
	  cin>>q->jiangluoshijian;
	  cout<<"航班座位数修改为:";
      cin>>q->zuoweishu;
	  cout<<"航班票价修改为:";
      cin>>q->piaojia;
      show_L(L);
	  cout<<endl<<endl;
	  break;
    case 7:
//订票
      int renshu;
      cout<<"请选择您要订票的人数:";
      cin>>renshu;
      cout<<endl;
      importren(renshu,C);//录入乘客信息
      cout<<endl;
      cout<<"乘客信息录入成功";
      cout<<endl;
	  int m;
	  cout<<"请输入您要订的航班号:";
	  cin>>m;
	  cout<<endl<<endl;
	  LinkList R;
      R=GetElem_L(L,m);//查找乘客订的航班

	  
	  show_dp(C,R);//写入本地文件,并读取输出显示
	  
	  cout<<endl<<endl;
      break;
    case 8:
//退票
     cout<<"请输入您要退票的航班号:";
	 int yt;
	 cin>>yt;
	 cout<<endl<<endl;
	 LinkList K;
     K=GetElem_L(L,yt);//查找乘客订的航班
	 show_tp(C,K);//写入本地文件,并读取输出显示
     cout<<endl<<endl;
	 break;
	  }//swith的大括号
	}//while的大括号
  return 0;
}//主函数的大括号


​

 

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
目录 总体设计 2 概要设计 2 详细设计 3 调试分析 11 测试数据及截图 11 时间复杂度分析 15 问题思考 15 算法的改进设想 15 课设总结体会 15 附录 17 程序说明 17 源代码 17 主要参考文献 30 总体设计 通过此系统可以实现如下功能:   1).录入:可以录入航班情况(数据存储在一个数据文件中)   2).查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞 抵达城市,航班票价,票价折扣,确定航班是否满仓);   可以输入起飞抵达城市,查询飞机航班情况;   3).订票:(订票情况存在一个数据文件中)   可以订票,如果该航班已经无票,可以提供相关可选择航班;   4).退票: 可退票,退票后修改相关数据文件;   客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。   5).修改航班信息:   当航班信息改变可以修改航班数据文件 概要设计 每个模块的算法设计说明如下: (1)录入模块: 查找单链表的链尾,在链头插入一个"航班信息"的新结点。 (2)浏览模块: 顺着单链表输出航班信息。 (3)修改模块: 输入密码,确认是否有权限对航班信息进行修改,有则进行修改,否则不能修改。 提供两种修改方式:添加航班和对已有的航班信息进行改动(修改和删除),1添加航线 ,0对已有的航班信息进行改动(修改和删除)。 对已有的航班信息进行改动(修改和删除):顺着单链表查找,若找到则进行相关操 作。 (4)查询模块: 提供两种查方式:按航号和起飞抵达城市查询,0代表按航号查询,1代表按起飞抵达 城市查询。 顺着单链表查找,如果与航班号(起飞抵达城市)一致,输出相关信息并询问乘客是 否要订票,若订进入订票模块;否则,查询不成功。 (5)订票模块: 查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成 功;否则查找这个月此乘客起飞城市和降落城市的有空位航班,供乘客选择,若有则订 票,若无则订票不成功并把此乘客的信息录入此航班等候订票队列中,退出订票。 (6)退票模块: 输入要退票的乘客姓名以及所退票的编号,查找乘客资料的链表中是否有这位乘客, 有则删去此结点,并判断是否有等候订票的乘客(有则通知等候订票乘客订票,无则余 票加乘客所退票数);无则退票失败。 (7)文件模块: 顺着单链表链表的信息写入文件。 详细设计 由于此系统流程图太多,流程图所对应的源代码较长,所占篇幅也较大,并且流程图 所对应的源程序订票系统程序中都有,这里就不再赘述。需要说明的是插入、查找 、修改和删除这些线性表的基本操作的流程图在订票系统程序中没有单独函数,是因 为此系统主要是运用线性表的基本操作解决实际问题,具体问题所对应的基本操作代码 有所不同,但思维是相同的,所以这几个操作的源代码已经对应写入了其他具体操作的 函数中,这里也不再给出。 根据订票系统功能的需要定义了如下的结构体: typedef struct wat_ros /*等候订票乘客的信息*/ { char name[20];/*姓名*/ char phone[15];/*等候订票乘客的联系方式*/ struct wat_ros *next; }qnode,*qptr; typedef struct pqueue { qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/ }linkqueue; typedef struct ord_ros { char name[20];/*客户姓名*/ char IDnum[20];/*客户有效证件的编号*/ char airnum[7];/*航班号*/ int dpl;/*订票量*/ char piaohaio[20];//票的编号,由航班号起飞日期此航班订票前的余票量 struct ord_ros *next; }Lnode ,*linklist; typedef struct airline { char qdname[20];/*起点站名*/ char zhname[20];/*终点站名 */ char air_num[7];/*航班号*/ char plane_num[10];/*飞机型号*/ char year[5]; char month[3]; char day[3];/*飞行日期*/ char qhour[3]; char qminute[3];/*起飞时间*/ char jhour[3]; char jminute[3];/*降落时间*/ float zhekou;/*没有折扣为十折*/ float price;/*票价*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ Lnode *o
目 录 摘 要 1 前 言 2 基本算法的实现 3 采用类C语言定义相关的数据类型 3 各模块的伪码算法 4 函数的调用关系图 6 调试分析 7 测试结果 8 源程序(带注释) 11 总 结 22 参考文献 23 致 谢 24 附件Ⅰ 部分源程序代码 25 摘 要 该设计要求对飞机航班信息进行排序和查找。可按航班的班号、起点站、到达站、起飞时间以及到达时间等信息时行查询。对于本设计,主要是通过线性表的逻辑结构、存储结构,线性表及队列上基本运算实现的。可以让我们学会如何把学到的知识用于解决实际问题。 关键词: 航班信息;客户信息;链式存储结构; 前 言 飞机在现今的社会中已是越来越重要了,人们在旅游、工作、学习等生活中对飞机几乎是不可缺少了。而由乘坐飞机所引起的问题也深入到了计算机领域,飞机订票系统就是解决这种问题的一种途径。如人们常常在订票前要对问很多信息(飞机的起落时间,机票的价格,乘坐的人数以及是否有票等等)。这个系统主要是由线性表的链式存储结构以及队列的存储结构来存储航班信息与客户信息的。它的主要功能:1、是录入航班信息,其调用函数为—insert_airline;2、查询航线(航班号,飞机号,日期,航班容量,余票数),其调用函数为:search_air;3、订票(根据客户提供的情况,办理订票手续),其调用函数为:book_air;4、承办退票业务(根据客户提供的情况,办理退票手续),其调用函数为:del_cus;5、删除已有航班信息 ,其调用函数为:del_airline . 设计这样的一个系统可以很快的查出人们所需要的信息,能省去很多的步骤,而且还非常的准确。
航空客运订票系统是一个复杂的软件应用,通常使用更高级的语言如C++或Java进行开发,因为它们有强大的库支持和面向对象特性,更适合处理复杂的业务逻辑。然而,如果你想要了解C语言的基本原理如何应用于简化版的订票系统,我可以提供一个简化版的概述和一些关键代码片段。 C语言在设计这样的系统时,可能会使用结构体来表示航班、乘客等对象,以及全局变量或数组来存储数据。以下是一个非常基础的示例,展示了如何创建一个简单的命令行界面: ```c #include <stdio.h> #include <stdlib.h> typedef struct Flight { char flight_number[20]; int capacity; int seats_taken; } Flight; void book_ticket(Flight *flight, int seat) { if (flight->seats_taken < flight->capacity) { flight->seats_taken++; printf("Seat %d booked for flight %s.\n", seat, flight->flight_number); } else { printf("Sorry, flight %s is fully booked.\n", flight->flight_number); } } int main() { Flight flight1 = {"CA1001", 100, 0}; char choice; while (1) { printf("1. Book ticket\n2. Exit\nChoose: "); scanf("%c", &choice); switch (choice) { case '1': int seat; printf("Enter seat number: "); scanf("%d", &seat); book_ticket(&flight1, seat); break; case '2': printf("Exiting...\n"); return 0; default: printf("Invalid choice.\n"); } } return 0; } ``` 这个例子中,我们定义了一个`Flight`结构体,包含航班号、容量和已售出座位数。`book_ticket`函数用于预订座位,`main`函数则创建了一个简单的菜单来选择操作。 **相关问题:** 1. C语言中如何用结构体表示航班信息? 2. C语言中的`scanf`和`printf`分别有什么作用? 3. 这个例子中如何处理用户输入并执行相应操作?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值