1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình ngôn ngữ C# từ cơ bản đến nâng cao: Phần 2

142 17 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 142
Dung lượng 7,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu Lập trình C# từ cơ bản đến nâng cao: Phần 2 gồm nội dung từ chương 8 đến chương 13. Nội dung phần này trình bày các nội dung về file, chuỗi kĩ tự, multithreading, lập trình Windows với C#, lập trình cơ sở dữ liệu.

Trang 1

ChươNq 8 F ì I esKhi 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 file

Cú pháp để ghi dữ liệu vào íile:

Trang 2

Chú ý: Một cách khác đ ể ghi d ữ iiệu vào file Tniớc hếỉ phải khai

báo biến file:

StreanMriter sw;

Tạo tìle text nhờ hàm CreateYextQ:

s t a t l c s t r in g f i l e l * " c : \ \ t e s t f i l e t x t " ;

sw •= F i l e C r e a t e T e x t ( f i l e l ) ;

Trang 3

I ?

Ghi dữ liệu vào file:

sw W riteL inerT his i s a t e x t " ) ;

Sau khi ghi xong dữ liệu cần phải đóng file lại

sw.WriteLine{"Dai hoc Bach Khoa Ha N oi.");

sw.WriteLine("Trung tam Genetic Singapore.");

Trang 4

s t r i n g input;

s r l * F i l e O p e n T e x t ( f ile l) ;

input « srl.ReadToEnđ0 ;

C on sole.W riteL in e(in p u t);

Console VíriteLine (** The end o f the stream!” );

Daí hoc Bach Khoa Ha Noi

Trung tam Genetic Singapore

Trang 6

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

Trang 7

& 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).

Trang 8

Ta có thể thực hiện việc ghi/đọc dữ liệu của nhiều kiểu dữ liệu khác nhau bằng file nhị phân.

- Ghi dữ liệu từ íile nhị phân;

s t r i n o f i l e l = " c : \ \ F i l e B i n l d a t " ;

FileStreâfn f i l e l ;

s t r i n g name; //d ữ l i ê u thành viên

double Sâlary; //d ừ l i ê u thành viên

/ / khai bảo đ6i tượng wf cho v iê c ghi vào f i l e nhị phán

B in ary W riter wf * new B i n a r ỵ W r i t e r ;

/ / Các hàm Write {) để g h i từng thảnh vỉén

wf,Write(name);

w f.W rite(sa la ry ) /

“ Đọc dữ liệu từ íilc nhị phân:

Khai báo file cần đọc:

riieS trea m f i l e l ;

Khai báo đối tưỢng rf cho việc đọc:

BinarỵReađer r f « new B in a r y R e a d e r (filô l);

Trang 9

p u b lic void Show()

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

109

Trang 10

C on sole.W riteL in eL u on g: **+saLary);

)

p u b lic void SaveData(FileStream f i l e l )

Console • VíriteLine (" 1, Nhap du l i e u ” );

Console WriteLine <"2• Doc va xem " );

Console WriteLine (” 3 • Thoat” );

Trang 11

Câse ” 1*’ : Console.WriteLine Save data to

EileStream fwr * new r ile S t r e a m (fiie n a m e ,

EileM ođe C rea te, r i l e A c c e s s Write^ r i l e S h a r e W r ite );

c a se ” 2": Consoie.WriteLine ("Read dâtâ from f i l e ” );

F ilestream f r new F ile S t r e a m ( f iie n a m e , PileMode.Open,

Trang 12

3 Thoat

Nhap so 1 - 3 de lua chon: 1

Save daĩa to file

Nhap ten: Hoa

Nhap so 1 - 3 de lua chon: 2

Read data from file

Ten: Hoa; Tuoi; 22

Trang 13

Console.MriteLine ("Ten ” -*-najne+” ; Tuoi:" ;

Console WriteLine("Luong: "+ sa lâ r y );

Trang 14

FileStream fwr * new FileStream (filenam e, FileMode.Create,

F ileA ccess,W rite/ F ileS h are.w rit e ) ;

-Console,W riteLine{’* Doc du l í e u tu f i l e ” );

FileBin3 [ ] p i “ new FileBini^ n] ;

rileStream f r = new FileStream (filenam e, rileMode.Open, PileAccess.Read, r ile S h â r e Read);

Trang 15

^ ^ K ể t quả:

Nhap n = 2

Ghi du lieu vao fìle

Nhap ten: Mai

Doc du lieu tu fìle

Ten: Mai: Tuoi: 22

Luong: 1000

Doc du lieu tu file

Ten; Ha; Tuoi; 32

Luong; 2000

G v i dụ 8 7 Xây dựng m ột menu để th ụ t hiện các thao tác: Nhập, liệt

kê, xoá, sửa tim kiêm, bổ sung

using System; //C o n so ie A p p lica tio n

Trang 16

Console WriteLine ("person { 0) " , i ) ;

Console.VỉriteLine ("Enter name: " );

Trang 17

C o n so le.V ỉriteL in e ("Name; f CỊ ; ID: ( l } ; a g e : 12}",

Trang 18

Console.W riteLine("Enter name: ” );

p{ i] name “ Console ReaoLine () ;

C onsole.K riteL inerE nter ID: '•);

Trang 19

Console.VíriteLine(” Bnter ID: ” );

fị nì ID » Int64,Pârse{Console.R6ddLine{));

Console.W riteLineTEnter age: ");

p( n] ,age ® Int32.Parse (Console.ReađLineO );

C onsole WriteLine r* MENU ” );

Console.W riteLine(" 1 Input D a t a ’M;

C onsole-VíriteLiner 2 L is t A ll **);

Console WriteLine r 3• Edit (Name) ");

C onsole.writ e L i n e r 4 Search Name ");

Console.WriteLine(" 5, Search ID " ) /

Console.W riteLine(" 6, Delete

Console.W riteLine(** 7, Append");

Trang 20

case 5: p er.S ea rch lù d ;break;

Ndmp :Nga ; 1 0 11 1 I^9e : 26

tình ; 10 333 r ^99 : 28 MENU

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

Trang 21

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:

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

' P roject 1: Telephone in q u irỵ system

121

Trang 22

• In c ld s s PhoneBook: an array c f phcnes i s implemented

th is^ ad d ress * ađdress/

t h i3 .no0 fLine “ noOfLine;

get{ return phoneNun*iber;)

setí phoneNumber » v a lu e;l

}

p u b ỉic s t r in g FuliName

n.dị^wỀmi.JtíM

122

Trang 23

uet{ r e t u r n íullKame;}

se ti 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 đ r e s s ;}

set{ address = value;)

oet ị return type;}

set{ type = value;i

Console,W rite r F u ll name: '•) ;

fullName « Consolế.R eadLineO ;

C onsole Write í” Address: ” ) /

address * C onsole ReadLine();

C onsole.W rite(”No o f i i n e : ,

noOfLine « In r3 2.P arsetC on sole.R ead L in e());

Console.Vírite("Tỵpe: " );

Trang 24

type * Console.ReadLine();

organ izâtion « Console.ReadLine ();

Return (String.Format (’* Phone: { 0) \nName: { ỉ}\nAddress:

{ 2) \n L in e: { 3} \ n T ^ e : { 4} \nOrg: ( 5} phoneNumber, fullName, addresố, noOíLine, type, o r g a n iz a tio n ));

Trang 26

thisỊ index} Input 0 ;

C o n s3le.W riteL in er Done" i !

Trang 29

case 7: / / Load from f i l e

Console.WriteLine (** 1 Add a Phone" );

Console.WriteLine (" 2 Edit a Phone’' );

Console.WriteLine r* 3 De l e t e 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 f ile " );

Console.WriteLine ("8 Display Emergency Numbers");

C onsoie.w riteLine C’ 9* E xit” ) ;

Trang 30

Console WriteLine {’* Enter Phone i n f c ;

Phone phonê » new Phone {);

Trang 31

Console Write ('* Enter Name: **);

Console Write (" Enter Phone Nuraber:

ulong t e l - UInt64 Parse(Console.ReadLỉne( ) ) ;

Console Write ("XnEnter index o f Phone to e d i t : ” );

i n t i = Ĩn t3 2 Parse (Console ReadLine {));

i i s t E d i t ( i );

1

s t a t i c void D eleteO

{

Consoỉe.Mrite ("\nEnter index o f Phone t o đ e le t e : '*);

i n t i = Int32 Parse (Console ReadLine ( ) ) ;

File* D ele te(fileN a m e);

//remove pre*stored f i l e i f any

rileStream f s = new FiÌeStreâíTi(fileName, rileMode.Appenđ, FileA ccess.W rite, FileSharevW rite);

BinarỵWriter bw ® new B in a ry W riter(fsì;

Trang 32

fo r (in t i = 0; i < list.C o u n t; ++i)

FileStream f s =■ new FileStreajn(fileNarae, FíleMode.Open,

F ile A c c e s s Read, F ileS h a re Bead);

BinaryReader br = new BinaryReađer(fs);

Console.M riteliine C' P o lic e i 113") ỉ ■

C onsole.w rit e L in e (” P o lic e : 114")/

Console.WriteLine c* P o lic e : 115")!

}

}

132

Trang 33

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ụ:

~ Để 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 i c 0 6 \ B a i t a p d a i G e n \ B a i t a p d a i G e n \ b i n \ D e b

1 1

L Ê X

ì Load from f ile

3 Diỉpiày Emsrgency Mjiiiberủ

ĩnter yo iir choice- 5

'ianc/ũrganiration Phaíi cong Kgo / Dh 8ach khũS Ha noi

■í;idrFi3 Giap bât Hă noi

'í â - í / O r ạ â n i r a t i o n - PbôJi Bao ưan / I8H

Trang 34

ChươNq 9 Chuồi k ỷ T ự (s T R Ì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

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;

Trang 35

s c a t i c void Main(stringí 1 args)

Hello and welcome to you

Heiio— and— welcome— to— you

135

Trang 36

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

M ch 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.

Trang 37

C onsole WriteLine(mchar);

sl.CopyTo(6, s2, 0, 4);

/ / 6 l ã v ị t r í đẩu của chuỗi cán t r íc h ra

/ / 0 l à v ị t r í đầu của chuỗi mới

s1: Hello beautiíul vvorid !

9.6 PHƯƠNG THỨC TRIMSTART(), TRỈMEND(), TRIMQ

Phươ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

s t r in g s l « Big **; / / c o h a i dau cach h a i ben

Console WriteLine (" Heiloí 0} Worlđ*, s l ) ;

s t r in g s2 « s l.T r im S t a r t0 ; / / c a t bo dau cach dau chuoi Console WriteLine (" Heilo( 0} Worlđ: ", s 2 ) ;

s2 - s l TrimEnd (); / / c a t bo dau cach cu oi chuoi

Console WriteLine ự* Hello{ 0} World: ", s 2 ) ;

Trang 38

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

Console.ReadLine (); «

)

)

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 Ư Ơ N G 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ự m tì).

s t r ln g s l ■ "H ello B e a u tifu l World";

C o n so le.W riteL in e(sl);

Trang 39

•**’ **“ *Hello Beautitul VVortd

Hello Beautitul VVorld"” * " * '

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

Trang 40

9.9 PHƯƠNG THỨ C XÁC Đ ỊN H C H U Ỗ l C O N ĐẦ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

Trang 41

Consoie MriteLine ( s ĩ S ta rtsW ith {s2 ));

C onsolô.W riteLine{sl.EndsW ith(s2));

Console.WriteLine ( s l StartsW ith ( s 3 ) );

C onsole.W riteL ine(sl ToUpper {)) ;

Console ;WriteLine ( s l ToLover ( ) ) ;

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

Phương tíiức sl.IndexO f(’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

Trang 42

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.

s t r in g Drive = s S u b str in g íO ,s.In d ex O í(" \\" ) ) ;

s t r i n g Path = s.R em ove{s.L astInd exO f ) ,

s.L e n g th s.L a stIn đ e x O f ( 0"\ ") ) /

s t r in g filename = s.S u b strin g(s.L astln d exO í(Ễ " \" )+1);

strin g extension = filename.Substring(filename.Inde>aDf ;

Trang 43

Console.VỉriceLine C'Drive: f0, 15) Path: { 1)\nFilename

{2, 12} Extension: { 3} " , Drive, Path, f ilen a m e,ex ten sio n );

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

Trang 44

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 (onemoment) 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 C hút năng "đa nhiệm" (multitasking) cũng là m ột cách m à luồng

144

Ngày đăng: 11/05/2021, 01:47

🧩 Sản phẩm bạn có thể quan tâm

w