第一篇:arcgis上機實習報告
課程實習報告
實習課程:《ArcGIS專業技能訓練實習報告》
姓
名:
學
號:
專
業:
班
級:
2012年 6月
20日
ArcGIS專業技能訓練實習報告
實習目的:
通過學習Arcgis這款Gis應用軟件熟練我們的實際應用能力,深入理解GIS軟件應用的核心部分,通過熟練Arcgis能掌握類似相關軟件操作,加強動手能力。
實習步驟:
1.對Arcgis軟件整體掌握,并與之前各類軟件操作對比和學習。
2.具體對軟件操作掌握空間數據的采集與組織、數據的處理與變、數據的可視化表達。
3.Arcgis的空間分析能力的掌握:矢量數據的空間分析、柵格數據的空間分析、三維分析、地統計分析、水文分析等。4.掌握Arcgis的空間分析建模。
實習內容:
根據練習內容,選擇了練習第3、4、5、7、12章的內容,其余在課下自己練習完成,這些章內容分別為:空間數據的采集與組織、數據的處理與變換、數據的可視化表達、矢量數據空間分析、空間分析建模
Geodatabase是一種采用標準關系數據庫技術來表現地理信息的數據模型。Geodatabase支持在標準的數據庫管理系統(DBMS)表中存儲和管理地理信息。一. 基于Geodatabase的數據庫設計
Geodatabase支持面向對象的矢量數據模型,它將地理數據組織成一個數據對象的結構體系。在Geodatabase模型中,實體被表示為屬性,行為,關系的對象。Geodatabase還允許用戶定義對象之間的關系,以及保持對象之間參照完整性的規則。Geodatabase也定義了簡單的對象,地理要素,幾何網絡,注記要素等多種對象類型。二. Geodatabase中的信息類型
1.表(table):是記錄的集合,每個記錄(行)中包括許多列(字段);
2.對象類(object classes):對象表示一個沒有空間幾何的實體,沒有位置相關信息,但是可以通過關系類與要素聯系起來,一個對象類作為一個表存儲在Geodatabase中,一個對象是表中的一行。3.要素類(feature classes):表示有空間幾何的實體,有位置相關信息。要素類是具有相同的屬性和相同的幾何表示類型的要素集合。1)簡單要素類:沒有拓撲關聯,包括點,線,多邊形,注記等多種類型,以要素的方式管理,存放在要素集內外均可。
2)復雜要素類則是有拓撲關聯的若干個要素類的組合,必須存放在同一個要素數據集中,例如拓撲要素、幾何網絡等類型。
4.子類(subtype):在要素類內部可以劃分若干個次一級的組,每個組是一個子類。每個子類有其自己的完整性規則和GIS行為。5.要素數據集(feature database):要素數據集是一個具有相同空間參照的要素類的集合。
6.關系(relationships):是一種表(或要素類)與表(或要素類)之間的聯系機制。關系類建立在對象(或要素)類之間,由一個對象(或要素)類指向另一個對象(或要素)類。
7.柵格數據集(raster data sets):影像作為柵格表來管理。
8.拓撲關系(topology):拓撲關系將參與拓撲的各個要素類集成在一個拓撲圖中作為一個拓撲單元來管理,規定同一個要素類中的各個要素如何與其他要素共享幾何或不同要素類之間如何共享幾何。9.元數據:對數據庫中各個數據元素的描述。
10.幾何網絡(geometric network):若干個要素類作為一個整體參與到幾何網絡的構造,Geodatabase通過拓撲關聯保證參與到幾何網絡中的各個要素類的空間幾何的連通性。幾何網絡將導致保證網絡連通性的行為。
三. Geodatabase的優勢:
1.所有圖形數據和屬性數據統一存儲在商業DBMS中。
2.便于使用DBMS支持的多用戶并發訪問、事務管理、失敗事務恢復、用戶權限策略等機制,有利于空間信息共享、數據安全,提高了數據庫性能。
3.支持智能化的要素、規則和關系。4.完善的用戶支持。
四.Geodatabase數據庫設計的內容
1.基本內容是規定 構成數據庫的要素類、柵格數據集、其他表,以及表之間的各種關系。
2.其中,要素(或對象)類之間的關系通過要素數據集、關系類、拓撲來管理。
3.一個要素數據集中的各個要素類具有相同的空間參照;拓撲類、幾何網絡中的要素類受拓撲完整性約束。五
Geodatabase數據庫設計的步驟
1.用戶視圖建模 2.定義實體和關系 3.明確實體的表示 4.匹配到Geodatabase模型 5.組織地理數據集
六.將地理實體表示為Geodatabase數據類型
要在識別地理實體并決定其幾何表示類型之后,決定數據如何在Geodatabase中表示。具體包括兩方面處理:
1.決定各種地理實體的表示類型及其拓撲關系; 2.決定各實體的屬性字段。
決定實體的表示類型的依據是其幾何表示類型:點實體用點要素、簡單節點、復合節點表示,線實體用線要素、簡單邊、復合邊表示,面實體用多邊形要素表示,表面實體用TIN或柵格數據集表示,空間位置無關的實體用對象(表)表示。
? 其中點、線、面實體的離散分布有兩種:
1.獨立分布的實體,與其他要素無關,可以表示為簡單的點、線、面要素;
2.與其他要素的分布相關,這種點、線實體可以表示為節點、邊要素,面實體表示為有拓撲關系的多邊形要素。
? 考慮要素之間的拓撲關系,定義復合要素類:平面拓撲和幾何網絡。?平面拓撲強制保證要素不能相互交叉而沒有交點。如土地或區劃系統,采用平面拓撲管理要素間的公共邊。
? 幾何網絡強制保持網絡要素之間的連通性,是網絡編輯易于操作。如對于線狀系統,交通網絡,多采用幾何網絡表示。? 確定對象的屬性類型
1.主要依據要素(或對象)的專題性質而定。
2.每個實體可能有多種屬性,依據相關原則確定每種屬性(字段)的數據類型,使用默認值、域等工具保證數據的完整性。六. 將數據組織到Geodatabase地理數據集
1.工作包括:
(1).劃分要素類和子類(2).規定要素類的拓撲關系(3.)構建地理數據集(4.)組織地理數據庫
(1)劃分要素類和子類
下列情況下必須建立單列的要素類:
1)當各組相關要素的屬性字段組合根本不同時 2)當各組相關要素需要有特有的定制行為時 3)當需要對各組要素賦予不同存取權限時
4)當有些要素要采用版本管理存取而另一些要素不需要版本管理時(2)規定要素類的拓撲關系
1)將相關要素分組為幾何網絡好或平面拓撲
2)如果要素類是獨立點、線、面要素,那么它不參與幾何網絡或者平面拓撲
3)如果要素類是簡單邊、簡單節點、復合邊、復合節點,那么它參與幾何網絡的構成
4)如果要素類是拓撲關聯的多邊形要素類,其內部各個要素必須滿足特定的拓撲關系(3)構建地理數據集
1)要素數據集是一個容器,使用它可以將相似的要素類組合在一起。2)將具有相同空間參照的要素類組織到同一個要素數據集中是有利的,因為不同要素數據集在運算過程中可能會出現細微的差別而引起數據不一致。3)同時參加到平面拓撲或幾何網絡中的各個要素類必須被組織到同一個要素數據集中。
(4)最后將要素數據集和要素類組合起來。
1)確定了各要素及其拓撲聯系之后,最后需要將它們組合到地理數據庫中。2)如果企業用戶包括多個部門,不同部門使用不同的數據集。地理數據庫可以安裝企業組織結構部署。
4)如果使用personal Geodatabases,由于數據庫容量的限制,必須對數據庫按專題或空間進行分割。七. Geodatabase的建庫步驟
1.在F盤中建立自己的文件夾070141; 2.在自己的文件夾中建立個人數據庫database;截圖說明
3.在personal database中建立點要素a,線要素aa,面要素aaa。八. Geodatabase的拓撲建立
若干個要素類作為一個整體參與到幾何網絡的構造,Geodatabase通過拓撲關聯保證參與到幾何網絡中的各個要素類的空間幾何的連通性。幾何網絡將導致保證網絡連通性的行為。
1.右鍵單擊數據庫database,點擊new再點擊Feature Dataset
截圖說明:
出現對話框New Feature Dataset 在name中填寫名字topology;2.點擊“下一步”出現如下對話框,點擊對話框中的Import,又出現對話框在Ext文件夾中點擊Blocks.shp,點擊Add即可添加數據;
截圖說明;
再點擊繼續點擊下一步,下一步,Finish,即可建立topology; 3.右鍵單擊topology,點擊Import,再點擊Feature Class(mulitiple)
截圖說明:
出現如下對話框,在對話框中點擊第一個圖標瀏覽,在出現的對話框中加入Ex1中的兩個數據Blocks.shp和Parcels.shp,點擊Add;
點擊ok,則topology中增加了Blocks.shp和Parcels.shp兩個數據項; 4.右鍵單擊topology中的Blocks,點擊Properties 截圖說明:
出現如下對話框, 在對話框中的子類SubtypeField一欄下拉選擇Res,在Subtype中設置Code和Description為0,nonres;1,res; 點擊確定;
截圖說明:
4.同理設置Parcels的Properties;
5.右鍵單擊topology,點擊new,再點擊Topology:
6.在出現的如下對話框中點擊下一步
7在.出現的如下對話框中點擊下一步
8.在出現的New Topology如下對話框中點擊Select All 截圖說明:
9.在出現的New Topology如下對話框中,在Enter the number of ranks中填1;
10.點擊下一步,在出現的New Topology對話框中,點擊Add Rule,再Add Rule中的三欄中選擇Parcels,Must Not Overlap With,Blocks,點擊ok; 截圖說明:
點擊下一步,再點擊Finish.再出現的對話框是否拓撲查詢,點擊否。則在Topology中建立了topology-Topology。
11.打開ArcMap,將topology-Topology拖到ArcMap的Layers中,則在Layers中添加了topology-Topology,Blocks和Parcels; 截圖說明:
12.點擊工具欄中的View,點擊Toolbars,再點擊Topology,將出現進行拓撲操作的Topology工具欄;在Editor下拉菜單中點擊Starting Editor,將工具激活;
截圖說明:
13.點擊Topology工具欄的Topology Editor Tool圖標,雙擊弧線段,在結點處進行操作即可
拓撲結果圖:
第二篇:ArcGIS上機心得體會
ArcGIS上機心得體會
持續了七周的ArcGIS上機實驗終于告一段落了!七個星期的時間說長也挺短的,可在這6個周四里(其中清明放假一次),我們卻完成了8個上機實驗,這是之前所預想不到的。俗話說“實踐是檢驗真理的唯一標準”,任何知識都只有通過認真的實踐才能掌握得更好。這次的上機實驗使我的專業素養得到了極大的提升,對自我的創新精神和實踐能力的提高起了及其重要的作用。
總體上來說,這幾次上機實驗課是我至今的上機實驗課中上得最為認真,最為緊張的課!當然原因有很多,仔細回想一下,做了一下幾點總結:
(1)對軟件的熟悉程度不夠。雖然以前接觸過這款軟件,但操作時都是照著老師給的教程按部就班的做,沒有融入自己的思考,更沒有提出自己的看法,就只是麻木似機器般的完成著老師布置的任務,效果可想而知了--十分不好。而當我們一旦離開了教程,需要我們自己去探索去思考時,我們便開始緊張了。因而速度也慢了下來,效率自然也變得低下。可換個角度想,老師要求嚴格又何嘗不是一件好事呢?雖然短期的效率低下,但從長遠的角度看,我們得到了真正的鍛煉,對這門知識的理解,掌握,消化會更深刻,更徹底。
(2)踏實才是最好的學習態度。此次的上機實驗,所用的數據很多都是環環相扣的,只要哪一步出錯,后面就無法繼續進行下去,以至于最后得不到自己想要的結果。所以,這讓我更加深刻的認識到了我們做任何事都不能太過于急于求成,在擺正好自己的心態前提下,我們需要踏踏實實,穩扎穩打,才能將一件事做好。而且,在遇到問題的時候,我們必須正視它并以積極樂觀的心態去面對,相信只要自己勤動腦,肯動手,多探索,就沒有什么會是弄不懂的。
(3)這次上機實驗并不是單獨的掌握好這款軟件的基本功能就能很好的完成作業,還需要運用到其他知識,因此,學習知識的寬度與深度同等重要。比如:這次的上機實驗多次用到excel表格計算,還需要進行矩陣計算,這就是對我們其他方面知識的一個考驗。
最后我要非常感謝能有這次上機實驗機會,更要感謝任課老師的負責,讓我的各方面能力都提升了那么多!
第三篇:ARCGIS實習報告
《ArcGIS實習報告》
學
號:
班級序號:
姓
名:
指導教師:
成
績:
ArcGIS軟件操作實習報告
實習目的:
通過學習Arcgis這款Gis應用軟件熟練我們的實際應用能力,深入理解GIS軟件應用的核心部分,通過熟練Arcgis能掌握類似相關軟件操作,加強動手能力。
實習過程:
1.對Arcgis軟件整體掌握,并與之前各類軟件操作對比和學習。
2.具體對軟件操作掌握空間數據的采集與組織、數據的處理與變換、數據的可視化表達。
3.Arcgis的空間分析能力的掌握:矢量數據的空間分析、柵格數據的空間分析、三維分析、地統計分析、水文分析等。4.掌握Arcgis的空間分析建模。
實習內容:
根據學習內容,我們選擇了《地理信息系統分析與應用》第三章作為實習內容,本章內容分別為:初識ArcGIS、農田保護區域分析、度假村選址、屏幕矢量化及拓撲建庫、投影轉換及圖形裁剪、注記及屬性編輯與連接、燕麥試驗田選址、商店選址評價、土壤肥沃度分析、統計圖表、網絡分析、ArcGIS中DEM 的建立及應用。
以下是實習內容截圖
3.1 初識ArcGIS 1啟動ArcCatalog
2.在arcmap 中加載數據
3.圖層操作
(1)放大、縮小
4、改變drelief圖層的顯示圖例
6.改變dsoils圖層的顯示圖例
3更改地圖顯示比例尺
4、將ArcCatalog 右側窗口中的Water Use 圖層拖到 ArcMap 中。
3.2農田保護區域分析
3.2.1 問題和數據分析
1.問題提出
有一塊受洪水影響的地區。政府為了保護土地,決定在河流北岸建一個水壩。我們的任務是找出水壩保護的農田范圍。
3.2.2連接并添加數據
1.連接并添加數據,并改變dsoils
和
drelief 圖層的地圖符號。
3.1.5 找出洪水淹沒區域
在本例中我們需要找出所有高程低于8米的區域。利用
柵格計算器(Raster
112
3.1.6 尋找可耕種區域
3.1.7 確定水壩保護的可耕種區域
314
3設置地圖單元
516 選擇記錄 為area 字段賦值
718
2將選中區域保存為一個新圖層
920
4.122
3重分類
4查看重分類結果
324
3.3.4 確定坡度小于3%的區域
1添加圖層 2求取坡度 3圖層顯示 4統計坡度分布 5 取出失真坡度數據 6提取坡度小于3%的地區 7重命名
3.3.5 提取年平均溫度高于 16.5 攝氏度 的區域
526
3.4屏幕矢量化及拓撲建庫
添加了控制點
將CropLine圖層設定為編輯狀態
數字化
728
3.5投影轉換及圖形裁剪
3.5-5 裁剪結果 CropCov
930
3.7 燕麥試驗田選址
3.7-5 加載roads 和 hydro 特征類
3.7-28 計算地塊總價
3.8 商店選址評價
3.8-11 設置重分類邊界值
132
3.9-19 建立一個標準差圓
3.10 統計圖表
3.10-8 趨勢線
334
3.12 ArcGIS 中 DEM 的建立及應用
3.12-4 離散點生成的DEM
3.12-12 離散點生成TIN
536
3.12-31 坡度圖
3.12-34 曲率圖
3.12-37 坡向圖
738
3.12-45 可視域圖
3.12-49 統計計算結果
940
實習心得體會
在這次軟件操作實習中,我們按照課本的指導,親自體驗了如何用ArcGIS實現數據的采集與組織、數據的處理與變換、數據的可視化表達。空間分析能力、矢量數據的空間分析、柵格數據的空間分析、三維分析、地理統計分析、水文分析等。
在一個個案例與任務中。我們熟悉了軟件的操作,軟件可以實現的功能,了解到了gis可以幫助我們解決生活中哪些方面的問題。這使課堂理論與實際緊密聯系,幫助我們更好地理解了GIS知識。在軟件的使用過程中,我們訓練了自己解決實際工程任務的能力,提高了專業技能。這對將來走上工作崗位也有很大的幫助。此外,通過實際操作,書本的知識不再枯燥乏味。在制作一幅又一副功能各異的圖片,完成書本要求的內容中。我們收獲了成功的喜悅,驚嘆于GIS的強大功能,這使我們對GIS更加感興趣。
地理信息系統為測繪人員提供了一個一體化工具,使我們可以將各種格式和來源的數據整合在一起,進行維護和管理、使用動態地圖來可視化數據、關聯信息。這不僅讓我們更好的管理和分配資源,還可以進行建模和分析工作,使原始數據產生更為廣闊的價值。因此要成為一名優秀的測繪工作者,除了要熟練操作儀器,掌握各類工程測量的方法外,還應該將熟練運用常見的GIS軟件,借助GIS的強大功能為我們的工作、生活創造更多的幸福。
中國地質大學信息工程學院
2011年 12 月28日
1-41
第四篇:ARCGIS 實習報告
Arcgis 實習
第 二 次 實習報 告
班級:地信121 姓名:聞元武 學號:201201694 空間數據管理及屬性編輯
一. 實驗目的
1.利用ArcCatalog管理地理空間數據庫,理解personal Geodatabase空間數據庫模型有關概念。2.掌握在ArcMap中編輯屬性數據的基本操作。3.掌握根據GPS數據文件生成適量圖層的方法和過程。4.理解圖層屬性表間的連接(join)或關聯(Link)關系。二. 實驗要求
1.闡述基本原理和概念(要素類,要素數據集)。2.Geodatabase空間數據庫模型的特點。
3.1:M 空間查詢的實現原理及應用實例。比較連接(Join)和關聯(Link)關系的區別和應用。三. 實驗內容
1.啟動 ArcCatalog 打開一個地理數據庫 1.1當ArcCatlog打開后,連接到指定文件夾Exec2.1.2 打開個人空間數據庫——National,mdb。可以看到在National,mdb中包含有2個要素數據集,一個關系類和一個屬性表。
2.預覽地理數據庫中的要素類
2.1 ArcCatlog窗口右邊的數據顯示區內,點擊“預覽”選項切換到預覽視圖界面。在目錄樹中,雙擊數據集要素集- WorldContainer,點擊要素類-Container94激活它。
2.2 在2.1窗口的下方,預覽下拉列表中選擇“表格”,現在你可以看到 Countries94 的屬性表。查看它的屬性字段信息。
2.3 在目錄樹下面,選擇WorldCities。查看他的屬性信息。
3.創建縮圖,并查看元數據 3.1 在目錄樹中,選擇地理數據庫National中的要素類-Countries94,切換到“預覽”視圖,點擊工具欄上的“放大鏡”按鈕,將圖層放大到一定區域,然后再點生成并更新縮略圖。這時,切換到“內容”視圖界面下,并在目錄樹中選擇要素集——WorldContainer數據查看方式更改為縮略圖方式。注意此時,要素類的縮圖圖是不是發生了改變。縮略圖已經不是原來的縮略圖,而是放大之后的圖片。
3.2 點擊“元數據”選項頁,查看當前要素類的元數據,了解當前要素類是采用什么坐標系,都有哪些屬性字段,字段的類型等信息。在元數據工具欄中,從樣式表中選擇不同的樣式,可以看到,元數據顯示的格式發生了變化。4.創建個人地理數據庫(Personal Geodatabase-PGD)4.1 創建個人地理數據庫(Personal Geodatabase-PGD)。
4.2 在ArcCatalog的目錄樹中,定位到D:盤,右鍵點擊這
D:盤,在出現的菜單中,選擇[新建]>>[文件夾],文件夾名稱改為 “myGeoDB”。右鍵選中這個文件夾,在出現的菜單中,點擊[新建]>>[個人地理數據庫],這會創建一個名稱為:“新建個人地理數據庫” 的數據庫文件,將之改名為“YN.mdb”。
4.3 右鍵點擊數據庫文件“YN.mdb”,在出現的菜單中,選擇[導入]>>[要素類multiple],在出現的對話框中,打開要導入要素:縣界 prj.shp/縣城 prj.shp/道路 prj.shp(這些文件在 Exece2 文件夾下,按住Shift鍵并點擊鼠標可同時選擇多個 Shape文件)。
4.4 右鍵點擊數據庫文件“YN.mdb”,新建【要素集】,并圍棋指定坐標系。
4.5 右鍵點擊新建的要素集-KM,在出現的菜單中選擇[新建]>>[要素類],在出現的對話框中輸入要素類的名稱-公交站點,點擊<下一步>,再次點擊<下一步>按鈕。在出現的對話框中選擇字段,修改字段的幾何類型為“點”(表示此要素類中將要存儲的要素類型是點要素,準備用來存儲公交站點),點擊下一步,我們添加兩個字段“站點名稱”,“公交站點編號”數據類型都設置成“文本”,點擊“完成”按鈕。
4.6 新建數據表:右鍵點擊地理數據庫-YN.mdb,在出現的菜單中,選擇[新建]>>[表],輸入“表”名稱為“公交線路”,點<下一步>,再次點<下一步>,在對話框中,新添加兩個字段
公交站點編號、公交線路(數據類型都設為“文本”),點擊“完成”。
4.7 創建公交站點到公交線路一對多的關系(1:M):右鍵選擇地理數據庫-YN.mdb,在出現的菜單中選擇<新建>-<關系類>,對以下內容進行設定,其它設置接受默認選項。選擇關系類型為一對多關系,這樣可以建立公交站點到公交線路一對多的關系,因為經過一個公交站點的公交線路有多條,這樣,在我們從公交站點分布圖是查詢某個公交站點時就可以查詢經過這個站點所有公交線。
4.8 完成以上步驟后,在ArcCatlog中就可以看到,在地理數據庫YN.mdb中,有一個有一個要素集(NewKM),其中包含一個要素類(公交站點)、一個數據表(公交線路)、一個關系類(公交線及公交站 1:M)
5.拖放數據到 ArcMap 中
5.1 啟動ArcMap,新建一個空的地圖文檔,通過拖放的方式添加上面所創建的數據到ArcMap 中。在ArcCatalog中,點擊“內容”選項頁,在目錄樹中,點擊地理數據庫-YN.mdb,將要素類-“公交站點”及屬性數據表“公交線路”拖放到ArcMap中。
6.編輯屬性數據及進行 1:M的空間查詢 編輯公交站點,及公交路線。
7.導入 GPS 數據,生成圖層
7.1 啟動 ArcMap,切換到數據源視圖。添加 GPS 數據,選擇GPS.txt。
7.2 執行菜單命令:[工具] >>[添加XY 數據],在XY 數據”窗口中,選擇已添加的 XY數據表,指定X坐標字段(東經)和Y 坐標字段(北緯),按 GPS 系統采用的坐標系統為WGS_1984。確定后,在地圖顯示區域中,就會根據GPS 數據文件中采集的坐標信息創建點狀的事件圖層。
7.3 在圖層控制面板(TOC)中,右鍵選中根據GPS 數據文件生成的事件圖層。在出現的菜單中,執行[數據]>>[導出數據]命令,在導出數據對話框中,指定要導出的文件名稱及存儲位置。這樣就完成了由GPS 數據文件生成圖層的過程。
四. 實驗總結
4.1 通過本次實習,我加深了對要素類概念的理解,要素類就是指具有相同的幾何特征的要素集合,比如我們這里的道路的要素類,縣城的要素類等。
4.2 通過本次實習,我還知道要素數據集就是一個集合,在這個集合里面,所有的要素類都具有相同的坐標系統。
4.3 Geodatabase 空間數據庫模型的特點:Geodatabase在要素類和數據集中對空間參考信息進行了完整的定義。而且,Geodatabase空間幾何數據與屬性數據保存在同一個同一個要素類中。
4.4 1:M 空間查詢的實現原理及應用實例:將兩個屬性表關聯起來,其中一個屬性表中的某一記錄與另一屬性表中多個記錄相關聯,當查詢某一條記錄時就可以查詢到與其相關聯的其他屬性。如實驗二中,當查詢某一公交站點時,可以將通過此站點的公交路線都顯示出來,就屬于1:M空間查詢。4.5 比較連接(Join)和關聯(Link)關系的區別和應用: 區別:
連接:連接可以添加額外的屬性數據到到當前圖層,也可以使用這些額外的屬性數據進行標注。關聯:關聯可以使數據關聯到當前圖層關聯的數據并不像連接那樣添加到圖層的屬性表中,而是在處理圖層的屬性數據的時候可以獲取關聯的數據。
應用:
連接:生成虛擬連接(并不修改數據源)虛擬表,適用:一對多,多對一。關聯:在表A中選擇一個記錄,可以關聯并同時選擇表中多條記錄,適用:一對多。
第五篇:linux上機實習報告
目 錄
Linux 第一次上機(運行環境RedHat)................................................................................1 調試運行CD唱片應用程序.......................................................................................1 運行過程............................................................................................................1 心得體會............................................................................................................3 編寫shell腳本,求1到100的和..............................................................................3 運行過程............................................................................................................3 源代碼...............................................................................................................4 編寫shell腳本,從鍵盤輸入兩個數,求這兩個數的和.................................................4 運行過程............................................................................................................4 源代碼...............................................................................................................5 等待特定用戶登錄,每30秒確認一次.......................................................................5 運行過程............................................................................................................5 源代碼...............................................................................................................6 找出系統中當前消耗磁盤容量最大的前10個用戶,并向他們發送警告郵件...............6 運行過程............................................................................................................6 源代碼...............................................................................................................8 查找輸入文件的路徑.................................................................................................8 運行過程............................................................................................................8 源代碼...............................................................................................................9 Linux 第二次上機(運行環境RedHat)................................................................................9 定制自己的ls命令。提供至少三種帶參數的執行方式................................................9 運行過程............................................................................................................9 源代碼..............................................................................................................11 調試編譯串行口通信程序p6.5.c...............................................................................16 運行過程..........................................................................................................16 Linux 第三次上機(運行環境RedHat,CentOS)...............................................................16 創建一個系統監聽守護進程,一旦接收到其他進程發來的信號,馬上給出報告........16 運行過程..........................................................................................................16 源代碼.............................................................................................................18 分別利用本地socket套接字和INTENET套接字實現進程間文件傳輸......................20 本地socket套接字運行過程.............................................................................20 本地socket套接字服務器server1.c源代碼........................................................22 本地socket套接字客戶端client1.c源代碼.........................................................23 INTENET套接字運行過程...............................................................................25 INTENET套接字服務器server2.c源代碼..........................................................28 INTENET套接字客戶端client2.c源代碼...........................................................29 感謝與收獲....................................................................................................................30
Linux 第一次上機(運行環境RedHat)調試運行CD唱片應用程序 運行過程
圖表 1第一步,使用./CD 命令運行CD腳本
圖表 2進入選項界面
圖表 3增加CD
圖表 4查找CD
圖表 5查詢數目
圖表 6退出
心得體會
通過運行書上的CD唱片應用程序,進一步地了解到shell編程的方法,以及編寫程序的思路。
編寫shell腳本,求1到100的和 運行過程
圖表 7使用./sum1to100運行
源代碼
圖表 8使用cat sum1to100查看源代碼
編寫shell腳本,從鍵盤輸入兩個數,求這兩個數的和
運行過程
圖表 9使用./sumAandB 運行
源代碼
圖表 10使用cat sumAandB查看源代碼
等待特定用戶登錄,每30秒確認一次 運行過程
已知特定用戶是zzx,我首先讓root用戶登錄并運行程序,可以發現每隔30s提醒一次
圖表 11使用./checkuser運行
當我切換到zzx用戶,并再次運行程序,可得如下結果
源代碼
圖表 12使用cat checkuser查看代碼
找出系統中當前消耗磁盤容量最大的前10個用戶,并向他們發送警告郵件 運行過程
由于權限等問題,我們使用root用戶運行程序
圖表 13使用./mymail運行
運行完畢后,我們就可以查看郵件了
圖表 14 root用戶收到的郵件
圖表 15 zzx用戶收到的郵件
圖表 16 t1用戶收到的郵件
源代碼
圖表 17 使用cat命令查看
查找輸入文件的路徑 運行過程
由于權限的問題,我們使用root用戶運行程序
圖表 18 使用./route運行,并按照要求輸入文件名
源代碼
圖表 19 使用cat route查看源代碼
Linux 第二次上機(運行環境RedHat)定制自己的ls命令。提供至少三種帶參數的執行方式 運行過程
圖表 20 使用./ls 運行不帶參數ls
圖表 21使用./ls-l 運行帶參數-l 的ls
圖表 22 使用./ls-a運行帶參數-a的ls
圖表 23使用./ls-al 運行帶參數-al的ls 源代碼
#include #include int do_ls(char *dir,char *filename,int lflag){ int n;struct stat buf;char out[100];struct passwd *pw; struct group *gr;struct tm *t;if(lflag == 0){ } { } return 0; printf(“%st”,filename);if(lstat(dir,&buf)<0)fprintf(stderr,“stat error:%sn”,strerror(errno));return-1;switch(buf.st_mode & S_IFMT){ case S_IFREG: printf(“-”);break;case S_IFDIR: printf(“d”);break;case S_IFCHR: printf(“c”);break;case S_IFBLK: printf(“b”);break;case S_IFIFO: printf(“p”);break;case S_IFLNK: printf(“l”);break; case S_IFSOCK: printf(“s”);} for(n=8;n>=0;n--){ if(buf.st_mode&(1< break; } } else { } { case 2: printf(“r”);break;case 1: printf(“w”);break;case 0: printf(“x”);break;default: break;} printf(“-”);printf(“ %d”,buf.st_nlink); pw = getpwuid(buf.st_uid);printf(“ %s”,pw->pw_name);gr = getgrgid(buf.st_gid);printf(“ %s”,gr->gr_name);printf(“ %ld”,buf.st_size);t = localtime(&buf.st_atime);printf(“ %d-%d-%d %d:%d” ,t->tm_year+1900 ,t->tm_mon+1 ,t->tm_mday ,t->tm_hour ,t->tm_min); printf(“ %s ”,filename); if(S_ISLNK(buf.st_mode)){ printf(“-> ”);if(readlink(filename,out,100)==-1){ } //printf(“readlink errorn”); } printf(“%s”,out);} printf(“n”);return 0;int ls_prepare(char *w,int aflag,int lflag){ struct stat buf;char name[100];DIR *dir; struct dirent *pdr;if(lstat(w,&buf)<0){ fprintf(stderr,“stat error:%sn”,strerror(errno));return-1;} if(S_ISDIR(buf.st_mode)){ dir = opendir(w);{ } closedir(dir); while((pdr = readdir(dir))!=NULL)if(aflag==0){ if(pdr->d_name[0]=='.') continue;memset(name,0,100); strcpy(name,w); strcat(name,“/”); strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);}else { } memset(name,0,100);strcpy(name,w);strcat(name,“/”);strcat(name,pdr->d_name);do_ls(name,pdr->d_name,lflag);}else { do_ls(w,w,lflag); } { } } return 0;int main(int argc,char **argv)int aflag =0;int lflag =0;char c;int i;while((c = getopt(argc,argv,“al”))!=-1){ } switch(c){ case 'a': aflag =1;break;case 'l': lflag =1;break;default: break;} if(argc == optind){ ls_prepare(“./”,aflag,lflag);} else { } for(i=optind;i 調試編譯串行口通信程序p6.5.c 運行過程 由于權限問題,我們在root用戶下運行程序 圖表 24 使用./mytrunk不帶參數運行 圖表 25使用./mytrunk /dev/ttyS0 0帶參數運行 Linux 第三次上機(運行環境RedHat,CentOS)創建一個系統監聽守護進程,一旦接收到其他進程發來的信號,馬上給出報告 運行過程 圖表 26首先運行守護進程之后查看 當前進程 圖表 27可以發現守護進程-jincheng在后臺運行,且 PPID=1,PID=4085 圖表 28可以發現守護進程向test.txt發送了start 圖表 29向守護進程發送終止信號,終止守護進程 圖表 30可以發現后臺運行的守護進程沒了 圖表 31可以發現守護進程又向test.txt發送了end 圖表 32具體查看test.txt 圖表 33具體查看test.txt的內容 源代碼 #include if(sig==SIGTERM){ write(fd1,“endn”,5);exit(0);} } int daemon(int nochdir, int noclose){ pid_t pid; pid = fork(); /* In case of fork is error.*/ if(pid < 0) { perror(“fork”); return-1; } /* In case of this is parent process.*/ if(pid!= 0) exit(0); /* Become session leader and get pid.*/ pid = setsid(); if(pid <-1) { perror(“setsid”); return-1; } /* Change directory to root.*/ if(!nochdir) chdir(“/”); /* File descriptor close.*/ if(!noclose) { int fd; fd = open(“/dev/null”, O_RDWR, 0); if(fd!=-1) { dup2(fd, STDIN_FILENO); } dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); if(fd > 2) close(fd); } umask(0027); return 0; } int main(void){ fd1=open(“test.txt”,O_RDWR | O_TRUNC); } write(fd1,“startn”,7);daemon(0,0);signal(SIGTERM,sigintHandler);sleep(1000);return 0; 分別利用本地socket套接字和INTENET套接字實現進程間文件傳輸 本地socket套接字運行過程 圖表 34使用./server1運行服務器,顯示服務器等待狀態 圖表 35當在另外一個終端運行客戶端程序時,服務器顯示客戶連接,并要求輸入傳輸文件名稱 圖表 36當服務器輸入文件名稱server1.c后客戶端顯示接收信息,不過接收到的文件重定向到 test.txt中 圖表 37 server1.c的內容 圖表 38 客戶端接收到顯示在test.txt的內容,和server1.c的內容比較,完全一致 本地socket套接字服務器server1.c源代碼 #include int filefd,n;//////////////// char file[100],buf[1024];//////////////// int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_un server_address; struct sockaddr_un client_address; unlink(“server_socket”); server_sockfd =socket(AF_UNIX,SOCK_STREAM,0); server_address.sun_family =AF_UNIX; strcpy(server_address.sun_path,“server_socket”); server_len =sizeof(server_address); bind(server_sockfd,(struct sockaddr *)&server_address,server_len); listen(server_sockfd,5); while(1) { printf(“server waitingn”); client_len =sizeof(client_address); client_sockfd=accept(server_sockfd,(struct *)&client_address,&client_len); if(client_sockfd!=-1) { printf(“you have a client ,please put the filename to transport!n”); scanf(“%s”,file); if((filefd=open(file,O_RDWR))<0) { perror(“can't find the file”); exit(1); } printf(“filefd= %dn”,filefd); printf(“the file is transported ,please wait...n”); lseek(filefd,0L,0);//每次接受客戶機連接,應將用于讀的源文件指針移到文件頭 write(client_sockfd,file,sizeof(file));//傳送文件名 if((n=read(filefd,buf,sizeof(buf)))>0) { } write(client_sockfd,buf,n); sockaddr printf(“you have transport %d bytes and it is end!n”,n); close(client_sockfd); } close(filefd); } } 本地socket套接字客戶端client1.c源代碼 #include #include int filefd,n,oldfilefd;///////////////// char file[100],buf[1024]; int sockfd; int len; struct sockaddr_un address; int result; sockfd =socket(AF_UNIX, SOCK_STREAM,0); address.sun_family =AF_UNIX; strcpy(address.sun_path,“server_socket”); len=sizeof(address); result=connect(sockfd,(struct sockaddr *)&address,len); if(result ==-1) { perror(“oops:client1”); exit(1); } if(result!=-1) { oldfilefd=open(“test.txt”,O_RDWR); filefd=dup(oldfilefd); read(sockfd,file,sizeof(file)); printf(“the filename you receive is:%sn”,file); if((n=read(sockfd,buf,sizeof(buf)))>0) { write(filefd,buf,n); } printf(“you have received a file which is %d bytes,but the file's context cover the test.txt,so please check into test.txt!n”,n); close(sockfd); } close(filefd); exit(0);} INTENET套接字運行過程 圖表 39使用./server2運行服務器,顯示服務器等待狀態 圖表 40當在另外一個終端運行客戶端程序時,服務器顯示客戶連接,并要求輸入傳輸文件名稱 圖表 41當服務器輸入文件名稱server2.c后客戶端顯示接收信息,不過接收到的文件重定向到 test.txt中 圖表 42 server2.c的內容 圖表 43客戶端接收到顯示在test.txt的內容,和server2.c的內容比較,完全一致 INTENET套接字服務器server2.c源代碼 #include int main(){ int filefd,n;//////////////// char file[100],buf[4096];/////////////////// int server_sockfd,client_sockfd; int server_len,client_len;struct sockaddr_in server_address;struct sockaddr_in client_address;server_sockfd =socket(AF_INET,SOCK_STREAM,0);server_address.sin_family=AF_INET;server_address.sin_addr.s_addr=inet_addr(“127.0.0.1”);server_address.sin_port =9734;server_len=sizeof(server_address);bind(server_sockfd,(struct sockaddr *)&server_address,server_len);listen(server_sockfd,5);while(1) { printf(“server waitingn”); client_len =sizeof(client_address); client_sockfd=accept(server_sockfd,(struct *)&client_address,&client_len); if(client_sockfd!=-1) { printf(“you have a client ,please put the filename to transport!n”);scanf(“%s”,file); if((filefd=open(file,O_RDWR))<0){ sockaddr perror(“can't find the file”); exit(1); } printf(“filefd= %dn”,filefd); printf(“the file is transported ,please wait...n”); lseek(filefd,0L,0);//每次接受客戶機連接,應將用于讀的源>文件指針移到文件頭 write(client_sockfd,file,sizeof(file));//傳送文件名 if((n=read(filefd,buf,sizeof(buf)))>0) { write(client_sockfd,buf,n); } printf(“you have transport %d bytes and it is end!n”,n); close(client_sockfd); } close(filefd); } } INTENET套接字客戶端client2.c源代碼 #include int main(){ int filefd,n,oldfilefd;//////////////////// char file[100],buf[4096];int sockfd;int len;struct sockaddr_in address;int result;sockfd =socket(AF_INET,SOCK_STREAM,0);address.sin_family =AF_INET;address.sin_addr.s_addr =inet_addr(“127.0.0.1”);address.sin_port =9734;len =sizeof(address); result=connect(sockfd,(struct sockaddr *)&address,len); if(result ==-1) { perror(“oops:client2”); exit(1); } if(result!=-1){ oldfilefd=open(“test.txt”,O_RDWR); filefd=dup(oldfilefd); read(sockfd,file,sizeof(file)); printf(“the filename you receive is:%sn”,file); if((n=read(sockfd,buf,sizeof(buf)))>0) { write(filefd,buf,n); } printf(“you have received a file which is %d bytes,but the file's context cover the test.txt,so please check into test.txt!n”,n); close(sockfd);} close(filefd); exit(0);} 感謝與收獲 通過這幾次上機實習,使我更加扎實的掌握了有關Linux C編程方面的知識,在設計過程中雖然遇到了一些問題,但經過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經驗不足。實踐出真知,通過編程,使我們掌握的知識不再是紙上談兵。 過而能改,善莫大焉。在課程設計過程中,我們不斷發現錯誤,不斷改正,不斷領悟,不斷獲取。最終的檢測調試環節,本身就是在踐行“過而能改,善莫大焉”的知行觀。這次課程設計終于順利完成了,在設計中遇到了很多問題,最后在老師的指導下,終于游逆而解。在今后社會的發展和學習實踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發現問題所在,然后一一進行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上披荊斬棘,而不是知難而退,那樣永遠不可能收獲成功,收獲喜悅,也永遠不可能得到社會及他人對你的認可! 實踐課誠然是一門專業課,給我很多專業知識以及專業技能上的提升,同時又是一門講道課,一門辯思課,給了我許多道,給了我很多思,給了我莫大的空間。同時,設計讓我感觸很深。使我對抽象的理論有了具體的認識。 我認為,在這學期的課程設計中,不僅培養了獨立思考、動手操作的能力,在各種 其它能力上也都有了提高。更重要的是,在課程設計上,我們學會了很多學習的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰,只有不斷的學習、實踐,再學習、再實踐。這對于我們的將來也有很大的幫助。以后,不管有多苦,我想我們都能變苦為樂,找尋有趣的事情,發現其中珍貴的事情。就像中國提倡的艱苦奮斗一樣,我們都可以在實驗結束之后變的更加成熟,會面對需要面對的事情。 回顧起此課程設計,至今我仍感慨頗多,從理論到實踐,在這段日子里,可以說得是苦多于甜,但是可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,但可喜的是最終都得到了解決。