版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
随机点名器目录第1章课题概述 11.1课题的目的 11.2课题的要求 11.2.1输入输出的要求 11.2.2程序实现的功能要求 1第2章概要设计 22.1整个程序的模块结构及流程 22.2使用外部包的确定 22.3主界面模块说明 22.4文件选择模块说明 32.5读取名单信息模块说明 32.6随机抽取学生模块说明 32.7信息写入模块说明 3第3章程序功能的实现 43.1主界面模块的实现 43.1.1菜单栏的实现 43.1.2开始点名按钮的实现 53.2文件选择模块的实现 53.3读取名单信息模块的实现 53.4随机抽取学生模块的实现 63.5信息写入模块的实现 73.5.1分数输入框的实现 73.5.2日期写入的实现 73.5.3学生姓名写入的实现 83.5.4显示输入错误对话框的实现 8第4章调试及发现问题的解决 9第5章程序测试及分析 10第6章总结 13参考文献 14
第1章课题概述本次java课程设计的题目是利用开源POI项目从Excel文件的某个Sheet中读出班级所有同学的名单,然后通过产生一个随机数选中其中一个同学回答问题一个随机数选中其中一个同学回答问题,然后输入回答问题的得分,并将该得分存入Excel表的另外一个Sheet中。1.1课题的目的在高等院校里,传统的学生考勤以及平时在课堂上的表现,主要是依靠老师在课堂上点名或学生会抽查点名制度,还有上课提问等。学生人数多、考勤不全面、数据不准确、老师难以记住所有人,并且记录起来又非常繁琐。所以随机点明器就方便了这种情况。随机点名器既方便了老师上课点名的烦恼,节约了时间,又消除了老师的主观性,不在总是点到相同的同学,对于学生来说也是公平的。具有较为广泛的实用性。1.2课题的要求1.2.1输入输出的要求(1)程序运行后应首先输出一个主菜单,并让用户自行选择机器中的Excel的表格,然后进行相应的操作。(2)选中的名单会显示在窗口上,用于点名。(3)用户每次更新输入成绩后,应能立即将分数和姓名写入Excel的表格中。(4)运行结果的输出应整齐、清晰,排列在sheet页上。1.2.2程序实现的功能要求(1)利用外部的jar包,通过开源项目POI或jxl处理Excel文件;(2)选择需要被读取的Excel文件;(3)从Excel读取学生的名单信息;(4)产生一个随机数抽取要需要回答问题的学生;(5)写入被抽到学生的分数;
第2章概要设计2.1整个程序的模块结构及流程图2-1程序结构模块图2.2使用外部包的确定由于JDK提供的类库没有较好的对Excel文件读写功能,所以需要通过开源项目Excel提供的POI.jar包。尽管jxl.jar包较为简单和网上提供的案例较多,但是POI的功能更为强大和全面,开源项目Excel提供的POI.jar包提供了对Excel文件操作的各种功能,能简单的对Excel文件进行读写,对单元格的各种处理方法,满足了对程序的需求。并且可以跨平台使用,具有良好的兼容性。2.3主界面模块说明主界面提供程序运行时出现的窗口界面,此界面必须要实现各种功能的组件。具体而言,它需要有界面,打开文件的菜单项,关闭程序的菜单项,帮助按钮的菜单选项。还需要考虑好什么样的布局方式和界面美观性,使其看起来更美观,简洁。
2.4文件选择模块说明文件选择提供机器中供用户选择的文件,这个模块需要弹出一个文件选择对话框,可以让用户自行选择需要的Excel表格,是程序更加具有实用性。2.5读取名单信息模块说明经过文件选择模块选择文件后,对这个Excel文件进行读取操作,把读取到的内容显示在主界面上。需要考虑好是要用什么方法显示在主界面上,使得看起来简洁、明了。2.6随机抽取学生模块说明这个模块在名单选定后,需要产生一个随机数来抽取到其中一个学生,并将该学生的信息打印在界面上。2.7信息写入模块说明这个模块是需要弹出一个输入文本对话框,要求输入分数后还得写入Excel文件,需要写入学生姓名、回答问题时间、得到的分数以及写入的数据格式,这些都要考虑。还有因为是要输入分数,所以如果输入的不是一个合法的分数就得弹出一个提示错误的对话框。
第3章程序功能的实现3.1主界面模块的实现3.1.1菜单栏的实现创建出菜单栏,在栏上放文件和帮助菜单,文件里放打开和退出菜单项,帮助里放帮助菜单栏,为各个按钮设置监听。以上过程的主要实现代码如下:publicclassMyFrameextendsJFrame{ staticJTextAreajta; staticStringpath; staticJButtonjb; JPaneljp;//JPanel是一般轻量级容器 MyFrame(Stringstr){ super(str); //添加菜单按钮 JMenuBarjmb=newJMenuBar(); JMenujmfile=newJMenu("文件"); JMenujmhelp=newJMenu("帮助"); jmb.add(jmfile); jmb.add(jmhelp); JMenuItemjmopen=newJMenuItem("打开"); JMenuItemjmexit=newJMenuItem("退出"); JMenuItemjmaid=newJMenuItem("帮助"); jmfile.add(jmopen); jmfile.add(jmexit); jmhelp.add(jmaid); add(jmb,newBorderLayout().NORTH); //添加button按钮…… //添加菜单监听器 jmopen.addActionListener(newMyMenuMonitor()); jmexit.addActionListener(newMyMenuMonitor()); jmaid.addActionListener(newMyMenuMonitor()); //添加按钮监听器 setSize(600,279); setLocationRelativeTo(null); setVisible(true); }}
3.1.2开始点名按钮的实现jb=newJButton("开始点名"); jta=newJTextArea(10,50); //添加一个面板 jp=newJPanel(); add(jp,newBorderLayout().CENTER);jp.add(jta);3.2文件选择模块的实现创建设置好文件对话框,显示文件对话框,选择Excel文件,以此来获取打开文件的对象引用。以上过程主要实现代码如下:publicStringgetPath(){ JFileChooserjfc=newJFileChooser(); jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置JFileChooser,以允许用户只选择文件、只选择目录,或者可选择文件和目录。 Stringpath=null; //指示显示文件和目录 intVal=jfc.showOpenDialog(jfc); //弹出一个"OpenFile"文件选择器对话框。 if(Val==JFileChooser.APPROVE_OPTION){//选择确认(yes、ok)后返回该值。 path=jfc.getSelectedFile().getAbsolutePath();//返回选中的文件。//返回此抽象路径名的绝对路径名字符串。 } returnpath; }}3.3读取名单信息模块的实现此模块主要是读取Excel文件上所以学生的信息,并且以读取到的学生内容。得到Excel文件上的信息需要得到先前被选中文件的工作簿对象,再得到该工作簿的第一个表格对象,对表格进行遍历,这样就将单元格上内容数据一个一个的读取出来了。把这些数据内容用append方法将内容打印在界面中间的JTextArea上。以上过程主要实现代码如下:classMyMenuMonitorimplementsActionListener{ HSSFCellhssfcell; publicvoidactionPerformed(ActionEvente){ Stringstr=e.getActionCommand(); if(str.equals("打开")){ MyFrame.path=newOpen().getPath();
try{ FileInputStreamfi=newFileInputStream(MyFrame.path); POIFSFileSystemps=newPOIFSFileSystem(fi); Workbookwb=newHSSFWorkbook(ps); Sheeths=wb.getSheetAt(0); if(hs==null){ return; } for(intrownum=0;rownum<=hs.getLastRowNum();rownum++){ HSSFRowhssfrow=(HSSFRow)hs.getRow(rownum); if(hssfrow==null){ continue; } MyFrame.jta.append("\n"); for(intcellnum=0;cellnum<=hssfrow.getLastCellNum();cellnum++){ hssfcell=hssfrow.getCell(cellnum); if(hssfcell==null){ continue; } MyFrame.jta.append(hssfcell.toString()+"");// System.out.print(""+hssfcell+""); //MyFrame.jta.hssfcell; } System.out.println(""); ……}}3.4随机抽取学生模块的实现点击开始点名按钮后程序随机产生一个随机数,用这个随机数来读取Excel中的某一个学生,将选取到的学生信息打印在界面中间的JTextArea上,并覆盖之前的学生名单。要修改Excel文件需要利用已创建的Excel工作薄创建新的可写入的Excel工作薄。以上过程主要实现代码如下:publicclassOpen{ staticStringstr; publicStringgetMessage(Stringpath)throwsException{ FileInputStreamfi=newFileInputStream(path); POIFSFileSystemps=newPOIFSFileSystem(fi); Workbookwb=newHSSFWorkbook(ps); ExcelExtractorex=newExcelExtractor((HSSFWorkbook)wb);
Sheeths=wb.getSheetAt(0); introwNum=(int)(Math.random()*(hs.getLastRowNum())+1); Rowrow=hs.getRow(rowNum); intcellNum=row.getLastCellNum(); Cellname=row.getCell(0); str=name.getStringCellValue(); name.setCellType(Cell.CELL_TYPE_STRING);//类型转换 Cellsex=row.getCell(1);//获取第2个单元格, sex.setCellType(Cell.CELL_TYPE_STRING);//类型转换 Cellcoll=row.getCell(2);//获取第3个单元格, coll.setCellType(Cell.CELL_TYPE_STRING);//类型转换 return("随机抽取到:"+name+""+sex+""+coll+""); }……}3.5信息写入模块的实现点击开始点名,弹出对话框,输入分数,点击对话框确定时,学生分数被写入Excel的一个sheet的某一单元格,并且日期、被写入学生信息都被写入单元格。把创建出的标签添加进单元格就实现了写入操作。如果点击取消,那么就不写入信息。3.5.1分数输入框的实现过程主要实现代码如下:classMyButtonMonitorimplementsActionListener{ publicvoidactionPerformed(ActionEvente)throwsNullPointerException{……StringgetMessage=newOpen().getMessage(MyFrame.path); MyFrame.jta.setText(getMessage); Stringss=JOptionPane.showInputDialog("请输入成绩:");……}}3.5.2日期写入的实现过程主要实现代码如下:classMyButtonMonitorimplementsActionListener{ publicvoidactionPerformed(ActionEvente)throwsNullPointerException{……CreationHelpercreationHelper=wb.getCreationHelper(); CellStylecellStyle=wb.createCellStyle(); cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyy-mm-ddhh:mm:ss"));……
cell2.setCellValue(newDate());cell2.setCellStyle(cellStyle);……}}3.5.3学生姓名写入的实现过程主要实现代码如下:classMyButtonMonitorimplementsActionListener{ publicvoidactionPerformed(ActionEvente)throwsNullPointerException{……FileInputStreamfi=newFileInputStream(MyFrame.path); POIFSFileSystemps=newPOIFSFileSystem(fi); Workbookwb=newHSSFWorkbook(ps); …… Sheeths2=wb.getSheetAt(1); introwNum=hs2.getLastRowNum()+1; Rowrow1=hs2.createRow(rowNum); Cellcell0=row1.createCell(0); Cellcell1=row1.createCell(1); Cellcell2=row1.createCell(2); cell0.setCellValue(newOpen().str); cell1.setCellValue(ss); …… FileOutputStreamfileOut=newFileOutputStream( MyFrame.path); wb.write(fileOut); fileOut.close();……}}3.5.4显示输入错误对话框的实现过程主要实现代码如下:classMyButtonMonitorimplementsActionListener{ publicvoidactionPerformed(ActionEvente)throwsNullPointerException{……else JOptionPane.showMessageDialog(null,"输入必须是0到100之间的整数", "提示",JOptionPane.ERROR_MESSAGE);……}}
第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1.如何选择正确的POI.jar包,如何去熟悉该包里的包装的类、方法、变量。从网上下的jar包使用,由于是开源的项目,所以API参考文档也全是英文的,为了熟悉该包就在网上寻找使用该包的典型例子,比如:读取文件、创建写入文件、更新Excel、设置日期格式等例子。边看API边翻译学习,这样马上就熟悉起这个jar包。2.为什么一直在打印的时候总是会将sheet2页也打印出来。解决方法:一开始出现这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年垒球帽行业发展前景预测及赢领未来策略分析研究报告
- 2025-2030年船舶远程健康监测系统行业深度调研及发展战略咨询报告
- 镀金属玻璃纤维行业市场营销创新战略制定与实施分析报告
- 染料作物行业直播电商战略分析报告
- 光学镜头装配试题及答案
- 2026年正规版保密合同协议书范本
- 2026届苏州市九年级生物中考三模原创仿真模拟试卷(含参考答案解析)
- 机械知识试题及答案
- 护理沟通礼仪题目及答案
- 2026年注册计量师二级高频考点习题精
- FBCDZ系列通风机为对旋式防爆主要通风机
- 二极管整流和稳压电路电子课 中职 模拟电子线路(第3版)
- GB/T 37669-2019自动导引车(AGV)在危险生产环境应用的安全规范
- 第四章 AP1000反应堆结构设计(杜圣华)
- 几起重大工程质量安全事故原因
- 初中数学教学大纲
- 设备供货安装方案(通用版)
- 中考物理题型二《开放、推理类题》
- 第二节 金属的腐蚀和防护PPT课件
- 2011年天津市高考物理试卷
- 九年一贯制学校小学初中深度一体化办学策略的调研报告
评论
0/150
提交评论