项目介绍
项目:在我们的课堂,一般有3-5次全班考勤的机会。往年老师都是在考勤表上做标记,今年不一样了,让我们来编个程序,把考勤数据保存到电脑中。
已有数据,学生名单文件: list.txt(下载地址:http://pan.baidu.com/s/1hqxECIw)
201011621305 陈光森
201111621301 曹保印
201111621306 陈嘉濠
201111621313 陈俊宏
201111621325 龙飞玲
班级名称:jk12
要求:
1)所有输入参数都使用命令行输入。
2)Java主类名为 RegisterApp
3)命令行输入方式为 java RegisterApp list.txt jk12
4)签到结果保存到 jk12_20140303_1430.txt (班级名称_日期_时分.txt),内容如下,如果学生到课,则标记为1,否则标记为0
201011621305 陈光森 1201111621301 曹保印 1
201111621306 陈嘉濠 0
201111621313 陈俊宏 0
201111621325 龙飞玲 1
参考解答
- /**
- * 程序功能:简单的签到程序,能够保存签到后的结果
- * 作者:丁又专
- * 时间:2014.03.02
- * QQ:303727350
- */
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.PrintWriter;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Scanner;
- public class RegisterApp {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- //(a)使用命令行参数,输入学生名单,和 班级名称
- // 使用格式: java RegisterApp list.txt wl121
- if(args.length != 2){
- System.out.println("参数输入不对");
- System.out.println("使用方法(示例):java RegisterApp 名单文件名称 班级名称");
- System.exit(0);
- }
- //(b)学生签到结果:学生到,输入1;缺课,输入0
- System.out.println("——————————————————");
- System.out.println("简易学生签到程序V0.1");
- System.out.println("老师叫到名字,请答‘到’");
- System.out.println("1:到课 0:缺课");
- System.out.println("——————————————————");
- //(c)取得系统当前日期时间
- Date now = new Date();
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHMM");//可以方便地修改日期格式
- String strDate = dateFormat.format( now );
- System.out.println("当前时间:"+strDate);
- //(d)读取学生名单,args[0]为学生名单文件,args[1]为班级名称
- String fileList = args[0];
- String fileCheck = args[1] + strDate + ".txt";
- File fileInput = new File(fileList);
- File fileOutput = new File(fileCheck);
- //(e)利用Scanner类读取文本数据/键盘输入数据; PrintWriter类把签到结果写入到文件
- Scanner input = new Scanner(fileInput);
- Scanner sc = new Scanner(System.in);
- PrintWriter output = new PrintWriter(fileOutput);
- //保存缺课学生名字strAbsent ,缺课学生人数nAbsent, 是否缺课标记flag
- String strAbsent = "";
- int nAbsent = 0;
- int flag = 0;
- while(input.hasNext()){ //循环读取学生数据
- String strName = input.nextLine();
- //把学生名字输出到屏幕,从而进行点名。
- //老师根据学生到课情况,输入1-到课,0-缺课,保存到flag中
- System.out.println(strName);
- flag = sc.nextInt();
- //如果缺课,则记录下缺课学生数目 与 名字
- if(flag==0){
- nAbsent = nAbsent+1;
- strAbsent = strAbsent + " " + strName;
- }
- //把考勤结果写入名单
- output.print(strName);
- output.print(" ");
- output.println(flag);
- }
- //关闭I/O管道
- sc.close();
- output.close();
- input.close();
- System.out.println("——————————————————————————");
- System.out.println("考勤结束.");
- System.out.printf("一共有%d个同学缺课,分别是:%s\n",nAbsent,strAbsent);
- System.out.println("——————————————————————————");
- }
- }
输出结果
编程经验
1)提高搜索技能。好久没有编写程序,很多内容都忘记了。但根据以前哦记忆,利用baidu进行搜索。 如 字符串的格式化,就在baidu中输入“java String 格式化”,很容易就找到答案了。
2)简单却不容易。看似简单的问题,也需要不断修改,花费较多的时间。 编程无捷径,唯有“笨方法高”,推荐阅读 笨方法学Python。
3)不断/不断的敲代码,练习。