Курсовая. Курсовая работа по дисциплине Информатика
Скачать 19.69 Kb.
|
Федеральное агентство связи Кафедра ПМ и К Курсовая работа по дисциплине «Информатика»: Разработка системы управления базой данных Выполнил: студент 1 курса гр. Проверил: 2019 ЗаданиеНаписать программу управления базой данных телефонных номеров, реализующей поиск, добавление, удаление и вывод элементов базы данных. Хранение данных реализовать в файле. Вариант по номеру в журнале.
ОглавлениеЗадание 2 Код программы 4 Заключение 17 Код программы#include #include #include #include #include using namespace std; void setcolor(int color)//функция изменения цвета символов { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color); } void setpos(int x,int y)//функция задания позиции курсора { COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } struct Apteka//структура базы данных { string name;//название аптеки long long int number;//телефон string address;//адрес int time[4];//часы работы }; struct Button//структура кнопки { string text;//текст кнопки int color;//цвет кнопуи }; struct Menu//структура меню { int count;//количество кнопок Button* button;//указатель на массив кнопок }; int ch;//код клавиши void print_menu(Menu* menu,int selected)//функция вывода меню { for(int i=0;i { if(i==selected)//если кнопка выделена setcolor(menu->button[i].color>>4|(menu->button[i].color<<4)&0xff);//меняем фон с цветом символа else setcolor(menu->button[i].color); printf("%s\n",menu->button[i].text.c_str());//вывод текста кнопки } } Apteka** database;//указатель на базу данных int count;//количество элементов void append(Apteka* element)//добавление элемента { Apteka** db=new Apteka*[count+1]; for(int i=0;i { db[i]=database[i]; } db[count]=element; delete database; database=db; count++; } void remove(int index)//удаление элемента по его индексу { Apteka** db=new Apteka*[count-1]; for(int i=0;i { if(i>=index) db[i]=database[i+1]; else db[i]=database[i]; } delete database; database=db; count--; } int find(string name) { for(int i=0;i { if(name.compare(database[i]->name)==0) { return i; } } return -1; } void save()//сохранение базы данных в двоичный файл { FILE* f=fopen("db.bin","wb"); fwrite(&count,sizeof(int),1,f); for(int i=0;i { int buf=database[i]->name.size(); fwrite(&buf,sizeof(int),1,f); fwrite(database[i]->name.c_str(),1,buf,f); fwrite(&(database[i]->number),sizeof(long long int),1,f); buf=database[i]->address.size(); fwrite(&buf,sizeof(int),1,f); fwrite(database[i]->address.c_str(),1,buf,f); fwrite(&(database[i]->time[0]),sizeof(int),1,f); fwrite(&(database[i]->time[1]),sizeof(int),1,f); fwrite(&(database[i]->time[2]),sizeof(int),1,f); fwrite(&(database[i]->time[3]),sizeof(int),1,f); } fclose(f); } void load()//загрузка базы данных из двоичного файла { FILE* f; if((f=fopen("db.bin","rb"))==NULL) { //system("cls"); //printf("FIle not exists\n\nPress any key to continue..."); //getch(); save(); return; } for(int i=0;i delete database[i]; delete database; fread(&count,sizeof(int),1,f); database=new Apteka*[count]; for(int i=0;i { database[i]=new Apteka; int buf; char* str; fread(&buf,sizeof(int),1,f); str=new char[buf+1]; fread(str,1,buf,f); str[buf]=0; database[i]->name=string(str); delete str; fread(&(database[i]->number),sizeof(long long int),1,f); fread(&buf,sizeof(int),1,f); str=new char[buf+1]; fread(str,1,buf,f); str[buf]=0; database[i]->address=string(str); delete str; fread(&(database[i]->time[0]),sizeof(int),1,f); fread(&(database[i]->time[1]),sizeof(int),1,f); fread(&(database[i]->time[2]),sizeof(int),1,f); fread(&(database[i]->time[3]),sizeof(int),1,f); } fclose(f); } void swapsort(int i,int j) { if(database[i]->name.compare(database[j]->name)>0) { Apteka* c=database[i]; database[i]=database[j]; database[j]=c; } } void sort() { int left=0,right=count-1; while(left<=right) { for(int i=left;i swapsort(i,i+1); right--; for(int i=right;i>=left;i--) swapsort(i,i+1); left++; } } int main() { count=0; load(); system("cls"); Menu mmain; mmain.count=7;//главное меню mmain.button=new Button[mmain.count]; mmain.button[0].text="Create"; mmain.button[0].color=0x07; mmain.button[1].text="Remove"; mmain.button[1].color=0x07; mmain.button[2].text="Edit"; mmain.button[2].color=0x07; mmain.button[3].text="View all"; mmain.button[3].color=0x07; mmain.button[4].text="Clear"; mmain.button[4].color=0x07; mmain.button[5].text="Find"; mmain.button[5].color=0x06; mmain.button[6].text="Exit"; mmain.button[6].color=0x04; ch=0; int selected=0; while(true) { setcolor(0x07); system("cls"); print_menu(&mmain,selected); //setpos(14,14); //printf("%i",ch); ch=getch(); if(ch==72&&selected>0) selected--; if(ch==80&&selected selected++; if(ch==13) switch(selected) { case 0: { setcolor(0x07); system("cls"); setpos(0,0); char* st=new char[80]; printf("name:\nnumber:\naddress:\ntime(usage: 8:00 17:00):"); setpos(6,0); gets(st); string name=string(st); if(find(name)!=-1) { setcolor(0x07); system("cls"); setpos(0,0); printf("Element \"%s\" is exists.\n\nPress any key to continue...",name.c_str()); getch(); break; } long long int number; setpos(8,1); scanf("%lli",&number); setpos(9,2); //scanf("%s",st); gets(st); gets(st); string address=string(st); int time[4]; setpos(25,3); scanf("%i:%i %i:%i",&time[0],&time[1],&time[2],&time[3]); Apteka* element=new Apteka; element->name=name; element->number=number; element->address=address; element->time[0]=time[0]; element->time[1]=time[1]; element->time[2]=time[2]; element->time[3]=time[3]; append(element); sort(); save(); break; } case 1: { setcolor(0x07); system("cls"); setpos(0,0); printf("name: "); char* st=new char[80]; gets(st); string name=string(st); system("cls"); setpos(0,0); int index=find(name); if(index==-1) printf("Element \"%s\" not exists.\n\n",name.c_str()); else { remove(index); sort(); save(); printf("Element \"%s\" removed.\n\n",name.c_str()); } printf("Press any key to continue..."); getch(); break; } case 2: { setcolor(0x07); system("cls"); setpos(0,0); char* st=new char[80]; printf("[edit]name:\nnumber:\naddress:\ntime(usage: 8:00 17:00):"); setpos(12,0); gets(st); string name=string(st); int index=find(name); if(index==-1) { setcolor(0x07); system("cls"); setpos(0,0); printf("Element \"%s\" is not exists.\n\nPress any key to continue...",name.c_str()); getch(); break; } setcolor(0x03);//подсказка в виде уже существующих значений в элементе setpos(40,1); printf("%lli",database[index]->number); setpos(40,2); printf("%s",database[index]->address.c_str()); setpos(40,3); printf("%i:%i - %i:%i",database[index]->time[0],database[index]->time[1],database[index]->time[2],database[index]->time[3]); setcolor(0x07); long long int number; setpos(8,1); scanf("%lli",&number); setpos(9,2); gets(st); string address=string(st); int time[4]; setpos(25,3); scanf("%i:%i %i:%i",&time[0],&time[1],&time[2],&time[3]); Apteka* element=new Apteka; element->name=name; element->number=number; element->address=address; element->time[0]=time[0]; element->time[1]=time[1]; element->time[2]=time[2]; element->time[3]=time[3]; delete database[index];//замена элемента database[index]=element; save(); break; } case 3: { setcolor(0x07); system("cls"); setpos(0,0); if(count==0) printf("Not enought elements.\n\n"); for(int i=0;i { printf("name: %s\nnumber: %lli\naddress: %s\ntime: %i:%i - %i:%i\n\n", database[i]->name.c_str(),database[i]->number,database[i]->address.c_str(), database[i]->time[0],database[i]->time[1],database[i]->time[2],database[i]->time[3]); } printf("Press any key to continue..."); getch(); break; } case 4: { for(int i=0;i { delete database[i]; } delete database; count=0; setcolor(0x07); system("cls"); printf("All elements is deleted.\n\nPress any key to continue..."); getch(); save(); break; } case 5: {//поиск по названию setcolor(0x07); system("cls"); setpos(0,0); char* st=new char[80]; printf("[find]name:\nnumber:\naddress:\ntime(usage: 8:00 17:00):"); setpos(12,0); gets(st); string name=string(st); int index=find(name); if(index==-1) { setcolor(0x07); system("cls"); setpos(0,0); printf("Element \"%s\" is not exists.\n\nPress any key to continue...",name.c_str()); getch(); break; } setcolor(0x06);//подсказка в виде уже существующих значений в элементе setpos(8,1); printf("%lli",database[index]->number); setpos(9,2); printf("%s",database[index]->address.c_str()); setpos(25,3); printf("%i:%i - %i:%i\n",database[index]->time[0],database[index]->time[1],database[index]->time[2],database[index]->time[3]); setcolor(0x07); getch(); break; } case 6: {//выход из программы for(int i=0;i delete database[i]; delete database; setcolor(0x07);//возврат оформления консоли system("cls"); return 0; } } } setcolor(0x07); system("cls"); return 0; } ЗаключениеВ ходе написания курсовой работы мной был изучен язык программирования С++, который является одним из самых популярных языков программирования. В результате выполнения курсовой работы было разработано управление базой данных телефонных номеров, реализующей поиск, добавление, удаление и вывод элементов базы данных. Область применения данного языка включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений. Я познакомился с объектно-ориентированным программированием и изучил библиотеку стандартных шаблонов. В данной работе выполнены все поставленные задачи. |