vasilopita
جمعه 20 اسفند 1389, 21:27 عصر
سلام. دو تا سوال مبتدی دارم در حد تیم ملی . لطفا اول این کد رو چک کنید :
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include<windows.h>
using namespace std;
struct student
{
char name[15];
int ID,barom;
float averege;
}stu1;
void get_info();
void search();
void edit(int);
void main()
{
char chr;
while(1)
{
cout<<"*********************** MENU *************************\n\n\a";
cout<<"1:new Information \n2:Search & Edit Informatin \n3:exit\n\n";
cin>>chr;
switch(chr)
{
case('1'):
get_info();
break;
case('2'):
search();
break;
case('3'):
exit(0);
break;
}
}
}
void get_info()
{
int counter=0;
cout<<"Please Enetr The Below Information...\a\n";
ofstream out("student.dat");
if(!out)
{
cout<<"Can Not Open File .... \a\a\a\a\n";
exit(0);
}
while(1)
{
cout<<"\n**************** Student:"<<counter+1<<" *****************\n";
cout<<"\nName: ";
cin.get(stu1.name,16);
if(!stu1.name[0]) //in bakhsh baraye check kardan charachtere enter e
break;
cout<<"\nID: ";
cin>>stu1.ID;
cout<<"\nAverege: ";
cin>>stu1.averege;
cout<<"\nBarom: ";
cin>>stu1.barom;
cin.get();
out.write((char *)&stu1,sizeof(struct student));
counter++;
}
out.close();
cout<<"\nALL Students ARE: "<<counter<<"\n\n";
}
void search()
{
bool flag=0;
//cout<<"\npress a key to continue ...\n";
//_getch();
int sid=0;
cout<<"\n\nPlease Enter an ID to Search....\a\n";
//cin.get();
cin>>sid;
ifstream in("student.dat");
while(in.read((char *)&stu1,sizeof(struct student)))
{
if(stu1.ID==sid)
{
flag=1;
cout<<"\n\nStudent Found ...\n\n";
edit(sid);
break;
}
}
if(flag==0)
{
cout<<"\n\aStudent NOT Found...\n";
}
}
void edit(int sid)
{
ifstream in("student.dat");
ofstream out("temp.dat");
while(in.read((char*)&stu1,sizeof(class student)))
{
if(stu1.ID==sid)
{
cout<<"\nPlease Enter the below informations to edit ...\n\n";
cout<<"Name: \n";
cin>>stu1.name;
cout<<"ID: \n";
cin>>stu1.ID;
cout<<"Averege: \n";
cin>>stu1.averege;
cout<<"barom: \n";
cin>>stu1.barom;
}
out.write((char*)&stu1,sizeof(class student));
}
out.close();
remove("student.dat");
rename("temp.dat","student.dat");
}
نمی دونم مشکلش با تابع cin.get() چیه ؟ و اینکه چرا از این روش برای تشخیص کاراکتر اینتر استفاده شده.؟ و سوال بعد اینکه غیر از این راه ، راه دیگه ای وجود داره که بشه باش فهمید کارکتر وارد شده اینتر بوده؟
به حرفه ای بودن خود ما را ببخشید ... :لبخندساده:
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include<windows.h>
using namespace std;
struct student
{
char name[15];
int ID,barom;
float averege;
}stu1;
void get_info();
void search();
void edit(int);
void main()
{
char chr;
while(1)
{
cout<<"*********************** MENU *************************\n\n\a";
cout<<"1:new Information \n2:Search & Edit Informatin \n3:exit\n\n";
cin>>chr;
switch(chr)
{
case('1'):
get_info();
break;
case('2'):
search();
break;
case('3'):
exit(0);
break;
}
}
}
void get_info()
{
int counter=0;
cout<<"Please Enetr The Below Information...\a\n";
ofstream out("student.dat");
if(!out)
{
cout<<"Can Not Open File .... \a\a\a\a\n";
exit(0);
}
while(1)
{
cout<<"\n**************** Student:"<<counter+1<<" *****************\n";
cout<<"\nName: ";
cin.get(stu1.name,16);
if(!stu1.name[0]) //in bakhsh baraye check kardan charachtere enter e
break;
cout<<"\nID: ";
cin>>stu1.ID;
cout<<"\nAverege: ";
cin>>stu1.averege;
cout<<"\nBarom: ";
cin>>stu1.barom;
cin.get();
out.write((char *)&stu1,sizeof(struct student));
counter++;
}
out.close();
cout<<"\nALL Students ARE: "<<counter<<"\n\n";
}
void search()
{
bool flag=0;
//cout<<"\npress a key to continue ...\n";
//_getch();
int sid=0;
cout<<"\n\nPlease Enter an ID to Search....\a\n";
//cin.get();
cin>>sid;
ifstream in("student.dat");
while(in.read((char *)&stu1,sizeof(struct student)))
{
if(stu1.ID==sid)
{
flag=1;
cout<<"\n\nStudent Found ...\n\n";
edit(sid);
break;
}
}
if(flag==0)
{
cout<<"\n\aStudent NOT Found...\n";
}
}
void edit(int sid)
{
ifstream in("student.dat");
ofstream out("temp.dat");
while(in.read((char*)&stu1,sizeof(class student)))
{
if(stu1.ID==sid)
{
cout<<"\nPlease Enter the below informations to edit ...\n\n";
cout<<"Name: \n";
cin>>stu1.name;
cout<<"ID: \n";
cin>>stu1.ID;
cout<<"Averege: \n";
cin>>stu1.averege;
cout<<"barom: \n";
cin>>stu1.barom;
}
out.write((char*)&stu1,sizeof(class student));
}
out.close();
remove("student.dat");
rename("temp.dat","student.dat");
}
نمی دونم مشکلش با تابع cin.get() چیه ؟ و اینکه چرا از این روش برای تشخیص کاراکتر اینتر استفاده شده.؟ و سوال بعد اینکه غیر از این راه ، راه دیگه ای وجود داره که بشه باش فهمید کارکتر وارد شده اینتر بوده؟
به حرفه ای بودن خود ما را ببخشید ... :لبخندساده: