Lập trình ngôn ngữ C# từ cơ bản đến nâng cao: Phần 2
lượt xem 95
download
Tài liệu Lập trình C# từ cơ bản đến nâng cao: Phần 2 gồm nội dung từ chương 8 đến chương 13. Nội dung phần này trình bày các nội dung về file, chuỗi kĩ tự, multithreading, lập trình Windows với C#, lập trình cơ sở dữ liệu.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình ngôn ngữ C# từ cơ bản đến nâng cao: Phần 2
- ChươNq 8 . F ì I es Khi cần lưii dữ liệu vào đĩa, cung cấp một cơ chế để thite hiện giống như mọi ngôn ngữ khác. Có hai cách ghi và đọc dử liệu vào íiles; kiểu file íext và kiểu file nhị phân. 8. 1 . G H I/Đ Ọ C F IL E T E X T ỉ
- s t a t i c void Main(stríng( ] args) { using (StreamVỉriter sw = new StreêưnWriter ( f i l e l ) ) { sw.Write {•'This i s a te x t; a “ "); sw.W riteLine(â); sw.WriteLine (b); sví.VíriteLine (k t); sw.Close (); ì StreamReader s r l " new Stream R eađ er(filel); s t r in g input; w h ile ((in p u t = srl.R eadL ine( ) ) ! = null) Consoĩe.W riteLine(input); ) Console.WriteLine("Ket th u c!")! s r l.C io s e (); Console. ReađLine{) ; } } íSkổIí quả: This ỉs a text; a - 123.456 789 M Ket thuc. Chú ý: Một cách khác để ghi dữ iiệu vào file. Tniớc hếỉ phải khai báo biến file: StreanMriter sw; Tạo tìle text nhờ hàm CreateYextQ: s t a t l c s t r in g f i l e l * " c : \ \ t e s t f i l e . t x t " ; sw •= F i l e .C r e a t e T e x t ( f i l e l) ; 1 0 2
- Ghi dữ liệu vào file: sw .W riteLinerThis i s a t e x t ." ) ; Sau khi ghi xong dữ liệu cần phải đóng file lại. SM.Close 0 ; Đọc dữliệu từíiie: Khai báo đối tưỢng file: StreanReader s r l; Mở file: s t r in g input; s r l “ F ile .O p e n T e x t ( f ile l) ; Đọc file: input=srl.ReadToEnd(); Hiển ữiị dữ liệu sau khi đọc: Console.W riteLíne(input); I ? Ui dụ8.2. using System; using System.10; c la s s FileText { s t a t i c s tr in g f i i e l = "c : \ \ t e s t f i l e . t x t " ; s t d t i c void Main(strlng[ 1 args) i StreamHritec sw; / / ghi du l i e u vao f í l e sw = F ile .C r e a t e T e x t (f iie l) ; sw.WriteLine("This i s a t e x t ." ) ; sw.WriteLine{"Dai hoc Bach Khoa Ha Noi."); sw.WriteLine("Trung tam Genetic Singapore."); sw.WriteLine(123.456); SM.Close(); StreamReader s r l ; / / doc du l i e u tu f i l e / / = new StreamReader ( f i l e l ) ; * 103
- s t r in g input; s r l * F ile .O p e n T e x t ( f ile l) ; input « srl.ReadToEnđ0 ; C onsole.W riteL ine(input); Console .VíriteLine (* The end o f the stream!” ); * s r l.C lo s e 0 ; C onsole.ReadLine(); } } H k ể 'í quá: Thìs is a text Daí hoc Bach Khoa Ha Noi Trung tam Genetic Singapore 123.456 Ta cũng có thể đọc file tíieo các dòng kế tiếp như đoạn mã dưới đây: StreamReader sr; s t r in g input; s r “ F ile .O p e n T e x t ( f ile l) ; while-(true) if ( i n p u t »» n u lĩ) break; C onsole.WriteLine(in p u t); } sr .C lo s e O ; s Ví dụ 8.3. using System; . using System. 10; • , using System.Text; c la s s FileText { s t a t í c s tr in g f i l e l = "c : \ \ t e s t f i i e . t x t " ; 104
- s t a t i c doubie a * 123.456; s t a t i c in t b 789; s t â t i c char * ’K'; s t a t i c void Main (stringỉ ) args) { using (5treamWriter sw « new StreamVíriter (f i l e l ) I sw.Write ("This i s a te x t; a - ; sw.WriteLine (a ); sw.VíriteLine (b); 5 W riteLine(kt); ,W sw.Clos€ (); ) StreamReaàer sr; s tr in g input; sr « File.OpenText ( f i l e l ); w hile(true) { input * sr.ReadLine(); if ( in p u t “ null) break; Console-W riteLine(input); 1 Console.WriteLíne (’*Ket thuc !'*); sr.C lo se 0 ; Consoie.ReadLine(); quá: This is a text; a = 123,456 789 M Ket Ihuc. 105
- 8. 2. G H I/Đ Ọ C FILE NHỊ PH Â N Việc ghi/đọc dữ liệu của file nhị phân có nhiều ưu điểm hcAi ỉile text vì bảo mật file cao hơn. ở đây sỗ trình bày cách ghi/đọc dữ liệu cho một byte và cách ghi/đọc dữ liệu cho một đối tượng chúÈi nhiều trường dữ iiệu. - Ghi dữ liệu vào file kiểu byte: + Giả sử ta khai báo một biến mảng kiểu byte [ ] b l = { 1, 2, 3, 4, 255} ; + Khai báo đối tượng để ghì dữ liệu vào file "testbin.dat" ở ổ đĩa C; F i l e S t r e a m ( " c : \ \ t e s t b i n . d a t ” , FileMode.OpenOrCreate, P ile A c c e s s .W r ite , P iỉe S h a r e .N o n e ); + Thựt hiện quá tìình ghi các phần tử của mảng số b l có kiểu byte: foreach(byte bnext in bl) { sw.WríteByte(bnext); } Sau khi ghi xong, ta phải đóng fiie )ại. sw .C lo se(); - E)ọc dữ liệu từ fi)e kiểu byte; + Mở file để đọc: F ile I n fo fr » new F ile In fo r c : \ \ t e s t b i n .d a t ' ' ); stream strm ■ fr.OpenReađ
- & Ví dụ 8.4. Ví dụ này cho phép ta ghi và đọc các số có kiểu byte (giá trị 0 ^ 255). using System; using Sỵsteni.IO; c ỉ a s s P ileb in / / c a c so kieu bỵte { s t a t i c void Main (stringl ] args) { //G h i du l i e u tu f i i e vo i so kieu byte(0 4- 255) . b yte [ ] b l ^ ị 255, 33, 44, 55, 6 6 } ; P ileS trea m sw = new F ileStream (*'c : \ \ t e s t b i n . dat” ,' rileMode.OpenOrCreate, F i l e A c c e s s , Writ 6 r F ile S h a r e .N o n e ); foreach(byte bnext in bl) í sw.W riteByte(bnext); sw.Close (>; / / Doc đu ĩie u tu f i l e F iie I n fo f * new F ile In fo (” c : \ \ t e s t b i n .dât” ); stream strm » f .OpenRead(); in t i/ w h ile(tru e) . { i = s t r m .R e a d B y t e 0 / i f ( i « - 1 ) breâk/ C onsole.W riter{ 0,4) i); ) stm ì-C lose {) / Consoie. ReadLine()/ ) } ^ ^ K ể t quả: 255 33 44 55 66 107
- Ta có thể thực hiện việc ghi/đọc dữ liệu của nhiều kiểu dữ liệu khác nhau bằng file nhị phân. - Ghi dữ liệu từ íile nhị phân; s t r i n o f i l e l = " c :\\F ile B in l.d a t" ; FileStreâfn f i l e l ; s t r in g name; //d ữ l i ê u thành viên double Sâlary; //d ừ l i ê u thành viên / / khai bảo đ 6i tượng wf cho v iê c ghi vào f i l e nhị phán B inaryW riter wf * new B i n a r ỵ W r i t e r ; / / Các hàm Write {) để ghi từng thảnh vỉén wf,Write(name); w f.W rite(salary) / “ Đọc dữ liệu từ íilc nhị phân: Khai báo file cần đọc: riieStream f i l e l ; Khai báo đối tưỢng rf cho việc đọc: BinarỵReađer r f « new B in a ry R ea d er(filô l); Các hàm để đọc dữ liệu nhị phân: name “ rf^R eadstring{); s a la r y « r f . ReadDoiable (); Phụ thuộc vào kiểu khai báo từng dữ liệu mà ta có các hàm đọc dữ liệu khác nhâu. b y te b l; b l * rfrP eâd B y te0 ; char ch l; ch l « rf.ReadChar(); decimâl d l; d l * rf.ReađDecimal(); double d2; d2 « r f . ReadDoưble(); f l o a t f l ; f l » r f.R e a d s in g le 0 ; i n t a; a * rf,R e a d In t3 2 (); long b; b * rf• R e a d ln t6 4 í); sb y te s b l / sb l * r f •ReađSByteO; u in t u i l ; u i l “ rf-R eadưlnt32{); ulong u l l ; u l l = rf.ReadUInt640 ; 108
- Vi dụ 8.5. using System; using System.10; c la s s FiieBin2 ( p riv a te s tr in g name; p riv a te in t age; p riv a te double salary; public FileBin2() I name “ agè = 0 ; salary = ũ; } public F iÌ€ B ir2 (strin g name, int âge, đouble Sâlary) { this.name = name; t h is .a g e * age/ t h i s . s â l a r y » Sâlary; ) public void Inputo ( Console.Vírite ("\ nNhap ten: **); name * Console.ReadLine0 ; Consoỉe. W rite("Nhap t u o i : " ); age = Int32»Parse(Console.ReadLine ( ) ) ; C onsole,W rite("Nhap ĩuong: ” ); sa la ry = Double. Parse(ConsoÌe.ReadLine()); ) public void Show() Console.WriteLine(’'Ten: *'+name+''; Tuoi: ’.'+age); 109
- C onsole.W riteL ineL uong: **+saLary); ) public void SaveData(FileStream f i l e l ) BinaryWriter wf * new BinarỵVỉriter ; wf.Write (name); wf .Vírite (age); wf .W rite(sa la ry ); } public void ReađData(FileStream f i l e l ) { BinaryReader r f * new B i n a r ỵ R e a đ e r / name « r f .ReadStringO age * rf.R ea đ ln t3 2 0 ; salarỵ * r í . ReadDouble(); } public void MenuO { Console.WriteLine (” MN EƯ "); Console.VíriteLine (” ■«■ ...... ' ^ ); Console • VíriteLine (" 1, Nhap du lie u ” ); Console.WriteLine
- s t r in g filenam e = ” c :\\D a tâ .d a t’*; s t r in g choice = ” ; w h ile (c h o ic e !» ” 3") { p.Menu 0 ; ch o ice * Console.ReadLine0 ; sw itch (ch oice) { Câse ” 1*’ : Console.WriteLine Save data to EileStream fwr * new r ile S tr e a m (fiien a m e, EileM ođe. C reate, r i l e A c c e s s . Write^ r i l e S h a r e . W r ite ); p » new F ileB in 2(); p.Input 0 / p . SaveData(fwr); fw r.C lose 0 ; break; ca se ” 2": Consoie.WriteLine ("Read dâtâ from f i l e ” ); F ilestream fr new F ile S tr e a m (fiie n a m e , PileMode.Open, F ile A c c e s s .R e a d , r ile S h a r e .R e a đ ) / p »,new F ileB in2(); p,R eađD ata(fr)r p. Show(>; break; ca se ” 3" : continue; } H K ề t quầ: MENU 1. Nhap du lleu 2. Doc va xem 1 1 1
- 3. Thoat Nhap so 1 - 3 de lua chon: 1 Save daĩa to file Nhap ten: Hoa Nhap tuoi; 22 Nhap luong: 1000 MENU 1. Nhap du líeu 2. Doc va xem 3. Thoat Nhap so 1 - 3 de lua chon: 2 Read data from file Ten: Hoa; Tuoi; 22 Luong: 1000 Việc ghi/đọc bằng file nhị phân có thể ử>ụt hiện cho một mảng đối íuọng. Mỗi đối tuỵng lại bao gồm nhiểu kiểu dữ liệu thành phần khác nhau. Ví dụ 8.6. Viết chutữìg trinh để lưu dử iiệu vào file. using System; u sing System. 10; c l a s s FileBin3 ,í p r iv â te s tr in g nâine; p r iv a te i n t age; p r iv a te double salary; p u b lic FileBin3() age « 0 ; 1 1 2
- sa la ry * 0 ; t public voíd Inputo I C o n s o le . W r ite c*\ nH hap te n : '*); name = Console.ReadLine 0 ; Cofisole,Write (”Tuoi: '*); age = Int32.Parse(Consoie.ReâdLine()); Console,Write Luong: *'); Sâlary = Double.Pârse(Conscle.ReadLine0 ) ; } p u b lic v o id S h o w () ( C on sole.M riteL in eD oc du iie u tu Console.MriteLine ("Ten ” -*-najne+” ; Tuoi:" ; Console. WriteLine("Luong: "+ sa lâ r y ); ) p u b lic v o id S a v e D â ta (rỉie S tre a m BinaryVĩriter wf = new BinarỵWriter ( f i l e l ) ; w f . W r i t e < nam e); wf .Vírite ; 113
- c lâ s s T e s t r ile s t a t i c void Main (stringC ] args) in t n; Ccnsole.VíriteTNhap n * n » Iĩìt32.Parse(Console^ReadLine( )); FileBiiì3 [] p = new FileBin3[ n) ; str in g filename » ” c:\\Data.đat**; Con$ole.WriteLineCGhi du lie u vao f i i e ” ); FileStream fwr * new FileStream(filename, FileMode.Create, FileA ccess,W rite/ F ileShare.w rit e ) ; f o r ( in t i * 0 ; i < n; i++) { i] * new FileBin3 (); Ịi i) ,Input 0 ; f( i] .SaveData (fwr); 1 fwr.Close () / / / -------------------------------------------------------------------- Console,WriteLine{’*Doc du líe u tu f i l e ” ); FileBin3 [ ] p i “ new FileBini^ n] ; rileStream f r = new FileStream(filenam e, rileMode.Open, PileAccess.Read, r ile S h â r e . Read); f o r ( in t i * 0 ; i < n; i++) { pK i) “ new F ileB ín 3(); pl[ i} .ReadĐata(fr); pl[ i] .Show() ; } Console. ReadLine (); } ) 114 1 L l Ậ P 'n ề ề i . . H O M
- ^ ^ K ể t quả: Nhap n = 2 Ghi du lieu vao fìle Nhap ten: Mai Tuoi: 22 Luong: 1000 Nhap ten: Ha Tuoi: 35 Luong: 2000 Doc du lieu tu fìle Ten: Mai: Tuoi: 22 Luong: 1000 Doc du lieu tu file Ten; Ha; Tuoi; 32 Luong; 2000 G v i dụ 8.7. Xây dựng m ột menu để thụt hiện các thao tác: Nhập, liệt kê, xoá, sửa. tim kiêm, bổ sung. using System; //C on soie.A pp lication c la s s person i p riv a te s t r in g narne; p riv a te long ID; p riv a te in t age; / / -------------------------------------------------------------------- Public personO name = ; ĨD = 0; age = 0 ; / / ......... ...... ............................................... .............. ...... 115
- public s t a t i c in t n; public person (] p = new person' 100 ]; / / ------ ------------------------------ -------------------------- pubĩic void InputO I f o r ( in t i = 0 ; i < n; Ì++) ( p( i] = new p erso n O ; Console .WriteLine ("person { 0) " , i ) ; Console.VỉriteLine ("Enter name: "); p( i] .name = Console.ReadLine 0 ; Console.WriteLine("Enter ID: "); p( iỊ .ID = Int64 .Parse (Console.ReadLíne 0 ) ; Console.KriteLine("Enter age: "); p; i] .age = Int32. Parse (Console.ReađLine {)) ; ì } / / ------------------------------------- -------------------------- pidDlic void Show() t f o r ( in t i * 0 ; i < n; CcnsOÌe.WEiteLine("Name:{ 0) ; ID:{ 1} ; age: {2}" , F
- C onsole.V ỉriteL ine ("Name; f C ; ID: ( l } ; a g e : 12}", Ị p[ i] .naine, p{ ij .ID, p[ i] .a g e); } ) / / ------------------------------------ --------- ------------------- public void SearchlDO i long id l; C onsole.W rite("Enter ID to search: ” ); i d l = In t6 4 . Parse{Consoie.ReadLine()); f o r ( i r t i = Ũ; i < n; i++) { i f (ídl “= p( i] . ID) Consoie .VỈriteLine (" Narre: { 0 } ; ID: I 1} ; age : { 2} ", pliỉ.naĩre, p[ i ] , I D, p( i ] . a g e ) ; ) } / / --------------------------------------- ------------ ............ - public void DeleteO { long id l; C onsole.W rite("Enter ID to search: "); i d l = Int64. Parse(Console.ReadLine()); f o r ( in t i = 0; i < n; Ì++I { i f (id l == FÍ il -ID) { Console.VỉriteLine (" Name:i 0} ; ID:{ 1) ; age: {2}", p( i] .name, p. i] .ID, p( i) .age) ; w h ile (i < n) { i) = p( i+ i] ; i++; 1 1 7
- n = n - i; / / ------------------------------------- ------------------- --- public void E d it o { s tr in g namel; C onsole.W rite("E nter name to search: ” ); namel * Console.ReadLine(); f o r ( in t i = 0 ; i < n; i++) { i f (String.Ccxnpare (namel,p( ij .name) == 0) í C onsole.V íriteLine {" Narae: ( 0 ) ; ID: { 1 } ; age: { 2 ) " , Pí i] .name, p [ i ] . I D , p [ i ] . a g e ) ; Console.KriteLine {" person { 0) ” , i) ; Console.WriteLine("Enter name: ” ); p{ i] . name “ Console. ReaoLine () ; C onsole.K riteL inerEnter ID: '•); p( i] .1 0 * Int64 .ParseíConsole.ReadLine {)) ; Console.WriteLine(” Enter age: "); p( i) .age - Int32.Parse(Console.ReadLine {)) ; } / / -------------------------------------- public void AppenđO I p( nl “ new personO ; Console.WriteLine C Enter name: ” ); ’ fị n] .name * Console.ReadLine 0 ; 118
- Console.VíriteLine(” Bnter ID: ” ); fị nì .ID » Int64,Pârse{Console.R6ddLine{)); Console.WriteLineTEnter age: "); p( n] ,age ® Int32.Parse (Console.ReađLineO ); n * n 4* 1 ; ) / / - ....... ............................................. ........................ p ublic s t a t i c void MainO ( person per * new personO; int choice = 0 ; do ( Console. WriteLine r* M U ” ); EN Console.W riteLine(" 1. Input D a ta ’M; Console-VíriteLiner 2. L ist A ll **); Console. WriteLine r 3• Edit (Name) "); Console.writ e L in e r 4. Search Name "); Console.WriteLine(" 5, Search ID " )/ Console.W riteLine(" 6 , Delete Console.W riteLine(* 7, Append"); * C o n s o l e . W r i t e L i n e 8 . Exit **); C o n so le.H riter Bnter Choice:")/ chcice ■ Int32.Parse(Console.R€âdLỉnê()); sw itch(choice) { case 1: Console.Write("Enter niiinber o f persons: '*); n » Int32.Parse(Console.ReadLine( )); per.Input 0 ;break; case 2: per.Show();break; case 3: p e r .E d it 0 ;bredk; case 4: per .SearchKaine 0 ;break; 119
- case 5: p er.S earch lù d ;break; case 6 : p e r .D e le t e ( ) /break; t case 7: ger.Append0 ;break; Câse 8: continue; } } w h ile(ch o íce != 8 ); // ^ ^ K ế t quá sau khi chạy chương trình được biểu diễn trên hình 8.3. « C :\C o lle c C # 0 6 \C S h a r p 0 4 \ Ent^r Age : H U EN t . ỉnput Oata 2. Lict All 3. £cỉit (Nam«) ^ . S^arch Nône 5 s^arch ID ĩ. Append 8 Exit Ent^r Choice : 2 Ndm :Nga ; 1 0 . 11 1 p I^ e : 26 9 . Mai 10 222 : 25 tình ; 10 333 r ^99 : 28 MN EU 1 Input Data 2 Li st Pi l J tdLt (Nâm«) ^ S^drch 5. s«?arch 10 7 í^pp^nd ô ExW Ent«r Choic« • Hình 8.3 Vi dụ 8 .8. Ví dụ này đuục coi là một bài tập dài trong cuốn Lập trình c # từ cơ bản đến nâng cao. Yẻu cầu của bài tập này như sau; Công ty tmyền thông ABC giữ vai trò quan trọng trong sự phát triển 1 2 0
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Nhập môn Ngôn ngữ lập trình C
243 p | 1126 | 286
-
Lập trình ngôn ngữ C trong kỹ thuật điện tử
416 p | 645 | 185
-
NGÔN NGỮ LẬP TRÌNH C++ (Dùng cho sinh viên)
186 p | 336 | 148
-
Kỹ thuật lập trình - Ngôn ngữ lập trình C - Những khái niệm cơ bản
22 p | 228 | 111
-
C# - Ngôn ngữ lập trình
389 p | 302 | 79
-
Giáo trình lập trình ngôn ngữ C
298 p | 150 | 52
-
Hệ thống lập trình ngôn ngữ C#: Phần 2
214 p | 163 | 34
-
Hệ thống lập trình ngôn ngữ C#: Phần 1
175 p | 158 | 33
-
Bài giảng Kỹ thuật lập trình cơ bản (C++): Chương 1 - ThS. Trần Nguyễn Anh Chi
28 p | 209 | 26
-
Ngôn ngữ lập trình C
64 p | 202 | 23
-
Một số kiến thức cơ sở về lập trình bằng ngôn ngữ C
153 p | 125 | 19
-
Kỹ thuật lập trình - Ngôn ngữ lập trình C - Biến, Toán tử và kiểu dữ liệu
6 p | 154 | 19
-
Bài giảng Lập trình Windows - Ngôn ngữ C
123 p | 72 | 7
-
Bài giảng Kỹ thuật lập trình cơ bản (C++): Chương 4 - ThS. Trần Nguyễn Anh Chi
19 p | 89 | 6
-
Bài giảng Lập trình ngôn ngữ C - Chương 2: Các khái niệm cơ bản
15 p | 77 | 5
-
Bài giảng Kỹ thuật lập trình cơ bản (C++): Chương 6 - ThS. Trần Nguyễn Anh Chi
9 p | 71 | 4
-
Bài giảng Cơ sở lập trình: Các phần tử cơ bản của ngôn ngữ C
55 p | 9 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn