PDA

View Full Version : سوال: محاسبه حقوق برحسب رده شغلی و اضافه کاری



raha1234567
دوشنبه 30 آبان 1390, 17:44 عصر
سلام دوستان یک بار این سوال رو پرسیدم ولی به خاطر عنوانش حذف شد و حالا باز میپرسم قبلش باید بگم:
این برنامه یک text داره که حقوق پایه را از من میگیره
یک کمبو باکس داره که رده های شغلی را در اون نوشتم
و داری text دومی هست که مدت زمان اضافه کاری را میگیرم
حالا در کد زیر وقتی من رده شغلی را انتخاب میکنم در پاسخ یه عدد عجیب بهم میده

int ho = 0;
int paye, ezaf, tim, ezaf2, tim2, b = 0, c = 0;
private void button1_Click(object sender, EventArgs e)
{
// tim = int.Parse(textBox3.Text);
paye = int.Parse(textBox1.Text);
switch (comboBox1.SelectedIndex)
{
case 0:
ho = ((paye * (18 / 100)) + paye);
break;
case 1:
ho = (paye * (12 /100)) + paye;
break;
case 2:
ho = (paye * (1/ 100)) + paye;
break;
case 3:
// ho= paye * (0.9 / 100) + paye;
break;



}

if (tim <= 10)
{
ezaf = paye * (1 / 5);
ho+= ezaf * tim + paye;
}
else
{
tim2 = tim - 10;
ezaf = paye * (1 / 5);
ezaf2 = paye * (1 / 65);
b += ezaf * 10 + paye;
c += ho += ezaf2 * tim2 + paye;
ho += b + c;
}


MessageBox.Show(ho.ToString());


در ضمن از اون دو خطی هم که غیر فعال کردم ایراد میگیره لطف میکنید بگید ایراد کجاست ؟؟؟؟؟؟؟:اشتباه::متفکر:

rohullah
دوشنبه 30 آبان 1390, 18:23 عصر
اول اینجا رو احیانا اشتباه ننوشتی؟
ho = ((paye * (18 / 100)) + paye);
بقیه رو ضرب کردی اینجا رو تقسیم(18/100). طبق منطق برنامت درسته؟
tim رو کجا مقدار دادی؟

raha1234567
دوشنبه 30 آبان 1390, 19:04 عصر
نمیدونم خوب اگه بخوام 18% حقوق پایه را به حقوق اضافه کنم باید
(حقوق پایه *18%+حقوق پایه) بکنم دیگه
tim هم که یه متغییر هست که متصلش کردم به textbox2 دیگه .

Hybrid
دوشنبه 30 آبان 1390, 19:12 عصر
دوست عزیز این کدی که نوشتی خیلی اشکال داره اول tim و tim2 و ezaf رو باید اول تعریف کنی و بعد ازشون استفاده کنی .... شما اومدین بدون اینکه اونارو تعریف کنین ازشون استفاده کردین....بعدش در ضمن دوست عزیز متغیر ho رو از نوع int تعریف کردین و بعد اومدین مقدار اعشاری توش نوشتین ...یعنی 18/100 ضرب در حقوق پایه ممکنه یه عدد اعشاری باشه ....در ضمن اینجا انجمن وی بیه نه سی شارپ..با تشکر

raha1234567
دوشنبه 30 آبان 1390, 19:19 عصر
نه من tim رو تعریف کردم یادم رفته اینجا بذارم و در ضمن ho رو هم تغییر دادم ولی هیچ تاثیری نگذاشت درضمن طبق محاسبه من مثلا اگه حقوق پایه 300000تومان باشه بعد با قیه محاسبه حقوق خالص میشه 360000 تومان.
پس اعشاری نیست.
ولی من براش متغییر float هم تعریف کردم.

raha1234567
دوشنبه 30 آبان 1390, 19:44 عصر
[QUOTE=The Life;1380746در ضمن اینجا انجمن وی بیه نه سی شارپ..با تشکر[/QUOTE]

میگم مطمئنید اینجا انجمن وبی هست آخه من توی تالار سی شارپ سوالم رو مطرح کردم:متعجب:

Hybrid
دوشنبه 30 آبان 1390, 20:00 عصر
سلام دوست عزیز معذرت حواسم نبود :D .... میشه بگین چرا دو متغیر ho و paye رو خارج پراسیجر نوشتین چرا local تعریف نکردین؟؟؟؟؟؟در ضمن چرا در بعضی جاها از پرانتز برای اولویت دهی به محاسبتون استفاده نکردین؟؟؟

raha1234567
دوشنبه 30 آبان 1390, 20:12 عصر
سراسری تعریف کردم که جاهای دیگه هم بتونم استفاده کنم البته وقتی در برنامه دیدم با مشکل مواجه شدم به حالت local هم تعریف کردم ومشکلم حل نشد
و به حالت اول برگردوندم. از پرانتز هم همه جا استفادهشده بود مثل خط 10 همه این کارا رو کردم به جواب برسم نرسیدم.:ناراحت:

ma.rad
دوشنبه 30 آبان 1390, 20:54 عصر
جدا از اینکه کدهایی که نوشتید زیاد جالب نیست.
اما نسبتا درسته فقط شما باید به صورت خط به خط بررسی کنید ببینید دقیقا کجا محاسبه درست انجام نمی شه
بعد بگید کمک تون کنیم

rohullah
دوشنبه 30 آبان 1390, 21:03 عصر
نمیدونم خوب اگه بخوام 18% حقوق پایه را به حقوق اضافه کنم باید
(حقوق پایه *18%+حقوق پایه) بکنم دیگه
tim هم که یه متغییر هست که متصلش کردم به textbox2 دیگه .

آخه جور در نمیاد با توجه به خطهای بعدی الان تو case 0 شما میخواین 18% رو اضافه کنین درست ولی تو case 1 میخواین چیکار کنین؟
ho = (paye * (12 * 100)) + paye
این یعنی 1200 برابر حقوق پایه رو میخواین اضافه کنین به حقوق پایه؟؟؟؟

rohullah
دوشنبه 30 آبان 1390, 21:21 عصر
راستی این قسمت هم به نظرم کم مشکل نداره

if (tim <= 10)
{
ezaf = paye * (1 / 5);
ho+= ezaf * tim + paye;
}
else
{
tim2 = tim - 10;
ezaf = paye * (1 / 5);
ezaf2 = paye * (1 / 65);
b += ezaf * 10 + paye;
c += ho += ezaf2 * tim2 + paye;
ho += b + c;
}

اگر بداشت من درست باشه میخوای اضافه کاری طرف رو حساب کنی بدی بهش و اگر اشتباه نکنم اضافه کاری رو اینجوری حساب میکنن که حقوق تقسیم بر تعداد ساعت کاری استاندارد در ماه که نرخ دستمزد ساعتی بدست میاد بعد اونو در یک ضریب که اینجا شما1/5 نوشتی نمیدونم شاید 1.5 منظورت بوده ضرب میکنن و در آخر ضرب در تعداد ساعت اضافه کار و نهایتا با حقوق ثابت جمع می کنن ولی اینجا شما نرخ اضافه کار رو با حقوق پایه میسنجی اگر طرف رتبه 1 بود چی بازم با همون نرخ پایه حقوق باید حساب بشه؟ چون اونجوری که شما میخوای حساب کنی این معنی رو میده بعدشم اگر در نظر بگیریم حقوق پایه 300 تومن باشه شما داری اون رو در 1/5 ضرب میکنی میشه 60 تومن بعد شما اینو در tim ضرب کردی
ezaf * tim
حالا طرف فرض کنیم 10 ساعت اضافه کاری داشته میشه 600 تومن بعد با پایه حقوق جمع میشه میشه 900 تومن
ezaf * tim + paye
با پایه حقوق 300 تومن 10 ساعت اضافه کار میشه 900 تومن !!!!!
این اضافه کاریا رو با این نرخ کجا میدن؟ بگین مام بییم اونجا کار کنیم

raha1234567
دوشنبه 30 آبان 1390, 23:16 عصر
در پاسخ به تاپیک قبلیتون باید ازتون معذرت بخوام نه که یه بار تاپیکم حذف شده دوباره که نوشتم اشتباهی نوشتم و تمام ضرب های داخل پرانتز تقسیم هست و همین حالا اصلاحش کردم و در پاسخ به تاپیک دوم این باید بگم که این ماکان هنوز کشف نشده و در شهر خورزوق خان قرار داره.:قهقهه:
حالا واقعا ایراد داره؟؟؟؟

raha1234567
دوشنبه 30 آبان 1390, 23:18 عصر
جدا از اینکه کدهایی که نوشتید زیاد جالب نیست.
اما نسبتا درسته فقط شما باید به صورت خط به خط بررسی کنید ببینید دقیقا کجا محاسبه درست انجام نمی شه
بعد بگید کمک تون کنیم
دوست عزیز از این که کدهام مبتدی هست باید ببخشید چه کنم مبتدیم دیگه
مشکل نداره اجرا میده ولی جوابای عجیب غریب میده.!!!!!

rohullah
سه شنبه 01 آذر 1390, 07:24 صبح
در پاسخ به تاپیک قبلیتون باید ازتون معذرت بخوام نه که یه بار تاپیکم حذف شده دوباره که نوشتم اشتباهی نوشتم و تمام ضرب های داخل پرانتز تقسیم هست و همین حالا اصلاحش کردم و در پاسخ به تاپیک دوم این باید بگم که این ماکان هنوز کشف نشده و در شهر خورزوق خان قرار داره.:قهقهه:
حالا واقعا ایراد داره؟؟؟؟
خوب دل انگیز نه فرمولت مشخصه نه هدفت مشخصه ملت چه جوری کمکت کنن؟
خوب حداقل اون الگوریتمتو بگو که قراره براساس چه فرمولی و چه جوری اینا محاسبه میشن که یکی بتونه مشکل رو پیداکنه چون به نظرم مشکل از منطق برنامته

wolf_majid
سه شنبه 01 آذر 1390, 08:06 صبح
دوست عزیز از این که کدهام مبتدی هست باید ببخشید چه کنم مبتدیم دیگه
مشکل نداره اجرا میده ولی جوابای عجیب غریب میده.!!!!!

دلیلش اینه

//this.Text = (18 / 100).ToString();
this.Text = (((float)18 / 100)).ToString();

raha1234567
سه شنبه 01 آذر 1390, 08:53 صبح
دلیلش اینه

//this.Text = (18 / 100).ToString();
this.Text = (((float)18 / 100)).ToString();
ببخشید میشه توضیح بدید این چطور کار میکنه آخه داده متنی چطوری محاسبه میشه؟؟؟

wolf_majid
سه شنبه 01 آذر 1390, 08:57 صبح
ببین دوست عزیز :
زمانیکه 18 را بر 100 تقسیم می کنی خروجیش صحیحه که میشه 0
و برای رفع این مشکل باید یکی از عوامل تقسیم را به اعشاری تبدیل کرد که در کد کاملا" واضحه
شما باید تمام تقسیماتتون را به اعشاری تبدیل کنید

در ضمن کد من رو تست کنید متوجه میشید منظورم چیه (من رشته به کار بردم فقط برای مثال - شما رشته رو در نظر نگیرید و خروجی رو بررسی کنید)

raha1234567
سه شنبه 01 آذر 1390, 09:04 صبح
خوب دل انگیز نه فرمولت مشخصه نه هدفت مشخصه ملت چه جوری کمکت کنن؟
خوب حداقل اون الگوریتمتو بگو که قراره براساس چه فرمولی و چه جوری اینا محاسبه میشن که یکی بتونه مشکل رو پیداکنه چون به نظرم مشکل از منطق برنامته

الگوریتم همینه بذار بهتر توضیح بدم
ما حقوق پایه را در یک text میگیرریم بعد در یک combo هم رده های شغلی را داریم حالا
اگه مثلا رده شغلی شخص مدیر باشه به حقوق پایه اون 18% افزوده میشه
برای اضافه کاری هم ، میزان ساعت اضافه کاری را در یک textدیگه میگیریم که اگر تا 10 ساعت یاشه ساعتی یک پنجم به حقوق پایه اش افزوده میشه و اگر بیشتر از 10 ساعت بیشتر بود تا 10 ساعت همان ساعتی یک پنجم محاسبه بشه و بقیه ساعات یک شصت و پنج آن محاسبه بشه .
و بعد از تمام شدن محاسبه حقوق خالص را در یک msg نشان دهد.
امیدوارم واضح باشه.
با تشکر.

raha1234567
سه شنبه 01 آذر 1390, 09:13 صبح
بله باز هم به جواب نرسیدم . اصلا من هرچی تغییرات روی این برنامه میدم انگاری این برنامه نمیفهمه محاسبه هارو و خروجی رو همان حقوق پایه به من پس میده !!!
میگم میشه ایراد از کامپیوتر یاشه ؟؟؟؟؟

wolf_majid
سه شنبه 01 آذر 1390, 09:38 صبح
من که از کدتون سر در نیاوردم
اما به هر حال کدتون رو به صورت زیر ویرایش کردم

float ho = 0;
int paye, ezaf, tim, ezaf2, tim2, b = 0, c = 0;

private void button1_Click(object sender, EventArgs e)
{
// tim = int.Parse(textBox3.Text);
paye = int.Parse(textBox1.Text);
switch (comboBox1.SelectedIndex)
{
case 0:
ho = ((paye * ((float)18 / 100)) + paye);
break;
case 1:
ho = (paye * ((float)12 / 100)) + paye;
break;
case 2:
ho = (paye * ((float)1 / 100)) + paye;
break;
case 3:
// ho= paye * (0.9 / 100) + paye;
break;
}

if (tim <= 10)
{
ezaf =(int)( paye * ((float)1 / 5));
ho += ezaf * tim + paye;
}
else
{
tim2 = tim - 10;
ezaf =(int)( paye * ((float)1 / 5));
ezaf2 =(int)( paye * ((float)1 / 65));
b += ezaf * 10 + paye;
ho += ezaf2 * tim2 + paye;
c += (int)ho;
ho += b + c;
}


MessageBox.Show(((int)ho).ToString());
}

raha1234567
سه شنبه 01 آذر 1390, 10:42 صبح
دوستان از کمکهاتون متشکرم مشکل حل شد برنامه خراب بود دوباره رفتم درستش کدم درست شد :خجالت::چشمک::لبخندساده: البته کمک دوست عزیزwolf_majid هم بود