一、需求分析

        本次Java课程设计本着公交车信息查询管理系统查询管理数据的设计原则,让其满足日常生活中人们对公交查询的基本功能,实现信息查询的基础效果,提供以下功能:

  1. 数据库连接,数据库操作功能;
  2. 管理员登录,管理员退出;
  3. 用户登录,用户注册(两次密码不一致时报错),用户退出,用户查看个人信息
  4. 用户可根据公交车ID进行简单的公交线路查询,刷新表格内部数据;
  5. 管理员可添加车站信息、修改车站信息、删除车站信息、查询车站信息;刷新公交表格数据;
  6. 管理员可添加司机信息、修改司机信息、删除司机信息、刷新司机表格信息。

二、总体设计

        该公交信息查询管理系统基于Java图形化设计界面以及MySQL数据库实现,采用经典的“Dao设计模式”,其中MySQL数据库的各类操作实现了实体间表格的增查改删,并配备了图形设计界面中的JTable表格控件,做到了实时更新数据的效果。下面为实现该系统的功能结构层次图:

        具体功能列表细节如下:

功能模块

功能细分

备注

公交线路

信息管理

查询公交信息功能

公交编号查询指定公交的全部信息

新增公交信息功能

向数据库中添加新的公交信息记录

修改公交信息功能

按公交编号修改需要更正的公交信息

删除公交信息功能

按公交编号删除指定的数据库记录

用户使用功能

用户登录

用户根据查询后用户名密码进行登录

线路查询

用户根据公交车ID对公交信息查询

个人信息确认

根据public方法传入参数显示

用户注册

注册用户个人信息

管理员使用功能

管理员登录

根据管理员输入管理员名称对数据库密码检索

公交车信息查询

根据UID实行简单的“增删改查”操作

司机信息查询操作

根据BID实行简单的“增删改查”操作

三、Mysql数据库设计

        经过用户反馈筛选,我们根据公交车信息管理的设计理念,将上述需求分析阶段得到的用户需求进行分析、总结、归纳,得到该公交车信息查询管理系统的实体以及实体属性,并在这里采用E-R图的方式抽象成信息结构即概念模型,其中根据实体间联系,画出局部E-R图,如下所示:

关系模式(关系模型)

管理员(管理员姓名,管理员密码);

用户(用户姓名,用户密码,用户性别);

公交车(公交编号,司机编号,公交名,公交车站,公交类型);

司机(司机编号,司机姓名,司机性别,公交类型,司机生日,司机地址,电话号码,有效期截止时间);

四、详细设计与实现

4.1、登录界面设计

        登录界面设有用户名、密码和用户身份三个字段,在数据库中进行分别匹配,在用户输入信息后,首先判断该用户名是否存在,接着匹配该用户的身份是否正确,最后匹配该身份下的密码是否正确,通过三重判断进行页面跳转,该页面也可以将所填信息进行清楚,效果图如下:

        部分代码实现如下:

button.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
			if (comboBox.getSelectedItem().equals("普通用户")) {
				// 获得文本框里的值
String username = textField.getText();String upassword = passwordField.getText();
boolean f = dirverdao.userlogin(username, upassword);
		if (f) {JOptionPane.showMessageDialog(frame, "登陆成功!欢迎!");
				// 页面跳转
				UsersEnroll ue=new UsersEnroll();
				// 关闭原页面
				frame.setVisible(false);
} else {JOptionPane.showMessageDialog(frame, "登陆失败!账号或密码错误!");
				// 账号密码清空
				textField.setText("");passwordField.setText("");}

4.2、用户注册界面设计

        注册界面设有用户名、性别、密码和确认密码四个字段,其中,若二次输入的密码与第一次不统一,也会做出相应的提醒,点击提交则上交给数据库。效果图如下:

4.3、线路查询界面设计

        用户可以根据自己的需求,输入编号对表格查出相应的所需的数据线路进行数据库查询操作,JTable表格做到实时更新数据的效果,输入信息查找这里也采用了键盘监听事件,即可以根据用户输入的信息实时调用数据库数据,具体展示图如下:

         部分代码如下:

protected TableModel getDataModel(String bySth, String keyWord) {
	// 获得所有字段名,做表头
	String[] columnNames = bsd.getColumnNames("businfortable");
	// 获得查询结果的list列表,转换为二维数组,做表中数据
	List<BusType> buslist = bsd.getBusbySth(bySth, keyWord);
	int row = buslist.size(); // 获得行数,即数据个数
	int column = columnNames.length; // 获得列数,即字段个数
	Object[][] data = new Object[row][column];
	for (int i = 0; i < buslist.size(); i++) {
		data[i][0] = buslist.get(i).getBid();
		data[i][1] = buslist.get(i).getDid();
		data[i][2] = buslist.get(i).getBnum();
		data[i][3] = buslist.get(i).getBtype();
		data[i][4] = buslist.get(i).getBusstop();}
TableModel dataModel=new DefaultTableModel(data,columnNames); // 建立表格数据模型
	return dataModel;}

4.4、管理员界面设计

        管理员界面即是对公交车与司机二者信息显示的增删改查,这里的修改操作我采用两种方式,一种是利用getSelectedRow()方法,获取索引行,将需要修改的信息自动获取到修改页面,一种则是直接打开修改页面,根据你输入的信息进行主键查找,最终达到修改效果,删除操作也采用同样的方法,同时实时更新系统表格。效果图如下:

        部分核心代码如下所示:

JMenuBar menuBar = new JMenuBar();
	frame.setJMenuBar(menuBar);	
	JMenu menu = new JMenu("\u5F00\u59CB");
		menuBar.add(menu);
		JMenuItem menuItem = new JMenuItem("\u4FE1\u606F\u4FEE\u6539");
		menu.add(menuItem);
		menuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				DriverTableFrame dtf=new DriverTableFrame();	}});
		JMenu menu_1 = new JMenu("\u5E2E\u52A9");
		menuBar.add(menu_1);}

         部分核心代码如下所示: 

public int addBus(BusType bus) {
		Connection conn=DBTools.getConn();
		int i=0;
		String sql="insert into businfortable(bid,did,bnum,btype,busstop) values(?,?,?,?,?)";
		PreparedStatement pstmt = null;
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bus.getBid());
			pstmt.setInt(2, bus.getDid());
			pstmt.setString(3, bus.getBnum());
			pstmt.setString(4, bus.getBtype());
			pstmt.setString(5, bus.getBusstop());
			i=pstmt.executeUpdate();}

 

        部分核心代码如下所示:  

public void actionPerformed(ActionEvent e) {
	           int frow = table.getSelectedRow();	//获得第一个选中行的索引
				if(frow == -1) {
JOptionPane.showMessageDialog(frame, "请先单击选择一条记录");}else {
					//String[]中存入表格选中行的数据
					String[] sendData = new String[table.getColumnCount()];	
					for(int i=0; i<sendData.length; i++) {
						sendData[i] = table.getValueAt(frow, i)+"";}
					//打开修改页面,并传入信息
				BusInforChanged bic=new BusInforChanged(sendData);}
		}});
class MYPanel3 extends JPanel {
	private Image img;
	public MYPanel3() {
		// TODO Auto-generated constructor stub
		ImageIcon icon = new ImageIcon(UsersLoginFrame.class.getResource("/images/背景图3.jpg"));
	 	img = icon.getImage();} 
	@Override
	protected void paintComponent(Graphics g) {
		// TODO Auto-generated method stub
		g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);}}

 

 

 

部分核心代码展示如下:

@Override
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
    	if(radioButton.isSelected()){
			dsex=radioButton.getText();
		}else if(radioButton_1.isSelected()){
......
if(chckbxA.isSelected()){
    		dtype+=chckbxA.getText();}}
@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String dname=textField.getText(); 
		....
		if(e.getSource()==button){
			DriverDaoImpl dridao=new DriverDaoImpl();
			Driver driver=new Driver();......
else  if(e.getSource()==button_2_1){
		  ......
		    	JOptionPane.showMessageDialog(frame, "删除成功!");
		    	frame.setVisible(false);

 

        至此,该公交车信息查询管理系统的基本功能与界面展示完毕。如对您有所帮助,望留下宝贵一赞!谢谢!

        需源码以及1w3字课程20页报告 私信扣扣 1092644308!!!!!

 

Logo

本社区面向用户介绍CSDN开发云部门内部产品使用和产品迭代功能,产品功能迭代和产品建议更透明和便捷

更多推荐