diff --git a/group14/630254746/Code2017/.classpath b/group14/630254746/Code2017/.classpath
new file mode 100644
index 000000000..72c2ba61a
--- /dev/null
+++ b/group14/630254746/Code2017/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/group14/630254746/Code2017/.gitignore b/group14/630254746/Code2017/.gitignore
new file mode 100644
index 000000000..ae3c17260
--- /dev/null
+++ b/group14/630254746/Code2017/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/group14/630254746/Code2017/.project b/group14/630254746/Code2017/.project
new file mode 100644
index 000000000..06e2d605e
--- /dev/null
+++ b/group14/630254746/Code2017/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>code2017</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/group14/630254746/Code2017/.settings/org.eclipse.jdt.core.prefs b/group14/630254746/Code2017/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..7341ab168
--- /dev/null
+++ b/group14/630254746/Code2017/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/group14/630254746/Code2017/src/com/leaning/code/ArrayList.java b/group14/630254746/Code2017/src/com/leaning/code/ArrayList.java
new file mode 100644
index 000000000..980736245
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/ArrayList.java
@@ -0,0 +1,87 @@
+package com.leaning.code;
+
+import java.util.Arrays;
+
+public class ArrayList implements List {
+
+	private int size; // ¼ÇÂ¼¼¯ºÏÖÐµÄÔªËØ¸öÊý
+
+	private Object[] elementsData;
+
+	private int totalCount = 1; // ¼ÇÂ¼¼¯ºÏµÄ´óÐ¡
+
+	public ArrayList() {
+		this.elementsData = new Object[totalCount];
+	}
+
+	private void grow() {
+		if (size >= totalCount) {
+			// ½øÐÐÀ©ÈÝ
+			int oldCapacity = size;
+			int newCapacity = oldCapacity + oldCapacity << 1;
+			totalCount = newCapacity;
+			elementsData = Arrays.copyOf(elementsData, newCapacity);
+		}
+	}
+
+	@Override
+	public void add(Object o) {
+		if (totalCount > size) {
+			elementsData[size++] = o;
+		} else {
+			grow();
+			elementsData[size++] = o;
+		}
+	}
+
+	@Override
+	public void add(int index, Object o) {
+		if (index < size) {
+			if (totalCount <= size + 1) {
+				grow();
+			}
+			System.arraycopy(elementsData, index, elementsData, index + 1, size
+					- index);
+			elementsData[index] = 0;
+
+		} else {
+			throw new RuntimeException("Êý×éÏÂ±êÔ½½ç");
+		}
+		size++;
+	}
+
+	@Override
+	public Object get(int index) {
+		if (index < size)
+			return elementsData[index];
+		else
+			throw new RuntimeException("Êý×éÏÂ±êÔ½½ç");
+	}
+
+	@Override
+	public Object remove(int index) {
+		if (index >= size || index < 0) {
+			throw new RuntimeException("Êý×éÏÂ±êÔ½½ç");
+		}
+		Object o = elementsData[index];
+
+		int numMoved = size - index - 1;
+		if (numMoved > 0)
+			System.arraycopy(elementsData, index + 1, elementsData, index,
+					numMoved);
+		elementsData[--size] = null; 
+
+		return o;
+	}
+
+	@Override
+	public int size() {
+		return size;
+	}
+
+	@Override
+	public String toString() {
+		return "ArrayList [elementsData=" + Arrays.toString(elementsData) + "]";
+	}
+
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/code/Iterator.java b/group14/630254746/Code2017/src/com/leaning/code/Iterator.java
new file mode 100644
index 000000000..b9ae65aab
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/Iterator.java
@@ -0,0 +1,8 @@
+package com.leaning.code;
+
+public interface Iterator {
+
+	public boolean hasNext();
+	
+	public Object Next();
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/code/LinkedList.java b/group14/630254746/Code2017/src/com/leaning/code/LinkedList.java
new file mode 100644
index 000000000..fd4c57a92
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/LinkedList.java
@@ -0,0 +1,150 @@
+package com.leaning.code;
+
+
+
+
+
+
+public class LinkedList implements List {
+
+	private Node head;
+	
+	private Node last;
+	
+	private int size;
+	
+	
+	void linkLast(Object o){
+		Node lastNode = last;
+        Node newNode = new Node(lastNode, o, null);
+        last = newNode;
+        if (lastNode == null)
+            head = newNode;
+        else
+        	lastNode.next = newNode;
+        size++;
+	} 
+	
+	void linkHead(Object o){
+		Node headNode = head;
+        Node newNode = new Node(null, o, headNode);
+        head = newNode;
+        if (head == null)
+            last = newNode;
+        else
+        	head.prev = newNode;
+        size++;
+	}
+	
+	@Override
+	public void add(Object o) {
+		linkLast(o);
+	}
+
+	@Override
+	public void add(int index, Object o) {
+		if (index < 0 || index >= size) {
+			throw new RuntimeException("Êý×éÏÂ±êÔ½½ç");
+		}
+		Node n = find(index);
+		Node pred = n.prev;
+	    Node newNode = new Node(pred, o, n);
+        n.prev = newNode;
+        if (pred == null)
+            head = newNode;
+        else
+            pred.next = newNode;
+        size++;
+	}
+
+	@Override
+	public Object get(int index) {
+		return find(index).item;
+	}
+
+	Node find(int index){
+		if (index < (size >> 1)) {
+            Node n = head;
+            for (int i = 0; i < index; i++)
+                n = n.next;
+            return n;
+        } else {
+            Node n = last;
+            for (int i = size - 1; i > index; i--)
+                n = n.prev;
+            return n;
+        }
+	} 
+	
+	@Override
+	public Object remove(int index) {
+		Node n = find(index);
+		Object o = n.item;
+		final Node prev = n.prev;
+		final Node next = n.next;
+		if (null != prev) {
+			prev.next = next;
+		}
+		if (null != next) {
+			next.prev = prev;
+		}
+		n.item = null;
+		n.next = null;
+		n.prev = null;
+		size-- ;
+		return o;
+	}
+
+	@Override
+	public int size() {
+		return size;
+	}
+
+	public void addFrist(Object o){
+		linkHead(o);
+	}
+	
+	public void addLast(Object o){
+		linkLast(o);
+	}
+	
+	public Object removeFirst(){
+		Object o = head.item;
+		Node n = head.next;
+		head = n;
+		if (n == null)
+            last = null;
+        else
+            n.prev = null;
+		size --;
+		return o;
+	}
+	
+	public Object removeLaset(){
+		Object o = last.item;
+		Node p = last.prev;
+		last = p;
+		if (p == null)
+            head = null;
+        else
+            p.next = null;
+		size --;
+		return o;
+	}
+	
+	public Iterator iterator(){
+		return null;
+	}
+	
+	public static class Node{
+		Object item;
+	    Node next;
+	    Node prev;
+
+	    Node(Node prev, Object element, Node next) {
+	        this.item = element;
+	        this.next = next;
+	        this.prev = prev;
+	    }
+	}
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/code/List.java b/group14/630254746/Code2017/src/com/leaning/code/List.java
new file mode 100644
index 000000000..22d039c4a
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/List.java
@@ -0,0 +1,15 @@
+package com.leaning.code;
+
+public interface List {
+
+	public void add(Object o);
+	
+	public void add(int index, Object o);
+	
+	public Object get(int index);
+	
+	public Object remove(int index);
+	
+	public int size();
+	
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/code/Queue.java b/group14/630254746/Code2017/src/com/leaning/code/Queue.java
new file mode 100644
index 000000000..f1272b29c
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/Queue.java
@@ -0,0 +1,22 @@
+package com.leaning.code;
+
+public class Queue {
+
+	private LinkedList list = new LinkedList();
+	
+	public void enQueue(Object o) {
+		list.add(o);
+	}
+
+	public Object deQueue() {
+		return list.removeFirst();
+	}
+	
+	public boolean isEmpty(){
+		return list.size() == 0;
+	}
+	
+	public int size(){
+		return list.size();
+	}
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/code/Stack.java b/group14/630254746/Code2017/src/com/leaning/code/Stack.java
new file mode 100644
index 000000000..c988f489b
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/Stack.java
@@ -0,0 +1,31 @@
+package com.leaning.code;
+
+public class Stack {
+	
+	private ArrayList list = new ArrayList();
+	
+	private int size;
+	
+	
+	public void push(Object o){
+		list.add(o);
+		size ++;
+	}
+	
+	public Object pop(){
+		return list.get(--size);
+	}
+	
+	public Object peek(){
+		return list.get(size-1);
+	}
+	
+	public boolean isEmpty(){
+		return size == 0;
+	}
+	
+	public int size(){
+		return size;
+	}
+	
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/code/test/ArrayListTest.java b/group14/630254746/Code2017/src/com/leaning/code/test/ArrayListTest.java
new file mode 100644
index 000000000..c680d5f8a
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/code/test/ArrayListTest.java
@@ -0,0 +1,37 @@
+package com.leaning.code.test;
+
+import org.junit.Test;
+
+import com.leaning.code.ArrayList;
+import com.leaning.code.LinkedList;
+
+public class ArrayListTest {
+
+	@Test
+	public void test01(){
+		ArrayList list = new ArrayList();
+		list.add("a");
+		list.add("b");
+		list.add("c");
+		
+		System.out.println(list.remove(0));
+		System.out.println(list);
+		
+	}
+	
+	@Test
+	public void test02(){
+		LinkedList list = new LinkedList();
+		list.add("a");
+		list.add("b");
+		list.add("c");
+		
+		list.add(2, "d");
+		
+		System.out.println(list.remove(0));
+		System.out.println(list.get(0));
+		System.out.println(list.get(2));
+		
+		
+	}
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/coderising/array/ArrayUtil.java b/group14/630254746/Code2017/src/com/leaning/coderising/array/ArrayUtil.java
new file mode 100644
index 000000000..7e93be14e
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/coderising/array/ArrayUtil.java
@@ -0,0 +1,95 @@
+package com.leaning.coderising.array;
+
+public class ArrayUtil {
+	
+	/**
+	 * ¸ø¶¨Ò»¸öÕûÐÎÊý×éa , ¶Ô¸ÃÊý×éµÄÖµ½øÐÐÖÃ»»
+		ÀýÈç£º a = [7, 9 , 30, 3]  ,   ÖÃ»»ºóÎª [3, 30, 9,7]
+		Èç¹û     a = [7, 9, 30, 3, 4] , ÖÃ»»ºóÎª [4,3, 30 , 9,7]
+	 * @param origin
+	 * @return
+	 */
+	public void reverseArray(int[] origin){
+		
+	}
+	
+	/**
+	 * ÏÖÔÚÓÐÈçÏÂµÄÒ»¸öÊý×é£º   int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}   
+	 * ÒªÇó½«ÒÔÉÏÊý×éÖÐÖµÎª0µÄÏîÈ¥µô£¬½«²»Îª0µÄÖµ´æÈëÒ»¸öÐÂµÄÊý×é£¬Éú³ÉµÄÐÂÊý×éÎª£º   
+	 * {1,3,4,5,6,6,5,4,7,6,7,5}  
+	 * @param oldArray
+	 * @return
+	 */
+	
+	public int[] removeZero(int[] oldArray){
+		return null;
+	}
+	
+	/**
+	 * ¸ø¶¨Á½¸öÒÑ¾­ÅÅÐòºÃµÄÕûÐÎÊý×é£¬ a1ºÍa2 ,  ´´½¨Ò»¸öÐÂµÄÊý×éa3, Ê¹µÃa3 °üº¬a1ºÍa2 µÄËùÓÐÔªËØ£¬ ²¢ÇÒÈÔÈ»ÊÇÓÐÐòµÄ
+	 * ÀýÈç a1 = [3, 5, 7,8]   a2 = [4, 5, 6,7]    Ôò a3 Îª[3,4,5,6,7,8]    , ×¢Òâ£º ÒÑ¾­Ïû³ýÁËÖØ¸´
+	 * @param array1
+	 * @param array2
+	 * @return
+	 */
+	
+	public int[] merge(int[] array1, int[] array2){
+		return  null;
+	}
+	/**
+	 * °ÑÒ»¸öÒÑ¾­´æÂúÊý¾ÝµÄÊý×é oldArrayµÄÈÝÁ¿½øÐÐÀ©Õ¹£¬ À©Õ¹ºóµÄÐÂÊý¾Ý´óÐ¡ÎªoldArray.length + size
+	 * ×¢Òâ£¬ÀÏÊý×éµÄÔªËØÔÚÐÂÊý×éÖÐÐèÒª±£³Ö
+	 * ÀýÈç oldArray = [2,3,6] , size = 3,Ôò·µ»ØµÄÐÂÊý×éÎª
+	 * [2,3,6,0,0,0]
+	 * @param oldArray
+	 * @param size
+	 * @return
+	 */
+	public int[] grow(int [] oldArray,  int size){
+		return null;
+	}
+	
+	/**
+	 * ì³²¨ÄÇÆõÊýÁÐÎª£º1£¬1£¬2£¬3£¬5£¬8£¬13£¬21......  £¬¸ø¶¨Ò»¸ö×î´óÖµ£¬ ·µ»ØÐ¡ÓÚ¸ÃÖµµÄÊýÁÐ
+	 * ÀýÈç£¬ max = 15 , Ôò·µ»ØµÄÊý×éÓ¦¸ÃÎª [1£¬1£¬2£¬3£¬5£¬8£¬13]
+	 * max = 1, Ôò·µ»Ø¿ÕÊý×é []
+	 * @param max
+	 * @return
+	 */
+	public int[] fibonacci(int max){
+		return null;
+	}
+	
+	/**
+	 * ·µ»ØÐ¡ÓÚ¸ø¶¨×î´óÖµmaxµÄËùÓÐËØÊýÊý×é
+	 * ÀýÈçmax = 23, ·µ»ØµÄÊý×éÎª[2,3,5,7,11,13,17,19]
+	 * @param max
+	 * @return
+	 */
+	public int[] getPrimes(int max){
+		return null;
+	}
+	
+	/**
+	 * ËùÎ½¡°ÍêÊý¡±£¬ ÊÇÖ¸Õâ¸öÊýÇ¡ºÃµÈÓÚËüµÄÒò×ÓÖ®ºÍ£¬ÀýÈç6=1+2+3
+	 * ¸ø¶¨Ò»¸ö×î´óÖµmax£¬ ·µ»ØÒ»¸öÊý×é£¬ Êý×éÖÐÊÇÐ¡ÓÚmax µÄËùÓÐÍêÊý
+	 * @param max
+	 * @return
+	 */
+	public int[] getPerfectNumbers(int max){
+		return null;
+	}
+	
+	/**
+	 * ÓÃseperator °ÑÊý×é array¸øÁ¬½ÓÆðÀ´
+	 * ÀýÈçarray= [3,8,9], seperator = "-"
+	 * Ôò·µ»ØÖµÎª"3-8-9"
+	 * @param array
+	 * @param s
+	 * @return
+	 */
+	public String join(int[] array, String seperator){
+		return null;
+	}
+	
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/LoginAction.java b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/LoginAction.java
new file mode 100644
index 000000000..4e3995f0e
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/LoginAction.java
@@ -0,0 +1,42 @@
+package com.leaning.coderising.litesturts;
+
+/**
+ * ÕâÊÇÒ»¸öÓÃÀ´Õ¹Ê¾µÇÂ¼µÄÒµÎñÀà£¬ ÆäÖÐµÄÓÃ»§ÃûºÍÃÜÂë¶¼ÊÇÓ²±àÂëµÄ¡£
+ * 
+ * @author liuxin
+ *
+ */
+public class LoginAction {
+	private String name;
+	private String password;
+	private String message;
+
+	public String getName() {
+		return name;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public String execute() {
+		if ("test".equals(name) && "1234".equals(password)) {
+			this.message = "login successful";
+			return "success";
+		}
+		this.message = "login failed,please check your user/pwd";
+		return "fail";
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getMessage() {
+		return this.message;
+	}
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/Struts.java b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/Struts.java
new file mode 100644
index 000000000..d636ec27b
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/Struts.java
@@ -0,0 +1,31 @@
+package com.leaning.coderising.litesturts;
+
+import java.util.Map;
+
+public class Struts {
+	 
+	public static View runAction(String actionName, Map<String,String> parameters) {
+
+	        /*
+	         
+			0. ¶ÁÈ¡ÅäÖÃÎÄ¼þstruts.xml
+	 		
+	 		1. ¸ù¾ÝactionNameÕÒµ½Ïà¶ÔÓ¦µÄclass £¬ ÀýÈçLoginAction,   Í¨¹ý·´ÉäÊµÀý»¯£¨´´½¨¶ÔÏó£©
+			¾ÝparametersÖÐµÄÊý¾Ý£¬µ÷ÓÃ¶ÔÏóµÄsetter·½·¨£¬ ÀýÈçparametersÖÐµÄÊý¾ÝÊÇ 
+			("name"="test" ,  "password"="1234") ,     	
+			ÄÇ¾ÍÓ¦¸Ãµ÷ÓÃ setNameºÍsetPassword·½·¨
+			
+			2. Í¨¹ý·´Éäµ÷ÓÃ¶ÔÏóµÄexectue ·½·¨£¬ ²¢»ñµÃ·µ»ØÖµ£¬ÀýÈç"success"
+			
+			3. Í¨¹ý·´ÉäÕÒµ½¶ÔÏóµÄËùÓÐgetter·½·¨£¨ÀýÈç getMessage£©,  
+			Í¨¹ý·´ÉäÀ´µ÷ÓÃ£¬ °ÑÖµºÍÊôÐÔÐÎ³ÉÒ»¸öHashMap , ÀýÈç {"message":  "µÇÂ¼³É¹¦"} ,  
+			·Åµ½View¶ÔÏóµÄparameters
+			
+			4. ¸ù¾Ýstruts.xmlÖÐµÄ <result> ÅäÖÃ,ÒÔ¼°executeµÄ·µ»ØÖµ£¬  È·¶¨ÄÄÒ»¸öjsp£¬  
+			·Åµ½View¶ÔÏóµÄjsp×Ö¶ÎÖÐ¡£
+	        
+	        */
+	    	
+	    	return null;
+	    }    
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/View.java b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/View.java
new file mode 100644
index 000000000..1e81bad64
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/View.java
@@ -0,0 +1,23 @@
+package com.leaning.coderising.litesturts;
+
+import java.util.Map;
+
+public class View {
+	private String jsp;
+	private Map parameters;
+	
+	public String getJsp() {
+		return jsp;
+	}
+	public View setJsp(String jsp) {
+		this.jsp = jsp;
+		return this;
+	}
+	public Map getParameters() {
+		return parameters;
+	}
+	public View setParameters(Map parameters) {
+		this.parameters = parameters;
+		return this;
+	}
+}
diff --git a/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/struts.xml b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/struts.xml
new file mode 100644
index 000000000..dd598a366
--- /dev/null
+++ b/group14/630254746/Code2017/src/com/leaning/coderising/litesturts/struts.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<struts>
+    <action name="login" class="com.coderising.action.LoginAction">
+        <result name="success">/jsp/homepage.jsp</result>
+        <result name="fail">/jsp/showLogin.jsp</result>
+    </action>
+    <action name="logout" class="com.coderising.action.LogoutAction">
+    	<result name="success">/jsp/welcome.jsp</result>
+    	<result name="error">/jsp/error.jsp</result>
+    </action>
+</struts>
\ No newline at end of file
