📄 command.java
字号:
package agenda;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.*;
import java.io.*;
import agenda.Quit;
import agenda.Register;
import agenda.Clear;
import agenda.Delete;
import agenda.Add;
import agenda.Query;
import agenda.Help;
/*
CommandShell 类为本系统的交互类,所有的交互操作都集中放在此类的start方法中。
读取输入,解析命令,执行命令对应的功能类,供主类直接调用
*/
public class Command {
private static final String REGISTER = "register";
private static final String ADD = "add";
private static final String QUERY = "query";
private static final String DELETE = "delete";
private static final String CLEAR = "clear";
private static final String BATCH = "batch";
private static final String QUIT = "quit";
private static final String HELP = "help";
public static String username = null;
public static String password = null;
//用于存储命令参数的容器
public static List register_list = new ArrayList();
public static List add_list = new ArrayList();
public static List query_list = new ArrayList();
public static List delete_list = new ArrayList();
public static List clear_list = new ArrayList();
public static List batch_list = new ArrayList();
private PrintWriter Cout = null;
private File Fin = null;
private boolean batching = false;
public Command() {
Cout = new PrintWriter(System.out);
batching = false;
}
public boolean not_NULL(Object obj) {
if (obj instanceof String) {
String s = (String) obj;
return s != null && s.trim().length() > 0;
}
return obj != null;
}
// 用于退出系统的流
public void quitstream() {
Cout.close();
}
public void start() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
stmt(br, false);
}
public void stmt(BufferedReader br, boolean batching) throws IOException {
// 读取输入,解析命令,执行
Cout.print("\n$");
Cout.flush();
String input = br.readLine();
if (batching) {
Cout.println(input);
Cout.flush();
}
StringTokenizer st = null;
st = new StringTokenizer(input);
if (!st.hasMoreTokens()) {
stmt(br, batching);
return;
}
String cmd = st.nextToken();
if (cmd.equalsIgnoreCase(REGISTER)) { // 处理register命令
// 获取用户名和密码
if (!st.hasMoreTokens()) {
Help help = new Help();
help.helpregister();
} else {
while (st.hasMoreTokens()) {
register_list.add(st.nextToken());
}
// 判断匹配
if (register_list.size() != 2) {
Help help = new Help();
help.helpregister();
} else {
Register register = new Register();
register.doRegister(Command.register_list);
}
register_list.clear();
}
} else if (cmd.equalsIgnoreCase(ADD)) { // 处理add命令
if (!st.hasMoreTokens()) {
Help help = new Help();
help.helpadd();
} else {
while (st.hasMoreTokens()) {
add_list.add(st.nextToken());
}
if (add_list.size() != 6) {
Help help = new Help();
help.helpadd();
} else {
Add add = new Add();
add.doAddAgenda(Command.add_list);
}
add_list.clear();
}
} else if (cmd.equalsIgnoreCase(QUERY)) { // 处理query命令
if (!st.hasMoreTokens()) {
Help help = new Help();
help.helpquery();
} else {
while (st.hasMoreTokens()) {
query_list.add(st.nextToken());
}
if (query_list.size() != 4) {
Help help = new Help();
help.helpquery();
} else {
Query query = new Query();
query.doQuery(query_list);
}
query_list.clear();
}
} else if (cmd.equalsIgnoreCase(DELETE)) { // 处理delete命令
if (!st.hasMoreTokens()) {
Help help = new Help();
help.helpdelete();
} else {
while (st.hasMoreTokens()) {
delete_list.add(st.nextToken());
}
if (delete_list.size() != 3) {
Help help = new Help();
help.helpdelete();
} else {
Delete delete = new Delete();
delete.doDelete(delete_list);
}
delete_list.clear();
}
} else if (cmd.equalsIgnoreCase(CLEAR)) { // 处理clear命令
if (!st.hasMoreTokens()) {
Help help = new Help();
help.doHelp();
} else {
while (st.hasMoreTokens()) {
clear_list.add(st.nextToken());
}
if (clear_list.size() != 2) {
Help help = new Help();
help.helpclear();
} else {
Clear delete = new Clear();
delete.doClear(clear_list);
}
clear_list.clear();
}
} else if (cmd.equalsIgnoreCase(BATCH)) { // 处理batch命令 由于涉及到数据,故无法将Batch单独列类
String str;
str = st.nextToken();//读入文件名
File file = new File(str);
if (file.exists()) {
BufferedReader in = new BufferedReader(new FileReader(file));
batching = true;
stmt(in, true);
in.close();
stmt(br, batching);
} else {
System.out.println("文件不存在!");
}
} else if (cmd.equalsIgnoreCase(QUIT)) {
if (st.hasMoreTokens()) {
Help help = new Help();
help.helpquit();
} else {
Quit quitout = new Quit();
quitout.doQuit();
}
} else if (cmd.equalsIgnoreCase(HELP)) {
if (!st.hasMoreTokens()) {
Help help = new Help();
help.doHelp();
} else {
Help help = new Help();
help.helphelp();
}
} else {
System.out.println("输入格式不正确,请重新输入!");
System.out.println("输入help查看帮助信息:");
}
if (batching == false || br.ready()) {
stmt(br, batching);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -