PDA

View Full Version : اضافه کردن یک ساخنار به فایل در c++



yekta64
پنج شنبه 26 دی 1392, 20:28 عصر
سلام دوستان
من یه پروژه دارم در مورد تاکسی سرویس میخام با استفاده از فایل ها و ساختار ها بتونم سرویس جدید که شامل نام - نام خانوادگی - شماره ماشین هست رو ایجاد کنم من باید با استفاده از دو فایل یکی برای اضافه کردن و دیگری به عنوان فایل کمکی بتونم ساختار ها با ترتیب حروف الفبا در فایل درج کنم و ویرایش کنم میشه راهنماییم کنید چطور میشه این کار رو انجام بدم؟؟

کسی هست نمونه کدی در این زمینه داشته باشه که بتونه منو راهنمایی کنه

yekta64
جمعه 27 دی 1392, 10:55 صبح
کسی نمیتونه منو تو این زمینه راهنمایی کنه؟؟؟

Vitallity
جمعه 27 دی 1392, 12:00 عصر
این پروژه درسی شماست. یه مقدار کدی رو که نوشتید رو اینجا قرار بدید و حتماً راهنمایی‌تون می‌کنیم.

برای راهنمایی:
- یک struct از مشخصات تاکسی استفاده کنید.
- از کلاس FILE و تابع‌های fopen, fread, fwrite برای باز کردن، خواندن و نوشتن در فایل استفاده کنید.

yekta64
جمعه 27 دی 1392, 12:29 عصر
این پروژه درسی شماست. یه مقدار کدی رو که نوشتید رو اینجا قرار بدید و حتماً راهنمایی‌تون می‌کنیم.

برای راهنمایی:
- یک struct از مشخصات تاکسی استفاده کنید.
- از کلاس FILE و تابع‌های fopen, fread, fwrite برای باز کردن، خواندن و نوشتن در فایل استفاده کنید.

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


#include <cstdlib>
#include <iostream>
#include <fstream>
#define max 100
using namespace std;
struct newservis{
int numservis;
char namedriver[20];
char familydriver[20];
char namemosafer[20];
char familymosafer[20];
char mabda[50];
char maghsad[50];
char typeservis[15];
char date[10];
char time[5];
int keraye;
};
void input (newservis *,int *);
void first_value(newservis *);
int main()
{
FILE *f1;
newservis sers[max];
int counter=0;

f1 = fopen ("test.txt","rt");
if (f1==NULL) {
cout«"file not found";
exit(1);
}

fread(sers,sizeof(newservis),counter,f1);
input(sers,&counter);
return 0;
}


void input(newservis *sers,int *counter)
{
int x,y,count;
char ch='1';
char temp[10];
do
{
first_value(&sers[*counter]);

cout<<"\r\nPlease enter shomre servis:";
gets(sers[*counter].numservis);
cout<<"\r\nPlease enter namedriver:";
gets(sers[*counter].namedriver);
cout<<"\r\nPlease enter familydriver:";
gets(sers[*counter].familydriver);
cout<<"\r\nPlease enter namemosafer:";
gets(sers[*counter].namenosafer);
cout<<"\r\nPlease enter familymosafer:";
gets(sers[*counter].familymosafer);
cout<<"\r\nPlease enter mabda:";
gets(sers[*counter].mabda);
cout<<"\r\nPlease enter maghsad:";
gets(sers[*counter].maghsad);
cout<<"\r\nPlease enter typeservis:";
gets(sers[*counter].typeservis);
cout<<"\r\nPlease enter date:";
gets(sers[*counter].date);
cout<<"\r\nPlease enter time:";
gets(sers[*counter].time);
cout<<"\r\nPlease enter mblagh keraye:";
gets(sers[*counter].keraye);

if((*counter)<max-1){
cout<<"\r\n\r\nDo you want enter other employee informations(y/n)?";
x=wherex();
y=wherey();
while((ch=tolower(getche()))!='y' && ch!='n')
gotoxy(x,y);
}
else
cout<<"\r\nThe capacity of employee is full!";
(*counter)++;
}while(ch=='y' && (*counter)<max);

}

void first_value(newservis *sers)
{

(*sers).numservis=0;
strcpy((*sers).namedriver," ");
strcpy((*sers).familydriver," ");
strcpy((*sers).namemosafer," ");
strcpy((*sers).familymosafer," ");
strcpy((*sers).mabda," ");
strcpy((*sers).maghsad," ");
strcpy((*sers).typeservis," ");
strcpy((*sers).date," ");
strcpy((*sers).time," ");
(*sers).keraye=0;

}

Vitallity
جمعه 27 دی 1392, 13:32 عصر
قطعاً مطمئن هستم که این کد رو از اینترنت دانلود کردی و فقط مقدارهای employee رو به servis تغییر دادی!!!
به هر حال این کد یه سری مشکل داشت... اونا رو تصحیح کردم الان کار می‌کنه... امیدوارم خودت هم مطالعه کنی.
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#define max 100
using namespace std;
struct newservis{
int numservis;
char namedriver[20];
char familydriver[20];
char namemosafer[20];
char familymosafer[20];
char mabda[50];
char maghsad[50];
char typeservis[15];
char date[10];
char time[5];
int keraye;
};
void input (newservis *,int *);
void first_value(newservis *);
int main()
{
FILE *f1;
newservis sers[max];
int counter=0;

f1 = fopen ("test.txt","rt");
if (f1==NULL) {
cout << "file not found";
exit(1);
}

fread(sers,sizeof(newservis),counter,f1);
input(sers,&counter);
return 0;
}


void input(newservis *sers,int *counter)
{
int x,y,count;
char ch='1';
char temp[10];
do
{
first_value(&sers[*counter]);

cout<<"\r\nPlease enter shomre servis:";
cin >> sers[*counter].numservis;
cout<<"\r\nPlease enter namedriver:";
gets(sers[*counter].namedriver);
cout<<"\r\nPlease enter familydriver:";
gets(sers[*counter].familydriver);
cout<<"\r\nPlease enter namemosafer:";
gets(sers[*counter].namemosafer);
cout<<"\r\nPlease enter familymosafer:";
gets(sers[*counter].familymosafer);
cout<<"\r\nPlease enter mabda:";
gets(sers[*counter].mabda);
cout<<"\r\nPlease enter maghsad:";
gets(sers[*counter].maghsad);
cout<<"\r\nPlease enter typeservis:";
gets(sers[*counter].typeservis);
cout<<"\r\nPlease enter date:";
gets(sers[*counter].date);
cout << "\r\nPlease enter time:";
gets(sers[*counter].time);
cout<<"\r\nPlease enter mblagh keraye:";
cin >> (sers[*counter].keraye);

if((*counter)<max-1){
cout<<"\r\n\r\nDo you want enter other employee informations(y/n)?";
y = 'n';
cin >> y;
if(y == 'n')
break;
}
else
cout<<"\r\nThe capacity of employee is full!";
(*counter)++;
}while(ch=='y' && (*counter)<max);

}

void first_value(newservis *sers)
{

(*sers).numservis=0;
strcpy((*sers).namedriver," ");
strcpy((*sers).familydriver," ");
strcpy((*sers).namemosafer," ");
strcpy((*sers).familymosafer," ");
strcpy((*sers).mabda," ");
strcpy((*sers).maghsad," ");
strcpy((*sers).typeservis," ");
strcpy((*sers).date," ");
strcpy((*sers).time," ");
(*sers).keraye=0;

}

البته این کد مقداری رو توی test.txt ذخیره نمی‌کنه بعد از input توی main باید sers رو با fwrite داخل فایل بنویسی...

yekta64
جمعه 27 دی 1392, 13:51 عصر
بله از نت گرفتم اخه زمینه تخصصی من دات نت هست ولی برای یه دوست انجام میدم
میدونید یکی دیگه از مشکلات این کد اینه که داده ها رو توی یه سطر ازفایل مینویسه درصورتی که من میخام ساختار جدید توی خط بعد چاپ بشه باید چیکار کنم؟

ممنون میشم راهنماییم کنید چون زمان زیادی میشه که c++ کار نکردم

yekta64
جمعه 27 دی 1392, 13:54 عصر
ممنون میشم بفرماید مشکلاتش کجا بود که تکرار نکنم متشکر

Vitallity
جمعه 27 دی 1392, 13:55 عصر
بعد از هر متغیر که از ورودی می‌گیرید یه '\n' داخل فایل بنویسید.

yekta64
جمعه 27 دی 1392, 13:57 عصر
یه سوال دیگهچرا صفحه اجرا یه لحظه میاد و میره چیکار کنم که بمونه و اطلاعات ورودی را وراد کنم؟

yekta64
جمعه 27 دی 1392, 13:58 عصر
اخه تو این کد که نمیشه اینکارو کرد

کامبیز اسدزاده
جمعه 27 دی 1392, 15:06 عصر
از تابع ورودی استفاده کنید...


getch();



یا اگر جدا جدا ورودی دریافت میکنید باید از cin استفاده کنید.

yekta64
جمعه 27 دی 1392, 17:58 عصر
دوستان کسی نمونه کدی از ایجاد یه فایل و ذخیره ارایه ی از ساختارها در ان و در نهایت خوندن انها نداره؟؟؟

yekta64
شنبه 28 دی 1392, 15:19 عصر
دوستان کس دیگه ا ینمیتونه من رو راهنمایی کنه؟؟
یا یه نمونه کد برام بزارید

ممنون

alireza_s_84
شنبه 28 دی 1392, 16:57 عصر
دوستان کس دیگه ا ینمیتونه من رو راهنمایی کنه؟؟
یا یه نمونه کد برام بزارید

ممنون

http://stackoverflow.com/questions/5506645/how-to-read-write-a-struct-in-binary-files
http://www.dreamincode.net/forums/topic/191429-writing-struct-data-to-file-c/

Vitallity
شنبه 28 دی 1392, 18:49 عصر
برای نوشتن داخل فایل باید این‌طور عمل کنی:

fp=fopen(FILE_NAME,"w");
fwrite(&array,sizeof(array),1,fp);

برای این که آخر برنامه هم ترمینال بسته نشه:
std::cin.get();
یا
system("PAUSE");