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


相关文章
|
25天前
|
Java
【Java集合类面试二十八】、说一说TreeSet和HashSet的区别
HashSet基于哈希表实现,无序且可以有一个null元素;TreeSet基于红黑树实现,支持排序,不允许null元素。
|
15天前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
25 5
|
15天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
16天前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
|
23天前
|
存储 算法 Java
Java 中的同步集合和并发集合
【8月更文挑战第22天】
20 5
|
23天前
|
存储 安全
集合的特点和数据结构总结
集合的特点和数据结构总结
13 1
|
25天前
|
存储 Java
【Java集合类面试二十九】、说一说HashSet的底层结构
HashSet的底层结构是基于HashMap实现的,使用一个初始容量为16和负载因子为0.75的HashMap,其中HashSet元素作为HashMap的key,而value是一个静态的PRESENT对象。
|
25天前
|
Java
【Java集合类面试三十】、BlockingQueue中有哪些方法,为什么这样设计?
BlockingQueue设计了四组不同行为方式的方法用于插入、移除和检查元素,以适应不同的业务场景,包括抛异常、返回特定值、阻塞等待和超时等待,以实现高效的线程间通信。
|
14天前
|
存储 算法 Java
Java中的集合框架深度解析与实践
【8月更文挑战第31天】在Java编程的海洋中,集合框架扮演着不可或缺的角色。本文将带你领略Java集合框架的魅力,从理论到实践,深入浅出地探索List、Set和Map等核心接口的使用技巧。我们将通过具体代码示例,展示如何在日常开发中高效运用这些工具,让你的代码更加优雅和高效。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往Java集合世界的大门。
|
14天前
|
存储 人工智能 Java
JAVA集合
【8月更文挑战第31天】