컴퓨터 지식 네트워크 - 컴퓨터 문답 - 학생 기숙사 관리 시스템 데이터 구조 설계 및 구현

학생 기숙사 관리 시스템 데이터 구조 설계 및 구현

기숙사 관리는 재미가 없고 번거로울 뿐이고, 일반적으로 많은 옵션과 오류가 있는 대화형 플랫폼이 필요합니다. 제가 쓴 내용은 트러블슈팅 기능이 별로 없고 그냥 귀찮아서 ifs 몇개만 더하면 짜증나고 헷갈려서 재미가 없을 것 같아서 자세히 쓰지는 않았습니다. 하지만 대충 여러 개 썼다. 쿼리 역시 학생번호로만 쿼리를 작성하며, 절반 검색을 사용합니다. 정렬에는 시간 소모가 상대적으로 적기 때문에 퀵 정렬이 사용됩니다. 음, 이는 이전 정렬 합성에 포함되어 있으므로 이를 작성하기 위해 퀵 정렬을 사용합니다. 복사하고 변경하기만 하면 됩니다. 구조., 완료! 하하, 프로그램은 다음과 같습니다: 헤더 파일에서: struct Student

{

char name[10];

int num;

int dormin;

};cpp file://dormitorymanagement.cpp: 콘솔 애플리케이션의 진입점을 정의합니다.

//

///////////////////////////////// //////////////////////////////////////

/* 8. 기숙사 관리 쿼리 소프트웨어(**)

과제: 기숙사 관리자를 위한 기숙사 관리 쿼리 소프트웨어를 작성합니다. 프로그래밍 요구 사항:

(1) 대화형 작업 방법을 사용합니다.

(2) 정보 추가, 삭제, 수정 가능

(3) 데이터 파일을 생성하고, 데이터 파일을 키워드(이름, 학번, 호실번호)별로 정렬 가능(선택, 퀵 정렬, 힙 정렬 등) 중 하나를 선택하세요.

(4) 쿼리: a. 이름으로 쿼리 b. 학번으로 쿼리

(5) 쿼리 결과를 인쇄합니다. (연속적으로 작업 가능)

*/

///////////////////// ///////// //////////////////////////////////////// /

#include " stdafx.h"

#include

#include

#include

네임스페이스 std 사용;

#define 최대 10

int _tmain(int argc, _TCHAR* argv[])

{void input(student *,int); void display(student *,int);void add(student *,int &,int);
void qsort(student *,int,int);void del(student *,char *,int &);변경 무효(student *,char *,int );
검색 무효(student *,int,int,int);

int stunum,choose;< br>ifstream infile("stunum.txt") ;
if(!infile) cout<<"정보가 파일에 생성되지 않았습니다!"<else infile>>stunum;
infile.close();

문자 이름[10];
cout<<"************************ ******************* ******************"<cout<cout<<" 학생 기숙사 관리 시스템에 오신 것을 환영합니다! ! "<cout<cout<<"***************************** *** *************************"<while(1){
cout<<"1. 학생 기숙사 정보 입력"<cout<<

;"2. 입력된 정보를 표시합니다"<cout<<"3. 정보 수정"<cout<<"4. 정보 조회"<cout< <"5. 정보 정렬"<cout<<"6. 시스템 종료"<cout<<"수행할 작업을 입력하세요:";
cin> >choose ;
student *S;S=신규 학생[max];
전환(선택){
사례 1:{cout<<"데이터를 입력하면 원본 데이터가 손실됩니다. 정말로 이 작업을 수행하시겠습니까? (y /n)"<bool yn=0;char temp;
cin>>temp;
if(temp=='y') yn= 1;
if(yn) {cout<<"학생 수를 입력하세요:";
cin>>stunum;
input(S,stunum);
ofstream outfile("stunum. txt");
outfile<outfile.close();break;}}

case 2:display(S,stunum);break;

사례 3:

{int cchoose;cout<<"1. 정보 수정"< cout<<"2. 정보 추가"< cin>>cchoose;
스위치(cchoose)
{case 1:{cout<< "정보를 수정하실 분의 이름을 입력해주세요"<>name;change(S,name,stunum);break;}

사례 2:{int ad;cout< <"추가할 인원수를 입력하세요:";cin>>ad;add(S ,stunum,ad);break;}

사례 3:{cout<<"이름을 입력하세요. 정보를 삭제한 사람"<>name;del(S,name,stunum);break ;}

break;}break;}

사례 4 :{cout<<"학생 번호를 입력하세요:";
int cchoose;cin>>cchoose;search( S,0,stunum,cchoose);
break;}

case 5:{ifstream infile("stuinfor.txt",ios::in);
for(in

t i=0;i 파일>>S[i].name>>S[i].num>>S[i].dormin;
qsort(S,0,stunum- 1);
ofstream outfile("sorted_infor.txt");
for(int i=0;i cout<

outfile.close();infile.close();break;}

case 6:cout<<" 감사합니다. using! "<

}

ofstream outfile("stunum.txt");

outfile< p>

outfile.close();

return 0;

}

void input(student *stu,int all)

{ofstream outfile("stuinfor.txt");
for(int i=0;i{cout<<"숫자를 입력하세요 "< cin>>stu[i].name>>stu[i].num>>stu[i].dormin;
outfile< }

outfile.close( );

}

void display(student *stu,int all)

{

ifstream infile("stuinfor.txt" ,ios::in );

if(!infile) cerr<<"파일 열기에 실패했습니다!"<

else{

for( int i=0; i

{cout<<"입력한 "< infile>>stu [ i].name>>stu[i].num>>stu[i].dormin;
cout<

n<}

infile.close();}

}

void add(student *stu,int &all,int add )

{

ofstream outfile("stuinfor.txt",ios::app);

for(int i=0;i

{

cout<<""<

cin>>stu[all+i].name>>stu[all+i].num>>stu[all+i].dormin;

outfile<

}

all+ =add;

outfile.close();

}

//빠른 정렬

int partition(student *a ,int low,int high)

{

student tem;int piv=a[low].num;

while(high>low)

p>

{

while(high>low&&a[high].num>=piv) high--;

tem=a[high];a[high]= a[ 낮음];a[낮음]=tem;

while(높음>낮음&&a[낮음].num<=piv) 낮음++;

tem=a[높음];a [높음 ]=a[낮음];a[낮음]=tem;

}

낮음 반환;

}

void qsort( 학생 *a,int low,int high)

{intivoloc;
if(low{
ivoloc=partition(a,low,high);
qsort(a,low,pivotloc-1);
qsort(a,pivotloc+1,high);
}

}

void del( Student * stu,char *name,int &num)

{int delper;char check;
ifstream infile("stuinfor.txt");
for(int i=0;i< num; i++)
{
파일>>stu[i].name>>stu[i].num>>stu[i].dormin;
if(strcmp(name,stu[i] .name )==0) delper=i;}

cout

<<"삭제하려는 정보는 다음과 같습니다."<

cout<

cout<<"삭제하시겠습니까? (y/n)"<

cin> >check;

ofstream outfile("stuinfor.txt");

if(check=='y'||'Y')

{

for(int i=delper;i

num--;

for (int i=0 ;i

cout<<"정보가 삭제되었습니다!"<

infile.close();

outfile.close();

}

변경 무효(student *stu,char *name,int num)

{int 변경;char check,nam[10];
int cn,cd;
ifstream infile("stuinfor.txt");
for(int i=0;i {
infile>>stu[i].name> >stu[i].num >>stu[i].dormin;
if(strcmp(name,stu[i].name)==0) 변경=i;
}

cout<<"수정된 정보는 다음과 같습니다: "<

cout<

cout<<"수정하시겠습니까?(y/n)"<

cin>>check;

ofstream outfile("stuinfor.txt");

if(check=='y'||'Y')

{

cout<<" 이름, 학번, 기숙사 번호를 순서대로 입력해주세요."<

cin>>nam>>cn>>cd;

strcpy(stu[change].name,nam); stu[change].num=cn;stu[change].dormin=cd;<

/p>

for(int i=0;i

outfile<

cout<<"정보가 수정되었습니다. "<

infile.close();< /p >

outfile.close();}void search(student *stu,int low,int high,int check)

{int mid=(low+high)/2;
ifstream infile("sorted_infor.txt");
if(!infile) cerr<<"파일 열기 실패!"<else
{for(int i=0;i>stu[i].name>>stu[i].num>>stu[i].dormin;
while(stu[mid].num!=check&&high>=low) {mid= (low +high)/2;if(stu[mid].num>check) high=mid-1;
else low=mid+1;}//반값으로 검색

}

if(stu[mid].num==check)

{cout<<"조회하려는 정보는 다음과 같습니다."<cout<

else cout<<"정보 당신이 찾고 있는 것을 찾을 수 없습니다! "<

}

上篇: 일반인에게 주식 투기는 패가의 왕인가? 모두들 어떻게 생각하느냐, 모두 한번 토론하자? 下篇: Acer 474 1g 노트북 메모리 스틱은 어디에 있습니까?
관련 내용