基于命令行的Java万年历程序并且带事件查询功能

软件实训题目:基于命令行的万年历程序要求:一、开发一个JavaApplication,允许用户通过命令行输入需要查询的年、月,在控制台中格式化输出该月的月历,月历格式参考... 软件实训题目:基于命令行的万年历程序

要求:

一、开发一个Java Application,允许用户通过命令行输入需要查询的年、月,在控制台中格式化输出该月的月历,月历格式参考Windows系统托盘的日期和时间程序。

二、在万年历中增加事件提醒的查询功能,打印输出月历时,在有事件记录的日期后添加*号。用户若输入日期号则可以查看当日的事件信息,包括日期、时间、事件描述,并给出数字标记(从1开始)。
1.仅提供查询功能,不要求新增、修改、删除等功能。
2.在代码中自行组织测试数据。
3.用户输入q时退出程序,输入b时返回上级菜单。
展开
 我来答
匿名用户
推荐于2016-07-23
展开全部
package verystupid;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class MyCalendar {

private static Map<Date,List<String>> hasEvent = new HashMap<Date, List<String>>();
private static String year;
private static String month;

public static void main(String[] args){
try {
instanceEvent();//初始化日程数据
} catch (ParseException e1) {
e1.printStackTrace();
}

while(true){
System.out.println("日历系统");
System.out.println("选择操作:");
System.out.println("q:退出系统");
System.out.println("1:输入时间");
Scanner scan =new Scanner(System.in);
String str = scan.next();
if(str!=null&&!"".equals(str)){
if(str.equals("q")){
System.exit(0);
}else if(str.equals("1")){
System.out.print("请输入年份:");
year= scan.next();
System.out.print("\n请输入月份:");
month = scan.next();
if(year==null||"".equals(year)||month==null||"".equals(month)){
System.out.println("不可输入空数据");
continue;
}
try {
showCalendar(Integer.parseInt(year),Integer.parseInt(month));
while(true){
System.out.println("选择日期查看日程(b返回上级菜单,q退出):");
String date = scan.next();
if(date!=null&&!"".equals(date)){
if(date.equals("b")){break;}
else if(date.equals("q")){System.exit(0);}
else{
try{
int i = Integer.parseInt(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d= sdf.parse(year+"-"+month+"-"+i);
if(hasEvent.containsKey(d)){
for(String s:hasEvent.get(d)){
System.out
.println(s+"\r\n");
}
}else{
System.out.println("改日无日程");
continue;
}

}catch(Exception e){
System.out.println("输入日期不为数字!");
}
}
}

}
} catch (Exception e) {
System.out.println("输入时间有误,请重新选择");
System.out.println("q:退出系统");
System.out.println("1:输入时间");
continue;
}
}
}
}
}

private static void instanceEvent() throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> events = new ArrayList<String>();
events.add("7:30 起床");
events.add("8:00 吃饭");
events.add("8:30 上课");
events.add("9:30 锻炼");
hasEvent.put(sdf.parse("2015-1-5"),events);
hasEvent.put(sdf.parse("2015-1-6"),events);
hasEvent.put(sdf.parse("2015-1-7"),events);
}

private static void showCalendar(int year,int month){
List<Integer> str = getMonthData(year, month);
System.out.println("当月日历如下:");
System.out.println("日 一 二 三 四 五 六 ");
String s;
try {
s = format(str);
System.out.println(s);
} catch (ParseException e) {
e.printStackTrace();
}
}

private static List<Integer> getMonthData(int year,int month){
List<Integer> result = new ArrayList<Integer>();
SimpleDateFormat data = new SimpleDateFormat("yyyy-MM");
try {
Date date = data.parse(year+"-"+month);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK);//得到该月1号为星期几
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)+1);
calendar.set(Calendar.DATE, calendar.get(Calendar.DATE)-1);
int dayCount = calendar.get(Calendar.DATE);//得到该月共多少天

calendar.setTime(date);
calendar.set(Calendar.DATE, calendar.get(Calendar.DATE)-1);
int dayCount_last = calendar.get(Calendar.DATE);//得到上个月共多少天
for(int i = 1;i<dayCount+day_of_week;i++){
if(i<day_of_week){
result.add(dayCount_last-day_of_week+i+1);
}else{
result.add(i-day_of_week+1);
}
}
} catch (ParseException e) {
e.printStackTrace();
}

return result;
}

private static String format(List<Integer> data) throws ParseException{
StringBuffer sb = new StringBuffer();
int weekDay = 0;
for(Integer str:data){
if(weekDay==7){
sb.append("\n");
weekDay=0;
}
if(str<10){
sb.append(" ");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(year+"-"+month+"-"+str);
if(hasEvent.keySet().contains(date)){
sb.append(str+"* ");
}else{
sb.append(str+" ");
}
weekDay++;
}
return sb.toString();
}
}
tjns8
2015-01-09 · 超过10用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:20万
展开全部
题还是要自己做的,学到用时方恨少啊,请采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风之少一浪子
2015-01-09
知道答主
回答量:20
采纳率:0%
帮助的人:8.8万
展开全部
15个财富值太少了 懒得敲
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式