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 ạ

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];
1 Like

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;
}
}
}
}

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);
    }
1 Like

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);

}

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;
2 Likes

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

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

1 Like

Đượ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

e cảm ơn anh nhiều nha

e cảm ơn a nhiều nha

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?