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玩意儿,哈哈。