커뮤니티 - 자유게시판
C++ 학사관리 프로그램
코끼리
-
- 작성일
- 2024-05-24
-
- 조회수
- 1,787
-
6
학사관리 프로그램입니다.
추가, 리스트, 총합, 평균, 저장, 수정, 삭제, 검색을 할수있게 만들어놨는데
수정하고 검색이 안되네요..
검색은 저장된 txt파일에서 가져와야되는데 txt파일에서 못가져오고요.
소스자체에 오류는 안뜨는데 돌리면 계속
Unhandled exception at 0x000f388e in Haggum.exe: 0xC0000005: Access violation reading location 0x00000000.
라고 뜨네요..
한가지 더 하고싶은 것은 리스트 출력할때 HaggumManagerment.txt에 저장된 리스트를 출력해야되는데
추가시킨 리스트만 나오더라구요.
고수님들.. 도와주세요..
======================================================================================================
// HaggumManagerment.cpp : 학사정보 관리 //
#include
#include
#include "HaggumInfor.h"
#include "HaggumManagerment.h"
using namespace std;
HaggumInfor *student[10]; //HaggumInfor 클래스로부터 student[10]크기의 포인터배열 선언
int index; //사원수를 0으로 초기화
int i,j; //반복 변수
char searchname[10]; //찾을 학생
int flag; //변환 변수
void HaggumManagerment::Input() //학생정보 입력
{
char name[20]; //학생이름
float korean; //국어점수
float english; //영어점수
float math; //수학점수
cout << "학생이름: ";
cin >> name;
for(;strlen(name)<1 || strlen(name)>=20;) //잘못 입력될 이름 방지
{
cout << "이름을 다시 입력해주세요: ";
if(strlen(name)>=1 || strlen(name)<20)
cin >> name;
}
cout << "국어점수:(0-100점 사이) ";
cin >> korean;
for(;korean<0 || korean>100;) //0~100점 사이의 점수입력
{
cout << "0~100사이의 점수를 적어주세요: ";
if(korean>=0 || korean <=100)
cin >> korean;
}
cout << "영어점수:(0-100점 사이) ";
cin >> english;
for(;english<0 || english>100;) //0~100점 사이의 점수입력
{
cout << "0~100사이의 점수를 적어주세요: ";
if(english>=0 || english<=100)
cin >> english;
}
cout << "수학점수:(0-100점 사이) ";
cin >> math;
for(;math<0 || math>100;) //0~100점 사이의 점수입력
{
cout << "0~100사이의 점수를 적어주세요: ";
if(math>=0 || math <=100)
cin >> math;
}
cout << "\n";
student[++index] = new HaggumInfor(name, korean, english, math); //student[]배열에 입력값을 넣음
}
void HaggumManagerment::List() //학생정보 리스트
{
FILE *fp; //파일 포인터 fp선언
fp = fopen("HaggumManagerment.txt","r"); //쓰기모드로 파일개방 wt->추가모듈.
cout << "-------------------------------------" << endl;
cout << " 학생이름 국어점수 영어점수 수학점수" << endl;
cout << "-------------------------------------" << endl;
for(i=1; i<=index; i++) //추가된 모든 학생 출력
{
cout << " " << student[i]->name << " " << student[i]->korean << " " << student[i]->english << " " << student[i]->math << endl;
}
fclose(fp); //파일종료
}
void HaggumManagerment::Sum() //학생성적 총합
{
for(i=1; i<=index; i++)
{
cout << "----------" << endl;
cout << student[i]->name << "님" << endl;
cout << "점수 총합: " << (student[i]->korean) + (student[i]->english) + (student[i]->math) << "점" << endl; //총점=국어점수+영어점수+수학점수
cout << "----------" << endl;
}
}
void HaggumManagerment::Avr() //학생성적 평균
{
for(i=1; i<=index; i++)
{
cout << "----------" << endl;
cout << student[i]->name << "님" << endl;
cout << " 점수 평균: " << ((student[i]->korean) + (student[i]->english) + (student[i]->math))/3 << "점" < a(덧붙이기형식)
for(i=1; i<=index; i++)
{
fprintf(fp, "%s \n", "-------------");
fprintf(fp, "%s","학생이름: ");
fprintf(fp, "%s \n", student[i]->name);
fprintf(fp, "%s","국어점수: ");
fprintf(fp, "%f \n", student[i]->korean);
fprintf(fp, "%s","영어점수: ");
fprintf(fp, "%f \n", student[i]->english);
fprintf(fp, "%s","수학점수: ");
fprintf(fp, "%f \n", student[i]->math);
fprintf(fp, "%s","성적총합: ");
fprintf(fp, "%f \n", (student[i]->korean) + (student[i]->english) + (student[i]->math)); //성적총합 = 국어점수 + 영어점수 + 수학점수
fprintf(fp, "%s","성적평균: ");
fprintf(fp, "%f \n", ((student[i]->korean) + (student[i]->english) + (student[i]->math))/3);//성적평균 = 성적총합 / 3
fprintf(fp, "%s \n", "-------------");
}
fclose(fp); //파일종료
printf("학생정보가 저장되었습니다. \n");
}
void HaggumManagerment::Update() //학생정보 수정
{
char name[20];
cout << "정보를 수정할 학생이름을 적으세요 : ";
cin >> name;
for(i=0;i<=index;i++)
{
if(strcmp(student[i]->name, searchname) == 0)
{
cin >> student[i]->name;
cout << "국어점수 : ";
cin >> student[i]->korean;
cout << "영어점수 : ";
cin >> student[i]->english;
cout << "수학점수 : ";
cin >> student[i]->math;
}
// else
// cout << "일치하는 학생정보가 없습니다.";
}
}
void HaggumManagerment::Del() //학생정보 삭제
{
flag=0; //flag를 0으로 초기화
cout << "정보를 삭제할 학생이름을 적으세요: ";
cin >> searchname;
for(i=1; i<=index; i++)
{
if(strcmp(student[i]->name, searchname) == 0) //학생이름과 검색이름이 같다면
{
student[i]->name = "0";
student[i]->korean = 0;
student[i]->english = 0;
student[i]->math = 0;
for(j=i; jname = student[j+1]->name;
student[j]->korean = student[j+1]->korean;
student[j]->english = student[j+1]->english;
student[j]->math = student[j+1]->math;
}
index--; //학생수를 1명 줄임
flag=1; //삭제할 학생이름을 찾았을 때 flag=1
}
}
if(flag==0) //삭제할 학생이름을 찾지 못했을 때 flag=0
cout << "정보를 삭제할 학생이름이 없습니다." << endl;
}
void HaggumManagerment::Search() //학생정보 검색
{
char name[20];
cout << "검색할 학생이름을 입력하세요 : ";
cin >> searchname;
for(i=0;iname, searchname) == 0)
{
cout << "-------------------------------------" << endl;
cout << " 학생이름 국어점수 영어점수 수학점수" << endl;
cout << "-------------------------------------" << endl;
cout << " " << student[i]->name << " " << student[i]->korean << " " << student[i]->english
<< " " << student[i]->math << endl;
}
}
}
====================================================================================================
// Main.cpp : 학사정보 관리 프로그램 //
#include
#include
#include "HaggumInfor.h"
#include "HaggumManagerment.h"
using namespace std;
int main()
{
int choice=0; //선택 변수 선언
HaggumManagerment st; //HaggumManagerment클래스로 부터 st 객체 생성
while(1)
{
cout << "학사관리프로그램" << endl;
cout << "1.학생 추가" << endl;
cout << "2.학생리스트" << endl;
cout << "3.점수 합계" << endl;
cout << "4.점수 평균" << endl;
cout << "5.학생정보저장" << endl;
cout << "6.학생정보수정" << endl;
cout << "7.학생정보삭제" << endl;
cout << "8.학생정보검색" << endl;
cout << "0.종료" << endl;
cout << "번호를 입력하세요 : ";
cin >> choice;
switch(choice)
{
case 1:
st.Input(); //학생 추가
break;
case 2:
st.List(); //학생 리스트
break;
case 3:
st.Sum(); //학생성적 총합
break;
case 4:
st.Avr(); //학생성적 평균
break;
case 5:
st.Save(); //학생정보 저장
break;
case 6:
st.Update(); //학생정보 수정
break;
case 7:
st.Del(); //학생정보 삭제
break;
case 8:
st.Search(); //학생정보 검색
break;
case 0:
exit(1); //종료
}
}
return 0;
}
====================================================================================================
// Hagguminfor.cpp : 학생정보를 입력받음 //
#include
#include "HaggumInfor.h"
using namespace std;
HaggumInfor::HaggumInfor(char *_name, float _korean, float _english, float _math)
{
name=new char[strlen(_name)+1]; //입력받은 문자열의 길이에 1(==\0)을 더해서 name 변수를 동적 생성
strcpy(name, _name); //_name으로부터 name으로 문자열 복사
HaggumInfor::korean = _korean; //_korean으로부터 korean으로 대입
HaggumInfor::english = _english; //_english으로부터 english으로 대입
HaggumInfor::math = _math; //_math으로부터 math으로 대입
}
HaggumInfor::~HaggumInfor()
{
delete []name; //포인터 배열변수 name을 동적메모리 해제
}
=====================================================================================================
//HaggumManagerment.h
#include
class HaggumManagerment //학사정보 관리
{
public:
void Input(); //학생정보 입력
void List(); //학생정보 리스트
void Sum(); //학생성적 총합
void Avr(); //학생성적 평균
void Save(); //학생정보 저장
void Update(); //학생정보 수정
void Del(); //학생정보 삭제
void Search(); //학생정보 검색
};
======================================================================================================
//HaggumInfor.h
#include
class HaggumInfor //학사정보
{
public:
char *name; //학생이름
float korean; //국어점수
float english; //영어점수
float math; //수학점수
public:
HaggumInfor(char *name, float korean, float english, float math); //학사정보 입력 받음
~HaggumInfor();
};
====================================================================================================
C++ 학사관리 프로그램 : 창업정보 포털 오늘의창업
댓글 0