학생 기숙사 관리 시스템 데이터 구조 설계 및 구현
기숙사 관리는 재미가 없고 번거로울 뿐이고, 일반적으로 많은 옵션과 오류가 있는 대화형 플랫폼이 필요합니다. 제가 쓴 내용은 트러블슈팅 기능이 별로 없고 그냥 귀찮아서 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<<"정보가 파일에 생성되지 않았습니다!"<
infile.close();
문자 이름[10];
cout<<"************************ ******************* ******************"<
cout<<"1. 학생 기숙사 정보 입력"<
;"2. 입력된 정보를 표시합니다"<
cin> >choose ;
student *S;S=신규 학생[max];
전환(선택){
사례 1:{cout<<"데이터를 입력하면 원본 데이터가 손실됩니다. 정말로 이 작업을 수행하시겠습니까? (y /n)"<
cin>>temp;
if(temp=='y') yn= 1;
if(yn) {cout<<"학생 수를 입력하세요:";
cin>>stunum;
input(S,stunum);
ofstream outfile("stunum. txt");
outfile<
case 2:display(S,stunum);break;
사례 3:
{int cchoose;cout<<"1. 정보 수정"<
스위치(cchoose)
{case 1:{cout<< "정보를 수정하실 분의 이름을 입력해주세요"<
사례 2:{int ad;cout< <"추가할 인원수를 입력하세요:";cin>>ad;add(S ,stunum,ad);break;}
사례 3:{cout<<"이름을 입력하세요. 정보를 삭제한 사람"<
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 outfile.close();infile.close();break;} case 6:cout<<" 감사합니다. using! "< } ofstream outfile("stunum.txt"); outfile< outfile.close(); return 0; } void input(student *stu,int all) {ofstream outfile("stuinfor.txt"); 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; 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) { 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; } void del( Student * stu,char *name,int &num) {int delper;char check; cout <<"삭제하려는 정보는 다음과 같습니다."< cout< cout<<"삭제하시겠습니까? (y/n)"< cin> >check; p> ofstream outfile("stuinfor.txt"); if(check=='y'||'Y') { for(int i=delper;i num--; for (int i=0 ;i cout<<"정보가 삭제되었습니다!"< infile.close(); outfile.close(); p> } 변경 무효(student *stu,char *name,int num) {int 변경;char check,nam[10]; 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; } if(stu[mid].num==check) {cout<<"조회하려는 정보는 다음과 같습니다."< else cout<<"정보 당신이 찾고 있는 것을 찾을 수 없습니다! "< }
qsort(S,0,stunum- 1);
ofstream outfile("sorted_infor.txt");
for(int i=0;i
for(int i=0;i
outfile<
cout<
if(low
ivoloc=partition(a,low,high);
qsort(a,low,pivotloc-1);
qsort(a,pivotloc+1,high);
}
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;}
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;
}
ifstream infile("sorted_infor.txt");
if(!infile) cerr<<"파일 열기 실패!"<
{for(int i=0;i
while(stu[mid].num!=check&&high>=low) {mid= (low +high)/2;if(stu[mid].num>check) high=mid-1;
else low=mid+1;}//반값으로 검색