01/10/2018, 00:44

Thắc mắc khai báo thông tin nhân viên

VCT quản lý nhân viên. Cho phép nhập số nv cần quản lý. Nhập chi tiết từng nv.

Thông tin chi tiết về nv như sau: maso, hoten, namsinh, luong.

  • Xuất thông tin về nhân viên vừa nhập ra màn hình

  • Xuất thông tin về nv theo thứ tự giảm dần của lương.

phần xuất thông tin về nhân viên theo thứ tự giảm dần của lương ( thong tin gom co MS , HT ,NS , luong ) thì sau khi triển khai thuật toán buble sort xong rồi e chỉ xuất ra được thứ tự lương giảm dần , còn thông tin nhân viên đó e phải khai báo như thế nào ạ

viết 02:51 ngày 01/10/2018

Bạn sử dụng struct nhé, ở đây mình nhập thông tin 10 nhân viên.

struct nhanvien
{
    int maso, namsinh, luong;
    char hoten[50];        
} nv[10];
Đào Thành Đạt viết 02:54 ngày 01/10/2018

e có sử dụng struct ạ , nhưng nếu xuất e chỉ xuất ra đc phần lương giảm dần còn thông tin còn lại (mã số , tên , năm sinh ) thì e hơi bối rối về thuật toán

void bublesort(QLNV SNV[],int n)
{
for (int i=0;i<n;i++)
{
for (int j=n-1;j>i;j–)
{
if (SNV[j].luong > SNV[j-1].luong)
{
int temp=SNV[j-1].luong;
SNV[j-1].luong=SNV[j].luong;
SNV[j].luong=temp;
}
}
}
}

viết 02:45 ngày 01/10/2018

Xuất thông tin thì bạn làm như sau:

printf("Xuat thong tin nhan vien:\n");

    for (i = 0; i < n; i++)
    {
        printf("Ma so: %d\n", nv[i].name);
        printf("Ho ten: ");
        puts(nv[i].hoten);
        printf("Nam sinh: %d\n", nv[i].namsinh);
        printf("Luong: %d\n", nv[i].luong);
    }
Đào Thành Đạt viết 02:56 ngày 01/10/2018

dạ e có xuất nhân viên ở trên r , mà ở câu 2 nó yc xuất nv theo thứ tự giảm dần của lương ý a

#include <stdio.h>

struct QLNV{
int MS,NS,luong;
char ten[40];
};

void nhapNV(QLNV SNV[],int &n)
{
printf (“Nhap so nv can quan li :”);
scanf ("%d",&n);
for (int i=0;i<n;i++)
{
printf ("\n\nnhap thong tin nv thu %d :\n",i+1);
printf (“Nhap MS :”);
scanf ("%d",&SNV[i].MS);
fflush(stdin);
printf (“Nhap ten nhan vien :”);
gets(SNV[i].ten);
printf (“Nhap nam sinh :”);
scanf ("%d",&SNV[i].NS);
printf (“Nhap luong :”);
scanf ("%d",&SNV[i].luong);
}
}
void xuatNV(QLNV SNV[],int n)
{
printf ("\n\nthong tin cac Nv la :\n");
for (int i=0;i<n;i++)
{
printf ("\nNhan vien thu %d \n",i+1);
printf (“MS NV : %d\n”,SNV[i].MS);
printf (“Ten nv :%s\n”,SNV[i].ten);
printf (“Nam sinh : %d\n”,SNV[i].NS);
printf (“Luong :%d\n”,SNV[i].luong);
}
}
void bublesort(QLNV SNV[],int n)
{
for (int i=0;i<n;i++)
{
for (int j=n-1;j>i;j–)
{
if (SNV[j].luong > SNV[j-1].luong)
{
int temp=SNV[j-1].luong;
SNV[j-1].luong=SNV[j].luong;
SNV[j].luong=temp;
}
}
}
}

int main()
{
QLNV SNV[100];
int n;
nhapNV(SNV,n);
xuatNV(SNV,n);
bublesort(SNV,n);

}

Quân viết 02:45 ngày 01/10/2018

int temp=SNV[j-1].luong;
SNV[j-1].luong=SNV[j].luong;
SNV[j].luong=temp;

code thật bá đạo, gán property của đối tượng này cho đối tượng khác,
k bảo toàn được dữ liệu rồi.
Sửa thành

SNV temp=SNV[j-1];
SNV[j-1]=SNV[j];
SNV[j]=temp;
Đào Thành Đạt viết 02:50 ngày 01/10/2018

mà a ơi , nếu code như v thì làm sao để sắp sếp lương theo thứ thự giảm dần

Tynk Huynk viết 02:46 ngày 01/10/2018

Nếu vậy thì theo mình:

if (SNV[j].luong > SNV[j-1].luong){
       SNV temp=SNV[j-1];
       SNV[j-1]=SNV[j];
       SNV[j]=temp;
 }

So sánh lương, nếu thỏa thì swap cả 2 đối tượng -> thế là xong

Tynk Huynk viết 02:49 ngày 01/10/2018

Được mà bạn, thay đổi vị trí của nhân viên trong list dựa theo thứ tự lương giảm dần. Chứ sắp xếp theo kiểu của bạn sẽ phát sinh ra vấn đề: giả sử NV(Nhân viên) A: 2(lương), NVB: 1, NV C: 3, sau khi sắp xếp theo kiểu [quote=“qloved, post:6, topic:38220”]
int temp=SNV[j-1].luong;
SNV[j-1].luong=SNV[j].luong;
SNV[j].luong=temp;
[/quote]

thì NV A: 3, NV B: 2, NV C: 1 -> vậy thì sai dữ liệu rồi

Đào Thành Đạt viết 02:56 ngày 01/10/2018

e cảm ơn anh nhiều nha

Đào Thành Đạt viết 02:58 ngày 01/10/2018

e cảm ơn a nhiều nha

Bài liên quan
0