吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6454|回复: 18
收起左侧

[C&C++ 转载] C语言课设飞机票订购系统

[复制链接]
宇longer 发表于 2019-7-2 12:25
本帖最后由 宇longer 于 2019-7-3 11:29 编辑

大学课设是一个锻炼自己的机会,要珍惜啊
一、问题描述:    某航空公司只有MN个座位的飞机,每架飞机每天飞行一趟。通过该系统来实现机票的订购问题。
二、功能要求:1、本系统采用一个包含M×N个数据的结构体数组,每个数据的结构应当包括:起飞地、目的地、 航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。
2、本系统显示这样的菜单:
1)输入航班信息
2)输出航班信息
3)查找航班信息
a、按线路查询
b、按目的地查询
4)订票预约
5)删除订票预约
6)退出系统注:本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入。
查找航班信息既可按线路查,也可按目的地查。查询结果显示空座的信息、数量、已订座的信息、起飞时间等。
3、执行一个具体的功能之后,程序将重新显示菜单。
、测试数据:飞机架数M=5,每架飞机的座位数N=12

*查找航班信息功能的实现有点小复杂,还请耐心


[C] 纯文本查看 复制代码
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h>

#define M 5//飞机数宏定义
#define N 12//座位数宏定义

struct zuoci 
{ 
      int haoma;//座次数
      int biaoji;// 座位订出的标记
      char xingming[20];//订座者姓名
      char zhengjian[30];//订座者的身份证号码
}zuowei[N]; 
struct plane 
{ 
     int no;//航班号
     char qidian[30];//起飞地
     char zhongdian[30];//目的地
     char time[30];//起飞时间
     int left;// 余票
     struct zuoci zuowei[N];//座位订出信息
}plane[M];//M 个航班容量

int num=0,i,j,t;// 定义外部变量(全局变量)

void shuru() //输入航班的功能
{  
    char c; 
    printf(" 请输入您要增加的航班信息 :\n"); 
    printf(" 请输入航班号 :\n"); 
    scanf("%d",&plane[num].no); 
    printf(" 请输入起飞地 \n"); 
    scanf("%s",plane[num].qidian); 
    printf(" 请输入目的地 \n"); 
    scanf("%s",plane[num].zhongdian); printf(" 请输入起飞时间 (例:20190226)\n"); 
    scanf("%s",plane[num].time); 
    printf(" 请输入航班余量 \n"); 
    scanf("%d",&plane[num].left); 
    for(i=0;i<plane[num].left;i++)// 订出标记
        { 
            plane[num].zuowei[i].biaoji=0;
        } 
    num++; 
    getchar();//继续
} 

void shuchu() //输出航班信息的功能
{ 
    printf(" 目前航班 :\n"); 
    printf(" 航班号 \t 起飞地 \t 目的地 \t 起飞时间 \t 票数\t\n"); 
    for(i=0;i<num;i++) 
    printf("%d\t\t%s\t\t%s\t\t%s\t\t%d\t\n",plane[i].no,plane[i].qidian,
    plane[i].zhongdian,plane[i].time,plane[i].left);
    getchar();//继续
} 

//查找航班信息-一级子函数
int chazhao()
{
    int chazhao1(int x);
    int i, j, no;
    char a[20], b[20];
    printf("您已选只有择3.查找航班信息。\n");
	for (;;)//for循环使程序只有一个出口,即输入0返回上一菜单
    {
    	no= 1;
        printf("请选择查找航班信息方式(0返回菜单) : \n1.按线路查找\n2.按目的地查找\n");
        scanf("%d", &i);
        getchar();
        if(i==0)
        return 0;
        else if(i==1)
        {
            for ( ; ;)
            {
                if (no==0)
                break;
                printf("您已选择1.按线路查找。\n");
                printf("请输入查询线路的起点和目的地: \n");
                printf("请输入起点: \n");
                scanf("%s",a);
                getchar();
                printf("请输入目的地: \n");
                scanf("%s", b);
                getchar();
                for(j= 0;j< M;j++)
                	if ((strcmp(a, plane[j].qidian)==(strcmp(b, plane[j].zhongdian)))==0)
	  				{
						chazhao1(j);
						break;
					}
					else
					{
						if(j= M- 1)
						{
							printf("查找失败,请核对线路后按任意数字继续查找或按0用其他方式查找! \n");
							scanf("%d", &no);
							getchar();
							if (no == 0)
							break;
						}
					}
			}
		}
	    else if(i==2)
		{
			for (; ;)
			{
				if (no==0)
				break;
				printf("您已选择2.按目的地查找。\n");
				printf("请输入目的地: \n");
				scanf("%s", a);
				getchar();
				for(j=0;j < M;j++)
				{
					if (strcmp(a, plane[j].zhongdian)==0)
					{
						chazhao1(j);
						break;
					}
					else
					{
						if(j==M- 1)
						{
							printf("查找失败,请核对目的地后按任意数字继续查找或按0用其他方式查找! \n");
							scanf("%d", &no);
							getchar();
							if (no==0)
							break;
   						}
					}
				}
			}
		}	
		else
		{
			printf("输入错误,请重新输入! \n"); 
			system("pause");//等待用户按一个建,然后返回 
  		}
	} 
	return 0;
} 

int chazhao1( int x)//查找航班信息二级子函数 
{ 
	int chazhao11( int x);
	int chazhao12( int x);
	int chazhao13( int x);
	int chazhao14( int x);
	int i;
	printf("成功匹配到%d航班。\n", plane[x].no);
	for (; ;)
	{ 
		printf("请选择查询选项(0返回菜单) : \n1.显示空座的数量\n2.显示空座的信息\n3.显示已订座的信息\n4.显示起飞时间\n");
		scanf("%d", &i);
		getchar();
		switch (i)
		{
			case 0:return 0;
			case 1:chazhao11(x); break;
			case 2:chazhao12(x); break;
			case 3:chazhao13(x);break;
			case 4:chazhao14(x);break;
			default:printf("错误,重新输入.\n");
		}
	}
}

int chazhao11(int x)
{
	int i, k=0;
	for(i= 0;i<N;i++)
	if (plane[x].zuowei[i].biaoji =='N')
	k+=1;
	printf("%d 航班剩余%d个空座\n",plane[x].no, k);
	system("pause");
	return 0;
}

int chazhao12(int x)
{
	int i;
	printf("%d剩余空座有:\n", plane[x].no);
	for(i= 0;i<N;i++)
	if (plane[x].zuowei[i].biaoji=='N')
	printf("%d号座%c", plane[x].zuowei[i].haoma,(i+ 1)%5==0 ?'\n':'t');
	system("pause");
	return 0;
}

int chazhao13(int x)
{
	int i;
	printf("航班号: %d\n起飞时间:%s\n,目的地:%s\n\n", plane[x].no, plane[x].time, plane[x].qidian, plane[x].zhongdian);
	for(i= 0;i<N;i++)
	if (plane[x].zuowei[i].biaoji != 'N')
	printf("姓名:%s\n座号:%d\n身份证号:%s\n\n", plane[x].zuowei[i].xingming,plane[x].zuowei[i].haoma, plane[x].zuowei[i].zhengjian);
	system("pause");
	return 0;
}

int chazhao14(int x)
{
	printf("航班号: %d\n起飞时间: %s\n", plane[x].no, plane[x].time);
	system("pause");
	return 0;
}

void dingpiao() //订票的功能
{ 
	int n; 
	printf(" 请输入订票的航班号: \n"); 
	scanf("%d",&n); 
	for(i=0;i<num;i++) 
	if(plane[i].no==n) 
	break; 
	printf(" 余票: %d\n",plane[i].left); 
	for(j=0;plane[i].zuowei[j].biaoji==1;j++);
	printf(" 请输入姓名拼音: "); 
	scanf("%s",plane[i].zuowei[j].xingming); 
	printf(" 请输入身份证号码: "); 
	scanf("%s",plane[i].zuowei[j].zhengjian); 
	printf(" 分配给座位是 :%d 号\n",j+1); 
	plane[i].zuowei[j].biaoji=1; 
	plane[i].left--; 
	getchar();//继续
} 
void cancel() //删除订票的功能
{ 
	int n,m; 
	char judge; 
	printf(" 请输入删除的订票航班号: "); 
	scanf("%d",&n); 
	for(i=0;i<num;i++) 
	if(plane[i].no==n) break; 
	printf(" 请输入删除的座位号: "); 
	scanf("%d",&m); 
	plane[i].zuowei[m-1].biaoji=0;
	plane[i].left++; 
	getchar();//继续
} 

void main()//主函数
{ 
	int menu; 
	do 
	{ 
		menu=0; 
		printf(" ——欢迎使用飞机订票系统 ——\n"); 
		printf("[ 请选择需要的功能 ]\n"); 
		printf("|| 1、输入航班信息 ||\n"); 
		printf("|| 2、输出航班信息 ||\n"); 
		printf("|| 3、查找航班信息 ||\n"); 
		printf("|| 4、订 票 预 约 ||\n"); 
		printf("|| 5、删除订票预约 ||\n"); 
		printf("|| 6、退 出 系 统 ||\n"); 
		printf(">>>>>>>>>>>>>><<<<<<<<<<<<<\n"); 
		printf(" 输入选择功能序号 : "); 
		scanf("%d",&menu); 

		switch(menu) 
		{ 
			case 1: shuru();break; 
			case 2: shuchu();break; 
			case 3: chazhao();break; 
			case 4: dingpiao();break; 
			case 5: cancel();break; 
			case 6: break; 
		} //如果没有符合的序号,则不执行,流转下一条
		getchar();//子函数配合输入继续
	} //循环体位置
	while(menu!=6); //判断条件
}



流程图

流程图

免费评分

参与人数 6吾爱币 +9 热心值 +6 收起 理由
CrazyNut + 3 + 1 谢谢大佬 实训作业Get
oulen + 1 + 1 我很赞同!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
166818008 + 1 + 1 排版(不局限于代码)也是一个重要的技能
冰露㊣神 + 1 代码格式实在看不下去,不知道是你贴代码原因还是自己写的原因
bydlyzx + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

山野村夫-陈墨 发表于 2019-7-11 22:14
switch(menu)
        {
            case 1: shuru();break;
            case 2: shuchu();break;
            case 3: chazhao();break;
            case 4: dingpiao();break;
            case 5: cancel();break;
            case 6: break;
        }
这块可以用函数指针实现:

void (*p[]) void = {shuru,shuchu,dingpiao,cance};
p[meau-1];
bihui 发表于 2019-7-2 13:08
遗忘丶彻底 发表于 2019-7-2 13:19
bydlyzx 发表于 2019-7-2 13:33
感觉自己真不是编程的料,上学的时候,就不喜欢做应用题,对数学不是那么喜欢。

如今一看编程,纯粹就是做数学应用题啊!
ayaoko 发表于 2019-7-2 13:33
数据 同步,这个要传感器对接吧,采样抓取估计也要
冰露㊣神 发表于 2019-7-2 14:13
只能给热心,代码风格,函数命名啥的都是不行,你没想过把他整合到一起嘛,想func1 func2这种的,他参数都是一个x
huste 发表于 2019-7-2 14:17
谢谢分享
 楼主| 宇longer 发表于 2019-7-2 17:02
冰露㊣神 发表于 2019-7-2 14:13
只能给热心,代码风格,函数命名啥的都是不行,你没想过把他整合到一起嘛,想func1 func2这种的,他参数都 ...

感谢大佬提醒,嘻嘻
tkertm 发表于 2019-7-10 19:53
谢谢分享,看一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表