数据结构(JAVA版本)练习之集合 简易图书管理系统

简介: 数据结构(JAVA版本)练习之集合 简易图书管理系统

看完第一章  集合   结合书中代码 稍微修改做个小练习:



E盘根目录下 table.txt内容:

C001 程序设计基础 4 蒋建设

C002 微机原理与应用 5 张钢

C003 高等数学 6 李明  

C004 离散数学 5 赵学会

C005 世界近代史 2 陈晓



课程表类:


package com.chujianyun.com;

public class Table

{

private String key;

private String rest;



public Table()

{

 

}

public Table(String key, String rest)

{

 super();

 this.key = key;

 this.rest = rest;

}



public String getKey()

{

 return key;

}

public void setKey(String key)

{

 this.key = key;

}

public String getRest()

{

 return rest;

}

public void setRest(String rest)

{

 this.rest = rest;

}


@Override

public boolean equals(Object obj)

{  

 return key.equals(((Table)obj).key);

}

@Override

public String toString()

{

 return "Table [key=" + key + ", rest=" + rest + "]";

}


}

文件操作类:


package com.chujianyun.com;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.util.HashSet;

import java.util.LinkedHashSet;

import java.util.Scanner;

import java.util.Set;

public class FileOperator

{

private static String filePath = "E:\\table.txt";



public static Set<Table> readFile( )

{

 Set<Table> set = new LinkedHashSet<Table>();

  File file = new File(filePath);

  BufferedReader bf = null;

  try {

 

     bf = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));

      String str,key,rest;

            Table tbl =null;

  while((str=bf.readLine())!=null)

  {

   key = str.substring(0,4);

   rest = str.substring(5);

   tbl = new Table(key,rest);

 

   set.add(tbl);

  }

 

 

} catch (FileNotFoundException e) {

 System.out.println("没有找到文件!");

 //e.printStackTrace();

}catch(IOException e) {

 System.out.println("打开或者访问文件异常"+e.getMessage());

 //e.printStackTrace();

}finally

{

 

 try {

  bf.close();

 } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

 }

}

 

  return set;

 

}

public static void writeFile(Set<Table> set)

{

 File file = new File(filePath);

 BufferedWriter bw = null;

 //Table tbl = null;

 try {

  bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GBK"));

  for(Table tbl:set)

  {

      bw.write(tbl.getKey()+" "+tbl.getRest()+"\r\n");

 

  }

  bw.flush();

 } catch (IOException e) {

  System.out.println("打开或者访问文件异常"+e.getMessage());

 }finally

 {

  try {

   bw.close();

  } catch (IOException e) {

   System.out.println("写缓冲流关闭异常"+e.getMessage());

  }

 }

 

}



public static void select()

{

 

     System.out.println("\n-----------------------------------------");

  System.out.println("输入编号进行功能选择:");

  System.out.println("1:根据课程号查找课程;");

  System.out.println("2:根据课程号删除课程:");

  System.out.println("3:向课程表里面追加一个课程记录:");

  System.out.println("4:显示课程表里面所有课程记录");

  System.out.println("5:修改课程表里面的课程记录");

  System.out.println("-1:退出");

   System.out.println("-----------------------------------------");

   System.out.print("功能选择:");

 

 

}


//根据 key 和 SET查找

public static Table findTable(String key,Set<Table> tbls)

{

 

 for(Table tbl : tbls)

 {

   if(tbl.getKey().equals(key))

   {

    return tbl;

   }

 }

 return null;

}

public static void findTableInput(Set<Table> tbls,Scanner in)

{

 

 

 

 String input ="";

 System.out.print("请输入要查找的课程表:");


 input =in.next();


 Table tbl = findTable(input, tbls);

 

 if(tbl==null)

 {

  System.out.println("没有找到该课程号对应的课程表");

 }else

 {

  System.out.println("对应的课程表为:"+tbl);

 }

 

 

 

}


public static void editTableInput(Set<Table> tbls,String input)

{

 

 String key = input.substring(0,4);

 String rest = input.substring(5);

 

 for(Table tbl:tbls)

 {

 

  if(tbl.getKey().equals(key))

  {

   tbl.setRest(rest);

 

    System.out.println("修改编号为["+key+"]的课程成功!");

  }

 }

}

public static void editTableInput(Set<Table> tbls,Scanner in)

{

 

 

 

 String input ="";

 System.out.print("请输入要修改的课程表:");

       input=in.nextLine();

       input=in.nextLine();

 

       editTableInput(tbls,input);

 

 

 

 

}


public static void deleteTable(String key,Set<Table> tbls)

{

 Table tblRemove = findTable(key, tbls);

 if(tblRemove!=null)

 {

  tbls.remove(tblRemove);

  writeFile(tbls);

  System.out.println("删除编号为:["+key+"]的课程成功!");

 }else

 {

  System.out.println("未检索到,课程编号:["+key+"]对应的课程,删除失败!");

 }

 

}


public static void deleteTableInput(Set<Table> tbls,Scanner in)

{


 

 String input ="";

 System.out.print("请输入要删除的课程表:");

 input =in.next();

 

 

 deleteTable(input, tbls);

 

}


public static void addTable(Set<Table> tbls,Scanner in)

{

        String input="";

        System.out.print("请输入要添加的课程表:");

     

        input=in.nextLine();

        input=in.nextLine();

 String key = input.substring(0,4);

 String rest = input.substring(5);

 

 tbls.add(new Table(key,rest));

 writeFile(tbls);

   System.out.print("添加课程表:"+key+"成功!");

}


public static void printTables(Set<Table> tbls)

{

 

 for(Table tbl:tbls)

 {

  System.out.println(tbl);

 }

}




}


测试类:

package com.chujianyun.com;

import java.util.Scanner;

import java.util.Set;

public class SetDemo {

public static void main(String[] args)

{

 Set<Table> tbls = FileOperator.readFile();

 

/* for(Table tbl:tbls)

 {

  System.out.println(tbl);

 }*/

 Scanner in = new Scanner(System.in);

 

 

  FileOperator.select();

  int choice =0;

 

 while((choice =in.nextInt())!=-1)

 {

 


  switch(choice)

  {

   case -1: System.exit(0); break;

   case 1:

 

    FileOperator.findTableInput(tbls,in); break;

   case 2:

 

    FileOperator.deleteTableInput(tbls,in);break;

   case 3:

 

    FileOperator.addTable(tbls,in);break;

   case 4:

    FileOperator.printTables(tbls); break;

   case 5:

    FileOperator.editTableInput(tbls, in); break;

   default:

    System.out.println("输入的数字错误请重新输入");


  }

   FileOperator.select();

 }

 }

}


效果:


-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:4


Table [key=C001, rest=程序设计基础 4 蒋建设]


Table [key=C002, rest=微机原理与应用 5 张钢]


Table [key=C003, rest=高等数学 6 李明  ]


Table [key=C004, rest=离散数学 5 赵学会]


Table [key=C005, rest=世界近代史 2 陈晓]


Table [key=C006, rest=数据结构(JAVA版) 8 王凯]



-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:2


请输入要删除的课程表:C006


删除编号为:[C006]的课程成功!



-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:1


请输入要查找的课程表:C005


对应的课程表为:Table [key=C005, rest=世界近代史 2 陈晓]



-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:3


请输入要添加的课程表:C006 中国近代史 1 林冲


添加课程表:C006成功!


-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:4


Table [key=C001, rest=程序设计基础 4 蒋建设]


Table [key=C002, rest=微机原理与应用 5 张钢]


Table [key=C003, rest=高等数学 6 李明  ]


Table [key=C004, rest=离散数学 5 赵学会]


Table [key=C005, rest=世界近代史 2 陈晓]


Table [key=C006, rest=中国近代史 1 林冲]



-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:5


请输入要修改的课程表:C006 JAVA程序设计 8 林冲


修改编号为[C006]的课程成功!



-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:4


Table [key=C001, rest=程序设计基础 4 蒋建设]


Table [key=C002, rest=微机原理与应用 5 张钢]


Table [key=C003, rest=高等数学 6 李明  ]


Table [key=C004, rest=离散数学 5 赵学会]


Table [key=C005, rest=世界近代史 2 陈晓]


Table [key=C006, rest=JAVA程序设计 8 林冲]



-----------------------------------------


输入编号进行功能选择:


1:根据课程号查找课程;


2:根据课程号删除课程:


3:向课程表里面追加一个课程记录:


4:显示课程表里面所有课程记录


5:修改课程表里面的课程记录


-1:退出


-----------------------------------------


功能选择:-1


相关文章
|
2月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
2月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
|
30天前
|
JavaScript Java 关系型数据库
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
家政系统源码,java版本
|
11天前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
22 4
|
13天前
|
存储 安全 Java
现代应用场景中 Java 集合框架的核心技术与实践要点
本内容聚焦Java 17及最新技术趋势,通过实例解析Java集合框架的高级用法与性能优化。涵盖Record类简化数据模型、集合工厂方法创建不可变集合、HashMap初始容量调优、ConcurrentHashMap高效并发处理、Stream API复杂数据操作与并行流、TreeMap自定义排序等核心知识点。同时引入JMH微基准测试与VisualVM工具分析性能,总结现代集合框架最佳实践,如泛型使用、合适集合类型选择及线程安全策略。结合实际案例,助你深入掌握Java集合框架的高效应用与优化技巧。
38 4
|
13天前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
70 3
|
4月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
276 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
6月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
109 3
|
2月前
|
Java
Java LinkedList集合的深度剖析
总的来说,我希望像说故事一样讲解Java LinkedList集合的使用和实现原理,让有些许枯燥的编程知识变得趣味盎然。在这个“公交车”故事中,你不仅熟悉了LinkedList集合的实现和使用,而且还更深入地理解了数据结构中的链表。链表可能会因为插入和删除的便利性而被选用,虽然它的查找效率并不高,但是在很多场景中仍然十分有效。这就像公交车,虽然它速度不快,但却是城市出行的重要工具。
65 8
|
2月前
|
存储 Java 编译器
Java 中 .length 的使用方法:深入理解 Java 数据结构中的长度获取机制
本文深入解析了 Java 中 `.length` 的使用方法及其在不同数据结构中的应用。对于数组,通过 `.length` 属性获取元素数量;字符串则使用 `.length()` 方法计算字符数;集合类如 `ArrayList` 采用 `.size()` 方法统计元素个数。此外,基本数据类型和包装类不支持长度属性。掌握这些区别,有助于开发者避免常见错误,提升代码质量。
120 1