Bài thực hành số 8: Kiểu cấu trúc doc

13 344 0
Bài thực hành số 8: Kiểu cấu trúc doc

Đ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

Bài thực hành số 8: Kiểu cấu trúc A. Mục tiêu  Nắm vững định nghĩa kiểu cấu trúc, biến cấu trúc.  Nắm vững một số thao tác cơ bản trên xâu ký tự cấu trúc  Rèn luyện cách gọi hàm, truyền tham số. B. Ôn tập:  Các định nghĩa kiểu cấu trúc  Các thao tác cơ bản trên cấu trúc  Truyền tham số I. Kiểu cấu trúc – biến cấu trúc 1. Các định nghĩa kiểu cấu trúc Dạng 1 Dạng 2 Dạng 3 struct KCT //Tên kiểu { //Các thành phần } struct KCT //Tên kiểu { //Các thành phần }DS các biến struct //Không có Tên kiểu { //Các thành phần }DS các biến struct NHANVIEN { int Ms; char HoTen[MAX]; NTM NTNsinh; char DiaChi[MAX]; int Sdt; }; struct NHANVIEN { char HoTen[MAX]; int Namsinh; char DiaChi[MAX]; int Sdt; }NV; struct { char HoTen[MAX]; int Namsinh; char DiaChi[MAX]; int Sdt; }NV; struct NTM { int Ngay; int Thang; int Nam; } 2. Các thao tác bên trong cấu trúc (các thành phần cấu trúc) Như các biến thông thường. 3. Truy cập vào các thành phần của cấu trúc Theo cú pháp: • TenCauTruc.TenTruong Nếu tên trường là một cấu trúc thì: • TenCauTruc. TenCauTruc.TenTruong Ví dụ: • NV.HoTen //Truy cập vào trường HoTen của NV • NV.NTNsinh.Ngay //Truy cập vào trường Ngay của cấu trúc NTNsinh của NV 4. Nhập dữ liệu cho biến cấu trúc NV (Nhập từng thành phần cấu trúc) chẳng hạn: • cin>>NV.NTNsinh.Nam; // Nhập năm sinh của NV • gets(NV.DiaChi); //Nhập Địa chỉ của NV • . . . 5. Xuât dữ liệu cho biến cấu trúc NV (Nhập từng thành phần cấu trúc) chẳng hạn: • cout<<NV.NTNsinh.Nam; // Xuất năm sinh của NV • cout<<NV.DiaChi; //Xuất Địa chỉ của NV • . . . 6. Phép gán: Hai biến cấu trúc cùng kiểu có thể gán cho nhau 7. Khởi đầu: Khởi đầu cho tưnừg thành phần II. Mảng cấu trúc Là mảng 1 chiều các cấu trúc cùng kiểu Chẳng hạn, khai báo: NHANVIEN Ds[MAX]; xác định mảng 1 chiều Ds có không quá MAX cấu trúc kiểu NHANVIEN 1. Nhập dữ liệu cho mảng cấu trúc (Nhập dữ liệu cho từng cấu trúc) Hàm nhập dữ liệu cho mảng Ds gồm n phần tử kiểu NHANVIEN void Nhap ( NHANVIEN Ds[MAX], int n) { int i; for( i = 0; i < n; i++) { cout<<”\nNhap du lieu cho nguoi thu “<<i+1; cout<<”\nMa so: “; cin>>Ds[i].Ms; cout<<”\nHo ten: “; gets(Ds[i].HoTen); cout<<”\nNgay sinh: “; cin>>Ds[i].NTNsinh.Ngay; cout<<”\nThang sinh: “; cin>>Ds[i].NTNsinh.Thang; cout<<”\nNam sinh: “; cin>>Ds[i].NTNsinh.Nam; cout<<”\nDia chi: “; gets(Ds[i].DiaChi); cout<<”\nSo dien thoai: “; cin>>Ds[i].Sdt; } } 2. Xuất dữ liệu cho mảng cấu trúc (Xuat dữ liệu cho từng cấu trúc) Hàm Xuất dữ liệu cho mảng DS gồm n phần tử kiểu NHANVIEN void Xuat ( NHANVIEN Ds[MAX], int n) { int i; for( i = 0; i < n; i++) { //Xuất thông tin nhân viên i cout<<'\n'; cout <<setiosflags(ios::left) <<setw(10)<< Ds[i].Ms; <<setw(20)<<Ds[i].HoTen <<setw(2)<<DS[i].NTNsinh.Ngay <<’-‘ <<setw(2)<< DS[i].NTNsinh.Ngay <<’-‘ <<setw(6)<< DS[i].NTNsinh.Nam <<setw(20)<< Ds[i].DiaChi <<setw(10)<< Ds[i].Sdt ; } } Ghi chú: Hàm này xuất thông tin của mỗi nhân viên trên một hàng theo định dạng sau (chèn tập tin thư viện <iomanip>) : • Hoten: trong 20 cột (canh trái) • Ngay thang nam sinh : 12 cột • DiaChi: 20 cột (canh trái) • Sdt: 10 cột (canh trái) III. Truyền tham số Đối của hàm Truyền tham số Biến cấu trúc Giá trị cấu trúc Tên mảng cấu trúc Tên mảng cấu trúc cùng kiểu, cùng kích thước C. Luyện tập: Ví dụ 1: Để quản lý nhân viên ta xây dựng cấu trúc gồm: • Mã nhân viên, • Họ nhân viên, • Tên nhân viên, • Địa chỉ, • Điện thoại, • Mức lương, • Phòng làm việc. Viết chương trình tổ chức menu thực hiện các chức năng sau: • Xem danh sách nhân viên. • Xem danh sách nhân viên thuộc một phòng. • Sắp xếp danh sách nhân viên theo thứ tự giảm dần của mức lương. Thực hiện: Bước 1: Tạo Project với tên “Lab8_Vd1”. Bước 2: Tạo tập tin chương trình vd1.cpp Bước 3: Trong tập tin vd1.cpp, soạn code theo cấu trúc: #include <iostream> #include <stdio.h> #include <conio.h> #include <iomanip> #include <string.h> #define MAX 100 using namespace std; //Dinh nghia kieu du lieu struct NHANVIEN { char MaNV[10]; char HoNV[15]; char TenNV[10]; unsigned int Tuoi; char Dc[10]; int Sdt; double Luong; char Phong[20]; }; //Khai bao nguyen mau ham //Nhap,xuat void Nhap ( NHANVIEN Ds[MAX], int n); void Xuat ( NHANVIEN Ds[MAX], int n); //Chuc nang void DSPhong ( NHANVIEN Ds[MAX], int n, char Phong[20]); void DSLuong_Tang ( NHANVIEN Ds[MAX], int n); //To chuc menu void XL_Menu(NHANVIEN Ds[MAX], int n, int Chon); int ChonMenu(); void Menu(); void main() { NHANVIEN Ds[MAX]; int n, Chon; cout<<"\nNhap n = "; cin>>n; Nhap (Ds,n); do { Chon = ChonMenu(); XL_Menu(Ds,n,Chon); } while(1); } void Menu() { cout<<"\n BANG MENU "; cout<<"\n1. Xem danh sach"; cout<<"\n2. Xem danh sach theo phong"; cout<<"\n3. Danh sach tang theo luong"; cout<<"\n5. Thoat khoi chuong trinh!!!"; } int ChonMenu() { int Chon; for(;;) { Menu(); cout<<"\nNhap Chon tu 1 -> 5: "; cin>>Chon; if (1 <= Chon && Chon <= 5) break; } return Chon; } void XL_Menu(NHANVIEN Ds[MAX], int n, int Chon) { char Phong[20]; switch(Chon) { case 1: cout<<"\n1. Xem danh sach"; cout<<"\nDanh sach nhan vien:\n"; Xuat(Ds, n); cout<<'\n'; _getch(); break; case 2: cout<<"\n2. Xem danh sach theo phong"; cout<<"\nDanh sach nhan vien:\n"; Xuat(Ds, n); _flushall(); cout<<"\nXem phong nao : "; gets(Phong); cout<<"\nDanh sach nhan vien phong "<<Phong<<" :\n"; DSPhong ( Ds, n,Phong); cout<<'\n'; _getch(); break; case 3: cout<<"\n3. Danh sach tang theo luong"; cout<<"\nDanh sach nhan vien:\n"; Xuat(Ds, n); _flushall(); DSLuong_Tang (Ds,n); cout<<"\nDanh sach nhan vien tang theo luong:\n"; Xuat(Ds, n); cout<<'\n'; _getch(); break; case 5: cout<<"\n5. Thoat khoi CT!\n"; exit(1); } } void Nhap ( NHANVIEN Ds[MAX], int n) { int i; for( i = 0; i < n; i++) { _flushall(); cout<<"\nNhap thong tin nguoi thu "<< i+1; cout<<"\nMa nhan vien: "; gets(Ds[i].MaNV); _flushall(); cout<<"\nHo nhan vien: "; gets(Ds[i].HoNV); _flushall(); cout<<"\nTen nhan vien: "; gets(Ds[i].TenNV); cout<<"\nTuoi: "; cin>>Ds[i].Tuoi; _flushall(); cout<<"\nDia chi: "; gets(Ds[i].Dc); cout<<"\nSo dien thoai: "; cin>>Ds[i].Sdt; cout<<"\nLuong: "; cin>>Ds[i].Luong; _flushall(); cout<<"\nPhong: "; gets(Ds[i].Phong); } } void Xuat ( NHANVIEN Ds[MAX], int n) { int i; for( i = 0; i < n; i++) { cout<<'\n'; cout<<setiosflags(ios::left) <<setw(10)<< Ds[i].MaNV <<setw(15)<<Ds[i].HoNV <<setw(10)<<Ds[i].TenNV <<setw(4)<<Ds[i].Tuoi <<setw(10)<< Ds[i].Dc <<setw(10)<< Ds[i].Sdt <<setw(10)<< Ds[i].Luong <<setw(10)<< Ds[i].Phong ; } } //Xem danh sach cua mot phong void DSPhong ( NHANVIEN Ds[MAX], int n, char Phong[20]) { int i; for( i = 0; i < n; i++) { if(stricmp(Phong, Ds[i].Phong)==0) { cout<<'\n'; cout<<setiosflags(ios::left) <<setw(10)<< Ds[i].MaNV <<setw(15)<<Ds[i].HoNV <<setw(10)<<Ds[i].TenNV <<setw(4)<<Ds[i].Tuoi <<setw(10)<< Ds[i].Dc <<setw(10)<< Ds[i].Sdt <<setw(10)<< Ds[i].Luong; } } } // hàm: stricmp(Chuoi1, Chuoi2) == 0 nếu 2 xâu ký tự Chuỗi 1 và Chuỗi 2 trùng nhau //Sap danh sach tang dan theo luong void DSLuong_Tang ( NHANVIEN Ds[MAX], int n) { int i, j; NHANVIEN Tam; for( i = 0; i < n-1; i++) for(j=i+1; j < n; j++) if(Ds[i].Luong > Ds[j].Luong) { Tam = Ds[i]; Ds[i] = Ds[j]; Ds[j] = Tam; } } Ví dụ 2: Như ví dụ 1, nhưng yêu cầu khởi tạo danh sách nhân viên Ds (không nhập từ bàn phím theo hàm nhập) và thêm chức năng sau: • Sửa đổi thông tin một nhân viên khi biết mã nhân viên Thực hiện: Bước 1: Tạo Project với tên “Lab8_Vd2”. Bước 2: Tạo tập tin chương trình vd2.cpp Bước 3: Trong tập tin vd2.cpp, soạn code theo cấu trúc: // (Như ví dụ 1) //. . . //Thêm hàm sửa thông tin void SuaTT(NHANVIEN Ds[MAX], int n, char MaNV[10]); void main() { int Chon; //Khoi dau danh sach nhan vien NHANVIEN Ds[MAX]= { {"TV0001", "Tran ", "Ngoc Hoa",32,"Da Lat",910345321,3.5,"Tai vu"}, {"TV0002", "Truong Ve", "Kien",38,"Da Lat",911345189,4.0,"Tai vu"}, {"TC0002", "Ly Nhuoc ", "Dong",24,"Bao Loc",900100040,2.0,"To chuc"}, {"TC0005", "Nguyen ", "Thi",33,"Bao Loc",911675341,3.0,"To chuc"}, {"TC0008", "Vu ", "Thuy",58,"Da Lat",901605308,4.0,"To chuc"}, {"DT0003", "Duong ", "Tu Quynh",30,"Sai gon",900786453,3.0,"Dao tao"}, // . . . {"DT0005", "Trinh Y ", "Kien",30,"Hong Kong",901,6.0,"Dao tao"} }; int n = 7; do { Chon = ChonMenu(); XL_Menu( Ds, n, Chon); } while(1); } //Hàm menu thêm : cout<<"\n4. Sua thong tin"; void XL_Menu(NHANVIEN Ds[MAX], int n, int Chon) { char MaNV[10]; char Phong[20]; switch(Chon) { //Case 1: như vd1 //Case 2: //Case 3: case 4: cout<<"\n4. Sua thong tin"; cout<<"\nDanh sach nhan vien:\n"; _flushall(); Xuat(Ds, n); cout<<"\nNhap Ma nhan vien : "; _flushall(); gets(MaNV); SuaTT(Ds,n,MaNV); cout<<"\nDanh sach nhan vien da sua:\n"; Xuat(Ds, n); cout<<'\n'; break; case 5: cout<<"\n5. Thoat khoi CT!\n"; exit(1); } } //void Xuat ( NHANVIEN Ds[MAX], int n) //void DSPhong ( NHANVIEN Ds[MAX], int n, char Phong[20]) //void DSLuong_Tang ( NHANVIEN Ds[MAX], int n) //Sua thong tin mot nhan vien khi biet ma so void SuaTT(NHANVIEN Ds[MAX], int n, char MaNV[10]) { int i; char Kt; char HoNV[15]; char TenNV[10]; unsigned int Tuoi; char Dc[10]; [...]... 0 . Bài thực hành số 8: Kiểu cấu trúc A. Mục tiêu  Nắm vững định nghĩa kiểu cấu trúc, biến cấu trúc.  Nắm vững một số thao tác cơ bản trên xâu ký tự cấu trúc  Rèn luyện cách. hàm, truyền tham số. B. Ôn tập:  Các định nghĩa kiểu cấu trúc  Các thao tác cơ bản trên cấu trúc  Truyền tham số I. Kiểu cấu trúc – biến cấu trúc 1. Các định nghĩa kiểu cấu trúc Dạng 1 Dạng. tham số Đối của hàm Truyền tham số Biến cấu trúc Giá trị cấu trúc Tên mảng cấu trúc Tên mảng cấu trúc cùng kiểu, cùng kích thước C. Luyện tập: Ví dụ 1: Để quản lý nhân viên ta xây dựng cấu trúc

Ngày đăng: 01/08/2014, 01:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan