天天看點

結對作業二

結對作業二

這個作業屬于哪個課程 2021春軟體工程實踐S班
這個作業要求在哪裡 結對第二次作業
結對學号 041801114 & 071808114
這個作業的目标 實作原型的功能 、部署雲伺服器
作業正文
其他參考文獻 《建構之法》、CSDN上相關文章

目錄

    • 連結
      • git倉庫連結
      • 代碼規範連結
      • 雲伺服器通路連結
    • PSP表格
    • 成品展示
    • 結對讨論過程描述
    • 設計實作過程
    • 代碼說明
    • 心路曆程和收獲
    • 評價結對隊友

Personal Software Process Stages 預估耗時 實際耗時
計劃
• 估計這個任務需要多少時間 10min
開發
• 需求分析 (包括學習新技術) 30min 40min
• 生成設計文檔
• 設計複審
• 代碼規範 (為目前的開發制定合适的規範) 20min
• 具體設計 1h 45min
• 具體編碼 16h 20h
• 代碼複審 2h
• 測試(自我測試,修改代碼,送出修改) 4h
報告
• 測試報告
• 計算工作量 5min
• 事後總結, 并提出過程改進計劃
合計 21h10min 30h20min

界面展示

結對作業二

文章搜尋功能

結對作業二

文章删除功能

結對作業二

文章檢視功能

結對作業二

熱詞統計功能(單擊熱詞)

結對作業二

搜尋熱詞功能(輕按兩下熱詞)

結對作業二

關于我們

結對作業二

在結對作業一完成之後,我們就開始讨論接下來該如何實作。

結對作業二

在開學布置結對作業二之後,我們就開始具體讨論改任如何實作以及實作的方法,并進行明确的分工規劃,之後我們也是一直按照規劃進行着。因為我們是舍友并且上課下課都是一起的,我們之間的交流和溝通都是線上下進行的,是以就沒有相應的截圖。:)

本次作業的大緻設計思路:用戶端給浏覽器傳送一個動作,浏覽器通過網際網路将資料請求發送給服務端,服務端再通過WordPress從資料庫中查找資料,再将資料發回給服務端,将php加工成HTML、JS和資料發送回給浏覽器進行渲染,最終将結果呈現給用戶端。

用到的語言有:PHP、HTML、JS、JS庫(Ajax、Jquery)

用到的平台和工具有:DW、MySql、WordPress、python、vs

結對作業二

//重定向

function templateRedirect() {
$basename = basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']);
loadCustomTemplate(TEMPLATEPATH.'/quickfind/'."$basename.php");}
add_action('template_redirect', 'templateRedirect');
           

//用于防止Sql注入

function safe_num_str($str) {
$arr = explode(',', $str);
$impl = array();
foreach($arr as $num) {
	if (is_numeric($num) && $num > 0) {
		array_push($impl, $num);
	}
}
array_push($impl, 0);
return implode(",", $impl);
}
           

//根據關鍵詞查文章

function keyword_search(){
    global $wpdb;
$impl = safe_num_str($_POST['except']);
if($_POST['kwd'] == '') {
	$myrows = $wpdb->get_results($wpdb->prepare("SELECT id, title FROM cv_posts WHERE id NOT IN(".$impl.") LIMIT %d, 5;", (number_format($_POST['curr_page']) - 1) * 5));
	$leng = $wpdb->get_col("SELECT count(*) AS cnt FROM cv_posts;");
} else {
	$myrows = $wpdb->get_results($wpdb->prepare( "SELECT id, title FROM cv_posts WHERE id NOT IN(".$impl.") AND id IN (SELECT posts_id FROM cv_keyword WHERE word LIKE '%%%s%%') LIMIT %d, 5;", $_POST['kwd'], (number_format($_POST['curr_page']) - 1) * 5 ));
	$leng = $wpdb->get_col($wpdb->prepare( "SELECT count(*) AS cnt FROM cv_posts WHERE id IN (SELECT posts_id FROM cv_keyword WHERE word LIKE '%%%s%%');", $_POST['kwd'] ))[0];
}
echo json_encode(array('leng'=> $leng, 'row'=>$myrows));
wp_die();
}
add_action( 'wp_ajax_keyword_search', 'keyword_search' );
add_action( 'wp_ajax_nopriv_keyword_search', 'keyword_search' );
           

//生成詞頻

function wordcloud_process() {
global $wpdb;

$impl = safe_num_str($_POST['except']);

$myrows = $wpdb->get_results( "SELECT word, count(*) AS cnt FROM cv_keyword WHERE posts_id NOT IN(".$impl.") GROUP BY word ORDER BY cnt DESC LIMIT 10;" );
echo json_encode($myrows);
wp_die();
}
add_action( 'wp_ajax_wordcloud_process', 'wordcloud_process' );
add_action( 'wp_ajax_nopriv_wordcloud_process', 'wordcloud_process' );
           

//根據文章id查找文章詳細資訊

function paper_detail() {
global $wpdb;
$myrows = $wpdb->get_results($wpdb->prepare( "SELECT * FROM cv_posts WHERE id = %d;", $_POST['paper_id'] ));
echo json_encode($myrows[0]);
wp_die();
}
add_action( 'wp_ajax_paper_detail', 'paper_detail' );
add_action( 'wp_ajax_nopriv_paper_detail', 'paper_detail' );
           

//統計某一關鍵詞多年來的資訊

function keyword_count() {
global $wpdb;

$impl = safe_num_str($_POST['except']);

$myrows = $wpdb->get_results($wpdb->prepare("SELECT meeting, year, count(*) as cnt FROM cv_keyword WHERE posts_id NOT IN(".$impl.") AND word = %s GROUP BY year, meeting;", $_POST['kwd']));
echo json_encode($myrows);
wp_die();
}
add_action( 'wp_ajax_keyword_count', 'keyword_count' );
add_action( 'wp_ajax_nopriv_keyword_count', 'keyword_count' );
           

//資料庫建表代碼

CREATE TABLE `cv_keyword` (
 `posts_id` int(11) NOT NULL,
 `word` varchar(191) COLLATE utf8mb4_bin NOT NULL,
  `year` int(11) NOT NULL,
 `meeting` char(4) COLLATE utf8mb4_bin NOT NULL,
 PRIMARY KEY (`posts_id`,`word`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

CREATE TABLE `cv_posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`year` int(11) NOT NULL,
`meeting` char(4) COLLATE utf8mb4_bin NOT NULL,
`title` mediumtext COLLATE utf8mb4_bin NOT NULL,
`keywords` mediumtext COLLATE utf8mb4_bin,
`abstract` mediumtext COLLATE utf8mb4_bin NOT NULL,
`url` mediumtext COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23248 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_bin
           

//通過Ajaxpost的代碼

$.ajax({
	   	type:'post',
		url:ajaxurl,
    	data:{'action':'keyword_search',
    	        'kwd':document.getElementById('searchtext').value.trim(),
				'except':sessionStorage['except'],
				'curr_page':sessionStorage['curr_page']},
            	cache:false,
            	dataType:'json',
            	success:succ,// succ 是前端處理資料的函數
            	error:function(data){
					console.log("error")
				}
			});
           

李家成:

這次作業我主要負責前端的頁面開發,一開始我認為有了上個學期web課程的基礎,開發起頁面應該信手拈來。但真正到了頁面開發階段,發現若沒有付之以認真嚴謹的态度,在頁面的布局上後期會出現各種各樣的問題,也以至于我在完成設計後情況百出,是以修改了好多次的布局,事半功倍。這次參與結對作業,我收獲最大的是學會了如何設計出一個嚴謹的頁面和如何通過echarts繪制圖表,同時我也學會了各類響應事件的編碼,以及更加熟練掌握了github的應用,可以說是受益匪淺。

柯少彬:

這次作業我主要負責的是後端的開發以及雲伺服器的搭建。因為我以前有搭建雲伺服器的經驗,是以這次作業很快就完成了搭建工作。在資料庫和後端的開發中,也是沒多大問題就能完成相應的功能。在這次的結對中,遇到的問題主要是如何對大批量論文資訊的處理以及優化,最終我使用python完成了對助教提供的論文資料的處理。經過這次結對作業,我接觸到了python并學會如何使用它,同時我還借助這次作業,加強了自己操作資料庫以及編碼js的能力,收獲豐富!

此次結對的對象是快樂摩爾柯少彬,因為是舍友是以我們兩個人在此次任務的交流和溝通上沒有問題,在任務的配置設定上我們也是很快地配置設定好各自的任務。在此次結對作業中,少彬做了許多較為繁瑣的工作,并且編碼的效率也是很高,這同時也把我的積極性和投入性也帶動了起來。在設計和編碼的過程中,我向少彬詢問了一些我無法解決的問題,少彬也耐心地向我解答,在這裡非常之感謝少彬。同時在他的編碼過程中,我也站在他的邊上觀摩學習,和他一起查找資料解決問題,學到許多以前從未觸及到的知識。
這是我和jc的第二次結對程式設計,同第一次作業比較我們之間任務的配置設定和兩個人之間的溝通更加高效、默契,原因可能是有了第一次結對的經驗,也可能是線下可以更好地面對面交流需求。總的來說,jc在這次結對過程中積極地完成各項配置設定到的任務,面對各種需求變更都主動去完成,這也充分調動我的積極性,讓我們結對雙方的效率更上一個台階。