公交查询程序

  1. #include "writeoff_inc.h"
  2. int Show()
  3. {
  4.     int selection;
  5.     cout << "/n/n   =========================" << endl;
  6.     cout << "   1.  线路查询" << endl;
  7.     cout << "   2.  站点查询" << endl;
  8.     cout << "   3.  站点---站点 查询" << endl;
  9.     cout << "   4.  管理员查询" << endl;
  10.     cout << "   0.  退出" << endl;
  11.     cout << "   =========================" << endl;
  12.     cout << "/n 请选择查询编号:";
  13.     cin >> selection;
  14.     return selection;
  15. }
  16. int RoutQuery(char* code, char* sql, CRecords &record)
  17. {
  18.     sprintf(sql, "select s.STOP_NAME, b.ORDER_NO "
  19.         " from stop_infor s, bus_infor b"
  20.         " where  s.STOP_NO = b.STOP_NO and b.ROUT = '%s' order by b.ORDER_NO", code);
  21.     int j = record.Query(sql);
  22.     if (j <= 0)
  23.     {
  24.         cout << DefaultConnect.GetMsg() << endl;
  25.         return 0;
  26.     }
  27.     sprintf(sql, "线路%s经过的站点有: /n", code);
  28.     cout << sql << endl;
  29.     while (j > 0)
  30.     {
  31.         cout << record.Field(0).Char() << "  " ;
  32. //      cout << record.Field(1).Float() << endl;
  33.         j = record.Next();
  34.     }
  35.     return 1;
  36. }
  37. int StopQuery(CRecords &record)
  38. {
  39.     char sql[1024];
  40.     char stop[64];
  41.     char rout[32];
  42.     CRecords RoutRecord(DefaultConnect, 1);
  43.     cout << "   输入站点名称:";
  44.     cin >> stop;
  45.     sprintf(sql, "SELECT DISTINCT ROUT FROM BUS_INFOR WHERE STOP_NO = "
  46.         " (select STOP_NO from stop_infor WHERE STOP_NAME = '%s')", stop);
  47.     long j = record.Query(sql);
  48.     if (j <= 0)
  49.     {
  50.         cout << DefaultConnect.GetMsg() << endl;
  51.         return 0;
  52.     }
  53.     sprintf(sql, "/n    经过%s的线路有:", stop);
  54.     cout << sql << endl;
  55.     while (j > 0)
  56.     {
  57.         sprintf(rout, record.Field(0).Char());
  58.         cout << rout << endl;
  59.         RoutQuery(rout, sql, RoutRecord);
  60.         cout << endl;
  61.         j = record.Next();
  62.     }
  63.     return 1;
  64. }
  65. int OneRout(char* start, char* target, CRecords &stopRecord)
  66. {
  67.     char sql[1024] = "";
  68.     sprintf(sql, "SELECT a.rout from BUS_INFOR a, BUS_INFOR b "
  69.         " where a.rout = b.rout and a.STOP_NO = '%s' "
  70.         " and b.STOP_NO = '%s'", start, target);
  71.     long j = stopRecord.Query(sql); 
  72.     if (j <= 0)
  73.     {
  74.         return 0;
  75.     }
  76.     return 1;
  77. }
  78. int TwoRout(char* start, char* target, CRecords &rec)
  79. {
  80.     char sql[1024] = "";
  81.     sprintf(sql, "select distinct a.stop_no v from bus_infor a where "
  82.     " (select rout from bus_infor where stop_no = '1') "
  83.     " in "
  84.     " (select rout  from bus_infor where stop_no = a.stop_no ) "
  85.     " and (select rout from bus_infor where stop_no = '9') "
  86.     " in (select rout  from bus_infor where stop_no = a.stop_no) ", start, target);
  87.     long j = rec.Query(sql);
  88.     if (j <= 0)
  89.     {
  90.         cout << DefaultConnect.GetMsg() << endl;
  91.         return 0;
  92.     }
  93.     return 1;
  94. }
  95. void GetStopName(char* stop_no, char* name)
  96. {
  97.     CRecords record(DefaultConnect, 1);
  98.     char sql[256] = "";
  99.     sprintf(sql, "select STOP_NAME FROM STOP_INFOR WHERE STOP_NO = '%s'", stop_no);
  100.     long j = record.Query(sql);
  101.     sprintf(name, "%s", record.Field(0).Char());
  102. }
  103. int StopToStop()
  104. {
  105.     CRecords stopRecord(DefaultConnect, 1);
  106.     CRecords record2(DefaultConnect, 1);
  107.     char start[32];
  108.     char target[32];
  109.     char sql[1024];
  110. L1: cout << "   输入 起点站:";
  111.     cin >> start;
  112.     sprintf(sql, "select STOP_NO FROM STOP_INFOR WHERE STOP_NAME = '%s'", start);
  113.     long j = stopRecord.Query(sql);
  114.     if (j <= 0)
  115.     {
  116.         cout << "没有该站点" << endl;
  117.         goto L1;
  118.     }
  119.     sprintf(start, "%s", stopRecord.Field(0).Char());
  120. L2: cout << "   输入 终点站:";
  121.     cin >> target;
  122.     sprintf(sql, "select STOP_NO FROM STOP_INFOR WHERE STOP_NAME = '%s'", target);
  123.     j = stopRecord.Query(sql);
  124.     if (j <= 0)
  125.     {
  126.         cout << "没有该站点" << endl;
  127.         goto L2;
  128.     }
  129.     sprintf(target, "%s", stopRecord.Field(0).Char());
  130.     // 直达查询
  131.     j = OneRout(start, target, stopRecord);
  132.     if (j > 0)
  133.     {
  134.         while (j > 0)
  135.         {
  136.             cout << stopRecord.Field(0).Char() << endl;
  137.             j = stopRecord.Next();
  138.         }
  139.         return 1;
  140.     }
  141.     j = TwoRout(start, target, record2);
  142. //  char rout[16];
  143.     char stop[16];
  144.     char stopName[32];
  145.     if (j <= 0)
  146.     {
  147.         cout << "转乘1次查询不出" << endl;
  148.         return 0;
  149.     }
  150.     long i = 0;
  151.     while (j > 0)
  152.     {
  153.         sprintf(stop, "%s", record2.Field(0).Char() );
  154.         GetStopName(stop, stopName);
  155.         cout << "/n可以在 "<<stopName << " 站转车 " << endl;
  156.         i = OneRout(start, stop, stopRecord);
  157.         cout << "先乘坐: "<< endl;
  158.         while (i > 0)
  159.         {
  160.             cout << stopRecord.Field(0).Char() << endl;
  161.             i = stopRecord.Next();
  162.         }
  163.         i = OneRout(stop, target, stopRecord);
  164.         cout << "再转乘: " << endl;
  165.         while (i > 0)
  166.         {
  167.             cout << stopRecord.Field(0).Char() << endl;
  168.             i = stopRecord.Next();
  169.         }
  170.         j = record2.Next();
  171.     }
  172.     return 1;
  173. }
  174. int Query(char* sql, CRecords &record)
  175. {
  176.     cout << "   输入操作语句:;作为结束标识: " << endl;
  177.     char p;
  178.     int i = 0;
  179.     while ((p = getchar()) != ';')
  180.     {
  181.         sql[i++] = p;
  182.     }
  183.     sql[i] = '/0';
  184.     long j = record.Query(sql);
  185.     if (j <= 0)
  186.     {
  187.         cout << DefaultConnect.GetMsg() << endl;
  188.         return 0;
  189.     }
  190.     for (i = 0; i < record.CountCol(); i++)
  191.     {
  192.         cout << record.Field(i).Name() << " ";
  193.     }
  194.     cout << endl;
  195.     while (j > 0)
  196.     {
  197.         for (i = 0; i < record.CountCol(); i++)
  198.         {
  199.             switch(record.Field(i).Type()) {
  200.             case CharT:
  201.                 cout << record.Field(i).Char() << " ";
  202.                 break;
  203.             case FloatT:
  204.                 cout << record.Field(i).Float() << "    ";
  205.                 break;
  206.             default:
  207.                 break;
  208.             }
  209.         }
  210.         j = record.Next();
  211.         cout << endl;
  212.     }
  213.     return 1;
  214. }
  215. int main()
  216. {
  217.     long j = Login("ORACLE");
  218.     if (j <= 0)
  219.     {
  220.         cout << "数据库连接失败" << endl;
  221.         return -1;
  222.     }
  223.     CRecords record(DefaultConnect, 1);
  224.     char code[32];
  225.     char sql[1024];
  226.     while (j != 0)
  227.     {
  228.         j = Show();
  229.         switch(j) 
  230.         {
  231.         case 0:
  232.             Logout();
  233.             return 0;
  234.             break;
  235.         case 1:
  236.             cout << "输入线路编号:";
  237.             cin >> code ;
  238.             RoutQuery(code, sql, record);
  239.             break;
  240.         case 2:
  241.             StopQuery(record);
  242.             break;
  243.         case 3:
  244.             StopToStop();
  245.             break;
  246.         case 4:
  247.             Query(sql, record);
  248.             break;
  249.         default:
  250.             break;
  251.         }
  252.     }
  253.     Logout();
  254.     return 0;
  255. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值