PDA

View Full Version : برنامه حقوق کارمند



LEILAFATHI
سه شنبه 27 آذر 1386, 10:49 صبح
با سلام خدمت همه دوستان و اساتید

راستش من زیاد با برنامه نویسی c++ اشنایی ندارم فقط در حد پاس کردن درسهام

حالا باید با ++c یه برنامه بنویسم که این اطلاعات رو ازم میخواد:

برنامه ای که نام و نام خانوادگی و شماره کارمندی تعدادی پرسنل را دریافت کند تاریخ استخدام هر یک مشخص باشد و بر اساس پایه حقوق هر یک و ساعت کارشان حقوق 1 ماه آنان را محاسبه کند, این برنامه ساعت ورودی و خروجی هر روز را گرفته و ساعت کارکرد هر روز را محاسبه می کنه.

لطفا به من بگید از کجا باید شروع کنم؟؟؟؟

عذر میخوام من خیلی خیلی عجله دارم

emad_67
سه شنبه 27 آذر 1386, 15:01 عصر
ابتدا یه struct یا کلاس تعریف کن و فیلد هایی رو که مربوط به هر کارمند میشه مثل نام و نام خانوادگی و... رو در اون قرار بده و بعد هم برای هر کارمند یه متغیری از اون struct یا کلاس بساز و به وسیله تابع و پارامتر هایی که از ورودی میگیری حقوق رو حساب کن. میتونی یه آرایه ای از اون struct بسازی و تمام کارمند ها رو در اون قرار بدی یا اینکه از لیست پیوندی استفاده کنی.

LEILAFATHI
سه شنبه 27 آذر 1386, 22:03 عصر
اگه اشتباه نکنم کلاس و struct مربوط به تعریف یک ساختمان هستند با این اوصاف اطلاعاتی که هر بار با اجرای برنامه کاربر وارد میکنه با قطع جریان برق از بین نمی رن؟

منظورم اینه که میشه اطلاعات رو توی یه فایل ذخیره کرد که هر بار که کاربر برنامه رو اجرا می کنه اطلاعاتی که قبلا وارد کرده وجود داشته باشند؟؟؟

emad_67
سه شنبه 27 آذر 1386, 23:36 عصر
اگه اشتباه نکنم کلاس و struct مربوط به تعریف یک ساختمان هستند با این اوصاف اطلاعاتی که هر بار با اجرای برنامه کاربر وارد میکنه با قطع جریان برق از بین نمی رن؟

منظورم اینه که میشه اطلاعات رو توی یه فایل ذخیره کرد که هر بار که کاربر برنامه رو اجرا می کنه اطلاعاتی که قبلا وارد کرده وجود داشته باشند؟؟؟


بله تبعا اگه اطلاعات ذخیره نشن از بین میره. باید بعد از اینکه هر رکورد رو از ورودی خوندی اونو توی فایل ذخیره کنی.

LEILAFATHI
چهارشنبه 28 آذر 1386, 12:59 عصر
دوست عزیز لطف میکنید یه نمونه کد برام بذارید چون من واقعا نمی دونم چطور باید شروع کنم

emad_67
چهارشنبه 28 آذر 1386, 17:46 عصر
#include<iostream.h>
struct person
{
char fname[10];
char lname[10];
};
void main()
{
person p;
cin>>p.fname>>p.lname;
cout<<p.fname<<" "<<p.lname<<endl;
}

در ابتدا یه struct تعریف کردم که 2 تا فیلد نام و نام خانوادگی رو در اون قرار دادم و در main هم یه متغیری به نام p از نوع ساختار person ساختم و نام و نام خانوادگی رو هم از ورودی گرفتم و چاپش کردم. حالا تو میتونی فیلد هایی که لازم داری رو در struct تعریف کنی و به همین شکل از ورودی بخونی. و برای همچنین متغیر تعریف شده از نوع perosn رو میتونی مثل متغیر های دیگه به تابع ارسال کنی و کارایی که میخوای روش انجام بدی. مثلا به این شکل:


void print(person p)
{
...
}

در صورتی که با فایل ها آشنایی نداری بهتره که از کتابی یا یه جایی بخونی چون اگه بخوام از اول توضیح بدم زیاد میشه و در صورتی که به مشکل بر خوردی اینجا بپرس.

LEILAFATHI
جمعه 30 آذر 1386, 12:18 عصر
راستش همون طور که شما گفتید من کتاب گرفتم و خوندم ولی کمک زیادی بهم نکرد به دلیل این که من خیلی عجله دارم

این برنامه به عنوان یه مصاحبه برای کارم محسوب میشه و تا شنبه حتما باید تحویل بدم














لیست کارکنان
آدرس شماره تلفن شماره کارمندی نام خانوادگی نام



4-لیست کارکرد
حقوق ساعت کارکرد پایه حقوق شماره کارمندی نام خانوادگی نام


5-لیست ساعات ماهیانه
ساعت کارکرد ساعت خروج ساعت ورود روز
اول

سی ام
جمع کارکرد ماهیانه




struct karkonan{
char name;
char famil;
int perso;
char tel;
char address;
}
karkonan;l

تا اینجا عناصر جدول کارکنان بود



truct karkard{
struct karkonan karkonan1;
float payehoghogh;
double hours;
float hoghogh;
}
karkarde;


این هم تشکیل دهنده جدول دوم که لیست کارکرد نام داره
حالا میخوام نام و نام خانوادگی و شماره کارمندی رو در یافت کرده و اونها رو وارد یک فایل کنم


ofstream fp("test");
if (!fp) {
cout<<"file is not open";
exit(0);
}
while (1)
{
cout<<"enter name & family";
cin>>karkarde.karknan.name>>karkarde.karkonan.family;
if (!karkarde.karkonan.name) and (!karkarde.karkonan.family)
break;
fp<<karkarde.karkonan.name>>karkarde.karkonan.family;
}
fp.close();
ifstream fp1("test")
fp1<<karkarde.karkon.name<<karkarde.karkon.family;

while (!fp1.eof)();
{
fp1>>karkarde.karkon.name>>karkarde.karkon.family;
}
fp1.close();


یه مشکل بزرگتر اینه که حتی برنامه c رو توی سیستمم ندارم که ببینم کجای کار اشتباهه

emad_67
جمعه 30 آذر 1386, 17:08 عصر
عزیز جان اینجوری که نمیشه، اقلا یه کامپایلر نصب کن. توی برنامت کلی ارور داشت که من ارور ها رو رفع کردم. بقیش دیگه با خودت:


#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
struct karkonan
{
char name;
char family;
int perso;
char tel;
char address;
};

struct karkard
{
struct karkonan karkonan1;
float payehoghogh;
double hours;
float hoghogh;
}
karkarde;

void main()
{
ofstream fp("test");
if (!fp) {
cout<<"file is not open";
exit(0);
}
while (1)
{
cout<<"enter name & family";
cin>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
if (!karkarde.karkonan1.name && !karkarde.karkonan1.family)
break;
fp<<karkarde.karkonan1.name<<karkarde.karkonan1.family;
}

fp.close();
ifstream fp1("test");

while (!fp1.eof())
{
fp1>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
cout<<karkarde.karkonan1.name<<" "<<karkarde.karkonan1.family;
}
fp1.close();
}

پستت رو هم به خاطر بهم خوردگی بهتره ویرایش کنی. چون شما چیزی رو که توی ورد مینویسی عینا اینجا کپی میکنی این مشکل پیش میاد. بهتره اول از ورد توی note pad کپی کنی و بعد از note pad به اینجا کپی کنی.

LEILAFATHI
جمعه 30 آذر 1386, 19:04 عصر
ممنون از کمکتون دوست عزیز
اتفاقا همین الان برنامه رو گرفتم و نصب کردم

حالا یه سئوال کوچیکه دیگه اگه لازم باشه که نام و نام خانوادگی و شماره کارمندی فردی وارد شده و در صورت وجود داشتن در فایل پاک بشه باید از چه کدی استفاده کرد

البته این رو میدونم که باید از دو فایل استفاده بشه و تا زمانی که شرط لازم یعنی یافت نشدن کارمند مورد نظر بقیه کارمند ها تو فایل دوم کپی بشن؛ درسته؟

emad_67
جمعه 30 آذر 1386, 21:21 عصر
حالا یه سئوال کوچیکه دیگه اگه لازم باشه که نام و نام خانوادگی و شماره کارمندی فردی وارد شده و در صورت وجود داشتن در فایل پاک بشه باید از چه کدی استفاده کرد

البته این رو میدونم که باید از دو فایل استفاده بشه و تا زمانی که شرط لازم یعنی یافت نشدن کارمند مورد نظر بقیه کارمند ها تو فایل دوم کپی بشن؛ درسته؟بله باید توی فایل دومی کپی بشن.
البته میتونی کاری کنی که وقتی برنامه اجرا شد کل رکورد ها از فایل خونده بشه و داخل یه آرایه ای قرار بگیره و عمیات حذف یا هر کار دیگه ای روی آرایه انجام بدی و در انتها یه قسمتی برای save قرار بدی که وقتی همه کارا انجام شد رکورد ها رو ذخیره کنه توی فایل چون اگه اینجوری بخوای به ازای هر بار پاک مردن یه رکورد باید کل رکورد های باقیمونده کپی بشن در یه فایل دیگه.

LEILAFATHI
جمعه 30 آذر 1386, 22:23 عصر
اون کدی که شما برای من اصلاح کرده بودین رو تو برنامه نوشتم ولی بهم جواب درستی نداد؟

نتونستم اطلاعات رو وارد فایل کنم. لطفا یه بار دیگه کد بالا رو نگاه کنید ببینید واقعا مشکل نداره!!!

emad_67
جمعه 30 آذر 1386, 22:59 عصر
من گفتم که فقط syntax ارور ها رو رفع کردم. به هر حال مشکلاتی که توی برنامت هست:
توی این حلقه:


while (1)
{
cout<<"enter name & family";
cin>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
if (!karkarde.karkonan1.name && !karkarde.karkonan1.family)
break;
fp<<karkarde.karkonan1.name<<karkarde.karkonan1.family;
}
باید شرطی رو برای پایان داده ها در نظر بگیری یعنی شرطی که خودت گذاشتی اشتباه هست و هیچ وقت این حلقه تموم نمیشه. و علت اینکه چیزی توی فایل قرار نمیگیره اینه که باید خطی رو که برای خروجی در فایل نوشتی رو به این شکل تغییر بدی:


fp<<karkarde.karkonan1.name<<karkarde.karkonan1.family<<endl;
یعنی آخرش endl بزاری یا اگه نخواشتی اسم و فامیل ها بره خط بعد باید flush بزاری، توی حلقه های بینهایت باید از این دستور ها استفاده کنی تا بافر خروجی تخلیه بشه. ضمنا بهتره فایل رو به صورت txt. باز کنی تا خروجی اونو هم ببینی.

LEILAFATHI
شنبه 01 دی 1386, 10:24 صبح
ممنون

1-حالا از اولش خیلی بهتر شده ولی یه مشکل دیگه اینه که هر بار که برنامه اجرا میشه فایل خالی میشه ولی من میخوام اطلاعات که دوباره وارد می کنم به فایل اضافه بشن؟
2- این که داده هایی که توی فایل اضافه میشن بهم ریخته هستن ولی من می خوام اونا مثل یه جدول مرتب ذخیره بشن , باید چی کار کنم؟

emad_67
شنبه 01 دی 1386, 12:50 عصر
-حالا از اولش خیلی بهتر شده ولی یه مشکل دیگه اینه که هر بار که برنامه اجرا میشه فایل خالی میشه ولی من میخوام اطلاعات که دوباره وارد می کنم به فایل اضافه بشن؟
برنامه رو به این شکل تغییر بده:


void main()
{
fstream fp("test.txt",ios::in | ios::out);
fp.seekp(0,ios::end);
if (!fp) {
cout<<"file is not open";
exit(0);
}
while (1)
{
cout<<"enter name & family:";
cin>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
fp<<karkarde.karkonan1.name<<" "<<karkarde.karkonan1.family<<endl;
}

while (!fp.eof())
{
fp>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
cout<<karkarde.karkonan1.name<<" "<<karkarde.karkonan1.family;
}
fp.close();
}

این که داده هایی که توی فایل اضافه میشن بهم ریخته هستن ولی من می خوام اونا مثل یه جدول مرتب ذخیره بشن , باید چی کار کنم؟علتش اینه که پارامتر های struct رو از نوع char تعریف کردی که باید آرایه ای از نوع char باشن:


struct karkonan
{
char name[10];
char family[10];
int perso;
char tel[10];
char address[30];
};
در صورتی که میخوای همه فیلد ها رو در فایل ذخیره کنی این نوع فایل یعنی فایل های متنی اصلا مناسب نیستند و بهتره که از فایل های random access که باهاش میتونی یه متغیر از struct رو با تمام پارامتر هاش در اون ذخیره کنی و همچنین هون طور که از اسمش پیداش میتونی به صورتی خیلی سریع تری به یک رکورد توی فایل دسترسی پیدا کنی.

alimooghashang
سه شنبه 02 بهمن 1386, 13:09 عصر
cin>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
fp<<karkarde.karkonan1.name<<" "<<karkarde.karkonan1.family<<endl;

fp>>karkarde.karkonan1.name>>karkarde.karkonan1.family;
cout<<karkarde.karkonan1.name<<" "<<karkarde.karkonan1.family;





میشه بگین که این چه نوع رکوردیه؟؟

emad_67
سه شنبه 02 بهمن 1386, 13:27 عصر
میشه بگین که این چه نوع رکوردیه؟؟
یعنی چی چه نوع رکوردیه؟ 2 تا struct داریم که در struct دومی یه متغیر از struct اولی وجود داره. برای ذخیره اون در فایل هم از فایل های متنی استفاده شده.

alimooghashang
سه شنبه 02 بهمن 1386, 13:59 عصر
یعنی چی چه نوع رکوردیه؟ 2 تا struct داریم که در struct دومی یه متغیر از struct اولی وجود داره. برای ذخیره اون در فایل هم از فایل های متنی استفاده شده.

بله این گفته شما درسته , اما با اون تعریفی که در کد برنامه بود نمیخوند

یا شاید من تعریف struct رو بلد نیستم

بهر حال ممنون

emad_67
سه شنبه 02 بهمن 1386, 14:04 عصر
بله این گفته شما درسته , اما با اون تعریفی که در کد برنامه بود نمیخوند

یا شاید من تعریف struct رو بلد نیستم

بهر حال ممنونمن متوجه نمیشم کجاش رو میگی؟
مشکلت در ذخیره فایل هست یا در خود دسترسی به متغیر های struct؟