| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 358 人关注过本帖
标题:大一新手求大神帮忙调试
只看楼主 收藏
酷酷的疼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-6-19
结帖率:0
  已结贴   问题点数:20  回复次数:5   
大一新手求大神帮忙调试
附件: 您没有浏览附件的权限,请 登录注册
2017-06-19 09:49
酷酷的疼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-6-19
  得分:0 
程序代码:
#include<iostream>
#include<string.h>
#include<conio.h>
#include<windows.h>
//宏定义
#define MaxSpace 100
#define keylen 6
#define RADIX_n 10
#define RADIX_c 26
#define SHOW_MSG_ERROR   
/*输入数据错误,程序终止执行!\n"*/
 a
typedef char KeyType;
typedef struct
{//航班记录结构描述
    char start[6];                    //起点站
    char end[6];                      //终点站
    char sche[6];                     //班期
    char time1[6];                    //起飞时间
    char time2[6];                    //到达时间
    char model[3];                    //机型
    int price;                        //票价
}InfoType;
typedef struct
{//关键字-静态链表结点类型
    KeyType keys[keylen];             //关键字(航班号)
    InfoType others;
    int next;
}SLNode;
typedef struct
{//关键字序列-静态链表类型
    SLNode s1[MaxSpace];              //静态链表
    int keynum;                       //关键字字符数
    int length;                       //表长

}SLList;
typedef int ArrType_n[RADIX_n];       //数字字符
typedef int ArrType_c[RADIX_c];       //字母字符
KeyType key[keylen],k1[4];
//功能函数声明
void Distribute(SLNode *s1, int i, ArrType_n &f, ArrType_n &e);
void Collect(SLNode *s1, int i, ArrType_n f, ArrType_n e);
void Distribute_c(SLNode *s1, int i, ArrType_c &f, ArrType_c &e);
void Collect_c(SLNode *s1, int i, ArrType_c f, ArrType_c e);
void RadixSort(SLList &L);
void Arrange(SLList &L);
int BinSearch(SLList L, KeyType key[]);
void SeqSearch(SLList L, KeyType key[],int i);
void DisplayStyle(int i, char *s);
void Display(SLList L, int i);
void searchcon(SLList L);
void Prompt();
bool InputData(SLList &L);
bool Check_HangBanHao(char *HangBanHao);
//1.数字字符分配函数
void Distribute(SLNode *s1, int i, ArrType_n &f, ArrType_n &e)
{
    int j,p;
    for ( j=0;j<RADIX_n;j++)      f[j]=0;
    for ( p=s1[0].next; p; p=s1[p].next)
    {
        j=s1[p].keys[i]%48;            //将数字字符映射为十进制数字
        if ( !f[j]) f[j]=p;
        else  s1[e[j] ].next=p;         //将p指向的结点插入到第j个子表中
        e[j]=p;
    }
}
//2.数字字符收集函数
void Collect(SLNode *s1, ArrType_n f, ArrType_n e)
{
    int j,t;
    for ( j=0;!f[j];j++);              //找第一个非空子表
    s1[0].next=f[j];                   //将s1[0].next指向第一个非空子表的第一个结点
    t=e[j];
    while ( j<RADIX_n-1)
    {
        for (j=j+1;j<RADIX_n-1  &&  !f[j]; j++);//找下一个非空子表
        if ( f[j])   s1[t].next=f[j]; t=e[j];   //链接到主链表
    }
    s1[t].next=0;
}
//3.字母字符分配函数
void Distribute_c(SLNode *s1, int i, ArrType_c &f, ArrType_c &e)
{
    int j,p;
    for ( j=0; j<RADIX_c; j++)
        f[j]=0;
    for (p=s1[0].next; p!=0; p=s1[p].next)
    {
        j=s1[p].keys[i]%65;            //将字母字符映射为字母集中的相应序号
        if ( !f[j])  f[j]=p;
        else   s1[e[j]].next=p;        //将p指向的结点插入到第j个子表中
        e[j]=p;
    }
}
//4.字母字符收集函数
void Collect_c(SLNode *s1, ArrType_c f, ArrType_c e)
{
    int j,t;
    for (j=0;!f[j];j++);                //找第一个非空子表
    s1[0].next=f[j]; t=e[j];            //将s1[0].next指向第一个非空子表的第一个结点
    while ( j<RADIX_c-1)
    {
        for (j=j+1; j<RADIX_c-1 &&  !f[j]; j++);//找下一个非空子表
        if ( f[j])  s1[t].next=f[j]; t=e[j];  //链接到主链表
    }
    s1[t].next=0;
}
//5.链式基数排序函数
void RadixSort(SLList &L)
{
    int i;
    ArrType_n fn, en;
    ArrType_c fc, ec;
    for ( i=0; i<L.length; i++)         //将线性表改造为静态链表
        L.s1[i].next=i+1;
    L.s1[L.length].next=0;              //"0"表示空指针
   
//按最低位优先依次对关键字进行分配和收集
    for ( i=L.keynum-1; i>=2;i--)       //对低4位数字部分进行分配和收集
    {
        Distribute(L.s1,i,fn,en);
        Collect(L.s1,fn,en);
    }
    for (i=1;i>=0;i--)                  //对高位2位字母进行分配和收集
    {
        Distribute_c(L.s1,i,fc,ec);
        Collect_c(L.s1,fc,ec);
    }
}
//6.按指针链整理线性表
void Arrange(SLList &L)
{
    int p,q,i;
    SLNode temp;
    p=L.s1[0].next;                      //p指向第一个结点
    for ( i=1;i<L.length;i++)
    {
        while (p<i)                      //查找第i个结点,并用p指向此结点
            p=L.s1[p].next;
        q=L.s1[p].next;
        if (p!=i)                        //若第i个结点不在当前位置,交换节点数据
        {
            temp=L.s1[p];
            L.s1[p]=L.s1[i];
            L.s1[i]=temp;
            L.s1[i].next=p;
        }
        p=q;                             //p指向下一个未调整结点
    }
}
//7.折半查找函数
int BinSearch(SLList L, KeyType key[ ])  //源代码参见:8.3.4 详细设计2.(3)
{  //折半查找函数。在有序表L中查找关键字为key[]的记录
  int high, low, mid;                     //上下界和中值
  low=1;                                  //下界初始化为1
  high=L.length;                          //上界初始化为表长
  while ( low<=high)                      //辨别查找区间
  {
     mid=(low+high)/2;                    //计算中值
     if (strcmp(key,L.s1[mid].keys)==0)   //若正好等于中值
       return mid;                        //查找成功,返回中值
     else if (strcmp(key,L.s1[mid].keys)<0)      //在中值左边
         high=mid-1;                      //调整上界,调整查找区间
     else                                 //在中值右边
         low=mid+1;                       //调整下界,调整查找区间
  }
  return 0;                               //查找失败,返回0
}


//8.顺序查找函数
void SeqSearch(SLList L, KeyType key[],int   i)//源代码参见:8.3.4 详细设计2.(3)
{//顺序查找函数,在有序表L中查找关键字位Key[]的记录
   int j,k,m=0;
   for(j=1;j<=L.length;j++)
{
  switch(i)              //按不同关键字查找
  {
        case 2: k=strcmp(key,L.s1[j].others.start);   break;
               //按顺序依次调用strcmp函数进行比较
        case 3: k=strcmp(key,L.s1[j].others.end);  break;
               //按顺序依次调用strcmp函数进行比较
        case 4: k=strcmp(key,L.s1[j].others.time1); break;
              //按顺序依次调用strcmp函数进行比较
        case 5: k=strcmp(key,L.s1[j].others.time2);  break;
             //按顺序依次调用strcmp函数进行比较
  }
if(k==0)
{                       //查找成功
    m=1;                 //查找标识置为1
    Display(L,j);        //显示查找结果
}
}
 if(m==0)           
    //查找失败
   printf("很抱歉,无此航班信息.\n");   //输出提示信息
}



//9.打印班次信息函数
void Display (SLList L, int i)           //源代码参见:8.3.4 详细设计2.(4)
{
   printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");
   DisplayStyle(6,L.s1[i].keys);DisplayStyle(7,L.s1[i].others.start);
                           //控制对齐输出
   DisplayStyle(7,L.s1[i].others.end);DisplayStyle(7,L.s1[i].others.sche);
                           //控制对齐输出
   DisplayStyle(9,L.s1[i].others.time1);DisplayStyle(9,L.s1[i].others.time2);
                           //控制对齐输出
   



DisplayStyle(5,L.s1[i].others.model);printf("%6d\n",L.s1[i].others.price);
                           //控制对齐输出
   printf( "\n");
}

//10.调整对齐格式函数
void DisplayStyle(int i, char *s)        //源代码参见:8.3.4 详细设计2.(4)
{//调整格式函数。调整表列对齐
int j;
i-=strlen(s);
for(j=0;j<i; ++j) printf("  ");          //输出占位空格,以便对齐
printf ( "%s,", s);
}

//11.查找交互界面函数
void searchcon(SLList L)                 //源代码参见:8.3.4 详细设计2.(3)
{
  int i=1,k;
  while(i>=1&&i<=6)
  {
printf("\n请选择命令代号(0……6):");
scanf("%d",&i);
switch(i)
{
case 1:
    printf("输入要查询的航班号(字母要大写):");
    scanf("%s,key");k=BinSearch(L,key);
    if(k)  Display(L,k);
    else printf("很抱歉,无此航班的信息。\n");
    break;
case 2:
    printf("输入要查询的航班起点站名:");
    scanf("%s",key);SeqSearch(L,key,i);
    break;
  case 3:
    printf("输入要查询的航班终点站名:");
    scanf("%s",key);SeqSearch(L,key,i);
    break;
  case 4:
    printf("输入要查询的航班起飞时间:");
    scanf("%s",k1);SeqSearch(L,k1,i);
    break;
  case 5:
    printf("输入要查询的航班到达时间:");
    scanf("%s",k1);SeqSearch(L,k1,i);
    break;
  case 6:
    printf("请依次录入航班信息数据:\n");
    InputData(L);
    break;
  case 0:
    exit(0);
}
  Prompt();              //循环显示主菜单
}
}
//12.显示主菜单函数
void Prompt()
{
    printf( "******************************************\n");
    printf( "    *   航班信息查询与检索系统    *\n");
    printf( "    *      1.按航班号查询         *\n");
    printf( "    *      2.按起点站查询         *\n");
    printf( "    *      3.按终点站查询         *\n");
    printf( "    *      4.按起飞时间查询       *\n");
    printf( "    *      5.按到达时间查询       *\n");
    printf( "    *      6.添加班次             *\n");
    printf( "    *      0.退出系统             *\n");
    printf( "******************************************\n");
}
//13.输入航班记录函数
bool InputData(SLList &L)                //源代码参见:8.3.4 详细设计2.(2)
{
    int i=++L.length;
    char yn='y';
    printf("\n请依次录入航班信息数据(航班号由2位大写字母和4位数字组成):");
    do
    {
        printf("\n航班号 起始站 终点站 航班期 起飞时间 到达时间 机型 票价 \n");
        scanf ("%s%s%s%s%s%s%s%d", L.s1[i].keys, L.s1[i].others.start, L.s1[i].others.end,
            L.s1[i].others.sche, L.s1[i].others.time1, L.s1[i].others.time2,
            L.s1[i].others.model, &L.s1[i].others.price);
        fflush(stdin);                   //清空输入缓冲区
        if( !Check_HangBanHao(L.s1[i].keys))   return false;
        ++i;
        printf( "继续输入吗? y/n: ");
    }while ( (yn=getche())=='y' || yn=='Y');
        printf( "\n");
    L.length= i-1;
    RadixSort(L);
    Arrange(L);
    return true;
}
//14.航班号输入格式校验函数
bool Check_HangBanHao(char *HangBanHao)  //源代码参见:8.3.4 详细设计2.(2)
{//航班号输入格式校验函数
    if(strlen(HangBanHao) !=6)  return false;  //航班号必须为6位
    else if(HangBanHao[0]<'A'||HangBanHao[0]>'Z' ||HangBanHao[1]<'A'||HangBanHao[1]>'Z')
        return false;                    //1-2位须为大写字母
    for ( int i=2; i<=5; i++)
        if (HangBanHao[i]<'0' || HangBanHao[i]>'9')
            return false;                //3-6位须为数字
        return true;
}
//15.主函数
int main()
{
    SLList L;
    L.keynum=6; L.length=0;              //初始化
    Prompt();                            //显示主菜单
    if ( !InputData(L))                  //信息录入,并做输入校验
    {
        printf (" SHOW_MSG_ERROR");
        return 1;
    }
    searchcon(L);                        //执行相关查询
    return 0;
}
2017-06-19 09:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:363
帖 子:12338
专家分:48804
注 册:2012-10-18
  得分:10 
哪里存在问题呢

DO IT YOURSELF !
2017-06-19 10:09
酷酷的疼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-6-19
  得分:0 
回复 3楼 wp231957
运行过程中录入航班信息后,进行查找时会提示停止工作
2017-06-19 11:13
beichei5d
Rank: 4
等 级:业余侠客
威 望:1
帖 子:78
专家分:218
注 册:2016-3-8
  得分:10 
宏定义下面的a是干啥的 ?我给注释掉了。。输了8组数据 查询时程序终止了 。。。

你现在所偷的懒,都将成为以后扇你的巴掌!共勉吧。。。
2017-06-19 11:25
酷酷的疼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-6-19
  得分:0 
回复 5楼 beichei5d
a那个我改过了,就是查询时中止了这个问题怎么解决??

2017-06-19 11:34







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065416 second(s), 8 queries.
Copyright©2004-2017, BCCN.NET, All Rights Reserved