실험 5 - 찾기 와 정렬 의 응용
3237 단어 데이터 구조
[문제 설명]
학생 정보 관리 시스템
[기본 요구]
학생 정보 관리 시스템 을 설계 하려 면 학생 대상 은 적어도 학 번, 성명, 성별, 성적 1, 성적 2, 총 성적 등 정 보 를 포함해 야 한다.다음 기능 을 실현 하도록 요구 합 니 다.
1. 저장 방식 을 선택 하 십시오. 배열, 링크 또는 파일 방식 을 기반 으로 합 니 다.
2. 총 성적 은 자동 으로 계산 해 야 한다.
3. 조회: 각각 학생 의 학 번, 이름 을 정 하고 학생 의 기본 정 보 를 찾 을 수 있 습 니 다 (적어도 두 가지 검색 알고리즘 으로 실현 해 야 합 니 다).
정렬: 각각 학생 의 학 번, 총 성적 에 따라 정렬 합 니 다 (최소 두 가지 정렬 알고리즘 으로 구현 해 야 합 니 다).
[테스트 데이터]
학생 들 이 소프트웨어 공학 의 테스트 기술 에 근거 하여 스스로 확정 하 다.
주요 사상
구조 체 를 만 들 고 파일 에서 데 이 터 를 구조 체 로 읽 습 니 다.중복 호출 에 대비 하여 두 개의 함 수 를 설정 합 니 다.학 번 에 대해 거품 을 일 으 키 는 순 서 를 사용한다. 즉, 서로 인접 한 두 개의 수 를 순서대로 비교 하고 소 수 를 앞 에 놓 으 며 대 수 를 뒤에 놓 고 전체 성적 에 대해 쌓 기 순 서 를 사용한다. 먼저 쌓 기 를 한 다음 에 쌓 기 순 서 를 조정 하고 마지막 에 쌓 기 순 서 를 한다.이름 으로 찾 을 때 순서대로 찾 고 학 번 으로 찾 을 때 반 으로 찾 습 니 다. 주의해 야 할 것 은 반 으로 학 번 을 찾 을 때 학 번 이 질서 가 있어 야 한 다 는 것 입 니 다.
코드 구현
#include//
#include
#include
#include
using namespace std;
typedef struct{
char num[4];
char name[10];
char sex[4];
int score1;
int score2;
int sum;
}StuType;//
typedef struct{
StuType S[15];
int stunum;
}Student;//
void menu(){//
cout<0)&&(flag==1)){//flag 0, ,
flag=0;
for(j=1;j0)
{
flag=1;
t=Stu.S[j];//
Stu.S[j]=Stu.S[j+1];
Stu.S[j+1]=t;
}
--m;
}
}
void HeapAdjust(Student &Stu,int s,int m){//
StuType rc=Stu.S[s];
for(int j=2*s;j<=m;j*=2){// key
if(j=Stu.S[j].sum)break;//rc s
Stu.S[s]=Stu.S[j];
s=j;
}
Stu.S[s]=rc;//
}
void CreatHeap(Student &Stu){//
int n=Stu.stunum;//
for(int i=n/2;i>0;--i)
HeapAdjust(Stu,i,n);
}
void SumSort(Student &Stu){//
CreatHeap(Stu);
StuType t;
for(int i=Stu.stunum;i>1;--i){
t=Stu.S[1];//
Stu.S[1]=Stu.S[i];
Stu.S[i]=t;
HeapAdjust(Stu,1,i-1);
}
Allprint(Stu);
}
void NameSearch(Student &Stu){//
cout<>key;
int nn,i;
strcpy(Stu.S[0].name,key);//
for(i=Stu.stunum;;--i)//
if(strcmp(Stu.S[i].name,Stu.S[0].name)==0)
{
nn=i;
break;
}
nn=i;
if(i==0)
{
cout<>key;
int nn=0;
int low,high,mid;
low=1;//
high=Stu.stunum;
while(low<=high)
{
mid=(high+low)/2;
if(strcmp(key,Stu.S[mid].num)==0)//
{
nn=mid;
break;
}
else if(strcmp(key,Stu.S[mid].num)<0)//
high=mid-1;
else//
low=mid+1;
}
cout<>m;
switch(m){
case 1:
NumSearch(Stu);
break;
case 2:
NameSearch(Stu);
break;
case 3:
NumSort(Stu);
Allprint(Stu);
break;
case 4:
SumSort(Stu);
break;
case 5:
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.