⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agendaclient.java

📁 ssd7 练习4
💻 JAVA
字号:

import java.io.*;
import java.rmi.*;
import java.util.*;

/**
 * This class implements the AgendaClient
 * 
 * @author 
 * 
 */
public class AgendaClient {

	private Agenda agenda;

	private String serverName;

	private int portNumber;

	private String operation;

	private String userName;

	private String password;

	private String attender;

	private Calendar startTime;

	private Calendar endTime;

	private String title;

	private int id;

	private String[] args;

	private static BufferedReader stdIn = new BufferedReader(
			new InputStreamReader(System.in));

	private static PrintWriter stdOut = new PrintWriter(System.out, true);

	/**
	 * Constructor for menu type of AgdndaClient instance
	 * 
	 * @param serverNm
	 * @param portNo
	 */
	public AgendaClient(String serverNm, int portNo) {
		
		serverName = serverNm;
		portNumber = portNo;
	}

	/**
	 * Constructor for command line parameters type AgendaClient instance
	 * 
	 * @param args
	 */
	public AgendaClient(String[] args) {
		
		this.args = args;
		serverName = args[0];
		portNumber = Integer.parseInt(args[1]);
		operation = args[2];
	}

	/**
	 * Register for a new user
	 * 
	 */
	private void register() {
		
		try {
			
			if (agenda.register(userName, password)) {
				stdOut.println("User: " + userName
						+ " registered successfully!\n");
			} else {
				stdOut.println("User: " + userName
						+ " registered unsuccessfully! Please try another!\n");
			}
		} catch (Exception e) {
			
			e.printStackTrace();
		}
	}

	/**
	 * Registered users may add meetings to their agenda.
	 * 
	 */
	private void add() {
		try {
			if (agenda.add(userName, password, attender, startTime, endTime,
					title)) {
				stdOut.println("New meeting added successfully!\n");
			} else {
				stdOut
						.println("New meeting added unsuccessfully! Please try another!\n");
			}
		} catch (Exception e) {
			stdOut.println(e.getMessage());
		}
	}

	/**
	 * Registered users may look up all meetings in their agenda in a given
	 * interval of time.
	 * 
	 */
	private void query() {
		try {
			Vector result = agenda
					.query(userName, password, startTime, endTime);

			if (result.size() > 0) {

				for (Iterator it = result.iterator(); it.hasNext();) {
					Meeting meeting = (Meeting) it.next();
					stdOut.println(meeting);
				}
			} else {
				stdOut.println("No results!\n");
			}
		} catch (Exception e) {
			stdOut.println(e.getMessage());
		}
	}

	/**
	 * Registered users may delete entries that they have created.
	 * 
	 */
	private void delete() {
		try {
			if (agenda.delete(userName, password, id)) {
				stdOut.println("Meeting: " + id + " deleted successfully!\n");
			} else {
				stdOut.println("Could not delete meeting: " + id + "!");
				stdOut
						.println("Please try a different username or meetingid!\n");
			}
		} catch (Exception e) {
			stdOut.println(e.getMessage());
		}
	}

	/**
	 * Registered users may clear all meetings they have called.
	 * 
	 */
	private void clear() {

		try {
			if (agenda.clear(userName, password)) {
				stdOut.println("User: " + userName
						+ " has all meetings cleared!\n");
			} else {
				stdOut.println("Please try a different username!\n");
			}
		} catch (Exception e) {
			stdOut.println(e.getMessage());
		}
	}

	/**
	 * Judge what kind of operation is input in the command line
	 * 
	 */
	private void judgeOperation() {

		try {
			userName = args[3];
			password = args[4];

			if (operation.equals("register")) {

				register();

			} else if (operation.equals("add")) {

				attender = args[5];
				startTime = retrieveTime(args[6]);
				endTime = retrieveTime(args[7]);
				title = args[8];
				add();

			} else if (operation.equals("query")) {

				startTime = retrieveTime(args[5]);
				endTime = retrieveTime(args[6]);
				query();

			} else if (operation.equals("delete")) {

				id = Integer.parseInt(args[5]);
				delete();

			} else if (operation.equals("clear")) {

				clear();

			} else {

			}
		} catch (Exception e) {
			stdOut.println("Bad parameters!");
		}
	}

	/**
	 * Run the Client via command line parameters
	 * 
	 * @throws IOException
	 */
	public void runViaParameter() {
		
		try {
			agenda = (Agenda) Naming.lookup("rmi://" + serverName + ":"
					+ portNumber + "/AgendaService");
		} catch (Exception e) {
			stdOut.println(e.getMessage());
		}

		judgeOperation();
	}

	/**
	 * Retrieve the factors from the Time
	 * 
	 * @param time
	 * @return
	 * @throws IOException
	 */
	private Calendar retrieveTime(String time) throws IOException {
		
		int mon = 0;
		int day = 0;
		int year = 0;
		int hour = 0;
		int min = 0;

		String tempDate, tempTime;

		StringTokenizer paramTokenizer, dateTokenizer;

		Calendar result = null;

		/*
		 * Tokenize the start_time into date and time based on the '-'
		 * character.
		 */
		try {
			paramTokenizer = new StringTokenizer(time, "_");
			tempDate = paramTokenizer.nextToken();
			dateTokenizer = new StringTokenizer(tempDate, "/");

			/* Parse out the month, day, and year from the date. */
			if (dateTokenizer.countTokens() == 3) {

				mon = Integer.parseInt(dateTokenizer.nextToken());
				day = Integer.parseInt(dateTokenizer.nextToken());
				year = Integer.parseInt(dateTokenizer.nextToken());

			} else {

				stdOut.println("The time format is wrong;");
				stdOut.println("Please input again:");

			}

			/* Get the time. */
			tempTime = paramTokenizer.nextToken();

			/* Tokenize the time based on the ':' character. */
			dateTokenizer = new StringTokenizer(tempTime, ":");

			/* Parse out the hour and minute from the time string. */
			if (dateTokenizer.countTokens() == 2) {

				hour = Integer.parseInt(dateTokenizer.nextToken());
				min = Integer.parseInt(dateTokenizer.nextToken());

			} else {

				stdOut.println("The time format is wrong;");
				stdOut.println("Please input again:");
			}

			result = new GregorianCalendar(year, mon, day, hour, min);

		} catch (Exception e) {
			stdOut.println("Bad formate of Date!");
		}

		return result;
	}

	/**
	 * Run the Client via a menu
	 * 
	 */
	public void runViaMenu() throws IOException {
		try {
			agenda = (Agenda) Naming.lookup("rmi://" + serverName + ":"
					+ portNumber + "/AgendaService");
		} catch (Exception e) {
			stdOut.println(e.getMessage());
		}

		while (true) {
			System.out.println("================= Menu =================== ");
			System.out.println("(1) Register a new user");
			System.out.println("(2) Add a meeting");
			System.out.println("(3) Query meetings");
			System.out.println("(4) Delete a meeting");
			System.out.println("(5) Clear meetings");
			System.out.println("(6) Quit");
			System.out.println("===========================================");
			System.out.println("Enter your choice: ");

			int choice = 0;
			try {
				choice = Integer.parseInt(stdIn.readLine());
			} catch (Exception e) {
				System.out.println("Enter a number between 1 and 6!");
			}

			switch (choice) {
			case 1:
				System.out.println("Enter your username:");
				userName = stdIn.readLine();
				System.out.println("Enter your password:");
				password = stdIn.readLine();

				register();
				break;
			case 2:
				System.out.println("Enter your username: ");
				userName = stdIn.readLine();
				System.out.println("Enter your password: ");
				password = stdIn.readLine();
				System.out.println("Enter your attender's username: ");
				attender = stdIn.readLine();
				System.out
						.println("Enter the start time of the meeting(ie:6/6/2007_10:10)");
				startTime = retrieveTime(stdIn.readLine());
				System.out
						.println("Enter the end time of the meeting(ie:6/6/2007_10:20)");
				endTime = retrieveTime(stdIn.readLine());
				System.out.println("Enter the meeting title: ");
				title = stdIn.readLine();

				add();
				break;
			case 3:
				System.out.println("Enter your username: ");
				userName = stdIn.readLine();
				System.out.println("Enter your password: ");
				password = stdIn.readLine();
				System.out
						.println("Enter the start time of the meeting(ie:6/6/2007_10:10)");
				startTime = retrieveTime(stdIn.readLine());
				System.out
						.println("Enter the end time of the meeting(ie:6/6/2007_10:10)");
				endTime = retrieveTime(stdIn.readLine());

				query();
				break;
			case 4:
				System.out.println("Enter your username: ");
				userName = stdIn.readLine();
				System.out.println("Enter your password: ");
				password = stdIn.readLine();
				System.out.println("Enter the meeting ID: ");
				id = Integer.parseInt(stdIn.readLine());

				delete();
				break;
			case 5:
				System.out.println("Enter your username: ");
				userName = stdIn.readLine();
				System.out.println("Enter your password: ");
				password = stdIn.readLine();

				clear();
				break;
			default:
				return;
			}
		}
	}

	/**
	 * main method
	 * 
	 * @param args
	 * @throws IOException
	 */
	public static void main(String args[]) throws IOException {

		if (args.length < 2) {
			System.out
					.println("Usage: Client <servername> <port> [operation args]");
			System.exit(0);
		}

		if (args.length < 3) {
			String serverName = args[0];
			int portNum = Integer.parseInt(args[1]);
			AgendaClient agendaClient = new AgendaClient(serverName, portNum);

			agendaClient.runViaMenu();
		} else {
			AgendaClient agendaClient = new AgendaClient(args);
			agendaClient.runViaParameter();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -