c#網(wǎng)絡(luò)編程及應(yīng)用課后答案(劉瑞新 著) 機(jī)械工業(yè)出版社
《c#網(wǎng)絡(luò)編程及應(yīng)用課后答案(劉瑞新 著) 機(jī)械工業(yè)出版社》由會(huì)員分享,可在線閱讀,更多相關(guān)《c#網(wǎng)絡(luò)編程及應(yīng)用課后答案(劉瑞新 著) 機(jī)械工業(yè)出版社(55頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 1. C/S結(jié)構(gòu)模式與B/S結(jié)構(gòu)模式的主要區(qū)別是什么? 【解答】 首先,在系統(tǒng)的性能方面。只要擁有可上網(wǎng)的瀏覽器,就可以使用B/S系統(tǒng)。不過,B/S結(jié)構(gòu)的客戶端只能完成瀏覽、查詢、數(shù)據(jù)輸入等簡(jiǎn)單功能,絕大部分工作要由服務(wù)器承擔(dān),這就對(duì)服務(wù)器提出了很高的要求,無形中增加了用戶在這一方面的投入。采用C/S結(jié)構(gòu)時(shí),客戶端和服務(wù)器都承擔(dān)部分工作,有效利用了客戶端和服務(wù)器端的資源,使用戶不必在硬件上有更多的投入。另外,瀏覽器頁面不便于修改,這為用戶定制自己的文件時(shí)帶來了不便,比如用戶想自定義一個(gè)報(bào)表,用B/S結(jié)構(gòu)的系統(tǒng)就比較難完成。 其次,在系統(tǒng)的開發(fā)方面,C/S結(jié)構(gòu)的開發(fā)對(duì)開發(fā)
2、者提出了較高的要求,整個(gè)開發(fā)過程比較復(fù)雜。與B/S結(jié)構(gòu)相比,C/S技術(shù)的歷史更為“悠久”,從技術(shù)成熟度和開發(fā)人員普遍掌握的水平來看更為成熟。 第三,系統(tǒng)升級(jí)方面。C/S結(jié)構(gòu)中若有某一模塊發(fā)生改變,可能要關(guān)聯(lián)到其它模塊的變動(dòng),使系統(tǒng)升級(jí)的成本較大;而B/S結(jié)構(gòu)在開發(fā)、維護(hù)階段幾乎所有的工作都集中在服務(wù)器端,只需更新服務(wù)器端的軟件就可以了。如果系統(tǒng)升級(jí)比較頻繁,那么B/S架構(gòu)的產(chǎn)品就具有維護(hù)工作量少的優(yōu)勢(shì)。 第四,安全性方面。在安全性上,B/S結(jié)構(gòu)則略顯不足,畢竟現(xiàn)在網(wǎng)絡(luò)安全系數(shù)不高,只要擁有密碼,任何人都可以進(jìn)入到用戶的系統(tǒng)中;而C/S結(jié)構(gòu)由于需要特定的客戶端軟件,并且一般來說都要對(duì)
3、客戶端加密,甚至可以限定只有某一臺(tái)計(jì)算機(jī)可以使用這個(gè)客戶端,因而對(duì)安全性有更多的保障。 2. 可以用C#編寫哪些類型的應(yīng)用程序? 【解答】 1) 控制臺(tái)應(yīng)用程序。 2) Windows應(yīng)用程序。 3) 水晶報(bào)表應(yīng)用程序。 4) ASP.NET Web應(yīng)用程序。 5) ASP.NET Web服務(wù)應(yīng)用程序。 6) ASP.NET 水晶報(bào)表Web應(yīng)用程序。 7) 智能設(shè)備應(yīng)用程序。 3. 什么是命名空間?命名空間和類庫的關(guān)系是什么? 【解答】 1) 名稱空間是對(duì)類的一種邏輯上的分組,即將類按照某種關(guān)系或聯(lián)系劃分到不同的名稱空間下
4、。 2) 名稱空間又可以包含其它的名稱空間,例如System.Windows.Forms,是指System名稱空間下有Windows名稱空間,Windows名稱空間下有Forms名稱空間。 3) 所有類庫都在規(guī)定的名稱空間下。 1. C#支持的數(shù)據(jù)類型有那些?與C++相比有哪些特點(diǎn)? 【解答】 C#支持的數(shù)據(jù)類型有: (1) 值類型 包括:簡(jiǎn)單類型、結(jié)構(gòu)類型、枚舉類型。其中,簡(jiǎn)單類型又分為:整型、布爾型、字符型、浮點(diǎn)型、小數(shù)型。 (2) 引用類型 包括:對(duì)象類型、類類型、接口、元數(shù)據(jù)、字符串類型、數(shù)組。 與C++相比,C#的主要特點(diǎn)有:
5、 1) C#語言自C/C++演變而來。但是,它是完全按照面向?qū)ο蟮乃枷雭碓O(shè)計(jì)的,并保證了類型的安全性。 2) C#簡(jiǎn)化了C++在類、名稱空間、方法重載和異常處理等方面的使用。摒棄了C++的復(fù)雜性,使它更易用、更少出錯(cuò)。 3) C#減少了C++的一些特性,不再有宏、多重繼承。特別對(duì)企業(yè)開發(fā)者來說,上述功能只會(huì)產(chǎn)生更多的麻煩而不是效益。 4) C#采用嚴(yán)格的類型安全、版本控制、垃圾收集(garbage collect)等等。所有的這些功能的目標(biāo)都是瞄準(zhǔn)了開發(fā)面向組件的軟件開發(fā)。 5) C#中不再有“::”、“.”、和“->”操作符,僅使用單個(gè)操作符“.”。 6)
6、 C#使用統(tǒng)一的類型系統(tǒng),摒棄了C++多變的類型系統(tǒng)。 7) 在C#中,不能在類的外部定義全局函數(shù)、變量或者是常量等。所有的東西都必須封裝在類中,包括實(shí)例成員或靜態(tài)成員。從而使C#代碼更加易讀且有助于減少潛在的命名沖突。 8) 在C#中,不能使用沒有初始化的變量。從而避免了由于使用不經(jīng)初始化的變量而導(dǎo)致的計(jì)算結(jié)果錯(cuò)誤。 2. C#語言中,值類型和引用類型有何不同? 【解答】 值類型和引用類型的區(qū)別在于,值類型的變量直接存放實(shí)際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對(duì)象的引用。 值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實(shí)際數(shù)據(jù)的地址保存
7、在堆棧中,而實(shí)際數(shù)據(jù)則保存在堆中。注意,堆和堆棧是兩個(gè)不同的概念,在內(nèi)存中的存儲(chǔ)位置也不相同,堆一般用于存儲(chǔ)可變長(zhǎng)度的數(shù)據(jù),如字符串類型;而堆棧則用于存儲(chǔ)固定長(zhǎng)度的數(shù)據(jù),如整型類型的數(shù)據(jù)int(每個(gè)int變量占用四個(gè)字節(jié))。由數(shù)據(jù)存儲(chǔ)的位置可以得知,當(dāng)把一個(gè)值變量賦給另一個(gè)值變量時(shí),會(huì)在堆棧中保存兩個(gè)完全相同的值;而把一個(gè)引用變量賦給另一個(gè)引用變量,則會(huì)在堆棧中保存對(duì)同一個(gè)堆位置的兩個(gè)引用,即在堆棧中保存的是同一個(gè)堆的地址。在進(jìn)行數(shù)據(jù)操作時(shí),對(duì)于值類型,由于每個(gè)變量都有自己的值,因此對(duì)一個(gè)變量的操作不會(huì)影響到其它變量;對(duì)于引用類型的變量,對(duì)一個(gè)變量的數(shù)據(jù)進(jìn)行操作就是對(duì)這個(gè)變量在堆中的數(shù)據(jù)進(jìn)行操
8、作,如果兩個(gè)引用類型的變量引用同一個(gè)對(duì)象,實(shí)際含義就是它們?cè)诙褩V斜4娴亩训牡刂废嗤?,因此?duì)一個(gè)變量的操作就會(huì)影響到引用同一個(gè)對(duì)象的另一個(gè)變量。 3. 結(jié)構(gòu)和類的區(qū)別是什么? 【解答】 1) 結(jié)構(gòu)是一個(gè)值類型,保存在棧上,而類是一個(gè)引用類型,保存在受管制的堆上。 2) 對(duì)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行操作比對(duì)類或?qū)ο笾械臄?shù)據(jù)進(jìn)行操作速度要快。 3) 一般用結(jié)構(gòu)存儲(chǔ)多種類型的數(shù)據(jù),當(dāng)創(chuàng)建一個(gè)很多類或?qū)ο蠊灿玫男⌒蛯?duì)象時(shí),使用結(jié)構(gòu)效率更高。 4. C#中的數(shù)組類型有何特點(diǎn)? 【解答】 1) 數(shù)組一般用于存儲(chǔ)同一種類型的數(shù)據(jù),包括Object類型。 2) 數(shù)組
9、是一種引用類型,而不是值類型。 3) C#中除了可以有一維數(shù)組、多維數(shù)組外,還有交錯(cuò)型數(shù)組。 5. C#中不同整型之間進(jìn)行轉(zhuǎn)換的原則是什么? 【解答】 在整型之間進(jìn)行轉(zhuǎn)換時(shí),小范圍類型可以隱式轉(zhuǎn)換為大范圍類型,但大范圍類型轉(zhuǎn)換為小范圍類型時(shí)需要使用顯式轉(zhuǎn)換。 6. 簡(jiǎn)述裝箱和拆箱的過程。 【解答】 裝箱是將值類型隱式地轉(zhuǎn)換為object類型或者轉(zhuǎn)換為由該值類型實(shí)現(xiàn)了的接口類型。裝箱一個(gè)數(shù)值會(huì)為其分配一個(gè)對(duì)象實(shí)例,并把該數(shù)值拷貝到新對(duì)象中。拆箱是顯式地把object類型轉(zhuǎn)換成值類型,或者把值類型實(shí)現(xiàn)了的接口類型轉(zhuǎn)換成該值類型。 7. 下列寫法哪些是
10、錯(cuò)誤的?為什么? 1) if (nMyValue1=5) i=1; 2) if(nMyValue2==1)i=1; 3) int[] myInt={1,2,3}; foreach(int test in myInt) { test++; Console.WriteLine(temp); } 4) int[] myInt1={1,2,3}; foreach(int test in myInt1) { Console>WriteLine(test); } 【解答】 1) 錯(cuò)誤。if中的條件表達(dá)式結(jié)果不是布爾型
11、。 2) 正確。 3) 錯(cuò)誤一:temp沒有定義。 錯(cuò)誤二:在foreach塊內(nèi),test作為枚舉成員是只讀的,不能使用test++修改其值。 4) 錯(cuò)誤。Console后應(yīng)該是點(diǎn),而不應(yīng)該是大于號(hào)。 8. 錯(cuò)誤和異常有什么區(qū)別,為什么要進(jìn)行異常處理,用于異常處理的語句有哪些? 【解答】 錯(cuò)誤是指在執(zhí)行代碼過程中發(fā)生的事件,它中斷或干擾代碼的正常流程并創(chuàng)建異常對(duì)象。當(dāng)錯(cuò)誤中斷流程時(shí),該程序?qū)L試尋找異常處理程序(一段告訴程序如何對(duì)錯(cuò)誤做出響應(yīng)的代碼),以幫助程序恢復(fù)流程。換句話說,錯(cuò)誤是一個(gè)事件,而異常是該事件創(chuàng)建的對(duì)象。 當(dāng)使用短語“產(chǎn)生異?!?/p>
12、時(shí),表示存在問題的方法發(fā)生錯(cuò)誤,并創(chuàng)建異常對(duì)象(包含該錯(cuò)誤的信息及發(fā)生的時(shí)間和位置)來響應(yīng)該錯(cuò)誤。導(dǎo)致出現(xiàn)錯(cuò)誤和隨后異常的因素包括用戶錯(cuò)誤、資源失敗和編程邏輯失敗。這些錯(cuò)誤與代碼實(shí)現(xiàn)特定任務(wù)的方法有關(guān),而與該任務(wù)的目的無關(guān)。 如果不進(jìn)行異常處理,即不對(duì)錯(cuò)誤做出響應(yīng),程序的健壯性就會(huì)大打折扣,甚至無法保證正常運(yùn)行,所以必須要進(jìn)行異常處理。 用于異常處理的語句有:try-catch語句、try-catch-finally語句、throw語句。 9. 編寫一個(gè)控制臺(tái)應(yīng)用程序,輸出1到5的平方值,要求: 1) 用for語句實(shí)現(xiàn)。 2) 用while語句實(shí)現(xiàn)。 3)
13、用do-while語句實(shí)現(xiàn)。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.Text; namespace outputSquareValue { class Program { static void Main() { //用for語句實(shí)現(xiàn) for (int i = 1; i <= 5; i++) { Console.WriteLine("{0}的平方值為{1}", i, i *
14、i); } //用while語句實(shí)現(xiàn) int j = 0; while (j++ < 5) { Console.WriteLine("{0}的平方值為{1}", j, j * j); } //用do-while語句實(shí)現(xiàn) int k = 1; do { Console.WriteLine("{0}的平方值為{1}", k, k * k); } while (k++ < 5); Console.ReadLine(); } } } 10. 編寫一個(gè)控制臺(tái)應(yīng)
15、用程序,要求用戶輸入5個(gè)大寫字母,如果用戶輸入的信息不滿足要求,提示幫助信息并要求重新輸入。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.Text; namespace inputCapitalLetter { class Program { static void Main() { bool ok = false; while (ok == false) { Console.Wr
16、ite("請(qǐng)輸入5個(gè)大寫字母:"); string str = Console.ReadLine(); if (str.Length != 5) { Console.WriteLine("你輸入的字符個(gè)數(shù)不是5個(gè),請(qǐng)重新輸入。"); } else { ok = true; for (int i = 0; i < 5; i++) { char c = str[i]; if (c < 'A' || c > 'Z') { Console.WriteLine("第{0}個(gè)字符“{1}”不是大
17、寫字母,請(qǐng)重新輸入。", i + 1, c); ok = false; break; } } } } } } } 11. 編寫一個(gè)控制臺(tái)應(yīng)用程序,要求完成下列功能。 1) 接收一個(gè)整數(shù)n。 2) 如果接收的值n為正數(shù),輸出1到n間的全部整數(shù)。 3) 如果接收的值為負(fù)值,用break或者return退出程序。 4) 轉(zhuǎn)到(1)繼續(xù)接收下一個(gè)整數(shù)。 【解答】 以下是引用片段: using System; using System.Collections.Generic;
18、 using System.Text; namespace testOutput { class Program { static void Main() { while (true) { Console.Write("請(qǐng)輸入一個(gè)整數(shù)(負(fù)值結(jié)束):"); string str = Console.ReadLine(); try { int i = Int32.Parse(str); if (i < 0) break; for (int j = 1; j <= i; j++)
19、 Console.WriteLine(j); } catch { Console.WriteLine("你輸入的不是數(shù)字或超出整數(shù)的表示范圍,請(qǐng)重新輸入"); } } } } } 12. 編寫一個(gè)控制臺(tái)應(yīng)用程序,求1000之內(nèi)的所有“完數(shù)”。所謂“完數(shù)”是指一個(gè)數(shù)恰好等于它的所有因子之和。例如,6是完數(shù),因?yàn)?=1+2+3。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.Text;
20、 namespace completeNumber { class Program { static void Main(string[] args) { for (int i = 2; i <= 1000; i++) { int s = 1; string str = "1"; for (int j = 2; j <= (int)Math.Sqrt(i); j++) { if (j * (i / j) == i) { if (j != i / j) { s
21、+= j + i / j; str += string.Format("+{0}+{1}", j, i / j); } else { s += j; str += string.Format("+{0}", j); } } } if (s == i) Console.WriteLine("{0}={1}", i, str); } Console.ReadLine(); } } } 1. 編寫一個(gè)控制臺(tái)應(yīng)用程序,完成下列功能。 1) 創(chuàng)建一個(gè)類,用無參數(shù)的構(gòu)造函數(shù)輸出該
22、類的類名。 2) 增加一個(gè)重載的構(gòu)造函數(shù),帶有一個(gè)string類型的參數(shù),在此構(gòu)造函數(shù)中將傳遞的字符串打印出來。 3) 在Main方法中創(chuàng)建屬于這個(gè)類的一個(gè)對(duì)象,不傳遞參數(shù)。 4) 在Main方法中創(chuàng)建屬于這個(gè)類的另一個(gè)對(duì)象,傳遞一個(gè)字符串“This is a string.”。 5) 在Main方法中聲明類型為這個(gè)類的一個(gè)具有5個(gè)對(duì)象的數(shù)組,但不要實(shí)際創(chuàng)建分配到數(shù)組里的對(duì)象。 6) 寫出運(yùn)行程序應(yīng)該輸出的結(jié)果。 【解答】 以下是引用片段: using System; class Test1 { public Test1()
23、 { Console.WriteLine(this); } public Test1(string str) { Console.WriteLine(str); } public static void Main() { Test1 t1 = new Test1(); Test1 t2 = new Test1("This is a string."); Test1[] t3 = new Test1[5]; } } 輸出結(jié)果: Test1 This is a str
24、ing. 2. 編寫一個(gè)控制臺(tái)應(yīng)用程序,定義一個(gè)類MyClass,類中包含有public、private以及protected數(shù)據(jù)成員及方法。然后定義一個(gè)從MyClass類繼承的類MyMain,將Main方法放在MyMain中,在Main方法中創(chuàng)建MyClass類的一個(gè)對(duì)象,并分別訪問類中的數(shù)據(jù)成員及方法。要求注明在試圖訪問所有類成員時(shí)哪些語句會(huì)產(chǎn)生編譯錯(cuò)誤。 【解答】 以下是引用片段: using System; class MyClass { public int i; private int j; protected int k
25、; public void method1() { Console.WriteLine("public method."); } private void method2() { Console.WriteLine("private method."); } protected void method3() { Console.WriteLine("protected method."); } } class MyMain : MyClass { public sta
26、tic void Main() { MyClass t = new MyClass(); Console.WriteLine("i={0}", t.i); Console.WriteLine("j={0}", t.j); //會(huì)出現(xiàn)編譯錯(cuò)誤,私有成員不允許在其它類中訪問 Console.WriteLine("k={0}", t.k); //會(huì)出現(xiàn)編譯錯(cuò)誤,應(yīng)該創(chuàng)建MyMain的對(duì)象,然 //后通過MyMain的對(duì)象訪問 t.method1(); t.method2(); //會(huì)出現(xiàn)編譯錯(cuò)誤,私有的方法不允許在其它類中調(diào)用
27、t.method3(); //會(huì)出現(xiàn)編譯錯(cuò)誤,應(yīng)該創(chuàng)建MyMain的對(duì)象,然后通過MyMain的 //對(duì)象調(diào)用該方法 } } 3. 創(chuàng)建一個(gè)類包含有protected數(shù)據(jù)。在相同的文件里創(chuàng)建第二個(gè)類,用一個(gè)方法操縱第一個(gè)類里的protected數(shù)據(jù)。 【解答】 以下是引用片段: using System; class Class1 { protected int i = 5; protected void MyMethod() { Console.WriteLine("protected method.
28、"); } } class Class2 : Class1 { private void NewMethod() { Console.WriteLine(this.i); this.i += 10; Console.WriteLine(this.i); } public static void Main() { Class2 t = new Class2(); t.NewMethod(); } } 4. 分別寫出下列語句執(zhí)行的結(jié)果。 1) Consol
29、e.WriteLine("{0}--{0:p}good",12.34F); 2) Console.WriteLine("{0}--{0:####}good",0); 3) Console.WriteLine("{0}--{0:00000}good",456); 【解答】 12.34--1,234.00%good 0--good 456--00456good 5. 編寫一個(gè)控制臺(tái)應(yīng)用程序,計(jì)算 要求精度為10-8。 【解答】 以下是引用片段: using System; class Test5 { public
30、 static void Main() { int n = 50; double x = 3; double s = 0; double a = 1; for (int i = 1; i <= n; i++) { a *= i; s += Math.Pow(-1, i + 1) * Math.Pow(x, i) / a; } Console.WriteLine("n={0},s={1:0.00000000}", n, s); } } 6. 編寫一個(gè)控制臺(tái)應(yīng)用程序,接收一個(gè)長(zhǎng)度大于3的字
31、符串,完成下列功能 1) 輸出字符串的長(zhǎng)度。 2) 輸出字符串中第一個(gè)出現(xiàn)字母a的位置。 3) 在字符串的第3個(gè)字符后面插入子串“hello”,輸出新字符串。 4) 將字符串“hello”替換為“me”,輸出新字符串。 5) 以字符“m”為分隔符,將字符串分離,并輸出分離后的字符串。 【解答】 以下是引用片段: using System; class Test6 { public static void Main() { string str = ""; while (str.Length <= 3)
32、 { Console.Write("請(qǐng)輸入一個(gè)長(zhǎng)度大于3的字符串:"); str = Console.ReadLine(); } //(1) Console.WriteLine("字符串的長(zhǎng)度為:{0}", str.Length); //(2) int i = str.IndexOf('a'); if (i > -1) { Console.WriteLine("第一個(gè)出現(xiàn)字母a的位置是:{0}", i); } else { Console.WriteLine("字符串中不包含字
33、母a。"); } //(3) string str1 = str.Insert(3, "hello"); //在第3個(gè)(初始序號(hào)為)字符前插入hello Console.WriteLine("插入hello后的結(jié)果為:{0}", str1); //(4) string str2 = str1.Replace("hello", "me"); Console.WriteLine("將hello替換為me后的結(jié)果為:{0}", str2); //(5) string[] arr = str2.Split('m'); Co
34、nsole.WriteLine("以m為分隔符分離后的字符串有:"); for (int j = 0; j < arr.Length; j++) { Console.WriteLine(arr[j]); } } } 1. 使用保持連接的方式編寫程序,計(jì)算各年級(jí)平均成績(jī),并顯示結(jié)果。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;
35、using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace 習(xí)題8_6_1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //添加Button按鈕在ListBox中顯示結(jié)果 private void button1_Click
36、(object sender, EventArgs e) { listBox1.Items.Add("年級(jí) 平均成績(jī)"); string connectionString = Properties.Settings.Default.MyDatabaseConnectionString; //根據(jù)連接字符串創(chuàng)建SqlConnection實(shí)例 SqlConnection conn = new SqlConnection(connectionString); //創(chuàng)建SqlCommand實(shí)例,并設(shè)置SQL語句和使用的連接實(shí)例 SqlComman
37、d cmd = new SqlCommand(); cmd.CommandText = "select substring(學(xué)號(hào),1,2) as 年級(jí),avg(成績(jī)) as 平均成績(jī) from MyTable2 group by substring(學(xué)號(hào),1,2)"; cmd.Connection = conn; try { conn.Open(); SqlDataReader r = cmd.ExecuteReader(); while (r.Read() == true) { listBox1.Items.Add(st
38、ring.Format("{0}級(jí) {1}", r[0], r[1])); } r.Close(); } catch (Exception err) { MessageBox.Show(err.Message, "計(jì)算成績(jī)失敗"); } finally { conn.Close(); } } } } 2. 使用保持連接的方式編寫程序,查詢MyTable2中不及格學(xué)生的學(xué)號(hào),姓名,性別,成績(jī)。并將結(jié)果在ListBox中顯示出來。 【解答】 以下是引用片段: usin
39、g System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace 習(xí)題8_6_2 { public partial class Form1 : Form { public
40、 Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { listBox1.Items.Add(" 學(xué)號(hào) 姓名 性別 成績(jī)"); string connectionString = Properties.Settings.Default.MyDatabaseConnectionString; //根據(jù)連接字符串創(chuàng)建SqlConnection實(shí)例 SqlConnection conn = new S
41、qlConnection(connectionString); //創(chuàng)建SqlCommand實(shí)例,并設(shè)置SQL語句和使用的連接實(shí)例 SqlCommand cmd = new SqlCommand(); cmd.CommandText = "Select 學(xué)號(hào),姓名,性別, 成績(jī) From MyTable2 Where (成績(jī)<60)"; cmd.Connection = conn; try { conn.Open(); SqlDataReader r = cmd.ExecuteReader(); while (r.
42、Read() == true) { listBox1.Items.Add( string.Format("{0} {1} {2} {3}", r[0], r[1], r[2], r[3])); } r.Close(); } catch (Exception err) { MessageBox.Show(err.Message, "查詢成績(jī)失敗"); } finally { conn.Close(); } } } } 3. 編寫程序,以“[編碼]名稱”的樣式在co
43、mboBox1中顯示MyTable1的內(nèi)容。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace 習(xí)題8_6_3 { pu
44、blic partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string connectionString = Properties.Settings.Default.MyDatabaseConnectionString; //根據(jù)連接字符串創(chuàng)建SqlConnection實(shí)例 SqlConnection conn =
45、new SqlConnection(connectionString); //創(chuàng)建SqlCommand實(shí)例,并設(shè)置SQL語句和使用的連接實(shí)例 SqlCommand cmd = new SqlCommand(); cmd.CommandText = "Select * From MyTable1"; cmd.Connection = conn; try { conn.Open(); SqlDataReader r = cmd.ExecuteReader(); while (r.Read() == true) {
46、 comboBox1.Items.Add(string.Format("[{0}] {1}", r[0], r[1])); } comboBox1.SelectedIndex = 0; r.Close(); } catch (Exception err) { MessageBox.Show(err.Message, "顯示數(shù)據(jù)失敗"); } finally { conn.Close(); } } } } 4. 在畫線處填上合適的內(nèi)容,使程序變得正確完整。 以下是引用
47、片段: string connString="server=localhost;Integrated Security=SSPI;database=pubs"; SqlConnection conn=____________________________ string strsql="select * from MyTable2"; SqlDataAdapter adapter=new SqlDataAdapter(_____________); dataset=new DataSet(); adapter.Fill(______________
48、__,"MyTable2"); this.dataGridView1.DataSource=dataset.Tables["MyTable2"]; 【解答】 以下是引用片段: string connString="server=localhost;Integrated Security=SSPI;database=pubs"; SqlConnection conn= new SqlConnection(Properties.Settings.Default.MyDatabaseConnectionString); string strsql="sele
49、ct * from MyTable2"; SqlDataAdapter adapter=new SqlDataAdapter(conn); dataset=new DataSet(); adapter.Fill(dataset,"MyTable2"); this.dataGridView1.DataSource=dataset.Tables["MyTable2"]; 5. 已知數(shù)據(jù)庫中定義了一張person表,表的數(shù)據(jù)結(jié)構(gòu)如下: 字段名稱字段類型字段含義 id數(shù)字編號(hào) xm文本姓名 xb文本性別 nl數(shù)字年齡 zip
50、文本郵政編碼 用編寫代碼的方法在DataGridView中顯示該數(shù)據(jù)表中年齡大于18的所有紀(jì)錄,顯示時(shí)以編號(hào)的升序排序,要求禁止用戶編輯數(shù)據(jù)。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Syste
51、m.Data.SqlClient; namespace 習(xí)題8_6_5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string connectionstring = Properties.Settings.Default.MyDatabaseConnectionString ;
52、 SqlConnection conn = new SqlConnection(connectionstring); try { conn.Open(); SqlDataAdapter adapter = new SqlDataAdapter( "select id,xm,xb,nl from person where nl > 18 order by id", conn); DataSet dataset = new DataSet(); //如果不指定表名,則系統(tǒng)自動(dòng)生成一個(gè)默認(rèn)的表名 adapter.Fill(data
53、set, "person"); //可以使用索引引用生成的表 dataGridView1.DataSource = dataset.Tables["person"]; adapter.Dispose(); } catch (Exception err) { MessageBox.Show(err.Message); } finally { conn.Close(); } } private void Form1_Load(object sender, EventArgs e)
54、 { //不允許用戶直接在最下面的行添加新行 dataGridView1.AllowUserToAddRows = false; //不允許用戶直接按Delete鍵刪除行 dataGridView1.AllowUserToDeleteRows = false; } } } 6.例8-18的存儲(chǔ)過程定義中,將“@surname nvarchar(2),”改為“@surname nchar(2),”,是否仍然能夠得到正確結(jié)果,為什么? 【解答】 不一定。因?yàn)槿绻麄鬟f的參數(shù)值為“王”,在存儲(chǔ)過程中會(huì)自動(dòng)變?yōu)椤巴?”。 7
55、. 調(diào)用存儲(chǔ)過程,設(shè)計(jì)程序完成下列功能:任意給出一個(gè)漢字,統(tǒng)計(jì)MyTable2中所有包含該漢字的人數(shù),并顯示統(tǒng)計(jì)結(jié)果。 【解答】 以下是引用片段: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClien
56、t; namespace 習(xí)題8_6_7 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(Properties.Settings.Default.MyDatabaseConnectionString)
57、; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; //設(shè)置SQL語句為存儲(chǔ)過程名,命令類型為存儲(chǔ)過程 cmd.CommandText = "SelectFilterStudentsNum"; cmd.CommandType = CommandType.StoredProcedure; //添加存儲(chǔ)過程中參數(shù)需要的初始值,注意參數(shù)名要和存儲(chǔ)過程定義的參數(shù)名相同 if( textBox1.Text=="") { MessageBox.Show("請(qǐng)輸入有效信
58、息","錯(cuò)誤"); textBox1.Focus(); return ; } cmd.Parameters.AddWithValue("@surname", textBox1.Text); cmd.Parameters.AddWithValue("@record", 0); //指定哪些參數(shù)需要返回結(jié)果 cmd.Parameters["@record"].Direction = ParameterDirection.Output; try { conn.Open(); //執(zhí)行存儲(chǔ)過程 cmd.Ex
59、ecuteNonQuery(); //顯示返回的結(jié)果 MessageBox.Show(string.Format("有{0}條含 {1} 的記錄", cmd.Parameters["@record"].Value,textBox1.Text)); } catch (Exception err) { MessageBox.Show(err.Message); } finally { conn.Close(); } } } } 1. 簡(jiǎn)述三類二維坐標(biāo)系統(tǒng)之間的相同點(diǎn)和區(qū)別。
60、 【解答】 GDI+中的二維笛卡兒坐標(biāo)系統(tǒng)分為三類:全局坐標(biāo)系統(tǒng)、頁面坐標(biāo)系統(tǒng)和設(shè)備坐標(biāo)系統(tǒng)。 三類坐標(biāo)系統(tǒng)的相同點(diǎn):它們都有坐標(biāo)原點(diǎn)以及向右和向下的x軸和y軸。 三類坐標(biāo)系統(tǒng)的區(qū)別:全局坐標(biāo)系統(tǒng)可以進(jìn)行旋轉(zhuǎn)、平移等操作。頁面坐標(biāo)系統(tǒng)與設(shè)備坐標(biāo)系統(tǒng)都是以設(shè)備的左上角為坐標(biāo)原點(diǎn),X水平向右為正,Y垂直向下為正。頁面坐標(biāo)系統(tǒng)與設(shè)備坐標(biāo)系統(tǒng)的差異在于X,Y的單位不同:頁面坐標(biāo)系中的X,Y單位可以任意設(shè)定,如英寸、毫米等;而設(shè)備坐標(biāo)系中,只有一種單位,那就是點(diǎn)(point)或者像素(pixel)。頁面坐標(biāo)系是不能更改的,它是一個(gè)參照標(biāo)準(zhǔn),將全局坐標(biāo)最終轉(zhuǎn)換為設(shè)備坐標(biāo)。 2
61、. 簡(jiǎn)述創(chuàng)建Graphics類對(duì)象的三種方法。 【解答】 (1) 在窗體或控件的Paint事件中直接引用Graphics對(duì)象。在為窗體創(chuàng)建繪制代碼時(shí),一般使用此方法獲取對(duì)圖像的引用。 (2) 從當(dāng)前窗體獲取對(duì)Graphics對(duì)象的引用。注意這種對(duì)象只有在處理當(dāng)前Windows窗體消息的過程中有效。如果想在已經(jīng)存在的窗體或控件中繪圖,可以使用此種方法。 (3) 從繼承自圖像的任何對(duì)象創(chuàng)建Graphics對(duì)象。這個(gè)方法適用于需要更改已經(jīng)存在的 圖像。 3. 同時(shí)創(chuàng)建多個(gè)矩形并用紅黑相間的顏色進(jìn)行填充。 【解答】 (1) 新建一個(gè)Windows應(yīng)用程序
62、,命名為“FillMultiRectangle”,調(diào)整窗體到適當(dāng)大小。更改“Form1.cs”為“FormFillMultiRectangle.cs”。 (2) 切換到代碼方式,添加名稱空間引用: using System.Drawing.Drawing2D; (3) 雙擊窗體的屬性面板里事件頁中的Paint事件,添加FormFillMultiRectangle_Paint事件代碼。 以下是引用片段: private void FormFillMultiRetangle_Paint(object sender, PaintEventArgs e) {
63、 Graphics g = e.Graphics; HatchBrush mybrush=new HatchBrush (HatchStyle.Cross,Color .Red,Color .Black); Rectangle[] rect= { new Rectangle( 0, 0, 50, 100), new Rectangle(50,100, 100, 50), new Rectangle(150, 150, 50, 100), }; g.FillRectangles(mybrush, rect); g.Dispo
64、se(); } (4) 結(jié)果如圖所示。 4. 使用Label控件分別以矩形、橢圓和圓形的方式顯示圖片,并保證圖片完全由繪制對(duì)象的邊框決定。 【解答】 (1)新建一個(gè)Windows應(yīng)用程序,命名為“ShowImageExe”,調(diào)整窗體到適當(dāng)大小。更改“Form1.cs”為“FromShowImageExe.cs”。 (2)切換到代碼方式,添加名稱空間引用: using System.Drawing.Drawing2D; (3) 添加四個(gè)Button控件分別命名為“buttonOpenFile”、“buttonRectangle”、“but
65、tonEllipse”、“buttonRound”,以及一個(gè)openFileDiolog和label控件。 (4)在Form類下聲明兩個(gè)私有變量filename和flag,分別用來記錄打開的文件名和判斷哪個(gè)按鈕的click時(shí)間被觸發(fā)。 private string filename = ""; private int flag = 0; (5) 添加【打開文件】按鈕的click事件 以下是引用片段: private void buttonOpenFile_Click(object sender, EventArgs e) { openFileDi
66、alog1.ShowDialog(); filename = openFileDialog1.FileName; label1.Refresh(); } (6) 在label1控件的paint事件下添加如下代碼: 以下是引用片段: private void label1_Paint(object sender, PaintEventArgs e) { if (filename.Trim() == "") return; Bitmap mybitmap = new Bitmap(filename); Graphics g = e.Graphics; TextureBrush mybrush = new TextureBrush(mybitmap,WrapMode.Clamp); //保證圖片完全由繪制對(duì)象的邊框決定 switch (flag) { case 1: g.FillRectangle(mybrush, label1.ClientRectangle);
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024《增值稅法》全文學(xué)習(xí)解讀(規(guī)范增值稅的征收和繳納保護(hù)納稅人的合法權(quán)益)
- 2024《文物保護(hù)法》全文解讀學(xué)習(xí)(加強(qiáng)對(duì)文物的保護(hù)促進(jìn)科學(xué)研究工作)
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見問題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說話方式
- 汽車銷售績(jī)效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對(duì)成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營(yíng)銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩