2014-05-13 5 views
-1

그래서 C가 프로그램을 종료 할 때마다 데이터가 저장되는 주소록을 작성하는 임무가 있습니다. 따라서 파일을 사용해야합니다. 또한 주소록 파일에서 이미 존재하는 항목을 읽어야합니다. 프로그램은 이름, 성, 이메일 등으로 정렬 할 수있는 옵션도 제공해야합니다.연결된 목록을 사용하여 주소록을 만들려면 어떻게해야합니까?

나는 이것을 연결 목록을 사용하여 구현할 생각이었습니다. 문제는 연결된 목록이나 해시 테이블을 사용해야하는지 잘 모르겠다는 것입니다. 해시 테이블을 사용하면 데이터를 정렬 할 수있는 방법을 정확히 알지 못하기 때문입니다. 연결된 목록을 사용하고 포인터를 다음 항목으로 변경하여 정렬 만해도 괜찮습니까?

그래도 질문이 하나 더 있습니다. 예를 들어, 사용자로부터 fgets()을 사용하여 그의 이름을 얻은 다음 나중에이 파일을 fprintf (Addressbook, "Name: %s", addressbook.name);과 같이 인쇄한다고 가정 해 보겠습니다. 파일에서 읽고 기존 항목을 내 연결된 목록에로드하려고 할 때 파일에있는 "이름 :"부분을 어떻게 제외할까요?

예를 들어 사용자가 "Chris"라는 이름을 입력하면 Name: Chris과 같은 파일에 기록됩니다. 그러나 프로그램을 닫고 다시 실행하면 파일에서 읽고 "Chris"라는 이름을로드하려는 경우에만 addressbook.name에 넣습니다. 전반적으로 파일에서 읽는 것과 꽤 혼동 스럽습니다. 연결된 목록을로드하는 것이 일반적입니다.

도움이 될만한 정보가 있으면 감사하겠습니다. 시간 내 주셔서 감사합니다!

+0

두 번째 질문에 대해서는 * 이름 *'*을 처음에는 파일에 넣지 않는 것이 어떨까요? 당신은 어떤 보고서 파일을 쓰고 있지 않다. 그것의 데이터 저장 파일. * 프로그램 *에 'Name :'을 표시하고 싶다면 그 중 하나지만, 특히 디스크가 필요없는 경우 디스크에 해당 중복을 덤프하는 것은 거의 볼 수 없습니다. – WhozCraig

+0

물어보기 전에 적어도 _something_ 해보신다면 더 좋지 않겠습니까? 그렇다면 지금까지 시도한 것을 보여줄 수 있고 imporvements에 대해 질문 할 수 있습니다. 훨씬 더 흥미로운 토론을 할 수 있습니다. – ryyker

+0

파일을 사용하는 이유는 무엇입니까? 솔직히 정리 기능을 제공해야하기 때문에 단순히 데이터베이스를 사용하는 것이 더 쉽지는 않을 것입니다. MySQL C API는 어쨌든 배우기가 꽤 쉽습니다. –

답변

2

첫 번째 질문 : 주소록 링크 된 목록 또는 해시 테이블
응답 : SQL. 정말. 데이터를 저장하고 검색하는 방법에 대한 이런 종류의 수수께끼에는 대답이 있으며 절대로 THIN OLLN *을 굴러 가야합니다.

* 학생 인 경우와 롤하는 법을 배우는 경우는 예외입니다.

당신이 누군지. 그리고 이것은 과제입니다. 따라서 두 옵션 모두 "잘못"되었지만 학습 활동 일 뿐이므로이를 수행하십시오. 뭐라구. 예, 링크 된 목록으로 이동하고 다른 매개 변수로 정렬 할 때마다 노드를 다시 정렬하십시오. 재미 있고 공포스러운 경험 인 것 같습니다.

두 번째 질문 : 파일에서 읽고 기존 항목을 내 연결된 목록으로로드하려고 할 때 파일에있는 "이름 :"부분을 어떻게 제외할까요?

fscanf(f_file, "Name: %s", nameArrayTypeThing); 

이름에 공백이없고 파일이 손상되지 않았기를 바랍니다. 임무를 수행하기에 충분할 것입니다.

+0

저는 C에서 학생이자 초보자입니다. 그것은 소름 끼치는 경험인가? 실행 시간 측면에서 목록을 탐색 할 때? 대답 해 주셔서 감사합니다. 정확히 내가 무엇을 찾고 있었는지. – user3484582

+0

@ user3484582 Naw, 그건 함축 된 작업의 양입니다.왜냐하면 당신은 데이터베이스를 만드는 길을 가고 있기 때문입니다. 해결해야 할 문제, 경계 사례 및 일반적인 문제가 많이 있습니다. 그것은 많은 일입니다. 이것을 개발하고 실제로 연마 한 것이라면 SQLite와 같이 현재 사용 가능한 데이터베이스와 비슷한 것을 다시 만들었다는 것을 알 수 있습니다. 선생님은 잡기에 아주 좋은 바퀴가있을 때 바퀴를 다시 만들어달라고합니다. 그러나 바퀴에 대해 배우는 좋은 방법입니다. 실제 세계에서하지 않더라도 말이죠. – Philip

+0

그는 주소록을 구현하는 방법에 대해서는 아직 상세히 알려주지 않았습니다. 난 그냥 연결된 목록을 사용하여 정렬하기 쉬울 것이라고 생각하고 그 동안 나는 C로 더 연습 할 것입니다. – user3484582

관련 문제