LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 960|回复: 6

可以帮忙看一下吗??订票系统

[复制链接]
发表于 2006-12-12 02:26:27 | 显示全部楼层 |阅读模式
这是人家分享程序,我来测试的在cygwin的gcc中complier
但都出现错误parse error at end of input
可否高手能看看呢??我看了2天还找不出...@@
小弟功力差~~


  1. #include<stdio.h>  //标准输入、输出头文件
  2. #include<string.h>    //包含字符串函数处理头文件
  3. #include<stdlib.h>     //包含动态存储与释放函数头文件
  4. #define N 10000  
  5. struct air         //定义结构体数组
  6. {
  7. int num;
  8. char start[20];
  9. char over[20];
  10. char time[10];
  11. int count;
  12. }s[N];
  13. int i;
  14. int m=0;
  15. #define PRINT "%-d%12s%12s%10s%12d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count    //定义输出格式
  16. void input();    //输入航班信息
  17. void print();    //输出航班信息
  18. void save();     //保存航班信息
  19. void read();     //读取航班信息
  20. void search();   //查找航班信息
  21. void shanchu();  //删除航班信息
  22. void dingpiao(); //订票信息
  23. void tuipiao();  //退票信息
  24. void xiugai();   //修改信息
  25. int main()
  26. {
  27. int  j;
  28. printf("                       ★---您好,欢迎进入中国民航管理系统!---★\n");
  29.     printf("================================================================================\n");
  30.     do
  31. {
  32.   printf("           -------- ☆        1.输入航班信息            ☆-------- \n\n"
  33.                "     -------- ☆        2.浏览航班信息            ☆-------- \n\n"
  34.       "           -------- ☆        3.修改航班信息            ☆-------- \n\n"
  35.       "           -------- ☆        4.查找航班信息            ☆-------- \n\n"
  36.       "           -------- ☆        5.删除航班信息            ☆-------- \n\n"
  37.       "           -------- ☆        6.订票信息                ☆-------- \n\n"
  38.          "           -------- ☆        7.退票信息                ☆-------- \n\n"
  39.          "           -------- ☆        0.退出                    ☆-------- \n\n");
  40.      printf("================================================================================\n");
  41. printf("请在0-7中选择以回车键结束:\n\n");
  42.   scanf("%d",&j);
  43.   switch(j)
  44.   {
  45.   case 1: input();//调用输入模块
  46.     break;
  47.   case 2:print();//调用打印模块
  48.     break;
  49.   case 3:xiugai();//调用修改模块
  50.     break;
  51.   case 4:search();//调用查找模块
  52.     break;
  53.   case 5:shanchu();  //调用删除模块
  54.     break;
  55.   case 6:dingpiao();//调用订票模块
  56.     break;
  57.   case 7:tuipiao();//调用退票模块
  58.     break;
  59.   case 0:;
  60.    break;
  61.   }
  62. }while(j!=0);     //判断结束
  63. printf("谢谢使用,再见!\n");
  64. }//主函数结束
  65. void input()//打印模块程序
  66. {
  67. char f[]="2008china";    //设置密码
  68. int y;
  69. printf("请输入密码并以回车键结束:\n\n");
  70. scanf("%s",f);          //读取密码
  71. if(strcmp(f,"2008china")==0)
  72. {
  73.   printf("请依次输入航班信息(机票数位0结束输入):\n\n"
  74.          "完成输入信息请键入w以回车键结束\n\n");      //打印提示信息
  75.   printf("--------------------------------------------------------------------------\n");
  76.    for(i=0;i<N;i++)
  77.    {
  78.   
  79.   printf("请输入航班号:\n");  
  80.   scanf("%d",&s[i].num);     //读取航班号
  81.   printf("请输入起始站:\n");
  82.       scanf("%s",s[i].start);//读取起始站
  83.   printf("请输入终点站:\n");
  84.       scanf("%s",s[i].over);//读取终点站
  85.   printf("请输入时间:\n");
  86.       scanf("%s",s[i].time);//读取时间
  87.   printf("请输入机票数(机票数为0结束输入):\n",m);
  88.       scanf("%d",&s[i].count);//读取机票数
  89.   m++;
  90.   
  91.   printf("第%d个信息已经输完是否继续?按任意键继续,按 0结束",m);
  92.   scanf("%d",&y);
  93.   if(y==0)
  94.   {
  95.    save();//将结构体信息存盘
  96.    print();//输出输入的航班信息
  97.    break;
  98.   }
  99.   
  100.    }
  101. }
  102. else
  103.   printf("输入密码错误!请检查您的密码是否正确!谢谢!再见!\n\n");
  104. }
  105. void save()//保存模块程序
  106. {   
  107. FILE *fp,*fp1;//定义文件指针
  108. if((fp=fopen("chen.dat","wb"))==NULL)//打开文件并判断是否出错  
  109. {
  110.   printf("创建文件失败!\n\n");//打印出错提示
  111.   getchar();
  112.   return;
  113. }
  114. if((fp1=fopen("hao.dat","wb"))==NULL)//打开文件并判断是否出错  
  115. {
  116.   printf("创建文件失败!\n\n");//打印出错提示
  117.   getchar();
  118.   return;
  119. }
  120. for(i=0;i<m;i++)
  121.   if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错
  122. printf("向文件输入数据失败!\n\n");
  123. fprintf(fp1,"%d",m);
  124. fclose(fp);//关闭文件
  125. fclose(fp1);//关闭文件
  126. }
  127. void read()//从文件读取信息模块
  128. {
  129. FILE *fp,*fp1;//定义文件指针
  130. if((fp=fopen("chen.dat","rb"))==NULL)//打开文件,并判断是否出错
  131. {
  132.   printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示
  133.   getchar();
  134. }
  135. if((fp1=fopen("hao.dat","rb"))==NULL)//打开文件并判断是否出错  
  136. {
  137.   printf("创建文件失败!\n\n");//打印出错提示
  138.   getchar();
  139.   return;
  140. }
  141. fscanf(fp1,"%d",&m);
  142. fclose(fp1);//关闭文件
  143. for(i=0;i<m;i++)
  144. {
  145.   fread(&s[i],sizeof(struct air),1,fp);//从文件中读取信息
  146. }
  147. fclose(fp);//关闭文件
  148. }
  149. void print()//打印模块
  150. {
  151. char w[10];
  152. read();//调用读取文件函数
  153. printf("航班号       起始站      终点站    时间       机票数\n");
  154. for(i=0;i<m;i++)
  155. {
  156.        printf(PRINT);//打印信息
  157. }
  158. printf("请按任意键回车键结束返回上层菜单以:\n");
  159. scanf("%s",w);
  160. }
  161.    
  162. void search()//查询模块
  163. {
  164. char name1[20];
  165. char name2[20];
  166. char ii[10];
  167. int n,no;
  168. do
  169. {
  170. printf("请选择查找方式:\n\n");//打印查询方式菜单
  171. printf("1.按航班号查找\n\n"
  172.      "2.按终点站查找\n\n"
  173.      "3.按航线查找\n\n"
  174.      "0.返回\n\n");
  175. printf("请在0-3中选择:\n\n"
  176.       "按其他键以回车键结束返回主菜单:\n\n");
  177. scanf("%d",&n);//读取查找方式
  178. if(n==0)
  179.   break;
  180. switch(n)
  181. {
  182. case 1:
  183.   printf("请输入航班号:\n");
  184.   scanf("%d",&no);//航班号
  185.   break;
  186. case 2:
  187.   printf("请输入终点站名称:\n");
  188.   scanf("%s",name2);//读取终点站
  189.   break;
  190. case 3:
  191.   printf("请输入起始站名称:\n");
  192.   scanf("%s",name1);//读取起始站
  193.   printf("请输入终点站名称:\n");
  194.   scanf("%s",name2);//终点站
  195.   break;
  196. }
  197. read();//调用读取函数
  198. for(i=0;i<m;i++)
  199. {   
  200.   if(strcmp(s[i].over,name1)==0||strcmp(s[i].over,name2)==0)//按终点站起始站判断输出条件
  201.   {
  202.    printf("\n查找航班信息成功!\n");
  203.    printf("航班号       起始站      终点站    时间       机票数\n");
  204.    printf(PRINT);//打印信息
  205.    break;
  206.   }
  207.   if(s[i].num==no)//按航班号判断输出条件
  208.   {  
  209.    printf("\n查找航班信息成功!\n");
  210.    printf("航班号       起始站      终点站    时间       机票数\n");
  211.    printf(PRINT);//打印信息
  212.    break;
  213.   }
  214. }
  215. no=0;//将航班号赋值为0
  216. printf("没有您需要的信息或查找完毕:\n\n"
  217.      "是否继续查找?请键入yes或no以回车键结束\n");
  218.   scanf("%s",ii);
  219. }while(strcmp(ii,"yes")==0);//判断结束
  220. }
  221. void shanchu()//删除模块
  222. {
  223. char name1[20];
  224. char name2[20];
  225. char ii[10];
  226. char f[]="2008china";//设置密码
  227. int no,n;
  228. printf("请输入密码并以回车键结束:\n\n");
  229. scanf("%s",f);//读取密码
  230. if(strcmp(f,"2008china")==0)    //判断密码是否正确
  231. {
  232.   do
  233.    {
  234.     printf("请选择删除以方式回车键结束:\n\n");//打印删除方式菜单
  235.     printf("*1.按航班号删除\n\n"
  236.         "*2.按航线删除\n\n"
  237.         "*0.返回\n\n");
  238.     printf("请在0-2中选择以回车键结束:\n");
  239.     scanf("%d",&n);//读取删除方式
  240.     if(n==0)
  241.      break;    //跳出循环
  242.     switch(n)
  243.     {
  244.     case 1:
  245.      printf("请输入航班号:\n");
  246.      scanf("%d",&no);//读取航班号
  247.      read();//调用读取函数
  248.      break;//跳出循环
  249.     case 2:
  250.      printf("请输入起始站 名称:\n");
  251.      scanf("%s",name1);//读取起始站
  252.      printf("请输入终点站名称:\n");
  253.      scanf("%s",name2);//读取终点站
  254.      read();//调用读取函数
  255.      break;//跳出循环
  256.     }
  257.     for(i=0;i<m;i++)
  258.     {
  259.      if(s[i].num==no||strcmp(s[i].start,name1)==0&&strcmp(s[i].over,name2)==0)//判断输入信息是否存在
  260.      {      
  261.       s[i]=s[m-1];
  262.       m--;
  263.      }
  264.      
  265.     }
  266.      printf("查找完毕或没有这个信息\n\n");
  267.         printf("是否继续删除\n");     
  268.     printf("请键入yes或no以回车键结束\n");
  269.     scanf("%s",ii);       //读取是否继续信息
  270.     save(); //调用读取函数
  271.     if(!strcmp(ii,"yes")) //判断是否继续删除   
  272.      printf("请按任意键以回车键结束返回上层菜单:\n");
  273.     break;
  274.    }while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0);  //判断结束
  275. }
  276. else
  277.   printf("对不起密码错误!您不是管理员,不能使用此项功能!谢谢!再见!\n\n");
  278. }
  279. void dingpiao()//订票模块
  280. {
  281. int n;
  282. char a[10];
  283. do
  284. {
  285.   search();//调用查询模块
  286.   printf("请输入您要订的机票数以回车键结束:\n");
  287.   scanf("%d",&n);//读取所订机票数
  288.   if(n<0)
  289.   {
  290.    printf("请输入有效的机票数!\n");//判断机票数是否出错
  291.    break;
  292.   }
  293.    if(s[i].count!=0&&s[i].count>=n)//判断是否出错
  294.   {
  295.    s[i].count=s[i].count-n;
  296.    save();//调用保存函数
  297.    printf("订票成功!\n\n");
  298.    break;
  299.   }
  300.   if(s[i].count<n)//判断是否出错
  301.   {
  302.    printf("请输入有效的机票数:\n");
  303.       break;
  304.   }
  305.   printf("是否继续? 请输入yes或no以回车键结束:\n");//判断是否继续订票
  306.   scanf("%s",a);
  307. }while(!strcmp(a,"yes"));//判断结束
  308. }
  309. void tuipiao()//退票模块
  310. {
  311. int n;
  312. char a[10];
  313. do
  314. {
  315.   search();//调用查询模块
  316.   printf("请输入您要退的机票数目:\n");
  317.   scanf("%d",&n);//输入所退票数
  318.   if(n<0) //判断票数是否有效
  319.    printf("请输入有效的机票数!\n");
  320.   s[i].count=s[i].count+n;
  321.   save(); //调用保存模块
  322.   printf("退票成功!\n\n");
  323.   printf("是否继续? 请键入yes或no以回车键结束:\n\n");//判断是否继续退票
  324.   scanf("%s",a);
  325. }while(!strcmp(a,"yes"));//判断并跳出循环
  326. getchar();
  327. }
  328. void xiugai()   //修改模块
  329. {
  330. struct xiu    //定义结构体
  331. {
  332.   int no;
  333.   char name1[20];
  334.   char name2[20];
  335.   char time[20];
  336.   int count;
  337. }x[1];
  338. char j[10];
  339. char f[]="2008china";//设置密码
  340. int n;
  341. printf("请输入密码并以回车键结束:\n\n");
  342. scanf("%s",f);//读取密码
  343. if(strcmp(f,"2008china")==0)//判断是否出错
  344. {
  345.   read();//调用读取模块
  346.   do
  347.   {
  348.    printf( "请选择修改方式:\n\n"
  349.               "*1,按航班号修改:\n\n"
  350.            "*2,按航线修改: \n\n");
  351.    printf("请在1---2中修改以回车键结束:\n\n");
  352.    scanf("%d",&n);//读取修改方式
  353.    switch(n)
  354.    {
  355.    case 1:printf("请输入航班号:\n");
  356.     scanf("%d",&x[0].no);//读取航班号
  357.     break;
  358.    case 2:printf("请输入起始站:\n");
  359.     scanf("%s",x[0].name1);//读取起始站
  360.     printf("请输入终点站:\n");
  361.     scanf("%s",x[0].name2);//读取终点站
  362.     break;
  363.    }
  364.    for(i=0;i<m;i++)
  365.    {   
  366.     if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0)//判断输出条件
  367. printf("航班号       起始站      终点站    时间       机票数\n");
  368.      printf(PRINT);
  369.      break;
  370.     }
  371.        if(s[i].num==x[0].no)//判断输出条件
  372.     {  
  373.      printf("航班号       起始站      终点站    时间       机票数\n");
  374.      printf(PRINT);
  375.      break;
  376.     }
  377.    {
  378.    x[0].no=0;            //将结构体中的号为零
  379.    printf("请输入新航班号、起始站、终点站、时间(星期几)、机票数:\n");
  380.    scanf("%d%s%s%s%d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count);//定义输入格式
  381.       s[i].num=x[0].no;//替换航班号
  382.       strcpy(s[i].start,x[0].name1);//替换其始站
  383.             strcpy(s[i].over,x[0].name2);//替换终点站
  384.             strcpy(s[i].time,x[0].time);//替换时间
  385.       s[i].count=x[0].count;//替换机票数
  386.       save();//调用保存模块
  387.       printf("是否继续?请键入yes或no以回车键结束:\n\n");
  388.       scanf("%s",j);
  389.   }while(strcmp(j,"yes")==0);  //判断结束
  390. {
  391.   printf("对不起密码错误!您不是管理员,不能使用此项功能!谢谢!再见!\n\n");
  392. }
复制代码
发表于 2006-12-12 08:19:59 | 显示全部楼层
问题出在input函数里,见:
  1. if(y==0)
  2. {
  3. save();//将结构体信息存盘
  4. print();//输出输入的航班信息
  5. break;
  6. }

  7. }


  8. }
  9. else
  10. printf("输入密码错误!请检查您的密码是否正确!谢谢!再见!\n\n");
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-12 13:27:50 | 显示全部楼层
是否在说的详细点呢??我没有看到input函数
^^!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-12 13:33:14 | 显示全部楼层
是否在说的详细点呢??我没有看到input函数
^^!
回复 支持 反对

使用道具 举报

发表于 2006-12-12 21:21:37 | 显示全部楼层
void input()//打印模块程序
---
汗,搜索一下代码中的input不就找到了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-15 02:22:38 | 显示全部楼层
lyanry大大您好...
您跟我说的那段...我把save();和print();...
是可以执行的~~(我只执行input那小段)
但我觉得问题出在修改模块那最后小段...
因我自己把每小段的模块一个个接上去run以后...
发现在修改模块放上去以后...出现一开始的问题...
所以是不是修改模块有问题呢??
代码:
void xiugai()   //修改模块
{
struct xiu    //定义结构体
{
  int no;
  char name1[20];
  char name2[20];
  char time[20];
  int count;
}x[1];
char j[10];
char f[]="2008china";//设置密码
int n;
printf("请输入密码并以回车键结束:\n\n");
scanf("%s",f);//读取密码
if(strcmp(f,"2008china")==0)//判断是否出错
{
  read();//调用读取模块
  do
  {
   printf( "请选择修改方式:\n\n"
           "*1,按航班号修改:\n\n"
           "*2,按航线修改: \n\n");
   printf("请在1---2中修改以回车键结束:\n\n");
   scanf("%d",&n);//读取修改方式
   switch(n)
   {
   case 1:printf("请输入航班号:\n");
    scanf("%d",&x[0].no);//读取航班号
    break;
   case 2:printf("请输入起始站:\n");
    scanf("%s",&x[0].name1);//读取起始站
    printf("请输入终点站:\n");
    scanf("%s",&x[0].name2);//读取终点站
    break;
   }
   for(i=0;i<m;i++)
   {   
    if(strcmp(s.over,x[0].name1)==0&&strcmp(s.over,x[0].name2)==0)//判断输出条件

printf("航班号       起始站      终点站    时间       机票数\n");
     printf(PRINT);
     break;
    }
       if(s.num==x[0].no)//判断输出条件
    {  
     printf("航班号       起始站      终点站    时间       机票数\n");
     printf(PRINT);
     break;
    }
   {
   x[0].no=0;            //将结构体中的号为零
   printf("请输入新航班号、起始站、终点站、时间(星期几)、机票数:\n");
   scanf("%d%s%s%s%d",&x[0].no,&x[0].name1,&x[0].name2,&x[0].time,&x[0].count);//定义输入格式
      s.num=x[0].no;//替换航班号
      strcpy(s.start,x[0].name1);//替换其始站
            strcpy(s.over,x[0].name2);//替换终点站
            strcpy(s.time,x[0].time);//替换时间
      s.count=x[0].count;//替换机票数
   
      printf("是否继续?请键入yes或no以回车键结束:\n\n");
      scanf("%s",j);
  }while(strcmp(j,"yes")==0);  //判断结束
{
  printf("对不起密码错误!您不是管理员,不能使用此项功能!谢谢!再见!\n\n");
}
回复 支持 反对

使用道具 举报

发表于 2006-12-15 07:52:54 | 显示全部楼层
恩,代码没有缩进,没仔细看。input也许没问题。你说的xiugai函数,有点问题,你的代码有贴完整吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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