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

[ تمت الإجابة ]سؤال عن ofstream and ifstream

بدأه mezo_zezo في 8 مارس 2013 · 4 رد · 715 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

سؤالي هو : 

 

انا ادخلت بيانات من خلال  ofstream and ifstream بس بدي مثلآ اعمل قاعدة بيانات احط فيها اسم المستخدم و كلمة السر و بدي اعمل شي مثلآ مثل strcmd يعمل مقارنة و يشوف هل الاسم و كلمة السر موجودة في قاعدة البيانات ولا لا و شكرآ

#2

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

 

عمل توثيق آمن بإسم مستخدم وكلمة مرور على نفس الجهاز صعب التطبيق. لو خزنت اسم المستخدم وكلمة المرور في قاعدة البيانات أو أي طريقة تخزين فلايوجد مايمنع المستخدم من استخراج تفاصيل البيانات أو تعديلها.

#3

لا يا صديقي ليس حقيقي لكن مجرد الفكرة كيف و كيفية الـتأكد من الاسم و الرقم 

 

ملاحظة : انا قصدي بأستخدام لغة ++c

#4

اطلع على هذا المثال، الشرح في التعليقات:

 

 

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
#define MAX_LEN 25              // أقصى طول لإسم المستخدم وكلمة المرور
#define DB_FILE "file.db"       // الملف الذي سنحفظ به البيانات
// سنستخدم هذه البنية لتخزين معلومات الحساب - اسم المستخدم وكلمة المرور
struct Account {
    char username[MAX_LEN+1];
    char password[MAX_LEN+1];
};
// هذه الدالة لإنشاء حساب وبناء الملف الذي سنخزن به البيانات
bool create_account(string username,
                    string password)
{
    Account account = {0}; // نصّفر البنية
    ofstream file; // سنستخدم هذا الصف للكتابة
    // يجب أن لايزيد طول الإسم\أو كلمة المرور عن 25 حتى لانفجر الذاكرة
    if( username.length() > MAX_LEN ||
        password.length() > MAX_LEN ) {
        return false;
      }
    // ننسخ اسم المستخدم وكلمة المرور للبنية
    strcpy(&(account.username)[0], username.c_str());
    strcpy(&(account.password)[0], password.c_str());
    // نكتب البنية في الملف
    file.open(DB_FILE, ios::out | ios::binary);
    file.write((char *) &account, sizeof(Account)); // حجم البيانات التي سنكتبها يساوي حجم البنية نفسها
    file.close();
   
    return true;
}
// سنستخدم هذه الدالة لقراءة بيانات المستخدم
bool read_account(Account& account) {
    ifstream file; // سنستخدم هذا الصف للقراءة
    // نقرأ الملف مرّة أخرى ونخزن البيانات في البنية
    file.open(DB_FILE, ios::in | ios::binary);
    file.read((char *) &account, sizeof(Account)); // حجم البيانات التي سنكتبها يساوي حجم البنية نفسها
    file.close();
   
    return true;
}
int main(int argc, char **argv)
{
    Account account;
    string username;
    string password;
   
    // استدع هذه الدالة لإنشاء حساب
    //create_account("Mr.B", "pass");
   
    // نقرأ بيانات الحساب في البنية
    read_account(account);
    // نقرأ اسم المستخدم وكلمة المرور
    cout << "Username: ";
    cin  >> username;
    cout << "Password: ";
    cin  >> password;
    // نقارن بين اسم المستخدم وكلمة المرور إن نجحت فنرحب بالمستخدم وان فشلت نخبره بذلك
    if( (username == account.username) &&
        (password == account.password) ) {
        cout << "[!] Welcome " << username << endl;
    } else {
        cout << "[!] Invalid username or password" << endl;
    }
    return 0;
}

تم تعديل هذه المشاركة بواسطة Mr.B في 8 مارس 2013 في 01:40

#5

مشكور يا غالي على المجهود الرائع لكن انا بدي البرنامج بدون الـ cin لنفرض انه الملف الي انت عرفته كان موجود فيه الاسم و الباس كيف بدنا نتأكد هل الي ادخله صح او لا يعني على افتراض انه دخلنا الاسم و الباس في الملف من قبل 

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

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

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

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

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