咱們在我的做業1中,用各類語言實現了一個命令行的四則運算小程序。進一步,本次要求把這個程序作成GUI(能夠是Windows PC 上的,也能夠是Mac、Linux,web,手機上的),成爲一個有基本功能、必定價值的程序。在下面的功能需求中實現兩個:javascript
最後封裝成一種替代第一次做業中生成題目的方法(也就是從數據庫中取)。html
對於這題,我畫了一個簡單的表面流程圖,描述了這個切換語言的過程。(無技術基礎看)前端
關於具體實現過程參考下面的執行過程:(有技術基礎看)java
流程圖分解說明:jquery
/* firstPage1:表示第一個頁面從上往下第一個文字語言須要動態變化的位置 firstPage2:表示第一個頁面從上往下第二個文字語言須要動態變化的位置 result.firstPage1:表示從後臺獲取的對應語言對應位置的配置文件內容 result.firstPage2:表示從後臺獲取的對應語言對應位置的配置文件內容 */ <script type="text/javascript"> $(function(){ var lanaguage1=$('input:radio:checked').val(); $.ajax({ dataType:"json", type:"post", data : { lanaguage : lanaguage1 }, url : "LanguageServlet?page=firstPage", success : function(result) { $("#firstPage1").html(result.firstPage1); $("#firstPage2").val(result.firstPage2); } }); }); </script>
因爲涉及三種語言,因此設置了三個配置文件,分別是simpleChinese。properties,traditionalChinese.properties,English.properties.大概的內容以下圖
c++
/* 加載語言配置文件代碼 */ if(lanaguage.trim().equals("simpleChinese")){ InputStream inputStream= Test.class.getClassLoader().getResourceAsStream("simpleChinese.properties"); prop.load(inputStream); ///加載屬性列表 } else if(lanaguage.trim().equals("traditionalChinese")){ InputStream inputStream= Test.class.getClassLoader().getResourceAsStream("traditionalChinese.properties"); prop.load(inputStream); ///加載屬性列表 } else{ InputStream inputStream= Test.class.getClassLoader().getResourceAsStream("English.properties"); prop.load(inputStream); ///加載屬性列表 } String firstPage1=prop.getProperty("firstPage1"); String firstPage2=prop.getProperty("firstPage2");
/* PrintWriter pw = response.getWriter(); JSON用到的包是阿里巴巴的fastJSON.jar */ Map<String,String>map=new HashMap<>(); map.put("firstPage1", firstPage1); map.put("firstPage2", firstPage2); String json=JSON.toJSONString(map); pw.print(json);//返回數據
以上就是功能一的所有描述。git
(該功能沒有使用數據庫,利用cookie功能實現存儲,存儲時間爲一年)github
①設置了一個TimerReturn類來表示(便於數據處理)web
②前端js主要時間代碼(百度而來,修改了一點點,本應附上連接後面沒找到(PS:若有侵權告知刪除))ajax
/* timeShow爲顯示時間的位置。 document.getElementById("time").value=two_char(h) + ":" + two_char(m) + ":" + two_char(s); 因爲時間不在答案提交的form中,因此使用form中添加<input type="hidden" id="time" name="time">進行所需的時間提交 */ <script> function two_char(n) { return n >= 10 ? n : "0" + n; } function time_fun() { var sec=0; setInterval(function () { sec++; var date = new Date(0, 0) date.setSeconds(sec); var h = date.getHours(), m = date.getMinutes(), s = date.getSeconds(); document.getElementById("timeShow").innerText = two_char(h) + ":" + two_char(m) + ":" + two_char(s); document.getElementById("time").value=two_char(h) + ":" + two_char(m) + ":" + two_char(s); }, 1000); } </script>
③後臺進行返回結果的處理,把結果session而且把結果存儲到cookie中。
String time=(String)request.getParameter("time"); List<TimerReturn>timeList=(List<TimerReturn>) request.getSession().getAttribute("timeList"); if(timeList==null){ timeList=new ArrayList<>(); } TimerReturn timeReturn=new TimerReturn(list.size()+"",time,list.size()-count+"",count*1.0/list.size()*100+"%"); timeList.add(timeReturn); request.getSession().setAttribute("flag", "true");//控制前端時間記錄的表頭是否顯示,若是沒有獲取到flag則不顯示 request.getSession().setAttribute("timeList", timeList);
/* 寫入Cookie */ boolean flag=true;//用於斷定是不是第一存入cookie,true表示第一次存 for(int i=0;i<c.length;i++){ if(c[i].getName().equals("timeList")){ String totalTimeList=c[i].getValue()+"M"+perTimeList;//用M拼接每次的結果 Cookie c1=new Cookie("timeList", totalTimeList); c1.setMaxAge(3600*24*30*12);//設置cookie存在時間單位s response.addCookie(c1); flag=false; } } if(flag==true){ Cookie c1=new Cookie("timeList", perTimeList); c1.setMaxAge(3600*24*30*12); response.addCookie(c1); }
④前端用c標籤獲取
<c:forEach var="Result" items="${timeList}"> <c:if test="${!empty Result.time}"> <tr> <td>${Result.totalCount}</td> <td>${Result.time}</td> <td>${Result.errorCount}</td> <td>${Result.correctRate}</td> </tr> </c:if> </c:forEach>
附上具體的網頁連接:我也本身試試
事前討論的代碼規則
代碼共同提交記錄