Programing/C- programing

C++ 학생정보 링크드리스트 코드 소스

sosal 2009. 10. 15. 21:23
반응형

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */



#include <iostream> //기본 입력,출력 헤더파일
#include <time.h> // 시간 관련 헤더파일
#include <stdlib.h>
using namespace std; // std클래스 사용

void add();
void del();
void mod();
void find();
void print();
void exit();
void random_data();
void menu();

struct student
{
 int id;
 char name;
 int kor;
 int eng;
 int math;
 int total;
 char grade;
 struct student *H;
 struct student *T;
};// 구조체 선언

struct student *F = new student;
           //student 리스트들의 시작을 가리킬 struct student형 포인터

int main()
{
 srand((unsigned int)time(NULL)); //시간에 의한 랜덤 seed
 
 F->H= NULL;
 F->T= NULL;
 int i;
 for(i=0;i<10;i++)
 {
  random_data();
 }
 menu();
 return 0;
}

void random_data()
{
 student *nN = new student;
 if(F->H==NULL)
 {
  nN->H=F->H;
  nN->T=F;
  F->H=nN;
 }
 else
 {
  nN->H=F->H;
  F->H=nN;
  nN->T=F;
 }

 nN->eng=rand()%101;
 nN->id=rand()%20;
 nN->kor=rand()%101;
 nN->math=rand()%101;
 nN->name='a'+rand()%26;
 nN->grade='\0';
 nN->total=nN->eng+nN->kor+nN->math;
}

void menu()
{
 int number = 0;
 while(number != 6)
 {
  cout << "메뉴를 선택하세요 : 1.추가 2.삭제 3.수정 4.검색 5.출력 6.종료 :" << endl;
  cin >> number;
  switch (number)
  {
  case 1: add();
   cout << "해당 학생의 정보가 입력되었습니다.(정원 20명)" << endl;
   break;
  case 2: del();
   break;
  case 3: mod();   
   break;
  case 4: find();
   break;
  case 5: print();
   break;
  case 6: exit();
   break;
  default: cout <<"잘못된 값을 입력하셨습니다." << endl; // number값이 1~6을 벗어난 경우
   break;
  }
 }
}

void add()
{
 student *nN = new student;
 if(F->H==NULL)
 {
  F->H=nN;
  nN->T=F;
  nN->H=NULL;
 }
 else
 {
  nN->H=F->H;
  nN->T=F;
  F->H=nN;
 }
 cout << "추가를 선택하셨습니다." << endl<<endl; // number가 1인 경우
 cout <<"학번을 입력하세요 :"; //문구 출력
 cin >> nN->id;//id 입력받음
 cout <<"이름을 입력하세요 : ";//문구 출력
 cin >> nN->name;//이름 입력받음
 cout <<"국어 성적을 입력하세요 : ";//문구 출력
 cin >> nN->kor;//국어성적 입력받음
 cout <<"영어 성적을 입력하세요 : ";//문구 출력
 cin >> nN->eng;//영어성적 입력받음
 cout <<"수학 성적을 입력하세요 : ";
 cin >> nN->math;
}

void del()
{
 student *deleter = new student;
 student *deleter1 = new student;
 deleter=F;
 int i,j;
 cout << "삭제를 선택하셨습니다." << endl << "삭제하시려는 학생의 학번을 입력하세요(1~20까지 입력가능) : ";//number가 2인 경우
 cin>>i; // i 입력받음
 
 for(j=1;j<i;j++)
 {
  deleter = deleter->H;
 }

 deleter1 = deleter;
 deleter = deleter->H;
 deleter1->H = deleter1->H->H;
 

 cout<<deleter->id<<"번 학생의 정보가 삭제되었습니다."<<endl;
 delete deleter;
}

void mod()
{
 student *nN = new student;
 int i,j;
 nN=F->H;
 cout << "수정을 선택하셨습니다." << endl << "수정하시려는 학생의 학번을 입력하세요(1~20까지 입력가능) : "; //number가 3인 경우
 cin >> i;// i 입력받음
 for(j=1;j<i;j++)
 {
  nN=nN->H;
 }
 cout<< "해당 학생의 학번을 변경합니다. 변경하시려는 학번을 입력해 주세요.(변경하지 않으시려면 기존 학번을 입력해주세요 / 입력가능 범위 0 ~ 19) : ";
 cin>>nN->id; 
 
 cout<< "해당 학생의 이름을 변경합니다.변경하시려는 이름을 입력해 주세요.(a~z까지 입력가능) : ";
 cin>>nN->name; 
 
 cout<< "해당 학생의 국어 성적을 변경합니다. 성적을 입력해주세요. : ";
 cin>>nN->kor;
 
 cout<< "해당 학생의 영어 성적을 변경합니다. 성적을 입력해주세요. : ";
 cin>>nN->eng;
 
 cout<< "해당 학생의 수학 성적을 변경합니다. 성적을 입력해주세요. : ";
 cin>>nN->math;
}

void find()
{
 student *nN = new student;
 nN=F->H;
 int i,j;
 cout << "검색을 선택하셨습니다." << endl << "검색하실 학생의 학번을 입력하세요(1~20까지 입력가능) : "; //number가 4인 경우
 cin >> i; // i 입력받음
 for(j=1;j<i;j++)
 {
  nN=nN->H;
 }
 cout <<"학번 : "<<nN->id<<"\t"<<"이름 : " <<nN->name << "\t" << "국어 : " <<nN->kor << "\t" << "영어 : "<<nN->eng<<"\t"<<"수학 : " << nN->math << endl;
}

void print()
{
 if(F->H == NULL)
 {
  cout<<"데이타가 없습니다."<<endl;
  return;
 }
 int cnt=1;
 student *finder = new student;
 finder=F->H;
 while(1)
 {
  if(finder->H==NULL)
   break;
  cnt++;
  finder=finder->H;
 }

 student *nN = new student;
 
 nN=F->H;
 
 int i;
 cout << "출력을 선택하셨습니다.모든 학생 정보를 화면에 출력합니다." << endl; //number가 5인 경우
 for(i=0; i<cnt;i++)//for문을 이용하여 학생정보 출력
 {
  cout <<"학번 : "<<nN->id<<"\t"<<"이름 : " <<nN->name<< "\t"<<"국어 : " <<nN->kor <<"\t"<< "영어 : "<<nN->eng<<"\t"<<"수학 : "<<nN->math<<endl;
  nN=nN->H;
 }
}

void exit()
{
 cout <<"****성적관리 프로그램을 종료합니다****" << endl; //number가 6인 경우
}

//학점에 대한건 빼먹었네요..