⑴ 運用java數據結構的知識創建樹,內容是族譜。

每一個節點有一個成員變數引用下一個節點就行了。

大致實現了一下單向鏈表沒有加入異常也沒有仔細考慮實現的代碼的效率,可以參考下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

publicclassLinkListTest{
publicstaticvoidmain(String[]args){
LinkList<String>ll=newLinkList<String>();
ll.add("a");
ll.add("b");
ll.add("c");
ll.add("d");
ll.remove(1);
System.out.println(ll.get(0));
System.out.println(ll.get(1));
System.out.println(ll.get(2));
System.out.println(ll.get(3));
System.out.println(ll.size());
}
}
classLinkList<T>{
privateNode<T>frist=null;
privateNode<T>last=null;
privateintsize=0;

publicvoidadd(Tt){
if(frist==null){
Node<T>node=newNode<T>();
node.setT(t);
size++;
frist=node;
last=node;
}else{
Node<T>node=newNode<T>();
node.setT(t);
last.setNextNode(node);
size++;
last=node;
}
}

publicTget(inti){
if(i>=0&&i<size){
Node<T>nod=null;
for(intn=0;n<=i;n++){
if(n==0)
nod=frist;
else
nod=nod.getNextNode();
if(i==n){
returnnod.getT();
}
}
}
returnnull;
}

publicvoidremove(inti){
if(i>=0&&i<size){
if(size<2){
frist=null;
last=null;
size=0;
}else{
size--;
if(i==0){
frist=frist.getNextNode();
}else{
Node<T>nod1=null;
Node<T>nod2=null;
for(intn=0;n<=i;n++){
if(n==0){
nod1=frist;
nod2=frist;
}else{
nod2=nod1;
nod1=nod1.getNextNode();
}
if(i==n){
if(nod1!=null)
nod2.setNextNode(nod1.getNextNode());
else{
nod2.setNextNode(null);
last=nod2;
}
}
}
}
}
}
}publicintsize(){
returnsize;
}
}
classNode<T>{
publicTgetT(){
returnt;
}
publicvoidsetT(Tt){
this.t=t;
}
publicNode<T>getNextNode(){
returnnextNode;
}
publicvoidsetNextNode(Node<T>nextNode){
this.nextNode=nextNode;
}
privateTt;
privateNode<T>nextNode=null;
}

⑵ GIS到底能在那些類型的職業發展

【地理信息系統GIS專業的10個發展方向:】

職業生涯規劃中的路徑選擇,首先要知道自己在哪兒,要去哪兒——這是給自己的所在地和目的地定位。所在地的定位沒什麼問題,能考上大學的人,差不多都對自己的知識和技能、素質和能力、性格和品格有一定的認識,只是精度不同而已。目的地的定位卻是個大問題,大多數人只能籠統地說出找工作、做學問或創業,再想看清晰一點卻是難於上青天。竊以為這是很多人迷茫的一個重要的方面。

想當初,從小喜愛地圖的我懷著一腔熱情報考GIS專業,卻也弄不清自己到底想做什麼,使得兩年的大好時光白白浪費(盡管用傳統的衡量「好學生」的標准我可謂是相當成功),加上考研,一共是三年青春向東流,現在每每想來,總是痛心不已。值此畢業之際,我將自己的思想整理了一下,希望能為迷茫的朋友做個導航。

方向1:開發工程師

畢業後要找工作的朋友,得考慮下有哪些工作和自己喜歡什麼工作。由於目前GIS就業市場的形勢是供大於求、僧多粥少,因此更多的還是考慮市場需求比較好。在眾多GIS單位中,其主營業務大多是工程開發或軟體研發和銷售。從事數據處理的單位比例也達18%」,「單位對人才需求最多的是資深開發人員,其次是程序員和項目經理。由此也可看出,如果想從事GIS行業,較強的編程能力才是『通行證』」。打開各大論壇的求職招聘版,也可

以看到幾乎每個單位都招開發人員。這里找了很典型的一則招聘啟事:

職位:GIS開發工程師

要求:熟練掌握C#/C++使用;熟練掌握ArcGIS Engine 9.0以上版本的使用;有C#/C++結合Engine項目經驗者優先;

這則啟事簡單明了,一共三點要求:語言、組件、經驗。客觀地說,對應聘者的要求還是很低的,我想一個普通的高中畢業生認真地自學一年應該能夠勝任。然而,按部就班的「優秀」本科畢業生卻未必能滿足這些要求。第一,學校基本上只教VB和C這兩門基礎的教學語言,目標是過二級、三級,然而考級對編程的要求與工作中對編程的要求完全是兩碼事,不是一個方向。第二,曾經風靡的兩種GIS組件MapX和MO正在退出社會舞台,然而在課堂上仍然是主打。第三,有開發經驗的學生太少了,很多學校完全不教二次開發,即使教,對學生的要求也不高,實現簡單的瀏覽、查詢就行了,這根本算不上項目經驗。因此,想從事開發工作的朋友們,必須在校園里開展自助學習。個人認為,認認真真地參加一次ESRI或超圖辦的開發組比賽,就可以達到普通公司的要求了。下面再看一則要求比較高的:

1、計算機或GIS專業本科及以上學歷;

2、熟練掌握C/C++語言、Java、JSP、C#等語言,熟悉VC++、JBuilder編程環境;

3、熟悉設計模式、UML,能用Rose等建模工具構建系統模型;

4、熟練掌握Supermap、Arcgis等主流GIS平台及二次開發技術,有GIS軟體平台底層開發背景,熟悉GIS常用演算法, 對Web Gis系統的技術架構、性能、安全等有較深刻的理解;

5、熟悉SQLServer、Oracle資料庫開發。

6、有良好的團隊精神,有良好的交流與溝通能力,具有跨平台軟體開發或嵌入式軟體開發經驗者優先;

這份工作網友們有說工資少於5000沒人乾的,也有說這種高人沒有10K是供不起的。但其實認真自學四年,滿足這些要求是綽綽有餘的。用一年自學計算機基礎、語言(除了VB或C,C#、C++、Java、VB.NET四者應當有一)、網路開發,用一學期學習商業GIS桌面軟體和組件開發(建議參加比賽),用一學期學大型資料庫和分布式系統,用一學期學軟體工程、系統分析與架構,用一年學習開源GIS軟體並練習底層開發(比二次開發技術含量高,鑽研能力強的人可以走這條路。需學習演算法與數據結構、計算機圖形學、數字圖像處理。很多學校開了這些課,但一是跟GIS結合不緊,二是實踐不夠以至於理論不能掌握。),用一學期了解跨平台、嵌入式、虛擬現實等前沿技術。

肯定有人會指責,這樣的規劃一是過於偏重IT而輕視地學和數學,二是太理想化沒人能學出來,三是要學校還有什麼用。正常來說,應該有少數人會冷嘲熱諷或破口大罵的。下面我「未雨綢繆」,提前一一作答。第一,上文只是對想從事開發工作的人說的,對開發人員來說,計算機技術是最重要的。對這部分GISer,只要能把G的基本知識和發散思維引入IS,就非常好了,術業有專攻嘛。至於其它的路,下文還有探討。第二,世上無難事,為之,則難者亦易矣,不為,則易者亦難矣,對於毅力匱乏、眼高手低、光說不練的人而言,這的確太理想化了。另外,上文所列的內容只是指引方向,並不是要求全部掌握,而且學校畢竟不是工作,不用每樣都學很深。第三,對於想走這一方向的人來說,除了學位證書那一紙遮羞布,學校確實用處不大。從課程設置和教學內容來看,大多數學校似乎都是想培養科研人才的——當然培養方式還有待改進。不只是GIS專業,很多學科都存在理論脫離實踐、教學脫離實際、校園脫離社會的問題,何必盲從呢?成績可以光耀門楣,可以賺取獎金,就是不能給你帶來一份好的工作——你看拿家GIS公司的招聘要求里寫了「成績優異者優先錄取」?當然,在大家能力都不行的情況下,成績好的便成了矮個里的將軍。

小結一下,這條路是通向開發工程師的,發展得好可以成為項目經理吧。這里需要補充的是,開發並不僅僅是指編程,需求分析和軟體架構也是開發的重要組成部分,這些工作不做好,編程的時候就會比較亂,而且系統的健壯性也不容易好。不願意編程的人,比如說女生,可以考慮往這方向走,不過最好對GIS編程也有一定接觸。

方向2:三維工程師

其實也應該屬於開發,只是覺得很多初學者對三維比較感興趣,因此單列出來。還是先看一則招聘啟事吧:

職位描述: 在高級開發工程師/系統工程師指導下進行地學三維相關模塊的設計與開發工作;

職位要求:

1.計算機、地理信息系統、應用數學或者相關專業本科以上學歷;

2.掌握VC開發技巧,熟悉c/c++編程,對OpenGL或者D3D技術有一定了解,;

3.英文水平良好,閱讀英文技術資料沒有障礙;

4.較強的邏輯分析能力, 學習能力, 創新能力和團隊協作能力;

5.有三維模擬、游戲引擎開發經驗者優先

這應該出乎很多初學者的意料:搞三維也得會編程的!沒錯,三維開發可以簡單地分為兩塊:建模和編程。用GIS軟體建立的地面模型和用3DMAX等軟體建立的地物模型是靜止的,要對他們進行動態控制需要編程。舉個小例子,橋梁每時每刻都因受到風和汽車的力而發生形變,要想了解形變的情況,可以在橋樑上裝上若干GPS即時的獲取位置信息,同時用軟體建立橋梁模型,通過編程使得GPS數據和橋梁模型關聯起來並加以誇張,這樣每當GPS數據發生了改變,模型上的橋梁也就發生相應的可觀察的形變。

要想從事這種工作,在計算機方面要自學3DMAX或MAYA,在編程上要深入學慣用C++進行OpenGL技術開發,在GIS上要注重學習DEM和虛擬現實的內容。這些課堂上基本都是很少涉及的,必須自學。

方向3:數據工程師

數據是GIS的血液,一個項目很大一部分資金都是注入到數據的採集、生產和維護中的,因此這也是一個比較大的方向。還是先看一則招聘啟事:

職位要求:

1.相關專業本科畢業,應屆也可

2.有良好的專業知識,熟悉ARCGIS軟體操作

3.有地圖數字化方面工作經驗,有資料庫相關操作經驗

4.對GIS工作抱有熱情,有良好的團隊合作精神

崗位描述:GIS數據的生產和維護

我的感覺,這是一個很辛苦的、技術含量最低的GIS工作。前些時候去江蘇省基礎地理信息中心參觀,看到數據處理的地方就像一個工廠車間,很寬敞,一排排的電腦,大家就帶著立體鏡根據測量圖紙在ArcGIS中的遙感影像立體像對上矢量化,錄入到空間資料庫中。矢量化是我們的拿手好戲,這里就不贅述了。這種工作,一般中專生培訓培訓也能做。

再有就是遙感和航測數據處理,學過遙感和攝影測量課程,會用ERDAS或ENVI或ER MAPPER,以及VirtuoZO就行。

當然,隨著GPS導航的興起,導航數據和電子地圖成為了一個熱點。這一方面我沒有接觸過,因此不能提出看法。可以搜索一下做導航的一些公司的招聘啟事。

方向4:銷售/市場/企劃

越來越講究工作經驗的要求。我了解的不多。

方向5:軟體測試/技術支持

小公司能專門設置這樣的職位么?

方向6:項目管理/文檔編寫

文字功底扎實,專業知識全面,洞悉行業。

方向7:提供解決方案或輔助決策服務

不開發系統,只是用桌面軟體進行空間分析,為客戶提供解決方案或輔助決策的服務。比如說,某超市要選址,需要特地做個系統么?沒必要,在ArcMap中用VBA寫程序,得出最優解,寫份報告就行了。

我導師這邊就是把GIS作為區域規劃的輔助工具,在ArcGIS中進行空間分析,為國土部門提供輔助決策服務。不過有這樣的公司嗎?

方向8:轉到應用行業

在高校中走方向7的人,有很大一部分就轉到了相關應用領域工作,把GIS作為處理該領域的一種工具,而不再做一個純的GISer。比如說搞土地應用的進了國土局,搞林業應用的進了林業局,搞水利應用的進了水利局……畢竟,如果把GIS作為一種技術,那她只有在廣闊的應用領域中才能充分展現自己的魅力,需要有學GIS的人專注於把這門技術深入地應用到某一個領域中。

我導師曾說過:當GIS被融入IT主流時,是幸運也是不幸。對那些無法在 IT的浪潮中輾轉騰挪、上下翻飛、搏激弄潮的朋友們而言,不關注技術本身,轉而投身到應用中,或許是一個明智的選擇。對那些無法在IT的浪潮中輾轉騰挪、上下翻飛、搏激弄潮的朋友們而言,不關注技術本身,轉而投身到應用中,或許是一個明智的選擇。對那些無法在IT的浪潮中輾轉騰挪、上下翻飛、搏激弄潮的朋友們而言,不關注技術本身,轉而投身到應用中,或許是一個明智的選擇。

不錯,大城市的這個局那個局很少招本科生了(有關系的不算),那麼小地方呢?或是其它領域呢?為什麼不能到GIS還沒有涉足到的區域去開疆拓土呢?與其他人相比,你具有非專業優勢。胡亂打個比方,同樣做村長,你至少比學行政管理、只會紙上談兵的畢業生多了一個高科技手段,手握盜版軟體的你可以用GIS來科學地管理村子。至於怎麼應用,我一時半會吹不出來,但人類80% 的信息都和空間位置有關,肯定有你能挖掘出來的東西,當你帶著GIS的思維去工作,只要是有心人,肯定能在工作中發現用的到GIS的地方,只有想不到的,沒有做不到的。用了之後,只要有效果(或者吹出效果),不就成了建設新農村和創新型國家的典型?

方向9:升學

越來越多的人考研究生,據《GIS開發者》第七期的《要不要考研?考什麼樣的研?》一文,絕大部分是為了逃避就業壓力。可是研究生畢業也要工作呀,無非也就是上面那幾條路。大家知道現在的研究生教育也不咋的,有些人是「做」幾篇沒意義的論文畢業了事,與當年本科畢業的同學相比,多了一層遮羞布,卻少了三年工作經驗。精明的企業老闆是不會看重學歷的,因此研究生的就業情況也不容樂觀。有人這樣說保研:用浪費三年時間的代價換來繼續浪費三年時間的資格。當然優秀的研究生還是比本科生多一些機會,尤其是事業單位對學歷還是比較看重的吧。

讀研,第一年上課,第二年「自由活動」,第三年(或最後半年)做畢業論文。除了畢業論文,在讀研期間還需要在期刊上發表一些論文,各個學校對論文數量和質量的要求是不一樣的。剩下的時間主要是做導師的項目和自己充電。項目通常分為「縱向項目」和「橫向項目」兩種。縱向項目,俗稱「國家給錢的」,是由政府長期設立的各類研究基金支持的項目,主攻前沿課題;而橫向項目,俗稱「社會給錢的」,是企業或者其他單位就某些課題委託的項目。因此這里實際上又有兩條路可選:想走科研道路的,選擇以縱向項目為主的導師;不想走科研道路的,選擇以橫向項目為主的導師。

那麼GIS科研主要做什麼呢?個人認為還可以分成四條路:基礎理論、實現技術、深度應用和新應用。基礎理論是整個學科的核心與靈魂,這里多列舉幾個研究方向:空間資料庫的准確性研究;空間關系語言研究;空間數據的多種表達方式研究;地理信息的使用和價值研究;海量空間資料庫的結構體系研究;地圖制圖的規范化研究;地理信息數據共享的研究;GIS中時空關系的研究;GIS和空間分析研究;法律、信息政策和空間資料庫關系研究;地理信息系統的互操作研究;地理世界的規范化模式研究。再舉幾個實現技術的科研方向:空間決策支持系統;空間信息的可視化研究;遙感和 GIS的集成研究;GIS的用戶介面研究;通過協作形成空間決策系統的研究。再舉幾個深度應用的科研方向:GIS在全球變化中的作用研究;在社會背景中,如何在 GIS中表達人、空間與環境的研究。至於新應用,則是讓GIS技術滲透到生產生活各個方面的,比如上面提到的村長GIS,還有在《GIS初學者》第一期中《訪南京師范大學學生胡雷地》一文中提到的家譜GIS。

搞基礎理論估計是最底層的,也是最難的,當然只有走這條路你才有可能成為院士、科學家、行業的核心引領者和推動者。想走這條路的人,在本科期間重在打基礎,尤其要有深厚的數學功底,不僅是高等數學、線性代數、概率統計,還有必要自學離散數學、數值分析、拓撲學等科目。在計算機上需要對C++、演算法與數據結構、資料庫原理、計算機圖形學、數字圖像處理有一定理解,並能熟練使用 Matlab、IDL等科研常用軟體。在GIS上,在有一定實踐能力的基礎上,更加註重對基礎理論的理解,多讀一些GIS書籍。到碩士研究生階段,根據學校及導師情況大致選擇自己的方向,進一步打基礎。這樣,在博士期間有望有所創新和突破。

搞實現技術比基礎理論少一些抽象,而對計算機的要求可能更高一些,數學仍然很重要。我在書店看到過有常用演算法與實現代碼的書,覺得比較適合本科生鑽研。

GIS只有在應用中才能體現其生命力,而深度應用最能體現GIS的強大。想走這條路的人可以在大學期間選中一兩個應用方向,如物流、礦產等,多看一些GIS在該領域的應用論文。在研究生階段,也就只專注於一個領域的應用。

我個人則希望能夠在將來成為拓展GIS應用領域的人,這需要對各種技術有所認識,但不用深入鑽研,更重要的是會用GIS的思想來思考問題。

我用活躍的思維和火熱的熱情來引導學習,或許比較適合這個方向。又想起閭國年教授的話:「做學者,不做學生」。

方向10:徹底轉行

實在對GIS沒興趣,不如徹底轉行。要捨得放棄。但請不要辱罵GIS。

GIS本科畢業如何防止結束GIS職業生涯

前言:無意中看到這篇文章,覺得受益匪淺,同時對GIS學弟學妹們也是一個指引。

當今結束GIS職業(數據矢量化,採集除外)對於中國很多GIS專業本科畢業生來說絕對不是什麼危言聳聽。甚至是在國內一些GIS專業比較強院校都有類似現象,更何況其他林林總總的一般院校。當大學畢業後告別與自己4年來付出感情和心血的專業的職業是多麼痛心的事情(至少我認為)。所以如何避免自己在本科畢業就告別GIS職業生涯是每一個GIS本科生必須思考的問題。

現在一方面很多公司都找不到合適的GIS開發人員尤其是ArcGIS開發人員(這是非常普遍的現象),另一方面學生畢業之後找不到工作。
為什麼會出現這個現象?
因為GIS開發都是以項目開發為主,以產品研發相對較少,從成本和時間來看公司都不願意從新培養一個新手2-3個月之後才能上手開發,他們都非常想要那些有工作經驗的開發人員,直接來公司參與到項目開發中來。但是一般有工作經驗的都相對穩定,待遇也不錯,為了個人發展(到一個新公司還得適應新環境從新開始)他們也都不願意隨便跳槽。這樣就造成了需求的不平衡。
我個人認為搞GIS二次開發非常適合本科生畢業搞,研究生也可以但是我感覺沒有本科生優勢大。我身邊就有這個案例:在本科時代同一級的兩個學生都畢業於同一院校,本科生工作三年,在公司有項目驅動,開發技術實力大增,經過了3年的積累成為一個公司的項目經理,在這三年平均每年掙4萬,三年之後工資在一個二線城市到5000+,並且已買房結婚,而此時另外一個研究生這個時候剛畢業,到這個本科生的公司做開發收入2000,這就是一個二線城市GIS開發的現狀。在這三年中研究生失去的是12萬+3年工作經驗(技術強成為項目經理)+生活經驗(買房結婚)。所以我認為搞GIS開發尤其是ArcGIS二次開發還是不要上研究生好。

沒有工作經驗GIS本科生如何得到認可?找到收入相對比較高的GIS二次開發,尤其是ArcGIS二次開發的工作?我的答案是以項目驅動的方式充實本科時代GIS二次開發生活,增加自己的「工作經驗」。接下來我以「片面」的方式介紹一些自己的經驗。

1.首先必須熟悉一門高級開發語言,說白了就是c#或者Java。
有些人總愛說會一門開發語言有編程思想就Ok了,用來安慰自己不願學習新開發語言技術的懶惰心理。但是公司都是以盈利為目的的,他們都採用高效開發方式,尤其是GIS開發圈裡.NET平台是應用最廣的,並且每個公司都有自己的DLL庫,不可能讓你自己隨便使用個語言自由發揮的。不要認為會定義一個變數寫個循環就說我掌握了XX語言,真正掌握一門語言的特性,必須多實踐,多敲代碼。到高一級的就是學習設計模式提高自己的Design能力。

2.實習課上好好用心學習ArcGISDesktop,熟悉ArcGIS的數據模型掌握ArcGISDesktop的使用。
很多人是不熟悉ArcGISDesktop就開始從網上Down代碼修改代碼開始了自己的開發之旅,包括我,我大學時代是MapInfo的粉絲,一直沒學過 ArcGIS。這是非常不科學的,因為ArcGISDesktop就是從AO開發起來的,你只有掌握了ArcGISDesktop的使用,才能很容易理解 AO介面提供的功能。實際上ArcGIS二次開發說白了就是在ArcGISDesktop所提供的功能和業務相結合進行的創新性開發。所以熟悉 ArcGISDesktop以及ArcGIS數據模型非常重要。

3.其次必須會ArcEngine開發,如果學習力強可以再掌握ArcGIS Server開發。
現在B/S模式的開發很受學者歡迎,很多人也很想直接學習ArcGIS Server,開始研究ArcGIS Server提供的模板,我還是建議從engine開始,為什麼呢?一個GIS系統不僅僅是放d大,縮小,查詢,定位,說句不好聽的這些功能是個人培訓幾天都會,你面試說我是實現的功能是查詢,定位之類的,面試官會直接Pass你,所以要做到深度SerVer還是調用AO底層的介面進行和業務開發,所以我感覺要深入學AO通過Engine是最好的方式,因為網上資源以及相關書關於Engien的太多太多。總之在這我再說一句AO介面你熟悉的程度決定了你 Server開發能力的深度。

4.會使用Oracle資料庫,能夠自己創建管理空間資料庫。
只要學資料庫這門課程SQL Server都是實習必需的,SQL Server簡單易學很人性化,但是Oracle性能非常強大,是世界上市場佔有量最大的資料庫產品,在中國同樣只要是企業級的GIS開發應用都採用 Oracle,如果你在簡歷上添加一條會Oracle,能夠自己創建管理空間資料庫,那麼能給你在面試官心目中把你提高一個檔次,作為GIS開發人員沒有必要把自己和一個DBA來對比,自己只需會Oracle常用的操作即可。

5.必須畢業之前有1-2個項目經驗。
2008ESRI全國大學生軟體開發大賽剛剛落幕,我也有幸看了入圍總決賽的作品,非常不錯,很多本科生學生很有創新精神比我們那個時代強多了,有種沒有在本科時代參加ESRI大賽的遺憾感(我參加西安市大學生軟體設計大賽)。不管作品是他們自己的Ideas還是有項目支撐能做到這種程度非常不易。很多人團隊4-5個人做了10幾個月,這樣的本科時代生活是多麼的充實。這樣的大賽真正實現了學校,學生以及ESRI公司三贏的局面。學校得到了聲譽,學生得到了項目經驗和技術的鍛煉,ESRI公司也推廣了自己。所以建議本科生一定要多參加這樣的大賽。
另外一個就是自己多聯系學校的相關老師,讓他們給你提供些思路,實際上GIS開發到一定程度,技術已經沒什麼難度了,關鍵是和行業知識結合,解決行業問題的思路和技術路線。
當找工作時,帶著筆記本向面試人員演示自己的項目或者Demo詳細講解自己實現的思路,讓面試官對你贊賞是多麼的美。

6.良好的表達能力。
找工作和賣商品一樣,就是把自己的推銷出去,能把自己的優勢推銷出去,賣出去,除了簡歷上幾個字之外,最重要的是要培養自己有自己良好表達能力,讓面試官對你「一見鍾情」!非要你不可。
如果有以上素質了,那麼就是機會了,中國社會最大特點是不缺人,不缺人才,對於剛剛踏出校門的學生最大的恩賜是給予自己機會(牛人除外),剛開始不管給你多少只要能給你搞GIS二次開發的機會最重要,只要你能踏進這個圈裡混,那麼就有機會取得不錯的收入。不要看眼前一個月多幾百元,一年才幾千不重要,關鍵是給予自己機會的工作能和自己的興趣結合起來,這才最重要。

最後給大家點學GIS開發一個系統的建議:
1.熟悉ArcGIS的數據模型(這是核心)
2.一個GIS系統的C/S架構無非有以下幾點:
1)數據載入
2)地圖操作
3)查詢統計
4)地圖裁剪列印輸出
5)地圖圖形編輯
6)地圖數據更新
7)就是GIS和具體用戶需求的業務結合開發具體功能
8)系統維護
一個B/S的系統只能比C/S的功能少不可能多,所以最重要的就是熟悉ArcGIS的數據模型,當你理解了數據模型,其他的就是你的高級
語言的開發水平的高低以及你對業務的理解能力和創新能力能力,這兩個因素能決定你GIS開發能走多遠!
http://www.zdor.cn/news/html/rencai/205864.html

⑶ java二叉樹家譜實現

mport java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class Randomtree extends JFrame {

private JTree tree;
public static String[] school = { "初中課程", "高中課程", "大學課程" };
public static String[] color = { "顏色", "運動", "食物" };
public static String[] plant = { "植物", "動物", "人" };

public static String[][] school2= {
{ "初中一年級", "初中二年級", "初中三年級"}, {"高中一年級", "高中二年級",
"高中三年級"}, {"大學一年級", "大學二年級", "大學三年級", "大學四年級"} };
public static String[][] color2 = {
{ "綠色", "白色", "紅色"}, {"足球", "籃球",
"羽毛球"}, {"麵包", "牛奶", "披薩", "熱狗"} };
public static String[][] plant2 = {
{ "玫瑰花", "月季花", "海棠花"}, {"豬", "狗",
"貓"}, {"黃種人", "黑種人", "白種人", } };

public static void main(String[] args) {
// TODO 自動生成方法存根
new Randomtree();
}
public Randomtree() {
super();
final Random random=new Random();
setVisible(true);
setSize(300,400);
tree = new JTree();
final JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(0, 40));
getContentPane().add(panel, BorderLayout.NORTH);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(300, 350));
getContentPane().add(scrollPane, BorderLayout.CENTER);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int k=random.nextInt(3);
tree=getTree(k);
scrollPane.setViewportView(tree);
}
});

scrollPane.setViewportView(null);
button.setText("隨機生成樹");
panel.add(button);
pack();

}
protected JTree getTree(int n) {
String[] second=null;
String[][] three=null;
if(n==0){second=school; three=school2;}
if(n==1){second=color; three=color2;}
if(n==2){second=plant; three=plant2;}

DefaultMutableTreeNode root=new DefaultMutableTreeNode("root");
for(int i=0;i<second.length;i++){
DefaultMutableTreeNode secondNode=new DefaultMutableTreeNode(second[i]);
for (int j=0;j<three[i].length;j++){
DefaultMutableTreeNode threetNode=new DefaultMutableTreeNode(three[i][j]);
secondNode.add(threetNode);
}
root.add(secondNode);
}
JTree tree=new JTree(root);
tree.expandRow(1);
tree.expandRow(5);
tree.expandRow(9);
return tree;
}

}
簡單的 例子你可以模仿一下

⑷ java中的多態三要素是什麼

1。Person person = new A(); 不是父類對象指向子類引用而是父類引用指向子類對象

2。這個對象不能調用子類A特有的彈吉他方法--person.guitar(); X

3.如果僅是這么寫程序,還不是多態,記住實現多態的三要素:繼承 重寫 父類引用指向子類對象

那麼,你必須在父類裡面定義一個方法guitar(); ,然後在子類中重寫這個方法

之後,如果你調用persion.guitar(),此時在代碼的編譯階段,persion調用的仍然是自己的guitar(),不是兒子的。而當程序運行時,就是java XXX, persion調用的卻是兒子的guitar()。這個動態的過程才是多態 。

總之

比如A a = new B();是創建了一個子類對象並把它當成父類對象A用

也就是父類引用指向子類對象

此時,引用變數a有2個類型,編譯時的類型為A,運行時的類型為B.在代碼編譯過程中,a 只能調用屬於A的方法. 不能調用B類裡面的方法.注意,由於繼承關系,如果B重寫了A的某個方法,比如說eat(),而在代碼編譯過程中,a.eat()調用的是A的eat(),但在程序運行時,卻運行的是B的eat(). 這就是多態

比如Animal a = new Tiger(); Tiger繼承並重寫了Animal的eat()方法.這也是父類引用指向子類對象.首先, a 是 一隻老虎.但不幸的是,Animal a= new Tiger(); 也就是說a雖然有了老虎的實質, 就是說有了老虎的爪子,身材..... , 但卻沒有老虎的名分.它雖然身體是老虎, 但名字或者說它的類別卻是動物,而不是老虎.而作為動物的定義,你當然不能使用屬於老虎的定義的方法.比如說,雖然二者都有吃的行為, 但老虎吃肉,動物都吃肉么? 所以雖然a實質上是老虎,但在書面描述a的行為時,你只能使用動物的定義. 這個階段就相當於代碼的編譯的階段.而此時a的類型為編譯時的類型-動物.而如果具體實施吃的行為時, 比如說給a喂吃的, 雖然書面定義了a只能有動物的籠統的吃的方法,比如說用嘴,沒有規定要吃肉.但是現在是具體操作了,由於a實質上是老虎,所以a實質上履行的還是老虎的吃的方法. 具體的吃的過程,就相當於程序的運行的階段. 而此時a的類型為運行時的類型-老虎

⑸ 怎樣用c#語言把家譜寫入二叉樹中

using System;

namespace BinTree
{
public class Node<T>
{
private T data;
private Node<T> lChild;
private Node<T> rChild;
public Node(T val, Node<T> lp, Node<T> rp)
{
data = val;
lChild = lp;
rChild = rp;
}
public Node(Node<T> lp, Node<T> rp)
{
data = default(T);
lChild = lp;
rChild = rp;

}
public Node(T val)
{
data = val;
lChild = null;
rChild = null;
}
public Node()
{
data = default(T);
lChild = null;
rChild = null;
}
public T Data
{
get { return data; }
set { data = value; }
}
public Node<T> LChild
{
get { return lChild; }
set { lChild = value; }
}
public Node<T> RChild
{
get { return rChild; }
set { rChild = value; }
}
}
public class BinaryTree<T>
{
private Node<T> head;
public Node<T> Head
{
get { return head; }
set { head = value; }
}
public BinaryTree()
{
head = null;
}
public BinaryTree(T val)
{
Node<T> p = new Node<T>(val);
head = p;
}
public BinaryTree(T val, Node<T> lp, Node<T> rp)
{
Node<T> p = new Node<T>(val, lp, rp);
head = p;
}
public bool IsEmpty()
{
if (head == null)
{ return true; }
else
{ return false; }

}
public Node<T> Root()
{
return head;
}
public Node<T> GetLChild(Node<T> p)
{
return p.LChild;
}
public Node<T> GetRChild(Node<T> p)
{
return p.RChild;
}
public void InsertL(T val, Node<T> p)
{
Node<T> tmp = new Node<T>(val);
tmp.LChild = p.LChild;
p.LChild = tmp;
}
public void InsertR(T val, Node<T> p)
{
Node<T> tmp = new Node<T>(val);
tmp.RChild = p.RChild;
p.RChild = tmp;
}
public Node<T> DeleteL(Node<T> p)
{
if ((p == null) || (p.LChild == null)) return null;
Node<T> tmp = p.LChild;
p.LChild = null;
return tmp;
}
public Node<T> DeleteR(Node<T> p)
{
if ((p == null) || (p.RChild == null)) return null;

Node<T> tmp = p.RChild;
p.RChild = null;
return tmp;
}
public Node<T> Search(Node<T> root, T value)
{
Node<T> p = root;
Node<T> q =null;
if (p != null)
{
if (p.Data.Equals(value))
q = p;
else
{
q = Search(p.LChild, value);
if (q == null)
q = Search(p.RChild, value);
}
}
return q;
}
public bool IsLeaf(Node<T> p)
{
if ((p != null) && (p.LChild == null) && (p.RChild == null))
{
return true;
}
else
{
return false;
}
}
}
public class BinTreeMain
{
public static void Main()
{
Node<string> q, p1, p2, p3, p4;
BinaryTree<string> b = new BinaryTree<string>("老李");
q = b.Head;
b.InsertL("小李1", q);
b.InsertR("小李2", q);
q = q.LChild;
b.InsertL("小小李1", q);
b.InsertR("小小李2", q);
p1 = b.Search(b.Head, "小李1");
p2 = b.Search(b.Head, "小李2");
p3 = b.Search(b.Head.LChild.LChild, "小小李1");
p4 = b.Search(b.Head.LChild.RChild, "小小李2");
Console.WriteLine("老李的左兒子的姓名:{0}", p1.Data);
Console.WriteLine("老李的右兒子的姓名:{0}", p2.Data);
Console.WriteLine("老李的左兒子小李1的左兒子姓名:{0}", p3.Data);
Console.WriteLine("老李的左兒子小李1的右兒子姓名:{0}", p4.Data);
Console.ReadLine();
}
}
}
這是原程序:你粘過去運行就行了。用VS2008就可以了。望點贊。謝謝!!!

⑹ 誰開發個家譜類的系統用java實現

這個是B/S模式的軟體,Browse/Server 瀏覽器/伺服器 模式的,通過瀏覽器即可完成所有功能,屬於瘦客戶端軟體,功能簡單,側重內容發布,可以叫網站,功能復雜,側重業務邏輯的,就叫系統哦,名稱無所謂的 自動登錄的話,幾種語言都行,登錄的本...

⑺ 誰能提供司馬遷的家族歷史(家譜)

司馬遷出身於中下層官吏家庭。高祖司馬昌,當秦始皇時,作主鐵官。曾祖司馬無澤,在漢初作長安的一個「市長」。祖司馬喜,沒有作官,而有第九等爵位,為五大夫。他的家庭在漢文帝時可能是所謂「中人之家」,以農業、畜牧致富,因而能夠出粟買爵。司馬遷說自己「耕牧河山之陽」,不一定就是親自參加耕牧。

司馬遷後代一說(ZT)
司馬遷自稱「生龍門,耕牧河山之陽」(《史記·太史公自序》),又稱其數世祖塋均在高門,即今陝西韓城;但此地至今無一姓司馬者。據韓城縣文化館介紹,距司馬遷出生地「龍門砦」僅三里之續村,今為鬼東嵬陽村,同、馮兩姓卻歷來均自稱為司馬之後。同姓祖陵存碑文錄於下:
「維茲同族,世傳司馬。初序天地,系出重黎。至周失官,嘗典史筆。去周適晉,分散他鄉。錯在秦朝,夏陽居處;喜及後代,高門成塋。官太史者談,作《史記》者子長。葬史坡而山明水秀,生臨觀而子孝孫賢。史通因避莽亂,隱居嵩陽;徽為長門嫡孫,改姓同氏。追歸故里,徙居徐村。墳墓先塋,不能悉志。自茂至傑,略表所知。」
此碑勒於清嘉慶二十二年,來源於清康熙二十二年韓城知事翟世琪所撰《重修太史廟記》。該碑文稱:「自康熙八年,眾為太史公廟會而不能得太史公生辰。適有華山方外士自言知其詳,謂:司馬子長四柱為甲寅、戊辰、庚午、丙戌,壽七十三歲,卒於丙寅年九月初四日。有二子,長臨,字與仲;次觀,字何求。史通,臨之孫也。莽為安漢公,封史通。史通避莽亂,偕逢萌居嵩陽。司馬徽正臨嫡派,今子孫或在洛陽,同姓;或在襄陽,馬姓。觀之八世孫為懿,傳帝十五葉,辟劉宋之禍,去司返高門。又有女為楊敞夫人。敞後傳帝二世,前五代終始,皆子長之裔也。而觀裔司馬君實,與臨裔司馬徽,皆別有不朽,以德不以位。」宋武帝劉裕滅東晉之後,難免要追殺司馬後代。司馬子孫為避株連遭禍,改姓同、馮,返回高門,頗近事理。至於華山方外士所言,來自遺聞傳說,雖無史籍可考,卻不能一概視為荒誕不經,至少可作為史學家研考之資料。