JAVA [校园导航咨询系统] 2022年6月小学期品牌实践

1.设计方案简介

该导游系统能为来访者提供包括景点介绍、景点查询、仿真地图、最短路径之类的快捷指导。所谓系统,也不尽然,只是一个小小的信息提示。其中主要运用到的程序、算法也较简单。

2.设计题目实现

需求分析:

本程序的目的是为用户提供路径查询。根据用户指定的始点和终点输出相应路径,或者根据用户指定的景点输出景点的信息。程序中用到的校园平面图可以用制表符绘制出来,虽然过程繁琐,但在DOS环境中显示的效果还是不错的,故用之可行。

此代码仅供参考
代码实现:


 
import java.util.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
class Graph{//地图
	Vertex vex[]=new Vertex[20];
	int dis[][]=new int[20][20];
}
class Vertex{//景点
	String name;
	String info;
	public Vertex() {
		
	}
	public Vertex(String name,String info) {
		this.name=name;
		this.info=info;
	}
}
public class GraphMain {
	private static Scanner in=new Scanner(System.in);
	public static void SchoolMap() {
		System.out.printf(" ---------------------------------西南石油大学南充校区地图--------------------------------\n");
		System.out.printf("         |----------------------------------图书馆----------运动场-------------\n");
		System.out.printf("         |                                                                   |\n");
		System.out.printf("         |                                                                  四教\n");
		System.out.printf("         |                                                                   |\n");
		System.out.printf("       学生生活区----------龙井湖-------火箭楼---------------------------------|\n");
		System.out.printf("         |                 |      |       |                                     |\n");
		System.out.printf("         |                 |      |       |                                     |\n");
		System.out.printf("         |                 |      |       |                                     |\n");
		System.out.printf("         |                 |      |--------                                     |\n");
		System.out.printf("         |                 |      |                                             |\n");
		System.out.printf("         |                 |      |                 教职工生活区-----------------|\n");
		System.out.printf("         |                 |    --|                      |\n");
		System.out.printf("      体育馆---------------|    |                      |\n");
		System.out.printf("        |                      |                      |\n");
		System.out.printf("        |                   石油魂       校医院--------\n");
		System.out.printf("        |大礼堂                |             |\n");
		System.out.printf("        |   |                 |             |\n");														   
		System.out.printf("        |   |                 |             |\n");
		System.out.printf("        |   |                 |             |\n");
		System.out.printf("        |   |                 |             |\n");
		System.out.printf("        --------------------大门-------------\n");
		System.out.printf(" 																		西<---|--->东     \n");
		System.out.printf("返回上一界面请按1\n");
	}
	public static void MainInterface() {
		System.out.printf("\t\t\t\t***************************************************\n\n");
		System.out.printf("\t\t\t\t*                                                 *\n\n");
		System.out.printf("\t\t\t\t*                                                 *\n\n");
		System.out.printf("\t\t\t\t*               欢迎使用校园导游咨询                    *\n\n");
		System.out.printf("\t\t\t\t*                                                 *\n\n");
		System.out.printf("\t\t\t\t*                                                 *\n\n");
		System.out.printf("\t\t\t\t***************************************************\n\n");
		System.out.printf("1:景点信息查询请按1;\n");
		System.out.printf("2:景点最短路径查询请按2;\n");
		System.out.printf("3:校内景点地图查询请按3;\n");
		System.out.printf("4:制作人查询请按4;\n");
		System.out.printf("5:退出系统请按5;\n");
	}
	public static void clear() throws AWTException
    {
        Robot r = new Robot();
        r.mousePress(InputEvent.BUTTON3_MASK);       // 按下鼠标右键
        r.mouseRelease(InputEvent.BUTTON3_MASK);    // 释放鼠标右键
        r.keyPress(KeyEvent.VK_CONTROL);             // 按下Ctrl键
        r.keyPress(KeyEvent.VK_R);                    // 按下R键
        r.keyRelease(KeyEvent.VK_R);                  // 释放R键
        r.keyRelease(KeyEvent.VK_CONTROL);            // 释放Ctrl键
        r.delay(100);
    } 
	public static void Producers() {
		System.out.printf("**************************************************\n");
		System.out.printf("*                   |制作人                      * \n");
		System.out.printf("*                                                *\n");
		System.out.printf("*              |西南石油大学南充校区             *\n");
		System.out.printf("*                                                *\n");
		System.out.printf("*              21级电子与计算机工程2班           *\n");
		System.out.printf("*                    |李宇轩                     *\n");
		System.out.printf("*                    |周家兴                     *\n");
		System.out.printf("*                    |雷杨烽                     *\n");
		System.out.printf("**************************************************\n");
		System.out.println("返回上一界面请按1");
	}
	public static final int maxn =100;//用max等于22222实现了爆栈
	public static void PrintPath(Graph graph,int start,int end) {
		int mp[][]=new int[maxn][maxn];
		int nex[][]=new int[maxn][maxn];
		int n=12;
		for(int i = 0; i <n; ++i)
			for(int j=0;j<n;++j)
				if(i==j)mp[i][j]=0;
				else mp[i][j]=9999999;
	    for(int i = 0; i <n; ++i)  
	    for(int j = 0; j < n; ++j)  
	    nex[i][j] = j;
	    mp[0][1]=mp[1][0]=70;
	    mp[0][4]=mp[4][0]=370;
		mp[0][3]=mp[3][0]=100;
		mp[0][2]=mp[2][0]=120;
		mp[2][10]=mp[10][2]=340;
		mp[3][6]=mp[6][3]=500;
		mp[4][7]=mp[7][4]=210;
		mp[5][9]=mp[9][5]=150;
		mp[5][11]=mp[11][5]=50;
		mp[6][9]=mp[9][6]=75;
		mp[7][11]=mp[11][7]=510;
		mp[8][7]=mp[7][8]=200;
		mp[8][10]=mp[10][8]=40;
		mp[9][10]=mp[10][9]=190;
		mp[4][8]=mp[8][4]=45;
		mp[2][8]=mp[8][2]=150;
		
		for(int k = 0; k < n; ++k)
			for(int i = 0; i < n; ++i)
				for(int j = 0; j < n; ++j)
				{
					if(mp[i][j] > mp[i][k]+mp[k][j])
					{
						mp[i][j] = mp[i][k]+mp[k][j];
						nex[i][j] = nex[i][k];
					}
				}
		int k = start;
		System.out.printf("路程为:%d m,路径为:",mp[start][end]);
		while(k != end)
		{
			System.out.printf("%s->",graph.vex[k].name);
			k = nex[k][end];
		}
		System.out.printf("%s\n", graph.vex[k].name);
		
	}
 
	
 
	public static void main(String[] args) throws AWTException {//graph地图 
		Graph graph=new Graph();//注意景点的空格
		String str_vex_name="大门 大礼堂 石油魂 校医院 体育馆 运动场 教职工生活区 学生生活区 龙井湖 四教 火箭楼 图书馆";
		String str_vex_info="1.这是莘莘学子大学生生活开始和结束的地方 2.这是我们参加大型活动和集会的地方 3.西南石油的标志性建筑 4.为教育服务,为生命护航 5.这是我们大学生挥洒汗水的地方"
				+ " 6.勤锻炼,爱运动,八块腹肌、马甲线,柚子们,你值得拥有 7.在日落的余晖里,一抹阳光在这里简直美得不像话 8.远处的山"
				+ ",近处的水相互交错在这里 9.校园之美、自然之美、人文之美完美融合 10.悬崖边边上,弧形的房子,优美至极 11.历史悠久,雄伟磅礴 12.与阅读为友,与美好相遇";
		String vex_name[]=str_vex_name.split(" ");
		String vex_info[]=str_vex_info.split(" ");
		for(int i=0;i<vex_name.length;i++) {
			graph.vex[i]=new Vertex(vex_name[i],vex_info[i]);
		}
		boolean flag=false;//辨识符flag与if用来处理whlie开始或终止的功能
		boolean flag_1=true;
		boolean flag_2=false;
		boolean flag_3=false;
		while(true) {
			if(flag_1==true)MainInterface();//打印主界面
			int select=in.nextInt();
			if(select==1) {
				clear();
				System.out.println("本校景点有:");
				for(int i=0;i<vex_name.length;i++) {
					System.out.println((i+1)+"."+graph.vex[i].name);
				}
				System.out.println((vex_name.length+1)+"."+"返回上一界面");
				System.out.println("想要查询的景点"+"(1-"+vex_name.length+"):");
				System.out.println("修改景点描述(0):");
				while(true) {
					int num=in.nextInt();
					if(num>vex_name.length+1||num<0)System.out.println("对不起!你的输入有误!");
					else if(num==0) {
						clear();
						System.out.println("本校景点有:");
						for(int i=0;i<vex_name.length;i++) {
							System.out.println((i+1)+"."+graph.vex[i].name);
						}
						System.out.println((vex_name.length+1)+"."+"返回上一界面");
						System.out.println("输入想要修改景点描述的序号或返回上一界面:");
						int num_ch=in.nextInt();
						if(num_ch<vex_name.length+1&&num_ch>0) {
							System.out.println("输入新的景点描述:");
							graph.vex[num_ch-1].info=in.next(); 
							flag=true;
							clear();
							break;
							
						}
						else {
							flag=true;
							clear();
							break;
						}
					}
					else if(num==vex_name.length+1) {
						flag=true;
						clear();
						break;
					}
					else System.out.println(graph.vex[num-1].info);
				}
				if(flag==true)continue;
			}
			else if(select==2) {
				//最短路径
				System.out.println("本校景点有:");
				for(int i=0;i<vex_name.length;i++) {
					System.out.println((i+1)+"."+graph.vex[i].name);
				}
				System.out.println((vex_name.length+1)+"."+"返回上一界面");
				while(true) {
					System.out.println("请输入你的位置:【1-12】或 返回上一界面【13】");
					int v0=in.nextInt();
					if(v0==13) {
						clear();
						in.nextLine();//****
						break;
					}
					else {
						System.out.println("请输入你的目的地:【1-12】");
						int v1=in.nextInt();
				        PrintPath(graph,v0-1,v1-1);
 
					}
				}
			}
			else if(select==3) {
				clear();
				SchoolMap();
				while(true) {
					int num=in.nextInt();
					if(num==1) {
						flag_2=true;
						clear();
						break;
					}
					else System.out.println("你的输入有误,请重新输入");
				}
				if(flag_2==true)continue;
			}
			else if(select==4) {
				clear();
				Producers();
				while(true) {
					int num=in.nextInt();
					if(num==1) {
						flag_3=true;
						clear();
						break;
					}
					else System.out.println("你的输入有误,请重新输入");
				}
				if(flag_3==true)continue;
			}
			
			else if(select==5) {
				clear();
				break;
			}
			else System.out.println("对不起!你的输入有误!请重新输入");
		}
	}
}

本次小学期品牌实践本来要求用c语言,问了老师也可以用Java和c++, 一直用Java的我毅然决然用Java来写,当然作为组长的我也问了其他俩个组员,也没什么意见,然后我们就开始操作了。

然而,最后我们组竟然才75分,确实让我太生气了,但确实也让我感到太惭愧了,我们的功能很少,答辩时还出现了少许bug.通过这次实践,我也成长了不少,那就让分数成为过去,只有放下过去,才能走得更远。可能多年后看自己写的这个程序,不禁微微一笑,然后发出感叹:这是哪个写的傻b玩意儿,哈哈。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现简单的查询,各风景的查询,调用各函数,实现课程设计的目标。其中包含三个功能,一个是直接进入导航系统,利用主函数中已有的数据,进行查询:一个是进行创建数据,本程序中初始数据为农大的导航数据,如果需要也可以自己建立一个;最后一个是退出功能。设计该函数的目的是为了能够多次得应用dijkstra函数进行查询最短路径。同时该函数可以列出各景点的代号和对应的名称,这样大家只要输入代号就行了。方便进行查询。下面分别描述这些函数,建立它们函数原型。 1、主函数 函数原型:void main(void) 功 能:控制程序。 参 数:void 返 回 值:void 要 求:管理菜单命令并完成初始化。 2、菜单选择和处理函数 函数原型:int menu() 功 能:处理选择的菜单命令并接收用户选择的命令代码。 参 数:int 返 回 值:int 工作方式:返回命令代码的整数值,根据命令,调用相应函数。 要 求:只允许选择规定键,如果输入不合要求,则提醒用户重新输入。 3、建立邻接矩阵函数 函数原型:void createadj() 功 能:重新建立一个学生信息的记录。 参 数:void 返 回 值:void 工作方式:在需要的时候就可以有主菜单中调用 void createadj()函数。 要 求:必需输入信息记录,然后才能调用出search()函数进行查询。 4、dijkstra函数 函数原型:void dijkstra(intx,inty) 功 能:求两点间的最短路径 参 数:void 返 回 值:void 工作方式: 该函数被其它一些函数调用。 5、结束程序 函数原型:int Exit() 功 能:使程序正常结束运行 参 数:int 返 回 值:1 工作方式:在操作都完成后,可以调用int Exit()函数,使函数最终返回 1 运行exit(1),程序正常结束。 要 求:运行Exit()函数后可以选择是否要保存,选择y则先保存再返 回1值;如果选择n直接返回1值。详细的程序设计应从下到上,在本设计中就要先设计createadj函数;然后设计dijkstra函数;接着是search函数;menu函数;最后才是main函数。如此设计能大大提升设计速度,因为从下往上使编程时的高试过程简单许多,而做课程设计花费时间最多的就是调试过程。对于各函数的详细设计,各函数的N—S图如下: (1)Createadj函数 (2)Dijkstra函数          (3)Search函数          (4)Menu函数          (5)main函数          2.4 程序编码   把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;编写过程中参考各种的教材和材料,使程序编写的正确性大有提高,同时也许到许多实践知识,增加了实践经验。 2.5 程序调试与测试    程序编写总是出现各种各样的错误,但是难点不是修改错误,而是找出错误。在大量的源程序中找出错误难度很大,但有了一定的方法,就能节省大量的时间,在这次课程设计中我运用的调试方法主要有2种:     一是借助调试工具。利用Turbo C中提供的程序专门调试工具Debugger程序,可以很容易找出程序中的各种语法错误。但是遇到一些逻辑错误时却又无从着手。这时我就用下面一种方法。     二是在程序中插入打印语句。猜测出大致的错误位置,选则一些主要变量,在关键部位插入打印语句,打印出这个主要变量,看其是否与理论上的一样,在多个位置插入,如果有个位置的值与理论值一样,另一个位置与理论值不一样,则错误就落在这两个位置之间,然后再多测试几个位置缩小范围,直到找出错误。  例如;我在调试main()主函数时,程序能够运行,三个选项都能选择,创建函数能够正常运行,也能正常退出,但在选第一条进入校园导航后,打印出来的列表却是空的,源程序中的初始化数据没有显示出来,我又尝试输入两个结点进行查找,发现没有输出路线,所以我猜测初始化数据没有被正常写入。但不知道为何没有被正常写入,首先怀疑是初始化时附值发生错误,查阅各种资料进行校验,发现没有错误。后来经过综合分析,发现最有可能是n值在search()函数中发生错误,于是我在search()函数中插入打印n 的语句,运行后发现输出的n为0,初始化数据中有11个结点,n应该为11,所以n 在这个地方发生错误,我又在main()主函数中打印出n 的值,n=11,是正确的。所以错误就在search()函数中,也就说是当运行case1,运行到search()函数时,n从11变为0,针对这个错误,我把变量n改为宏定义,因为n 是代表结点个数,不管在哪个函数中它的值都是一样的才对。改完后运行程序,成功! 本设计文件的注释如上,已给出详细的说明,下面仅以文件为单位说明各个函数的作用和特点,在必要的地方给予一定说明。  3.1、guide.h文件 使用条件编译。以下是头文件中语句 /********************************************* *头文件(.h) ********************************************/ #include "stdio.h" #include "conio.h" #include "alloc.h" #define n0 100 #define infi 32767 /*“无穷大*/ int adjmatrix[n0+1][n0+1];     /*邻接矩阵*/ int n=11; struct node             /*表结点*/ { char name[20];       /*下一个表结点与它们之间的距离*/ }place[12]={{"ShiDiGongYuan"},   /*表结点初始化,即写各景点名称*/    {"CangRongGongYu"},    {"YinHuiLou"},    {"TuoHuanGuanChang"},    {"DiBaShiTang"},    {"XiaoYiYuan"},    {"TuShuGuan"},    {"TiYuGuan"},    {"ZhongHuaGuanChang"},    {"ChuangXinLou"},    {"YiFuTuShuGuan"},    {"BoXueLou"}};  void createadj()          /*建立邻接表*/  void dijkstra( int x,int y)     /*dijkstra求最小生树*/  void search()            /*搜索最短路径*/  menu()               /*菜单函数*/          /********************************************* *建立邻接表 ********************************************/ void createadj()  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值