/*
* 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인 경우
}
//학점에 대한건 빼먹었네요..
'Programing > C- programing' 카테고리의 다른 글
C programming :: Void형 포인터와 NULL 포인터 (3) | 2010.01.27 |
---|---|
C++. template 템플릿. 자유로운 자료형 만들기 (3) | 2009.11.01 |
C++ 배열에서 원하는 문자열 찾아서 고치기 바꾸기 (1) | 2009.10.15 |
C++ 배열에서 원하는 크기 삭제 프로그램 코드 (1) | 2009.10.15 |
C++ class date 코드 (0) | 2009.10.15 |