数据结构(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


相关文章
|
7天前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
152 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
1月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
42 7
|
2月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
53 3
|
2月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
60 5
|
3月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
72 4
|
3月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
3月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
62 2
|
3月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
48 0
|
3月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
3月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。

热门文章

最新文章