城市公交查询系统是一个实用的应用程序,可以帮助用户在城市中查找公交车路线、站点和到达时间。在这个回答中,我将用Java编写一个城市公交查询系统,包括代码和说明。
一、系统架构和功能
该城市公交查询系统将采用MVC架构,包括以下几个部分:
- 模型 (Model): 表示数据和业务逻辑层,封装了公交车路线、站点和到达时间等信息,提供了对外的数据操作接口。
- 视图 (View): 视图层将数据呈现给用户,在这个系统中,视图将向用户展示公交线路、站点和到达时间的查询结果。
- 控制器 (Controller): 控制器负责连接模型和视图,响应用户请求,调用模型中的相关方法完成具体的任务,最终将结果返回给视图。
- 该系统具有以下功能:
- 查询公交车路线:用户输入起点和终点站点,系统将返回符合条件的公交线路。
- 查询公交车站点:用户输入公交线路,系统将返回该公交路线的所有站点。
- 查询公交到站时间:用户输入公交线路和站点,系统将返回该站点的公交车到站时间。
二、系统代码实现
下面是使用Java编写的城市公交查询系统的代码实现。在编写时我使用了Spring和MyBatis框架。
Model层
我们将定义两个JavaBean类,Station和BusLine来保存数据。
public class Station {
private String id;
private String name;
private String busLineIds;
// getters and setters
}
public class BusLine {
private String id;
private String name;
private String stations;
// getters and setters
}
同时,为了对数据库中的表进行操作,我们还需要定义数据访问对象(Data Access Object,DAO)。下面分别是对Station和BusLine的DAO实现。
@Repository
public class StationDAO {
@Autowired
private SqlSessionFactory sqlSessionFactory;
public List<Station> findByName(String name) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<Station> list = sqlSession.selectList("com.example.busquery.dao.StationDAO.findByName", name);
sqlSession.close();
return list;
}
}
@Repository
public class BusLineDAO {
@Autowired
private SqlSessionFactory sqlSessionFactory;
public List<BusLine> findByName(String name) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<BusLine> list = sqlSession.selectList("com.example.busquery.dao.BusLineDAO.findByName", name);
sqlSession.close();
return list;
}
}
View层
在视图层,我们可以用JavaFX或Swing等框架实现GUI。在这里,为了简化示例,我们使用命令行的方式展示查询结果。
public class ConsoleQueryView implements QueryView {
@Override
public void showLines(List<BusLine> lines) {
System.out.println("线路查询结果:");
for (BusLine line : lines) {
System.out.println(line.getName());
}
}
@Override
public void showStations(List<Station> stations) {
System.out.println("站点查询结果:" );
for (Station station : stations) {
System.out.println(station.getName());
}
}
@Override
public void showArrivalTime(ArrivalTime time) {
System.out.println("到站时间查询结果:");
System.out.println("车牌号:" + time.getBusNumber());
System.out.println("预计到达时间:" + time.getArrivalTime());
}
}
Controller层
在控制器层,我们将根据用户请求,调用相应的操作和数据对象,然后将结果传递给视图。这里我们定义了一个公交查询服务BusQueryService来完成具体的查询任务。
@Service
public class BusQueryServiceImpl implements BusQueryService {
@Autowired
private BusLineDAO busLineDAO;
@Autowired
private StationDAO stationDAO;
@Override
public List<BusLine> queryBusLine(String from, String to) {
// TODO: query bus line...
}
@Override
public List<Station> queryBusStations(String busLineName) {
// TODO: query bus stations...
}
@Override
public ArrivalTime queryBusArrivalTime(String busLineName, String stationName) {
// TODO: query bus arrival time...
}
}
三、系统演示
现在,我们可以编写一个简单的main方法演示这个城市公交查询系统的功能。在这个系统中,我们将从命令行获取输入,完成查询任务,并将结果返回给控制台。
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ConsoleQueryView view = new ConsoleQueryView();
BusQueryService service = new BusQueryServiceImpl();
while (true) {
System.out.println("请输入查询类型:\n1. 查询公交线路\n2. 查询公交站点\n3. 查询公交到站时间");
String line = scanner.nextLine();
switch (line) {
case "1":
System.out.println("请输入起点站和终点站:");
String from = scanner.nextLine();
String to = scanner.nextLine();
List<BusLine> lines = service.queryBusLine(from, to);
view.showLines(lines);
break;
case "2":
System.out.println("请输入公交路线名称:");
String busLineName = scanner.nextLine();
List<Station> stations = service.queryBusStations(busLineName);
view.showStations(stations);
break;
case "3":
System.out.println("请输入公交路线名称和站点名称:");
String busLineName2 = scanner.nextLine();
String stationName = scanner.nextLine();
ArrivalTime time = service.queryBusArrivalTime(busLineName2, stationName);
view.showArrivalTime(time);
break;
default:
System.out.println("无效的输入...");
break;
}
}
}
}
总结
在本文中,我们使用Java编写了一个城市公交查询系统,该系统采用了MVC架构,并使用Spring和MyBatis框架。该系统可以查询公交车路线、站点和到达时间等信息,并且可以通过命令行展示查询结果。通过阅读这篇文章,相信读者已经掌握了Java编写实际应用程序的基本思路和操作方法,可以根据自己的需求和情况定制和扩展这个城市公交查询系统。相应教学放在最后: