C++파일 로 학생 정보 관리 시스템 구현

C++파일 을 실현 하여 학생 정보 관리 시스템 을 실현 합 니 다.참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
기능 은 다음 과 같 습 니 다.
학생 정보 추가(학생 추가 완료 시 파일 에 직접 저장)
성적 정보(c 언어,대학 영어,고등 수학)
개인 정보(성명,성별,학 번,연령)
학생 정보 보이 기
학생 정보 조회
학 번 별로 조회 하 다.
이름 으로 조회
학 번 에 따라 학생 정 보 를 삭제 하 다.
학생 정보 수정
학 번 에 따라 학생 들 을 정렬 하 다
클래스 의 디자인:
성적 을 나타 내 는 Score 클래스:

class Score{

public:
 float cLauage;//c    
 float math;//    
 float english;//    
};
학생 류

class Student{
public :
 char num[10];//  
 int age;//  
 char name[20];//   
 char sex[5];//  
 Score sc;
};
교사 류

class Teacher{
public:
 Student stu[N]; //N 50
 void seek();//  
 void modify();//    
 void insert();//      
 void del();//    
 void display();//      
 void sorts();//     
 void help();//    
 void menu();//  
 void refresh();//  
};
주요 기능 의 실현
학생 정보 삽입
주요 사상:한 Student 대상 이 입력 한 학생 정 보 를 이 대상 에 저장 하고 입력 이 완료 되면 이 대상 을 파일 에 기록 합 니 다.코드 는 다음 과 같 습 니 다.

//      
void Teacher::insert(){

 int j=n;
 int m;//        
 cout<<"          :"<<endl;
 cin>>m;
 do
 {
 Student stu;
 cout<<"    "<<j-n+1<<"      "<<endl;//      
 cin>>stu.num;
 cout<<"    "<<j-n+1<<"      "<<endl;
 cin>>stu.name;
 cout<<"    "<<j-n+1<<"      "<<endl;
 cin>>stu.age;
 cout<<"    "<<j-n+1<<"      "<<endl;
 cin>>stu.sex;
 cout<<"    "<<j-n+1<<"    C    "<<endl;
 cin>>stu.sc.cLauage;
 cout<<"    "<<j-n+1<<"        "<<endl;
 cin>>stu.sc.math;
 cout<<"    "<<j-n+1<<"        "<<endl;
 cin>>stu.sc.english; 
 j++;
 fstream file("student.txt", ios::out | ios::binary | ios::app);
 file.write((char *)&stu, sizeof(Student));//          
 file.close();
 }while(j<n+m);
 n+=m;
 cout<<"      "<<endl;
}
학생 정보 찾기
주요 사상:모든 학생 대상 을 파일 에서 읽 어 내 고 이 대상 의 속성 값 을 입력 정보 와 비교 하 며 같 으 면 해당 학생 대상 을 찾 습 니 다.그렇지 않 으 면 이 학생 은 존재 하지 않 는 다.코드 는 다음 과 같 습 니 다:
학 번 대로 찾다

cout<<"            "<<endl;
  cin>>str;
  fstream file("student.txt", ios::binary | ios::in);//    
  while(!file.eof())
  {
  Student stu;
  file.read((char *)&stu, sizeof(Student));
  if(strcmp(stu.num,str)==0) //                     
  {
   flag=1;
   cout<<"                C                "<<endl;  
   cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
   break;
  }
  }
  if(flag!=1)
  cout<<"      "<<endl; 
  file.close();
이름 으로 찾기(학생 대상 의 name 만 가 져 와 비교)

cout<<"            "<<endl;
  cin>>str;
  fstream file("student.txt", ios::binary | ios::in);
  while(!file.eof())
  {
  Student stu;
  file.read((char *)&stu, sizeof(Student));
  if(strcmp(stu.name,str)==0)//                     
  {
   flag=1;
   cout<<"                C                "<<endl;  
   cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
   break;
  }
  }
  if(flag!=1)
  cout<<"      "<<endl; 
  file.close();
학생 정보 보이 기
주요 사상:학생 정 보 를 파일 에서 읽 어 표시 합 니 다.코드 는 다음 과 같 습 니 다:

void Teacher::display(){
 int flag;
 int t=0;
 fstream file("student.txt", ios::binary | ios::in);
 cout<<"                C                "<<endl;  
 while(!file.eof())
 {
 Student stu;
 file.read((char *)&stu, sizeof(Student));//           
 flag=1;  
 cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
 }
 if(flag!=1)
 cout<<"    "<<endl; 
 file.close();

}
학생 정보 수정
주요 사상:수정 해 야 할 학생 을 학 번 에 따라 파일 에서 꺼 내 이 대상 에 게 새로운 값 을 설정 하고 마지막 으로 파일 을 기록 합 니 다.코드 는 다음 과 같 습 니 다:

void Teacher::modify(){
 int item,age,score;//     ,    
 Student stu;
 int flag;
 char str[20];//       
 cout<<"            "<<endl;
 cin>>str;
 fstream file("student.txt", ios::binary | ios::in);//             
 while(!file.eof())
 {
 file.read((char *)&stu, sizeof(Student));//    
 if(strcmp(stu.num,str)==0)//          
 {
  flag=1;
  cout<<"                C                "<<endl;  
  cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
  break;
 }
 }
 if(flag!=1)//            
 cout<<"      "<<endl; 
 file.close();
 printf("------------------
"); printf("1.
"); printf("2.
"); printf("3.
"); printf("4. C
"); printf("5.
"); printf("6.
"); printf("7.
"); printf("------------------
"); while(1) { printf(" :"); scanf("%d",&item); switch(item) { case 1: printf(" :
"); cin>>str; strcpy(stu.name,str); break;// case 2: printf(" :
"); cin>>age; stu.age=age;break;// case 3: printf(" :
"); cin>>str; strcpy(stu.sex,str); break;// case 4: printf(" C :
"); cin>>score; stu.sc.cLauage=score; break;// case 5: printf(" :
"); cin>>score; stu.sc.math=score; break; case 6: printf(" :
"); cin>>score; stu.sc.english=score; break; case 7:{ fstream file("student.txt", ios::out | ios::binary | ios::app); cout<<" "<<endl; file.write((char *)&stu, sizeof(Student));// file.close(); return; } default:printf(" 1-7
"); } } }
학생 정보 삭제
주요 사상:모든 학생 대상 을 파일 에서 읽 고 학생 을 삭제 해 야 하 는 대상 을 포함 하지 않 고 vector 용기 에 저장 합 니 다.마지막 으로 이 vector 용 기 를 옮 겨 다 니 며 모든 대상 을 파일 에 저장 합 니 다.코드 는 다음 과 같 습 니 다:

void Teacher::del(){
 vector<Student> va;
 Student stu;//             
 int flag;
 char str[20];
 cout<<"            "<<endl;
 cin>>str;
 fstream file("student.txt", ios::binary | ios::in);//             
 while(!file.eof())
 {
 file.read((char *)&stu, sizeof(Student));//    
 if(strcmp(stu.num,str)==0)//          
 {
  flag=1;
  continue;
 }
 va.push_back(stu);//           
 }
 fstream file1("student.txt", ios::out | ios::trunc);
 for (int i=0;i<va.size();i++)
 {
 file1.write((char *)&va[i], sizeof(Student));//             
 }
 cout<<"    "<<endl;
 file.close();//    
 file1.close();
}
정렬 기능
주요 사상:모든 대상 정 보 를 파일 에서 읽 어 vector 용기 에 저장 하고 sort()방법 으로 사용자 정의 정렬 을 결합 하여 학생 들 이 학 번 에 따라 정렬 하고 최종 적 으로 정렬 번호 의 옮 겨 다 니 며 파일 에 기록 합 니 다.코드 는 다음 과 같 습 니 다:

static bool myCompare(const Student& a1,const Student& a2)//     

{
 return strcmp(a1.num,a2.num)<=0;//         
}


void Teacher::sorts(){
 vector<Student> va;
 Student stu;
 fstream file("student.txt", ios::binary | ios::in);//             
 while(!file.eof())
 {
 file.read((char *)&stu, sizeof(Student));//    
 va.push_back(stu);//         
 }
 va.pop_back();
 sort(va.begin(),va.end(),myCompare);//  sort    
 fstream file1("student.txt", ios::out | ios::trunc);
 for (int i=0;i<va.size();i++)
 {
 file1.write((char *)&va[i], sizeof(Student));//         
 }
 file.close();//    
 file1.close();
}
새로 고침 기능
주요 사상:학생 정보 정렬 및 출력

//  
void Teacher::refresh(){
 Teacher t;
 t.sorts();
 t.display(); 
}
문제:파일 에서 정 보 를 읽 을 때 사용 하 는 eof()방법 으로 마지막 까지 읽 을 지 여 부 를 판단 할 때 프로그램 은 한 번 더 읽 습 니 다.EOF)는 해결 할 수 있다.
캡 처 실행
추가(이전 테스트 에 데이터 가 저장 되 었 습 니 다)

조회 하 다.

삭제

새로 고침

수정 하 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기