FileWriter и вычисление 12-часового времени в Java? - PullRequest
0 голосов
/ 23 января 2012

Меня попросили написать программу, которая будет вводить идентификационный номер сотрудника, время от времени. Данные будут записаны в файл .txt. Я понимаю, что я должен использовать FileWriter, но могу ли я спросить, возможно ли разместить информацию? Я хотел бы сделать мой файл .txt примерно так:

Name     Time in     Time out     Total hours worked     Salary
Name1    08:00       05:00        9                      4000
Name2    09:00       04:00        7                      3000

Кроме того, как бы я рассчитал общее количество часов, отработанных за 12 часов? Вот мой исходный код:

import java.util.Scanner;
import java.io.*;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

class AYANYAN
{static String ans ;
static int empNumber ;
static String timeIn, timeOut;
static Scanner s = new Scanner(System.in);
static String name[] = { "Ayan Ramirez", "Jenifer Sumbi", "Gen Estrada" , "Tugba Cakir", "Lennox Schatje Huisden"};


public static void main(String args[])throws IOException
{
    FileWriter fWriter = new FileWriter("EmpData.txt");
    for (int i = 0; i < name.length; i++)
    {
        fWriter.write(name[i] + "\n");
    }
    fWriter.close();

    start () ;

}

public static void control ()
{
    System.out.print ("\n\nPlease select one of the following: \nA. Sign Off\nB. Enter Time in\nC. Enter Time out\nD. Exit Program\n") ;
    ans = s.next() ;

    if (ans.equalsIgnoreCase("A")){
        signOff () ;
    } else if (ans.equalsIgnoreCase("B")) {
        timeIn () ;
    } else if (ans.equalsIgnoreCase("C")) {
        timeOut () ;
    } else if (ans.equalsIgnoreCase("D")){
        System.out.print ("\nBYE!\n\n\nProgram made by: Ayan Ramirez\n") ;
    } else {
        System.out.print ("ERROR!") ;
        System.exit(0);
    }
}

public static void start ()
{
    System.out.print ("Please enter your id number: ") ;
        empNumber = s.nextInt();

        if (empNumber == 12345){
        System.out.print ("\nSigned in as: " + name[0]);
        control() ;

        } else if (empNumber == 12346){
        System.out.print ("\nSigned in as: " + name[1]);
        control() ;

        }else if (empNumber == 12347){
        System.out.print ("\nSigned in as: " + name[2]);
        control() ;

        }else if (empNumber == 12348){
        System.out.print ("\nSigned in as: " + name[3]);
        control() ;

        } else if (empNumber == 12349){
        System.out.print ("\nSigned in as: " + name[4]);
        control() ;

        }
        else {
        System.out.print ("\nNTRUDER ALERT!\n\nPLEASE ENTER THE CORRECT ID NUMBER!") ;
        start () ;
        }
}

public static void signOff ()
{
    System.out.print ("Signing off...\n") ;
    start () ;
}

public static String timeIn ()
{
    System.out.print ("Please enter time in: ") ;
    timeIn = s.next () ;
    control () ;

    return (timeIn) ;
}

public static String timeOut ()
{
    System.out.print ("Please enter time out: ") ;
    timeOut = s.next () ;
    control () ;

    return (timeOut) ;
}
}

Ответы [ 3 ]

1 голос
/ 23 января 2012

Самый простой способ создания такого вида вывода - использовать String.format() - синтаксис строки формата поддерживает заполнение, а также форматирование даты и времени.

0 голосов
/ 23 января 2012

Вы можете использовать \t в качестве символа табуляции в Java.Несколько лучший вариант заключается в следующем: вы можете просто определить длину текущей части строки по int n = s.length() и добавить к ней несколько пробелов, чтобы получить фиксированную длину строки m.Это дает вам больше свободы по ширине, чем \ t, и для переменной длины вам все равно это понадобится.

Пример кода:

public String tab(String s, int m) {
    int n = s.length();
    StringBuffer sb = new StringBuffer();
    for (int i=n; i<m; i++) sb.append(" ");
    return s+sb.toString();
}
0 голосов
/ 23 января 2012

Что касается табуляции вашей информации, что именно вы подразумеваете под этим? Вы хотите напечатать пробел, такой же, как если бы вы нажали кнопку tab на клавиатуре, или вы хотите, чтобы такая программа, как excel, могла отображать элементы в столбцах?

Для первого, если вы напечатаете что-то вроде этого: str1 + "\t" + str2, это приведет к тому, что пробел будет помещен между str1 и str2, как если бы вы нажимали клавишу tab на клавиатуре ,

Если это второй вариант, вам необходимо ввести разделитель, такой как ;, чтобы позволить программе, например Excel, разделить их для вас, поэтому вам нужно будет сделать что-то вроде этого: str1 + ";" + str2 .

По второму вопросу вы можете взглянуть на класс SimpleDateFormat . Вы можете сделать что-то вроде этого:

K:mm a

Это должно напечатать время в формате AM / PM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...