Tải bản đầy đủ (.pdf) (25 trang)

Bài Tiểu Luận Lập Trình Hướng Đối Tượng Đề Tài 33 Xây Dựng Chương Trình Quản Lý Cán Bộ Theo Hướng Đối Tượng..pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (787.12 KB, 25 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG ĐẠI HỌC ĐẠI NAM.</b>

<b>BÀI TIỂU LUẬN</b>

<b>LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG</b>

<b>Đề tài 33: Xây dựng chương trình quản lý cán bộ theo hướng đối tượng.</b>

<b>Họ & tên sinh viên:Đỗ Quốc KhánhĐỗ Thị Hoan</b>

<b>Giảng viên hướng dẫn:Nguyễn Thái Sơn</b>

<b>Hà Nội 10-2021</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Lý do chọn đề tài: </b>

Từ trước đến nay, công việc quản lý nhân lực của các doanh nghiệp luôn là mộtcông việc thiết yếu. Nhu cầu quản lý càng lúc càng cao cũng như đi kèm đó là nhữngkhó khăn và phức tạp do nguồn nhân lực ngày một lớn. Việc có những ứng dụng từcông nghệ thông tin đang rất phát triển giúp giảm tải công việc quản lý bằng thủ côngcủa con người là điều rất cần thiết để giải quyết vấn đề trên.

Ưu điểm của việc sử dụng những phần mềm quản lý là giảm sự trùng lặp, khảnăng sắp xếp thông tin cũng như đưa ra các báo cáo, hỗ trợ tìm kiếm giúp cho độ chínhxác và tồn vẹn dữ liệu của thơng tin được đưa ra ở mức cao nhất có thể khi truy xuấttheo nhiều cách khác nhau cũng như là chia sẻ và ứng dụng thơng tin.

Từ những cơ sở đã tìm hiểu được về chủ đề trên, nhóm chúng em đã chọn đề tài:Xây dựng chương trình quản lý cán bộ theo hướng đối tượng.

Thông tin cán bộ bao gồm:

Yêu cầu chương trình:

Mã Cán Bộ - Họ tênGiới tính – Q qnNăm sinh – Chun MơnTrình độ - Hệ số lươngPhụ cấp trách nhiệm – Ăn trưa

Thực lĩnh tính theo công thức = (HSL + PC)*450000+Ăntrưa

Năm tăng lương – Xếp loại lao động

Tạo và nhập một danh sách cán bộHiển thị các cán bộ có trong danh sáchLiệt kê các cán bộ có chun mơn CNTT

Hiển thị danh sách các cán bộ được sắp xếp loại giỏiSắp xếp danh sách theo mã cán bộ

Loại bỏ một cán bộ theo mã cán bộThêm một cán bộ vào trong danh sách

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Trong q trình làm bài, nhóm em đã cố gắng tìm hiểu những tư liệu cũng như nhữngkiến thức dưới sự hướng dẫn của giảng viên nhằm hồn thiện bài tập lớn. Song khơngthể tránh khỏi sai sót. Nhóm em rất mong được nhận sự góp ý từ thấy cơ để bài làmđược hồn thiện hơn.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>I.Hướng đối tượng và các khái niệm trong lập trìnhhướng đối tượng.</b>

1. Hướng đối tượng là gì?

Hướng đối tượng là thao tác phân tích quy đổi những sự vật, sự việc, vật thể cótrong bài tốn thành những đối tượng trong lập trình, giúp việc quản lý, phát triển, mởrộng chương trình được đơn giản hơn.

Lập trình hướng đối tượng là cách sử dụng hàm để tạo ra một hệ thống code cólogic, những hàm được xây dựng có quan hệ với nhau được đặt vào một file và chúngkhông thể liên kết chặt chẽ với nhau.

Những đối tượng trong một ngôn ngữ hướng đốin tượng là các kết hợp giữa mãvà dữ liệu mà chúng được nhìn nhận như là một đơn vị duy nhất. Mỗi đối tượng cómột tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua têncủa nó. Như vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu(bên trong của nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường.

2. Công dụng của hướng đối tượng trong lập trình.

Cơng dụng chính của hướng đối tượng là giúp tăng năng suất, đơn giản hóa độphức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viêntập trung vào các đối tượng phần mềm ở bậc cao hơn.

Dựa trên nguyên lý kế thừa, trong q trình mơ tả các lớp có thể loại bỏ nhữngchương trình bị lặp, dư. Và có thể mở rộng khả năng sử dụng các lớp mà không cầnthực hiện lại. Tối ưu và tái sử dụng code hiệu quả.

3. Các khái niệm trong lập trình hướng đối tượng.

- Class: Là tập hợp các đối tượng (object) có điểm tương đồng hay khn mẫuđể tạo ra đối tượng. Ngược lại, đối tượng là khuôn mẫu để tạo ra đối tượng.

- Object: còn được gọi là thực thể hay là đối tượng. Tùy vào ngữ cảnh củachương trình mà chúng ta phân tích trạng thái và hành vi cho phù hợp. Chỉ lấy ranhững hành vi mà ta quan tâm đến, ko cần phải lấy hết tất cả các trạng thái và hành vicủa đối tượng có thể có.

-Inheritance: Cịn được gọi là kế thừa, đây là đặc tính cho phép một đối tượngcó thể có sẵn đặc tính mà đối tượng đã có thơng qua kế thừa. Điều này cho phép cácđối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà khơng phải tiến hành định nghĩalại.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>II. Trình bày thuật tốn.</b>

Chương trình thực hiện:void CanBo::CNTT(){

ifstream MyReadFile("text.txt"); string text;

getline(MyReadFile,text); vector<string> a; bool check = 0;

while (getline(MyReadFile,text)) {

if(text == "endl"){ a.clear(); if(check) cout<<endl; check = 0; }

else{

a.push_back(text); }

if(check) cout << text << setw(11); if(text == "CNTT"){

for(auto i: a){

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

cout << i << setw(11); }

check = 1; }

}

MyReadFile.close();

2. Hàm tính số tượng cán bộ xếp loại giỏi.

Ý tưởng thuật toán: Đối chiếu với mục xếp loại lao động có trong input. Nếu xếp loại trùng với xếp loại giỏi thì đếm cán bộ đó và đưa thơng tin ra màn hình.

Cách thức thực hiện: Sử dụng biến check có kiểu bool và đối chiếu. Nếu text rỗng thì biến check trả về giá trị check = 0, ngược lại thì thêm text vào b. Sau đó xét, nếu text trùng khớp với chuỗi “Gioi” thì đấy giá trị check về true và in ra.

Chương trình thực hiện: void CanBo::LDGioi(){

ifstream MyReadFile("text.txt"); string text;

getline(MyReadFile,text); vector<string> b; bool check = 0;

while (getline(MyReadFile,text)) {

if(text == "endl"){ b.clear(); if(check) cout<<endl; check = 0; }

else{

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

b.push_back(text); }

if(check) cout << text << setw(11); if(text == "Gioi"){

for(auto i: b){

cout << i << setw(11); }

check = 1; }

}

MyReadFile.close();}

3. Hàm sắp xếp cán bộ theo mã cán bộ.

Ý tưởng thuật toán: Sử dụng bubble sort lên trường MaCB so sánh phần tử với phần tửbên phải của nó. Nếu phần tử đang xét lớn hơn phần tử bên phải của nó thì ta đưa phầntử về bên phải của nó bằng cách sử dụng hốn vị với phần tử bên phải của nó.Cách thực hiện: Sử dụng 2 vịng lặp for để duyệt tồn bộ mảng MaCB, lần lượt so sánhvà đổi chỗ (nếu cần) từ trái sang phải với các phần từ a[i].MaCB đến a[n].MaCB với biến gán j=i+1 và lặp lại khi a[i].MaCB > a[j].MaCB.

Chương trình thực hiện: void CanBo::SapXepMCB(){ for (int i = 0; i < n-1; i++) {

for (int j = i+1; j < n; j++) {

if(a[i].MaCB > a[j].MaCB){ CanBo temp;

temp = a[i];

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

a[i] = a[j]; a[j] = temp; }

} }}

4. Xây dựng hàm xóa cán bộ theo mã xác định.

Ý tưởng thuật toán: Nhập vào biến id cần xóa, sau đó đối chiếu với data. Nếu data trống thì khơng xóa, nếu khơng, ta đối chiếu và lọc ra những cán bộ có mã cán bộ khơng trùngvới chuỗi kí tự mã cán bộ vào một file text1.txt. Sau đó ta xóa dữ liệu trong file cũ đi và copy dữ liệu từ file text1 mới vào file text.txt

Cách thức thực hiện: sử dụng một biến id làm chuỗi kí tự cần xóa. Sau đó dùng biến check để có thể đánh dấu đối chiếu trùng hay khơng. Sau đó duyệt chuỗi và dùng file text1 để lưu trữ những phần tử không trùng lặp với id. Tiếp đến là xóa dữ liệu của file text và duyệt file text1 và đưa những phần tử có trong đó vào lại text.

Chương trình:

void CanBo::XoaMCB(){ string id;

cout<<"Nhap MCB can xoa:"; cin >> id;

ofstream MyWriteFile1("text1.txt"); ifstream MyReadFile("text.txt"); string text;

int check = -1, stt = 0; MyReadFile >> text; MyWriteFile1 << text << endl; while(!MyReadFile.eof()) {

MyReadFile >> text;

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

MyWriteFile1 << text << endl; MyReadFile >> text; MyWriteFile1 << text << endl; cout << text << endl; if(text == id) check = stt; stt++;

while(getline(MyReadFile,text)){ MyWriteFile1 << text << endl; if(text == "endl") break; }

}

MyReadFile.close(); MyWriteFile1.close();

ifstream MyWriteFile2("text1.txt"); ofstream MyReadFile2("text.txt"); int so;

stt = 0;

MyWriteFile2 >> so;

cout << check << " 123213" << endl; if(check != -1) MyReadFile2 << so - 1; else MyReadFile2 << so;

MyReadFile2 << endl;

while(getline(MyWriteFile2,text)){ if(stt != check){

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

MyWriteFile2 >> text; MyReadFile2 << text << endl; }

if(text == "endl") stt++; }

MyWriteFile2.close(); MyReadFile2.close();}

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>III. Chương trình chính.</b>

Sau khi xây dựng tồn bộ các hàm bên trên, nhóm em xin phép trình bày chương trìnhchính dưới đây:

#include<bits/stdc++.h>#include<string.h>#include<conio.h>using namespace std;class CanBo{ public: string HoTen; int MaCB; string GioiTinh; string QueQuan; int NamSinh; string ChuyenMon; string TrinhDo; float HSL; float PhuCap; float AnTrua; float ThucLinh; int NamTL; string XepLoai; public:

CanBo(){ this->HoTen=" "; this->MaCB=0;

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

this->GioiTinh=" "; this->QueQuan=" "; this->NamSinh=0; this->ChuyenMon=" "; this->TrinhDo=" "; this->HSL=0; this->PhuCap=0; this->AnTrua=0; this->ThucLinh=0; this->NamTL=0; this->XepLoai=" "; }

~CanBo(){ this->HoTen=" "; this->MaCB=0; this->GioiTinh=" "; this->QueQuan=" "; this->NamSinh=0; this->ChuyenMon=" "; this->TrinhDo=" "; this->HSL=0; this->PhuCap=0; this->AnTrua=0; this->ThucLinh=0; this->NamTL=0; this->XepLoai=" "; }

virtual void nhap();

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

virtual void xuat(); virtual void tinhluong(); virtual void CNTT(); virtual void LDGioi(); virtual void SapXepMCB(); virtual void XoaMCB();};

int n;int SLCB;int demcntt=0;int demldg=0;CanBo a[100];ofstream MyWriteFile;void CanBo::nhap(){ fflush(stdin);

cout<<"Nhap Ho & Ten: "; getline(cin, HoTen); cout<<"Nhap Ma Can Bo: "; cin>>MaCB;

fflush(stdin);

cout<<"Nhap Gioi Tinh: "; getline(cin, GioiTinh); cout<<"Nhap Que Quan: "; getline(cin, QueQuan); cout<<"Nhap Nam Sinh: "; cin>>NamSinh;

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

fflush(stdin);

cout<<"Nhap Chuyen Mon: "; getline(cin, ChuyenMon); cout<<"Nhap Trinh Do: "; getline(cin, TrinhDo); cout<<"Nhap He So Luong: "; cin>>HSL;

cout<<"Nhap Phu Cap: "; cin>>PhuCap;

cout<<"Nhap An Trua: "; cin>>AnTrua;

cout<<"Nhap Nam Tang Luong: "; cin>>NamTL;

void CanBo::tinhluong(){

ThucLinh=(HSL+PhuCap)*450000+AnTrua;}

void CanBo::CNTT(){

ifstream MyReadFile("text.txt"); string text;

getline(MyReadFile,text);

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

vector<string> a; bool check = 0;

while (getline(MyReadFile,text)) {

if(text == "endl"){ a.clear(); if(check) cout<<endl; check = 0; }

else{

a.push_back(text); }

if(check) cout << text << setw(11); if(text == "CNTT"){

for(auto i: a){

cout << i << setw(11); }

check = 1; }

}

MyReadFile.close();}

void CanBo::LDGioi(){

ifstream MyReadFile("text.txt"); string text;

getline(MyReadFile,text); vector<string> b;

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

bool check = 0;

while (getline(MyReadFile,text)) {

if(text == "endl"){ b.clear(); if(check) cout<<endl; check = 0; }

else{

b.push_back(text); }

if(check) cout << text << setw(11); if(text == "Gioi"){

for(auto i: b){

cout << i << setw(11); }

check = 1; }

}

MyReadFile.close();}

void CanBo::SapXepMCB(){ for (int i = 0; i < n-1; i++) {

for (int j = i+1; j < n; j++) {

if(a[i].MaCB > a[j].MaCB){

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

CanBo temp; temp = a[i]; a[i] = a[j]; a[j] = temp; }

} }}

void CanBo::XoaMCB(){ string id;

cout<<"Nhap MCB can xoa:"; cin >> id;

ofstream MyWriteFile1("text1.txt"); ifstream MyReadFile("text.txt"); string text;

int check = -1, stt = 0; MyReadFile >> text; MyWriteFile1 << text << endl; while(!MyReadFile.eof()) {

MyReadFile >> text; MyWriteFile1 << text << endl; MyReadFile >> text; MyWriteFile1 << text << endl; cout << text << endl; if(text == id) check = stt;

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

stt++;

while(getline(MyReadFile,text)){ MyWriteFile1 << text << endl; if(text == "endl") break; }

}

MyReadFile.close(); MyWriteFile1.close();

ifstream MyWriteFile2("text1.txt"); ofstream MyReadFile2("text.txt"); int so;

stt = 0;

MyWriteFile2 >> so;

cout << check << " 123213" << endl; if(check != -1) MyReadFile2 << so - 1; else MyReadFile2 << so;

MyReadFile2 << endl;

while(getline(MyWriteFile2,text)){ if(stt != check){

MyWriteFile2 >> text; MyReadFile2 << text << endl; }

if(text == "endl") stt++; }

MyWriteFile2.close(); MyReadFile2.close();

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

void CanBo::xuat(){

ifstream MyReadFile("text.txt"); string text;

getline(MyReadFile,text); while (getline(MyReadFile,text)) {

if(text == "endl"){ cout<<endl; }

else

cout<<text<<setw(11); }

MyReadFile.close();}

void pressAnyKey() {

cout << "\n\nBam phim bat ky de tiep tuc..."; getch();

system("cls");}

int main(){

ifstream MyReadFile("text.txt"); MyReadFile >> SLCB; MyReadFile.close(); n=SLCB;

while (1) {

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

int tt;

char fileName[]= "canbo.txt";

cout<<"---MENU---"<<endl; cout<<"1. Hien thi danh sach can bo."<<endl;

cout<<"2. Liet ke cac cac bo co chuyen mon CNTT."<<endl; cout<<"3. Hien Thi cac can bo xep loai gioi."<<endl; cout<<"4. Hien thi danh sach theo ma can bo."<<endl; cout<<"5. Loai bo mot can bo theo ma can bo."<<endl; cout<<"6. Them can bo vao danh sach."<<endl; cout<<"Nhap thao tac:";

cin>>tt; if(tt==7){ break; } switch (tt) { case 1:

cout<<"\n1. Hien thi danh sach can bo."<<endl; if(SLCB==0){

cout<<"\nDanh sach can bo trong..."; }

else{

cout<<"Ho Ten"<<setw(10)<<"|"<<"Ma can bo "<<"|"<<"Gioi tinh "<<"|"<<"Que quan "<<"|"<<" Nam sinh "<<"|"<<"Chuyen mon "<<"|"<<"Trinh do"<<"|"<<"He so luong "<<"|"<<" Phu cap "<<"|"<<" An trua "<<"|"<<"Nam tanglg"<<"|"<<"Xep loai "<<endl;

a[0].tinhluong(); a[0].xuat();

</div>

×