printf("Cannot create file '%s'.\n",filename);
return 1;
}
rob=first;
while(rob->next!=NULL)
{
fprintf(out,"%-3i %-10s %-10s %-10s %-10s %-4i %-4i\n",
++i,rob->sPrizv,rob->sImja,rob->sPobat,
rob->sPosada,rob->iOklad,rob->iYear);
rob=rob->next;
}
fclose(out);
return 0;
}
int read_from_file(char *filename)
{
FILE *in;
int i;
if ((in = fopen(filename, "r"))
== NULL)
{
printf("Cannot open file '%s'.\n",filename);
return 1;
}
records=0;
rob=first;
while(!feof(in))
{
fscanf(in,"%i %10s %10s %10s %10s %i %i\n",&i,
rob->sPrizv,rob->sImja,rob->sPobat,
rob->sPosada,&rob->iOklad,&rob->iYear);
records++;
if (rob->next==NULL) {
rob->next= new stSpivrobitnuk;
rob=rob->next;
rob->next=NULL;
} else {
rob=rob->next;
}
}
rob->next=NULL;
fclose(in);
return 0;
}
void main (void)
{
char c;
//create an empty list
records=0;
first = new stSpivrobitnuk;
rob=first;
rob->next=NULL;
//read saved database
read_from_file("A");
//create backup copy
save_to_file("A.BAK");
do{
//show menu
clrscr();
printf("[ESC] - Вихiд\n");
printf("[ 1 ] - Додaти запис\n");
printf("[ 2 ] - Вилучити запис\n");
printf("[ 3 ] - Показати записи\n");
printf("[ 4 ] - Вiдмiнити останню дiю\n");
printf("------------------------\n");
printf("В базi записiв: %i\n\n",records);
showmatch();
c=getch();
switch (c)
{
case '1': {
save_to_file("A.BAK"); //create a backup copy
addrecord();
save_to_file("A");
break;
}
case '2': {
save_to_file("A.BAK"); //create a backup copy
deleterecord();
save_to_file("A");
break;
}
case '3': {
showrecords();
break;
}
case '4': {
//restore from backup
read_from_file("A.BAK");
save_to_file("A");
break;
}
}
}while(c!=0x1B);
}
Вміст файлу “А”
1 Кузнецов Василь Романович Iнженер 440 1980
2 Перебийнic Олег Степанович Технiк 360 1984
3 Перейма Вiталiй Борисович Дизайнер 500 1980
4 Джмiль Олена Петрiвна Секретар 300 1985
5 Стаканов Степан Васильович Сантехнiк 270 1960
6 Дейнега Валентина Василiвна Iнженер 460 1979
7 Шлемко Тарас Павлович Програмicт 600 1986
8 Цибульский Євген Михайлович Iнженер 500 1970
9 Шеремета Василь Павлович Iнженер 700 1984
10 Коваленко Олена Михайлiвна Лаборант 400 1986
3.Опис програми
Для зберігання даних в пам’яті ми використали зв’язаний список, кожен елемент якого містить інформацію про поля, а також вказівник на наступний елемент списку, або ж значення NULL, якщо запис являється останнім в списку. Список є однонаправленим, номера записів не зберігаються в структурі а вираховуються, вказівник на перший елемент списку зберігається в глобальній змінній first.
Програма складається з наступних функцій:
main() – головна функція, очищає екран, створює порожній список, зчитує дані з файлу, виводить меню і дає можливість користувачу обрати необхідну операцію. Вихід з програми відбувається по натисненню клавіші <ESC>
addrecord() – додає в кінець списку новий запис, використовуючи введені користувачем дані
deleterecord() – запитує в користувача номер запису, та у випадку вірного вводу вилучає запис з введеним номером
showrecords() – виводить на екран поточний стан бази даних
showmatch() – шукає в списку елементи що задовільняють заданій умові (мінімальну і максимальну заробітну плату інженера) і виводить цю інформацію на екран
save_to_file() – записує дані з пам’яті в файл, ім’я якого передається як параметр. Якщо файла з таким іменем не існує, він створюється, якщо існує – перезаписується.
read_from_file() – зчитує дані з файла в список.
Висновки
В даній курсовій роботі розроблено програму для роботи з відомостями про співробітників. Для зберігання даних в пам’яті використано списки, оскільки з даними, що зберігаються таким чином, зручно проводити операції вилучання, а також це не накладає на програму жорстких обмежень по максимальній кількості даних, що можуть оброблятись.
Програма має меню, за допомогою якого здійснюється вибір необхідної операції. Передбачено наступні режими роботи: «ввід нових даних», «вилучення», «перегляд» та «відміна останньої операції». Нові дані додаються в кінець списку. В режимі вилучення програма спитає номер запису, що необхідно вилучити. Для забезпечення можливості відновлення попереднього стану, перед кожною зміною списку, його стан фіксується в резервному файлі, звідки цю інформацію можна відновити в разі необхідності.
Інформація про кількість записів в базі даних, і мінімальну та максимальну зарплату інженерів виводиться під головним меню і оновлюється автоматично, під час будь-яких операцій з списком.
Перелік використаних літературних джерел
Глушаков С.В., Коваль А.В., Смирнов С.В. Язык программирования С++. – Харьков: Фолио, 2002. – 500 с.
Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320с.
ДОДАТКИ
Додаток А
Головне меню програми
Режим вилучення запису
Режим вводу даних
Режим перегляду