《课程设计--随机点名器.docx》由会员分享,可在线阅读,更多相关《课程设计--随机点名器.docx(16页珍藏版)》请在优知文库上搜索。
1、第1章课题概述11.1 课程设计目的11.2 课程设计要求1第2章概要设计22.1 程序模块结构图22.2 使用外部包的确定22.3 主界面模块说明32.4 读取学生信息模块说明32.5 随机抽取学生模块说明3第3章程序功能的实现43.1 主界面模块的实现43.1.1 菜单栏的实现43.1.2 1.2点名按钮的实现43.1.3 窗口的大小和位置43.2 读取学生信息模块的实现53.2.1选择文件对话框的实现53.2.2写入带滚动条表格的实现53.3随机抽取学生模块的实现63.3.1输入信息对话框的实现63.3.2显示输入错误对话框的实现7第4章调试及发现问题的解决9第5章程序测试及分析10第6
2、章总结14参考文献15第1章课题概述1.1课程设计目的课程设计题目:随机点名器程序实现的要点:通过开源项目jExcel或POl提供的Jar包,实现EXCel文件的读写。要求从EXCeI文件的某个Sheet中读出班级所有同学的名单,然后通过产生一个随机数选中其中一个同学回答问题,然后输入回答问题的得分,并将该得分存入EXCel表的另外一个Sheet中。1.2课程设计要求程序要求实现的功能有:(1)选择需要被读取的EXCeI文件;(2)从EXCel读取学生的名单信息;(3)产生一个随机数读取要输入分数的学生;(4)写入被抽到学生的分数;第2章概要设计2.1程序模块结构图随机点名器随机抽取学生模块读
3、取学生信息模块主界面模块图2-1程序结构模块图2.2使用外部包的确定由于JDK提供的类库没有较好的对EXCeI文件读写功能,所以需要通过开源项目EXCeI提供的Pol包。它能方便对EXCel读写,能修饰单元格属性等功能,能满足我当前的需求。经过网上查询使用方法,在随机点名器里需要使用的地方基本可以正确使用。2 .3主界面模块说明主界面提供程序运行时出现的界面,此界面必须要有我想要实现功能的组件。具体而言,它需要有菜单,打开文件的菜单项,关闭程序的菜单项。由于初次设计程序,布局方式和界面美观性考虑的较少。3 .4读取学生信息模块说明这个模块需要弹出一个文件选择对话框,在对话框中选择我们需要的Ex
4、cel文件。然后对这个EXCel文件进行读取操作,把读取到的内容显示在主界面上。还需要考虑好是以怎样的方式显示在主界面上,使得看起来简洁清楚。2. 5随机抽取学生模块说明这个模块是需要弹出一个输入文本对话框,并且需要产生一个随机数来抽取到其中一个学生。收取到学生并且输入分数后还得写入EXCel文件。还有因为是要输入分数,所以如果输入的不是一个合法的分数就得弹出一个提示错误的对话框。第3章程序功能的实现3.1主界面模块的实现3.1.1 菜单栏的实现创建出菜单栏,在栏上放菜单,菜单里放打开和退出菜单项。分别为各打开菜单项添加监听。以上过程的主要实现代码如下:JMenuBarjmb=newJMenU
5、Bar();JMenujm=newJMenU(菜单”);jmb.add(jm);JMenuItemjml=newJMenU工tem(打开);JMenuItemjm2=newJMenU工tem(退出”);jm.add(jml);jm.add(jm2);add(jmbnewBorderLayoutO.NORTH):jb=newJBUtton(开始点名”);jp=newJPanel();jml.addActionListener(newMyMenuMonitorO);jm2.addActionListener(newMyMenuMonitorO);jb.addActionListener(newMy
6、BUttOnMOnitOP();3.1.2 点名按钮的实现设置个按钮,这是个重要的按钮,点击它就可以随机抽取学生,所以为它加上监听,监听事件并处理类。放按钮在拆分窗格的下部。以上过程主要实现代码如下:jb=newJBUttOn(“开始点名”);jb.addActionListener(newMyButtonMonitorO);setVisible(false);Stringarr=getArr(ex.getText();JTablet=newJTable(arr,title);js=newJScrollPane(t);jp=new3Panel();add(js,BorderLayout.CEN
7、TER);add(jb,BorderLayout.SOUTH);setVisible(true);3.1.3 窗口的大小和位置将创建好的窗口设置大小,位置和是否可见。以上过程主要实现代码如下:setSize(600,650);SetDefaultcioseOperation(JFrame.EXIT_0N_CL0SE);SetVisible(true);SetLOCatiOnRelatiVeTo(null);3. 2读取学生信息模块的实现3. 2.1选择文件对话框的实现创建设置好文件对话框,显示文件对话框,选择EXCel文件,以此来获取打开文件的对象引用。以上过程主要实现代码如下:if(Str.
8、equals(“打开“)path=newOpen().getPath();)publicStringgetPath()JFileChooserjfc=newJFileChooser(D:/);jfc.setFileSelectionMode(3FileChooser.FILfS-DLDIRFCORIES);Stringpath=null;intVal=jfc.showOpenDialog(jfc);if(Val=JFileChooser.APPROVE_OPTION)path=jfc.getSelectedFile().getAbsolutePath();)returnpath;)3. 2.2
9、写入带滚动条表格的实现此模块主要是读取EXCeI文件上所以学生的信息,并且以读取到的学生内容作为JTabIe表格的内容创建出带滚动条的表格。得到Excel文件上的信息需要得到先前被选中文件的工作簿对象,再得到该工作簿的第一个表格对象,就可以得到该表格上的内容一共有多少行,可以得到任意的单元格,从单元格上就可以得到内容数据。把这些数据内容放入二维的字符串数组str,用Str来作为表格内容。把带滚动条表格添加在拆分窗格的上部。以上过程主要实现代码如下:classMyFrameextendsJFrame/staticJTextAreajta;privatestaticfinallongSeriaLV
10、ersionUID=-6827523187297569439L;static3TabletabLe;staticStringpath;JButtonjb;JPaneljp;Stringtitle=“姓名”,“性别二”学号、“班级”;Stringtitlel=vv,性VV别“,“学V号Jvvvv班级”;JScrollPanejs;staticStringstr;publicStringgetClassNum(Stringpath)throwsExceptionFileInputStreamfi=newFileInputStream(path);POIFSFileSystemps=newPOIFS
11、FileSystem(fi);WorkbookWb=newHSSFWorkbook(ps);ExcelExtractorex=newExcelEtractor(HSSFWorkbook)wb);Sheeths=wb.getSheetAt(0);introwNum=(int)(Math.random()*(hs.getLastRowNum()+1);Rowrow=hs.getRow(rowNum);Cellname=row.getCell(0);str=name.getStringCellValue();name.setCellType(Cell.CELL_TYPE_STRING);Cellse
12、x=row.getCell(l);sex.SetCellType(Cell.CELL_TYPE_STRI/VG);Cellcoll=row.getCell(2);coll.setCellType(Cell.CELL_TYPE_STRING);CellClassNum=row.getCell(3);coll.setCellType(Cell.CELL_TYPE_STRING);return(“随机抽取到:+name+”,+sex+*,+coll+classNum);publicStringgetArr(Strings)Stringstr=newString484;Stringt=s.split(
13、,n);for(inti=l;it.length;i+)Stringt2=ti.split(f);for(intj=0jjt2.length;j+)stri-lj=t2j;)returnstr;3. 3随机抽取学生模块的实现3. 3.1输入信息对话框的实现点击随机点名按钮后弹出输入信息对话框,在弹出时产生了一个随机数,用这个随机数来读取EXCel中的某一个学生,把此学生信息设置为框内显示文字。要修改EXCeI文件需要利用已创建的Excel工作薄创建新的可写入的Excel工作薄。点击对话框确定时,学生分数被写入EXCeI的一个Sheet的某一单元格,并且将学生姓名一起都被写入单元格。如果点名成功
14、后不输入任何分数关闭,则不写入任何数据。以上过程主要实现代码如下:if(ss!=null)ss=ss.trim();tryintscore=Integer.parselnt(ss);if(score=0)FileInputStreamfi=neMFileInputStream(pth);POIFSFileSystemps=newPOIFSFileSystem(fi);WorkbookWb=newHSSFWorkbook(ps);Sheeths2=wb.getSheetAt(1);introwNum=hs2.getLastRowNum()+1;Rowrowl=hs2.createRow(rowN
15、um);Cellcell0=rowl.createCell(0);Cellcelll=rowl.CreateCell(I);cell0.SetCellValue(Open.str);celll.SetCellValue(ss);/将成绩写入指定文件中去FileOutputStreamfileut=newFileOutputStream(pth);wb.write(fileut);fileOut.close();3. 3.2显示输入错误对话框的实现把输入的字符串转换为int数据,判断整数在0到100之间就可以正常写入,如果不在这个范围内的整数就弹出错误信息对话框。但如果输入的字符串无法转换成int型数据就会产生NuniberFo