私のコードをテストしていますが、修正方法が不明な問題がいくつか見つかりました。新しいレコードを追加するたびにレコードが実際に追加されるわけではなく、レコードを追加するたびにテストしました。プログラムはすべてのレコードを表示し、プログラムにハードコードされたレコードを示しています。私はそうするためにリンクされたリストを使用していますが、私はそれを正しく実装しているかどうかはわかりません。新しいレコードの追加とレコードへのアクセスに問題がある
編集:私はいくつかの変更を加えましたが、残りの問題の1つは追加です。私は、メインプログラム
のStruct学生STUDENT1、tempStudentへの変更を行った場合には、 追加が選択され、最初のエントリが入力されたとき、プログラムは無限ループに入りました。
.hファイル:
#ifndef SLIST_H
#define SLIST_H
#include <string>
#include <iostream>
using namespace std;
class Student
{
public:
int ID;
string lastName;
string firstName;
string phoneNumber;
string major;
float GPA;
int year;
int month;
int date;
string address;
};
class Node
{
public:
struct Student data;
Node *next;
Node();
struct Student GetData();
void SetData(struct Student);
friend class LinkedList;
};
class LinkedList
{
public:
int length;
Node *currentPos;
Node *head;
Node *tail;
LinkedList();
~LinkedList();
int LengthIs();
void MakeEmpty();
void AddToTail(struct Student);
void AddToHead(struct Student);
int SearchByID(struct Student);
void DeleteFromHead();
void DeleteFromTail();
void Delete(int);
Node GetNext();
bool IsLast();
void Reset();
void PrintAll(int, string);
};
void LinkedList::AddToTail(struct Student item)
{
Node *ptr = new Node();
ptr->SetData(item);
if (length == 0)
{
tail = ptr;
head = ptr;
length++;
return;
}
tail->next = ptr;
tail = ptr;
length++;
}
void LinkedList::AddToHead(struct Student item)
{
Node *ptr = new Node;
ptr->SetData(item);
ptr->next = head;
head = ptr;
if (length == 0) tail = ptr;
length++;
}
#endif
メインプログラム:あなたは間違ってstruct
キーワードに
cin >> tempStudent.ID;
意志を取り除くため
#include "slist.h"
#include <iostream>
using namespace std;
int main()
{
LinkedList students;
int choice = 1;
Student student1, tempStudent;
Node student1Node;
int ret;
student1.ID = 12345678;
student1.firstName = "Daenerys";
student1.lastName = "Targaryen";
student1.phoneNumber = "111-123-1234";
student1.major = "PScience";
student1.GPA = 3.9;
student1.year = 2000;
student1.month = 11;
student1.date = 30;
student1.address = "1234 Harpy Way Mereen, OK 74701";
students.AddToHead(student1);
while (choice != 6)
{
cout << "What would you like to do?" << endl;
cout << "1: Add a student record." << endl;
cout << "2: Remove a student record." << endl;
cout << "3: List all students." << endl;
cout << "4: List the student(s) by major or by ID." << endl;
cout << "5: Order the list." << endl;
cout << "6: Exit!" << endl << endl;
cout << "Make your choice: ";
cin >> choice;
switch (choice)
{
case 1:
cout << "Warning: there's a lot of data entry. Try to keep up with what you're entering."
<< endl;
cout << "Please enter in the student's ID, first name, last name, phone number and major ON SEPARATE LINES";
cout << endl;
cin >> tempStudent.ID;
cin >> tempStudent.firstName;
cin >> tempStudent.lastName;
cin >> tempStudent.phoneNumber;
cin.ignore();
getline(cin, tempStudent.major);
cout << "Almost done! Enter the student's gpa, birth year, birth month (IN DIGITS!!!), birth date, and address ON SEPARATE LINES.";
cout << endl;
cin >> tempStudent.GPA;
cin >> tempStudent.year;
cin >> tempStudent.month;
cin >> tempStudent.date;
cin.ignore();
getline(cin, tempStudent.address);
students.AddToHead(tempStudent);
cout << "Student entry added!" << endl;
students.PrintAll(-1, "");
break;
'if(current-> data.major!= major);'そのセミコロンは非常に悪い考えです。 – user4581301
正確に1つの問題に焦点を当てるために質問を再作成することをお勧めします。 addで始まることを推奨し、addが機能しないことを示すことと無関係なコードをすべて削除してください。しばしばこの時点であなたは答えがすぐに飛び出すような小さなコードしか持っていませんが、少し残っているコードを残しておけば、誰かがおそらくあなたの答えをもっと早く得るでしょう。すべての入力をコード化して複製します。 – user4581301
'Student'はクラスなので、' struct Student student1; 'を宣言しないでください。 'student student1;'を入れてください。 –