动漫网站html,一起做网站17怎么下单,无锡网站建设有限公司,阿里巴巴网站工作流程测试用例结果展示
覆盖率 变异得分 测试注意点
从SplayTree测起#xff0c;然后再测SubSplayTree#xff0c;因为前者调用后者。SplaySubTree的remove方法大部分内容需要通过反射才能测到。value和index在SplayTree当中都不是唯一的。一个index可能对应多个value。
不足之…测试用例结果展示
覆盖率 变异得分 测试注意点
从SplayTree测起然后再测SubSplayTree因为前者调用后者。SplaySubTree的remove方法大部分内容需要通过反射才能测到。value和index在SplayTree当中都不是唯一的。一个index可能对应多个value。
不足之处
没考虑到异常怎么接住。对SplayTree这个数据结构的理解还很浅显。
测试文件MyTest.java
package net.mooctest;import static org.junit.Assert.*;import java.lang.reflect.Field;
import java.util.Arrays;import org.junit.Before;
import org.junit.Test;public class MyTest {private Integer valArr[];private Integer remArr[];private Integer conArr[];private SplayTreeInteger splayTree;private int howmanynumbers;private int removeCnt;private int containsCnt;Beforepublic void initializeValArr() {this.howmanynumbers 100;this.removeCnt 0;this.containsCnt 0;valArr new Integer[howmanynumbers]; remArr new Integer[howmanynumbers/71]; conArr new Integer[howmanynumbers/91];for(int i0;ithis.howmanynumbers;i) {int val (int)(Math.random()*100);
// System.out.println(val);valArr[i] val;if(i%70) {remArr[this.removeCnt] val;}if(i%90) {conArr[this.containsCnt] val;}}}Testpublic void testMain() {SplayTree.main(null);}// 测试remove和containsTestpublic void test001() {splayTree new SplayTreeInteger();for(int i0;ithis.howmanynumbers;i) {splayTree.add(valArr[i]);assertNull(splayTree.root.join(splayTree.root));}assertNotNull(splayTree.root.add(null));assertEquals(howmanynumbers, splayTree.size());for(int i0;ithis.removeCnt;i) {int valToRemove remArr[i];assertTrue(splayTree.contains(valToRemove));splayTree.remove(valToRemove);}assertEquals(howmanynumbers-removeCnt, splayTree.size());for(int i0;ithis.containsCnt;i) {int valToVarify conArr[i];assertTrue(splayTree.contains(valToVarify));}}// 测试remove和containsTestpublic void test002() {splayTree new SplayTreeInteger();for(int i0;ithis.howmanynumbers;i) {splayTree.add(valArr[i]);assertNull(splayTree.root.split(splayTree.root.getData()));}assertEquals(howmanynumbers, splayTree.size());for(int i0;ithis.removeCnt;i) {int valToRemove remArr[i];assertTrue(splayTree.contains(valToRemove));splayTree.remove(valToRemove);}assertEquals(howmanynumbers-removeCnt, splayTree.size());for(int i0;ithis.containsCnt;i) {int valToVarify conArr[i];assertTrue(splayTree.contains(valToVarify));}}// 测试get和indexOf// 不能再用随机生成的数据因为随机数据很可能重复Testpublic void test003() {splayTree new SplayTreeInteger();for(int i0;ithis.howmanynumbers;i) {splayTree.add(i*17);}assertEquals(howmanynumbers, splayTree.size());long idxArr[] new long[howmanynumbers];for(int i0;isplayTree.size();i) {idxArr[i] splayTree.indexOf(i*17);}for(int i0;isplayTree.size();i) {assertEquals(i*17, (int)splayTree.get(idxArr[i]));}assertNull(splayTree.get(-1));assertNull(splayTree.get(splayTree.size()1));}//测试toString()Testpublic void test004() {int primeArr[] {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71 };splayTree new SplayTreeInteger();for(int i0;iprimeArr.length;i) {splayTree.add(primeArr[i]);}// System.out.println(splayTree.toString());
// String expectedStr data2 left null right null sz1 cnt1\n;
// assertEquals(expectedStr, splayTree.toString());String expectedStr data71 left67 right null sz20 cnt1\n data67 left61 right null sz19 cnt1\n data61 left59 right null sz18 cnt1\n data59 left53 right null sz17 cnt1\n data53 left47 right null sz16 cnt1\n data47 left43 right null sz15 cnt1\n data43 left41 right null sz14 cnt1\n data41 left37 right null sz13 cnt1\n data37 left31 right null sz12 cnt1\n data31 left29 right null sz11 cnt1\n data29 left23 right null sz10 cnt1\n data23 left19 right null sz9 cnt1\n data19 left17 right null sz8 cnt1\n data17 left13 right null sz7 cnt1\n data13 left11 right null sz6 cnt1\n data11 left7 right null sz5 cnt1\n data7 left5 right null sz4 cnt1\n data5 left3 right null sz3 cnt1\n data3 left2 right null sz2 cnt1\n data2 left null right null sz1 cnt1\n;assertEquals(expectedStr, splayTree.toString());}//测试SplaySubTree--findTest(timeout4000)public void test005() {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(null);assertNull(splaySubTree.find(1));int primeArr[] {2, 41, 5, 7, 67, 23, 11, 17, 19};for(int i0;iprimeArr.length;i) {splaySubTree splaySubTree.add(primeArr[i]);}
// System.out.println(splaySubTree.toString());assertNull(splaySubTree.find(20));}//测试SplaySubTree--removeTest(timeout4000)public void test006() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(0);int primeArr[] {2, 41, 5, 7, 23, 11, 67, 17, 19};System.out.println(primeArr.length);for(int i0;iprimeArr.length;i) {splaySubTree splaySubTree.add(primeArr[i]);}assertNotNull(splaySubTree.remove(20));assertEquals(primeArr.length1,splaySubTree.remove(null).size());// 获取 SplaySubTreeInteger 的 Class 对象 Class? splaySubTreeClass splaySubTree.getClass(); // 获取私有属性 count 的 Field 对象 Field countField splaySubTreeClass.getDeclaredField(count); // 设置私有属性 count 的可访问性 countField.setAccessible(true); splaySubTree splaySubTree.remove(7);// 访问私有属性 count 的值 int countValue (int) countField.get(splaySubTree);
// System.out.println(countValue: countValue);assertEquals(0, countValue);
// System.out.println(splaySubTree.toString());splaySubTree splaySubTree.remove(7);countValue (int) countField.get(splaySubTree);
// System.out.println(countValue: countValue); assertEquals(-1, countValue);}//测试SplaySubTree--removeTest(timeout4000)public void test007() {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(1);splaySubTree.remove(1);}//测试SplaySubTree--removeTest(timeout4000)public void test008() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NullPointerException {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(1);// 获取 SplaySubTreeInteger 的 Class 对象 Class? splaySubTreeClass splaySubTree.getClass(); // 获取私有属性 count 的 Field 对象 Field leftField splaySubTreeClass.getDeclaredField(left); // 设置私有属性 count 的可访问性 leftField.setAccessible(true); SplaySubTreeInteger splaySubTree2 new SplaySubTreeInteger(2);leftField.set(splaySubTree,splaySubTree2);splaySubTree.remove(1);}//测试SplaySubTree--removeTest(timeout4000)public void test009() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NullPointerException {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(1);// 获取 SplaySubTreeInteger 的 Class 对象 Class? splaySubTreeClass splaySubTree.getClass(); // 获取私有属性 count 的 Field 对象 Field rightField splaySubTreeClass.getDeclaredField(right); // 设置私有属性 count 的可访问性 rightField.setAccessible(true); SplaySubTreeInteger splaySubTree2 new SplaySubTreeInteger(2);rightField.set(splaySubTree,splaySubTree2);splaySubTree.remove(1);}//测试SplaySubTree--removeTest(timeout4000)public void test0010() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NullPointerException {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(1);// 获取 SplaySubTreeInteger 的 Class 对象 Class? splaySubTreeClass splaySubTree.getClass(); // 获取私有属性 count 的 Field 对象 Field leftField splaySubTreeClass.getDeclaredField(left);Field parentField splaySubTreeClass.getDeclaredField(parent); // 设置私有属性 count 的可访问性 leftField.setAccessible(true); parentField.setAccessible(true); SplaySubTreeInteger splaySubTree2 new SplaySubTreeInteger(2);leftField.set(splaySubTree,splaySubTree2);SplaySubTreeInteger splaySubTree3 new SplaySubTreeInteger(3);parentField.set(splaySubTree,splaySubTree3);splaySubTree.remove(1);}//测试SplaySubTree--removeTest(timeout4000)public void test0011() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NullPointerException {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(1);// 获取 SplaySubTreeInteger 的 Class 对象 Class? splaySubTreeClass splaySubTree.getClass(); // 获取私有属性 count 的 Field 对象 Field rightField splaySubTreeClass.getDeclaredField(right); Field parentField splaySubTreeClass.getDeclaredField(parent); // 设置私有属性 count 的可访问性 rightField.setAccessible(true); parentField.setAccessible(true); SplaySubTreeInteger splaySubTree2 new SplaySubTreeInteger(2);rightField.set(splaySubTree,splaySubTree2);SplaySubTreeInteger splaySubTree3 new SplaySubTreeInteger(3);parentField.set(splaySubTree,splaySubTree3);splaySubTree.remove(1);}//测试SplaySubTree--removeTest(timeout4000)public void test0012() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NullPointerException {SplaySubTreeInteger splaySubTree new SplaySubTreeInteger(1);// 获取 SplaySubTreeInteger 的 Class 对象 Class? splaySubTreeClass splaySubTree.getClass(); // 获取私有属性 count 的 Field 对象 Field rightField splaySubTreeClass.getDeclaredField(right); Field leftField splaySubTreeClass.getDeclaredField(left); // 设置私有属性 count 的可访问性 rightField.setAccessible(true); leftField.setAccessible(true); SplaySubTreeInteger splaySubTree2 new SplaySubTreeInteger(2);rightField.set(splaySubTree,splaySubTree2);SplaySubTreeInteger splaySubTree3 new SplaySubTreeInteger(3);leftField.set(splaySubTree,splaySubTree3);String expectedStr data1 left3 right2 sz1 cnt1\n data3 left null right null sz1 cnt1\n data2 left null right null sz1 cnt1\n;assertEquals(expectedStr, splaySubTree.toString());}}被测文件(1/2)SplayTree.java
package net.mooctest;import java.util.Arrays;public class SplayTree T extends ComparableT {SplaySubTreeT root;public SplayTree(){root new SplaySubTreeT(null);}/*** param index - of the node to search for.* return - null if index0 or indexsize otherwise SubTree at index. */public T get(long index) {SplaySubTreeT cT root.get(index);if(cTnull)return null;cT.splay();root cT;return cT.getData();}/*** return - the number of nodes in the tree.*/public long size() { return root.size();}/*** param node - to search for.* return - the index of node. All nodes are ordered according to the compareTo(T) method.* */public long indexOf(T node) {long index root.indexOf(node);get(index);return index;}/*** param node - is added to the tree.* If node is null tree is unchanged.*/public void add(T node) {root root.add(node);}/*** param node - is removed from the tree.* If node is null tree is unchanged.*/public void remove(T node) {root root.remove(node);}/*** param node* return*/public boolean contains(T node) {SplaySubTreeT temp root.find(node);if(temp!null){temp.splay();root temp;}return temp ! null;}Overridepublic String toString(){return root.toString();}public static void main(String[] args) {SplayTreeInteger test new SplayTreeInteger();int howmanynumbers 10000;for (int i 0; i howmanynumbers; i) {int val (int)(Math.random()*100);test.add(val);}System.out.println(test);}
}被测文件(2/2)SubSplayTree.java
package net.mooctest;public class SplaySubTreeT extends ComparableT {private T data;private SplaySubTreeT left, right, parent;private long size; // number of nodes in treeprivate int count;/*** param node* - If nodenull then size will be 0 otherwise node will be in the* tree and size will be 1*/public SplaySubTree(T node) {data node;if (node ! null) {size count 1;}}public String toString() {String lft ;String rght ;String myData data data;if (left ! null) {myData left left.data;lft left.toString();} else {myData left null;}if (right ! null) {myData right right.data;rght right.toString();} else {myData right null;}myData szsize cntcount;return myData \n lft rght;}public T getData() {return data;}/*** param index* - of the node to search for.* return - null if index0 or indexsize otherwise SubTree at index.*/public SplaySubTreeT get(long index) {if (index size || index 0)return null;long cS 1;SplaySubTreeT cT this;if (cT.left ! null)cS cT.left.size;while (cS ! index) {if (cS index) {cS--;cT cT.left;if (cT ! null cT.right ! null)cS - cT.right.size;} else {cS;cT cT.right;if (cT ! null cT.left ! null)cS cT.left.size;}}return cT;}/*** return - the number of nodes in the tree.*/public long size() {return size;}/*** param node* - to search for.* return - the index of node. All nodes are ordered according to the* compareTo(T) method.* */public long indexOf(T node) {if (node null)return -1;long cI 1;SplaySubTreeT cT this;if (cT.left ! null)cI cT.left.size;while (!cT.data.equals(node)) {if (cT.data.compareTo(node) 0) {cI--;cT cT.left;if (cT ! null cT.right ! null)cI - cT.right.size;} else {cI;cT cT.right;if (cT ! null cT.left ! null)cI cT.left.size;}if (cT null)return -1;}return cI;}/*** param node* - is added to the tree. If node is null tree is unchanged.* return - New root of the tree.*/public SplaySubTreeT add(T node) {if (node null)return this;if (this.data null)return new SplaySubTreeT(node);SplaySubTreeT current this;SplaySubTreeT child null;if (this.data.compareTo(node) 0)child this.right;else if(this.data.compareTo(node)0)child this.left;while (child ! null current.data.compareTo(node)!0) {current child;if (current.data.compareTo(node) 0)child current.right;else if(current.data.compareTo(node)0)child current.left;}SplaySubTreeT newNode new SplaySubTreeT(node);if (current.data.compareTo(node) 0) {current.right newNode;} else if(current.data.compareTo(node)0){current.left newNode;}else {current.size;current.count;newNode current;current newNode.parent;}newNode.parent current;if (newNode.splay())return newNode;return this;}/*** param node* - is removed from the tree. If node is null tree is unchanged.* return - New root of the tree.*/public SplaySubTreeT remove(T node) {if (node null)return this;SplaySubTreeT x find(node);if (x null)return this;if(x.data.equals(node)) {x.count--;x.size--;if(size0) {x.splay();return x;}}// To delete a node x:// if x has no children remove it.if (x.left null x.right null) {if (x.parent ! null) {if (x.parent.left x) {parent.left null;} elseparent.right null;} elsereturn new SplaySubTree(null);}// if x has one child remove x, and put the child in place of xif (x.left null) {if (x.parent ! null) {if (x.parent.left x) {parent.left x.right;x.right.parent parent;x x.right;} else {parent.right x.right;x.right.parent parent;x x.right;}} else {x.right.parent null;return x.right;}} else if (x.right null) {if (x.parent ! null) {if (x.parent.left x) {parent.left x.left;x.left.parent parent;x x.left;} else {parent.right x.left;x.left.parent parent;x x.left;}} else {x.left.parent null;return x.left;}} else {// if x has two children, swap its value with that of// the rightmost node of its left sub treeSplaySubTreeT rmc x.left;while (rmc.right ! null)rmc rmc.right;x.data rmc.data;// Then remove that node instead.rmc.left.parent rmc.parent;if (rmc.parent x) {x.left rmc.left;} else {rmc.parent.right rmc.left;}x rmc;}// After deletion, splay the parent of the removed node to the top of// the tree.x.splay();return x;}/*** param other* return*/public SplaySubTreeT join(SplaySubTreeT other) {return null;}/*** param node* return*/public SplaySubTreeT split(T node) {return null;}/*** param node* return*/public SplaySubTreeT find(T node) {SplaySubTreeT current this;if (this.data null)return null;while (current ! null) {if (node.equals(current.data))return current;if (node.compareTo(current.data) 0)current current.left;elsecurrent current.right;}return current;}/*** Assuming this node is an interior or leaf node of a larger tree this method* moves this node up to the root balancing the tree in the process*/public boolean splay() {while (this.parent ! null) {SplaySubTreeT p this.parent;SplaySubTreeT g p.parent;if (g null this p.left) {zig();} else if (g null this p.right) {zag();} else if (p.left this g.left p) {zigzig();} else if (p.right this g.right p) {zagzag();} else if (p.right this g.left p) {zigzag();} else {zagzig();}}return true;}/*** This is a helper method used in the splay() operation*/private void zig() {SplaySubTreeT b this.right;SplaySubTreeT p this.parent;this.right p;p.parent this;p.left b;if (b ! null)b.parent p;this.parent null;p.size p.count;if (p.right ! null)p.size p.right.size;if (b ! null)p.size b.size;this.size p.size this.count;if (this.left ! null)this.size this.left.size;}/*** This is a helper method used in the splay() operation*/private void zag() {SplaySubTreeT b this.left;SplaySubTreeT p this.parent;this.left p;p.parent this;p.right b;if (b ! null)b.parent p;this.parent null;p.size p.count;if (b ! null)p.size b.size;if (p.left ! null)p.size p.left.size;this.size p.size this.count;if (this.right ! null)this.size this.right.size;}/*** This is a helper method used by zigzig, zagzag, zigzag, zagzig This fixes* the great grandparent*/private void fixGG(SplaySubTreeT g) {SplaySubTreeT gg g.parent;if (gg ! null) {if (g gg.left)gg.left this;if (g gg.right)gg.right this;}this.parent gg;// might need to update size}/*** This is a helper method used in the splay() operation*/private void zigzig() {SplaySubTreeT g parent.parent;SplaySubTreeT b this.right;SplaySubTreeT p this.parent;SplaySubTreeT c p.right;fixGG(g);if (b ! null)b.parent p;p.left b;if (c ! null)c.parent g;g.left c;g.parent p;p.right g;p.parent this;this.right p;g.size g.count;if (c ! null)g.size c.size;if (g.right ! null)g.size g.right.size;p.size p.count;if (g ! null)p.size g.size;if (b ! null)p.size b.size;this.size p.size this.count;if (this.left ! null)this.size this.left.size;}/*** This is a helper method used in the splay() operation*/private void zagzag() {SplaySubTreeT g parent.parent;SplaySubTreeT b this.left;SplaySubTreeT p this.parent;SplaySubTreeT c p.left;fixGG(g);if (b ! null)b.parent p;// above line throws java.lang.NullPointerExceptionp.right b;if (c ! null)c.parent g;g.right c;g.parent p;p.left g;p.parent this;this.left p;g.size g.count;if (g.left ! null)g.size g.left.size;if (c ! null)g.size c.size;p.size g.size p.count;if (b ! null)p.size b.size;this.size p.size this.count;if (this.right ! null)this.size this.right.size;}/*** This is a helper method used in the splay() operation*/private void zigzag() {SplaySubTreeT g parent.parent;SplaySubTreeT b this.left;SplaySubTreeT p this.parent;SplaySubTreeT c this.right;fixGG(g);if (b ! null)b.parent p;p.right b;if (c ! null)c.parent g;g.left c;p.parent this;this.left p;g.parent this;this.right g;g.size g.count;if (g.right ! null)g.size g.right.size;if (c ! null)g.size c.size;p.size p.count;if (p.left ! null)p.size p.left.size;if (b ! null)p.size b.size;this.size g.size p.size this.count;}/*** This is a helper method used in the splay() operation*/private void zagzig() {SplaySubTreeT g parent.parent;SplaySubTreeT b this.right;SplaySubTreeT p this.parent;SplaySubTreeT c this.left;fixGG(g);if (b ! null)b.parent p;p.left b;if (c ! null)c.parent g;g.right c;p.parent this;this.right p;g.parent this;this.left g;g.size g.count;if (g.left ! null)g.size g.left.size;if (c ! null)g.size c.size;p.size p.count;if (p.right ! null)p.size p.right.size;if (b ! null)p.size b.size;this.size g.size p.size this.count;}} 文章转载自: http://www.morning.rbxsk.cn.gov.cn.rbxsk.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.mttqp.cn.gov.cn.mttqp.cn http://www.morning.sftrt.cn.gov.cn.sftrt.cn http://www.morning.ssjee.cn.gov.cn.ssjee.cn http://www.morning.qytyt.cn.gov.cn.qytyt.cn http://www.morning.tkrwm.cn.gov.cn.tkrwm.cn http://www.morning.bsqth.cn.gov.cn.bsqth.cn http://www.morning.ljmbd.cn.gov.cn.ljmbd.cn http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn http://www.morning.wbfly.cn.gov.cn.wbfly.cn http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn http://www.morning.flxqm.cn.gov.cn.flxqm.cn http://www.morning.clwhf.cn.gov.cn.clwhf.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.jbqwb.cn.gov.cn.jbqwb.cn http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn http://www.morning.kjyqr.cn.gov.cn.kjyqr.cn http://www.morning.rbkl.cn.gov.cn.rbkl.cn http://www.morning.rftk.cn.gov.cn.rftk.cn http://www.morning.dqkrf.cn.gov.cn.dqkrf.cn http://www.morning.qqnp.cn.gov.cn.qqnp.cn http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.zrqs.cn.gov.cn.zrqs.cn http://www.morning.hclqy.cn.gov.cn.hclqy.cn http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn http://www.morning.wnhml.cn.gov.cn.wnhml.cn http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.fywqr.cn.gov.cn.fywqr.cn http://www.morning.pnmgr.cn.gov.cn.pnmgr.cn http://www.morning.dndk.cn.gov.cn.dndk.cn http://www.morning.yrbp.cn.gov.cn.yrbp.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.cjcry.cn.gov.cn.cjcry.cn http://www.morning.xhftj.cn.gov.cn.xhftj.cn http://www.morning.nuobeiergw.cn.gov.cn.nuobeiergw.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.ydnx.cn.gov.cn.ydnx.cn http://www.morning.rbzht.cn.gov.cn.rbzht.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.jfymz.cn.gov.cn.jfymz.cn http://www.morning.dddcfr.cn.gov.cn.dddcfr.cn http://www.morning.rqhn.cn.gov.cn.rqhn.cn http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn http://www.morning.msgcj.cn.gov.cn.msgcj.cn http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn http://www.morning.nlywq.cn.gov.cn.nlywq.cn http://www.morning.rzdpd.cn.gov.cn.rzdpd.cn http://www.morning.rkxdp.cn.gov.cn.rkxdp.cn http://www.morning.smspc.cn.gov.cn.smspc.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.ywpcs.cn.gov.cn.ywpcs.cn http://www.morning.sqdjn.cn.gov.cn.sqdjn.cn http://www.morning.uycvv.cn.gov.cn.uycvv.cn http://www.morning.mfct.cn.gov.cn.mfct.cn http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.rmlz.cn.gov.cn.rmlz.cn http://www.morning.bpmnq.cn.gov.cn.bpmnq.cn http://www.morning.bfmrq.cn.gov.cn.bfmrq.cn http://www.morning.mltsc.cn.gov.cn.mltsc.cn http://www.morning.pdkht.cn.gov.cn.pdkht.cn http://www.morning.zmpqt.cn.gov.cn.zmpqt.cn http://www.morning.znqfc.cn.gov.cn.znqfc.cn http://www.morning.yqyhr.cn.gov.cn.yqyhr.cn http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn http://www.morning.cknrs.cn.gov.cn.cknrs.cn http://www.morning.tphrx.cn.gov.cn.tphrx.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.sggzr.cn.gov.cn.sggzr.cn http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn http://www.morning.wfbnp.cn.gov.cn.wfbnp.cn http://www.morning.bfcxf.cn.gov.cn.bfcxf.cn