chươnq 8. f ì i es -...

142
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 FILE TEXT ỉ<hi viết chương trinh để luu dữ liệu vảo fi!e, ta phải thêm dòng tiêu đề; using System.10; 8.1.1. Ghi dữ liệu vão file Cú pháp để ghi dữ liệu vào íile: string filenaine = ”c;\\CS\\testĩ.txt StreamWriter sw = new StreamVỉriter (filename) sw.Write("This is the text."); Sau khi ghi xong cần phải đóng file lại. sw.Close () ; 8.1.2. Đ ọc dO liệu tù file s t r i n g filenaiTte “ " c : \ \ c s \ \ t e s t l . txt" ; StreamReader srl = new StreamReader {filename); srl.ReadLine 0 ; srl.CloseO; ^ViàụS.l. using System; using System.10; using System.Text; ciass PileText static string filel * *'c:\\testfile.txt.” ; static doxible a * 123.456; •static int b * 789; static châr kt * 101

Upload: others

Post on 01-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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 I L E T E X T

ỉ<hi viết chương trinh để luu dữ liệu vảo fi!e, ta phải thêm dòng tiêu đề; using System.10;

8.1.1. Ghi d ữ liệu v ã o fileCú pháp để ghi dữ liệu vào íile: s tr in g filenaine = ”c ; \ \ C S \ \ t e s t ĩ . t x t StreamWriter sw = new StreamVỉriter (filename) sw.Write("This i s the te x t ." ) ;

Sau khi ghi xong cần phải đóng file lại. sw.Close () ;

8.1.2. Đ ọ c dO liệu tù fileị

s tr in g filenaiTte “ " c : \ \ c s \ \ t e s t l . txt" ;StreamReader s r l = new StreamReader {filename);srl.ReadLine0 ;sr l .C lo seO ;

^ViàụS. l .using System; using System.10; using System.Text; c ia s s PileText

s t a t i c str ing f i l e l * * 'c : \ \ t e s t f i l e . t x t .” ; s t a t i c doxible a * 123.456;

• s ta t ic in t b * 789; s t a t i c châr kt *

1 0 1

Page 2: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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 tex t; a “ "); sw.WriteLine(â); sw.WriteLine (b); sví.VíriteLine (k t); sw.Close ();

ìStreamReader sr l " new Stream Reađer(filel); s tr in g input;w hile((input = srl.ReadLine() ) != null)

Consoĩe.WriteLine(input);)Console.WriteLine("Ket thuc!")! sr l .C io se ();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 tr in g f i l e l * " c : \ \ t e s t f i l e . t x t " ; sw •= F i le .C r e a te T e x t( f i le l ) ;

1 0 2

Page 3: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

I ?

Ghi dữ liệu vào file: sw.W riteLinerThis i s a tex 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 sr l;

Mở file:str in g input;sr l “ F ile .O p en T ex t(f ile l) ;

Đọc file:input=srl.ReadToEnd();

Hiển ữiị dữ liệu sau khi đọc:Console.WriteLíne(input);

Ui dụ 8.2.using System; using System.10; c la ss FileText {s t a t ic s tr in g f i i e l = "c : \ \ t e s t f i l e . t x t " ; s td t ic void Main(strlng[ 1 args)

iStreamHritec sw; / / ghi du l ie u vao f í l e sw = F ile .C rea teT ex t(f iie l) ; sw.WriteLine("This i s a te 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 ie u tu f i l e / / =* new StreamReader ( f i l e l ) ;

103

Page 4: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

str in g input;s r l * F ile .O p en T ex t(f ile l) ; input « srl.ReadToEnđ0 ;Console.W riteLine(input);Console .VíriteLine (** The end of the stream!” ); sr l .C lo se 0 ;Console.ReadLine();

}}

H k ể 'í quá:

Thìs is a text Daí hoc Bach Khoa Ha Noi Trung tam Genetic Singapore 123.456Ta cũng có thể đọc file tíieo các dòng kế tiếp như đoạn mã dưới đây: StreamReader sr; str in g input;sr “ F ile .O p en T ex t(f i le l) ; while-(true)

if ( in p u t »» nulĩ) break;Console.WriteLine(input);}sr .C loseO ;

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

Page 5: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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 ) Isw.Write ("This i s a text; a - ;sw.WriteLine (a ); sw.VíriteLine (b);5 W,WriteLine(kt); sw.Clos€ ();)StreamReaàer sr; str in g input;sr « File.OpenText ( f i l e l ); while(true)

{input * sr.ReadLine(); if ( in p u t “ null) break;Console-WriteLine(input);1

Console.WriteLíne (’* Ket thuc !'*); sr.C lose 0 ;Consoie.ReadLine();

quá:

This is a text; a = 123,456 789 M Ket Ihuc.

105

Page 6: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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 ile S tr e a m (" c : \ \ t e s tb in .d a t” , FileMode.OpenOrCreate,

P ileA ccess .W rite , P iỉeShare.N one);

+ 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 lose();

- E)ọc dữ liệu từ fi)e kiểu byte;

+ Mở file để đọc:F ileIn fo fr » new F ileInfo r c : \ \ t e s tb in .d a t ' ' ); stream strm ■ fr.OpenReađ<);

+ Sử dụng vòng lặp để đọc:in t i ;while(true)

i - strm.ReadBỵtỹO ;

i f ( i “ - 1 ) break/C on so le .w riter{0 ,4 )" , i ) ;

1

+ E>óng file sau khi đọc xong: strm .Close{)?

106 . _

Page 7: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

& 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 ilebin / /c a c so kieu bỵte {s t a t i c void Main (stringl ] args){//G hi du l ie u tu f i i e voi so kieu byte(0 4- 255) . byte [ ] b l ^ ị 255, 33, 44, 55, 6 6 } ;P ileStream sw = new FileStream (*'c : \ \ t e s t b i n . dat” ,'

rileMode.OpenOrCreate, F i le A c c e s s , Writ6 r F ileShare .N one);foreach(byte bnext in bl)ísw.WriteByte(bnext);

sw.Close (>;/ / Doc đu ĩ ie u tu f i l eF iieIn fo f * new F ileInfo (”c : \ \ t e s t b in .dât” ); stream strm » f .OpenRead(); in t i / w hile(true)

. {i = s t r m . R e a d B y t e 0 /

i f ( i « - 1 ) breâk/Console.W riter{ 0,4) i ) ;)stmì-Close {) /Consoie. ReadLine()/)}

^^ K ể t quả:

255 33 44 55 66

107

Page 8: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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 in o f i l e l = " c :\ \F ile B in l .d a t" ;FileStreâfn f i l e l ;s tr in g name; / /d ữ l iê u thành viêndouble 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); wf.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 inaryR eader(filô l);

Các hàm để đọc dữ liệu nhị phân: name “ rf^Readstring{); sa lary « 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.

by te b l; b l * rfrPeâdB yte0 ; char chl; chl « rf.ReadChar(); decimâl d l; d l * rf.ReađDecimal(); double d2; d2 « r f . ReadDoưble(); f lo a t f l ; f l » r f .R ea d sin g le0 ; i n t a; a * rf,R ead In t3 2 (); long b; b * rf•R e ad ln t6 4 í); sbyte sb l / sb l * r f •ReađSByteO; u in t u i l ; u i l “ rf-Readưlnt32{); ulong u l l ; u l l = rf.ReadUInt640 ;

108

Page 9: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Vi dụ 8.5.using System; using System.10; c la s s FiieBin2(private str in g name; private in t age; private double salary; public FileBin2()Iname “ agè = 0 ; salary = ũ;

}public F iÌ€Bir2(string name, int âge, đouble Sâlary){this.name = name; th is .a g e * age/ this.sâlary » Sâlary;

)public void Inputo

(Console.Vírite ("\ nNhap ten: **); name * Console.ReadLine0 ;Consoỉe. Write("Nhap tu o i : " );age = Int32»Parse(Console.ReadLine ( ) ) ;Console,Write("Nhap ĩuong: ” );salary = Double. Parse(ConsoÌe.ReadLine());

)public void Show()

Console.WriteLine(’'Ten: *'+name+''; Tuoi: ’.'+age);

109

Page 10: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console.W riteLineLuong: **+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(salary);

}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đlnt320 ; salarỵ * r í . ReadDouble();

}public void MenuO

{Console.WriteLine (” MENƯ ");Console.VíriteLine (”■«■...... ' );Console • VíriteLine (" 1, Nhap du l ie u ” );Console.WriteLine <"2• Doc va xem ");Console. WriteLine (” 3 • Thoat” ); Console,WriteLine (" ■■iLUi— ) •

Console• WriterNhap so 1 - 3 de lua chon: ");

})c la ss T estP ile

{s t a t i c voíd Main (string[ ] args){FileBin2 p » new FileBin2();

1 1 0

Page 11: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

s tr in g filename = ”c:\\D atâ .d at’* ; s tr in g choice = ” ;w hile(choice !» ” 3")

{p.Menu 0 ;choice * Console.ReadLine0 ; switch(choice){Câse ”1*’ : Console.WriteLine Save data to EileStream fwr * new rileStream (fiienam e,

EileMođe. Create, r i le A c c e s s . Write^ r i le S h a r e . W rite);p » new FileBin2(); p.Input 0 / p . SaveData(fwr); fwr.Close 0 ; break;case ”2": Consoie.WriteLine ("Read dâtâ from f i l e ” ); Filestream fr new F ileS tream (fiien am e, PileMode.Open,

F ileA ccess .R ead , r i leS h a re .R ea đ )/ p »,new FileBin2(); p,ReađData(fr)r p. Show(>; break;case ” 3" : continue;

}

H K ề t quầ:

MENU

1. Nhap du lleu2. Doc va xem

1 1 1

Page 12: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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íeu2. Doc va xem3. Thoat

Nhap so 1 - 3 de lua chon: 2 Read data from file Ten: Hoa; Tuoi; 22 Luong: 1000Việ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; using System. 10; c la s s FileBin3

,íp rivâte str in g nâine; p riva te in t age; p rivate double salary; public FileBin3()

age « 0 ;

1 1 2

Page 13: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

salary * 0 ;t

public voíd Inputo

IC o n s o l e . W r i t e c * \ n H h a p t e 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 l i c v o i d S h o w ( )

(Console.M riteLineDoc du iieu tu Console.MriteLine ("Ten ” -*-najne+” ; Tuoi:" ; Console. WriteLine("Luong: "+salâry);

)p u b l i c v o i d S a v e D â t a ( r ỉ i e S t r e a m

BinaryVĩriter wf = new BinarỵWriter ( f i l e l ) ; w f . W r i t e < n a m e ) ;

wf .Vírite <âge); w f.W rite(salary);

í \ p u b l i c v o i d R e a đ D a t a ( F i l e S t r e a m f i l e l )

{BinaryReader r f * new BinarỵReader ( f i l e l ) ; name = rf.ReadString0 ; age = rf.R eadlnt32();S â l a r ỵ « r f • R e a d D o u b l e { > ;

113

Page 14: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

c lâ ss T estr 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 ing filename » ”c:\\Data.đat**;Con$ole.WriteLineCGhi du l ie u vao f i i e ” );FileStream fwr * new FileStream(filename, FileMode.Create,

FileAccess,Write/ FileShare.writ e ) ;fo 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 fr = new FileStream(filename, rileMode.Open,

PileAccess.Read, r ileShâre. Read);fo r ( in t i * 0 ; i < n; i++)

{pK i) “ new FileBín3(); pl[ i} .ReadĐata(fr); pl[ i] .Show() ;

}Console. ReadLine ();

})

1 L l Ậ P ' n ề ề i . . H O M114

Page 15: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

^ ^ 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 fileTen; 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; //Consoie.Application c la ss personiprivate s tr in g narne; private long ID; private in t age;//--------------------------------------------------------------------

Public personO

name = ;ĨD = 0; age = 0 ;

/ / ......... ...... ............................................... .............. ......

115

Page 16: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

public s ta t ic in t n;public person (] p = new person' 1 0 0 ] ;/ / ------ ------------------------------ --------------------------pubĩic void InputO

Ifo r ( in t i = 0 ; i < n; Ì++)

(p( i] = new personO ;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()

tfo r ( in t i * 0 ; i < n;CcnsOÌe.WEiteLine("Name:{ 0) ; ID:{ 1} ; age: {2}", F<i].nairae,

p{ i] .ID, ri i] .age) ;

1------------------------------------------------------------------public void SearchNameO

(str ing namel;Consoie.VIrite ("Enter nante to search: ” ); namel “ Console.ReadLine(); fo r ( in t i * 0 ; i < n; i++)

{i f (String.Ccsnpare (namel, F( i] .name) ** 0)

116

Page 17: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console.VỉriteLine ("Name; f CỊ ; ID: ( l } ; a g e : 12}", p[ i] .naine, p{ ij .ID, p[ i] .age);

})//------------------------------------ ----------------------------

public void SearchlDO ilong id l;Console.Write("Enter ID to search: ” ); id l = Int64. Parse{Consoie.ReadLine()); fo r ( ir t i = Ũ; i < n; i++){i f (ídl “= p( i] . ID)Consoie .VỈriteLine (" Narre: {0} ; ID: I 1} ; age : {2}",

pl i ỉ . na ĩ re , p [ i ] , I D , p ( i ] . a g e ) ;)}/ / --------------------------------------- ------------ ............ -public void DeleteO

{long id l;Console.Write("Enter ID to search: "); id l = Int64. Parse(Console.ReadLine()); fo r ( in t i = 0; i < n; Ì++I

{i f (idl == 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

Page 18: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

n = n - i ;

/ / ------------------------------------- ------------------- ---public void E d ito {str in g namel;Console.W rite("Enter name to search: ” ); namel * Console.ReadLine(); fo r ( in t i = 0 ; i < n; i++){i f (String.Ccxnpare (namel,p( ij .name) == 0) íConsole.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 () ;Console.KriteLinerEnter ID: '•);p( i] . 1 0 * Int64 .ParseíConsole.ReadLine {)) ;Console.WriteLine(”Enter age: ");p( i) .age - Int32.Parse(Console.ReadLine {)) ;

}/ / --------------------------------------public void AppenđO Ip( nl “ new personO ;Console.WriteLine C’ Enter name: ” ); fị n] .name * Console.ReadLine 0 ;

118

Page 19: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

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 ;

)/ / - ....... ............. ................................ ........................public s t a t i c void MainO (person per * new personO; int choice = 0 ; do

(Console. WriteLine r* MENU ” );Console.WriteLine(" 1. Input D ata’M; Console-VíriteLiner 2. L ist A ll **);Console. WriteLine r 3• Edit (Name) ");Console.write L in er 4. Search Name "); Console.WriteLine(" 5, Search ID " )/ Console.WriteLine(" 6 , Delete Console.WriteLine(** 7, Append");C o n s o le .W r ite L in e 8 . Exit **);C onsole.H riter Bnter Choice:")/ chcice ■ Int32.Parse(Console.R€âdLỉnê()); switch(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 er .E d it0 ;bredk; case 4: per .SearchKaine 0 ;break;

119

Page 20: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

case 5: per.Searchlùd ;break;case 6 : p er .D e le te ( ) /break;

t

case 7: ger.Append0 ;break; Câse 8: continue;}}w hile(choí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 l l e c C # 0 6 \ C S h a r p 0 4 \Ent^r Age :

HENUt . ỉnput Oata2. Lict All3. £cỉit (Nam«)^. S^arch Nône5 s^arch ID

ĩ . Append8 Exit

Ent^r Choice : 2Ndmp :Nga ; 1 0 . 11 1 . I 9 e : 26

Mai 10 222 : 25tình ; 10 333 r ^99 : 28

MENU1 Input Data2 List Pi lJ 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

Page 21: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

vé công nghiệp điện thoại cùa khu vụt. Yêu cầu bạn phải phát triển một hệ thống thông tin để quản lý bằng máy tính vể điện thoại nhằm cung cấp cho khách hàng sự hỗ trỢ những thông tin cần thiết-

Các yêu cầu đặt ra như sau:

1. Tạo một lcfp phone để lưu các dữ tiệu sau:

Phone number

Pullname

Address

No Of Line

Type

Orgdnizaíion

2. Dử liệu này cần phải được:

a) Khcfi tạo nhờ hàm tạo (constructor)

b} Truy cập dữ liệu nhờ sử dụng thuộc tính (properties)

3. Lớp phone phải có phương thức để lưu đối tượng nhờ iớp PiieStream.

4. Tạo một lcfp phone book để lưu toàn bộ lớp phone vào trong một mảng.

5. Trong lớp phone book phải sửdụng Indexer để sao cho ta có thể truy cập vào tCíng phần tử của mảng phone.

6. Ngưcí sử dụng phải thựt hiện đưỢc các chủt năng sau:

a) Add New (thêm bản ghi mới)

b) Edií (sửa đổi một bản ghi)

c) Delete {xoá một bản ghi)

d) Tim một bằn ghi trong mảng phone {tìm theo tên và tìm theo sốđiện thoại)

e) Hiển thị các số đ ện thoại khẩn cấp

Duứi đây liệt kê toàn bộ chương trình của bài tập dài nêu trên./* ProgrartBning using c# - Examples ' Project 1: Telephone inquirỵ system

121

Page 22: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

• In c ld ss PhoneBook: an array c f phcnes i s implemented by an ArrayList instance

* F i le I/O: binarỵ f i l e , FileStrea-Tj i s processed with BinaryWriter/BinaryReader

*/ưsing Systein; using System. 10; using System -Ccllections; c la s s Phone

private ulcng phoneNumber; privâte s tr in g fullName; p rivate s tr in g adđress; p rivate in t noOfLíne/ p rivâte s tr in g type;; p rivate s tr in g organization;public Phonelụiong phoneNumber, s tr in g fuilNâme, s tr in g

adđress, in t noOíLine, s tr ỉn g type, strir.g organizâtion){this.phoneNunổDer » phcneN imber; this,fullN am e = fullName; this^address * ađdress/ t h i 3 .no0 fLine “ noOfLine; this^type =*■ type; th is .o rg a n iea tio n « organi2 â‘.ion;

1

public PhoneO: t h is (0/ 0, {}public ulong ĩ^oneNumber {get{ return phoneNun*iber;) setí phoneNumber » value;l }pubỉic s tr in g FuliName

n.dị wỀmi.JtíM122

Page 23: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

uet{ return íullKame;} seti fullKame « value;)} > p u b l i c S ũ r i n g A t í d r e i ^ s

get{ return th is.âdđress;} set{ address = value;))public in t noOíLineígetỉ return noOfLine;) se tí noOfLine = value;)

}p u b l i c s t r i n g T ype

{oetị return type;} set{ type = value;i )pubiic s tr in g Organization {get( return orgânization;) se ti cr^aní2 ation = value;}}publÌc void Inputíỉ {Console.Write r Phone nisTử>er:phoneNumber * ƯInt64.Parse<Console.ReađLineO);Console,Write r Full name: '•) ;fullName « Consolế.ReadLineO;Console. Write í” Address: ” ) / address * Console. ReadLine();Console.Write(”No o f i in e : ,noOfLine « Inr32.ParsetConsole.ReadLine()); Console.Vírite("Tỵpe: ");

1 2 3

Page 24: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

type * Console.ReadLine();Console.Write (”Orgânization: ) ;organizâtion « Console.ReadLine ();)public void DisplayO {//Console.WriteLíne(ToString {)) /Console,WriteLine rTelephone Nurrber:\t{ 0, ••40} Lines:

ị 1, 5]**, phoneNuiTìber, noOfLine) ;Console-WriteLine {" Name/0 rgani2 aticn :\t" +fullName+ " / "

+organization);Console .VíriteLine (*'Address:\ t \ t” + address};Console.VỉriteLine ( * ' T y p e : \ t \ t \ + type) ;)public override str in g ToStringO {Return (String.Format (’* Phone: { 0) \nName: { ỉ}\nAddress:

{ 2) \nLine: { 3} \n T ^ e : { 4} \nOrg: ( 5} phoneNumber, fullName, addresố, noOíLine, type, organ ization));

)/ /p u b l ic voíd Save(FileStream fs) public void Sdve{BinaryWriter bw) l//Bm«^ryWriter bw * new fìinaryWriter ( f s ) ;bw.Write (phoneNumber) /bw.Write (fullName) ;bw.Write (address);bw. Vlrite (noOfLineị;bw.Write (type);bw.Write (organiĩation) // / b w . C l o s e 0 ;

public void Load(Bi^arỵReader br){

124

Page 25: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

phoneNumber s? br. ReadUInt64 (); fullName = b r . ReadString (); address * br.Readstring0 ; noOíLine = br.Readlnt320 ; type * br.ReadString0 ; organixation » br .ReadStringO ;

c la ss PhoneBook

ArrayList data * new ArraỵListO;//dynamic array of obiects public Phone thist in t i] / / indexer {get(i f ( ( - 1 < i) && (i < data.Count))return (Phone)data[ i] ;e ls ethrow new InđexOutOíRangeException (" Index out of range**)# }set(i f ((-1 < i) &ỉt (i < data.Count))/ / changé a phonedata( i] « Vâlue;e l s e i f (i “ dâta.Count)/ / adđ new phone data.Add(value); e ls ethrow new IndexOutOíRangeException("Index out of range” ); \1

public void ClearO

1 2 5

Page 26: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

data .C ỉear();}pubiic voià D e le te í in t index){i f ( (-1 < index) && (ìndex < dâta.Count))

data.P.einoveAt (index);Console.WriteLine r Done" );)e ls ethrow new InđexOutOfRangeException(**Nothing to Q elete"); )public void E d it ( in t i^^dex) fi f I (-1 < Index) 6 «. (index < đata.Count)) ịth isl index] .D isp layO ; thisỊ index} . Input 0 ;Cons3le.W riteLiner Done" i !)e ls ethroM new InđexOutOfRangeExceptionC*Nothing to e d i t ”);)public void Seârch{string nane){in t found * 0 ;intí ] indexArray - r>ew intí data.Count] ;/ / s tore indexes o f phones that / / matches the search condition in t j » Ũ;fo r ( in t i “ 0; i < c^ta.Count; ++i)

i f (th i^ ij .FullName.ToUpper() “ name.ToUpperI))

1 2 6

Page 27: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

•••+found/indexArraií j++] = i;

i f (íour.d > 0 )(Ccnsole. /.'riteLine r Pound Dhcne ( s ) ; { CỊ , ícunđ); for (int k “ 0 ; k < found; ++k){Console.Vt’r i te L in e r* Index of the phcne i n f o : í 0} ” ,

n d Q y . h r ĩ a y i k ] ) ;

Console.WriteLine (this[ indexArray[ k]] .ToString ( ) ) ;

el$€Ccnsole. WriteLine (*• Not f ound ĩ**);}public void Searchíulong phoneK*anữ5er){fcr (int i * 0; i < data.Count; ' •»‘1) ỉi f (this( i3 •PhoneNumber *•» chcReNưrò>er)(Console/W riteLinerinđex of the phone in fo : i j ;Console.VíriteLine {this( i) . ToSt,ring( ) ) ;return;

Ccnsole.WriteLine {” Not found!" );

)public in t Countíqei { return data.Count; 1

Page 28: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

)//-------------------------------------------------

c ld ss App

{s t a t i c PhoneBook l i s t = new PhoneBookO; public s t a t i c in t MâinO (whiie(true){in t’ choice = MenuO; switch (choice){case 1: / / Ađd new PhoneAddO;breâk;case 2: / / Edit#a Phone EditO ;Console. ReadLine (); break;case 3: / / Delete a Phohe Delete ();Console .BeađLine (); break;Câse 4: // Seârch a Phone Search()/Console. ReadLine()/ breâk;Câse 5: // Display PhoneBookDisplayO ?break;case 6 : / / Save to f i l eSave ();bredk;

1 2 8

Page 29: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

case 7: / / Load from f i l eLoad ();break;Câse 8 : / / Displaỵ Emergency Nurfủ:)ersEmergencyNumbers ()/breâk;case 9: / / Exỉt progranì return ũ;

s t a t i c in t MenuO IConsole.WriteLine ("\n\ MENU ==5=»«=»=«$=;=:=»') ;Console.WriteLine (** 1. Add a Phone" );Console.WriteLine (" 2. Edit a Phone’' );Console.WriteLine r* 3. De le te d Phone" );Console. VíriteLine ự* 4. Search d Phone" );Console.WriteLine (** 5, Display PhoneBook” );Consòle .WriteLine 6 . Save to Console.WriteLine r 7. Load from file" );Console.WriteLine ("8 . Display Emergency Numbers"); Consoie.writeLine C’ 9* Exit” ) ; in t ch = 0 ;while ( (ch < 1 ) II {ch > ^))(try ' iConsoỉe.VíriterVnEnter ỵour choice: "); ch * Int32. Parse (Console.ReadLine ()} ;1

catchicontinue;

1 2 9

Page 30: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

return ch;1

s t a t ic in t inđex » - i ; s tâ t ic void AddO {booi next * true; vchile (next){Console .WriteLine {’* Enter Phone in fc ;Phone phonê » new Phone {);phone. Input 0 ;l i s t í ++index] =» phone;Console.Write (** Do yo\j vrant to continue? (y/ n) : '*);str ing choice * Console,ReadLine ();i f (choice.Toưpper0 "V” )next “ true;e is e next » fa lse ;

s t a t ic void DỉsplayO

fcr (int i * 0; i < list .C ou n t; '♦‘+Ì)(l i s t ị i] .Đisplây {) ;Console. ReadLine ();)ìs td t ic voiđ SearchO {Console, Write r Search by Name ữr PhoneNunử er (N/P)? ; ' ) ; str ing s e le c t * Console.ReadLineO; i f (se lec t .Toưpper (> “ "K")

130 . ^ .n i Ạ p ĩ ỉ é ặ ề i . M C ã

Page 31: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console. Write ('* Enter Name: **); str ing name * Consoie.ReadLine0 ;1 i s t .Search {nanie);t

e lseIConsole. Write (" Enter Phone Nuraber:ulong t e l - UInt64. Parse(Console.ReadLỉne());l i s t .S e a r c h ( t e l ) ; .)1

s t a t i c void EditO{Console. Write ("XnEnter index of Phone to e d it : ” ); in t i = Ĩnt32. Parse (Console. ReadLine {)); i i s t . E d i t ( i );1

s t a t ic void DeleteO {Consoỉe.Mrite ("\nEnter index of Phone to đ e le te : '*); in t i = Int32 . Parse (Console. ReadLine ()); l i s t .D e L e te ( í ) /}s t â t i c void SaveO iConscie. Write (*’\nEnter f i i e name: "); str in g fileName * Console.ReadLine0 ; i f (F ile .E x ists(fileN am e))File* Delete(fileNam e);//remove pre*stored f i l e i f anyrileStream fs = new FiÌeStreâíTi(fileName, rileMode.Appenđ,

FileAccess.Write, FileSharevWrite);BinarỵWriter bw ® new BinaryW riter(fsì;

1 3 1

Page 32: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

for (int i = 0; i < list.C ount; ++i) listl i} .Save (bw) ; bw.Close(); f s . Cl os e ( >;)s t a t i c void LoadO {Console.Write ("\nZnter f i l e naine: " > ; s tr in g fileName = Console.ReadLíneO ; i f (P ile .E x ists(fileN am e)) ll i s t .C le a r O ;FileStream f s =■ new FileStreajn(fileNarae, FíleMode.Open,

F ileA ccess . Read, FileShare. Bead);BinaryReader br = new BinaryReađer(fs); in t i = - 1 ;while(br.PeekChar() > -1) / / not end of f i l e {Phone phone = new Phone(); phone.Load(br);l i s t í t + Ỉ Ị « phone; }br.Closeí);£s.C lose 0 ỉ ■}e ls ethrow new TlleNotroundException there i s no £ i l e :

f i leN a m e);

s t ậ t i c voíd EmetgencyNurnbersO,,{Console.Mriteliine C' P olice i 113") ỉ ■Console.writeL in e(” Police: 114")/Console.WriteLine c* Police: 115")!}}

132

Page 33: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Sau khi biên địch và chạy chương trình, ta có kết quả như trên hình 8-4. Khi đó. chọn một yêu cầu tưcíig ứrtg vcrt một phím số để cung cấp dịch vụ cần thiết. Ví dụ:

- Chọn số 1 để nhập số liệu.

- Chọn số 5 để hiển íhị dữ liệu.

~ Để lưu số liệu vào ổ đĩa cífrig. gô số 6 vcrt File nâme: nn 1 .dat.

- Khi chạy lại chương ừinh, gõ số 7 và gọi tập tin nằm mặc đính trong thư mục chứa chưcíng trình. Các bạn có thể gô đưdừig dẫn cho tập tin. C :\n n l.d a t và khi đọc tập tin này cũng phải có đường dẫn.

■ C : \g e n e t ic 0 6 \B a ita p d a iG e n \B a ita p d a iG e n \b in \D e b . . .1 1

L ÊX

Do ỊjOU uant t o continue’ (y/nj.n A[í~

! tìdd s Phone 112 Edit â Phone 13 a Phone■* Search a Phone ' 1 1 *5 Displây PhoneBoũi-

i t?. Ssưe tc f i lsì Load from f i le3 Diỉpiày Emsrgency Mjiiiberủ5 ixH 1

ĩnter yo iir choice- 5■ piephon? Nusiber. ySSHŨi-Ũtl 3'ianc/ũrganiration Phaíi cong Kgo / Dh 8ach khũS Ha noi■í;idrFi3 Giap bât Hă no iĨỊipe: Khong uu t iín ỉ

MuBbcr. ‘iiíl9‘(28ỉ65't32 L in íi- 5' í â - í / O r ạ â n i r a t i o n - . PbôJi Bao ưan / I8H ịa ứ đ r ậ iS E n g len đ

1

Type; Uu t i « n 1n t

Hình 8.4

133

Page 34: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ChươNq 9. Chuồi k ỷ Tự (sTR ÌN q)

xử !ý chuối trong các ngôn ngữ lập trinh là hết sứt cần thiết. Trong có nhiều hám (phưtfng ửiức) thư viện để thực hiện việc xử lý chuỗi

tự. Sau đây ta S€ xét một số phương thức cơ bản.

9.1. PHƯƠNG THỨC STRING.FORMAT()

Phương thức này cho phép ta định dạng một chuỗi kết hợp nhiều dạng khác nhau.

t 5 v í d ụ 9.1.using Systern; c la ss STRl

s t a t i c voiđ Main (str in gt] args)

t

in t X = 15;str in g s l = s tr in g . Format (" {0} X { 1} = { 2)", X , 3, x*3); str in g s2 = String.Format("Ngay g io hien hanh: { ũ)",

DateTứrte.Koví);ConsoÌe.WriteLine("{ 0)\r\n { 1)" , sl, s2); Console.ReadLineO ?

}}

H / í ế t quả;

1 5 x 3 - 4 5 Ngay gio hien hanh: 8/15/2Ũ07 2:35:45 PM

9 .^ PHƯƠNG THỪC CONCATO

Phương thúc này cho phép nối các chuỗi vcrt nhau thành một chuỗi lớn hơn.

9.2.using System;

1 3 4

Page 35: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

sc a t ic void Main(stringí 1 args)

str ing s l = "Hello” ; str ing s 2 = "worldCor.sole.WriteLine (String.concat (sl ," , s2) ) ;Console. ReadLine();

c la s s STB2

S iK ế t quá: Hello wor!d !

9.3. PHƯƠNG THỨC JOIN()

t ?

Phuyng thứt này cho phép chèn một chuỗi con vào giữã các chuỗi nhỏ.

Vi dụ 9.3.using System; c la ss STR3

s ta t ic void Main(strinẹí ] args)

s t r i n g [ ] s l = { " H e ĩ l o " , ” a n d " , "welcoiT te” , " t o " , " y o u ” } ;

s t r i n g s ^= " -----

fo r ( in t i = 0; i < sl.Length; i++)Console.Write("Console.WriteLine 0 ỉConsole. W riteLine(String.Join(s2, s l ) ); Console.ReadLinet);

I}

H K ế f quá:

Hello and welcome to you Heiio— and— welcome— to— you

135

Page 36: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

9.4. PHƯƠNG THỬC INSERT{)

Ta có thể chèn một chuỗi con vào vị trí n của một chuỗi đã cho.

t 5 w d ụ 9.4. ậ

using System; c la ss STR4

1s t a t ic voiđ Main (striDi^ ] args)

Istr in g s l = "Once a time";Consolfe. WriteLine (" s l : "+sl ) ;C onsole .W riteL ine(sl.Insert(4, " upon ") ) ;Console. ReadLine();})

quá; s1: Once a time Once upon a time

9.5. PHƯƠNG THỨC COPYTO()

Nếu có một chuỗi s l = "Hello beautiíui world!", s2 = "Viet nam", khi thụ t hiện câu lệnh: sl.CopyTo(6, s2, 0, 4) trong đó 6 là vi ừí bắt đẳu Mch các phần tử của chuỗi s l, 0 là vậ trí đầu tiên để copy chuỗi mcfi vào.4 là độ dài chuỗi cắn copy vào.

l5 \ / , 'd ụ 9.5.usíng System; c lass STR5

ís t a t i c voi'd M ain(strinự] args)

ístr in g s l “ "Hello b eau tifu l vrorld!” ;char n s 2 = I ' V , ’ i *, ' e ' , ' t ' , ' ’n' , ' a' , 'm») ;C o n so le .W riteL in es l: '•+sl);

1 3 6

Page 37: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console. WriteLine(mchar); sl.CopyTo(6 , s2, 0, 4);/ / 6 lã v ị t r í đẩu của chuỗi cán tr ích ra/ / 0 là v ị t r í đầu của chuỗi mới/ /4 là độ dài "beau"Console-WriteLine("s2: "+s2);Consoie,WriteLine C’s l : "+sl ) ;Console-ReadLine 0 ;

S i K ế í quả :

s1: Hello beautiíul vvorld ! s2: Viet nam beau nam s1: Hello beautiíul vvorid !

9.6. PHƯƠNG THỨC TRIMSTART(), TRỈMEND(), TRIMQPhương thút TrimSíartO cho phép cắt bỏ ký tự trắng ở đầu chuỗi.

Phưcừig thức TrimEndO cho phép cắt bỏ tự trắng ở cuối chuỗi.

Phưc^g thức TrimO cho phép cắt bỏ ký tự trắng ở hai đầu chuỗi.

c5 Ví dụ 9.6.using System; c la s s STR6

s t a t i c void Main(strin^ 3 ârgs){str in g s l « Big **; / / c o hai dau cach hai benConsole .WriteLine (" Heiloí 0} Worlđ*, s l ) ;s tr in g s2 « s l.T rim S tart0 ; / / c a t bo dau cach dau chuoiConsole .WriteLine (" Heilo( 0} Worlđ: ", s 2 ) ;s2 - s l . TrimEnd (); / / c a t bo dau cach cuoi chuoiConsole .WriteLine ự* Hello{ 0} World: ", s 2 ) ;

18.L7RỈM1...NCA .

137

Page 38: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

s2 “ s l .TrimO; / / c a t bo cac dâu cach ca hai phia cua chuoi Console.WriteLine (” Hello( 0} World: s2) ;Console.ReadLine ();«))

S kể'í quá;Hello Big World // có cả 2 dấu cách hai bên HetloBig Wor1d //cắt bỏ các dấu cách đầu (bên trái) Heỉlo BigVVorld // cắt bỏ các dấu cách cuối (bên phải) HelloBigVVorld // cát bỏ cả 2 dấu cách đầu và cuối {hai bên)

9.7. PHƯƠNG THỨC REMOVEO, PADLEFT{), PADRIGHTQ

Phương thíte RemoveO cho phép cắt bỏ các phần tử của chuỗi từ vị trí m và có độ dài n.

Phương thứt PadLeítO cho phép điển một ký tự mcí vào phía trái mộỉ chuỗi đã cho để lấp đầy n ký tự cửa chuỗi (bao gồm cả tự mé^).

Phương thức PadRÌghtO cho phép điển một ký tự mcS vào phía phải một chuỗi đâ cho để lấp đầy n ký tự của chuỗi (bao gồm cả ký tự mtì).

l5 ự íd ụ 9.7.using System;c la ss STR7

{s t a t i c void M ain(strin^} args)

Istr ln g s l ■ "Hello B eautifu l World";Console.W riteLine(sl); str in g s2 ■ sl.Remove(5,10);Console.WriteLine(s2); s2 - sl.PadLeft(30,Console.WriteLine{s2)? s2 - sl.PadR ightO O ,'*');Console.MriteLine(s2);

1381É. U Ậ P'm ÌN K..M CB

Page 39: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console. ReadLine(};

)}

iS/<è'í quả:

Hello Beautiíul VVorld Hello VVodd •**’ **“ *Hello Beautitul VVortd Hello Beautitul VVorld"” * " * '

9.8. PHƯƠNG THỨC s o SÁNH CÁC CHUỖI KÝ TựPhương thức String.Compare(sl,s2); cho kết quả trả về ià một số

nguyên n. Nếu s l > s2 thì n > 0. Nếu s l > s2 ửii n < 0. Nếu s l > s2 thìn = 0 .

Phưcíng thú t sl.CompareTo(s2) cũng trả về kết quả giống như phưcrtig thức String.Compare(sl, s2).

Phương thức String.CompareOrdinaKsl, s2); cũng giống hai phương thút trên.

Phưcmg thửc String.Equals{sl, s2); trả vể giá ừị írue nếu hai chuỗi s l ® s2 , trả vể giá trị false nếu hai chuỗi s l và s2 khác nhau.

S ự í đ ụ 9.8 .. using System;

c la s s STR8

Is t a t i c void Mâin (stringt ] args)

{str in g s l » Worlđ!” ;str in g s2 « "Hello World!**; str in g s3 «« WDRLDÌ";str in g s4 * "helLo worĩđỉ**; in t n l, n2, n3, n4;n l = String,ConỊ>are ( s l , s2); / / s l * s2; n ĩ - 0

n2 « String,Cc«ĩẸ»are ( s l , s3); / / s l < s3; n2 « -1

1 3 9

Page 40: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

n3 “ String.CortẸìaíe ( s l , s4); / / s l > s4; n3 = 1 n4 = String.CcmpareOrđinal ( s ĩ , "heilo Vỉorlđ?” );

/ / s l < s4; n4 = -32Console.WrìteLine(”nl ="+nl+"; n2 = ”+n2); Consoie.WriteLine(”n3 = "+n3+"; n4 - Console.MriteLine(String.CompareOrđinal(sl, s3>); Console.M riteLine(String.Equals(sl, s3) ) ;Console.WriteLine(String.Equais (s l , s 2 ) );Console.WriteLine(sl.CompareTo (s2) );Console.ReadLineO ;

S iK ế í quá:

n1 =0; n2 = -1 n 3 = 1 : n 4 = -32 32PalseTrue0

9.9. PHƯƠNG THỨC XÁC ĐỊNH CHUỖl CON ĐẦU VÀ CUỐI

Đổi thành chữ hoa và chữ thuởng.

Cho các chuổi s l = "Hello World";

s2 - "Hello": s3 - '^Vorld":

Phương thứt sl.StartsWith(s2); cho phép ta so sánh chuỗi s2 với từ đầu tiên củâ chuồi s l. Nếu chựng bằng nhau sẽ trả v | giá trị true. Nếu chúng khác nhau sẽ trả về giá trị false.

Phương thức sl.ToUpperO; sẻ đổi toàn bộ ký tự của chuỗi s l thành ký tự hoa.

Phương thút sl.ToLo\A«rO; sẽ đổi toàn bộ ký tự của chuỗi s l ứiành

1 4 0

Page 41: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ký tự thường.

c 5 Vỉ dụ 9.9.using System; c la s s STR9

{s t a t i c void M ain(strin^] args)

s tr in g s l = "Helio Woriđ"; str in g s 2 = "Hello**; str in g s3 == "Worlđ' ;Consoie .MriteLine ( s ĩ .StartsW ith{s2)); Consolô.WriteLine{sl.EndsWith(s2));Console.WriteLine ( s l .StartsWith ( s3) );Console .WriteLine .EadsWith(s3));Console.WriteLine(sl .ToUpper {)) ;Console ;WriteLine ( s l .ToLover ());Console. ReađLine ();

)

H /< ế f quổ:s ► ».

True Faise False True HELLO WORLD hello vvorld

9.10. PHƯƠNG THỨC XÁC Đ ỊN H V Ị TRÍ KÝ T ự TRONG CHUỎIĨndex0f()/ LastlndexOí0 .

Cho chuỗi s l = "Helio World";

Phương tíiức sl.IndexOf(’o'); cho ta biết ký tự ‘o’ đầu tiên trong chuỗi s l có vị trí n (tính vị trí đều tiên là 0).

141

Page 42: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

HiUơng thút sl.LastlndexOf(T): cho ta biết ký tự ‘1’ cuối cùng của chuỗi s l có vị ừí m.

Ví dụ 9.10.using System; c la ss STRIO

{s t a t ic void Main(string[ ] args)

{str ing s l = "Hello Worlcf*;Consoĩe.VíriteLine (" Vi t r i ky tu o: " + s l . IndexOf ( ' o ' )) ; Console.WriteLine("Vi t r i 1: ”sl.LastlndexOĩ (' 1 ' ) ) ; Consoie.ReadLineO ;

^ ^ K ế t quà:

Vi tri ky tu o: 4 Vỉ tri t: 9Sau đãy lầ một ví dụ kết hí;:^ nhiểu hàm xử lý chuổi để tách một

chuỗi có dấu \ và dấu chấm (.) ứiành các mẩu có chứt năng khác nhau.

Ví dụ 9.11. using System;c la s s STRll

(s t a t i c void Main(stringt ] args)

{Console.WriteLine("Enter str ing to parse"); str ing s * Consọle.ReadLineO; str in g Drive = s.SubstringíO ,s.IndexO í("\\") ) ; s t r in g Path = s.Remove{s.LastIndexOf ) ,

s.Lengths.LastInđexO f (0"\") ) /s tr in g filename = s.Substring(s.LastlndexOí(Ễ"\")+1); string extension = filename.Substring(filename.Inde>aDf ;

1 4 2 >

Page 43: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console.VỉriceLine C'Drive: f0,15) Path: { 1)\nFilename {2,12} Extension: { 3} " , Drive, Path, f ilenam e,extension);

Console. BeadLine() ;

^ ^ K ếí quả;

Enter string to parse c:\CS0807\Data\file1 ,dat Drive: c Path; c:\CS080AData Piiename: file1.dat Extension; daỉ

1 4 3

Page 44: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ChươNq 10. MULTITHREADINC (Đa luồNq)Luồng (threađ) là trình tự thụt hiện trong chươíig trinh. Tất cả các

chương trinh c # cho đến nay chỉ có một điểm vào (entry poiní) - hàm MainQ. Việc thựt hiện chương trình được bắt đáu vái câu lệnh đầu tiên của hàm MainO và tiếp tục cho tctí iúc phương thút đưỢc trả vể. Cấu trúc chương trình kiểu như thế này rất h(Ị^ lý cho những chii^ng trình trong đó chỉ có một trình tự thựt hiện xác định sẵn.

Khi một chương trình cần đọtì một cái gi đó xảy ra, chẳng hạn nhập ứìông tin vào, downIoad tập tin từ Internet thi toàn bộ chương trình phải chờ cho tới khi công việc đó xong xuôi rồi mctì tiếp tục chạy đưỢc. Chương trinh đift?c phân nhánh thành các chương trình con, chúng được gọi là luồng (thread).

Tuy nhiên thông thifờng một chutmg trình cần thụt hiện nhiều việc đồng thời, ví dụ. khi khởi động trình duyệt Internet Explorer flE) cần phải thực hiện ít nhất ba nhiệm vụ sau:

- Lấy dữ liệu cho trang đưa về từ E.

- Trinh bày ừang.

- Xem xét đối với bất kỳ đầu vào nào của ngưctì sử dụng và có thể chl ra rằng ngưỂtì sử dụng muốn lE làm thứ gì khác nữa.

Tinh huống tưbng tự có thể áp dụng cho bắt cứ tntòng hợp nào mà chương trình ứiụt hiện một vài việc, đổng ứictí lúc này vẫn hiển ửiị hộp thoại cho phép bạn cơ hội để huỷ bỏ nhiệm vụ hiện hầnh.

Một chương trìhh khi chạy có thể phải làm nhiểu việc đổng Hiểu ứĩuật ngữ "đồng ửỉờí" không phải là ngay cùng một th<M điểm (one

moment) mà là một khoảng thcrt gian hữu hạn. Ý tưởng về luồng (thread) có nghĩa là thụt hiện nhiều việc cùng khoảng thời gian có sự phân định tùhg mẩu thời gian nhỏ cho từhg việc C’time slice” hay là "íor a short of periođ of time"). Thông thường một máy tính chỉ có một vi xử lý và nó cũng chì làm đuọc một việc b một thời điểm nhất định. Việc một máy túih- một vi xử lý làm nhiều việc ngay lập tứt, đồng thcrt là điều vô lý, không tưởng. Chút năng "đa nhiệm" (multitasking) cũng là một cách mà luồng

144

Page 45: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

thiít thi. Hiện nay do công nghệ phát triển của các vi xử lý nhiểu lõi (ví dụ chip vi xử lý "core 2 dua” thì tốc độ thực hiện chutttỉg trình tăng lên đáng kể và ý tưởng về "multithread" càng phát huy mạnh mẽ, Thread đã được hệ điều hành Windows áp dụng từ phiên bản Windows 9X.

Thread đưỢc quản lý bcfi lớp Thread khi thụt hiện khai báo; using System.Threading;

Sau đày ta sẽ cho một ví dụ về thread-

Ví dụ 10.1.using System;using System.Threading;c la s s ThreadApp(public s t a t i c voiđ ThreadMethodl()

trỵ

(Console.WriteLine("Threadl bat dau khoi dong"); Console.WriteLine(”Threadl dem tu 0 den 5."); fo r ( in t i = 0 ; i < 6 ; i++)(Console.WriteLine("I = i 0 , 2 } " , i ) ;Thread.Sieep(20);))catch(Exceptíon e)

1)

Console.WriteLine(”Threađl da hoan thanh.");

t/ / ----------------------------------------------- --------Public static voiđ ThreadMethod2()

try

145

Page 46: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

{Console-KriteLine("Thread2 bat dau khci dong” ); Console.KriteLine("Thread2 đem tu 6 den l i . " ) ; for<ir.t j = 6 ; j < 1 2 ; J++)

{ConsQÌe.WriteLine("\t J = ( 0 , 6 ) ” , j ) ;Th read. s ie e p (20);

}Console.WriteLine{"Thread2 da hoan thanh.");

}catch(Exception e)

{)}//-...... ........................................ ...... ........... -

public s t a t ic void Main(string t ) args)

{ThreadStart wl = new ThreadStart(ThreadMethodl); Threadstart w2 = new ThreadStart(ThreadMethod2); Console.WriteLine{"Phuong thuc Maín tao ra cac Thread"); Thrêad t l = new Thread(wl);Thread t2 = new Threađ(w2); t l .P r io r i t y “ ThreadPriority.Highest; t2 .P r io r i ty “ ThreadPriority.Low est; t l . S t a r t O ; t 2 . s t a r t 0 ;Console. ReadLine();

i )

S iK ế í quórPhuong thuc Main tao cac Thread Threadl bat dau khoi dong Threadl dem tu 0 den 5.

Page 47: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

1 = 0 Thread2 bat đau khoi dong Thread2 dem tu 6 den 11.J = 6 I = 1 J = 7 1 = 2

J = 8I = 3 J = 9 1=4 J = 10

1 = 5 J= 11Threadl da hoan thanh. Thread2 da hoan thanh.

Trong ví dụ trên, các đối tưcffig w l và w2 được khai báo là các đối tượng của lớp ThreadStart. Các đối tuợng t l và t2 được khai báo là các đối tượng của lớp Thread.

Phương thút Start{) dùng để khởi động các (tói tượng.

Phương thứt Thread.SIeep(20); để tạo thcrt gian frễ giũầ cốc Threadl và Thread2. Nếu tăng th<M gian từ 20 lên 1000 thi quá trinh diễn ra khá chậm (Isec) và ta có thể nhìn thấy kết quả biến đổi chậm trên màn hình. Nếu ta giảm từ 20 xuống 1 thi quá trình thay đổi rất nhanh và phương thứt Thread2 có thể bắt đầu sau vài bước tính toán của Threadl.

Bây giờ nếu ta không sử dụng phưcrtig thức Thread.Sleep{20); và bỏ qua câu lệnh vAi tiên:

t l .P r io r i t y =-ThreadPriority.Highest; t2 .P r io r ity = ThreadPriority.Lowest;

Khi đó ta sẽ có kết quả khác vcft kết quả của ví dụ 1.

1 4 7

Page 48: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Õ Ví dụ 10.2.* • using System;

using System.Threading;

class ThreadApp

tp u b lic s ta t ic vo id ThreadMethodl()

t r y

C onsole .W riteL ine("Threadl b a t dau khoi d o n g .");

Console.V íriteLine ("Threadl dem tu 0 den 5 .” ) ;

f o r ( in t i = 0; i < 6; i++)

íC onsole.V ỉriteLine (" I * { 0 ,2 1 " , i ) ;^

ịcatch(Exception e)

íìC onsole .W riteL ine("Threadl da hoan th a n h ." );

/ / ---------------- -— -------------------

p u b lic s t a t ic vo id ThreađMethod20

{t r y

{Console.W rìteLine("Th]fead2 b â t dau Jchoi d o n g .");

C onsole .W riteL ine(” Thread2 dem tu 6 den 11 .” ) ;

f o r ( in t 3 = 6 ; 5 < 1 2 ; j++)

{C o n s o le .W r ite L in e r \t J “ {0 ,6 ) " , j ) ;

} .

C onsole .W riteL ine(” Threaíi2 da hoan thanh.” ) ;

148

Page 49: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

)catch (Exception e)

{1),/ —--------- ------------------------------------------------ ---------------------------p u b lic s ta t ic vo id M a in (s tr in g [ ]a rg s )

(T h read start wl = new Threadstart(ThreadM ethod l);

T h read start w2 = new ThreadStart(ThreadM ethod2);

Console.W rite L in e (" Phuong thuc Main tao ra cac Thread");

Thread t l = new Thread(w l);

Thread t2 = new Thread(w2);

/ / t l . P r i o r i t y = T h re a d P rio ritỵ .H íg h e s t;

/Z t 2 . P r io r i ty = Th read P rio rity .L o w est;

t l . s t a r t 0 ;

t 2 . s t a r t ( ) ;Console. ReadLine( ) ;

ỉ }

q u á :

Phuong thuc Maỉn tao cac Thread

Threadl bat dau khoi dong,

ĩhreadl dem tu 0 den 5.

1 = 0

1=1

1 = 2

1 = 3

Thread2 bat dau khoi dong.

7hread2 dem tu 6 den 11.

J = 6 J= 7

149

Page 50: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

J = 8J = 9J= 10J = 11

Thread2 da hoan thanh.

1 = 41 = 5

Threadl đa hoan thanh./ / --------------------------------------------

ở hai ví dụ trên, hai phưcừig thức được sử dụng đều là các phương thííc static. Chương trình trên chuầ phải là chương trình theo phong cách hướng đối tUỢng. Sau đây ta sẽ nêu lẽn chương trình sử dụng Thread viết hoàn toàn theo phong cách hướng đối tượng.

c ? Vi dụ ỉ 0.3.usiĩig System;

using System.Threading;

c lass ThreadOOP

p u b lic vo id ThieađM ethodl()

lỊry

Ccnsol€.VvriteLine{” ?hreadl ba t dau khoi dong."-)/ C o nso le .W riteL ine(*'Threadl đem tu 0 den 5 .'*» /

* f o r U n t i » 0; i < 6; i++)

{C o n s o le .W r ite L in e n « { 0 ,2 } * ', i ) ;

Th read .S leep(20 );

)}catch(Exception e)

i)

150

Page 51: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console.W riteL ine (’* Threadl da hoan th a n h ." );

)/ / ------------------------- -----------------------------------------------------p u b lic vc id ThreadMethod2 {)

í

t r y

{C o n so le -M titeL in e ("Thread2 b a t dau khoi dong .");

C onsoie,W riteL ine{” Threađ2 dem tu 6 den 1 1 .” ) ;

f o r ( in t j * 6; j < 12; j++ )

(C onsole-V íriteL ine(” \ t j= (0 ,6 ) " ò ) /

Th read .S leep (20 );

)Console.W riteLine {**Thread2 da hoan thanh.” ) ;

1

catch{Exception e)

/ / --------------------------------------------

p tib lic s ta t ic vo id M â in ís tr in g t la rg s )

íThreaciDOP ob * new ThreadDOPO;

ThreadStart wl » new ThreadS târt (ob.ThreâdMethodl) ;

Threađstart w2 « new T h rea đ s ta rt (ob.ThreađMethod2);

Console.W riteLine (" Phuong thuc Main tao ra cac Threacf*) ;

Thread t l » new T h read (w l);

Thread t2 new Thread(w2);

t l . P r i o r i t y * T h re a d P rio rity .H ig h e s t/

t 2 .P r io r i t y * Th reađ P rio rity .L o w est;

t l . s t a r t 0 ;

t 2 .^ t a r t 0 ;

151

Page 52: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console.ReadLine();

iKết quà:

Phuong thuc Main tao cac Thread

Threadl bat đau khoi dong.

Theardl dem tu 0 đen 5.

1 = 0Thread2 bat dau khoi dong.

Theard2 dem tu 6 den 11.'

J = 6

I = 1 J = 7 1 = 2 J = 8

1 = 3 J = 9

1 = 4

J = 10 1 = 5 J = 11Threadl da hoan thanh.

Thread2 da hoan thanh.

ư í dụ 1 0 .4 . Sau đây ta sẽ trình bày một ví dụ về việc sử dụng Thread để tính toán các biểu thúc toán học.

Fx = 2.x.cos(15.x)

Gx = T.x^^S.sinílS.x) .

Hx = 7-x^3.tan(15.x)using System;

using System .Threading;

152

Page 53: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

class ThreadCal

(p u b lic v c id Fx()

i

f o r ( in t i = -1 0 ; i < 16; i++ )

iC o n s o le .W r ite L in e (” Fx = { 0 : 0 . 0 0 , 2 } ” /

2 * i * M ath .C os (15* i * M a t h . P I /1 8 0 ) ) ;

T h rea d .S le ep (20 );

)C o n s o le .W rite L in e rT h re a d l da hoan th a n h ." );

}/ / ------------- ------ ---------------

p u b lic vo id Gx()

{ .

f o r ( in t i = -1 0 ; i < 16; i+ + )

{Console.W riteL ine("G x “ { 0 : 0 .0 0 ,6 ) " ,

7«i*M a th .P o w (i,3 )*M a th .S in (1 5 * i*M â th .P I/1 8 0 )) ;

T h rea d .S le ep (20 );

}Console. W riteL in e (” Thread2 đa hoan thỄưih.” ) ;

}Ị Ị ------------------------------------------------------------------------------------------------------------------

Public void Hx()

f o r { in t i = -1 0 ; i < 16; i+ + )

\

C o nso le .W riteL ine(’*Hx ■ í 0 :0 . 00,2} " ,2 * i*M a th .T a n (1 5 * i*M a th ,P I/1 8 0 )) ;

T h re ad .S le e p (2 0 );

}C onsole.W riteL ine("Thread3 da hoan th a n h ." ) ;

2D.L^TrtNH...NCA153

Page 54: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

-----------------------------------------

p u b lic s tâ t ic vo id MainO

{ThreadCal ob = new ThreađC alO /

ThreađStart f l “ new T h re a d S ta rt(o b .F x );

ThreadStart g l = new T h reađ S tart(o b .G x);

ThreadStart h l = new T h re a d s ta rt(o b .H x );

ConsoIe.W riteLine("Ham Main tao ra cac Thread") ;

Thread t l = new T h re a d (f l) ;

Thread t2 “ new T h re a d (g l);

Thread t3 * new T h re a d (h ĩ);

t l . S t a r t O ;

t 2 . s ta r t 0 í

t S .S ta r tO ;

Console. ReađLine( ) ;

l}

S x ế í quâ:Ham Maln tao ra cac Thread

Fx= 17.322

Gx = -35000.026

Hx = -11.552

Fx= 12.732

Gx = -32475.296

Hx = -18.002

Thread2 đa hoan thanh.Threadl da hoan thanh,

Thread3 da hoan thanh.

154

Page 55: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ChươNq 11. Lập TRÌNh WINDOW S với c #Cũng như bộ MS Visual Studio 6.0, đối với bộ MS Visuẽd Studio 7.0

hoặc 8 .0 (chính là bộ Visual Studio.NET) đều lấy lập trinh Windows làm trung tâm. Có hai phulơng pháp chính cho việc lập trinh Windows:

- Sử dụng các câu lệnh trong khai báo.

- Sử dụng các biểu tư<; g theo kiếu kéo - thả (Controls).

n . l . LẬP TRÌNH VVINDOVVSTHEOKIỂU KHAI BÁO

Ví dụ 11.1. Tạo một củ& sổ có hai nút nhấn vdtí nhàn Print và Clear. Khi chưcfrig trình chạy, ta chưa nhấn chuột vào nút nào cả, bên phải sẽ hiến thị dòng chữ: "Message goes here ". Nếu ta nhấn chuột vào nút Print, bên phải sẽ hiển thị "Hi there", còn nếu nhài vào nút Clear sẽ xoá dòng: ”Hi there”. Cửa sổ khi chạy chưdng trình như sau đây.

t l B u t t o n . i9m

Print Ctear Hi there

Hĩnh 11.1

Đây là mã chuơng trình./* A p r in t button p r in ts a message.

• A c le a r button erases the message.

• We use a Label to ho ld the message.

• /uslng System/

using System.Drawing;

155

Page 56: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

using System.Windows.Forms;

' p u b iic c iass ButtonPress: Forrn

Iỉ ! C reate the Controls

p r iv a te ButtOTi p r in t = new B u tto n O ; //N o te 1

p r iv a te Button c le a r = new B u tto n O ;

private Label message * new LabelO; p u b lic ButtonPress(í

!/ / Captions

Text - "B utton Press";

p r in t .T e x t = " P r in t" ; / /N o te 2

c le a r .T e x t * "C ỉe a r" ;

nessage.Text = "Message goes h e re " ;

/7 Sizes

S ize * new S iz e (3 0 0 ,2 c 0 ); '

message.Size « new S ize(m essage.PrẻferređW idth, m essage.P reíerredH eight); / /N o te 3

//L o c ả tio n s

p r in t .L o c a tio n “ neví P o in í Ỉ2 0 ,3 0 ) ; //N o te 4

c le a r.L o c a tio n .» new ?oint(3Ô + p r in t .W id th , 3 0 );

//Notife 5 ,message. Locạtion - new P o in t(40 + p r in t .V ỉid th +

c le a r.W id th , 30);

//N o te 6

/M d đ them to the fonn

C o n tro ls .A d d (p rin t); //^k>te 7

C o n tro ls .A d d (c le a r);

Controls.Add(m essage);

/ / T e i l the C lic k events which methods to c a l l

p ríftt.C X ic k + “ new EvéntH andler(1>irint_C lick);

ứ le a r .C lic k ’f » new E v ep tH an d le r{C lear_C lick );

}

156

Page 57: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

//m ethod to make the P r in t bu tton work

p ro te c teđ v c id P r in t_ C lic k (Object sender, EventArgs e)

{/ /N o te 9inessage.Text = "H i there" ;

1

/ / method to make the C lear bu tton work

p ro te c ted vo id C le a r_ C lic k (O b je c t sender, EventArgs e)

{message.Text =

) .................................................................................../ / -----------------------------------------------------------------------------------------

sta td c v o ia MainO

A pplication.Run{new ButtonPress o ) ;

)ỉ

Phán tích chương trinh.

Đầu chưcmg trình ta phải khai báo các tệp tiêu đề: using System;

using System.Đrawing;

using ?ysteffi.Windows.Forms;

Sau đó đến việc íinh nghĩa lớp ButtonPress, íhửa kế lớp Form.

Trong lớp này đinh nghĩa 3 biến: nứt nhấn Print và nứt nhấn ơ ear thuộc iớp Button; nhãn message thuộc lớp Label.

p r iv a te Buttữn p r in t * new Button 0 Ị

p r iv a te Button c le a r * new Butt.onỉ-);

p r iv a te Lábel nressage = new L a b e lO ;

Hàm tạo của (constructor) khcrt tạo tên và gán giá trị cho các đối tượng này.

p u b lic B uttonPress{)

ỉ }

157

Page 58: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Trong hàm này cũng xác định kích thiíớc cho nhãn và vị trí các nút.

Để c h o Ị ^ é p nhấn nút Print rồi hiển ứìị th ôn g (fiệp, ta phải (ÍỊnh

nghĩa phương thút:p ro tec ted v o id P r in t_ C iic k (O b je c t sender, EventArgs e)

{message.Text - "H i th e re ";

}

Đ ể cho phép nhấn nút Print rổi hiển thị thông điệp, ta phải định nghĩa phưcừig thút;

pro tec ted vo id C le a r_ C lỉc k (O b je c t sender, EventArgs e)

{message.Text -

1

Trong hàm constructor còn khcrt tạo cho sự kiện nhấn nút; p r in t .C lic k + “ new E v e n tH a n d le r(P rin t_ C iic k );

c le a r .C lic k + “ new E ven tH a n d le r(C lea r_C iick );

Cuối cùng ta phải định nghĩa hàm MainO như bất kỳ chiA:ftig trình c** nào nhưhg với cáu lệnh chỉ riêng cho chiícỉng trình Windows.

s t a t ỉè v o id MainO

{Application.Run(new ButtonPress( ) ) ;

}

Qua ví dụ \ãia trình bày, để thụt hiện một vài chứt năng đơn giần như vậy mà ta cũng phải viết mă chương trình tutttig đối phút tạp.

Bây giờ ta sẽ trình bày phương pháp lập trừih Windows dụầ vào các biểu tượng kéo - thả (sử dụng Wữarđ).

11.2. LẬP TRÌNH WỈNDOWS THEO ĐlỀU KHIỄN THƯ VIỆN

Để tạo giao diện Windows, ta thực hiện các bựớc sau;

Start MS Visual Studio .NET

Chọn File Chọn New Project

Trên hừứi 11.3, chọn Vísual c # p^roị^ trong Project Types. chọn

158

Page 59: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Windows Application trong Templates Name. ta đặt tên: WinCalculate. Trong Location. chọn thư mục tùy ý. ví dụ CSjoshiba. Nhắn phím OK.

Từ đó ta có một cửa sổ trống.

S v í dự 11.2. Để tạo ra một giao diện theo yêu cầu trong cửa sổ trống

này ví dụ ửiLte hiện việc tính toán của hai số theo các phép tính số học: c ộ n g , trừ, nhân, ch ia lấy phần n gu yên và chìa lấy phần dư.

Xây dựng giao diện như hình 11.4, ta kéo các aều khiển tương íửig Ò hình 11.2 vào và sắp xếp theo

yêu cầu người sử dụng. Wirtdows For...Với ví dụ trên ta cố 4 Textbox; 4 Label; 2 Button; Poiní^

A Label5 RadioButton. A UnkLabel

Khi nhặp vào 2 Textbox trái và phải các số của Button

các toán hạng. Sau đó chọn một một nút RadioButton ^ MaỉnMenu và nhắn vào nút Calculate. Kết quả trong Textbox p OTeckBox

Expression sẽ hiện lên biểu thứt. chẳng hạn 5 /4 và

trong Textbox Result sẽ hiển thị 1.25. PictureBox

Để viết mã lệnh chương trình ta nhấn đúp vào

nút Calculate và sẽ có phương thút. Listìoxp r iv a te vo id b u tC a l_ C lick (o b je c t sender, u CheckedUstBox

__ _ iỀ ComboBoxSystem. EventArgs e) — Ũ s M e w

{ %: TreeVi^doubie lo - 0, ro - Ũ, tes ^ 0 ; ^TobControl^

lo = d o u b le .P a rs e (tx t lo .T e x t); ' General

ro = d o u b l e . Parse ( tx tro -T e x t) í, Hình 11 2

if(radAdd.Checked)

{res = adđ do , T O ) i

tx te x p .T e x t - ỉo .T o S tr in g (} + ’■ + " > ro .T o S tr in g 0

)e ls e i f (radSub.Checked)

159

Page 60: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

res - subdo , ro );

txtexp.Text - lo.ToStringO + " - " + ro.ToStringO;

)

else if (radMul.Checkeđ)(res - m u l( lo ,ro );

txtexp.Text - lo.ToStringO + ’■ • * ' + ro.ToStringO ;)

else if(radDiv.Checkeđ){res - đ ỉv d o , ro );

txtexp.Text “ lo.ToString{) + '• / ” + roiToStringO ;

}else

{

res * re m ílo ,ro ) ;

txtexp.Text » lo .T o S tr in g O + " % " + ro.ToStringO;

}

tx t re su ì t .T e x t «• res.ToStringO ;ỉ

Muốn thoát khỏi chương Wnh, ta nhấn đúp vào nút Quií và viết mã chiíong trình rất đơn giản:

p riv a te voiđ b u tQ u it jr iic k (ctoject sender, System.EventArgs e)I

th is .C lò s é O ;

}

180

Page 61: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

New P ro jec t

Proj«t Tvpe$:-I Vi9uà' BâSc Pro)ects -ỉ V/I5uei c# Pro;ects -íVisuôỉ)» Pro)ect5

' -I V(wa' c*+ Prọj«os-I Setup «nd 0«ploym«nt Proj€Cts

• - I OỬ>€f Prc;«u ' - t Studio Solutiorks

Téiìplat«:

ỉWindỡws CldỉS \Vlndo '5

Appiỉcaton Librdry Con tro,..

■>Smart ASP HET ASP-NET

D«vrce A... v»«b App... VVeb Serv.ce

•?SCO MCT

erfd(«

▼ Brovvse...

riame: VVìnCalcưlete

Locâtion: C:\CS_t05hfba

Aữd to Solution • Ciồse Soiutioriỉew Sộlưtỉon Ndme; Wir>Calculate directofy fòr Soiưtion

Pro)ect wil! be cr«At«d dt C:\CS_toshibo\WỉnColculAte\WinCalcul4tc.

J

ILess OK Cancel Help

Hình 11.3

Trong phương thút.b u tC â l_ C lic k (o b je c t sender, Sỵstem.EventArgs e)

{ )CÓ sử dựng các h àm được định nghĩa n h ư sau:

p r iv a te double add(double o p l, double op2)

re tu rn opl + op2;

)p r iv a te double sub(double o p l, double op2)

{

re tu rn opl -o p 2 ;

p r iv a te đouble rauKđouble o p l, double op2)

{re tu rn op l • op2;

ĩi.LẠp'né*i..NCA161

Page 62: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

)p r iv a te double d iv (do ub le o p l, double op2)

{re tu rn opl / op2;

p r iv a te double rem(double o p l, double op2)

{re ta rn opl % op2;

)

Các hàm trên có kiểu double và iệnh retum{opl + op2). Phép tính đối V(S biểu ửiức o p l và op2 có thể ịà +. *, / , %.

Caicuiation

CotciẩsỉẬ

ồptímioi

•Ađđtion

^ -Sublraction

' Muftrphc«iiOft

^ /Ofv«>oo

'* Remỏinríar

r> opửfârx1

'ỉ

Qưtt

'1.:5

Hình 11.4

Trong bảng Tool Controi có khá nhiều công cụ điểu khiển.

Ta lần ìượt xét một số control điển hinh trong các vỉ dụ sau đây.

Ví dụ 11.3. Sử dụng các Textbox, Lisíbox và Button để tạo giao diện tính biểu thífc a.x^^s + b.x'^2 + c vói các hệ số a, b, c dương.

Nhấn nút Caículate để tính giá trị biểu ửiứt và hiển thị các hệ số cũng như kết quả ở các Textbox và trong Listbox. Xem hình 11.5.

162Í1-LẠí TR*#4,..NCjB

Page 63: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

CdC thuộc tính của các điểu khiển:T e x tb c x l: Name: tbA

Textbox2: tbB

Textbox3: tbc

7^xtbox4: tbx

Textbcx 5: tbR esiỉlt

Đảt thuốc t ín h ReadOnlỵ:TrueJ

l is t B c x l : IbD isp lay

b u t to n i: b tC al

Để viết mã !ệnh cho chương trinh, tử giao diện ta nhấn đúp vào nủt Calculate và có tnẵ lệnh cho phương thút:

p r iv a te vo id b tC â l_ C lick ỉo b iec t sender, System.EventArgs e)

như đã liệt kẽ dưới đây.

Ngoài ra. ta còn định nghĩa một phuyng thút:p r iv a te Double Câi (double a, do’jb le b, doubie c, double X)

(return a* Math-Pow(X,3)+b'Math.Pow <x,2)+c;

[SQuestion 2

'3 •x“2-

• 32

CQỈCUldỉ«

Hình 11.5

163

Page 64: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Mã chương trinh của Vì dụ 11.3 như sau:

using System;

using System.Drawing;

using S ystem .C ollections;

using System.ComponentModei;

using System.Mindcvs• Porms;

using System,Data;

namesỆìace Exam_Question_2

Ip u b lic c lass Pomìl: System.Wir:dcws.Forms.Form

{o r iv a te System,Winđows.Forms.Textbox tbA,

p r iv â te System,Windows.Fcrms.Textbcx tbB

p r iv a te System.Windows.Forms.Textbox tbc

private Systeir..Wind0ws.F0rms.Textb0ỉ< tbResult; p r iv a te System.Windows.rcrms.Textbcx tbX;

p r iv a te System,Windows.Forms.Lcibei la b e l l

p r iv a te System.Wíndows.Forms.Label lab e l2

p r iv a te Sỵstem.Windows.Forins.Label lab e l3

p r iv a te System.Windows.Forms.Label lab e i4

private System.Windows.Fonns.ListBox IbDisplâv;

p rivace Sỵstem.Windows.Fprms.Button b tC a l/

private System.Windows,Forms.GroupBox groupBoxl; p r iv a te SysteiTì.Windows.Forms.GroupBox groupBox2;

p r iv a te System.ComponentMcdel.Container ccmponents “ n u ll,

p u b lic Forml{)

{I n i t i a l i 2eCompcnent( ) ;

}p ro tec ted o verrid e vo id Disposôíbool d isposing)

i

164

Page 65: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

if (d is p o s in g )

{i f (components != n u ll)

1

components. Dispose 0 ;

f1base .D isp ose(d ispo s ing );

1

[ STAThread]

s t a t ic vo id MainO

(A p p lica tio n .R u n (new ro rrn lO );

)p r iv a te Double CaKdouble a , doubĩe b, doubie c , doiable x)

{re tu rn a^Math.Povííx, 3) + b*M ath .Pow (x,2) + c;

}p r iv a te vo id b tC a l_ C lic k (o b je c t sender, Sỵstem.EventArgs e)

(t r y

{doxible a = D oub le .P arse(tbA .Text) ;

double b = D o u b le .P a rs e (tb B .T e x t);

double c = Doiáỉle. Parse (tb C .T ext) ;

đoiible X = Double. Parse (tb X .T e x t) ;

i f (a > 0 && b > 0 && c > 0)

{tb R e s u lt.T e x t “ C a l(a , b , c , x ) .T o S tr in g 0 ;

s t r in g D isp laỵ = tbA .T extV ’ * ("+ tb X .T ex t+ " ''3) + "+t±)B.Text+" * ('•+tbX.Text+" ^2) + '‘ +tbC .Text+’' = " + C a l(a , b, c, x > .T o S tr in g () ;

165

Page 66: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

IbDisplaỵ.Iteiiis.Add(Display);

}else

MessageBox.Show("a, b , c must be ia rg e r than 0 ");

)catch(Exception ex)

{MessageBox.Show(” E rro rs : ’’ +ex.I'íessage) ;

)

}))

Sau khi chạy chương trình và nhập số liệu vào các Tcxtbox rồi nhấn nút Calculate ta có kết quả như trên hình 11.5.

Ví dụ ĩ 1.4. Xây diửig một giao diện có các control: 1 HScollBar. 3 VScrollBar, 1 Texíbox, 2 Button, 4 Label như frên hình 11.6.

Khi xác đinh ứìuộc ữìh ta cần đặt giá ừi max = 50 và giá ứi min = -50 .

Các thuộc tính của các điểu khiển:

1. Textboxl: name: tb D is p la y .

2 . B u tto n l: b tC a lc u la te

3. Button2: b tE x it

4. L ab e ll

5. Label2

6. LabeI3

7. Label4

Ib lA

Ib lB

Ib lC

Ib lX

8. H S co llB arl: sbx

9. V S c ro llB a rl: sbA

10. V S cro llB ar2; sbB

11. VScro llB arS: sbC

166

Page 67: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

iâCalcutate r:7iì 8* 15 b--22 c*15

>•-

Ex/t

Hĩnh ì 1.6.

using System;

using System.Drawing;

using System ^Collections/

using Svstem.ComDonentMođel;

u s in g Systenì.windov;s.ForTriS; using System.Data/

namespace Exain_Que£tion_3

p u b lic c iass Form l: System.Windows .rorĩTìs .Fonĩì

(p r iv d te Sy3t;em.Windows.Forms.GroupBox groupBoxl;

p r iv a te System.Windows.Forms.GroupBox groupBox2;

p r iv a te System.Windows.rorms,Button b tC a lc u la te ;

p r iv â te System.Windows. Pcrm s.VScrollBar sbA

p r iv â te Syst€m.Windows.Forms.VScrollBar sbB

p r iv â te System.Windows.Forms.VScrollBar sbC

p r iv a te System.Windows.Forms. HScrollBar sbx

p r iv â te System.Windows. Forms. Label Ib lA

p r iv â te System.Windows.Forms, Label Ib lB

p rivace System.VíindoKs.rorms.Label Ib iC

167

Page 68: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

p r iv a te System.Windows.Porms. Label Ib lX ;

p r iv a te System.Windows.Fonns.Textbox tbD isp lây ;

p r iv a te System.Windows.Forĩns.Button b tE x it;

p r iv a te S y s te r. ComponentKodel. Container

components = n u ll;

p u b ĩic PormlO

(I n i t i a l i 2eComponer.t ( ) ;

1p ro tec ted o verrid e vo id Dispose(bool disposing)

í

i f (dispcsing)

(i f (components !® n u ll)

íccmponents- Dispose{ );

)}base.D ispose(d isposing );

}#.region Windows Form Designer generated code

lendreg ion

[ STAThread]

s t â t ic vo id MâinO

A pplication .R un (new F o rm lO );

)p r iv a te double c a l ( in t a, in t b , in t c , i n t X )

{re tu rn (a*M ath.Pow {x,7 )+b*M ath.Pow(x,3 ) + c );

)private void btCalculate_Click(<±>ject sender, Systan.EventArgs e)

168

Page 69: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

(in t a =» sbA.Value;

i n t b = sbB.Value;

in t c = sbC.Value,-

i n t X = sbX.Value;tb D is p la y .T e x t = a .T o S tr in g ()+" * " + x -T o S tr in g O +"'■T'+'• +

’■ +b .To S trin g ( )+ " * ’’ +x .T oS tring 0 +" '3" +" + c .T o S trin g () +■' = " + c a l(a , b, c , x) .To S trin gO ;

I

p r iv â te vo id Forml__Load(object sender, System.EventArgs e)

IIb iA .T e x t = "a = " +sbA .V alue.ToS tring0 ;

Ib lB .T e x t = "b = ‘'-tsbB .V alue.ToS tringO ;

Ib lC .T e x t = ” c = ■'+sbC.Value.ToStringO ;

Ib ỉX .T e x t = "x = '•+sbX .V alue .To3tringO ;

)p r iv â te vo id sbA _S cro ll(ob ject sender,

System.Windows. Forms. ScrollEventArgs e)

Ib lA .T e x t = "a = "+ sb A .V a lu e .T o S trin g 0 ;

1p r iv â te v o id s b B _ S c ro ll(o b je c t sender,

System .W indows. Forms. S c ro llE ve n tA rg s e)

{ib lB .T e x t = "b = *'+sbB .V alue.ToS tring<);

}p r iv a te v o id s b C _ S c ro ll(o b je c t sender,

System .W indows. Forms. S c ro llE ve n tA rg s e)

{Ib lC .T e x t = "c = "+ s b C .V a lu e .T o S trin g {);

I

p r iv a te v o id s b X _ S c ro ĩl(o b je c t sender,System . Windows . Fornis. S c ro liE v e n tA rg s e)

169

Page 70: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

{Ib lX .T e x t = "X = "+ s b X .V a lu e .T o S trin g O ;

}p riv a te void b tE x it_ C lic k (o b je c t sender, System.EventArgs e)

Close ( ) ;

))I

Ví dụ 11.5. Sau đây ta sẽ trình bày một ví dụ về giao diện nhập dữ liệu từ các Textbox và thực hiện các nhiệm vụ:

- Nhấn vào nút Add, dừ liệu từ các Textbox sẽ điíỢc chuyển sang

Listbox-

- Nhấn nút Ciear để xoá thông tin trong các Textbox.

Trước hêi ta phải chọn một hàng (bản ghi) bất kỳ trong Listbox, sau đó nhấn nút Remove, bản ghi vítì chọn sẻ bị xoá khỏi Listbox.

- Thoát khỏi chương trình, nhấn nút Exit.

Giao diện được trình bày như hình 11.7.

Các thuộc tính điều khiển như sau;

1. Textboxl: Name tbName

2. Textbox2 tbAge

3. L ab e ỉl IbName

4. Label2 IbAge

5. l is tB o x l g iữ nguyên

6. b u tto n l butAdd

7. button2 butRemove

8. button3 b u tc le a r

9. button4 b u tE x it

a.LẬPTlriNH..NCB

Page 71: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

t a p o r m l

Name

|Van

Age

!3C

Nanie Ha .Age 25 Nôme Môi . Age 32 Name Nga . Age 29 Name Von , Age 30

Add Remove Clear Exit

Hình 11.7

Mã chương trinh cùa ví dụ trên được trình bày như sau,using System;

using System.Drawỉng;

using S ystem .C ollections;

using System,ComponentModel;

using System.Window5. Foms;

using System.Data;

namespace wini4DpListBox

í/ / / <summary>

/ / / Suímary d e s c rip tio n fo r Forml.

ỉ I I </sunsnary>

public class Forml: System.Windows. Forms. Form

p r iv a te System.Windcws. ronns .Label IbHame;

p r iv a te System,Windows.Forms,Listbox l is tB o x l;

p r iv a te System.Windows.Foms.Textbox tbName;

p r iv a te System,Windows.Forms.Label IbAge;

171

Page 72: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

p r iv a te System.Windows. Forms.Textbox tbAge;

p r iv a te System,Windows,Forms.Button butAdd;

p r iv â te System.Windows.Forms.Button butRemove;

p r iv a te System.Windows. Fontis *Button b u tc ie a r;

p r iv a te System.W indows.Fom s.Button b u tE x it;

I I I <summary>

I I I Required designer variable.

I I I </summary>

private System.ComponentModel,Container components « null;

p u b iic Form l()

{//R e q u ire d fo r Windows Form Designer support

In itia lizeC o m p o n e n t 0 ;

//TODO: Add'any co n stru c to r code a f te r

//InítializeCoiTìponent call

}// <5urTĩTvary>/ / Clean up anỵ resources being used.

/ / </summarỵ>

p ro te c ted o v e rrid e v o id D ispose(bool đ isposing)

if(đ is p o s in g )

I i f (corrponents !* n u l l )

components. Dispose ( ) ;

bâse, D isp o se(d isp o s in g );

)I I I <sưmmary>

I I I The main e n try p c in t fo r th e a p p lic a tio n

172

Page 73: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

/ / / </sumniary>

( STAThread]

s t a t ic vo ic MainO

{A pplication.R un(new F o rm l());

}p r iv a te vo íd butAdđ_Click(object sender, System.EventArgs e)

s tr in g s l » '*Naine: '*+tbNam e,Text+'\‘ Age: " +tbA ge.Text; l is tB o x l . Item s. Add (s l) ;

)p riv a te void tutR«ove_Click(d:>j€Ct sender, SystOT.EventArgs e)

{l is tB o x l . Items .RemoveAt ( l is tB o x l . S e le c te d ln d e x );

)p riv â te void b u tE x it^ C lick (o b jec t sender, System.EventArgs e)

{Close ( ) ;

)p riv â te void butC lear_C lick(object sender, System.EVentArgs e)

(tbNmae.Text “

tbAge.Clear 0;

S v í dụ 11.6. Hãy xây dựhg một giao diện Windows để tính số ngày và số chủ nhật nếu nhập ngày/ứiáng/năm từ điều khiển dateTimePickerl (ngày bắt đầu) đến ngày/ửiáng/năm trong điều khiển dateTimePicker2 (ngày kết thúc).

Giao diện biểu diễn trên hình 11.8.

173

Page 74: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Các thuộc tính cfiểu khiển như sau:1. Labell:Name s ta r t Dâte

2. Lâbel2 End Date

3. LabeI3 số ngày Ibnumday

A. Label4 sổ ngầy chủ nhát Ibnumsunday

5. b u tto n l Show(Text); butShow (naine)

6. button2 E x it (T e x t); b u tE x it (nanie)

7. dateTim ePickerl

8. dateTirĩíePlcker2

Trong phương thút:

p u b lic vo iđ butShow_Click(object sender, System.EventArgs e)

í )

Có sử dụng lớp TừneSpan để lính số ngày giũa hai mốc thcrt gian:TiiTìeSpan t * DateTime, Parse (đateTim €Picker2.

Value.ToS hortD âteS tring ị ) ) * DateTime. Parse (d â teT im eP ic ke rl. Value,ToShortD ateS tring ( ) ) ;

using System;

using System.Drawing;

174

Page 75: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

usiny S ystem .C ollections;

using Sỵsteni.ComponentModel;

using System.Winđows.Forms;

'js ing .'"ystem. Data;

namespace CaiendarP icker

I

p u b lic c lass Forml: System.Windows.Forms. Form

{p r iv a te System.Windows.Forms.Label la b e i l ;

p r iv a te System.Windows.Forms.Label la b e l2 ;

p r iv a te System.Windows.Forĩns.DâteTinìePicker dateTiroePickerl;

p r iv a te System.Winđcws.Forms.DateTimePicker dateTimePicker2;

p r iv a te Sỵstem.Windows.Forms.Label Ibnumday;

p r iv â te System.v-:indows, Forms .Label Ibnumsunday/

p r iv a te System.Windows.Forms.Button b u tE x it/

p r iv a te System.Windcws. Forms. Button butShow;

p r iv a te System.CoĩTiponentModel.Container components ® n u ll;

p u b lic Form l()

In it ia liie C o m p o n e n t0 ;

}p ro tec ted o v e rrid e v o id D ispose(bool disposing)

i

if(d is p o s in g )

(i f (components != n u li)

ícomponents.Dispose( ) ;

)}b ase .D isp ose(d ispo s ing );

ì

175

Page 76: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

tre g io n Windows Form Designer generated code

[ STAThreađ]

s t a t ic vo id MainO

{A p plica tio n .R u n {new F o rm l());

)p riv a te void b u tE x it_C lick (o b jec t sender, System.EventArgs e)

{th is .C lo s e {);

)p riv a te vo id butShow_Click(òbject sender/ System.EventArgs e)

{TimeSpan t » DateTime.Parse (dateTin ìeP icker2.Value.

ToShortD ateString ( ) ) - DateTime. Parse (dateT im eP ickerl .V a lu e . ToS hortD ateS tring0 ) ;

DateTime ts ® DateTiir.e,Parse (đ a te T im e P ic k e rl.T e x t);

in t numSundaỵ * 0;

i f (ts .D ayO fW eek.ToString() = * "Sunday*')

numSunđay++;

f o r { in t i ® 0; i < t.D a y s ; i++ )

íts - ts.AddDays(1 .0 ) ;

i f (ts .DayOfWeek. ToS tring () “ "Sunday*^}

nuinSunday++;

1

Ibnumday.Text * "So ngay * " + t . D ays.ToStringO ;

Ibnumsunday. Text = "So Chu nhat * ” +iìum Sundaỵ.ToString();

}

ựị áụ 11,7. Đây ià một ví dụ đặc biệt có nhiệm vụ phải íạo mộí class, ví dụ có tên là "cStrX" trong đó định nghía hai phưcfrig thức:

176

Page 77: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Phương thứt thứ nhất dùng để cắt từ đầu tiên của một chuỗi. Ví dụ có chuỗi nhập vào: s l = "Ha noi Viet Nam" thi sau khi phương thức này hoạt động, ta chỉ thu đuợc chuỗi con: "noi Vlet Nam".

Phương thửc thứ hai dùng để cắt từ cuối cùng của chuỗi. Ví dụ chuỗi s l , sau khi phương thứt này hoạt động, ta thu được chuỗi nhỏ: "Ha noiViet",

Trên hình 11.9, sau khi nhập Textboxl: "Ha noi Viet Nam",

Sau đó nhấn nút CutLastWord, ở Textbox2 hiển thị; "Ha noi Viet". Từ cuối cùng "Nam'' đã bị cắt (S.

Example ...

(ÌHaTĩcM Nem

Ho noi Viet

CutFirstWord CưtL8$ỉWord

Hình 11.9

E)ộ dài chuỗi bắt buộc phải lớn hơn 10.

Các bước tạo giao diện và thuộc tính cắc dều khiển như sau.

1. Textboxl

2 . Textbo>{2

3. B u tto n l: CutFirstW ord (T e x t); btnCutFirstW ord (Name) '

4 . B utton2: CutLastVíorđ (T e x t) ; btnCutLastVíord (Name)

Sau khi thiết lập xong giao diện, ta mở cCfâ sổ code và chọnsubmenu: Project Add Class (hình 11.10).

23.kẠP7m H.. NCA177

Page 78: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

'• w »no ,'-_ i3« _w • M icrosort Visuai Lf .N t i [đe iign) - F on n l.cs

pT0j«c: Ễui>a Ồf9ỉq ĨGQts ỈVư«o>« h«p

Ẫ A90VV.()9ow( om. í ĩ • â • B f l f Ađd Ịnhệfrt«t hm .. • Ạ

Tf>** Ặ > J Add>j5rCoftĩr9l.. , F o m ỉ^

OỉpboệrtRmg I Ad(5h»w ití4C«r» ..

Or«*9f L AdjCfir«cncrK..

Povnr H MdOm...- AđđỈỆMỆ.. CW*5 't-A

AOS ỉt if t It«n. Sn

Exdk»đ«FrQnPr9ỉ«t ;■ SpicwA:|Fiì«

^OJMl AũC c%m.. Ad3'A’ệb rtnce ĩe.ỆiUePnyữ

* At»t.WPTOp«ês...

V*|IWI *%fiflrr 3 X^ íữiC«íí5Wofs C< 3 itsr»eivỉ»T.8vt( ♦ «

,*Scỉưton ^ Mas: ♦ :'WiMi.F.Uit_w

- A » co

: A&ỉenbiyỉn^ csr' C$7X.«ĩ orrnl.cs

rt’«n iỴiitL &vtcU:;i <1

\9'.\ Bw; t.\ .08 *j:iit '.:r\i

»3 X

è ' t v . % K to & ưx ĩ 11«

. s ta r t; ' « Wnd n .

ỉP*roí» ê:,ri.1.01‘í o.

Hình 11.10

Sau đó ta có CÙ& sổ mcí (hình 11.11). ừong Textbox có nhãn Name,

ta đặt tôn: cSírX rồi nhấn nút Open và gò các dông lệnh như mã lệnh sau.

Trong mã ]ệnh chubng hinh này, ta đính nghĩa hai phuơng thút;

p u b lic s t r in g C utF irstW ord() { )

pubỉic str in g CutLastWord{) { }

ChiAiừig trình chi tiết đưọc trình bày sau đây:

178

Page 79: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Add New item - W ind_F_Ust_W

' J LôCâi Pro’ect Items

An «mpty clasỉ on

cS?X,c$

using System;

p u b iic c iass cStrX

(p r iv a te s tr in g s t r ;

p u b lic 'cStrXO

s t r * ;

/ /

Tempac ; n i.

W fn^vs ciess Co*npo»>eit Pôrm Cass

I sVự s« fC ô W i Déta ^©rm ^ t ô S e t

Wizard

XMi. Pl€ÃxVl

kvna

éCd0< ^ỉ«

C u s to n HTM L Pàge ỉnhcrit«d ^

Osen Cdncel H«ip

Hình 11.n

p u b lic vo id In i t ( s t r in g ss)

s t r = ss;

/ /p u b lic s tr in g C utF irstW ord()

I

179

Page 80: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

s t r * s t r ,T r im S ta rt ( ) ;

in t pos * s t r . IndexO f( ' ’ ) ;

i f (pos > 0)

re tu rn s tr .S u b s tr in g (p o s ).T r im S ta rt 0 ;

else

re tu rn s tring .E m pty;

* /s tr in g s l = ;

i T ì t i * 0;

i • s tr .In d e x O f r '•) + 1;

s l « str.R em ove( 0 , i ) ;

r e t u r n ( s l ) ;

)p u b lic s t r in g CutLastWord ()

{/ * s t r ® s tr ,T r im E n d {);

in t pos * s tr .L a s tIn d e x O f(* * ) ;

i f (pos > 0 )

re tu rn s tr .S u b s tr in g (0 , pos).Trim End{);

e lse

re tu rn s t r ;

* /s tr in g s l ;

i n t i • 0;

i * s t r .LastIndexO f C’ * ');

s l * s tr.R e m o v e (i, s tr.L e n g th - i ) ;

re tu rn s ĩ ;

Khi viết xong mã lệnh như đâ liệt kẽ ờ trên, ta quay trở về Windows Form như hinh 11.9. Bây giờ ta viết tiếp mă lệnh cho cửa sổ này nhờ việc nhấn đúp vào nứt CutFirstWord và nút CutLasíVVord như ở dưdí đây.

180

Page 81: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

using System;

using System.Drawing;

using S ystem .C o llec tíon s;

using System•ComponentMođel;

using System.Windows. Forms;

usíng System.Data;

public ciass Forml: System. Windows .FonriS •Form

(private Sỵstein.Windows. Forms .Textbũx Textboxl;

p r iv â te System.Winđows• Forms.TextboK Textbox2;

p r iv a te System.Winđows .Form's .B uttôn btnCutFir'stW ord;

p r iv a te System.Windows.Forms.Button btnCutLastWord;

p r iv a te System.ComponentModei.Container components =« n u ĩ l ;

p u b lic Form l()

(In it ia liz e C o r Ị5 o n e n t 0 ;

}p ro te c te d o v e rriđ e vo iđ Dispo^e(bool đisposing)

i f (d is p o s in g )

{if(com ponents n u il)

{c o ữ ĩ p Q n e n t s . D i sposê ( ) ;

base. Dispose (d isp o s in g );

)Ire g io n Winđows Form Designer generated cođe

[ STAThreađì

s t a t ic v o id MainO

181

Page 82: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

A pplicâtion .R un(new F o rm l( ) ) ;

}/ / -------- ------------------------------------

p r iv a te v o id b tn C u tF irs tW o rd _ C lic k (o b ^ e c t sen d er, System .EventA rgs e)

íi f (T e x tb o x l.T e x t.L e n g th < 10)

íMessageBox.Show(” Do d a i chuoi b a t buoc lon hon 10!” ) ;

re tu rn ;

)e lse

{cStrX ms = new c S trX { ) ;

m s .In it { T e x tb o x l.T e x t) ;

Textbox2. Text = m s .C u tF irs tW o rd ();

í

1/ / ------------------------------- ---------- --

p r iv a te v o id b tn C u tL a s tW o rđ _ C lic k (o b je c t sen d er, System .EventA rgs e)

Ii f (T e x tb o x l.T e x t.L e n g th < 10)

(MessageBox. Showỉ"Length must not iess than 1 0 !" ) ;

re tu rn ;

}e lse

{cStrX ms “ new c S trX O ;

m s .In it (T e x tb o x l.T e x t ) /

Textbox2. Text = ms. CutLastVỉord ( ) ;

)

182

Page 83: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Vi' dụ lỉ.OTrong Windows Form, ta có thể xây đựhg chite/ng trình để xử lý chuỗi. Hãy nhập một chuỗi vào Textbox. Sau đó nhấn vào nút Process. trong các Textbox sẽ hiển thị:

- Số lượng các dấu cách {space bar).

- Số lượng các nguyên âm a.

- Số lượng các nguyên âm e.

- Số iưtmg các nguyên ám i.

- SỐ lượng các nguyên àm o.

- Số lượng các nguyên âm u.

• Hiển thị các ký tựđâ lọc bỏ tất cả các nguyồn âm.

- Hiển thị chuỗi ký tự yÁíò nhập theo chữ in hoa.

- Đẳo ngược các kỷ tự từ cuối lên đau.

Thuộc tính các điều khiển:1. L a b e li: In p u t S tr in g (nhâp chuỗi)

2 . L a b e ll: W ithout vowel (không c6 nguyên âm)

3. Lab€l3: ToUpper Case (chữ in hoa)

4 . Label4; Reverse (đảo ngược các ký tự của chuỗi)

5. LabelS: space

6. Label6: a

7. Lâbel7 ĩ e

8 . LabelS; i

9. Label9: o

10. LabellO : u

11. T e x tb o x l: tB in p u t

12. Textbox2: tBW ithout

13. Textbcx3: tBupper

14. Textbcx4: tBRev

15. TextboxS: tBsp

183

Page 84: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

16. Textboxô: tBa

17. Textbox7: tBe

18. TextboxS: tB i

19. Textbox9: tBo

20 . TextboxlO: tBu

21 . Button: P ro c e s s (te x t); butProcess (Name)

Giao diện đưỢc tạo ra như hình 11.12.

tsporm lInpvt Stnng

Ha noỉ Hue Soi gon Prỡcess

WlthootVowel Space 4H f>H Sgn

To ư ^ rC s s ea 2e 1

HANOIHiJESAIGON 1 2

0 2

nogisS eoH(Of) dH^ .

Hình 11.12

Khi viỗlt mà lệnh chương trinh, ta cần phải khai báo tệp tlẻu để:using S y s ta n .T e x t. RegularExpressions; *

Có như vậy trong chubng trình ta ĩDỚi sử dụng được Icfp Regex.

Sau đây ỉà toàn bộ mã chiítftig trinh của ví dụ trên.using System;

using System. Dravíing;

using S ys tem .èo liec tio n s;

using System.ConponentModel;

usá;ng Systen>.Windows.FonTis;

ISA

Page 85: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

using System .Text.RegưlarExpressions;

using System.Data;

namespace W indowsApplicationl5

{p u b ỉic c la s s Formi: System.Windows.Fonns.Form

{p r iv a te System.Windows .Fom s .Label lâ b e l ĩ

p r iv a te System.Windows. Forms. Lâbel lâb e l2

p r iv a te System.Windows.Forms.Label Ĩâ b e i3

p r iv a te System.Windows. Form s.Label lab e i4

p r iv a te System.Windows.Forms.Label la b e is

p r iv â te System.Windows.Forms.Labei la b e iẹ

p r iv a te System.Windows. Foriĩìs .Label la b e l7

p r iv â te Systenì.Winđows,Foritìs.Label la b e is

p r iv a te Sỵstem.Windows.Forms.Labei la b e l9

p r iv a te System.Windows. Forms.Label la b e llO ;

p r iv â te System.Windows.Porms.Button butProcess;

p r iv a te System.Window3,Forms.Tex;tbox tB in p u t;

p r iv a te System•WindoWs.Forms.Textbox tBRev;

p r iv a te System.Window5.Fonns.Textbox tBW ithout;

p r iv a te System.Windows*Forms.Textbox tB i5>ựer;

p r iv a te System.Windows.Fonns.Textbox tBsp;

p r iv a te Systern*Window6*Forms.Textbox tBa;

p r iv a te System.Windows.Fomis-Textbox tBe;

p r iv â te System.Windows .Forms. Textbox tB i;

p r Ịv a te Sỵsteiĩi.WirKỈows ,Fornìs .TextboK tBo?

p r iv a te System.Windows.Forms.Textbox tBu;

p r iv a te System,ComponentModel.Container components = n u l l ;

p u b lic ro rm lO

(I n i t i a i i 2eCompohent( ) ;

iiL Ạ p ifỉm ..ìic 'A185

Page 86: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

p ro te c ted o v e rrid e v o id D ísposeíbool disposing)

{ìf (d is p o s in g )

{i f (components != n u ll)

{components. D ispose( ) ;

base. D ispose(d isposing);

)[ STAThreađj

s t a t ic vo id MainO

A p p lic a tío n .Run(new Form l( ) ) ;

/ /

p r iv a te s tr in g s';

p r iv a te in t myNurrử3erOfAEIOU(string a)

íRegex l e t t =*new Regex(a,R egexồptions.IgnoreC ase);

re tu rn le tt.M a tc h e s (s ).C o u n t;

1/ y ------------------- — -------------------

p r ív a te in t myNumberOíSpace0

{Regex l é t t =• new Regex {” " );

re tu rn le tt .M a tc h ẹ s (s) .Covint;

1/ / -----------------------------------------

»

p r iv a te s t r in g myToupperO

2iLẠrTniMi...rKB

Page 87: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

s tc in g s l = s ;

s l = s l . ToUppet( ) ;

re tu rn s l;

}/ /

p r iv a te s tr in g m yFilterAEIOƯ ()

ís tr in g s l = s;

s l = s l.R e p la c e C a " ,’” ')

s i = s l.R e p ^ a c e re " ," " )

r l = s l .R e p la c e r i " , ’” ’ )

s l = s l .R e p la c e r o " / '" )

s l = s l.R e p la c e C u " ,”" )

s l = s l.R e p la c e {"A " /” ')

s l = s l.R ep iace

s l = s l .R e p ia c e r i" ," " )

s l = s l.R e p la c e rO ” , ”" )

s l “ s l.P e p la c e r ư " ," " )

re tu rn s l;

/ /p r iv a te s tr in g Reverseí)

{s tr in g s l = ;

f o r ( in t i = s.Length - 1 ; i >“ 0; i — )

s l “ s l + s[ i ] ;

re tu rn s l ;

)/ /private void butProẹess^Click (<A>ject sender, System.EventArgs e)

187

Page 88: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

s « tB in p u t.T e x t;

tB a . Text = mỵNumberOíAEIOU â” ) . To S trin g ( ) ;

tB e .T ex t = myNumberOfAEIOU{’*e" ) .T o S tr in g 0 ;

tB i.T ộ x t = mỵNumberOfAEIOU r i" ) -T cS trin g 0 ;

tB o .T ext “ myNumberOíAEIOUo” ) .T o S trin g O ;

tB u .Text = myNumberOíAEIOUí” ư*) .T o S tr in g () /

tB sp .Text * rayNumberOfSpace{) .T o S tx in g ( ) ;

tBVíithout .T e x t * myPilterAEIOU 0 ;

tBRev.Text * R everseO ;

tBupper.Text » myToupper();

}

1

)

S v í dụ 11.9. Hãy tạo giao diện như hình 11.13. Nhập một chuỗi ký

tự vào Textbox. Sau đó nhấn nút Process ta có kết quả hiển thị trong các

Tẹxtbox còn lại^vcrt các yêu cầu như sau;

- Đếm số từ trong chuỗi vừa nhập.

- Đếm số ký tự viết hoa (in hoa).

- Cắt từ đầu chuỗi.

• Cắt từ cuối chuỗi.

- Cắt các tự ở vị trí lẻ.

- Cắt các ký tự ở vị trí chẳn.

- Thay thế các ký tự lẻ bằng đấu cách.

- Thay thế các ký tự ở vị frí chẵn bằng dấu cách.

Mã lệnh chương trinh điA?c liệt kê dưới đây.

Ví dụ 11.9 cũng có thể xem là một bài tập dài. Các bạn có thể xây

dựhg giao diện như hinh 11.13. Sau đó tự tìm hiểu mã lệnh đã liệt kê để

có thể làm iại từ đầu.

188

Page 89: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Couri wvd numbH CmCtìor Odl

iZo<irị capirai \M nuribec [2

C u tf rsl vrjfd

Cui Oìar £y»r

[nc4\rietneT

Hộrtnm

Repểỡce c hột Ođd H_ 'õ _ u n_ni

C\M la ỉl Dvord -♦tì noiV*®1 R ep ỉù ce CÍầ«i E V€fi ® n I V _ a

PracHS Exd

Hình 11.Ì3

using System;

□sing System.Drawing;

using S ystem .C o llection s;

using System.ComponentModel;

using System.Windows.Forms/

using System.Data;

namespace process_string

{p u b lic c lass Porrol: Systerĩì,Windows.ForTns.Form

p r iv a te System.Windows.Forms.Label la b e l l ;

p r iv â te System.Wỉndows.Forms.Textbox tx t in p u t;

p r iv a te System.Windows.Forms.Label la b e l2 ;

p r iv â te System.Wỉndows.Fonns.Label lâ b e l3 ;

p r iv a te Sỵstem.Windows.ForĩĩìS.Label la b e l4 ;

p r iv a te System.Windows.Form5.Label la b e lS ;

p r iv a te System.Windows.Forms.Textbox txtcw n;

p r iv a te System.Windows.Foms.Textbox tx tc c ln ;

189

Page 90: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

p r iv a te System*W£adows.Fonns*Textbox tx tc fw ;

p r iv a te System.Winđows. Forn\s.TextlDx tx tc lv ;

p r iv a te System.W indows,Forms.Label la b e l6

private Sỵstem.Windows.ForTĩìS.Labei label7

p r iv a te System.Winđows. Form s.Label la b e is

p r iv a te System.Windows. Form s.Lâbel la b e is

p r iv a te Sỵstem.W indows.Fonns.Button butProcess;

p r iv a te Sỵstem.W indows.Forms.Button b u tE x it;

p r iv â te System.Windows, Form s.Textbox tx tc c o ;

p r iv a te System.Windows. Fom s .Textbox tx trc o ;

p r iv a te System.Windows,Fornis-Textbox tx t r c e ;

p r iv a te System.Windows. rorm s.Textbox tx tc c e ;

p r iv a te System.ComponentModel-Container components = n u l l ;

p u b lic Form l()

In it iâ liz e C o m p o n e n t( ) ;

}s t â t i c ‘ v o id M ainO

(A p p lica tio n .R u n (new F o m l { ) ) ;

)int i “ 0;p riv a te vo id b u tE x it_ C lic k (o b je c t sender, System.£ventArgs e)

{th is X lo s e 0 /

)priva te VDid butProcess_Click(<á3ject sender, System.EventẰrgs e)

{i n t cwn “ 0;

i n t cc ln “ 0 /

s t r in g s in p u t » tx t in p u t .T e x t ,T r im ( ) /

sinput * Standard(sinput);

190

Page 91: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

fo r ( i » 0; i < s in p u t .Length;

{i f (sinputí i} ' *)

(cwn++;

}í f (char-IsU pper (sinput( i) ))

{ccln++;

tx tcw n .T ext » c w n .T o S tr in g ();

tx *""c ln .T ext * c c j.n .T o S trin g ( ) ;

tx tc fw .T e x t » c u t_ f irs t_ w o rd (s in p u t) ;

tx tc lu .T e x c * c u t_ ia s t_ w o rd (s in p u t);

tx tc c o .T e x t ® cu t_char_od cH sin pu t);

tx tc c e .T e x t * c u t_ c h a r_ e v e n (s in p u t);

tx trc o .T e x t « re p lâ c e _ c h a r_ o d d (s in p u t);

tx trc e .T e x t « replace_char_^even (s in p u t ) ;

)private string Standard(string sinput)

(fo r ( i =» 0; i < s in p u t. Length/ i+ + )

i f (sinputl i] “ ' *)

i f (sinput( í+1] “ * ’ ) t

{s inp ut = sinput.RernoveCi + 1, 1 );

í - - ;

re tu rn s inp ut;

191

Page 92: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

}p r iv a te s tr in g c u t_ f irs t_ w o rd {s tr in g s)

{i * S.lndex0f(" " ) + 1;

scfw « s.Remove( 0 , i ) ;

return scfw;

}p r iv a te s tr in g c u t_ la s t_ w o rd (s trin g s)

ís tr in g sclw ®

i =» s , L a s t I n đ e x O f ” ) ;

sclw * s.Remove(i, S-Length - i);

retư rn sclw;

1

p r iv a te s tr in g cut_char_od d{string s)

{s tr in g scoc « "” ; / /s a v e a i l even char

i = 0;

fo r ( i » i + 1; ỉ < s .Length; i+ ® 2)

3COC+ = sí i ] ;

re tu rn scoc;

1

p r iv a te s t r in g c u t_ch ar_even (s trin g s)

ỉs t r i n g sG êc =

f o r ( i * 0; i < s .Length; i+ ** 2)

{scec.+ » ^ i] ;

}re tu m scec/

}p r iv a te s t r ỉn g rep lace_ch ar_o dđ {s trin g s

192

Page 93: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

s tr in g srco = ;

charl ] s l = s.TcCharArray ( ) ; .

f o r ( i “ 0; f < s l.L e n g th ; i++>

ii f ( i % 2 != 0)

{sl[ i) =

1

srco+ = sl[ i) ;

1re tu rn srco;

Ip rivace s tr in g rep lace_ch ar_even(s tring s)

Ichâii ) s l = s.ToCharArraỵO ;

s tr in g srce =

f o r ( i = 0; i < s l.L e n g th ; i++)

\

i f ( i % 2 *= 0)

sĩ[ i] =

srcÊ-r = sl[ i j ;

}re tu rn scc©;

2S.LẬP'’mk*4...MCA193

Page 94: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ChươNq 12. Đồ hoẠ TRONq WiNdow5Đ6 hoạ trong Windows khá phong phú. ỏ đây ta f hỉ xét một vấn đề

đơn giản nhất là vẽ đồ thị các đưòng cong, các hình, tô màu các hình và viết chữ lổng vào trong hình vẽ.

Khi thực hiện vè đồ thị trong môi trường Windows của c^ . đầu mồi chương trình ta phải thêm vào các tệp tiêu đề:

using System?

using System.Drawing;

using System.Drawing.Drawing2D,•

using System .Drawing.Text;

Ngoài ra còn các tệp tiêu đề có sẵn khi ta tạo Windows Form.

12.1. VẺ ĐỒ THỈ CÁC H ÌN H VÀ CÁC ĐƯỜNG CONG

Các đồ thị có thể vẽ trong Panel đặt ở ừong Form.

Nhấn đúp vào Panel này ta có phương thút sau: p r iv a te vo id p a n e ll_ P a in t(o b je c t sender,

System. Wí ndovỉs. Forms. PaintEventArgs e )

ì 1Công cụ chủ yếu để vỗ hình trong Winđows ià sử dụng các phưcỉng

thúc thuộc lc ) Pen (bút vẻ).

Khai báo bút vẽ:Pen penl = new Pen{Color. DarkGreen,3 );

Trong đó màu đưỂftig cong được chọn tùy ý theo mã' màu thư viện khi ta gỗ dấu chấm sau từ Color; số 3 thể hiên độ dày của nét vẻ-

Trong một chương trình muốn thay đổi màu ta chỉ cần viết; p e n l.C o lo r = Color.Red;

Các toạ độ điểm cần vỗ luôn luôn phải là số nguyên. Nếu khi tính toán ta có số float hoặc double, ta cần phải chuyển kiểu về số nguyên.

Các phiwng thứt ứĩư viện để vẽ các đường cong và hình khác nhau được ừình bày điển hình sau đây.

ỈS.LẠ|>TMW...NCA194

Page 95: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

1. Vẽ đường thẳng từ điếm có toạ độ (xl, y l) đến điểm (x2. y2);e.G raphics.D raw Line(penl, x l , y l , x2, y2 );

2. Vẽ hình chữ nhật vctì toạ độ điểm góc trên trái (xl. y l) và toạ độ điểm góc dưới phải (x2, y2):

e . G raphics. DrawRectangle (pe i.:, x l , y l , x2, y2);

3. Vẽ hinh Eliipse có tâm (xl. yl), bán trục đúhg h, bán trục ngang W:e .G ra p h ics .D raw E llip se íp en l, x l , y l , K, h );

4- Vẻ đường tròn giống như vẽ đường Ellipse nhưng chỉ cần cho giá trị bán trục đứng bằng giá trị bán trục ngang w * h;

5. Vẽ cung cong theo hình Hiipse (hình tròn)e.G raphics.Draw Arc(penl, x l , y l , x2, y2, startAng, e dAng);

Trong đó (xl. y l) !à điểm góc trên trái, (x2. y2) là điểm góc duớl phải của hinh chữ nhật để cung tròn nội tiếp bên trong hình chữ nhật này

Khi viết câu lệnh:e .Graphics.ĐravíArc (pen l, 0, 0, 100, 150, 0, 360);

Trong đố hinh chữ nhật cỏ íoạ độ (xl = 0. y l = 0, X? = 100, y2 = 15Ò). góc đầu startAngle 0, góc cuối endAngle = 360. Cung lúc này đã ừở thành một đuàig EUipse dẹt.

Vi dụ 12 .1V ẽ đổ thị các đưcíng cong hinh y l = 50.Sin(x), hinh y2 = 50.Cos(x) và tống của chúng y3 = y l + y2.

tBForm1 ‘m

Hĩnh 12.1

195

Page 96: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Sau khi chạy chương trình, ta có giao diện như hình 12.1. Đổ thị cỏ ba đường cong dạng sin, cos và tổng của hai đường.

Mã lệnh chương trình được liệt kê như sau; using System;

using System.Drawing;

using System.Drawing.Drawlng20/

using System. Dravíing.Text;

using System .C o llections/

using System.ComponentModel;

using System.Wlndows. Forms/

using System,Data;

namespace G raphicl

{p u b lic c la s s Forml: System. Windows. Forms. Form

{p r iv a te System.Windows.Forms. Panel p a n e ll;

p r iv a te System,CoiTponentModel .C on ta in er coĩỉiponents = n u li;

p u b lic Forml<)

{In itia lize C o m p o n e n t( } /

I

p ro tec ted o v e rrid e vo id Dispose(bool đ isposing)

{i f (disposing)

{i f (components != n u ll)

conponents. D ispose( ) ;

)} J

base.D ispose(d isposing );

)

196

Page 97: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

tre g io n Windows Form Designer generated code

p r iv a te vo id In it ia liz e C o n p o n e n t0

1

th is .p a n e l l » new System .W indows.rorm s.Panel{ );

th is .S uspendLayout{ ) ;

th is .p a n e ll .Locatxon “ new System .Oravíing.Point (0, 0 );

th is .p a n e ll .Nâme = * 'p a n e ll" ;

t h is .p a n e l l .S i2 e = new System ,Draw ing.S ize(528r 320);

th is .p a n e ll.T a b ln d e x * 0;

th is .o a n e l l . P a in t new System.Windows. Farms. P a in tE v e n tH a n d le r(th is .p a n e il_ P a in t) /

th is .A u to S ca leB aseS i2e * new System .D raw ing .s ize(6, 15);

th is .C l ie n ts iz e » new System .Drawing*Si2e (536, 330);

th is .C o n tro ls .A đ d (th is .p a n e ll);

this.Nanie « **rormỉ” ;

th is .T e x t » ” Form r ;

th is .ResumeLayout ( f a ls e ) ;

‘ ) ẹ

#endregion

/ / / <sunưnary>

I I I The main e n try p o in t fo r th e a p p lic a tio n

/ / / </summary>

[ STAThread)

s tâ t ic v o id M âinO

(A p p lic a tio n • Run (new ro rm lO );

)/ / ----------------------------------J............. ............................................. ^-----------

p r iv a te v o id p a n e il_ P a in t (o b je c t sender,System. Windows. Forms. PaintEventArgs e)

{Pen penl = new P e n (C o lo r.R e d /2 );

dcuble n y l = new đouble{ 1001] ;

197

Page 98: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

fo r ( in t i * 0; i < 1001; i++ )

yl[ i] * SO^Math.SiníMâth.PI* i / 1 8 0 ) ;

fo r ( in t i “ 0; i < 1000; i++ )

e . G raphics. DrawLine (penl^ i , 150 “ ( i n t ) y i í i l # (i+1)# 150- ( in t )y l [ i+ ỉ ] ) ;

p e n l,C o lo r * Color^DarkGreen;

double [ ] y2 * new double{ 1001] ;

f o r ( in t i « 0; i < 1001; i++)

y2[ i] = 50 *M ath .C o s (M ath .P I*i/18 0 ) ;

f o r ( in t i » 0; i < 1000; i++ )

e . Graphics .DrawLine (pen l, i , 150 - { i n t ) y 2 [ i 3 , ( i+ 1 ) , 150

- Í in t )y 2 [ i+1] ) ; ,

p e n l.C o lc r - Color.DarkM agenta/

double ( ].y3 = new doubleí lOOỈ] ;

fo r ( in t i “ 0; i < 1001; i++)

y3l i] - yl[ 1] ^ ỵ2[ i] ; for(int i * Ũ; i < 1000; Ỉ++)

e.G raphics .DrawLine (pen l, i , 150 - { in t)y 3 [ i] , ( Í+ D / 150

- ( in t ) y3( i+1] ) ;

12.2. VẼ CÁC HÌNH CÓ MÀU T ổ ĐẬM VÀ HIÊN THỊ STRINGI I

Khác vcrt bút vẽ Pen đã xét ở trên, để tỏ màu các hinh và hiển thị chuỗi ký lên màn hình, ta phải sử dụng lớp Brush.

- Khai báo chổi vẽ nhờ câu lệnh;Brush b r = new S o lid B ru s h (C o lo r.B lu e );

E)ối số trong hàm là biến chỉ màu ẹắc.

- Muốn thay đổi màu ta viết như sau:br = new S o lid B ru sh (C o lo r.L iợ h tG reen );

- Để chọn được font chữ, kích thước chữ, kiểu {đậm. nghiêng,...) ta

198

Page 99: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

có câu lệnh;Font f l = new Fo nt{k iểu fo n t chữ, s iz e , F o n tS tỵ le );

Trong đó kiểu font chữ được chọn khá phong phú;

PontSíỵle ỉà Bold. Italic, ưnderỉine.

Ví đụ:Pont f l = new Font {"C o u rrie r new*', 15, Fo n tS tỵ le .B o lđ ) ;

- Viết chữ lên màn hinh ta sử dụng câu lệnh khai báo dinh dạng: StringForm at fo rm a tl = new S tr in g F o m a t 0 ;

- Chữ viết ữieo hướng nằm ngang:form atl.FonratFĩags = StringForm atFlags.D irectionRightToLeft;

- Chữ viết theo hướng ữiẩng đứng:f o rm a tl. Fom atF lags = S tr in g F o rm a tF la g s .D ire c tio n V e rtic a l;

- Lệnh ứiực hiện việc hiển thị lên màn hình dòng chữ (String):e .G ra p h ic s . D raw S tring (" s tr in g le n man h in h ", f l , b r , x l ,

ỵ l , fo rm a tl);

Trong đó:

f l : biến font;

br; biến chổi vẽ;

x l . y l: íoạ độ điểm đạt chữ đểu tiên của string;

íormatl: h ii^ g chữ (nằm ngang, hoặc thẳng đứhg).

\Jị dụ 12.2. Xây dựng giao diện để vẽ lên màn hình một hình Ellipse tô đậm, một hình chữ nhật tô đậm, ba dòng chữ (hai nằm ngang và một thẳng đúhg à các vị trí khác nhau).

Đ ể thiết kế giao diện, ta kéo điều khiển "Panel" vào củồ sổ Form và dãn rộng đến một mút phù hợp. Tiếp âểxì, ta nhấn đúp chuột vào Panel và viết chưcftig ừình, với nội dung phương thút:

p r iv a te v o id p a n e ll_ P a in t(o b je c t senđer,

'Sỵstem .HindovỉS.rorm s.PáintEventArgs e)

{ 1Sau khị chạy chương trình, ta có giao diện nhưírên hình 12.2.

199

Page 100: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

fflForm1

Ve do thi

Dai hoc Đach Khoa Ha noi

Hình 12.2

Toàn bộ mă lệnh chương trình được liệt kẽ dư<M đây. using System;

using System.Drawing/

using System. Drawing.Drawing2D;

using System .Drawing,Text;

using S ystem ,C ollections;

using SystemXOTiponentMođel;

using System.Windows,Forms;

using System.Data;

nâinespace Graphics

íp i^ l ic c lass F o m l: System.Windows.Foms,Form

(p r iv a te System.Winđows.Formâ.Panel p a n e ll;

/ / / <summarỵ>

I I I Required designer v a r ia b le

/ / / </suimary>

200

Page 101: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

p r iv a te System.Corr,poneritMode 1 .Corìtâiner components - n u l l ;

p u b lic Form l()

{• InitializeCCTĩiooner)t { ) ;

!p ro te c ted c verrid e void Dispose(booi d isposing)

{ỉf (d is p o s in g )

{i f (components != n u ll)

components.Đispose{);

}base.Dispose (d isposing );

)#reg ion Winđows Form Designer generated code

p r iv a te vo iđ In itia lizeC om ponent ()

{th is .p a n e i l = new System.Windows.Forrr,s. Panel ( ) ;

t h i s • SuspendLâyout() ;

th is .p a n e ll.L o c a tio n = new S ystem .D raw ing ,P o in tí0, 0 ) ;

th is .p an e ll.N a in e « "p a n e ll" ;

t h i s .p a n e l l . s ịg ễ = n§w §y§têmiDrâv/ỉng:§i2ê (528 320)/ th is .p a n e l l .Tâblndex ũ;

f t h is .p a n e l l . Paint += newSystem.Windows. Forms. PâintEventHandler ( th is .p â n e ll_ P â in t ) ;

th is.AutoScaleBaseSize * new System. D raw in g .s ize (6, 15) ;

th Ì5 -C lie n tS iz e = new System .Drawing.Size (536/ 330);

th is .C o n tro is .A d d íth is .p a n e ỉl) ;

this.Nam e = "rorm l";

th is • Text = Porml" ;

th is .RestuneLayout ( fa ls e ) ;

2 0 1

Page 102: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

)#endregion

[ STAThread]

s t a t ic v o id K ainO

(A p p lic a tio n .Run {new F o m l( ) ') ;

}/ / ------------- -------- -------------------------- -----------------------------------------p r iv a te v o id paneíl^^Paint (o b je c t sender,

System.Windows. Form s.PaintEventArgs e)

{Pen penl = new P en (C o ĩor.R ed ,2 ) ;

e.G raphics.D raw A rc (p e n l,0 ,0 ,1 0 0 ,1 5 0 ,0 , 36D);

Brush b r = new S o lid B ru s h (C o lo r .B iu e );

Font f l = new F o n t{"C o u rr ie r new" , 1 5 , F o n tS ty le .3 o ld ) ;

e .G ra p h ic s . F i l l E l l i p s e ( b r , 5 0 ,5 0 ,1 0 0 ,5 0 ) ;

b r = new S o lid B ru s h (C o ĩo r. L ig h tG re e n );

e .G ra p h ic s .F illR e c ta n g le (b r , 150 ,150 , 5 0 ,4 0 );

b r= new S o iid B ru s h (C o lo r. DarkG reen);

e .G ra p h ic s .D raw S trin g ("V e do t h i " , f l , b r , 200,50) ;

b r “ new S o liđ B ru s h (C o lo r .B lu e );

S tringForm at fo rm a tl « new S tr in g F o rm a t0 ;

fo r m a t l . FonnatFlags = S trin g F o rm a tF ,la g s .D ire c tio n R ig h tT o L e ft;

e .G rap h ic s .D ra w S trin g ("D H Bach Khoa Ha n o i" , f l , b r , 400, 200/ fo r m a t l) ;

b r = new S o iid B ru s h (C o lo r .V io ie t) ; *

'fo rm atl.F orm atF lags = S tr in g F o rm a tF la g s .D ire c tio n V e rtic a l;

e .G ra p h ic s .D ra w S trin g C G e n e tic -S ing apo re " , f l v b r , 400,20, fo r m á t l ) ;

- ì ■'

202

Page 103: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Cũng giống như các phương thút mẫu {thư viện) để vẽ cho các hình khdc nhau, ở đây ta sẻ liệt kê một sổ phương thút chủ yếu cho việc tô màu các hình đậm.

1.Tô màu hình Ellip>se:e .G ra p h ic s .F il lE lip s e (b r , x l , y l , w, h );

2. Tô màu hình chữ nhật:e .G ra p h ic s .F illR e c ta n g le (b r, x l , ỵ l , x2, y 2 );

3. Tô màu mọt cung hình qiạt:e .G ra p h ic s .F il lP ie (b r , x l , y l , x2 , y2, s ta rtA n g , endAng);

Các phương tíiút khác ta có ứiể nhỉn thấy khi gõ vào câu lệnhe .G ra p h ic s .F il l

Sau dấu chấm, tâ sẽ thấy hàng loạt các hàm có liệt kỗ các đối số.

Vì dụ 12.3. Tạo một Windows Form để vẽ một hinh lục giác có cck:

cạnh là giá trị thay đổi lấy từ Trackbar. Khi dịch chuyển con tníợt Trackbar, hình dạng của lục giác sẽ thay đổi theo giá tri của Trackbar,

E D raw H e x a g o n

n o

>

Hình 12.3

203

Page 104: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

using System;

using System.Drawing;

using S ystem .C ollections;

U5ing System.CorĩìponentModel; using System•Windows. rorms;

using System.Data;

namespace draw_Hexagon

(I I I <summarỵ>

/ / / Suinmary d e s c r ip tio n fo r rcnnl

/// </summary>p u b lic c lass Forml: Sỵstem-Windows. Forms.Form

{p r iv a te System• W ind0W 5 .Forins. Panei p a n e ll;

p r iv a te System.Windows.Forms.Trackbar T rac k b a rl;

p r iv a te System.Winđows.Forms,Label Ib lv a lu e ;

p r iv a te System.ComponentModel.Container components = n u ll;

p u b iic Fonnl{)

{In itla lize C o ;r^ o n e n t 0 ;

}p ro te c teđ o v e rrid e vo id Dispose(bool d isposiiig )

{if (d is p o s in g )

(í i f (coirponents !*■ n u l l ) -

{components • Dispose ( ) ;

1 ỉ1 ' : base.Dispcse (d is p o s in g );

) :#region Windows Form D esigner-generated code

I I I <su im ary>

204

Page 105: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

/ / / Required method fo r Designer support - do not modify

/ / / the contents o f th is method w ith

/ / the code e đ ito r .

I I I </summary>priva-.e v c id In itiâ lỉeeC orrtponent ()

(th is .p a n e il = new System-Windows .Form s.Panel ( ) ;

th is .T ra c k b a r l * new System.Víindows-Forms.Trac>±>ar ( ) ;

t h is . Ib lv a lu e = new System,Windows.Fomìs.Label 0 /

( (System,ComponentModel. IS u p p o r t In it ia liz e >( th ls .T râ c k b a r l) ) ,B e g in In i t ( ) /

t h : 3 .SuspendLayout( ) ;

/ // / p a n e il

/ /th is .p a n e ll.L o c a t io n = new System .D raw ing.P oin t(19, 9 );

th is .p a n e ll.N a m e = "p a n e ll” ;th is .p a n e l l .S iz e » new System ,D raw ing.S ize(413, 303);

th is .p a n e ll.T a b ln d e x * 0;

/ // / T rackbarl

/ /th is .Tracìcbarl.D ock Sỵstem.Windows.Fonns.DockStyle.Bottom;

th is .T ra c k b a rl.L o c â tỉo n » new System .Draw ing.Point(0, 352);

th i3.Trackbarl.M axim um ■ 20;

th is -T rackb arl,N am e “ ” T ra c k b a rF ;th is .T ra c k b a r l.S iz e * new System .Draw ing*Si2e(451, 69);

th is .T ra c k b a rl.T a b ln d e x = 1;

t h is .T r a c k b a r ĩ . S c r o l i + * new S y s te m .E v e n tH a n d le r (th is . T r a c k b a r l_ S c r o l l ) /

/ / Ib lv a lu eth is -lb ív a lu e .L o c a tio n « new System .Drâwing.Point(106, 305);

th is . lb lv a lu e .Name * '* Ib lv a lu e " ;

th is , lb lv a lu e .S Ì2 6 * new System .Draw ing.S ize (96, 2 7 );

206

Page 106: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

th is .lb lv a lu e .T a b ln d e x » 2 ;

/ / Forml

th is .A utoScaleB aseS ize * new S ystem .D raw in g .S ize (6 , 15);

th is .C lie n tS iz e * new S ystem .D raw in g .S ize<451, 4 2 i ) ;

th is .C o n tro ls .A d đ (th is , Ib lv a lu e ) ;

th is .C o n tro ls .A d d (th is .T rà c k b a r l) ;

th is .C o n tro ls .A d đ (th is .p a n e ll) /

this.Name = **Fonr.l*';

th is .T e x t * Draw Hexagon” ;

( (System.ComponentMcdel, IS u p p o r t In i t ia l i2e)( th is .T ra c k b a r l) ) .E n d ĩn it (>;

th is .R esu m eL ayo u t(fa lse );

}tendregion

I I I <summary>

/ / / The main ô n try p o in t f c r th e â p p lic a t io n

I I I </,summary>

[ STAThread]

s ta t ic vo iđ M a i n ị }

{Application-Run(new Form l0 ) /

)p r iv â te v o id T ra c k b a r l_ S c ro ll(o b je c t sender/

System.EventArgs e)

{Graphics g * p a n e ll.C re a te G ra p h ic s 0 ;p a n e ll• R efresh ( ) ;

ín t n * T ra c k b a rl.V a lu e *10;

g ,T ran s lâ teT ran sfo rm {p an e ll • W iđ th /2 ,p a n e ll •H e ig h t /2 ) ;

Pen p » new P en(C olor.R ed,5 );

. Pointt ] po » { new P o in t(-n , 0 ) / new P o in t ( -n /2 / n / 2 ) , new P o in t(n /2 , n /2 ) , new P o in t(n , 0 ) , new P o in t (n /2 , - n /2 ) í new P o in t(-n /2 , - n /2 ) , new P o in t(-n , 0 ) ) ;

g •DrawCurve(p, PC / 0 . OOF);

206

Page 107: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Ib lv a lu e .T e x t * n .T o S tr in g O ;

dụ Ỉ2 A . Sử dụng Trackbar để thay đổi qiá trị. in t. a = TracK barl .V a lu e ;

Đại lượng a được đưa vào làm tham số cho một vài hàm tính toán: yl[ i] *< 5 ũ )*M a th .S in ( i* '3 .1 4 1 5 9 /1 8 0 *a ) ;

Khi con tniỢt thay đổi thì giá frị a thay đổi và đồng thời đồ thị cũng thay đổi theo. Các bạn có ứiể so sánh hai cách viết chương trình gần giống nhau của ví dụ 12 .3 và ví dụ 12.4.

Trong vá dụ 12.3. chúng ta viết hàm tiếp cho (fiểu khiểnTrackbar. còn ừong ví dụ 1 2 .4 ta lại viết hàm:

p r iv a te v o id Forn il_P ain t (o b je c t sender,

System.Windows. Forms. PaintEventArgs e)

I }

Hỉnh 12.4

Đồ thị của vn dụ này đưỢc hiển thị ở hinh 12.4.

Toàn bộ mâ lệnh chutíng trinh được liệt kê sau đây.

207

Page 108: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

using System; using System.Orawirg; using System.Coilections; using System.ComponentModel; using System.Windows. Forrns; using System.Data; namespâce WindowsAppDrawinậ {public class Fornìĩ: System.Windows.Forms.Form

r

private System.Windows.Forms.Trackbar Trsckbarl/ private System.ComponentModel-.Container components = null; public Forml{)

InitiâlizeCocnponent 0;protected override void Disposeíbool disposing)

i£(disposing){ií (components != null)( :coit^onents.Dispose 0; , .ỉ .1

bâse.Disposê(disposing);} '

#rạgion Windows Fonn Designer generated code privâte void lnitializeConỊ>onent(){this.Trackbarl * new Syẩtồm.Windows .Forms.Trackbar ();<{System.ComponentMod6l*ĩSuppoỉrtlnitiôlize) (this.Trackbarl

)).Beginlnit 0 ;t h i s . SuspendLayout( ) ;

208

Page 109: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

// Trackbarlthís.Trackbarl.Location * new System.Drawing.Point(72, 8);this.Trackbarl.Mâximum » 20;this.Trackbar 1 .Nanie * Trackbarl” ;this .Trâckbarl. size « new Systerĩì.Drawing.Size (304, 56); this.Trackbarl.Tablndex * 0;this.Trackbarl.Scroll+ » new

Sys tem,EventHandler íthis.Trackbârl_Scroll);// ForTTilthis .AutoScaleBaseSize * new System. Dravíing. Size (5, 13); this.Clientsize = new this.Controls.Addlthis.Trac)cbarl); System. Drawing.SiZ€ (480, 372) ; this.Name * "rcnr:!"; this.Text * *'rorTTìĩ” ; this.Paínt + * new

System.Window.Forms.PaintEventHanđler(this.Fonnl_Pâint);((System.ComponentModel.ISupportInitialize)

(this.Trackbarl)).Endlnit();this.ResumeLayout(false);}lendregion ( STAThreađ] static void MâinO (Application .Run (new Forml());}private void Forml_Paint(object senđer,

Sỵstem.Winứows. Forms- PaintEvéntArgs e){int a * Trackbarl.Value;Pen penl » new Pen(Color.Red,6);e.Graphics. DravíLine (penl, 80'+ a*15, 80, 80 + ồ* 15 100); double [ 3 yl “ new double( lOOOỊ ;

2 0 9ỉ 7.ì Ạp i i 4n k ..n c a

Page 110: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

double [ ] y2 * new doubleỊ 1000] / double [ ] y3 » new double( 1C"'0] ; for(int i * 0; i < 1000; Ì4- + ) ylt i] = (50)*Mach.Sin(i*3.14159/18C*a); penl =* new Pen (Color,Blue, 2); for(inti i * 0; i < 999; i++)e.Graphics• DrawLine i, 200 - (int)yl[ij, i+1, 200 -

(int)yl[ 1+1] );for(int i * 0/ i < 1000; -• + ){y2[ i] = (50)^Math.Cos{i*3.14159/180*a); y3[ i] = yl[ i] + y2ị i} ;}penĩ *= new Pen (Color .Red, 2); for(int i » 0/ i < 999; i++)e.Graphics,DrawLine (penl, i, 200 - (Ỉnt)y2[i]/ i + ỉ, 200

- (int)y2[ i+11 );penl « new Pen(Color.DarkMagentâ, 2); for(int i * 0; i < 999; i++)e.Graphics.DrawLine(penl, 200 - (int)ỵ3[ i] , i + 1, 200

- (int)y3 i+1] );//Brush brl = new SolidBrush(Color.LightSeaGreen);//e.Graphics.rillEllipse(brl, 100, 100, 50 + a, 50 + a);)privíitê voỉd Trackbarl_Scroll (object 'sender,

System.EventArgs e)IInvalidate();}

I

)

zr.LẠp-n«kM..NCA2 1 0

Page 111: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ChươNq 17. L ậ p TRÌNh c ơ sỏ dữ liệuĐể quản trị c ơ sở dữ liệu (CSDL)', ờ đáy ta phải hiểu là CSDL được

xây dựng trong hai môi trưởng thông đụng. Đ ó là m ôi trưởng Access vàmôi trường SQL (môi trưởng Oracle cũng rất hiệu quả nhưtig trong khuôn khổ cuốn sách này không thể trình bày được, vì chuơng trình để quản trị CSDL bẳng Oracle rất đồ sộ).

Trong chương này ta sẽ tìm hiểu về cách kết nối CSDL trong môi trUờng Access 2000 vcí ngôn ngữ lập trình c ^ .

Có hai cách để chưtftig trình truy cập vào CSDL Access:

- Viết chưcíìg trình trong Console Application.

- Viết chưcsig trình trong Windows Application.

Trước hết. ta cần tạo bảng dữ liệu trong Access 2000 (hoặc có thể Access 97. 2003 2005).

13.1. T Ạ O C ơ SỞ D Ữ LIỆ U TRONG ACCESS 2000

Giả sử có bảng dữ ỉiệu như hình 13.3.

1. Khétì động Access 2000. ' iă có cửa s ổ như hình 13.1. Chọn tên CSDL là "data.mdb".

2. Chọn Create Tởble In Design View —» ta có cOte sổ như trên hình13.2.

3. Lần lượt nhập các tniờng vào các hàng của hình 13.2:

- CustomeriD

- CompanyName

- ContactName

- Phone

Kiểu biến (Data Type) có thể chọn ciự& vào thự t tế, nhiừig ở đây ta chọn kiểu Text.

4. Từ hình 13.2, ta chọn khoá chính (Primary Key) cho tniờng CustomerlD.

5. Đóng (Ciose) hình 13.2 và ta cần phải lưu tên bảng dữ iiệu (data

211

Page 112: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ídble) với tên: " tblCustomer "

6. Từhirth,13.1. nhấn đúp vào tên bảng íblCustomer, ta sẽ có bảng như hình 13.3. Sau đó trên tiíhg hàng ta nhập dữ liệu vào các cột.

Hoàn tất cóng việc, ta đóng chương trình Access lại.

ýr Sau khi tạo tệp dữ liệu data.mdb, ta sè chép sang thư mục của chưcmg trình c # (không nên để trong My DcKument).

f i id a t a : D a t a B a s e ( A c c . . . E j['

^ Qu.., -3 For...

Ị “ Rep.. Pag..,

Groups

i^ Q p e n Ạ^D esign ,3 N ew >< I Vrr c>b je<±s

ị ^ Tab..

2esìgn v3New 5< I Vr-|ĩ3ĩỊTftw C reate ta b ie in D esign vievv ^ C reate tab le by usĩng wizard •ẩi C reate ta b le by entering data

ứ > lC u s to m e rs

Hình 13.1

Comp«nyfidmeCortàơHamt

Beld PropertKs

I

Hình 13.2

2 1 2

Page 113: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

■ tblCustomers : Table

► n n r222 333 ORAC

m __R e c o rđ : ì i

CMC Hoa bmh Microsotl FPT

HaUaiHongLien

12344564455667

1 I ► 11 Ĩ L l S Of 4

Htnh 13.3

13.2. XÂY DỰNG CHƯCÍNG TR ÌN H

APPLIC ATIO N

Vi d ụ 1 3 .1 . Trước hết ta thẻm tệp tiẽu đềusing System.Data.OleDb; vào đẩu chương trinh,

using System; using System.Data; using System.Data.OleDb; narnespace CSDL

TRONG CONSOLE

class Clas5il Ibtatic OleDbConnection con; statỉc vold Mainístring; ] args){string s » ;do

Console. WriteLine r — Customer Management— '*); Console, WriteLine (** i. Insert new customer^’); Console.WriteLine (”2. Display custOTier**); Console.MriteLineC* 3. Display custc^rs đataset” ); Console. WriteLiné 4. Delete with Commaiìđ*} ;

2 1 3

Page 114: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console.WriteLine r 5. E)elete with DatâSet” ); Console.VíriteLine (*‘ 6. Quít*') ; s Consoie.ReađLine (); switch (s)

Câse ”1": InsertData (); break; case ”2’*; DisplayO ;break; case •'3**: DisplayWithDataSet <> /break; case "4” : DeleteWithCommand();break; case ”5’*: DeleteWithDataSet 0 /break;)

)while (s !="6");)//--------------------------------------- ------static void ConnectO {ôtring strConString * 0**F;ovider =

Microsoft. Jet .OleDb. 4.0; Data Source»=. A . .\data.mdb*' 7con * new 01ett>Connection(strConString); con.Open();}//----------------------------------------------

stâtic voiđ InsertData 0

Console^VíriteLine("Enter information:Console.Write (”Customer ID: **); string CustlD » Console^ReadLineO;Consoie.Write("Company Name: ”); stríng CompName » Console.ReadLineO; Console.Write("Contact Name: ^); string ContName “ Console.ReadLineO; Console.Write(’• Phone:

2 1 4

Page 115: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

string Phone * Console.ReadLine(>; connecc ();OleDbCommanđ cmd * new OleDbCommandC* INSERT I*NTO

tblCustOĩTters (CustomerIđ, CompanyNâme, ContactName, enone)• VALƯES {*** + CustlD + CoĩĩipName + + ContName +” ', + Phone + " • )•', con) ;

OleDbCommand cmd “ new OleDbCommand(string.rormatINSERT INTO tólCustomers (Customerld,CompanyName,ContactName,Phone) VALƯES (*{0)\ M U * # M2}*, •{3}’)". CustlD, CoiĩipName, ContNarne, Phone) , con);

OleDbCommand cmd - new OleDbCommand("INSERT INTO tblCustomers (CustomerId,CompanyName,ContactName,Phone) VALƯES

cmd.Pârâmeters.Addí" ễCustld*’, CustlD); cmd. Parameters.Ađd (” 0Compnârrie" , CompNaine); crrid, Pârameters,Add (*' ỄContName** ContName); cmd. Parameters.Add ự* Sphone’* , Phone); ínt n =* cmd.ExecuteNonQuery ();Ccnsole. WriteLine (” ( 0} record inserted" , n); con-CloseO;)

static void DispiaỵO {Connect();CieDbCommand cmd - new OleDbCommand SELECT * FROM

tblCustomers" , con);OleDbDataReader dtr * cmd.ExecuteReader0;Console. WriteLine ("\-- Customer List — \n”);while (dtr.ReacìO){

Ccnsole.WriteLinerí 0, -5}\t{l, -12}\t<2, -15)\tf3, -10}”, dtr( ** Customerld**] I dtrí **CompanyName”) , dtrỉ 'ContactNamê**3 » dt.r{"Phone”j );

215

Page 116: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

}Console.WriteLine ("-- E n d ----\n\n");dtr.Close 0; con.Close 0 ;1//-----------------------------------------------------static void DisplaỵVíithDataSet (){Connect ();OleDbDa-taAdapter da = new OleDbbataAdapter (" SELECT * FROM

tblCustcroers" , con);DataSet ds = new DataSetO; da.Fill(ds, ”tblCustomers");DataTable ttal = ds.Tablesí "tblCustomers"] ;Console.MriteLine("\n-- Customer L i s t--- \n");for (int i = 0; i < tbliRovs.Count; i++){

Console.MriteLine (’’{ 0, -5)\t{l, -12}\tí2, -15)\t{3, -10)", tbl.Rows[ il [ "Customerld"] , tbl.Row^ i] [ "CompanyName”] , tbl.Rows[ i] [ "ContactName”] , tbl.Rows[ i] [ "Phone"] ) ;

Console.MriteLine ("-- E n d ----\n\n");con.Close ();

/ / ------------------------------------------------------------------------------------------------------------------------------------------

static void DeleteWith.Comntand()(Console.Sỉrite ("Enter custoiner Id to delete: "); string Custld ® Console.ReadLineO;Connect{ ) ;

OleDbCoíiưnand and “ new Oiel&Comrnand C' DELETE FROM tblCustomers PíHERE Customerld = + Custld + " , con);

int n = cmđ.ExecuteNonQuery{);

2 1 6 -

•)

Page 117: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Console-WriteLine (*M 0) records deleted successfully*', n); con,Close();1

/ 7 ----------- ----------- ---------------------------------------------------------------------------------

static void DeleteWithDataSet ()

Connect();OieDbDataAdapter da = new OleDbDataAdapter r SELECT * FROM

tblCustomer , con);OleDbCommnndBuilder cb = new OleDbCommandBuilđer (da) ;dâ. InsertCommanđ « cto.-GeỊtIn5er,tCornm3od();da. UpdâteCommand * cb. GetUpdateCommand () ;đa.DeleteCommand « cb.GetDeleteCommand();DatâSet ds » new DatâSetO;da.Fili(ds, " tbiCustomers”);DatâTâble tbl « ds,TâblesítblCustomers’*} ;Console.Vírite (** Enter customer Id to delete: *')»string Custld » Console^ReađLine()/for (int i * 0; i < tbl .Rows .Count; i++>(if (Custld tbl-Rows[ i] [ ”Cu5tomerIƠ‘] .ToStringO)(tbl.Rows( i] .DeleteO; break;)

}đa .Update (ds# •^tblCustomers*') ; con.Close 0;Console.WriteLine (** Deiete succesíuliy" );}

2|.uỊ«PtWH...MCA 2 1 7

Page 118: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Sau khi biên dịch và chạy chương trình ta có kết quả như cf hình13.4. Từ Menu, vì CSDL đã có sẵn trong Access nên chọn số 2, ta đã có kết quả như trên hình 13.4.

2 ũic-plòy cưotom^r3 Oioplay customerc MÌth d a tâ ^ e t

D e le te u i t h Comnỉônd5 O e lộ tẹ With ũôtaSet ô, Quit 2

uc tO M io r L ic-

333 t Hong 4455^67ORhC FPT L\pn1 ì 1 CMC Hô222 Moa r»inh Ka IS55 L© T’naoh Hoar><5 ■ rsSGGS

----- ----Cu?tO(nộr MâríôqemộntI n . p r t nẹ-í c<j^>ĩontệrDiz-piơ\ị CsiòtotnerD i ĩ p l a y c u i t o i ĩ i ộ r w i t h da t ò^e tOq ì p ì q wi t h Com»)dndDel€»ce with DâtaSetQu\t

H ình U .4

Bằng cách chọn lần iượt các mục trong Menu, ta có kết quả tưcừỉg ứng. Khi đóng chương trinh c # , nếu m ở CSDL trong môi triíỉrtig Access, ta có thông tin dữ liệu hoàn toàn nhất quán.

13.3. XÂY DỰNG CHƯƠNG TR ÌN H TRONG W INDO W S

APPLICATIO N

dụ 1 3 .2 . Yêu cầu đặt ra là hãy xây dụvig một giao điện Windows như hỉnh 13.5, để quản trị CSĐL là một bảng như đã liệt kê trong Daíagrid.

2 1 8a.i4i<>'nàNH..NCs

Page 119: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

ỌÌForm1 1 3

Product Management

ProAictiD

Proíuct

Ur«c«!

m

;ĩ.vi

Unỉs Produced

Tctdlcdst íor DroứudTũlâỉcosl íor«li Prodưci

;22

3CCC

i24TO

P^oducỉiD ProductNđ ưnctCosĩ UrtiProdưc To(fi>C«{lapíc^ noo 15700

222 Viác 20) :2 2000?33 Ttvi 3Ộ0 22 3000•U4 c«s«ỉte SO r 1000

- I ^ * ;►

it:c

I ' ^

Aiỉ(jn«w £dư Deỉef9 $9ve ^rn«l Producad

PmsI « » Last

SI«MCosf

Exỉt

Hình 13.5^

Các thuộc tính của các đỉẻu khiển:1. Labell: Product Management2. Label2: Product ID3. Lâbel3: Product Name4. LahelA: Unit Cost5. LâbelS: Units Produced *6. Label6: Totâl cost for each product7. Label7: Total cost for all Products8. Datagrídl: dg9. Textboxl; txtPId 10- Textbox2: txtName ỉ 1. Textbox3: txtưcost12. Textbox4: txtUpro

2 1 9

Page 120: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

13. TextboxS: txtTotalA14. Textfaox6: txtTotalE15. Buttonl: Add New; btnAdd16. Button2: Edit; btnEdit17. ButtonS: Delete; btnDel18. Button4: Save; btnSave19. ButtonS: Final Produced; btnPinal20. Button6: Show Cost; btnCost21. Button7: First; btnFirst22. ButtonS: « ; btnPrev23. Button9: » ; btnNext24. ButtonlQ; Last; btnLast25. Buttonll: Exit; btnExitCơ sở dữ liệu được xây dụửig trong mõi írường Access 2000, giống

như ví dụ trẽn, xem hỉnh 13.6. Tên cơ sở dữ liệu data.mdb.

Bảng dữ liệu có tên tblProducts.

Sau khi đâ chọn khoá chính {primary key) là ProducíID. ía tiến hành nhập dữ liệu cho các bản ghi.

Đ ể viết m ã lệnh cho chưcírig trình, ta cần phải khai báo tệp tiêu đề cho việc kết nối dữ liệu,

using System.Data.OleDb; *d a t a : D a l a b a s e ( A c c e s s 2 Ữ O O f ì l e f o r m a t )

1 ' ĩ t ì p e n í ị 1

1 Ồ b ĩ ^ c t s t a b i « í n D e s l g n v ỉ d v v 1 t t ỉ C r ^ a t e b y ư s l n g W i 2 9 r d í 4 Ú C r e « r t :« t a b i e b ỹ e r ì t e ĩ iT x Q d a f ó 1

•»

ii

11 i i i ỉ 1

1

. S P Q u e r .

1 2 P o r m s

R e p o . , .

P a g e s

M a a * o s

ã ^ o i i p s

:jỀà F a v o . . .

Hỉnh 13.6

2 2 0

Page 121: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

■ tblỉN-ochiCts: Table

ProđuctíD ProductName UnrtCost Ị UnitProduced► ú Laptop 1100 '17

222 Vtd&o 200 103?3 T-VI 300 10

' 1444 Casette 50 20

0 0[ Record M 1 JU I Đ S o f 4 1

H ình 13,7

Sau đây là toàn bộ chương trinh để quản trị c ơ sà dữ liệu.

Thao tác các điều khiển írên giao diện.

ỉ. Nhập dữ liệu: Nhấn nút Add New trên hình 13.5, các Textbox được xoá sạch. Sau đó ta nhập dữ ỉiệu lần lưc^ vào các Textbox. Cuối cùng ta nhấn nút Save.

2. Sửa đổi dử liệu; Chọn một bản ghi trong Datagrid. nhấn nút Edií. Rồi tiến hành sửct đổi. Chú ý trưèmg ProductlD không đưỢc sửa. Cuối cùng nhấn nút Save.

3. Muốn xoé một bản ghi trong CSDL, ta chọn một bản ghi trong Datagrid và nhấn nút Delete. Sau đó nhấn nút Save.

4. Khi ía đã nhập được 4 trưcừig ProđuctlD, ProductName, ưnitCost, UnitProduced, ta nhấn nút Show Cost và nhấn nút Rnal Produced ta sẽ nhìn ứiấy kết quả tinh toán trong hai Texíbox còn lại.

5. Trờ vé bản ghi đầu tiên, nhấn nút Rrsí; về bản ghi cuối cùng nhấn níit Last; Về bản ghi tnỉỳc. nhấn n ứ « và bản ghi sau nhấn n ú t» .

6. Thoát khỏi chưcừig trinh, nhấn nút Exit.

Toàn bộ mã chưcíng trình iiệt kê sau đáy.

usiHg System;using System,Drawing/using System.Collections;using System.CoraponentModel;using Sỵstern.Windows.Foríns;using System.Data;

2 2 1

Page 122: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

using System.Data-OleDb; namespâce CSDLCODE{static void MainO •{Application,Run (new Forml 0 );1

OleDbConnection conn;OleDbDataAdapter da;DataSet ds; //Bien dataSetli

Ị Ị --------------------------------------------------------------------------------------------------------------------------------------------------------------

plTÌvate vơid F®rml_Load (object sender^ System.EventArgs' e)

conn = new OleDbConnection (@” Provider =Microsoít, Jet.OI|<a5.4,0; Data Source=, A . Adata.mdy’);

da = new OleEtoĐataAdapter r SELECT * FPOM tblProductố*, conn);OleDbCommandBuilder cb = new OieDbCoiTimandBuilder (dâ);da.InsertCcsĩimanđ = db.GetlnsertCcMĩimandO;da. DeleteCommand “ dD. GetI3eleteCorniTtônd ();da. UpdâteCoitmand * cb. GetỰpdateCorransnd ();ds « new DataSet();đd.Fiií (ds, ’* tblProducts” ) / -tđg.DataSource * ds;dg,DataMemt?er « ”tblProducts" ;txtPĩd. DataBinđings .Mdr Text" ị ás , ” tblPr<xlucts. Pro^uctlđ’) ; txtRíame. DatâBindíngs.Adá f' Test", dSf ” tblPrcxỊiCts. ProdiCtKame?') ; txtu<x»st. DataBindings.Adđ ự' Text", ds, ” tbiProducts - ưnitCost” ) / tỉitupco • DataBindings. Add ĩ ' Text” , cầs tblProđucts .lÃiitProđuceđ*); }//----------------------------------------------------privâte void'btnFirst_Ciick((á:)ject sender, Syst^.EventArgs e) {this.BinđỉngContextí ds, ” tblProducts**j .Position = 0;

2 2 2

Page 123: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

/ / — ............................ ........................ ............... ..................... —.......... -private void bcnprey_ciick(0bject sender, System.EventArgs e)(this.BindingContextí ds, "tblProducts") .Position— ;1

l Ị --------------------------------------------------------------------------- -----------

private voíd btnNext_Click(object sender, System.EventArgs e) \

t h i s . B i n d i n g C o n t e x t l d s , " t b l P r o d u c t s " ) . P o s i t i o n + + ;

)/ / ---------------------------------------------------------------------------------

private void btnLõSt_Click(object sender, System.EventArgs e) (BindingContext( ds, '■ tbiProducts"] .Position *

t h i s . B i n d i n g C o n t e x t [ đ s , " t b l P r o d u c t s ” ] . C o u n t - I ;

1/ / --------------------------------------------------------------------------------------

private void btriAdd_Click<object serđer, System.Ever.tArgs e)I

this.BindingContextí ds, "tblProducts"] .AddNew{);1n ----------------------------------------- ---------private void btnDel Click(object sender, System.EvertArgs e) IB i n d i n g C o n t e x t ỉ d s , " t b l P r o d u ơ t s ” ] . R e m o v e A t ( t h i s .

B i n d i n g C o n t e x t í d s , " t b l P r o d u c t s " ] . P ó s i t í o n ) ;

!/ / ---------------------------------------------------------------------------------------

private void btnSave_Ciick(object sender, Sỵstan.EventArgs e)I

3indingContext[ ds, "tblProđucts”] .EndCurrentEdit(); d a . U p d a t e ( d s , ” t b l P r o d u c t s " ) ;

2 2 3

Page 124: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

)/ / ---------------------------------------------------------------------------------------------------------------------------------

private void btnExit_Click[object senđer, System.EventArgs e)Ithis.Close 0;

/ /private void btnFinal_Click(object sender,

System.EventÃrgs e){DataTable tbl = ds.Tablesí"tblPrọđucts"] ; for (int i = 0; i < tbl.Rows.Count; i++){int upro;int.Parse(tbl.Rows( i] ( "UnitProduced") .ToStringO ) ; tbi.Rows{ í] I "UnitProduced"] = upro + 12;}}/ / ----------------------------- --------------------------------------------------------p r i v a t e v o i d b t n S h o w C Q S t _ C l i c k ( o b j e c t s e n d e t ,

System.EventArgs e)íDataTable tbl “ ds.Table^"tblProducts"] ; tbl.Columns.AdđC' TotalCost") ; double TotalA = 0;for íint i * 0; i < tbi.Rovís.Count; i++)(doi±)le ƯCost * double.Parse(tbl.Row^ i]["UnitCost"] .ToStringO); int - int.Parsettbl.Rcws( i] [ "UnitProduceđ'] .ToStringO); double TotalE “ UCost • upro; tbỊ.Rows[ il [ "TotalCost"] =• TotalE;TotalA+ - TotalE;}

2 2 4

Page 125: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

txtTotalA.Text = TotaiA^ToString0;txtTotâlE. DataEindings.Acid c* Text” , d s , tblProđucts.T o t a l C o s e ');

13.4. CHƯƠNG TR ÌN H Q U ẢN t r ị CSDL s ử d ụ n g W I2AR D

ở mục trẽn ta đã thực hiện chương trinh quản^rị cơ sở dừ !iệu trong

môi trường Access 2000 bằng cách viết mã chương trình, ơ đáy ta sẻ xét bằng một ví dụ vể quản trị CSDL bằng cách kéo ửiả và kết nối CSDL bằng Wizard.

Khi chạy chương trình ta được giao diện như hình 13.10.

CSỌL được lặp trong Access 2000 với tệp dữ liệu person.mdb đặt trong thư mục QLPerson của c # trong ổ đĩa c.

p « rs o n ; D a t ã ^ ^ (Ã c c c » s 2 0 0 0 f ì l e f< K in ạ t)

. . á Q p e n i » ^ D e s i g n J3 í i e v v ^ iX £

O b J e c t s i 'ă j O e a t e t a b í e ( n D e s í g n v i e w

\ j T a b í e s l Ặ 9 - « a t e t a b Ị e b y u s i n g v v iz ạ r d ' --------------' ‘ỂJ < _ r e a te t a b l e b y e n t e t i n g d a t a

_3Id

.3

R e p o . . .

PagesMaaosMod...

GroupsF a v o . . .

Hình 13.6

Tên bảng dữ liệu tblperson trong hình 13.8 và có nội dung như trên hình 13.9.

225» .L Ạ iP T n N K ..N C A

Page 126: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

D Name Age Salary111 Tuyet 22 1000

► 222 Nha 34 999333 Ha 29 1500444 ^ Ptiiíong • 32 2500555

éThuy 43 4000

* 0 0Record: H i 2 > ► i g 0 f5

Hình 13.9

Giao diện hỉnh 13.10 vctì các điều khiển có thuộc tính như sau1, Lâbell: text: Personnel Management2 . Label2:.ID 3« Lâbel3: Nâme4. Lâbel4: Age5. LabelS: Salary6. Textboxl: tboxID7 . Textbox2: tboxName8. Textbox3: tboxAge9. Textbox4: tboxSalary10. Buttpnl: Adđ (text)7 btnAdd (name)iĩ, ButtonS: updâte (text); btnUpdate (name)12. ButtonS: Delete (text); btnDelete (name)13. Button4: Save (text); btnSave (name)14. ButtonS: Begin (text); btnBeg (name)15* Button6: Prev (text); btnPrev (name)16. Buttoiì7: Next (text); btnNext (name) ỉ ? . B u t t o n S í E n d ( t e x t ) ; b t n E n d (nam e)

18. Bùtton9: Exit (text); btnExit (name)19. Datdgridl (name^

2 2 6

Page 127: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

SForm 1

ID

Name

Personne! Manaaement^ Age

Salory

22 Add

Tuyet occUpdaíe

ữelete

Save

ExrtBegin Prev End

^ dataSetl 1 ^ oleDbDataAdapterl • oleDbConnecCionl

Hình 13.10

Kết nối CSDL:

Kéo điều khiển oleDbDataAdapterl vào giao diện như hừih 13.11.

Chọn Tab Provider -> Microsoft Jet 4.0 OLE DB Provider -> Next-»0K.

Ta có tiếp cùa sổ như hình 13-12. Tại nút ... . ta chọn thư mục C:\QLPersonO\person.mdb và nhấn nút Test Connection và có kết quả Succeded. Nhấn tiếp nút OK ta nhận được oleDbConnectionl ờ dưtífi hình 13.10.

- Để tạo Datasetl. ấn chuột phải vào oleDbDataAdapterl dưóí hinh

13-10. ta có cCte sổ mcfi như hình 13.13. ở đây ta chọn:

Generate Dataset, ta nhận được cOte sổ mớỉ hình 13.14.

Sau đó nhấn nút OK, phía dưért hình 13.10 ta thấy thêm D atase tll.

■ Để điển dữ liệu vào dataGrid, từ hinh 13.3, ta chọn Preview Data. Và ta cỏ cửa sổ mcrt hình 13.15.

2 2 7

Page 128: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Nhấn nút PillDataset ở ngay trong hinh 13.15. tại CỦ& sổ Result, ía nhin thấy toàn bộ dữ liệu trong bảng tblperson được hiển thị.

Bây giờ ta cần phải thụt hiện việc hiển ứìị dữ liệu trong bảng tblperson ở trên D atagridl. ,

D a t a ư n k P r o p « r t t e s

I CDfln«cfeOfi ỉ AữvemsỉM I AII &»toct t H ĩ 9Qte you CQOẠMỈO ôli oè PÌivyHÝ)

C t6 P rovK Ỉ« 'OCE wCk ^ ro v *d » f .'60LE >&Pi«viO«r

! Mic*5*cf J«| ĩ 5* 06 í»*ov^

f c f c ù c « f t O l , E C € P > c v l ơ « / f 0 ' D # ir í# * -* :MCTO«ot<X£ DGPicvidelo* DT9P6CS«9»&O L E D 6 •‘•c te ' f o ' k a đ A n n ọ 5 w v MtvcÃct Oie Ptcvidr lo> inttmM ru:»i»‘w%Ị lioTVCliOLC c*6 Ptco»de» fo« OC*BC

MiCY9Kt OLE DE ỡ<«c 9JỈMictSMlỉ 6lE 06 PiovK>«< ỉw 0*«e>«Mio««ofiOlE PirÀd9r«e<0ut^aK s»»>ctMiac«cf OLE c>s Pf9viđ*< tò' SOL 5*rv*r M<pSr«c4 (XE S«T>c4« PtỡnO L E D & P ỉ« T . id e r t e f M ìtr ó s o A > i » c t o r y

MwW4«« ^HAtM

OK CBnC«<

à n ổ u p i ỉ s t e d « t d .

o r dớd a <ỡnriẠctiori ề ctiỀ

C o o n ^ itH ^ n

< Ũ9Ck Heìữ >

Hình 13.11

Bấm chọn Daíagridl trẽn hình 13.10. Chọn Property của điều khiển này (nhấn chuột phải). Trong cửa sổ hình 13.16, tại hàng Datasource, chọn Daíasetl. tại hàng Datamember. chọn tên bảng tblperson.

- Liên kết giCte cấc Textbox VÓI các cột trong DataGrìd. Nhấn chuột trái (single cỉick) vào TextboxID. Sau đó chọn DataBinding trong Property của Textbox này. M ở hàng Text và nhấn chuột vào tên tBoxID. Cũng làm động tác tưc#ng tự vcfi các Textbox còn lại: tboxName, tboxAge, tboxSalary.

Save toàn bộ chưcmg trình và biên dịch.

2 2 8

Page 129: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

iD Data Link PropertiesP t G v i ơ v C o o f t © c t » o n I A â v a n c ^ d j A ỉ i

Sceafy the fcllcwing 10 cor>n«ctto ACC99S ƠBia T S e ỉ ỉ ỉ c ỉ OT e n t e r e d f i ! d & a « e n a m e

|C \QLPeison .u«r9Cn mdo

2 Entsi in ỉ o ư n o i i< ? n ỈO i o ọ o n t o t h e d e l d b o ^

u $ e ( n a ro «

r --------------------|7 6 i9rtK p a 9s w c r đ p * A l i c w S 8v ir i9 ; : ô B 9M0 t đ

T » « C o n n » c t » o n

OK Concet H%|p

Hình ỉ 3.12

Bây giở ta viết mã lệnh cho chưtừig trình.

Tại một điềm bất kỳ trong Fom) (không được trỏ vào bất kỳ điều khiển nào), nhấn đúp chuột trái, ta có phuưng thút;

private void Forml_Load(object sender, System.EventArgs e){try {oleDbDataAdapterl.Fill(dataSetll,"tblperson");)catch (ExceptỊon ex){MessageBox.Shovííex.Message);

229

Page 130: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

^ oMX)DataAdapt^^' 2] V ỉew C ode

ConA gure D ata A d aptei

G enerate D atdset...

.tm

«đed • c t\v ri.r.đcv^» \i Ịi, Aded * c i \ v i r .đ c v í i

?-Ẽesaen. exe * h

t j

Previevv D a ta ...

Cut Copỵ

X QeleteI

e£* PLoperties

Hình 13.13

G e n e ra te D a tase t

Generate a datase^ that inckides the specìffed tebks

Choose a đataset:

^ Existmg:

(9 New: {ữdtdSetỉ

Choose vvhích t<É>)e(s) to add to the dataset:

V tblperson (oỉ^bDaCdAdapterl)

^ Ađd tU s dMaset co th« desỉọner.

OK Cancei Help

Hình 13.14

230

Page 131: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

B DoU Addptef Prev\ew

Data adâpt«fs:

loèObDdtàAddptrl U d a p tẽ f Name oã taT yp v i# e

ĩ a r ^ đata$«:

[õCpí ĩo n D a iaS ítl

ResiAs:

Ib tp c rs o n : 5 Ro«v(s)

Datds?c 97«: byte$ (0.6 ìQs)

10 Name Aạe Saỉsy

m T uy« 22 ỈŨOO

227 Nhô 34 999

333 Ha 29 1500

Ptỉưong 32 2S00

'555 T hư / A3

ơear Ow Heỉp

Hĩnh 13.15

PrupenicsdateOrldỉ

Ĩ C S i f

S y s t e m . W n id o vvs . F o m iS . D a td C

^B <O ynamK:Propertjes^ a

(D d C a B in d m ạ s )(Advanced)

DoCđM embn DâcaSource 7 ©bleS tyles Tag

s rytỹtíựtầ(t>iarf\eỳ L o c k # đ M o d r f le r«

(Nớn ) t b l p « r s o n d a t a S e t l 1 ( C o l l e c t i o n )

d a t a G r i d lPateef>rlvac«

Câpti onVts tbỉ« T njeCotumnMead«rsViSíb Tnié’ ParentRov/sLdbítStv Soth Par entRo w$ Vísibte T fu« È to « v H e d d é r s V ỉ s ^ l e T i y e

A ư t o P o r m ^

Taa

Hình 13.16

2 3 1

Page 132: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

9 F o r m l

Personnel Msnôồémenĩặ - - -

Pịtrt N«M tnú

t

ÂđđLipd«t«EM«

Sxrt

%a d v D i ^ i Ấ ứ è V ^ I ' % Ỉ ^ * c « 0 ' « i ^ t i 0 n 1 ^ Ở X s S e ĩ ỉ

<ỈK>k 1 D VVẩHloirvs f o n « 5 , ỉ - W * ' »

ii i‘ L“J VVoidsVi«p T rg r

3® iD y iít'ĩitP> C 'i

s

»*a«s * S I ' ' ’^ r ẳ ỉ* * r ữ ~ ~ » i : ĩ < . t ì \ t ' . ỉ ' , t

*s»tt Ị t : ' * . ; ỉĩVĩ. i ; » » ĩ í V ? s a * ■ i « .

3 (DKửd)F>^ỉỉ)fAỉk‘«T.*; ( .■11?'

■B ■

ịbOKÌOL»ĩ^>í

sCdưỉ«Waiiủ<il)0ii

3Tùp,

Ootk h.ne9 1>0, 4 ãa ỈÉ ỉt 3UC' :2

T«xt

Hình 13.17

Vi' d ụ ĩ 3 .3 .V iế ị chương trình quản tr ị CSDL sử dụng Wizard

Sau đáy là toàn bộ mã iệnh chương trinh, usíng Systera; using Systerâ.Draving; using System.Collections; using Sỵstèm.ConponentModel; uslng Systero.WinđovíSiFormsí using S y s t m . D a t a ;

using System.Data.Odbc; namespace QLPerson {/// <si2mma£iC’///‘Surrenary đescription ,for rórtĩú./ / / </suOTmarỵ>

pubiic class Fotml: Systein.Winđows.ForTnê.Form { [ STAThreacC

2 3 2

Page 133: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

3 t ‘ t i c v o i d M a i n O»

Aopl ication. Run (new Eorml 0 );\f//------- --------------------------------------------privâte void rorml_Load(object sender, System.EventArgs e) •

thi3.oieDbDâtaAdapterl.Fil1{dataSetll/"tblperson");}/ /----------------------------------------------------privâce void btnciose^ciickícte^^ect sender, System. EventArgs e>ỉ

this.CloseO ;1/ ------ ---------------- ---- ------------------------private void btnAdd_Clic}c(object sender, System.EventArgs e)/this.BindingContextí datâSetll/'cblperson”] -AddNewO;

//------ --- -----------------------------------------private void btnExitClickíob^ect sender,System.EventArgs e

this.BindingContext[ dataSetll/'tblperson”] .EndCurrentEdit 0;

t h í s • o L e D b D a t a A d a p t e r l . u p d a t e ( d a t a S e t l l , ** t b l p e r s o n * * ) ;

íI

, Ị -------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

private void button3_Click<object sender, System. EventArgs e)i

this. BindingContext[ dataSetll/* tblperson”] .RemoveAt(this.BindingContextí d^taSetll,

tbloerson*'] . Position) /

9LẠptvwi.j<ica # 2 3 3

Page 134: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

//-----------------------------------------private void btnUpdate_CXick (object sender/

System.EventArgs e)

string id * tboxID.Text;int n_rcw * BindingContext[ dataSetll/* tblperson”] .Count; int i * 0;for(i =0; i < n_row; i++)(if(id ** dataGridlí i,0] ♦ToStringO){this.BindingContextí dataSet 11,tblperson**] .Position ® i;dataGridl.Select(i);b r e a k ;

if(i “ n_row)

MessageSox.Show(”Not found the recorđ !**);)) '/ /----------------------------------------------------private void btnBeg_Click(òbject sender, System.EventArgs e) (this.BindingContextl dataSetll,'*tblperson”l .Position » 0;

//..... .................. -............. -......p r i v a t e V D id b t n E n d _ C L i c k { o b j e c t s e n d e r , S y s t e m . E v e n t A r g s e i

i

this.BindíngContextí đataSetll,"tblperson"] .Position= BindingContextí dataSetll,"tblperson"3 -Count - 1;

*)//----- ----------------------------------------------

30.LAP7i .j<ca2 3 4

Page 135: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

p r i v a t e v o i d b t n P r e v _ C l i c k ( o b j e c t s e n d e r , S y s t e m . E v e n t A r g s e )

t h i s . B i n d i n g C o n t e x t l d a t a S e t ỉ l , " t b l p e r s o n ” ] . P o s i t i o n — ;

)//----------------------------------------------------p r i v a t e v o i d b t n N e x t _ C l i c k { o b j e c t s e n d e r , S y s t e m . E v e n t A r g s e )

It h i s . B i n d i n g C o n t e x ỹ d a t a S e “ ĩ l , " t b l p e r s o n " ] . P o s i ^ i o n + + ;

2 3 Õ

Page 136: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

TÀi LiỆu ThAM KhẢo1. Charles Pet2old. P ro g ra m m in g M icrosoỷt W in d o w s wìth c ^ .

Microsoít Press. 2002.

2. 'Morgan Skinner. Karli VVatson, Biil Evjen. Allen Jones. P roỷess ion a ì c#. Third Edition. Wiiey Publishing. Inc. 2004,

3. Rađlev L. Jones. Teach Y ourse!f T h e L an gu age in 2 1 doịìs.

Sams Pubtishing. 2004.

4. Jeff Perguson. Brian Patterson, Jason Beres, Pierre Boutquin. Meeta Gupta. Bible. Wiley Publishing, Inc. 2002.

5. Kevin H oíím an . Lonny Kruger. M icrosoỷt Visuaỉ ,N £ T 2 0 0 3

U n ỉeash ed . Sams Publishing. 2004.

6. Rebecca M. Riordan. M icrosoỷt A D O .N E T S te p bụ S tep .

Microsoít Press, 2002.

7. Kevin Hoffman. M icrosoỷt ự lsual c S h a rp 2 0 0 5 U nleashed.

Microsoít Press, 2005.

8. Chrischian Nagelet AI. P ro /ess io n ơ l c S h a rp 2 0 0 5 . Microsoỉt Press. 2005.

9. Jesse Liberty. Visual 2 0 0 5 - A D e u e lo p e r s N o teb o o k .

Microsoít Press. 2005.

10. Phạm Công Ngô. Tự học ngòrì ngừ lập tr ình Visual C++ 6.0 tử cơ bân d ế n nâng cao. Nhà xuất bản Thống kê. Hà Nội, 2002.

236

Page 137: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Muc Lịjc« ạ

Lời ữ\ở\ thiệu.......................................................................................................... 3Chương 1. Các nét co bản của c# .........................................................................5

1.1. Giới thiệu c# ........................................................................................... 51.2. Riếu, biều thức............................................................................................61.3. Từ khoá (keyworíj)...................................................................................... 71.4. Kiểu (type )................................................................................................. ô1.5. Khai báo biến (declaration).......................................................................ôl.ố. Cấc toán tử 60 học............. ..................................................................... 91.7. Toán tử cỊuan hệ và lo^ic.... ............................................... .......... ......... 101.p>. Toán tử xử lý b i t .......................................................................................101.9. Chú thích...................................................................................................12l.lữ. Kiểu liệt kê (edum)................................................................................... 121.11. Kiểu câu trúc - ô tru c t.............................................................................131.12. K.iểu tnản^ (array)....................................................................................14

Chương 2. Xuât nhỊp ổiữ4iệu...............................................................................152.1. Xuât £Ìữ íiệu ra màn hình...................................................................... *... 15

2.1.1. Xuât dD liệu khổn^ địnla ............................................................ 152.1.2. Xuất <áữ liệu cóáịnh ứlạn^ với àẳu phảy íiộn^............................ 15

2.2. Nhâp <dữ liệu tù bàn phím........................................................................15Ct^ương 3. Các lệnh diếu khiển............................................................................ lô

3.1. Các lệnh lặp (loop)................................................................................... lô3.1.1. Lệnh^p fo r.........................................................................................lô3.1.2. vònặ iặp áo... vvhilc.............................................................. ............. 195.1.3. Vòng lập whiìe.....................................................................................213.1.4. vòriặ lặp íorcach.............................................................................. 223.1.5. Lệnh break............................................ ..........................................25

3.2. Lệríh diểu kiền................... ..................................................................... 243.2.1. Cú pháp lệnh áiếu kiện................................... ;...............................243.2.2. sủ dụng lệnh rú t gọn cho if... clsc..................................................27

3.3. Lệnh iựa chọn (ôvvitch... caee)...............................................................27Chươnạ 4. Phương thức (Method).................................................................... 29

4.1. Phương thức trề về m ộtậiá t r ị ............................................................ 294.2. Phương thức kiểu v-otí............................................................................. 514.3. Truyền áối số kiểu tham chiếu có từ khoá ref hoặc ou t....................53

2 3 7

Page 138: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

4.3.1. Từkhoá ref....................................................................................... 344.5.2, Từ khoá o u t..................................................................................... 37

Chương 5. Lớp trong Ịập trình hdớrtq dốt tượng c# (cỉđf^ổ)......................... 395.1. Hàm tạo (con&tructor mcthOíá)............................................................ 415.2. Kiếu property - thuộc tính............................................................... .,..445.5. Mảng........................................................................................................46

5.3.1. Khai báo mản^................................................................................. 465.3.2. Máng một chiếu............................................................................. 465.5.5. Mảng ^ối tượng........................................... :................................. 4Ô5.3.4. M in^ hai chiều.................................................................................515.3.5. Từ khoấ params........................................................ :...................5&5.3.6 Chỉ mục ìnciexer............................................................................... 59

5.4. Khdnq gian tên (namespacc).................................................................. 71Chương 6. Tính thùa kấ tron0 c # (inheritance)..... ;....................................... 74

6.1. s>ù ổiụng từ khoá nevv...........................................................................740.2. & J íáụng tù khoá Virtual và override...................... . 79

Chương 7. Tính da í^ạnặ (^olymorphism)......................................................... 357.1. Hàm trùng tê n ................................................. *.................................. ...Ô67.2. Toin t i} trùng tê n .............................................................................„...09

Chương f ’. PilđS.-................................ ........... ..................................................... 101ô. ì. (3hi/dọc filỂ te x t..................................................................................... 101

ô.l.l. Ghi dữ liệu vào file.............................................................................101&.12. Pọc dừliệu từ f ile ............................................. :........................ .....101

&. 2. Ghi/dọc file nhị phân........ .........................................y ................ 106Chương 9- Chuểi kỵ tự (s tring )................................................ I .....................154

9.1. Phương thức 5tríng.Form at().........................................................—..1349.2. Phương thức ConcstQ .......................................................................... 1349.3. Phưcmg thúc Jo in ()......................................................................... -,...1359.4. rhươn^ thức ltiôe rt()........................................................................... 1369.5. Phươttg thức CopyToO..................................... ;..................................1369.6. Phương thức Trim &tart(). TrimEndQ, Trim ()....................................1379.7. Phưcniậ thức R«movổ(). FatflLeft(). PadRightO................................................. 13Ô9.ỗ>. Phương thức so ôánh các chuẩi ký tự..........................................1399.9. Phương thức xác định chuểi con (đẩu và cuối.....................................1409.10. Phương thức xác áịnh vị tr í !oý tự trong chuỗi..;.................................141

Chương 10. MULTITHREADING (Pa fuồng)......................................... ..........144

2 3 8

Page 139: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Chương 11. Lập trình WINP0W5 vói Cit..............................................................15511.1. L|p trình Wifidows theo kiểu khai báo................................................... 15511.2. Lập trình WirìổÌowe theo <điều khiển thư viện........................................15Ô

Chương 12. Pô hoạ tronợ W'mứ0W5.................................................................... 19412.1, V? dổ th ị các hình và các đườn<Ị cong.................................................. 19412.2, Vẽ các hình có màu tô dậm và hiển th ị s tr in g ...................................19&

Chương 13. Lập trinh cơ 6Ở ũtừ íiệu......................................................................21113.1. Tạo cơ &ở dữ liệu trong Accesô 2 0 0 0 ..................................................21113.2. xâydựnậ chương trình tron^ Conỡole Application............................ 213.15.3. XẳyổÌựniỊ chương trình trong Window6 Application.......................... 21Ô13.4. ChưíTng trình quản t r ị csdl sửdụtiậ W\z&rá.........................................225

Tài Liệu Tham Khảo............................. ............................................................. 2 3 6Mục lục.............................................................................................................. 237

2 3 9

Page 140: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

Chịu trách nhiệm xuất bản:

Chủ tịch HĐQT kiêm Tổng Giám đốc NGÔ TRẨN á i

R ió Tổng Giám đổc kiêm Tổng biên lập NGƯYỂN q u ý t h a o

Tổ chức bản thảo và chịu trách nhiệm nội dung:

Phó Tổng biên tập PHAN DOÃN THOẠI

Giám đốc Công ty CP Sách Đ H -D N NGỎ TH Ị THANH BÌNH

Biên tập lần đầu và tái bản:

PHẠM T H Ị PHƯỢNG Trinh bày hia:

LƯU C H Í ĐỒNG Chếbàn:

PHAM Đ ÌN H PHONG

LẬ P TR ÌN H C # T Ừ C Ơ B Ả N Đ ẾN N ÂN G C A O

Mâ số: 7B656yO - DAI

líi 1.000 bản (QĐ: 32), khổ 16 X 24 cm. In tại Cõng ty CP In - Thương mại Hả TTếâày, 0ịa chí: Số 15. đưcmg Quang Trung, Quận Hà Đông, Hà Nội. Số ĐKKH xuất bản: 19 - 201Q/CXB/178 - 2244/GD, in xon; và nộp iưu chiểu tháng 7 hăm 2010,

Page 141: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung
Page 142: ChươNq 8. F ì I es - BVUthuvienso.bvu.edu.vn/bitstream/TVDHBRVT/19153/2/Lap-trinh-C-tu-co-ban-den-nang-cao-P2.pdfChươNq 8. F ì I es Khi cần lưii dữ liệu vào đĩa, cung

—« CÔNG TY C ổ PHẲN SÁCH ĐẠI HỌC - DẠY NGHẾ

J j | HEVOBCOV I 25 HÁN THUYÊN - HÀ NỘI

W«bsiU : www.hftvobeo eom.vn ; T«l : 043 972471S

VƯUNO MIỆN KIMC h At LUỢNO OU

TÌM ĐỌC SÁCH THAM KHẢO KỶ THUẬTCỦA NHÀ XUẤT BẢN GIÁO DỤC VIỆT NAM

1 . Giáo trình Vật lỷ đại cutftìg> tập một

2. Giáo ừnih Vật lý đạỉ oJơĩìQ, tặp hai

3 . Bài tập Vật lý đại cuơng, tập một

4. Bài tập Vật lỷ đại cucíìg, tập hai

5. Giáo ừình Kỹ thuậl xung số

6. Giáo trình Kỹ thuật lập ữừủi c

7. Giáo ừinh Kỹ thuật mạch điện tử

8. Giáo ừinh Linh kiện điện tử

9. Giáo ừình Lýứìuyêt điổu khiến tự động

10. Giáo trình xử lý số tín hiệu

11. Giáo trinh Vi xử lý và cáu ừúc máy tính12. Giáo trinh Ktú cụ đỉện

13. Lập trình từ cơ bẳn đêh nâng cao14. Cơ sở tự động điều khiển q tá trinh

Lơơtìị Dự^ên ©nh lơơnạ Duyến Bình Lươn Duyan Bình Lương Di^ên Bình Đăng Vẫn Chuyết (CB) Nguyẩn Lính Giang (CB)

£>ăng Vắn Chuyễt (CB) Hquyễn v\ết Nguyán (CB) Phan Xuân Minh (CB) Nguyễn Quốc Trung (CB) Ngô Diễn Tâp (CB)Phđm V|n Chờ Phạm côr\ậ Ngổ Ngụyln Văn Hoà

Bạn dọc có thể mua tại các Công ĩy Sách - Thiết bị ỉruờĩìg học ở các dịa phương hoặc các Cửa hàỉiỊ cùa Nhà xuổỉ bản Giáo dục Việl Nam :Tạí Hà Nội: 25 Hàn ThuyCn ; 187B Giảng Võ ; 232 Tây Sơn ; 23 Tràng Tién ; Tại Oà Nẩng : Số 15 Nguyỗn Chí 'ITianh ; Số 62 Nguyễn Chí Thanh ;

Tại Thành phố Hổ Chí Minh : Cửa hàng 451B - 453, Hai Bà Trưng, Quận 3 ;

Chi nhánh công ly CP Sách Đại học - Dạy nghé, 240 Trán ifinh Trọng - Quận 5. Tạỉ Thành phố cẩn TTiơ: Sổ 5/5, đường 30/4 ;W6b&ít^ : vvvAv.nxbậd.vn

93 4 9 0 7 7 9 2 -Giá: 32.000 đ