الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

" Student Regisertion "قراءة بيانات من ملف وطباعتها فى ملف ب ++C

بدأه Mahmoud Kelany في 26 يونيو 2010 · 18 رد · 1,398 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

اخواتى فالله

:)

اريد ان اقدم لكم برنامج صغير بلغه السى بلس بلس

هذا البرنامج كان مطلوب منى فى الكورس بتاع OOP اثناء الكليه

والحمدلله تعالى عملته فى ساعه بعد ما اخدته :lol: :lol:

ولكن الان وانا ادعبث فى ملفاتى وجته قولت اشاركم بيه

لعل وعسى ان يستفيد منه احد

فهو للاستفاده فقط

البرنامج يعتبر شرحه فى صورتين فقط مع القليل من الكلام عنه

والتفاصيل الاخرى فقد قومت بوضع التعليقات على الكود الان حتى اذ قرأه احد يفهمه ويستوعبه ان شاء الله

البرنامج يتحدث عن ان هناك بيانات طلاب مخزنه فى ملف واريد ان اصنع منها تقريرا بشكل منظم فى ملف اخر

هذا هو الملف المخزن به البيانات موضوع بالصوره التاليه

post-217802-019515200 1277566199_thumb.j

كما موضحه التفاصيل على البيانات الموجوده فى الملف

ونريد ان نخرجها بهذه الصوره

post-217802-027964300 1277566219_thumb.j

اتمنى ان يفيدكم هذا البرنامج الصغير واى سوال ان شاء الله اجاوب عليه

للتحميل

Student Regisertion.zip

فاليكم الكود للاطلاع عليه فقط

هو عباره عن Student class & it's implementation & main file

Student.h

/*
 **************************
 *                        *
 * Made by Mahmoud Kelany *
 *                        *
 **************************
 */

#include<fstream>
#include<string>

using namespace std;

class student{

private:

	// private data members 

	unsigned id;
	string name;
	unsigned credite;
	float tuition;

public:

	// constractors

	student();
	student(unsigned sId , string sName);

	// set functions

	void setId(unsigned sId);
	void setName(string sName);
	void setCredite(unsigned sCredite);

	// get functions

	unsigned getId();
	string getName();
	unsigned getCredite();
	float getTuition();

	// other functions

	void display();	

	// 	friend functions

	friend ifstream & operator >> (ifstream & f , student & s);
	friend ofstream & operator << (ofstream & f , student & s);

};

Student.cpp

/*
 **************************
 *                        *
 * Made by Mahmoud Kelany *
 *                        *
 **************************
 */

#include "student.h"

#include<iostream>
#include<fstream> 

using namespace std; 

const float TuitionRate = 50 ; 

// constractor implementation
student::student(){
}

student::student(unsigned sId,string sName){

	id = sId;
	name = sName;

}

// setter implementation

void student::setId(unsigned sId){

	id = sId;

}

void student::setName(string sName){

	name = sName;

}

void student::setCredite(unsigned sCredite){

	credite = sCredite;

}

// getter implementation

unsigned student::getId(){

	return id;

}

string student::getName(){

	return name;

}

unsigned student::getCredite(){

	return credite;

}

float student::getTuition(){

	return credite * TuitionRate;

}
//display function in the console window

void student::display(){

	cout << "Student id: " << id << " Student name: " << name << endl
		<< "Student credite: " << credite << endl;

}

//friend function implementation

ifstream & operator >> (ifstream & f , student & s){ // change the job of the operator >> to anothe job

	f >> s.id >> s.name;
	return f;

}

ofstream & operator << (ofstream & f , student & s){// change the job of the operator << to anothe job

	f << s.id << " " << s.name << endl;
	return f;

}

main.cpp

/*
 **************************
 *                        *
 * Made by Mahmoud Kelany *
 *                        *
 **************************
 */

#include<iostream>
#include<fstream>
#include<string>

#include"student.h"

using namespace std;

void main(){

	ifstream infile;  //input file stream object
	ofstream outfile; // output file stream object
	student * students; // pointer to object of student class
	int numberOfStudents; // number of student in the input file

	infile.open("info.txt"); // open the file name info.txt for input data
	outfile.open("report.txt"); // open the file name report.txt for output data

	infile >> numberOfStudents; // begin to read the first line in the file that contain the number of student in the file

	students = new student[ numberOfStudents ] ; // make objects of the student as the number of students that readed

	/**
	  * begain to move to every thing in the input file
	  * make for loop from 0 to number of students 
	  * print in the output file this words " -------- Student Registation Report -------- "
	  * then read the student number i (it's id & name ) by the operator overloading >>
	  * and print it to the output file (it's id & name ) by the operator overloading <<
	  * then check if the course counter = 0 
	  *     print Tuition equales 0$ for 0 credites and break 
	  * else
	  *    make instade for loop form 0 to course counter
	  *    then read the course name & it's number of hours 
	  *    and add the number of hours to the sum variable
	  *    then print the course name & hours in the output file 
	  *    then pass the sum variable to the function " setCredite(sum) " 
	  *    to get the Tuition to this student and print it in the file
	  *    then make sum = 0 to be ready for the next student 
	  * after finishing the main for loop close the input & output file
	**/

	for(int i = 0 ; i < numberOfStudents ; i++) {
		outfile << "-------- Student Registation Report --------" << endl;

		infile >> students;
		outfile << students;

		int courseCounter = 0 , numberOfEachCourse = 0 ,sum = 0; 
		string courseName;

		infile >> courseCounter;
		if(courseCounter == 0){
			outfile << "Tuition equales 0$ for 0 credites" << endl << endl;
		}else{
			for(int j = 0 ; j < courseCounter ; j++){

				infile >> courseName;
				infile >> numberOfEachCourse;

				sum += numberOfEachCourse;

				outfile << courseName << " " << numberOfEachCourse << endl;
			}

			students.setCredite(sum);

			outfile << "Tuition equales " << students.getTuition() 
				<< "$ for " << students.getCredite() << " credites" << endl << endl;

			sum = 0;
		}
	}

	infile.close();
	outfile.close();

	cout << "Program done go to your path directory to see the output in 'report.txt' file." << endl << endl;

}
المرفقات
inputfile.jpgoutput.jpg

Software Developer
Mahmoudkelany.com


 

#2

السلام عليكم

جزاك الله كل خير يا أخي على هذه الشفرة الجميلة، وعلى مشاركتك للعلم :)

الشفرة رائعة جداً ومنظمة ومفهومة.

لدي ملاحظة واحدة فقط: أظنه من المتبع عند التعامل مع البرمجة كائنية التوجه، أن لا تحدد كيف ستتم الطباعة في Display، يمكنك مثلاً أن تعيد مصفوفة من السلاسل النصية، يتعامل معها مستخدم الصنف، لأنه قد يرغب في طباعتها بتنسيق آخر.

لست متأكداً، هي وجهة نظر، إن كانت خاطئة أرجو أن تصلحها لي.

جزاك الله كل خير :)

بالتوفيق

هذه الجملة خاطئة  :wacko: 


#3
Abboodd كتب:

السلام عليكم

جزاك الله كل خير يا أخي على هذه الشفرة الجميلة، وعلى مشاركتك للعلم :)

الشفرة رائعة جداً ومنظمة ومفهومة.

لدي ملاحظة واحدة فقط: أظنه من المتبع عند التعامل مع البرمجة كائنية التوجه، أن لا تحدد كيف ستتم الطباعة في Display، يمكنك مثلاً أن تعيد مصفوفة من السلاسل النصية، يتعامل معها مستخدم الصنف، لأنه قد يرغب في طباعتها بتنسيق آخر.

لست متأكداً، هي وجهة نظر، إن كانت خاطئة أرجو أن تصلحها لي.

جزاك الله كل خير :)

بالتوفيق

وعليكم السلام ورحمه الله وبركاته

الله يا اخى عبدو

ربنا يخليك يا رب

والحمدلله انها مفهومه انا اردت الافاده والله فقط

وهناك شفره اخرى انا بردوا اللى عاملها بس تقريبا كدا ان الشفره دى مش عاجبه احد :ph34r:

الا حضرتك طبعا :lol:

هاقبى اطلعها على حضرتك هاظبطها واعمل ليها تعليقات كى تكون مفهومه

بالنسبه لملاحظتك فهى ملاحظه جميله احيك عليها

لكن انا لم اجبر المستخدم على استخدامها

فيمكنه استخدام setter & getters والطباعه كيفما يشاء

اتمنى ان اكون جاوبت على سوالك وتكون وجهه نظرى مقنعه

انها ليست الزاميه فلديه الدوال يمكنه التعامل معها كيفما يشاء

منتظر ردك بخصوص الجزئيه هذه

يمكن لديك امر اخر

واشكرك ع المرور والرد الكريم

Software Developer
Mahmoudkelany.com


 

#4

السلام عليكم ورحمه الله وبركاته

علشان انا وعدت الاخ عبدو

انى هاطلعه على الشفره الاخرى بعد وضع التعليقات على الكود

فالكود التالى هو برنامج يتكلم عن مؤسسه

ولديها منتجات

فلدينا ملف به بيانات خاص بالموسسه وملف اخر به ملفات خاص بالمنتجات

نريد ان نجمع البيانات ونربطهها مع بعضها البعض فى ملف واحد تقرير نهائى يعنى

يعنى انا عندى البيانات كدا

post-217802-090427600 1277577970_thumb.j

والبيانات دى فى ملفين منعزلين

اريد عن طريق الـ id ان اربطهم مع بعض واطبع تقرير مكون من بيانات هذين الملفين

كانها file system الطريقه المستخدمه قبل ظهور database

لتكون البيانات بالشكل التالى بعد دمج البيانات وربطها مع بعضها البعض

post-217802-009112000 1277578040_thumb.j

وان شاء الله الموضوع الاستفاده من طريقه الربط بين الملفين

للتحميل البرنامج Manufacter.zip

الكود مكون من 5 ملفات

2 class with them implementation

and the main.cpp

وملفين بهم بيانات اقرا منهم واطبع فى ملف اخر مدمجين مع ملف التحميل

prodect.h

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#pragma once
#include<fstream>
using namespace std;

class prodect{

private:

	long id; // prodect id
	long manufId; // manufacter id 
	float price; // prodect price 
	float markUp; // the persentage of the difference bettween the cost of a good or service and its selling price

public:

	prodect();

	// getters functions & didn't need setters here

	long getId();
	long getManufId();
	float getPrice();
	float getMarkUp();

	//other functions 

	void display();
	void readFromFile(ifstream & infile);
};

prodect.cpp

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#include "prodect.h"
#include<iostream>
#include<fstream>
using namespace std;

prodect::prodect(){
	id = 0;
	manufId = 0;
	price = 0;
	markUp = 0;
}

long prodect::getId(){
	return id;
}

long prodect::getManufId(){
	return manufId;
}

float prodect::getMarkUp(){
	return markUp;
}

float prodect::getPrice(){
	return price * (markUp + 1);
}

void prodect::display(){
	cout<< id << '\t' << manufId << '\t' << price << '\t' << markUp << endl;
}

void prodect::readFromFile(ifstream &infile){
	infile>> id >> manufId >>price >> markUp;
}

invent.h

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#pragma once
#include<fstream>
using namespace std;

class invent{

private:

	long id; // inventory id 
	unsigned quantity; // quantity that this inventory make

public:

	invent();

	//getter functions & didn't need setters here

	long getId();
	unsigned getQuantity();

	//other functions

	void display();
	void readFromFile(ifstream & infile);

};

invent.cpp

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#include "invent.h"
#include<iostream>
#include<fstream>
using namespace std;

invent::invent(){
	id = 0;
	quantity = 0;
}

long invent::getId(){
	return id;
}

unsigned invent::getQuantity(){
	return quantity;
}

void invent::display(){
	cout<< id << '\t' << quantity << endl;
}

void invent::readFromFile(ifstream &infile){
	infile>> id >> quantity;
}

main.cpp

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/
#include<iostream>
#include<fstream>
#include"prodect.h"
#include"invent.h"

void main(){

	prodect prodect;
	invent invent;

	ifstream prodectFile( "prodect.txt" , ios::in ); // prodect object that open prodect.txt information file
	ifstream inventoryFile( "invent.txt" , ios::in ); // inventory object that open invent.txt information file

	ofstream quantityfile( "quantity Report.txt" , ios::out ); // output object that make quantity Report


	/*
	* print report about the id , manufID , price form "prodect.txt"   * 
	* and match them by id and search for the quantity of this prodect *
	*
	*/

	quantityfile << "ID   \tManufID\tprice\tQuantity\n" ; 

	while( !prodectFile.eof() ){

		prodect.readFromFile(prodectFile);

		quantityfile << prodect.getId() << '\t' << prodect.getManufId() << '\t' << prodect.getPrice() << '\t';

		while( invent.getId() !=  prodect.getId() ){
			invent.readFromFile( inventoryFile );
		}

		quantityfile << invent.getQuantity() << endl;

		inventoryFile.seekg(0);
	}

	//after finish the program close the prodectFile , inventoryFile
	prodectFile.close();
	inventoryFile.close();
}

اتمنى ان يكون مفيد

سلام عليكم

المرفقات
input.jpgoutput.jpg
1 −1

Software Developer
Mahmoudkelany.com


 

#5

جزاك الله خيراً أخ محمود :)

اسمي المكتوب باللغة الإنكليزية هو "عبود" وليس "عبدو" :D

بالنسبة لـdisplay، الصراحة لا أدري، لكني -لسبب لا أعلمه :D- لا أرتاح لوضع جمل cout داخل صنف.

لدي سؤال، ولدي ملاحظات:

السؤال:

ماذا تفعل:

inventoryFile.seekg(0);

؟؟؟

الملاحظات:

1- استعمل int main بدلاً من void main.

2- في دالة التشييد Constructor، لا تقم بتهيئة المتغيرات في جسم الدالة، بل في قائمة التهيئة Initialization List، وذلك بوضع ( : ) بعد اسم الدالة، ثم أسماء المتغيرات وتهيئتها مفصولة بفاصلة.

مثال:

product::product(): id(0), manufId(0), price(0), markUp(0)
{
}

وذلك لأسباب متعددة:

1- سرعة التنفيذ، فالتهيئة تدمج الإنشاء والإسناد في عملية واحدة.

2- إذا كان لديك متغير عضو ليس له دالة تشييد افتراضية Default Constructor، فتجب تهيئته في قائمة التهيئة.

3- إن كان لديك ثابت Constant أو مرجع Reference، فتجب أيضاً تهيئته في قائمة التهيئة.

الملاحظة الثالثة:

الدوال التي لا تغير شيئاً في أعضاء الصنف كدوال الـGetters، اجعلها دائماً ثابتة Constant، وذلك كالتالي:

long getId() const;

لاحظ أن كلمة const تكتبها في الـPrototype وفي تنفيذ الدالة.

وذلك لأسباب:

1- لكي لا تقوم بتغيير شيء ما عن غير قصد منك، فحينها سينبهك المترجم عن طريق إصدار خطأ.

2- لكي تستطيع استدعاءها عند تمريرها كمرجع ثابت Constant Reference إلى دالة ما.

ملاحظة رابعة غير متأكد منها:

اجعل ID متغيراً نصياً، حيث أنك لن تقوم بإجراء العمليات الحسابية عليه.

ولدي ملاحظة أيضاً على ملفات الترويسة، لكني لا أريد أن أثقل عليك :D

جزاك الله كل خير على مناقشة المعلومات، إن كان لديك المزيد فلا تبخل علينا :)

بالتوفيق

تم تعديل هذه المشاركة بواسطة Abboodd في 26 يونيو 2010 في 23:25

1

هذه الجملة خاطئة  :wacko: 


#6
Abboodd كتب:

جزاك الله خيراً أخ محمود :)

اسمي المكتوب باللغة الإنكليزية هو "عبود" وليس "عبدو" :D

بالنسبة لـdisplay، الصراحة لا أدري، لكني -لسبب لا أعلمه :D- لا أرتاح لوضع جمل cout داخل صنف.

لدي سؤال، ولدي ملاحظات:

السؤال:

ماذا تفعل:

inventoryFile.seekg(0);

؟؟؟

الملاحظات:

1- استعمل int main بدلاً من void main.

2- في دالة التشييد Constructor، لا تقم بتهيئة المتغيرات في جسم الدالة، بل في قائمة التهيئة Initialization List، وذلك بوضع ( : ) بعد اسم الدالة، ثم أسماء المتغيرات وتهيئتها مفصولة بفاصلة.

مثال:

product::product(): id(0), manufId(0), price(0), markUp(0)
{
}

وذلك لأسباب متعددة:

1- سرعة التنفيذ، فالتهيئة تدمج الإنشاء والإسناد في عملية واحدة.

2- إذا كان لديك متغير عضو ليس له دالة تشييد افتراضية Default Constructor، فتجب تهيئته في قائمة التهيئة.

3- إن كان لديك ثابت Constant أو مرجع Reference، فتجب أيضاً تهيئته في قائمة التهيئة.

الملاحظة الثالثة:

الدوال التي لا تغير شيئاً في أعضاء الصنف كدوال الـGetters، اجعلها دائماً ثابتة Constant، وذلك كالتالي:

long getId() const;

لاحظ أن كلمة const تكتبها في الـPrototype وفي تنفيذ الدالة.

وذلك لأسباب:

1- لكي لا تقوم بتغيير شيء ما عن غير قصد منك، فحينها سينبهك المترجم عن طريق إصدار خطأ.

2- لكي تستطيع استدعاءها عند تمريرها كمرجع ثابت Constant Reference إلى دالة ما.

ملاحظة رابعة غير متأكد منها:

اجعل ID متغيراً نصياً، حيث أنك لن تقوم بإجراء العمليات الحسابية عليه.

ولدي ملاحظة أيضاً على ملفات الترويسة، لكني لا أريد أن أثقل عليك :D

جزاك الله كل خير على مناقشة المعلومات، إن كان لديك المزيد فلا تبخل علينا :)

بالتوفيق

معذره اخ عبود لم اخد بالى مرهق شويتين

اممممم

ممكن بس انا حاولت انى اعملها بحيث انى لو عاوز اطبع الكائن دا اطبع محتوايه باستدعاء هذه الداله Display

وانا لم اتذكر اخى فقد يكون انه فى السوال المراد حله طلب هذه الداله لم اتذكر حقيقةً

ممكن اقبى اشوفه واقولك

====

الداله

inventoryFile.seekg(0);

وظيفتها هنا عندما انتهى من توصيل العنصر الاول فى الملف الاول بما يناسبه فى الملف التانى

فانقل الموشر الموجود عند نهايه الملف ليكون عند بدايته ويبحث من جديد من بدايه الملف

لو غير مفهومه قولى واحاول اشرحها بطريقه افضل

=====

انا لا اريد ان تعود لى قيمه الى main function ?

فانا اجعلها void ما السبب فى جعلها int main ?

=====

صراحه بالنسبه للـInitialization List انا اعلمها جيدا

وانا بالفعل استخدمها لكن كلما اعطيت الكود لاحد يسال ما هذه ؟

فجعلتها بالطريقه العاديه

وصراحه اول مره اعرف انها اسرع فالتنفيذ جزاك الله خيرا :)

=====

اه انا معاك فى الموضوع انى اجعل الدوال التى تعود لى بالقيمه getters تكون const

والمدخلات الى دوال الـ setter اذا لم ارد ان تتغير اجعلها const

صراحه بكسل اعملها :wacko: بجد والله بس خلاص هاعملها بعد كدا :lol:

انا فاهمك لم اعملها فى الـPrototype لازم اكتبها كمان فى الـ implementation يعنى كدا

int getX() const;

تكون فى الـ implementation 

int getX() const{
return x ;
}

=====

ID كما ذكر فى نص الحوار انه long

فانا ملتزم بنص السوال لكن اذا اردت تغيره فلا مشاكل

====

اقتباس
ولدي ملاحظة أيضاً على ملفات الترويسة، لكني لا أريد أن أثقل عليك :D

اعرض ملاحظات اخى الكريم عادى فنحن نتعلم من النقاش

فما قصدك بـ ملفات الترويسه ؟

ان شاء الله هادور ولو لقيت اكيد هاضعها لكم كى نستفيد جميعا ان شاء الله

منتظر ردك وملاحظاتك الباقيه لا تخف فنحن سويا نتعلم ونستفيد

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 27 يونيو 2010 في 00:26

Software Developer
Mahmoudkelany.com


 

#7

انا عدلت الملاحظات بتاعتك اخى عبود

انا اقدر ازعلك ابدا :lol: :lol:

لكن بالنسبه للـ ID مش هيتغير لان المعطيات الـ id long

والارقام اللى فى الملف ليست حروف علشان اغيره

التعديل

للتحميل

Manufacter.zip

prodect.h

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#pragma once
#include<fstream>
using namespace std;

class prodect{

private:

	long id; // prodect id
	long manufId; // manufacter id 
	float price; // prodect price 
	float markUp; // the persentage of the difference bettween the cost of a good or service and its selling price

public:

	prodect();

	// getters functions & didn't need setters here

	long getId()const ;
	long getManufId() const ;
	float getPrice()const ;
	float getMarkUp() const;

	//other functions 

	void display();
	void readFromFile(ifstream & infile);
};

prodect.cpp

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#include "prodect.h"
#include<iostream>
#include<fstream>
using namespace std;

prodect::prodect():id(0),manufId(0),price(0),markUp(0){
}

long prodect::getId() const {
	return id;
}

long prodect::getManufId() const {
	return manufId;
}

float prodect::getMarkUp() const {
	return markUp;
}

float prodect::getPrice() const {
	return price * (markUp + 1);
}

void prodect::display(){
	cout<< id << '\t' << manufId << '\t' << price << '\t' << markUp << endl;
}

void prodect::readFromFile(ifstream &infile){
	infile>> id >> manufId >>price >> markUp;
}

invent.h

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#pragma once
#include<fstream>
using namespace std;

class invent{

private:

	long id; // inventory id 
	unsigned quantity; // quantity that this inventory make

public:

	invent();

	//getter functions & didn't need setters here

	long getId() const ; 
	unsigned getQuantity() const ;

	//other functions

	void display();
	void readFromFile(ifstream & infile);

};

invent.cpp

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/

#include "invent.h"
#include<iostream>
#include<fstream>
using namespace std;

invent::invent():id(0),quantity(0){
}

long invent::getId() const {
	return id;
}

unsigned invent::getQuantity() const {
	return quantity;
}

void invent::display(){
	cout<< id << '\t' << quantity << endl;
}

void invent::readFromFile(ifstream &infile){
	infile>> id >> quantity;
}

main.cpp

/**************************
*                        *
* Made by Eng.Hamzawy    *
*                        *
**************************/
#include<iostream>
#include<fstream>
#include"prodect.h"
#include"invent.h"

void main(){

	prodect prodect;
	invent invent;

	ifstream prodectFile( "prodect.txt" , ios::in ); // prodect object that open prodect.txt information file
	ifstream inventoryFile( "invent.txt" , ios::in ); // inventory object that open invent.txt information file

	ofstream quantityfile( "quantity Report.txt" , ios::out ); // output object that make quantity Report


	/*
	* print report about the id , manufID , price form "prodect.txt"   * 
	* and match them by id and search for the quantity of this prodect *
	*
	*/

	quantityfile << "ID   \tManufID\tprice\tQuantity\n" ; 

	while( !prodectFile.eof() ){

		prodect.readFromFile(prodectFile);

		quantityfile << prodect.getId() << '\t' << prodect.getManufId() << '\t' << prodect.getPrice() << '\t';

		while( invent.getId() !=  prodect.getId() ){
			invent.readFromFile( inventoryFile );
		}

		quantityfile << invent.getQuantity() << endl;

		inventoryFile.seekg(0);
	}

	//after finish the program close the prodectFile , inventoryFile
	prodectFile.close();
	inventoryFile.close();
}

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 27 يونيو 2010 في 01:11

1 −1

Software Developer
Mahmoudkelany.com


 

#8

شكرا ً لكم طريقة نقاشكم جدا ً راقية و أعجبتني

لي سؤال بما أننا جبنا سيرة الملفات :P

و هي في الدالة التي استخدمتها

File.eof()

أحيانا ً عندما أستخدم هذه الدالة تتكرر أخر قيمة لملف ما :

مثلا ً نفرض ملف test

يحوي

mohammed

#include "stdafx.h"
#include<iostream>
using namespace std;
#include<fstream>
void main()
{
ifstream test("c:/new/file1.txt");
char ch;
if(!test)
{
	cout<<"erorr";
	exit(1);
}
while(!test.eof())
{
test>>ch;
cout<<ch;
}
test.close();

}

فإن الخرج سيصبح هنا

mohammedd

أي تكرر أخر حرف

حاليا ً أحل هذه المشكلة بتغير شرط الحلقة فيصبح

while(test>>ch)
{

cout<<ch;
}

فهل هناك طريقة لكي يقبل بطريقة eof و بطريقة إدخال حرف حرف أي ليس سلاسل

مع الشكر

#9
aohammed كتب:

شكرا ً لكم طريقة نقاشكم جدا ً راقية و أعجبتني

لي سؤال بما أننا جبنا سيرة الملفات :P

و هي في الدالة التي استخدمتها

File.eof()

أحيانا ً عندما أستخدم هذه الدالة تتكرر أخر قيمة لملف ما :

مثلا ً نفرض ملف test

يحوي

mohammed

#include "stdafx.h"
#include<iostream>
using namespace std;
#include<fstream>
void main()
{
ifstream test("c:/new/file1.txt");
char ch;
if(!test)
{
	cout<<"erorr";
	exit(1);
}
while(!test.eof())
{
test>>ch;
cout<<ch;
}
test.close();

}

فإن الخرج سيصبح هنا

mohammedd

أي تكرر أخر حرف

حاليا ً أحل هذه المشكلة بتغير شرط الحلقة فيصبح

while(test>>ch)
{

cout<<ch;
}

فهل هناك طريقة لكي يقبل بطريقة eof و بطريقة إدخال حرف حرف أي ليس سلاسل

مع الشكر

العفو اخى الكريم

فعلا كلامك مظبوط

لكن صراحه لم اتطرق لمثل هذه الملاحظه من قبل

انا جربتها وحاولت معاها بكل الطرق لكن بيكرر الحرف الاخر ايضا

لكن لم اخدت الكلام على انه string لم يتكرر حاجه

اتمنى لو احد يفيدنا فى الموضوع هذا

وجزاكم الله خيرا على الانضمام الينا

مرحبا بك :)

Software Developer
Mahmoudkelany.com


 

#10

السلام عليكم

انا حاولت فى السوال بتاعك اخى الكريم aohammed

ووصلت لحل مفيد بالنسبه لموضوع read char by char from file

#include<iostream> 
using namespace std; 
#include<string>
#include<fstream> 
void main() 
{ 
	ifstream test("file.txt" ,ios::in); 
	char ch;
	while(!test.eof()){ 
		ch = test.get();
		cout<<ch;
	} 
	cout<<endl;
	test.close(); 
}

جربه وشوف هل كدا اتحلت مع استخدام eof() و char variable

ولا فيه حاجه لسه ؟

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 27 يونيو 2010 في 09:30

1 −1

Software Developer
Mahmoudkelany.com


 

#11

متميز دائما يا محمود :D

#12
اقتباس

جربه وشوف هل كدا اتحلت مع استخدام eof() و char variable

ولا فيه حاجه لسه ؟

شكرا ً لك أخ محمود حُلت المشكلة

#13
هويدي كتب:

متميز دائما يا محمود :D

الله يخليك اخى هويدى

كنت منتظرك من زمان :)

شكرا ع الرد والمرور ويارب يكون الموضوع عجبك واستفدت منا

على قدر استفادتنا منك

منور الموضوع :lol:

aohammed كتب:

شكرا ً لك أخ محمود حُلت المشكلة

العفو اخى الكريم

الحمدلله على كل شىء

سعدت بمروك وتفاعلك معانا

−1

Software Developer
Mahmoudkelany.com


 

#14

الأخ محمود :)

بالنسبة لـDisplay، فسأبحث قليلاً فيها على الإنترنت ثم أرد لك النتيجة.

بالنسبة لـmain، فهو من القياسيات أن تضعها int main، بحيث تعيد قيمة مخالفة للصفر إلى نظام التشغيل إن حصل خطأ ما، أما إن سارت الأمور على خير ما يرام، فعندها تكتب في نهايتها:

return 0;

لمزيد من المعلومات حول هذا:

http://www.daniweb.com/forums/thread78955.html

بالنسبة لـseekg شرحك ممتاز، لكن لدي سؤال، هل يحدد الوسيط رقم الحرف أم رقم السطر؟

وبالنسبة لملف الترويسة، فقد قصدت به Header File، لكن لدي عشق للتعريب :D

لدي سؤال حول ذلك، ما معنى:

#pragma once

جزاك الله خيراً أخ محمود.

ملاحظة: بالنسبة لمشكلة تكرار الحرف الأخير فقد حلت فعلاً، لكن ما سببها يا ترى؟

تم تعديل هذه المشاركة بواسطة Abboodd في 27 يونيو 2010 في 17:17

هذه الجملة خاطئة  :wacko: 


#15
اقتباس
ملاحظة: بالنسبة لمشكلة تكرار الحرف الأخير فقد حلت فعلاً، لكن ما سببها يا ترى؟

أعتقد أن eof لا تعيدreturn 0 إلا عندما لا يوجد أي محرف أي بعد قراءة أخر حرف

في حالة >> فإنه سيكون للـ ch قيمة أخيرة محتفظ فيها و هي أخر حرف

أم ch=file.get() لاحظ أنه سيطبع مسافة بعد أن ينتهي من طباعة محتويات الملف :(

#16
Abboodd كتب:

الأخ محمود :)

نعم يا اخ عبود :lol: معك تكلم انى اسمعك بوضوح :lol: :lol:

اقتباس

بالنسبة لـDisplay، فسأبحث قليلاً فيها على الإنترنت ثم أرد لك النتيجة.

وانا ف انتظارك بخصوص الـ Display(); :lol: :lol:

اقتباس
بالنسبة لـmain، فهو من القياسيات أن تضعها int main، بحيث تعيد قيمة مخالفة للصفر إلى نظام التشغيل إن حصل خطأ ما، أما إن سارت الأمور على خير ما يرام
امم يعنى الـ main يستحسن ان تكون int ?

تمام جزاك الله خيرا

اقتباس

بالنسبة لـseekg شرحك ممتاز، لكن لدي سؤال، هل يحدد الوسيط رقم الحرف أم رقم السطر؟

ربنا يخليك انت الممتاز اخى الكريم عبود

انا لا افهم كلمه " الوسيط " لكن من جمله هل يحدد رقم الحرف او السطر

ممكن اجاوب ع ما فهمت وان لم تكن ممكن توضح ما معنى الوسيط

التحرك فى داله seekg يكون على اساس معرفه عدد الـ bytes فى الملف

يعنى انا عندى رقم الرقم مثلا 4 byte

ووعندى حرف الحرف 8 byte

عاوز اوصل للحرف رقم 3 فى الملف والرقم الذى يلى هذا الحرف

الملف به البيانات هكذا

asb544r

انا بقا عاوز احرك الـ seekg للحرف b بشوف الـoffset بتاعها من بدايه الملف او من نهايته او من المكان الذى اقف فيه لتحديد مكان الموشر الذى اقف عنده استخدم tellg

وبعد ذلك احدد offset ولتكن من بدايه الملف يقبى علشان اوصل للحرف b هاحرك الـ seekg بمقدار 16 byte

طب عاوز اوصل للرقم اللى بعد الحرف دا ممكن اضيف 8 بايت على مكانى او ابدا من الاول واضيف 20 بايت

اتمنى ان يكون الشرح مفهوم ع قدر الامكان وان لم يكن ممكن تقولى ايه اللى غير مفهوم

اقتباس

وبالنسبة لملف الترويسة، فقد قصدت به Header File، لكن لدي عشق للتعريب :D

ماذا تعنى بتعريبه ؟ ؟

اقتباس

لدي سؤال حول ذلك، ما معنى:

#pragma once

هذه ليست من عندى وكنت متوقع ان احد يسال فيها ونسيت امسحها انا استخدم vb 2005 وعندما اضيف class يكتبها لى فى بدايتها هههه ولكن لا اعلم صراحه :lol:

اقتباس

ملاحظة: بالنسبة لمشكلة تكرار الحرف الأخير فقد حلت فعلاً، لكن ما سببها يا ترى؟

لا ادرى اخى عبود فهذه اول مره تواجهنى مثل هذه المشكله

لكن والحمدلله وبفضل الله استطعت حلها وايجاد حل لها

ايضا

 file>>ch;

كانت لا تاتى باى مسافات بين الكلمات لكن

ch=fiel.get();

تاتى بكل شىء :P

جزاك الله خيراً أخ محمود.

جزانا واياكم كل خير ان شاء الله

كم انا سعيد بالمناقشه اخى عبود

Software Developer
Mahmoudkelany.com


 

#17

:)

الوسيط = Parameter

شرحك تمام ووصلت الفكرة إن شاء الله

اقتباس

ماذا تعنى بتعريبه ؟ ؟

أقصد بالتعريب إيجاد مصطلح عربي مرادف، وهي عادة أحبذها كثيراً وأستعملها، حتى بعض الكلمات التي لا أجد لها مرادفاً عربياً أخترع لها واحداً من عندي.

مثل: Preprocessor = المعالج القبلي :D

بالنسبة لـpragma once، فقد بحثت ووجدت أنها ما أردته تماماً عندما قلت إن لدي ملاحظة على ملف الترويسة الـHeader File

pragma once

لكنني في العادة أستعمل "حراس التضمين Inclusion Guards" لهذه الغاية:

Include guard

جزاك الله كل خير :)

هذه الجملة خاطئة  :wacko: 


#18
اقتباس

لدي سؤال حول ذلك، ما معنى:

#pragma once

اعتقد انكم بحاجه لإلقاء نظره على كتب C/C++ Standard، أغلب تسأولتكم توجد لها اجابه هناك.

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#19
Abboodd كتب:

:)

الوسيط = Parameter

شرحك تمام ووصلت الفكرة إن شاء الله

أقصد بالتعريب إيجاد مصطلح عربي مرادف، وهي عادة أحبذها كثيراً وأستعملها، حتى بعض الكلمات التي لا أجد لها مرادفاً عربياً أخترع لها واحداً من عندي.

مثل: Preprocessor = المعالج القبلي :D

بالنسبة لـpragma once، فقد بحثت ووجدت أنها ما أردته تماماً عندما قلت إن لدي ملاحظة على ملف الترويسة الـHeader File

pragma once

لكنني في العادة أستعمل "حراس التضمين Inclusion Guards" لهذه الغاية:

Include guard

جزاك الله كل خير :)

طب تمام الحمدلله

معلش بقا اصل انا متعود على الاسماء بتاعت البرمجه بالانجليزى

جزانا واياكم كل خير اخ عبود

سعدت بمناقشتك

محمد علاء الدين كتب:

اعتقد انكم بحاجه لإلقاء نظره على كتب C/C++ Standard، أغلب تسأولتكم توجد لها اجابه هناك.

و الله ولي التوفيق

جزاكم الله خيرا مشرفنا العظيم

سعدت بمشاركتك فى موضوعى

المووضوع اذداد نورا

Software Developer
Mahmoudkelany.com


 

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…