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

هل يمكن عمل هذا المشروع او لا ؟

مغلق
بدأه مجلـد جديـد في 24 أبريل 2007 · 3 رد · 810 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أريد ان اعمل برنامج كبير شوي ، ويحتوي على الكثير من مفاهيم ال c++ ، لكن بدأت احس انه غير ممكن عمله . شرح المشروع :

عمل برنامج يتحكم في Linked list ، كل Node فيها عبارة عن class Student ، و هذه الclass هي derived من ال base class Person

بحيث اني أقوم باستخدام مفهوم File Processing وذلك بكتابة البيانات بشكل ملف Binary File او Random Access File .

البرنامج لن يحتوي على واجهه رسوميه كبداية ، بإذن بعد ان أنجز هذا الجزء سوف أقوم بمحاولة تحويله الى برنامج ذو واجهه رسومية بواسطة مكتبات MFC

سؤال اعزائي المبرمجين ، هل استمر في عمل هذا البرنامج او اتوقف لان هناك شيء ما ليس صحيحاً ؟ ( خاصة بما بتعلق بال File Processing )

هذه هي البداية فقد قمت بعمل الملفات :

Node.h

#ifndef NODE_H
#define NODE_H

#include "Student.h"

class Node
{
public:
	Node( Student );
	~Node();
	//void updateData( Student );

	Student data;
	Node* next;
};

#endif

Node.cpp

#include "Node.h"

Node::Node( Student stu ) : data( stu )
{
	//data = newData;

	next = NULL;
}

Node::~Node()
{
	//data.~Student();
	next = NULL;
}

LinkedList.h

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include "Node.h"

class LinkedList
{
public:
	LinkedList();
	~LinkedList();

	void addFirst( Student );
	void deleteNode();

	bool isEmpty() const;
	int getSize() const;

	void print();

//private:
	Node* firstPtr;
};

#endif

LinkedList.cpp

#include "LinkedList.h"

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

LinkedList::LinkedList()
{
	firstPtr = NULL;
}

LinkedList::~LinkedList()
{
	firstPtr = NULL;
}

void LinkedList::addFirst( Student stu )
{
	Node* newNode = new Node( stu );

	if ( firstPtr != NULL )
		{
		newNode -> next = firstPtr;
		firstPtr = newNode;
		}
	else
		firstPtr = newNode;
}

bool LinkedList::isEmpty() const
{
	return firstPtr == NULL;
}

int LinkedList::getSize() const
{
	int count=0;
	Node* currentPtr = firstPtr;

	while ( currentPtr != NULL )
		{
		currentPtr = currentPtr -> next;
		count++;
		}

	return count;
}

void LinkedList::print() const
{
	Node* currentPtr = firstPtr;
	if ( currentPtr != NULL )
		{
		while ( currentPtr != NULL )
			{
			cout << currentPtr -> data << endl;
			currentPtr = currentPtr -> next;
			}
		}
	else
		cout <<"The list is empty.\n";
}

Person.h

#ifndef PERSON_H
#define PERSON_H

#include <string>
using std::string;

class Person
{
public:
	Person( int=-1, string ="" );
	~person();

	void setName( string );
	void setID( int );

	string getName();
	int getID();

	void print();

//private:
protected:
	int id;
	string name;
};

#endif

Person.cpp

#include "Person.h"

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

Person::Person( int id, string name )
{
	this -> id = id;
	this -> name = name;

	cout <<"# Constrcutor called for " << name << endl;
}

Person::~Person()
{
	cout <<"# Destrcutor called for " << name << endl;
}

void Person::setName( string name )
{
	this -> name = name;
}

void Person::setID( int id )
{
	this -> id = id;
}

string Person::getName()
{
	return name;
}

int Person::getID()
{
	return id;
}

void Person::print()
{
	cout <<"Name  : " << name << endl 
		 <<"ID No : " << id << endl;
}

Student.h

#ifndef STUDENT_H
#define STUDENT_H

#include "Person.h"

class Student : public Person
{
public:
	Student( int=-1, string ="", int=-1, double=-1.0 );
	~Student();

	void setLevel( int );
	void setGPA( double );

	int getLevel();
	double getGPA();

	void print();

private:
	int level;
	double GPA;
};

#endif

Student.cpp

#include "Student.h"

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

Student::Student( int id, string name, int level, double GPA ) : Person( id, name )
{
	this -> level = level;
	this -> GPA = GPA;

	cout <<"# Constrcutor called for " << name << endl;
}

Student::~Student()
{
	cout <<"# Destrcutor called for " << name << endl;
}

void Student::setLevel( int level )
{
	this -> level = level;
}

void Student::setGPA( double GPA )
{
	this -> GPA = GPA;
}

int Student::getLevel()
{
	return level;
}

double Student::getGPA()
{
	return GPA;
}

void Student::print()
{
	Person::print();

	cout <<"Level : "<< level << endl
		 <<"GPA   : " << GPA << endl;
}
#2

السلام عليكم ,,

المشروع الذي تحاول عمله مشروع جميل و سوف يكسبك خبرة كثيرة في البرمجة ,,

طبعاً المشروع سيتكون من ثلاث أقسام أو طبقات ,,

الواجهة : لن أتكلم عنها لأنه ليس لدي خبرة كبيرة في برمجة الواجهات ,,

المحرك الرئيسي للبرنامج : الذي يتكون من الفئات الرئيسية كالطالب في مثالك ,,

ستجد في المرفقات مثال قمت بكتابته منذ مدة قصيرة ,, عبارة عن مكتبة فيها عناصر و فيها الكثير من الأفكار البرمجية و تعتمد على Double Linked List

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

قاعدة البيانات : كنت أفكر في تصميم قاعدة بيانات خاصة بالمكتبة و لكن ,,

المشكلة أن تصميم قاعدة بيانات خاصة بالبرنامج عملية معقدة حقيقة و ليست بالسهولة المتوقعة ,, طبعاً السجلات ليست ثابتة الطول في مثالنا

تفكيري كان ينحصر في طريقتين لحل مشكلة قاعدة البيانانت ,,

الأولى أن أستخدم محرك جاهز

Sqlite

و الثانية هي تصميم محرك صغير جداً خاص ببرنامجنا العزيز :lol:

طبعاً هذا ما أعمل عليه حالياً و هو تصميم محرك صغير جداً و لكنه ليس خاص بالبرنامج و يمكنني استعماله في برامج أخرى

و مع صغر حجم المحرك فإنه يبقي معقداً بالنسبة لي على الأقل :rolleyes:

المحرك يحتاج إلى الكثير من الوقت و الجهد و الاختبارات و كل ما أحلم بالوصول إليه هو محرك يسهل التعامل مع Flat Database لا أكثر و لا أقل

بالمناسبة يمكنك البحث حول موضوع تخزين كائن في ملف و هذا يسمى Serialization

تحياتي ,,

Library.zip

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 25 أبريل 2007 في 02:37

#3

اخوي ، انا مره اشتغلت على برنامج قريب من فكرتك ، بس ليش مكبر البرنامج زياة عن اللزوم ؟؟

يعني قصدي ، كلاس الـ student يحتوي على مؤشر الـ Next ، ما تحتاج إلى كلاس آخر مثل node :)

هذا قصدي بدون الـ كلاس الـ node

class Student 
{
//Member functions...

private:
	//A pointer to the next student object:
	Student* next;
	Student* previous;
};

و بعدين لا تنسى إذا تبي تسوي linked ، لازم كل object يكون عنده مؤشرين next وprevious ، لأن إذا كان بس Next ما تقدر ترجع :)

:::كوت بو 6:::

IDE : Microsoft Visual Studio 2005 Pro

#4

خالد الشايع

الحمد لله عرفت اني أقدر افهم البرامج الي يكتبها الآخرين ، بصراحة اصبت بصدمه يوم شفت البرامج الي تكتب ب MFC و غيرها لاني صاير مثل الأطرش في الزفة !

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

Ferrum

لاني توني ماخذ ال Linked List و أحاول اطبقها ، بس كلامك شكله هو الأفضل و هو الصح ايضاً ، وما يحتاج تكون القائمة Doubly ، باستطاعتي الرجوع الى الوراء باستخدام دالة اضافية getPrevious لكن بيكون آداء البرنامج ماهو ممتاز جداً ، يعني بيصير :

O(n^2)

بدلاً من

O(n)

هذا الموضوع مغلق.

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