天天看點

資料結構(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)

public String getRest()

 return rest;

public void setRest(String rest)

@Override

public boolean equals(Object obj)

{  

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

public String toString()

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

}

檔案操作類:

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());

}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;

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

  for(Table tbl:set)

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

  bw.flush();

  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)

 System.out.print("請輸入要修改的課程表:");

       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+"]的課程成功!");

  System.out.println("未檢索到,課程編号:["+key+"]對應的課程,删除失敗!");

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

 System.out.print("請輸入要删除的課程表:");

 deleteTable(input, tbls);

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

        String input="";

        System.out.print("請輸入要添加的課程表:");

        input=in.nextLine();

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

 writeFile(tbls);

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

public static void printTables(Set<Table> tbls)

  System.out.println(tbl);

測試類:

public class SetDemo {

public static void main(String[] args)

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

/* for(Table tbl:tbls)

 }*/

 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 王凱]

功能選擇:2

請輸入要删除的課程表:C006

删除編号為:[C006]的課程成功!

功能選擇:1

請輸入要查找的課程表:C005

對應的課程表為:Table [key=C005, rest=世界近代史 2 陳曉]

功能選擇:3

請輸入要添加的課程表:C006 中國近代史 1 林沖

添加課程表:C006成功!

Table [key=C006, rest=中國近代史 1 林沖]

功能選擇:5

請輸入要修改的課程表:C006 JAVA程式設計 8 林沖

修改編号為[C006]的課程成功!

Table [key=C006, rest=JAVA程式設計 8 林沖]

功能選擇:-1