نمایش نتایج 1 تا 11 از 11

نام تاپیک: وظیفه این کد

  1. #1

    وظیفه این کد

    سلام.
    کد زیر دقیقا چکار میکنه؟
    منظورم خط اوله.
     fs = new fstream( "Class_List.txt", ios::in );

    if ( fs->bad() )
    {
    cout << "\n Can't open or create 'Class_List' file" << endl;
    system ( "pause" );
    return 1;
    }

  2. #2

  3. #3

    نقل قول: عکل کد ساده ی زیر؟

    منظورتون همون شی جدیده دیگه؟

    حالا یه مشکل کوچیک توی این کد دارم: کد مربوط میشه به ویرایش اطلاعات دانشجویی. به این ترتیب که کاربر با وارد کردن شماره دانشجویی، میتونه شماره دانشجویی جدید و اسم جدید رو جایگزین شماره دانشجویی قدیم و اسم قدیم بکنه. با استفاده از case حالت دوم، برای همین کار استفاده شده که کدش اینه:

    case '2' : // Modify Student
    {

    string input;
    cout << "\n Enter Student ID, that you want modify its informatin : ";
    cin >> input;

    pos = file_str.find(input);

    if (pos == string::npos)
    {
    cout << "\n Your specified student doesn't exist in the list" << endl;
    system ( "pause" );
    break;
    }

    cout << "\nEnter new informations for this student : ";

    cout << "\n\n ID : ";
    cin >> input;

    del_num = file_str.find('>', pos+1)-pos; // ID : first character of ID to first '>'

    file_str.replace (pos, del_num, input); // replace the current ID with the new one


    cout << "\n Name (Only one word) : ";
    cin >> input;

    pos = file_str.find('>', pos+1) + 1; // first character of Name
    del_num = file_str.find('>', pos+1)-pos; // Name : first character after first '>' to second '>'

    file_str.replace (pos, del_num, input); // replace the current Name with the new one

    cout << "\n Record was modified." << endl;
    system ( "pause" );

    break;
    }


    حالا اون قسمت مربوط به پیدا کردن ID و بعدشم Replace کردن ID جدید با قدیم چطور کار میکنه؟ منظورم این دو خطه:

    del_num = file_str.find('>', pos+1)-pos; // ID : first character of ID to first '>'

    file_str.replace (pos, del_num, input); // replace the current ID with the new one


    این pos+1 و کلا تابع find , replace چطور عمل میکنن؟

    خیلی ممنون.

  4. #4

    نقل قول: وظیفه این کد

    ممنون میشم به سوالم جواب بدین. واقعا مهمه.

  5. #5

    نقل قول: وظیفه این کد

    سلام. من هنوز منتظر جوابم.

    ممنون.

  6. #6

    نقل قول: وظیفه این کد

    سلام. من هنوز منتظر جوابم.

  7. #7
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: وظیفه این کد

    این pos+1 و کلا تابع find , replace چطور عمل میکنن؟
    دوست من شما کد رو کامل بزارتا بتونیم کمک کنیم
    چون توابع find , replace متعلق به یک کلاس به نام file_str هستند و اینجوری نمی شه تحلیلش کرد
    ولی معمولا اگر طول رکورد ها ثابت باشه می تونیم موقعیت cursorنوشتن رو به اول رکورد مورد نظر انتقال بدیم و دوباره بازنویسیش کنیم این pos فکر کنم به همین خاطر باشه

  8. #8

    نقل قول: وظیفه این کد

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    دوست من شما کد رو کامل بزارتا بتونیم کمک کنیم
    چون توابع find , replace متعلق به یک کلاس به نام file_str هستند و اینجوری نمی شه تحلیلش کرد
    ولی معمولا اگر طول رکورد ها ثابت باشه می تونیم موقعیت cursorنوشتن رو به اول رکورد مورد نظر انتقال بدیم و دوباره بازنویسیش کنیم این pos فکر کنم به همین خاطر باشه
    اینم کل کد. حرف شما هم درسته و کار pos رفتن به مکان های مختلف رکورد (اول اسم، اول شماره دانشجویی و ...) هست اما چطور؟

    // Begin of File

    //************************************************
    // Programmer : Mohammad Rastkar
    // Last Build : APR_11_08
    // Compiler : VC++‎2005 - Win32 Console App
    // Purpose : Separate utility to manipulate a 'Class_List' file (add, delete, modify, list Records)
    // for using later, with 'Lettered_Numbers' program
    //************************************************

    /////////////< Includes >/////////////

    #include <conio.h> // getch()
    #include <fstream>
    #include <string>
    #include <sys\stat.h> // stat
    #include <cerrno> // errno
    #include <iostream>
    using namespace std;

    //////////////< Variables >//////////////

    char choice; // for choosing from menu
    fstream *fs; // file stream for 'Class_List' file
    string file_str; // string as 'Class_List' file


    /////////////< Main >/////////////

    int main()
    {
    fs = new fstream( "Class_List.txt", ios::in );

    if ( fs->bad() )
    {
    cout << "\n Can't open or create 'Class_List' file" << endl;
    system ( "pause" );
    return 1;
    }

    (*fs) >> file_str; // store whole of the file in 'file_str'

    fs->close();
    delete fs;
    fs=0;

    while (1)
    {
    do // menu
    {
    system( "cls" ); // clear screen

    cout << "\n < Class List > \n\n";
    cout << "(1) Add a new student \n";
    cout << "(2) Modify an existing student's information\n";
    cout << "(3) Delete an existing student \n";
    cout << "(4) Display students' informations \n";
    cout << "(5) Exit \n\n";
    cout << " Enter a choice (1-5) : " << flush;
    choice = getch();

    } while ( choice < '1' || choice > '5');

    system( "cls" );

    switch ( choice )
    {
    int del_num; // number of characters for deletion
    int pos; // a position in the string
    int rows; // on Displaying, for each 25 rows in the screen there is a pause


    case '1' : // Add Student
    {

    string input; // ID of student
    cout << "\n\t\t < Entering a new student > ";
    cout << "\n Enter the following informations for the new student : ";

    cout << "\n\n ID : ";
    cin >> input;

    file_str += input + '>'; // '>' -> delimiting students' informations

    cout << "\n Name (Only one word) : "; // can be more than one word
    cin >> input;

    file_str += input + '>';

    cout << "\n Student was added." << endl;
    system ( "pause" );

    break;
    }

    case '2' : // Modify Student
    {

    string input;
    cout << "\n Enter Student ID, that you want modify its informatin : ";
    cin >> input;

    pos = file_str.find(input);

    if (pos == string::npos)
    {
    cout << "\n Your specified student doesn't exist in the list" << endl;
    system ( "pause" );
    break;
    }

    cout << "\nEnter new informations for this student : ";

    cout << "\n\n ID : ";
    cin >> input;

    del_num = file_str.find('>', pos+1)-pos; // ID : first character of ID to first '>'

    file_str.replace (pos, del_num, input); // replace the current ID with the new one


    cout << "\n Name (Only one word) : ";
    cin >> input;

    pos = file_str.find('>', pos+1) + 1; // first character of Name
    del_num = file_str.find('>', pos+1)-pos; // Name : first character after first '>' to second '>'

    file_str.replace (pos, del_num, input); // replace the current Name with the new one

    cout << "\n Record was modified." << endl;
    system ( "pause" );

    break;
    }


    case '3' : // Delete Record
    {
    string input;
    cout << "\n Enter student ID, for deletion : ";
    cin >> input;

    pos = file_str.find(input);

    if (pos == string::npos)
    {
    cout << "\n Your specified student doesn't exist in the list" << endl;
    system ( "pause" );
    break;
    }

    file_str.erase ( file_str.begin()+pos, file_str.begin()+file_str.find('>', file_str.find('>', pos+1)+1)+1 );

    cout << "\n Student was deleted." << endl;

    system ( "pause" );

    break;
    }

    case '4' : // Display Students' Informations
    {
    cout << "ID\t\tName\n"
    << "-----------------------------------\n";

    rows = 3; // 2 rows for header, and 1 for pause message at end


    pos = 0;
    string substr; // substring for Displaying students' informations

    while (pos != file_str.length())
    {

    substr = file_str.substr( pos, file_str.find('>', pos+1)-pos );

    pos = file_str.find('>', pos+1) + 1;

    cout << substr;

    substr = file_str.substr( pos, file_str.find('>', pos+1)-pos );

    pos = file_str.find('>', pos+1) + 1;

    cout << "\t\t" << substr << endl;

    if (++rows == 25)
    {
    rows = 3;
    system ( "pause" );
    system ( "cls" );
    cout << "ID\t\tName\n"
    << "-----------------------------------\n";
    }
    }

    cout << "End of the list." << endl;
    system ( "pause" );

    break;
    }
    case '5' : // Exit
    {
    cout << "\n Updating 'Class_List' file..." << flush;

    fs = new fstream( "temp.txt", ios::out );

    if (fs->fail())
    {
    cout << "\n Can't create 'temp' file, then 'Class_List' file won't be updated." << endl;
    system ( "pause" );

    system( "cls" );
    return 1;
    }

    (*fs) << file_str;

    fs->close();
    delete fs;
    fs=0;

    struct stat st; // to check that the file exists
    int res = stat( "Class_List.txt", &st );
    if ( res == 0 ) // if file exists
    if( remove( "Class_List.txt" ) == -1 )
    {
    cout << "\nCan't delete 'Class_List' file, then Updating is incomplete." << endl;
    system ( "pause" );

    system( "cls" );
    return 1;
    }

    if ( rename( "temp.txt", "Class_List.txt" ) != 0 )
    {
    cout << "\nCan't rename 'temp' file, then Updating is incomplete." << endl;
    system( "pause" );

    system( "cls" );
    return 1;
    }

    cout << "\n Updating completed. \n" << endl;

    system ( "pause" );
    system ( "cls" );

    return 0;

    break;
    }
    }
    }
    }

    // End of File



    ممنون.

  9. #9
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: وظیفه این کد

    ببین دوست من اصلا اونجوری که من فکر می کردم نبود این برنامه به این صورت عمل می کنه که کل فایل رو یک رشته در نظر می گیره و برای اینکه بتونه فیلد های ورودی رو تشخیص بده از کارکتر

    '>'
    استفاده می کنه و اصلا خودشو در گیر کار با فایل نمی کنه و کل فایل رو در یک رشته می ریزه و از توابع کار با رشته استفاده می کنه و تغییرات رو اعمال می کنه و در آخر کار رشته رو در فایل ذخیره می کنه او pos موقعیت زیررشته را پیدا می کنه و با تابع replace رشته ها اونو عوض می کنه مثلا اگه رشته رو شما خودتون در مرحله 1 چاپ کنید متوجه موضوع می شید.
    توابع کار با رشته ها رو در لینک زیر ببینید
    http://www.cplusplus.com/reference/s...tring/replace/

  10. #10

    نقل قول: وظیفه این کد

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    ببین دوست من اصلا اونجوری که من فکر می کردم نبود این برنامه به این صورت عمل می کنه که کل فایل رو یک رشته در نظر می گیره و برای اینکه بتونه فیلد های ورودی رو تشخیص بده از کارکتر

    '>'
    استفاده می کنه و اصلا خودشو در گیر کار با فایل نمی کنه و کل فایل رو در یک رشته می ریزه و از توابع کار با رشته استفاده می کنه و تغییرات رو اعمال می کنه و در آخر کار رشته رو در فایل ذخیره می کنه او pos موقعیت زیررشته را پیدا می کنه و با تابع replace رشته ها اونو عوض می کنه مثلا اگه رشته رو شما خودتون در مرحله 1 چاپ کنید متوجه موضوع می شید.
    توابع کار با رشته ها رو در لینک زیر ببینید
    http://www.cplusplus.com/reference/s...tring/replace/
    ممنون. منظور من طرز کار del_num = file_str.find('>', pos+1)-pos بود که فکر کنم فهمیدم چطوریه. اما ممنون میشم شما هم توضیح بدید. (منظورم طرز محاسبه ی طول زیر رشته ای که باید حذف بشه ست)
    به نظر من طرز کار اینطوره که موقعیت علامت < رو با اندیس pos+1 پیدا میکنه و اونو از pos کم میکنه تا طول زیر رشته بدست بیاد.

  11. #11
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: وظیفه این کد

    نقل قول نوشته شده توسط pershianix مشاهده تاپیک
    ممنون. منظور من طرز کار del_num = file_str.find('>', pos+1)-pos بود که فکر کنم فهمیدم چطوریه. اما ممنون میشم شما هم توضیح بدید. (منظورم طرز محاسبه ی طول زیر رشته ای که باید حذف بشه ست)
    به نظر من طرز کار اینطوره که موقعیت علامت < رو با اندیس pos+1 پیدا میکنه و اونو از pos کم میکنه تا طول زیر رشته بدست بیاد.
    ببنید هر شماره یا نام دانشجو بین دو تا کارکتر < قرار می گیره حالا برای اینکه ما بخواهیم یک شماره یا نام را حذف کنیم یا تغییر بدیم باید از مکان و طول این زیر رشته آگاه باشیم . برای اینکار ابتدا شماره دانشجو را می گیریم و به دنبال اولین مکان رخ دادنش می گردیم و اونو در pos ذخیره می کنیم برای اینکه طول رشته ایی که باید حذف بشه یا تغییر کنه را بدست بیاریم از مکان رخ دادن کارکتر < را بعد از pos+1 بدست می آوریم و از pos که کمش کنیم طول این فیلد بدست می آیدکه این کار بوسیله خط

    del_num = file_str.find('>', pos+1)-pos;
    انجام می شود حالا موقعیت اولیه زیر رشته را داریم با طولش پس می تونیم عوضش کنیم که با دستور

    file_str.replace (pos, del_num, input);
    کار انجام می گیره.....

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •