IO综合题——北京地铁管理系统

 

针对北京地铁项目,需要开发一个信息化管理系统。请根据公司现有业务及需求完成该系统的初始设计。

 

【需求描述】

(1)记录管理人员信息。员工信息包括工号、姓名、性别和一个手机号,工号唯一标识每位员工。

 

(2)记录地铁站信息。地铁站信息包括地铁站编号、地铁站名称、所属路线、停留时间、起始运营时间、停止运营时间,系统内部用地铁站编号唯一标识每个地铁站。

 

【结构设计】

管理人员(工号,姓名,性别,手机号)

地铁站(地铁站编号,地铁站名称,所属路线)

 

【问题1】

请根据业务需求及结构,设计出管理人员类(Manager)和地铁站类(Subway)

 

要求:

1.包括所涉及的属性

2.要生成getter()&setter()方法

3.要包含无参和带全部参数的构造方法

4.要有相应的toString()方法,用于输出相关属性的值

 

【问题2】

 

运行程序,提示管理员进行登录,根据输入的工号和姓名判断是否登录成功,登录成功,进入下一步,登录失败,给出提示,结束程序

 

系统中现有管理人员信息如下:

10001,小王,男,13112345678

10002,老于,男,13212345678

10003,老方,男,13312345678

 

保存在当前项目模块下的managers.txt文件中,此文件已提供

 

系统中现有地铁站信息如下:

s3002,南锣鼓巷,6号线

s5016,王府井,1号线

s2026,西直门,4号线

 

保存在当前项目模块下的subways.txt文件中,此文件已提供

 

要求:

2.1. 运行程序,将managers.txt文件中的管理人员信息读取到集合中

2.1.1. 将读取到的一行数据切割成字符串数组

2.1.2. 将数组中的元素封装到Manager对象中

2.1.3. 将Manager对象添加到集合中

2.2. 将subways文件中的地铁站信息读取到另一个集合中

2.3. 给出提示,获取管理人员输入的工号和姓名

2.4. 判断管理人员信息集合中是否包含管理人员输入的工号和姓名,给出对应的登录结果

 

【问题3】

当管理人员登录成功后,给出选项提示,根据管理人员的选择,执行后续的操作

 

要求:

3.1. 给出提示: 1.查看地铁站 2.添加地铁站

 

3.2. 获取管理人员输入的选择

 

3.3. 根据管理人员的选择,执行对应的操作

 

【问题4】

当管理人员选择1时,执行对应的查看地铁站操作

 

要求:

4.1. 判断地铁站集合中是否有地铁站信息

4.2. 如果没有地铁站信息,给出提示

4.3. 如果有地铁站信息,遍历集合,打印每个地铁站信息

 

 

 

【问题5】

当管理人员选择2时,执行对应的添加地铁站操作

 

要求:

5.1.依次给出提示,获取管理人员输入的地铁站信息,包括地铁站编号,地铁站名称,所属路线

 

5.2. 将管理人员输入的地铁站信息封装成对象,存储到集合中

 

5.3. 将集合中的地铁站信息更新到文件中,再次打开文件时,应该包含管理人员刚才录入进去的地铁站信息,程序结束

 

参考代码

public class Manager {
   // 工号,姓名,性别,手机号
   private String id;  // 类型不做统一要求,int可以,String也行
   private String name;
   private String gender;
   private String telephone;
   /**
    * 1.包括所涉及的属性
    * 2.要生成getter()&setter()方法
    * 3.要包含无参和带全部参数的构造方法
    * 4.要有相应的toString()方法,用于输出相关属性的值
    */
   public Manager() {
  }

   public Manager(String id, String name, String gender, String telephone) {
       this.id = id;
       this.name = name;
       this.gender = gender;
       this.telephone = telephone;
  }

   public String getId() {
       return id;
  }

   public void setId(String id) {
       this.id = id;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public String getGender() {
       return gender;
  }

   public void setGender(String gender) {
       this.gender = gender;
  }

   public String getTelephone() {
       return telephone;
  }

   public void setTelephone(String telephone) {
       this.telephone = telephone;
  }

   @Override
   public String toString() {
       return "Manager{" +
               "id='" + id + '\'' +
               ", name='" + name + '\'' +
               ", gender='" + gender + '\'' +
               ", telephone='" + telephone + '\'' +
               '}';
  }
}





public class Subway {
   // 地铁站编号,地铁站名称,所属路线
   private String id;
   private String name;
   private String route; // luXian 也可以~~~

   /**
    * 1.包括所涉及的属性
    * 2.要生成getter()&setter()方法
    * 3.要包含无参和带全部参数的构造方法
    * 4.要有相应的toString()方法,用于输出相关属性的值
    */
   public Subway() {
  }

   public Subway(String id, String name, String route) {
       this.id = id;
       this.name = name;
       this.route = route;
  }

   public String getId() {
       return id;
  }

   public void setId(String id) {
       this.id = id;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public String getRoute() {
       return route;
  }

   public void setRoute(String route) {
       this.route = route;
  }

   @Override
   public String toString() {
       return "Subway{" +
               "id='" + id + '\'' +
               ", name='" + name + '\'' +
               ", route='" + route + '\'' +
               '}';
  }
}





public class SubwayDemo {
   public static void main(String[] args) throws Exception{
       // 问题2.提示用户输入工号和姓名,进行登录,登录成功,继续运行,登录失败,结束程序
       // 2.1.运行程序,将managers.txt文件中的管理人员信息读取到集合中
       ArrayList<Manager> managerList = new ArrayList<>();
       BufferedReader br = new BufferedReader(new FileReader("day02\\managers.txt"));
       String line;
       while ((line = br.readLine())!=null){
           // 2.1.1. 将读取到的一行数据切割成字符串数组
           String[] arr = line.split(",");
           // 2.1.2. 将数组中的元素封装到Manager对象中
           Manager manager = new Manager(arr[0],arr[1],arr[2],arr[3]);
           // 2.1.3. 将Manager对象添加到集合中
           managerList.add(manager);
      }
       br.close();
       // 2.2.将subways文件中的地铁站信息读取到另一个集合中
       ArrayList<Subway> subwayList = new ArrayList<>();
       BufferedReader subwayBr = new BufferedReader(new FileReader("day02\\subways.txt"));
       String subwayLine;
       while ((subwayLine=subwayBr.readLine())!=null){
           String[] subwayArr = subwayLine.split(",");
           Subway subway = new Subway(subwayArr[0],subwayArr[1],subwayArr[2]);
           subwayList.add(subway);
      }
       subwayBr.close();
       // 2.3. 给出提示,获取管理人员输入的工号和姓名
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入您的工号:");
       String id = sc.next();
       System.out.println("请输入您的姓名:");
       String name = sc.next();
       // 2.4. 判断管理人员信息集合中是否包含管理人员输入的工号和姓名,给出对应的登录结果
       boolean flag = false;
       for (Manager manager : managerList) {
           if (manager.getId().equals(id) && manager.getName().equals(name)){
               flag=true;
          }
      }
       // 判断是否登录成功,给出登录结果提示
       if (flag){
           System.out.println(name + "你好,欢迎进入本系统");
      }else{
           System.out.println("您的信息有误,请稍后重试");
           System.exit(0); // 终止程序
      }
       //问题3. 当管理人员登录成功后,给出选项提示,根据管理人员的选择,执行后续的操作
       // 3.1. 给出提示: 1.查看地铁站 2.添加地铁站
       System.out.println("请输入您的选择: 1.查看地铁站 2.添加地铁站");
       // 3.2. 获取管理人员输入的选择
       String choice = sc.next();
       // 3.3. 根据管理人员的选择,执行对应的操作
       switch (choice){
           // 问题4.当管理人员选择1时,执行对应的查看地铁站操作
           case "1":
               // 4.1. 判断地铁站集合中是否有地铁站信息
               if (subwayList.size() == 0){
                   // 4.2. 如果没有地铁站信息,给出提示
                   System.out.println("系统中暂无地铁站信息");
              }else {
                   // 4.3. 如果有地铁站信息,遍历集合,打印每个地体站信息
                   System.out.println("地铁站编号\t地铁站名称\t地铁站所属路线");
                   for (Subway subway : subwayList) {
                       System.out.println(subway.getId() + "\t\t" + subway.getName() + "\t\t\t" + subway.getRoute());
                  }
              }
               break;

           // 问题5.当管理人员选择2时,执行对应的添加地铁站操作
           case "2":
               // 5.1.依次给出提示,获取管理人员输入的地铁站信息,包括地铁站编号,地铁站名称,所属路线
               System.out.println("请输入要添加的地铁站编号:");
               String sid = sc.next();
               System.out.println("请输入要添加的地铁站名称:");
               String sname = sc.next();
               System.out.println("请输入要添加的地铁站所属路线:");
               String sroute = sc.next();
               // 5.2. 将管理人员输入的地铁站信息封装成对象,存储到集合中
               Subway subway= new Subway(sid,sname,sroute);
               subwayList.add(subway);
               // 5.3. 将集合中的地铁站信息更新到文件中,在次打开文件时,应该包含管理人员刚才录入进去的地铁站信息,程序结束
               BufferedWriter bw = new BufferedWriter(new FileWriter("day02\\subways.txt"));
               for (Subway sw : subwayList) {
                   bw.write(sw.getId()+","+sw.getName()+","+sw.getRoute());
                   bw.newLine();
              }
               bw.close();
               System.out.println(sname + "地铁站的信息已经添加成功");
               break;
           default:
               System.out.println("您输入的选择有误,请稍后重试");

           // 修改和删除功能,如感兴趣可自行拓展
      }
  }
}
 
posted @ 2022-05-24 10:30  Aginbak  阅读(479)  评论(0编辑  收藏  举报