PDA

View Full Version : test C



tinhspt
21-04-2009, 09:13
Em đang gặp một số vấn đề về bài này mà chưa tìm được hướng giải quyết mong các bác trợ giúp
ĐỀ:
Write a C program to store employee detail in a structure array. The data should include employee ID ,name ,salary , and date of joining ( include month ,year ,date ) . The date of joining should be stored in a structure . The program should perform the following :
- Function accept n element ( 0< n < 50) of EMPLOYEE structure (4)
- Function accept detail of EMPLOYEE structure
- Function display detail of EMPLOYEE structure
A Increase the salaries according to the following rules:
If salary <=2000 then increase 15%
If salary >2000 and <=5000 then increase 10%
If salary >5000 then no increase and display “ No …” 2
B Display the detail of employees who complete 10 years with the company 5
Bài làm:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
struct date{
unsigned char day[10];
unsigned char month[10];
unsigned char year[10];
};
struct joining{
int id;
char name[30];
int salary;
struct date dt;
}join;
int capphat(joining*ptr);
void nhapdl(joining*ptr);
void indl(joining*ptr);
void increase(joining*ptr);
void work(joining*ptr);
int n;
void main(){
joining* ptr;
if(capphat(ptr)){
nhapdl(ptr);
indl(ptr);
}
increase(ptr);
work(ptr);
getch();
}
int capphat(joining*ptr){
do{
printf("\n Ban muon nhap bao nhieu nhan vien: ");
scanf("%d",&n);
}while(n<=0||n>=50);
if(ptr==NULL){
return 0;
}else{
ptr=(joining*)malloc(n*sizeof(joining));
return 1;
}
}
void nhapdl(joining*ptr){
int i;
int t1,t2;
printf("\n nhap du lieu");
for(i=0;i<n;i++){
printf("\n Nhap du lieu cho nguoi thu %d",i);
printf("\n Nhap ID nhan vien : ");scanf("%d",&t1);
(ptr+i)->id=t1;
printf("\n Nhap ten nhan vien: ");
fflush(stdin);
gets((ptr+i)->name);
printf(" \nNhap luong nhan vien:");scanf("%d",&t2);
(ptr+i)->salary=t2;
printf(" \nNhap ngay vao cong ty:\n");
fflush(stdin);
gets((ptr+i)->dt.day);
printf(" \nNhap thang vao cong ty:\n");
fflush(stdin);
gets((ptr+i)->dt.month);
printf(" \nNhap nam vao cong ty:\n");
fflush(stdin);
gets((ptr+i)->dt.year);
}
}
void indl(joining*ptr){
int i;
printf("\n In du lieu: ");
for(i=0;i<n;i++){
printf("\n EMPLOYEE %d",i);
printf("\n");
printf("\n ID :%d",(ptr+i)->id);
printf("\n name :%s",(ptr+i)->name);
printf("\n salary:%d",(ptr+i)->salary);
printf("\n day %s month %s year %s",(ptr+i)->dt.day,(ptr+i)->dt.month,(ptr+i)->dt.year);
}
}
void work(joining*ptr){
int i,year1,kt;
printf("\n In ra nhung ngoi lam viec voi cong ty 10 nam");
printf("\n Nhap vao ngay thanh lap cong ty: ");
scanf("%d",&year1);
for(i=0;i<n;i++)
{
kt=year1-(((ptr+i)->dt.year));
if(kt>=10)
indl(ptr);
else
printf("\nNhan vien nay lam viec cho cong ty it hon 10 nam");
}
}
void increase(joining*ptr){
int i;
for(i=0;i<n;i++){
if(((ptr+i)->salary)<=2000)
(((ptr+i)->salary)*15)/100;
if(((ptr+i)->salary)>2000 && ((ptr+i)->salary)<5000)
(((ptr+i)->salary)*10)/100;
if(((ptr+i)->salary)>5000);
}
}

kimduquan
21-04-2009, 16:46
bạn hiểu sai ý của đề bài rồi,mình thử dịch lại như sau:viết 1 chương trình C để lưu trữ thông tin của 1 nhân viên bằng 1 mảng dữ liệu có cấu trúc,dữ liệu của 1 nhân viên bao gồm ID,tên,lương và ngày bắt đầu làm việc(ngày bắt đầu làm việc là 1 kiểu dữ liệu cấu trúc gồm 3 thành phần ngày,tháng,năm).Dữ liệu của ngày bắt đầu làm việc phải là kiểu dữ liệu co cấu trúc.Chương trình phải thực hiện các hàm sau:
-hàm nhập n phần tử(0<n<50)có kiểu dữ liệu EMPLOYEE
-hàm nhập dữ liệu của 1 phần tử có kiểu dữ liệu là EMPLOYEE
-hàm xuất dữ liệu của 1 phần tử có kiểu dữ liệu là EMPLOYEE
A.lương tăng thêm của 1 nhân viên tuân theo quy tắc sau:
-nếu lương <=2000,tăng thêm 15%
-nếu lương >2000 và <=5000 tăng thêm 10%
-nếu lương >5000 thì ko tăng thêm và xuất ra lời nhắn(để báo là nhân viên này ko được tăng lương)
B.Xuất thông tin của những nhân viên đã làm việc cho công ty 10 năm.
còn cách làm thì bạn tạo 2 struct EMPLOYEE và date rồi làm.

tinhspt
21-04-2009, 19:58
thì mình dịch cũng như bạn đấy thôi
int capphat(joining*ptr);dùng cập nhật dữ liệu vào struct nè
void indl(joining*ptr); hàm in danh sách
void increase(joining*ptr); hàm tăng lương
void work(joining*ptr); hàm tính thời gian làm việc
nhưng mình đính chính tý nhé trong hàm tính thời gian làm việc nhập vào năm hiện tại mình đánh nhầm là năm thành lập công ty. bạn xem lại giúp nhé

kimduquan
22-04-2009, 09:37
đề bài yêu cầu là tạo 1 struct có tên là EMPLOYEE mà mình chẳng thấy cái struct nào có tên là EMPLOYEE cả ,và mình có 1 lời khuyên là khi bạn làm 1 bài tập =tiếng Anh thì bạn cũng nên đặt tên cho các hàm,biến,cấu trúc,... =tiếng Anh và phải đúng với yêu cầu đề bài.nói chung là đúng hết rồi nhưng vẫn còn 1 số thiếu sót,bạn phải đổi tên struct joining thành EMPLOYEE,đổi tất cả các từ tiếng Việt sang tiếng Anh,trong hàm xuất khi xuất 1 chuỗi kí tự thì nên dùng hàm puts(),trong hàm work coi lại giải thuật,trong hàm increase tất cả các câu lệnh chẳng có ý nghĩa gì,ngoài ra bạn còn mắc 1 lỗi sơ đẳng đó là cấp phát mà ko thu hồi sẽ dẫn đến tràn bộ nhớ(lỗi này sơ đẳng nhưng rất nghiêm trọng đó).mình còn 1 chỗ nhưng ko biết bạn đùng hay sai nữa trong hàm capphat(joining *ptr) bạn thử sửa lại là (joining *&ptr) xem,mình nghĩ như vậy sẽ chắc chắn hơn.