Автор работы: Пользователь скрыл имя, 15 Мая 2013 в 20:06, курсовая работа
Разработать программу на С++ с использованием статических массивов структур. Обработка данных должна включать следующие функции:
1) Просмотр существующей базы данных (чтение данных осуществляется из файла);
2) Редактирование базы данных (с сохранением изменений в файле);
3) Дополнение базы данных новыми записями ( с сохранением в файле);
4) Удаление записей из базы данных (с сохранением в файле) ;
5) Поиск в базе данных ( по одному и двум поисковым признакам) с выводом на экране найденных записей или сообщения о неуспешном поиске;
}mm[8]; /* определение массива банков */
int main(void) {
struct znak x; /* рабочая переменная */
int n,v; /* количество элементов в массиве */
int i, j; /* текущие индексы в массиве */
int m; /* индекс минимального элемента */
char y_n;
FILE *m_file;
char filename[] = "znak.bin";
while (true){
printru ("Выберите действие: \n");
printru ("1: Создать файл \n");
printru ("2: Добавить данные \n");
printru ("3: Удалить данные \n");
printru ("4: Вывести данные \n");
printru ("5: Сортировка \n");
printru ("6: Средний возраст \n");
printru ("7: Поиск по именам\n");
printru ("8: Поиск по номеру\n");
printru ("9: Выход \n");
cin>>v;
if (v==1) {
m_file = fopen(filename, "w+");
if ( m_file==0 ) {
printru ( "Создать файл не удалось!\n");
getch();
return(1);
}
fclose(m_file);
}
if (v==2) {
m_file = fopen(filename, "ab");
if ( m_file==0 ) {
printru ( "Открыть файл не удалось!\n");
getch();
return(1);
}
int tt;
do {
tt=0;
// Ввод данных
printru ("Введите: фамилию, имя, знак зодиака, телефон, день, месяц, год рождения: \n");
cin>> x.surname;
cin>> x.name;
cin>> x.znak;
cin>> x.tel;
cin>> x.day;
cin>> x.month;
cin>> x.year;
fwrite((char *) &x, sizeof(znak),1,m_file);
printru ("Продолжить(y/n)? \n");
cin>>y_n;
if (y_n=='y'||y_n=='Y') tt=1;
} while(tt==1);
fclose(m_file);
}
if (v==3) {
int n, i, f;
m_file = fopen(filename, "r");
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
printru( "Введите строку, которую нужно удалить: ");
cin>> f;
for (i=f; i<n-1; i++) {
strcpy(mm[i].surname,mm[i+1].
strcpy(mm[i].name,mm[i+1].
strcpy(mm[i].znak,mm[i+1].
mm[i].tel=mm[i+1].tel;
mm[i].day=mm[i+1].day;
mm[i].month=mm[i+1].month;
mm[i].year=mm[i+1].year; }
n=n-1;
fopen(filename, "w");
fwrite(mm, sizeof(znak), n, m_file);
fclose(m_file);
}
if (v==4) {
m_file = fopen(filename, "r");
printru ("----------------------------
printru ("|
printru ("|---------------------------
printru ("| фамилия | имя | знак | телефон | день | месяц | год |\n");
printru ("| | | | | | | |\n");
printru ("|------------------|--------
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
// Функция fread позволяет считать весь файл за одно обращение
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
for(i=0;i<n;i++)
cout<<"|"<<setw(18)<<mm[i].
cout<<"-----------------------
}
if (v==5) {
m_file = fopen(filename, "r");
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
for (i=0; i<n-1; i++) {
m=i;
for (j=i+1; j<n; j++)
if (mm[m].month>mm[j].month) m=j;
if (m>i) {
strcpy(x.surname,mm[i].
strcpy(x.name,mm[i].name);
strcpy(x.znak,mm[i].znak);
x.tel=mm[i].tel;
x.day=mm[i].day;
x.month=mm[i].month;
x.year=mm[i].year;
strcpy(mm[i].surname,mm[m].
strcpy(mm[i].name,mm[m].name);
strcpy(mm[i].znak,mm[m].znak);
mm[i].tel=mm[m].tel;
mm[i].day=mm[m].day;
mm[i].month=mm[m].month;
mm[i].year=mm[m].year;
strcpy(mm[m].surname,x.
strcpy(mm[m].name,x.name);
strcpy(mm[m].znak,x.znak);
mm[m].tel=x.tel;
mm[m].day=x.day;
mm[m].month=x.month;
mm[m].year=x.year;
}
}
fopen(filename, "w");
fwrite(mm, sizeof(znak), n, m_file);
fclose(m_file);
{m_file = fopen(filename, "r");
printru ("----------------------------
printru ("|
printru ("|---------------------------
printru ("| фамилия | имя | знак | телефон | день | месяц | год |\n");
printru ("| | | | | | | |\n");
printru ("|------------------|--------
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
// Функция fread позволяет считать весь файл за одно обращение
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
for(i=0;i<n;i++)
cout<<"|"<<setw(18)<<mm[i].
cout<<"-----------------------
}
if (v==6) {
int n, i, f, k, sum=0, sr, flag=0;
m_file = fopen(filename, "r");
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
char znak[15];
printru ("Введите название знака: \n");
cin>>znak;
for (int i=0; i<n; i++) {
if (strcmp(mm[i].znak,znak));
else {printru ("Средний возраст людей: \n");
k=k+1;
sum=sum+(2012-mm[i].year);
sr=sum/k;
cout<<sr<<"\n";
flag=1;}}
if (flag==0) printru ("Таких людей в списке нет. \n");
fopen(filename, "w");
fwrite(mm, sizeof(znak), n, m_file);
fclose(m_file);
}
if (v==7) {
int n, i, f;
m_file = fopen(filename, "r");
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
char name1[1];
printru ("Введите первую букву имени: \n");
cin>>name1;
for (int i=0; i<n; i++)
if(strncmp(name1,mm[i].name,1)
cout<<mm[i].surname<<" "<<mm[i].name<<"\n";
}
fopen(filename, "w");
fwrite(mm, sizeof(znak), n, m_file);
fclose(m_file);
}
if (v==8) {
int n, i, f;
m_file = fopen(filename, "r");
fseek(m_file, 0, SEEK_END);
n = ftell(m_file) / sizeof(znak);
znak *mm = new znak[n];
fseek(m_file, 0, SEEK_SET);
fread(mm, sizeof(znak), n, m_file);
fclose(m_file);
int tel1;
printru ("Введите номер: \n");
cin>>tel1;
for (int i=0; i<n; i++) {
if(mm[i].tel==tel1)
cout<<mm[i].surname<<"\n";}
fopen(filename, "w");
fwrite(mm, sizeof(znak), n, m_file);
fclose(m_file);
}
if (v==9) {
getch() ;
return 1;
}
}
}
Приложение 3. Тестирование программы.
Протестировали главное меню программы. Оно открывается автоматически. Пункты из меню открываются при вводе необходимой цифры (номера пункта меню).
При выборе пункта меню 1 осуществляется создание файла BANK.txt
При выборе пункта 2 можно добавить запись в файл znak.txt.
В нашем случае добавится запись:
Фамилия: Петров
Имя: Вася
Знак зодиака: стрелец
Номер телефона: 2554585
День рождения: 29
Месяц рождения: 11
Год рождения: 1999
При выборе пункта 3 и вводе номера строки выполняется удаление заданной строки из текстового файла znak.txt.
Номер строки: 1
Запись удалена.
При выборе пункта 4 производится вывод таблицы на экран.
При выборе пункта 5 происходит сортировка по месяцу рождения.
7. Средний возраст людей
При выборе пункта 6 и вводе знака зодиака можно узнать средний возраст человека.
Выбранный нами знак зодиака: ?
Средний возраст: ?
СЮДА ВСТАВИШЬ СКРИН
В случае отсутствия такого города в списке будет выведена ошибка: «Таких людей в списке нет».
При выборе пункта 7 и вводе первой буквы имени производится поиск людей с выбранным знаком зодиака.
СЮДА ВСТАВИШЬ СКРИН
При выборе пункта 8 и вводе номера телефона можно узнать фамилию человека.
При выборе пункта 9 производится выход из программы.