数据结构实用教程(JAVA版)
看完第一章 集合 结合书中代码 稍微修改做个小练习:
E盘根目录下 table.txt内容:
C001 程序设计基础 4 蒋建设 C002 微机原理与应用 5 张钢 C003 高等数学 6 李明 C004 离散数学 5 赵学会 C005 世界近代史 2 陈晓
课程表类:
代码语言:javascript复制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 "]";
}
}
文件操作类:
代码语言:javascript复制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 readFile( )
{
Set set = new LinkedHashSet();
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 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() "rn");
}
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 tbls)
{
for(Table tbl : tbls)
{
if(tbl.getKey().equals(key))
{
return tbl;
}
}
return null;
}
public static void findTableInput(Set 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 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 tbls,Scanner in)
{
String input ="";
System.out.print("请输入要修改的课程表:");
input=in.nextLine();
input=in.nextLine();
editTableInput(tbls,input);
}
public static void deleteTable(String key,Set 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 tbls,Scanner in)
{
String input ="";
System.out.print("请输入要删除的课程表:");
input =in.next();
deleteTable(input, tbls);
}
public static void addTable(Set 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 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
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:退出-----------------------------------------功能选择:4Table [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:退出-----------------------------------------功能选择:4Table [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:退出-----------------------------------------功能选择:4Table [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