logo资料库

JAVA版学生成绩分析程序综合性实验报告.docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
源 码 下 载 链 接 : h t t p : / / d o w n l o a d . c s d n . n e t / d e t a i l / l a u d u k a n g / 8 3 4 1 4 2 1
华 南 农 业 大 学 信 息 学 院 综 合 性 实 验 报 告 课程: 面向对象程序设计实验 实验题目: 学生成绩分析程序 学号: 姓名: 专业: 计算机科学与技术 班级: 2012 级 3 班 指导教师: 提交日期: 2013 年 12 月 15 日
1. 题目介绍与分析 1.1 题目介绍 综合运用 Java 语言和面向对象技术开发一个小型软件系统:学生成绩分析程序,该程 序支持文本文件成绩单和对象文件成绩单,其中文本文件成绩单每行存储一个学生的成绩, 包括:学号、姓名和成绩,中间用英文逗号分隔(学号和姓名是字符串,成绩使用整数), 对象文件成绩单由系统生成。 1.2 实验要求分析 (1) 程序使用图形用户界面。 创建用户交互窗口 (2) 文件操作与数据统计功能 <1> 打开上面给出的文本文件,将其中的成绩数据加载到内存。 <2> 把内存中的成绩数据另存为格式相同的另一个文本文件。 <3> 把内存中的成绩数据另存为一个二进制的对象文件。 <4> 打开已经保存的二进制的对象文件,将其中的成绩数据加载到内存。 <5> 统计分析已经加载到内存的班级的成绩,包括:最高分、最低分、平均分、 各成绩等级的人数和百分比。 (3) 图形统计功能 <1> 对加载到内存的成绩单进行“柱形图”分析 <2> 对加载到内存的成绩单进行“饼图”分析 (4) 查询排序功能 <1> 在“查询输入框”输入“学号、姓名或成绩”的全部或部分,成绩列表中只 显示包括输入数据的成绩项目。 <2> 点击表格的“列标题”,可以自动按该列排序,2 次点击可以切换“升序”和 “降序”。 2. 程序静态结构
菜单传递 数据到文 本写入类 菜单传递 数据到对 象写入类 菜 单 传 递 文 件 路 径给文本读取类, 返回字符串数据 菜单传递文件路 径 给 对 象 读 取 类,返回字符串 菜 单 显 示 到窗口 查找框显 示到窗口 菜 单 传 递 路 径给路径框 菜单传递数据给 数据分析类 分析框显 示到窗口 成绩单显 示到窗口 传递过滤规则 菜单往成绩单 类 添 加 / 删 除 行 监听类中新建显示窗口 并将分析结果传递给饼 形图类 监 听 类 中 新 建 显 示 窗 口 并 将 分 析 结 果 传 递 给 饼 形 图类 3. 程序主要功能
MyMenu 控制程序的打开、保存文件和清楚数据的操作。监听到用户选择打开文本/对 象成绩单文件后,弹出文件选择框,显示程序所在路径过滤文件类型后的文件,用户选择文 件后,传递文件路径给文本/对象文件读取类,返回内容为字符串数据;用户选择保存文件, 弹出保存路径框,默认文件名为 defaultFileName,检测是否添加了后缀,否的话会自动添 加,文件名与已有文件名相同则提示是否覆盖保存,将内存中的数据及保存路径传递给写入 文件类;文件未打开时不能选择保存文件。文本成绩单文件支持中间插有空行,不支持学号 前面带空格的文件。 MyMenu 成功读取到文件后,按正则表达式打断数据内容,将文件路径和学生人数传 递给路径类 MyPath,路径类更新其标签内容为当前文件路径。 成 绩 单 框 的 内 容 在 MyMenu 读 取 文 件 后 一 行 一 行 通 过 MyGradeList.getMt().addRow(data) 添 加 进 去 ; 用 户 可 以 点 击 列 标 题 进 行 排 序 , 由 table.setRowSorter(new TableRowSorter(mt))实现。 查找类监听用户键盘输入的内容,改变 MyGradeList.table.setRowSorter(sorter)以显示 对应查找结果;用户可输入任意数据,若检测到输入内容含*或小数点,默认查找内容为空 格,不会影响".*foo.*"结构;支持学号、姓名和分数的自动查询。 分析类接收到传过来的字符串数据,按正则表达式打断其内容,取学生的成绩部分做统 计,通过 set 各个 JTextField 的内容更新显示数据;在监听到用户点击显示统计图后,统计 出的数据传递给柱形图类/饼形图类,弹出新窗口并在其中绘制对应的 Graphics 图形,带 3D 效果;未打开文件不可显示统计图。 清除数据通过 MyGradeList.getMt().setRowCount(0)清除成绩单显示的内容,通过传递 空字符串或空格清除查找框内容、分析框显示数据、显示路径等。 用户点击菜单中的帮助-关于后,弹出一个信息框,显示设定的“关于”内容,内容通 JLabel 添加;用户点击带超链接的文字后,弹出操作系统默认浏览器跳转到指定网页。 4. 程序测试 显示文本成绩单文件 defaultFileName.txt 内容: 查询&显示柱形统计图: 文件名重复提示是否覆盖保存文件: 帮助-关于
5. 实验总结 从构思到这个完成版,开发这个小型的学生证成绩分析系统累计花了一周左右的时间。 那千百行经得起用户各种操作的代码,是对这一周的劳动成果的最好体现。 这个程序我是先从文件的读取&保存着手的。做这部分,读取到文本成绩单文件时,需 要扔掉 UTF-8 的前两字节,Netbeans 输出框第一个学号前面才没有“?”,但后来的整合代 码,居然不能扔掉那两字节。 界面是用户与程序的交互重要部分,为了使其更为美观、整洁,在这方面下了不少功夫: 通过 UIManager.setLookAndFeel()改变了界面的皮肤、数据分析面板的布局设置、3D 统计 图等。一次又一次的修改,力求完美。 在完成代码整合后的几天,主要是做“发现一个 bug,解决一个 bug”的工作,期间也 得到了同学的帮忙测试。No bugs,no pains,有时候为了修复一个 bug 就花上了好几小时, 甚至熬夜(不弄掉 bug,睡不着啊……)。 说说过程中的一些测试 bug 吧。读取空文本文档时,表面上文件是没内容的,但程序 有读取到内容,返回的字符串不为空,造成数组下标溢界,搞得数据分析类中转换成整数出 错等,后来加多人数判断解决了这个问题。文本成绩单文件中间的空行也据此实现了。测试 只有一个学生信息的文本文件时,百分比不能正确显示,原来是 JTextField (int columns)中 的首选宽度的列数的值设置偏小了,这个 bug 说大不大,说小不小,但还得靠自己去发现 去解决。测试读取 60 人、90 人的文件时,程序再一次出错,读取了 42 个人信息,原因是 字节数据长度限制,改大就可以了,但始终还是有个人数上限的。 总的来说,这次综合性实验比较充分运用到了学习到的 Java 语言和面向对象技术,实 验过程中也再一次提高了自己的编程能力和解决问题的能力,自我感觉良好咯,但衡量一下 项目的代码,还有不少地方可以改进的,比如监听类可以再条理化、信息框可以重复利用以 减少代码量等。
分享到:
收藏