У меня Visual Studio 2013 и 2015, если что.

Делать с модулем (func.h, func.cpp, hashtable.cpp), оформите его правильно, а то как говорит препод, в консольном-то приложении запустить модуль будет можно, а в графическом вот нет, он без cout например и прочего должен быть. Не пользоваться глобальными переменными. Без ООП. Используйте структуру. Нужна СЛУЧАЙНАЯ хеш-функция.

Нужно ввести название файла с клавиатуры, в котором будут имена и номера (все изменения в ходе выполнения программы сохраняются в файл), а потом линейный шаг, которым мы будем двигаться по таблице, нужен ЛИНЕЙНЫЙ поиск, а не последовательный. Сделайте всяческие проверки на ввод, в случае ошибки выведите сообщение об этом и совершите выход из программы.

После ввода файла и шага пусть выводится список номеров (ячейка таблицы, хеш номера телефона, номер телефона, счётчик коллизий ячейки или какие-то другие счётчики, которые помогут вам ходить по таблице (если нужно), например 4. [6] 3467563 Иван. Потом идёт консольное меню:  добавить элемент, удалить элемент, поиск элемента по номеру телефона, выход.

Начальный размер таблицы = 10. Нужно увеличивать таблицу вдвое, когда мы добавляем 11 элемент и так далее. При этом мы должны почистить память от старой таблицы. Записать всё в новую и перезахешировать номера. Удвоение только при переполнении. Если нас линейный шаг увёл за пределы таблицы, то мы пробуем заново с начала идти по ячейкам. Обратите внимание, что по таблице размера 10 с шагом 3 мы пройдём так: 1 4 7 10 3 6 9... и обойдём все ячейки, а с шагом 2 если, то придумайте как, а то если идти также, то будет 1 3 5 7 9 1 3 5... так же, если эти ячейки заняты, то зациклится добавление. Раз удвоение только при переполнении, нужно как-то свободные места находить, если шагом не выйдет найти свободное место. Расскажете потом подробно про свою реализацию. Можете по-своему делать этот процесс организовать. Но ЛИНЕЙНЫМ поиском.

Комментарии преподавателя:

алгоритм поиска должен повторять алгоритм добавления, что поиск должен быть один, что смысл хеширования в независимом от размера таблицы добавлении, поиске и удалении.

удаление элемента работает по ключевому полю объекта данных, а не по хеш-функции, которая вычисляется по этому ключу

Теперь я ещё: в коде должно быть чётко видно, что мы идём по таблице нашим ШАГОМ, что отсутствует лишние хождения по таблице при добавлении, поиске и удалении, в этом суть

Нужны подробные комментарии по коду: описания функций, переменных, алгоритмов, команд и т.д, максимально подробно