Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9012649
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 16, 20262026-06-16T03:03:28+00:00 2026-06-16T03:03:28+00:00

This is a C++ program for implementing offline messaging system. First a user has

  • 0

This is a C++ program for implementing offline messaging system. First a user has to register for an account by choosing a username and password. Then they can send and receive messages to other users.

I have written the program but there appears to be some logical errors.

I write the user details into a file email upon registration. Data is written into files as objects.

Suppose I registered 3 accounts. but I can’t sign in IE. I can’t verify login and pass control to signin();

To troubleshoot the error I have created a print() function that displays content of file email.

I have placed this just before login authenticating part to see if data records are present

However records are not being displayed.

I can’t test other portion of the code until I solve this.

Partial code that I think is the possible cause of error:

#include<fstream.h>
#include<conio.h>
#include<string.h>
#include<process.h>
#include<stdio.h>

int user;           // to keep a track of no. of users

class mail
{
public:
    char un[25];             // user name
    char pd[25];             // passsword
    int ino;                 // no. of inbox messages
    int sno;                 //no.of sent messags
    char isbj[25][25];
    char ssbj[25][25];
    char imsg[25][50];
    char smsg[25][50];       // character array to store inbox and sent messages respecvly
    void reg();             // func to sign up
    void signin();
    mail()
    {
    }
    ~mail()
    {
    }
};

void print();
void print()                     // for testing purpose. retrieving data in the file
{
    mail o;
    cout<<"\nRunning print func();";

    ifstream filein;
    filein.open("email",ios::in|ios::binary);
    if(!filein)
    {
        cout<<"Unable to open file to read\n";
    }
    else
    {
        filein.seekg(0);
        filein.read((char *)&o,sizeof(o));
        while(filein)
        {
            puts(o.un);
            puts(o.pd);
            cout<<o.ino<<"  "<<o.sno;
            filein.read((char *)&o,sizeof(o));
        }
        getch();
    }
}


void mail::reg()                      // sign up function
{
    clrscr();
    cout<<"Enter user name ( enter unique name )\n";
    gets(un);
    cout<<"Enter password\n";
    gets(pd);
    ofstream filout;
    filout.open("email",ios::app|ios::binary);
    if(!filout)
    {
        cout<<"cannot open file\n";
    }
    else
    {
        ino=-1;
        sno=-1;                  // initialising no. of sent and inbox msgs as 0 on regtrn

        filout.write((char *)&this,sizeof(this));
        filout.close();
    }
    cout<<"You are now registered. Plz login\n";
    getch();

}        // end of sign up or register func



void mail::signin()
{
    .
        .
        .
} // end of signin




void screen(void);
void signup(void);


void main()
{
    clrscr();
    char usrnm[25],pwd[25],s[25],c;
    int i;
m:
    clrscr();
    screen();
    gotoxy(30,4);
    c=getch();
    if(c=='i'||c=='I')               //if user opts to sign in
    {
        gotoxy(62,11);
        gets(usrnm);
        gotoxy(62,13);
        for(i=0;i< 25;i++)                   // getting password
        {
            if( i < 0)
                i=0;
            pwd[i]=getch();
            if(pwd[i]=='\b')
            {
                i-=2;
                cout<<"\b \b";
                continue;
            }

            if(pwd[i]=='\r')
                break;
            cout<<"*";
        }
        pwd[i]='\0';
        clrscr();              // pwd now contains password for sign in

        print();

        int f;
        {                       // local block

            mail obj;
            ifstream filein;
            filein.open("email",ios::in|ios::binary);    // to read records from file and authenticating the user
            if(!filein)
            {
                cout<<"Unable to open file to read\n";
            }
            else
            {
                filein.seekg(0);
                filein.read((char *)&obj,sizeof(obj));
                while(filein)
                {
                    if(strcmp(usrnm,obj.un)==0)
                    {
                        f=1;
                        if(strcmp(pwd,obj.pd)==0)
                        {
                            obj.signin();            // user authenticated. now transfering control
                            break;
                        }
                        else
                        {
                            cout<<"wrong password\n";
                            getch();
                            break;
                        }
                    } // end of if
                    else
                    {
                    }
                    filein.read((char *)&obj,sizeof(obj));
                }               // end of while
                filein.close();
            } // end of else

        }


        if(f==0)
            cout<<"Wrong username or password\n";
        getch();
        goto m;
    }
    else if(c=='s'||c=='S')       // user opts to sign up
    {
        signup();
        getch();
        goto m;
    }
    else if(c=='e'||c=='E')       // user choose to exit
        exit(0);
    else
    {
        clrscr();
        cout<<"you have entered a wrong key. please check and try again\n";
        getch();
        goto m;
    }

}  //end of main


void signup()                   // sign up function
{
    int t;
    clrscr();
    {
        mail obj;
        ifstream filin;
        filin.open("user.txt",ios::ate);      // a file to store the no. of currently registered user. THIS IS FOR FUTURE USE
        if(!filin)
        {
            cout<<"cannot open file\n";
        }
        else
        {
            filin.seekg(0);
            filin>>t;
        }
        filin.close();
        user=t;
        ++user;                     // incrementing no. users

        ofstream filout;
        filout.open("user.txt",ios::out);
        if(!filout)
        {
            cout<<"cannot open file\n";
        }
        else
        {
            filout.seekp(0);
            filout<<user;                 //Updating user
        }
        filin.close();
        obj.reg();

    }  // end of block

    return;

}       // end of sign up



void screen()                // function for login screen
{
    .
        .
}

Full code:

#include<fstream.h>
#include<conio.h>
#include<string.h>
#include<process.h>
#include<stdio.h>

int user;           // to keep a track of no. of users

class mail
{
public:
    char un[25];             // user name
    char pd[25];             // passsword
    int ino;                 // no. of inbox messages
    int sno;                 //no.of sent messags
    char isbj[25][25];
    char ssbj[25][25];
    char imsg[25][50];
    char smsg[25][50];       // character array to store inbox and sent messages respecvly
    void reg();             // func to sign up
    void signin();
    mail()
    {
    }
    ~mail()
    {
    }
};

void print();
void print()                     // for testing. retrieving data in the file
{
    mail o;
    cout<<"\nRunning print func();";

    ifstream filein;
    filein.open("email",ios::in|ios::binary);
    if(!filein)
    {
        cout<<"Unable to open file to read\n";
    }
    else
    {
        filein.seekg(0);
        filein.read((char *)&o,sizeof(o));
        while(filein)
        {
            puts(o.un);
            puts(o.pd);
            cout<<o.ino<<"  "<<o.sno;
            filein.read((char *)&o,sizeof(o));
        }
        getch();
    }
}


void mail::reg()                      // sign up function
{
    clrscr();
    cout<<"Enter user name ( enter unique name )\n";
    gets(un);
    cout<<"Enter password\n";
    gets(pd);
    ofstream filout;
    filout.open("email",ios::app|ios::binary);
    if(!filout)
    {
        cout<<"cannot open file\n";
    }
    else
    {
        ino=-1;
        sno=-1;                  // initialising no. of sent and inbox msgs as 0 on regtrn

        filout.write((char *)&this,sizeof(this));
        filout.close();
    }
    cout<<"You are now registered. Plz login\n";
    getch();

}        // end of sign up or register func



void mail::signin()
{
    int f,i;
    char subj[25],message[50],usrnm[25];    // temporary varibles to store subject,message and username

start:
    clrscr();
    cout<<"1.compose \n2.inbox \n3.Sent\n4.logout";
    cout<<"\nEnter ur choice\n";
    int ch;
    cin>>ch;

    switch(ch)
    {

    case 1:                                       // switch for compose message
        cout<<"enter username\n";
        gets(usrnm);
        {            // beginning of local loop
            mail temp;

            ifstream filein;
            filein.open("email",ios::in|ios::binary);
            if(!filein)
            {
                cout<<"Unable to open file to read\n";
            }
            else
            {
                filein.read((char *)&temp,sizeof(temp));
                while(filein)
                {
                    if(strcmp(usrnm,temp.un)==0)
                    {
                        cout<<" User name valid\n";
                        f=1;
                        cout<<"Enter subject\n";
                        gets(subj);
                        cout<<"Enter message\n";
                        gets(message);
                        temp.ino++;
                        strcpy(temp.isbj[temp.ino],subj);
                        strcpy(temp.imsg[temp.ino],message);  // copying message to recepient inbox

                        sno++;
                        strcpy(ssbj[sno],subj);
                        strcpy(smsg[sno],message);  // copying messages to sender sent folder

                        cout<<"Your message has been sent successfully\n";
                        break;
                    }
                    else      // to avoid if else mismatch
                    {
                    }
                    filein.read((char *)&temp,sizeof(temp));
                }               // end of while
            }
            filein.close();


            mail temp1;

            long pos;                  // below code modifies current users object
            fstream fio("email",ios::in|ios::out|ios::binary);
            pos=fio.tellg();
            fio.read((char*)&temp1,sizeof(temp1));
            while(fio)
            {
                if(strcmp(un,temp1.un)==0)
                {
                    fio.seekg(pos);
                    fio.write((char*)&this,sizeof(this));
                    break;
                }
                pos=fio.tellg();
                fio.read((char*)&temp1,sizeof(temp1));
            }   //end of while
            fio.close();

            mail temp2;               // below code modifies recipients object

            fio.open("email",ios::in|ios::out|ios::binary);
            pos=fio.tellg();
            fio.read((char*)&temp2,sizeof(temp2));
            while(fio)
            {
                if(strcmp(temp.un,temp2.un)==0)
                {
                    fio.seekg(pos);
                    fio.write((char*)&temp,sizeof(temp));
                    break;
                }
                pos=fio.tellg();
                fio.read((char*)&temp2,sizeof(temp2));
            } // end of while
            fio.close();
        } // end of block

        if(f==0)
            cout<<"invalid user. Please enter a valid user name\n";
        getch();
        break;

    case 2:
        if(ino<0)
            cout<<"There are no messages in your inbox\n";
        else
        {
            for(i=0;i<=ino;i++)
            {
                cout<<"\nMessage "<<i+1<<"\n";   // printing inbox messages
                puts(isbj[i]);
                puts(imsg[i]);
            }
        }
        getch();
        break;

    case 3:
        if(sno<0)
            cout<<"There are no sent messages\n";
        else
        {
            for(i=0;i<=sno;i++)
            {
                cout<<"\nMessage "<<i+1<<"\n";      // printing sent messages
                puts(ssbj[i]);
                puts(smsg[i]);
            }
        }
        getch();
        break;

    case 4:
        cout<<"Logout sucess\n";
        return;

    default : cout<<"wrong choice\n";

    } // end of switch

    goto start;

} // end of signin




void screen(void);
void signup(void);


void main()
{
    clrscr();
    char usrnm[25],pwd[25],s[25],c;
    int i;
m:
    clrscr();
    screen();
    gotoxy(30,4);
    c=getch();
    if(c=='i'||c=='I')               //if user opts to sign in
    {
        gotoxy(62,11);
        gets(usrnm);
        gotoxy(62,13);
        for(i=0;i< 25;i++)                   // getting password
        {
            if( i < 0)
                i=0;
            pwd[i]=getch();
            if(pwd[i]=='\b')
            {
                i-=2;
                cout<<"\b \b";
                continue;
            }

            if(pwd[i]=='\r')
                break;
            cout<<"*";
        }
        pwd[i]='\0';
        clrscr();              // pwd now contains password for sign in

        print();

        int f;
        {                       // local block

            mail obj;
            ifstream filein;
            filein.open("email",ios::in|ios::binary);    // to read records from file and authenticating the user
            if(!filein)
            {
                cout<<"Unable to open file to read\n";
            }
            else
            {
                filein.seekg(0);
                filein.read((char *)&obj,sizeof(obj));
                while(filein)
                {
                    if(strcmp(usrnm,obj.un)==0)
                    {
                        f=1;
                        if(strcmp(pwd,obj.pd)==0)
                        {
                            obj.signin();            // user authenticated. now transfering control
                            break;
                        }
                        else
                        {
                            cout<<"wrong password\n";
                            getch();
                            break;
                        }
                    } // end of if
                    else
                    {
                    }
                    filein.read((char *)&obj,sizeof(obj));
                }               // end of while
                filein.close();
            } // end of else

        }


        if(f==0)
            cout<<"Wrong username or password\n";
        getch();
        goto m;
    }
    else if(c=='s'||c=='S')       // user opts to sign up
    {
        signup();
        getch();
        goto m;
    }
    else if(c=='e'||c=='E')       // user choose to exit
        exit(0);
    else
    {
        clrscr();
        cout<<"you have entered a wrong key. please check and try again\n";
        getch();
        goto m;
    }

}  //end of main


void signup()                   // sign up function
{
    int t;
    clrscr();
    {
        mail obj;
        ifstream filin;
        filin.open("user.txt",ios::ate);      // a file to store the no. of currently registered user. THIS IS FOR FUTURE USE
        if(!filin)
        {
            cout<<"cannot open file\n";
        }
        else
        {
            filin.seekg(0);
            filin>>t;
        }
        filin.close();
        user=t;
        ++user;                     // incrementing no. users

        ofstream filout;
        filout.open("user.txt",ios::out);
        if(!filout)
        {
            cout<<"cannot open file\n";
        }
        else
        {
            filout.seekp(0);
            filout<<user;                 //Updating user
        }
        filin.close();
        obj.reg();

    }  // end of block

    return;

}       // end of sign up



void screen()                // function for login screen
{
    int i;
    for(i=0;i<80;i++)
        cout<<"*";
    cout<<" SuperMail                             New to SuperMial ? Create an Account     ";
    for(i=0;i<80;i++)
        cout<<"*";
    cout<<" Press S To Sign up                    Already have a account Press I to sign in";
    for(i=0;i<80;i++)
        cout<<"-";
    gotoxy(1,6);
    cout<<"\n\n\n\n Super mail is built on the idea that \n it can be more intuitive,efficient and \n useful and may be even fun:\n\n Lots of space\n\n Less spam";
    gotoxy(1,22);
    for(i=0;i<80;i++)
        cout<<"-";
    gotoxy(32,23);
    cout<<"PRESS E TO EXIT";
    gotoxy(1,24);
    for(i=0;i<80;i++)
        cout<<"-";
    gotoxy(50,10);
    cout<<"-------------------------------";
    gotoxy(50,11);
    cout<<"| USERNAME :                  |";
    gotoxy(50,12);
    cout<<"-------------------------------";
    gotoxy(50,13);
    cout<<"| PASSWORD :                  |";
    gotoxy(50,14);
    cout<<"-------------------------------";
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-16T03:03:29+00:00Added an answer on June 16, 2026 at 3:03 am

    I haven’t read through all the code but one problem is

    filout.write((char *)&this,sizeof(this));
    

    this is a pointer so the above code writes the address of your class instance to file. You could write out all class members using

    filout.write((char*)this,sizeof(*this));
    

    I expect this will also write out some data you don’t want/need such as address of v-table. You might be better off explicitly persisting the class members you care about instead.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am implementing a command line program which has interface like this: cmd [GLOBAL_OPTIONS]
This program I use has it's own variables to set when you run it,
When I execute my program without implementing hashcode() and toString() then it works fine.
I'm having some problems implementing an exception system in my program. I found somewhere
I'm having some trouble with implementing a breadth-first search in my program that tries
I am implementing basic socket program , but in this case i want the
so I'm implementing this chess program on C++ and I'm trying to integrate to
I'm having a bit of trouble implementing this program in Scheme, although I think
I'm having a bit of trouble implementing this program in Scheme, although I think
I'm implementing a login/authentication system for my little server-client program. I'm wondering how to

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.