How to fix an "expected primary-expression" error - c++

I'm working on a project in our programming class which requires me to make an inventory system. There is an error in the code in line 243 that gives weird errors when I compile it.
Line 243 beneath in the code is
while(inventory>>rec.prodtype>>rec.menutype>>rec.prodnum
#include<iostream>
#include<windows.h>
#include<string>
#include<fstream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
COORD CursorPosition;
void gotoXY(int x, int y);
void add();
void view();
void menu();
void types();
void input();
void stock();
void find_name();
void find_number();
void find_type();
void find_mtype();
void all();
void output();
struct inventory{
string prodtype,menutype;
string prodnum,prodname;
int quantity;
float prodprice;
}rec;
int main()
{
int x=1,y=1; //for gotoXY
char l; //choice to determine add/view
system("cls");
cout<<"\n\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\t\t\t\t INVENTORY SYSTEM\n";
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\n\t\t ---- [1] Add new product ----"
<<"\n\t\t ---- [2] Add stocks to existing products ----"
<<"\n\t\t ---- [3] View Products ----"
<<"\n\t\t ---- [4] Exit Program ----"
<<"\n\n\t\t\t\t Enter choice : ";
back:
l=getch();
if(l=='1')
add();
else if(l=='2')
stock();
else if(l=='3')
view();
else if(l=='4')
return 0;
else
goto back;
}
void stock_intro()
{
cout<<"\n\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\t\t\t\t ADDING OF STOCKS\n";
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n\n";
}
void stock()
{
string num; //for inputting prodnum...
int x; //for adding stocks
string prodtype,menutype;
string prodnum,prodname;
int quantity;
float prodprice;
ifstream inventory("inventory.txt");
system("cls");
stock_intro();
cout<<"\t\t\t Enter Product Number to add stock:\n\n";
cout<<"\t\t\t ";
cin>>num;
while(inventory>>prodtype>>menutype
>>prodnum>>prodname>>quantity
>>prodprice){
system("cls");
cout<<"How many stocks would you like to add?: ";
cin>>x;
rec.quantity=rec.quantity+x;
}
}
void types()
{
ofstream inventory("inventory.txt", ios::app);
char c;
cout<<"\n\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\t\t\t\tFOOD AND BEVERAGES\n";
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n";
cout<<"\t\t\t\t [A] SNACKS\n\t\t\t\t [B] CANDIES\n\t\t\t\t [C] BISCUITS\n\t\t\t\t [D] CHOCOLATES\n\t\t\t\t [E] CANNED GOODS\n\t\t\t\t [F] CONDIMENTS\n\t\t\t\t [G] INSTANT NOODLES\n\t\t\t\t [H] BEVERAGE / DRINKS\n";
cout<<"\n\t\t\t\t Enter Choice: ";
back:
c=getch();
c=toupper(c);
if(c=='A')
rec.menutype="SNACKS";
else if(c=='B')
rec.menutype="CANDIES";
else if(c=='C')
rec.menutype="BISCUITS";
else if(c=='D')
rec.menutype="CHOCOLATES";
else if(c=='E')
rec.menutype="CANNED GOODS";
else if(c=='F')
rec.menutype="CONDIMENTS";
else if(c=='G')
rec.menutype="INSTANT NOODLES";
else if(c=='H')
rec.menutype="BEVERAGE / DRINKS";
else
goto back;
inventory<<rec.menutype;
}
void input()
{
system("cls");
cout<<"\n\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\t\t\t\tADDING OF PRODUCTS\n";
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n\n";
ofstream inventory("inventory.txt", ios::app);
cout<<"\t\t\tEnter Product number: ";
cin>>rec.prodnum;
cout<<"\t\t\tEnter Product name: ";
cin>>rec.prodname;
cout<<"\t\t\tEnter Product price: ";
cin>>rec.prodprice;
cout<<"\t\t\tEnter Quantity: ";
cin>>rec.quantity;
inventory<<endl
<<rec.prodnum<<endl
<<rec.prodname<<endl
<<rec.prodprice<<endl
<<rec.quantity<<endl<<endl;
}
void add()
{
char c,d; //for choosing food or hygene
char e; //for choosing if add another of not
back2:
system("cls");
cout<<"\n\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\t\t\t\t ADD PRODUCTS\n";
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
ofstream inventory ("inventory.txt", ios::app);
cout<<"\n\n\t\t\t\t[A] FOOD and BEVERAGES\n\t\t\t\t[B] HYGIENE";
cout<<"\n\n\t\t\t\tEnter Choice: ";
back1:
c=getch();
d=toupper(c);
if(d=='A')
rec.prodtype="Food & Beverages";
else if(d=='B')
rec.prodtype="Hygiene";
else
goto back1;
system("cls");
inventory<<rec.prodtype<<endl;
types();
input();
cout<<"\n\t\t\tEnter another product? [Y / N]: ";
back3:
e=getch();
e=toupper(e);
if(e=='Y')
goto back2;
else if(e=='N')
main();
else
goto back3;
}
void output()
{
cout<<"Product Type: "
<<rec.prodtype<<endl;
cout<<"Menu Type : "
<<rec.menutype<<endl;
cout<<" Product Number: "
<<rec.prodnum<<endl;
cout<<" Product Name: "
<<rec.prodname<<endl;
cout<<" Product Price: "
<<rec.prodprice<<endl;
cout<<" Stocks Available: "
<<rec.quantity<<endl;
}
void view_intro()
{
system("cls");
cout<<"\n\nÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
cout<<"\t\t\t\tVIEWING OF INVENTORY\n";
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n";
}
void view()
{
char ch;
system("cls");
view_intro();
cout<<"\n\t\t ---- [1] Find by Product Name ----"
<<"\n\t\t ---- [2] Find by Product Number ----"
<<"\n\t\t ---- [3] Find by Product Type ----"
<<"\n\t\t ---- [4] Find by Menu Type ----"
<<"\n\t\t ---- [5] Display all Records ----"
<<"\n\n\t\t\t\t Enter choice : ";
back:
ch=getch();
ch=getch();
switch(ch)
{
case '1': find_name();break;
case '2': find_number();break;
case '3': find_type();break;
case '4': find_mtype();break;
case '5': all();break;
default: goto back;
}
}
void find_name()
{
string name;
int v=0;
system("cls");
view_intro();
ifstream student("record.txt");
cout<<"\n Enter Product Name [incorrect capitalization is invalid]: ";
cin>>name;
system("cls");
view_intro();
while(inventory>>rec.prodtype>>rec.menutype>>rec.prodnum
>>rec.prodname>>rec.prodprice>>rec.quantity)
{
back:
while(name==rec.prodname)
{
output();
break;
}
v++;
if(v<1)
{
goto back;
}
}
system("pause");
main();
}
void gotoXY(int x, int y)
{
CursorPosition.X = x;
CursorPosition.Y = y;
SetConsoleCursorPosition(console,CursorPosition);
}

In find_name() function:
while(inventory>>rec.prodtype>>rec.menutype>>rec.prodnum
>>rec.prodname>>rec.prodprice>>rec.quantity)
You dont declare what inventory is in this function. Did you mean to open a file in a variable called inventory like you did in the other functions?
The reason the compiler is giving weird errors is you declared a type called inventory and so not seeing a local variable called inventory it assumes you're using the type which makes no sense in the context of the above line and the compiler gets confused and gives a fairly obscure error.

Related

How do I display my string?

I want to know why I can't print record[i][1] using
puts (record[i][1]);
If I do:
cout<< record[i][1];
Then only the first letter of the string appears, not the rest.
This is for a school project.
I code on Turbo C++ (TC4).
#include< fstream.h>
#include< strstream.h>
#include< conio.h>
#include< dos.h>
#include< graphics.h>
#include< string.h>
#include< stdio.h>
#include< stdlib.h>
#include< string.h>
#include< ctype.h>
#include< iomanip.h>
#include< iostream.h>
char record[500][5]; //array to store 500 entries each consisting of
//name,cell no, agesex, crime and sentenced.
int cricode=1;
char name[35];
char criminalno[10];
char agesex[5];
char sentenced[3];
char crime[20];
char passwordU[30];
int checkpass(char[]);
void menu(int);
void advmenu(int);
void inputdata();
void report(int) ;
void searchrecN(char [][5], int);
void searchrecC(char [][5], int);
void selectcrime(char []);
void changepass();
void displaydata(int);
void main()
{
clrscr();
ifstream fp;
fp.open("criminal.txt");
do
{char a;
fp.getline(&record[cricode][1],30,'!') ; //name
fp.getline(&record[cricode][2],10,'#'); //cellno
fp.getline(&record[cricode][3],7,'%'); //agesex
fp.getline(&record[cricode][4],20,'^'); //crime
fp.getline(&record[cricode][5],3,'\n'); //sentenced
cricode++ ;
}while (fp.eof() == 0);
cricode--; //final value of cricode
fp.close();
menu(cricode);
getch();
}
void menu(int code)
{
fstream fp;
int hell;
clrscr();
cout<<"\n\n";
cout<<"______________________________________\n";
cout<<" L O C A L M E N U \n";
cout<<"______________________________________\n";
cout<<"\n\n";
cout<<"\t\t\t"<<"\n\n[1] Create a Record.";
cout<<"\t\t\t"<<"\n\n[2] Search for a record.";
cout<<"\t\t\t"<<"\n\n[3] Advance Options.";
cout<<"\t\t\t"<<"\n\n[4] Display all entries.";
cout<<"\t\t\t"<<"\n\n[5] Exit \n :";
cin>>hell;
switch(hell)
{
case 1: clrscr();
inputdata();
system("pause");
menu(code);
break;
case 2: clrscr();
char na[30];
int ch;
clrscr();
cout<<"\t\t\t"<<"\nSearch by -> ";
cout<<"\t\t\t\t"<<"\n[1] Name : ";
cout<<"\t\t\t\t"<<"\n[2] Cell No. : ";
cin>>ch;
switch(ch)
{
case 1:
cout<<"\n Please Enter Name : ";
//gets(na);
searchrecN(record,code);
break;
case 2:
cout<<"\n Please Enter Cell No. : ";
//gets(na);
searchrecC(record,code);
break;
default : cout<<"invalid";
}
menu(code);
break;
case 4: clrscr();
for(int i=0;i<code;i++)
{
cout<<"\nName \t Cellno \t age/sex \t crime \t sentenced \n";
cout<<record[i][1]; //only one character is displayed of the
// entire word.
// if i do
//puts(record[i][1]); // Error: cannot convert 'int' to 'const char *'
}
cout<<"\n";
system("pause");
menu(code);
break;
case 5: //clrscr();
//intro();
break;
default:
cout<<"\a";
}
}
int i;
void report(int cc)
{
cout <<record[cc][1]<<"\t"
<<record[cc][2]<<"\t"
<<record[cc][3]<<"\t"
<<record[cc][4]<<"\t"
<<record[cc][5]<<"\n";
}
void inputdata()
{
char ch;
char recname[30],reccell[10],recagex[7],recrime[20],recsent[3];
ofstream fp;
fp.open("criminal.txt", ios::app);
do
{
cout<<"\n[.] Name : ";
gets(recname);
cout<<"\n[.] Criminal Number : ";
gets(reccell);
cout<<"\n[.] Age/Sex {eg: 21/M} : ";
gets(recagex);
cout<<"\n[.] Select Crime : ";
selectcrime(recrime);
cout<<"\n[.] Sentenced For : ";
gets(recsent);
fp <<recname
<<"!"<<reccell
<<"#"<<recagex
<<"%"<<recrime
<<"^"<<recsent
<<"\n";
cout<<"Do you Want to Continue(Y/N): ";
cin>>ch;
}while((ch=='y')||(ch=='Y'));
system("pause");
}
void searchrecN(char record[][5], int cricode)
{
int cnt;
char search[30];
cout<<"Enter Cellno.: ";
gets(search);
for(i=0;i<cricode;i++)
{
if (strcmpi(search,&record[i][1])==0)
{
clrscr();
cout<<"\nRecord Found.";
cout<<"\nLoading Info......";
system("pause");
report(i);
cnt=1;
break;
}
}
if(cnt==0)
{
clrscr();
cout<<"\n ***Record does not exist*** ";
cout<<"\n ***Redirecting***\n";
system("pause");
}
}
void searchrecC(char record[][5], int cricode)
{
int cnt;
char search[10];
cout<<"Enter Cellno.: ";
gets(search);
for(i=0;i<cricode;i++)
{
if (strcmpi(search,&record[i][2])==0)
{
clrscr();
cout<<"\nRecord Found.";
cout<<"\nLoading Info......";
system("pause");
report(i);
cnt=1;
break;
}
}
if(cnt==0)
{
clrscr();
cout<<"\n ***Record does not exist*** ";
cout<<"\n ***Redirecting***\n";
system("pause");
}
}
void displaydata(int c)
{
clrscr();
fstream fp;
for(i=0;i<c;i++)
{
cout<<"Name\tCellno\tage/sex\tcrime\tsentenced";
cout <<record[i][1]<<"\t"<<record[i][2]<<"\t"
<<record[i][3]<<"\t"<<record[i][4]<<"\t"
<<record[i][5]<<"\n";
}
/* cout<<setw(100)<<"\n[.] Criminal No. : ";
puts(record[i][2]);
cout<<setw(100)<<"\n[.] Age/Sex : ";
puts(record[i][3]);
cout<<setw(100)<<"\n[.] Alleged for : : ";
// puts(obj[i].category);
cout<<setw(100)<<"\n[.] Crime : ";
puts(record[i][4]);
// cout<<setw(100)<<"\n[.] Expenses per month : ";
puts(record[i][4]);
/* cout<<setw(100)<<"\n[.] Expenses per Month : ";
cout<<exp;
cout<<setw(100)<<"\n[.] Sentenced for : ";
puts(record[i][5]); */
}
Your record array is an array of 500 rows of 5 single characters, not 5 strings.
I recommend you model your data with a structure:
struct Record
{
char name[35];
char criminalno[10];
char agesex[5];
char sentenced[3];
char crime[20];
char passwordU[30];
};
Your database can then be 500 records:
Record database[500];
FYI, safer and less troublesome techniques are to use std::string and std::vector.

How use array and add multiple enties in C++

My teacher wanted me to make a program based on An Employee which includes -
His Name
His Id
His Sallary
and we needed to make this using - Structures & Functions & Array as we are not that good in C++ so we just make simple programs . the code of the program i made is below , [ http://pastebin.com/9UFFJseN ]
#include<iostream.h>
#include<conio.h>
#include<dos.h>
#include<process.h>
#include<stdio.h>
struct employee
{
char empname[40];
int empid,empsalary;
}; employee e1;
void add_record(void);
void display_record(void);
void search_record(void);
void welcome();
void exito();
void main()
{
clrscr();
int choice,id;
cout<<"Welcome to Employee Info Menu by Rohit Jalan \n\n\n";
cout<<"1 -> Add Record\n";
cout<<"2 -> Display Record\n";
cout<<"3 -> Search Record\n";
cout<<"4 -> Exit";
cout<<"\n\t\t --> ";
cin>>choice;
switch(choice)
{
case 1: add_record();break;
case 2: display_record();break;
case 3: search_record();break;
case 4: exito();
}
getch();
}
void add_record()
{
clrscr();
cout<<"You have pressed 1\n\n\n";
cout<<"Please enter employee name : ";
gets(e1.empname);
cout<<"Please enter the employee id : ";
cin>>e1.empid;
cout<<"Please enter the employee salary : ";
cin>>e1.empsalary;
cout<<" \n \n \n \n";
main();
}
void display_record()
{clrscr();
cout<<"\nEmployee Name is : ";
puts(e1.empname);
cout<<"\nEmployee ID is : ";
cout<<e1.empid;
cout<<"\nEmployee salary is : ";
cout<<e1.empsalary;
getch();
main();
}
void search_record()
{int id;
clrscr();
cout<<"Please enter the id of the employee\n: ";
cin>>id;
if(id==e1.empid)
{
display_record();
}
else cout<<"\nRecord not found...";
getch();
main();
}
void exito()
{clrscr();
cout<<"\n\n\n\n\t\t\t Thank you. ";
cout<<"\n\n\n\n\n\n\t\t\t Program by \n\n\n";
cout<<"\t\t\t";
delay(500);cout<<"ROHIT";
delay(500);cout<<" JALAN";
cout<<"\n\t\t\t";
delay(500);cout<<"Roll No";
delay(500);cout<<" 11436";
cout<<"\n\t\t\t";
delay(500);cout<<"Class";
delay(500);cout<<" XI-D";
delay(500);cout<<"....";
delay(100);
exit(0);
}
And now my teacher is asking me what if she wishes to enter more then 1 record of data and display more then 1 , or you can say she wants to decide that how much she wants to enter and display , as i am unable to solve her problem i request you all guys to help me in a simple and easy manner as i`m newbie out here . Please don't delay in answer i have a practical examination on 27th Feb 2015 . if you are unable to see my coding -
http://pastebin.com/9UFFJseN#
Thanks In Advance .
In order to perform actions more than once, you need a loop.
unsigned int Display_Menu(void)
{
unsigned int selection = 0;
while (selection != 4)
{
static const char menu_text[] =
"\n"
"Welcome to Employee Info Menu by Rohit Jalan \n\n\n"
"1 -> Add Record\n"
"2 -> Display Record\n"
"3 -> Search Record\n"
"4 -> Exit\n"
"\t\t --> ";
cout.write(menu_text, sizeof(menu_text) - 1);
cin >> selection;
if ((selection >= 1) && (selection <= 4))
{
break;
}
cout << "\nInvalid selection, try again.\n";
}
return selection;
}
The above function displays a menu and if the User enters an invalid choice, it will print the menu again. After a valid choice is received, the function returns to the caller.
This is an example of doing something more than once.
So if your instructor wants to perform more than one action, how would you do it?
Edit 1:
In general a Menu consists of two pieces: 1) Displaying the selections and 2) Processing the choices. The above code handles the displaying of the selections.
// Forward declarations
void Add_Record(void);
void Display_Record(void);
void Search_Record(void);
void Process_Choices(void)
{
unsigned int choice = 0;
do
{
choice = Display_Menu();
switch (choice)
{
case 1: Add_Record(); break;
case 2: Display_Record(); break;
case 3: Search_Record(); break;
}
} while (choice != 4);
}
The above function displays the menu, calls functions according to the User's selection and repeats. It ends when the User enters the number 4.
Again, notice the loop construct that is used for performing actions more than once.

Program on cricket scoreboard

Why is the following code not giving results and how to get results?
Whenever I run the code, it first asks for the names of the players of two teams playing the match, then it shows the menu from which if we select any one of the option it again asks for the batsman name which is not according to the program designed. My research on the code and the problem is that I think buffer memory is full but I don't know how to free it, any help would be beneficial. Thank you
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;
class scorecard{
char batname[11][20];
int runscored[11];
char situation[11][10];
char mode[11][15];
char bowlername[11][20];
float oversplayed[11];
int maiden[11];
int runsgiven[11];
int wicketstaken[11];
public:
void updatebatsman(void);
void updatebowler(void);
void displaybat(void);
void displaybowl(void);
void menu(void);
scorecard()
{for(int n=0;n<12;n++)
{
runscored[n]={0};
oversplayed[n]={0};
maiden[n]={0};
runsgiven[n]={0};
wicketstaken[n]={0};
}
}
};
int main()
{
int jb=0;
scorecard s1;
int kb;
s1.menu();
do
{
cout<< "Enter the option"<<endl;
cout<<"(1) Display batting score"<<endl<<"(2) Display Bowling score"<<endl<<"(3) Update batting score"<<endl;
cout<<"(4) Update Bowling score"<<endl;
cin >>kb;
switch(kb)
{
case 1 : s1.displaybat();
break;
case 2 :s1.displaybowl();break;
case 3:s1.updatebatsman();break;
case 4:s1.updatebowler();break;
default:cout<<"Wrong choice";
}
}while (jb<1);
}
void scorecard::updatebowler(void)
{char bowlname[20];
int str,k,option,overnumbers,maidenumb,uprun,upwicket;
cout<<"Enter Bowler name:";
cin.getline(bowlname,20);
for( k=0;k<11;k++)
{str= strcmp(bowlername[k],bowlname);
if (str== 0)
{
cout<<"Menu for Bowler information update "<<endl;
cout<<"(1) Update Number of overs"<<endl<<"(2) Update maiden overs"<<endl<<"(3) Update runs given"<<endl;
cout<<"(4) Update wickets taken"<<endl;
cin >> option;
switch(option)
{
case 1:{cout<<"Enter Numbers of overs to be updated:";
cin >>overnumbers;
cout<<endl;
oversplayed[k]+=overnumbers;
break;
}
case 2:{cout <<"Enter the number of maiden overs to be updated:";
cin>>maidenumb;
cout<<endl;
maiden[k]+=maidenumb;
break;
}
case 3:{cout <<"Enter the number of runs to be added:";
cin>>uprun;
cout<<endl;
runsgiven[k]+=uprun;
break;
}
case 4: {cout<<"Enter number of wickets to be updated:";
cin >>upwicket;
cout<<endl;
wicketstaken[k]+=upwicket;
}
default:cout<<"wroung choice";
}
break;
}
}
if (str!=0)
cout <<"You entered wrong player."<<endl;
}
void scorecard::updatebatsman(void)
{char batsmaname[20];
int str,k;
cout<<"Enter Batsman name:";
cin.getline(batsmaname,20);
for( k=0;k<11;k++)
{str= strcmp(batname[k],batsmaname);
if (str== 0)
{
cout<<"enter runs scored:";
cin>>runscored[k];
cout<<endl<<"enter weather out or not out:";
cin>>situation[k];
cout<<endl<<"enter mode(if batsman out) by which batsman was out:";
cin>>mode[k];
break;
}
}
if (str!=0)
cout <<"You entered wrong player."<<endl;
}
void scorecard::displaybat(void)
{
cout << "Batsman name"<<'t'<<"Runs scored"<<'t'<<"situation"<<'t'<<"mode"<<endl;
for(int j=0;j++;j<12)
{
cout<<batname[j]<<'t'<<runscored[j]<<'t'<<situation[j]<<'t'<<mode[j]<<endl;
}
}
void scorecard::displaybowl(void)
{
cout << "Bowler name"<<'t'<<"overs played"<<'t'<<"maiden overs"<<'t'<<"wicket taken"<<'t'<<"Runs given"<<endl;
cout<<endl;
for(int j=0;j++;j<12)
{
cout<<bowlername[j]<<'t'<<oversplayed[j]<<'t'<<maiden[j]<<'t'<<wicketstaken[j]<<'t'<<runsgiven[j]<<endl;
}
}
void scorecard::menu(void)
{
cout<<"Enter the name of players of batting team"<<endl;
for (int k=0;k<11;k++)
{
cout <<"Enter name of player "<<k+1<<":";
cin>>batname[k];
}
cout <<"Enter the name of players of bowling team"<<endl;
for (int n=0;n<11;n++)
{
cout <<"Enter name of player "<<n+1<<":";
cin>>bowlername[n];
}
}
This is very wrong:
for(int j=0;j++;j<12)
It should be:
for(int j=0; j < 11; j++)
You are also missing a break in your case 4 statement for the options:
case 4: {cout<<"Enter number of wickets to be updated:";
cin >>upwicket;
cout<<endl;
wicketstaken[k]+=upwicket;
break;
}
default:cout<<"wroung choice";
Without the break you will see also the output wrong choice when the user selects option 4.

How to Return a structure

How Can I return all the structures when i choose 7.Logout after i insert a record from the Admin menu, and if i return to the admin menu, i'll see the record again.
For Example
User:Admin
Pass:Admin
then i choose 2.Insert Product after that Ill go choose 1.display , after that i 7.log out. now i want to login again as Admin but i want to see all the data again.please help this is our thesis project.
#include <iostream>
#include <string>
#include <iomanip>
#include <conio.h>
using namespace std;
struct product{
string pname,pid;
int qnty;
double price;
product *ptr;
};
//Function Declaration
void Menu(string username);
void InsertProduct();
void DeleteProduct();
void DisplayProduct();
void SearchProduct();
void PurchaseProduct();
//
product *head;
int main() //Account Login
{
int pw=0,n;
char pwc=' ';
string username,password;
cout<<"\n ==============================================================================="<<endl<<endl;
cout<<"\t\t\t LICA'S GROCERY STORE"<<endl<<endl;
cout<<" ==============================================================================="<<endl<<endl;
cout<<"\t\t\t Username: ";
getline(cin, username);
cout<<"\n\t\t\t Password: ";
do
{
pwc=getch();
if(pwc==13||pwc==' ')
{
break;
}
cout<<"*";
password+=pwc;
pw++;
}
while(pwc!=13||pwc!=' ');
n=username.length();
for(int a=0; a!=n; a++)
{
if(isupper(username.at(a)))
{
username.at(a) = tolower(username.at(a));
}
}
if(username=="admin" && password=="Admin")
{
system("CLS");
cout<<"\n ==============================================================================="<<endl<<endl;
cout<<"\t\t\t\t WELCOME ADMIN!"<<endl<<endl;
cout<<" ==============================================================================="<<endl<<endl;
Menu(username);
return main();
}
else if(username=="cashier" && password=="Cashier")
{
system("CLS");
cout<<"\n ==============================================================================="<<endl<<endl;
cout<<"\t\t\t\t WELCOME CASHIER!"<<endl<<endl;
cout<<" ==============================================================================="<<endl<<endl;
Menu(username);
}
else
{
system("CLS");
cout
<<"\n\t\t Invalid Username or Password. Please Try Again"<<endl;
return main();
}
system("pause");
return 0;
}
//
//
//
//
//
void Menu(string username)
{
head=NULL;
int menu;
if(username=="admin")
{
do
{
cout
<<"\t MENU: "
<<"\n\n\t\t\t A. FILE MAINTENANCE" <<endl
<<"\n\t\t\t\t 1. Display All Products"<<endl
<<"\t\t\t\t 2. Insert New Product"<<endl
<<"\t\t\t\t 3. Delete A Product" <<endl
<<"\t\t\t\t 4. Search A Product"<<endl
<<"\n\t\t\t B. SALES MODULE"<<endl
<<"\n\t\t\t\t 5. Cashier"<<endl
<<"\t\t\t\t 6. Print Receipt."<<endl
<<"\n\t\t\t C. EXIT"<<endl
<<"\n\t\t\t\t 7. Log Out"<<endl;
cout<<"\n\t Choose an option (1 to 7 only): ";
cin>>menu;
cin.ignore();
switch(menu)
{
case 1:
cout<<"\n ============================================================================="<<endl<<endl;
cout<<"\t\t\t DISPLAY ALL PRODUCTS"<<endl<<endl;
cout<<" ============================================================================="<<endl<<endl;
DisplayProduct();
system("pause");
system("CLS");
break;
case 2:
cout<<"\n ============================================================================="<<endl<<endl;
cout<<"\t\t\t INSERT NEW PRODUCT"<<endl;
cout<<" ============================================================================="<<endl<<endl;
InsertProduct();
break;
case 3:
cout<<"\n ============================================================================="<<endl<<endl;
cout<<"\t\t\t DELETE A PRODUCT"<<endl;
cout<<" ============================================================================="<<endl<<endl;
DeleteProduct();
break;
case 4:
cout<<"\n ============================================================================="<<endl<<endl;
cout<<"\t\t\t SEARCH A PRODUCT" <<endl;
cout<<" ============================================================================="<<endl<<endl;
SearchProduct();
break;
case 5:
cout<<"\n ============================================================================="<<endl<<endl;
cout<<"\t\t\t PURCHASE PRODUCTS"<<endl;
cout<<" ============================================================================="<<endl<<endl;
PurchaseProduct();
case 7:
cout<<"\n\n THANK YOU ADMIN!"<<endl<<endl;
break;
default:
cout<<"\n\n INVALID INPUT!"<<endl<<endl;
}
}while(menu!=7);
}
else
{
cout
<<"Choose an Option"
<<"\n1.Sales Module"
<<"\n2.Exit"<<endl;
cin>>menu;
switch(menu)
{
case 1:
cout<<"Sales Module";
break;
case 2:
cout<<"Exit!";
break;
default:
cout<<"Invalid Input!";
}
}
}
void InsertProduct()
{
product *newproduct;
newproduct=new product;
cout<<"\n\n\tEnter Product Name:";getline(cin,newproduct->pname);
cout<<"\n\tEnter Product Quantity:";cin>>newproduct->qnty;
cout<<"\n\tEnter Product ID:";cin>>newproduct->pid;
cout<<"\n\tEnter Product Price:";cin>>newproduct->price;
cin.ignore();
newproduct->ptr=NULL;
if(head==NULL)
head=newproduct;
else
{
product *lastproduct;
lastproduct=head;
while(lastproduct->ptr!=NULL)
lastproduct=lastproduct->ptr;
lastproduct->ptr=newproduct;
}
cout<<"\n\tProduct is inserted"<<endl;
system("pause");
system("CLS");
}
void DeleteProduct()
{
DisplayProduct();
product *current,*previous;
current=head;
int x;
if (current==NULL)
{
cout<<"\n\t\tNo Products Found.";
}
else
{
cout<<"\n\t\tEnter Product No. to delete:";
cin>>x;
int i=1;
if(x==1)
{
head=current->ptr;
delete current;
cout<<"\n\t\tProduct is deleted";
DisplayProduct();
}
else
{
while(i<x&&current!=NULL)
{
previous=current;
current=current->ptr;
i=i++;
}
if(current==NULL)
{
cout<<"\n\t\tProduct does not Exist";
}
else
{
previous->ptr=current->ptr;
delete current;
cout<<"\n\t\tProduct is deleted";
DisplayProduct();
}
}
}
system("pause");
system("CLS");
}
void DisplayProduct()
{
product *current;
current=head;
int i=1;
cout<<setiosflags(ios::left);
while(current!=NULL)
{
cout<<"\n\t\t"<<setw(4)<<i;
cout<<setw(25)<<current->pname<<setw(3)<<current->qnty <<setw(3)<<current->pid <<setw(3)<<current->price;
current=current->ptr;
i++;
}
}
void SearchProduct()
{
string sid;//Name to search
product *current;
current=head;
if (current==NULL)
cout<<"\n\t\tNo Products Found";
else
{
cout<<"\n\t\tEnter product to search: ";
cin>>sid;
int i=1;
while(sid.compare(current->pid))
{
current=current->ptr;
if (current==NULL)
break;
i++;
}
if(current!=NULL)
cout<<"\n\t\t"<<current->pid<<" is Product No."<<i;
else
cout<<"\n\t\t"<<sid<<" is not in the list.";
DisplayProduct();
cout<<endl;
}
system("pause");
system ("CLS");
}
void PurchaseProduct()
{
}
Your data is in memory until you save it to hardk disk, so you need to implement some mechanism for doing that.
You can choose among several options such as using data bases, plain files(XML, YAML, JSON, etc ...) and object searialization wich I think it's your best option right now. There are several libraries out there for doing that, but for start I recommend you use this tutorial. Then move to A practical guide to C++ serialization.
I recommend serialization because I realized you are just starting with C++. And others options like data bases and formated files(xml, Yaml, etc...) require more complex code.
Have fun!!! After you read all this stuff and (try to put it in practice), if you still can't solve your problem, come back here, and we will happy to help you.

C++ saving records to file

i've been thinking how to do this "save to file" thing all night, but it seems that luck wasnt on my side.. .
I am new to this, and i want to get learned, thats all.
I am from Bulgaria, and for those who wonder what is "edinen", this is your citizen number as a member of that country. (I still dont know how to explain this...)
Here is what I've got
(I've already included the "fstream", but i still dont know how to use it!
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;
#define n 30
int num=0;
struct uslugi
{
char name[30];
char surname[30];
char lastname[30];
char illness[30];
long int edinen;
}grupa[n];
void add_record();
void show_record();
void search_record();
void remove_record();
void add_record() // FUNCTION - ADD RECORD(S)
{
system("title Add Record");
int br;
cout<<"\n How many pacients do you want to enter?";
cout<<"\n >> ";
cin>>br;
for(int i=num;i<num+br;i++)
{
cout<<"\n \t\t ENTERING DATA FOR PACIENT NUMBER - "<<i+1<<endl;
cout<<"\n Name:";
cout<<"\n >> ";
cin>>grupa[i].Name;
cout<<"\n Surname:";
cout<<"\n >> ";
cin>>grupa[i].surname;
cout<<"\n Lastname:";
cout<<"\n >> ";
cin>>grupa[i].lastname;
cout<<"\n edinen:";
cout<<"\n >> ";
cin>>grupa[i].edinen;
cout<<"\n Ill from:";
cout<<"\n >> ";
cin>>grupa[i].illness;
}
num=num+br;
}
void show_record() // FUNCTION - SHOW RECORD(S)
{
if (num==0)
{
cout<<"\t\t by far there are no pacient at all \n";
}
cout<<"\n \t\t\t list with all pacients"<<num<<endl;
for(int i=0;i<num;i++)
{
cout<<"\n Name:";
cout<<"\n >> "<<grupa[i].name;
cout<<"\n Surname:";
cout<<"\n >> "<<grupa[i].surname;
cout<<"\n Lastname:";
cout<<"\n >> "<<grupa[i].lastname;
cout<<"\n edinen:";
cout<<"\n >> "<<grupa[i].edinen;
cout<<"\n Ill from:";
cout<<"\n >> "<<grupa[i].illness;
cout<<"\n\n";
}
}
void remove_record() // FUNCTION - DELETE RECORD(S)
{
int k,index;
for(int i=0;i<num;i++)
{
cout<<"\n("<<i+1<<") "<<endl;
cout<<"Pacient name: "<<grupa[i].name<<endl;
cout<<"Surname: "<<grupa[i].surname<<endl;
cout<<"Lastname: "<<grupa[i].lastname<<endl;
cout<<"edinen: "<<grupa[i].edinen<<endl;
cout<<"Ill from: "<<grupa[i].illness<<endl<<endl;
}
cout<<"Who do you want to delete? \n >> ";
cin>>index;
for(k=0;k<num;k++)
{
if(k>=index)
{
grupa[k].edinen=grupa[k+1].edinen;
}
if(k==num-1)
break;
else
cout<<"BY FAR THERE IS NO DATA HERE"<<endl;
}
num--;
for (i=0;i<num;i++)
{
cout<<"Pacient name: "<<grupa[i].name<<endl;
cout<<"Surname: "<<grupa[i].surname<<endl;
cout<<"Lastname: "<<grupa[i].lastname<<endl;
cout<<"edinen: "<<grupa[i].edinen<<endl;
cout<<"Ill from: "<<grupa[i].illness<<endl<<endl;
}
}
void print_count() // FUNCTION - PRINTING
{
cout<<"\n \t\t\t NUMBER OF PACIENTS - "<<num<<endl;
cout<<""<<endl;
}
void search_record() // FUNCTION - SEARCHING
{
int flag=0;
long int tempegn;
cout<<"\n Type the edinen for the pacient you search: ";
cout<<"\n >> ";
cin>>tempegn;
for (int i=0;i<n;i++)
if(tempegn==grupa[i].edinen)
{
cout<<"Pacient name: "<<grupa[i].name<<endl;
cout<<"Surname: "<<grupa[i].surname<<endl;
cout<<"Lastname: "<<grupa[i].lastname<<endl;
cout<<"edinen: "<<grupa[i].edinen<<endl;
cout<<"Ill from: "<<grupa[i].illness<<endl<<endl;
flag++;
}
if (!flag)
{
cout<<"\n\t PACIENT WITH THAT NAME DOESNT EXCIST \n\n";
}
}
void main() // MAIN FUNCTION (MENU)
{
int choice;
do
{
cout<<"\n\t\t******************* Menu *******************"<<endl;
cout<<"\t\t* *";
cout<<"\n\t\t* 1.Add new pacient *";
cout<<"\n\t\t* 2.Search for a pacient by edinen *";
cout<<"\n\t\t* 3.Delete pacient *";
cout<<"\n\t\t* 4.List with all pacients *";
cout<<"\n\t\t* 5.Exit *";
cout<<"\n\t\t* *\n";
cout<<"\t\t************************************************"<<endl;
cout<<"\n Type your choice! ";
cout<<"\n >> ";
cin>>choice;
switch(choice)
{
case 1:{print_count();add_record();break;}
case 2:{print_count();search_record();break;}
case 3:{print_count();remove_record();break;}
case 4:{print_count();show_record();}
}
}
while(choice!=5);
}
I would suggest you read a book, or at least some documentation about this. Also, to understand how this kind of input works, it is required knowledge of oop concepts. As far as I noticed you do not have such a knowledge, I would suggest you stick for a while with procedural i/o functions from C, like fprintf. A google search will show many resources about them and they are pretty easy to understand, at least compared with those from C++, like the ones you are using.
To answer to your question, I will try to explain how to achive what you want. Note that this is a very simplified explanation and not 100% accurate.
Firstly, you need to open the file and create a i/o stream, using ifstream for input files or ofstrsam for output files:
ifstream f("input_filename");
ofstream g("output_filename);
After you created f and/or g (they are not both requied. Also, f and g are just random names) you can use them in the same way you use cin and cout, in this case, as f is for input, it should be used like cin.