结对作业-小学生四则运算改进版
---恢复内容开始---
代码地址:https://coding.net/u/ybsnn/p/GUI_four_formula/git
项目最终代码及可运行的jar包都在在long_final文件夹下。
成员:何跃斌(082)、陈鑫龙(078)
分工:1.四则运算、用户及记录相关函数编写:何跃斌
2.GUI图形界面设计及应用函数:陈鑫龙
合作:增加用户答题耗时计算功能、语言切换
照片:
一、题目描述
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
- 有计时功能,能显示用户开始答题后的消耗时间。
- 界面支持中文简体/中文繁体/英语,用户可以选择一种。
二、需求分析
1.这是一个应用,有着不同的用户使用,因而要有用户注册、登陆功能。
2.为了储存用户的对错总数,要有文件库或数据库支持。
3.计时功能的实现,要求设置静态变量,实时显示这个变量,不断累加,直至用户完成答题。
4.中英切换可以采取查字典的方式实现。
5.简体和繁体切换倒是可以使用外部jar包,调用函数完成。
三、程序设计
1.在项目下创建users.txt文件,储存用户信息。将用户信息抽象为用户类,包括账号、密码、昵称三个属性;创建管理用户类来支持用户注册、登陆功能;
2.在项目下创建record.txt文件,记录每次测试的结果。这就涉及到记录类,包括账号、这次答对的题数、总题数、耗时四个属性;然后记录管理类就根据账号创建或读取个人记录文件,以及备份到record.txt总记录文件。
3.这次将计时功能简化了,用时间差计算用户答题耗时。
4.苦于不会使用配置文件实现语言简单切换,本次只对一个介绍页面各个标签逐一设置了。
四、代码展示
1.增量计算
(1)创建新记录,写入用户记录文件及总记录文件
public static void writefile(Record record){ add_record("record.txt", record); add_record(record.getUsername(), record); } public static void add_record(String filename,Record record){ File file =new File(filename); FileOutputStream outp; try { outp = new FileOutputStream(file,true); PrintStream out=new PrintStream(outp, true); out.println(record); out.close(); System.out.println("write object success!"); } catch (IOException e) { System.out.println("write object failed"); e.printStackTrace(); }
(2)用户登陆后,读取自己的记录文件
public static ArrayList<Record> readfile(String username) throws FileNotFoundException{ ArrayList<Record> r =new ArrayList<>(); Scanner input=new Scanner(new File(username)); while(input.hasNext()){ Record record=new Record(input.next(),input.nextInt(),input.nextInt(),input.nextDouble()); r.add(record); } input.close(); return r; }
(3)累加文件全部记录的答对题数、总题数。即可获得该用户的答题总情况
r=Record_manage.readfile(username); for(Record record:r){ correct_num=correct_num+record.getCur_correct(); total_num=total_num+record.getCur_total(); } if(total_num==0) history.setText(""); else history.setText("累计答对题数为"+correct_num+",总题数为"+total_num);
2.计时功能(实际上实现计算用户答题耗时)
long end_time=System.currentTimeMillis(); double cost_time=(end_time-begin_time)*1.0/1000;
3.语言切换
界面如右所示:
(1)中文转英语
private void EnglishActionPerformed(java.awt.event.ActionEvent evt) { welcome.setText("welocme,"+username); title.setText("Pupils' arithmetic online test"); commit.setText("start"); history.setText("history record:right,"+correct_num+"times;total,"+total_num+"times"); intro.setText("4 titles each page"); }
(2)简体转繁体
private void fantiActionPerformed(java.awt.event.ActionEvent evt) { welcome.setText(ChineseUtils.simpToTrad(welcome.getText())); title.setText(ChineseUtils.simpToTrad(title.getText())); commit.setText(ChineseUtils.simpToTrad(commit.getText())); history.setText(ChineseUtils.simpToTrad(history.getText())); intro.setText(ChineseUtils.simpToTrad(intro.getText())); }
所需的jar包:
(3)恢复默认
private void ChineseActionPerformed(java.awt.event.ActionEvent evt) { begin B = new begin(username); B.setVisible(true); this.setVisible(false); }
五、程序运行
1.登陆界面及注册界面
2. 说明及语言转换
3.答题界面及答题情况
4.答题情况
六、小结感受
刚开始我们就各自的分工写代码,粗略地设想对方会怎样调用自己的代码。可是当把我们的代码合在一起时,才发现有很多的错误,函数调用相当艰辛。
之后我们共用同一电脑完善这个项目,深感沟通很重要。