Добавил:
inrad
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая ИВТ ч2 маркетинг 2-й курс старый стандарт-сдана / Курсовая_исправленная
.cpp/*
Курсовая работа
студента ФЗВиДО
специальности Маркетинг
Программа написана в среде MS Visual Studio 2005
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
#include <string.h>
const int MAX=21;//Длина текстовых полей структуры
const int MAXX=100;//Разумный максимум длины вводимой строки
typedef struct {
int id;//код записи
char marka[MAX];//марка авто
char model[MAX];//модель авто
int year;//год выпуска
float engine;//объём двигателя
int probeg;//пробег в км
float price;//цена в долларах США
} data;
void interface();//Основное меню
void add();//Добавление записи
void del();//Удаление записи
void edit();//Редактирование записи
void view();//Просмотр всех записей
void sort();//Сортировка записей
int find_max_num();//Поиск максимального ID в файле
int get_number();//Определение количества записей в файле
void create();//Создание файла
void open();//Открытие файла
int check(data);//Поиск в файле такой же записи
void ramka();//Вывод на экран рамки
void print_str(data);//Вывод на экран записи
void sost_skl();//Определение затрат рабочего времени
int file_empty();//Пуст ли файл
char *str_cut(char *,int);//Урезание вводимой строки
char* fn; //Имя файла
void main()
{ int choice;
fn=new char[MAXX];
do
{ printf("\n \r(1) Sozdat' novuju bazu dannih \n");
printf("(2) Otkrit' bazu dannih \n");
printf("(7) Viyti iz programmi.\n");
printf("Vvedite Vash vibor ");
fflush(stdin);
scanf("%d",&choice);
switch(choice)
{
case 1: create();break;
case 2: open();break;
case 7:delete []fn; return;
default: printf("Vvedite 1,2 ili 7! \n");
}
}
while(choice !=7 );
}
void interface()
{ int choice;
do
{
printf("\n \r(1) Smotret' vse zapisi' \n");
printf("(2) Udalit' zapis' \n");
printf("(3) Redaktirovat' zapis' \n");
printf("(4) Dobavit' zapis' \n");
printf("(5) Sortirovat' zapisi \n");
printf("(6) Ot4et o sostojanii sklada \n");
printf("(7) Nazad \n");
printf("Vvedite vash vibor: ");
fflush(stdin);
scanf("%d",&choice);
switch(choice)
{
case 1: view(); break;
case 2: del(); break;
case 3: edit(); break;
case 4: add(); break;
case 5: sort(); break;
case 6: sost_skl(); break;
case 7: return;
default: printf("Vvedite 1-7!! \n");
}
}
while(choice !=7 );
}
void add()
{ FILE *fp;
data st;
char buf[MAXX];
int s;
int i;
int n=0;
float f;
st.id=find_max_num()+1;
printf("Marka:");
fflush(stdin);
gets(buf);
s=strlen(buf);
if (s>MAX) strcpy(st.marka,str_cut(buf,s)) ;
else strcpy(st.marka,buf);
printf("Model:");
fflush(stdin);
gets(buf);
s=strlen(buf);
if (s>MAX) strcpy(st.model,str_cut(buf,s)) ;
else strcpy(st.model,buf);
m11: printf("God vipuska:");
fflush(stdin);
gets(buf);
n=atoi(buf);
if (n<=0) {printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m11;}
st.year=n;
m12: printf("Objom dvigatelja v litrah:");
fflush(stdin);
scanf("%f",&f);
if (f<=0){ printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m12;}
else st.engine=f;
m1: printf("Probeg, km:");
fflush(stdin);
gets(buf);
n=atoi(buf);
if (n<=0) {printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m1;}
st.probeg=n;
m2: printf("Cena v dollarah:");
fflush(stdin);
f=0;
scanf("%f",&f);
if (f<=0){ printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m2;}
else st.price=f;
if (!check(st))
{
if ((fp = fopen(fn,"ab+")) == NULL)
{
printf("File could not be opened.\n");
return;
}
fwrite(&st, sizeof(data),1,fp);
fclose(fp);
return;
}
else
printf("Takaya zapis' uzhe est' - deistvie otmeneno");
}
void del()
{ FILE *fp,*temp;
data st;
char buf[MAXX];
int number,key=0,pr=1;
if (file_empty()==1) return;
m3: printf("Vvedite kod zapisi dlya udaleniya ili ENTER, chtobi vernutsja v menu: ");
fflush(stdin);
gets(buf);
if (strlen(buf)<1) return;
number=atoi(buf);
if (number<=0) {printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m3;}
if ((fp=fopen(fn,"rb")) == NULL)
{
printf("error.file does not exist.");
return;
}
if ((temp=fopen("temp.$$$","wb")) == NULL)
{
printf("error. temp file couldn't be created");
return;
}
while (fread(&st,sizeof(data),1,fp))
{
if (feof(fp))
break;
if (st.id != number)
fwrite(&st,sizeof(data),1,temp);
else
pr=0;
}
fclose(fp);
fclose(temp);
if (remove(fn) == -1)
{
printf("error. file couldn't be deleted");
return;
}
if (rename("temp.$$$",fn) == -1)
{
printf("error. file couldn't be renamed");
return;
}
if (pr)
{
printf("\r Oshibka, net zapisi s takim kodom \n ");
return;
}
printf("\r Zapis' udalena \n ");
}
void edit()
{ FILE *fp;
data st,buf;
char buff [MAXX];
int number,size=sizeof(data),pr=1;
int s,n=0;
fpos_t filepos;
float f;
if (file_empty()==1) return;
m4: printf("Vvedite kod zapisi dlya redaktirovaniya ili ENTER, chtobi vernutsja v menu: ");
fflush(stdin);
gets(buff);
if (strlen(buff)<1) return;
number=atoi(buff);
if (number<=0) {printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m4;}
if ((fp = fopen(fn,"rb+")) == NULL)
{
printf("File could not be opened.\n");
return;
}
while(fread(&st,size,1,fp))
{
if (feof(fp)) break;
if (st.id == number)
{
fseek(fp,-1*size,SEEK_CUR);
fgetpos(fp,&filepos);
pr=1;
break;
}
else
pr=0;
}
if (pr)
{
printf("Ishodnaja zapis'\n");
ramka();print_str(st);
printf("Nazhimayte ENTER v tekstovih polyah, esli izmeneniya"
" v nih ne nuzhni\n");
printf("Marka:");
fflush(stdin);
gets(buff);
s=strlen(buff);
if (s!=0)
if (s>MAX) strcpy(st.marka,str_cut(buff,s));
else strcpy(st.marka,buff);
printf("Model:");
fflush(stdin);
gets(buff);
s=strlen(buff);
if (s!=0)
if (s>MAX) strcpy(st.model,str_cut(buff,s));
else strcpy(st.model,buff);
m15: printf("God vipuska:");
fflush(stdin);
gets(buff);
n=atoi(buff);
if (n<=0) {printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m15;}
st.year=n;
m16: printf("Objom dvigatelja v litrah:");
fflush(stdin);
scanf("%f",&f);
if (f<=0){ printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m16;}
else st.engine=f;
m5: printf("Probeg v km:");
fflush(stdin);
gets(buff);
n=atoi(buff);
if (n<=0) {printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m5;}
else st.probeg=n;
m6: printf("Cena v dollarah:");
fflush(stdin);
f=0;
scanf("%f",&f);
if (f<=0){ printf("oshibka vvoda, vvedite polozhitel'noe chislo \n");
goto m6;}
else st.price=f;
if (!check(st))
{
fsetpos(fp,&filepos);
fwrite(&st, sizeof(data),1,fp);
printf("Izmenennaja zapis'\n");
ramka();print_str(st);
}
else
{
printf("Zapis' ne izmenilas' ili uzhe est' zapis', identi4naja ispravlennoy \n");
printf("i poetomu izmeneniya otkloneni\n");
}
}
else printf("\r Oshibka - zapisi s takim kodom net\n");
fclose(fp);
}
void view()
{ FILE *fp;
data st;
if (file_empty()==1) return;
if ((fp = fopen(fn,"rb")) == NULL)
{
printf("File could not be opened.\n");
return;
}
ramka();
while (fread(&st,sizeof(data),1,fp))
{
if (feof(fp))
break;
else
print_str(st);
}
printf("-----------------------------------"
"---------------------------------------------");
fclose(fp);
}
void sort()
{
FILE *fp,*temp;
data s1,s2,st,s3;
data *s4;
int size=sizeof(data),choice;
int a,b;
if (file_empty()==1) return;
int n=get_number();
s4=new data[n];
printf("Sortirovat' po:\n");
printf(" 1 - kodu zapisi ");
printf(" 2 - marke ");
printf(" 3 - modeli ");
printf(" 4 - godu \n");
printf(" 5 - objomu ");
printf(" 6 - probegu ");
printf(" 7 - cene \n");
printf(" 8 - Nazad \n ");
if ((fp=fopen(fn,"rb")) == NULL)
{
printf("error.file does not exist.");
return;
}
if ((temp=fopen("temp.$$$","wb")) == NULL)
{
printf("error. temp file couldn't be created");
return;
}
int i=0;
while (fread(&st,sizeof(data),1,fp))
{
if (feof(fp))
break;
s4[i]=st;
i++;
}
m8: printf("Vvedite Vash vibor: ");
fflush(stdin);
scanf("%d",&choice);
switch(choice)
{
case 1: /*------------По коду записи -----------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ((s4[b-1].id)>(s4[b].id))
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 2: /*-----------по марке--------------------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ( strcmp(s4[b-1].marka,s4[b].marka) >0 )
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 3: /*-----------по модели--------------------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ( strcmp(s4[b-1].model,s4[b].model) >0 )
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 4: /*-----------по году --------------------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ((s4[b-1].year)>(s4[b].year))
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 5: /*----------По объёму---------------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ((s4[b-1].engine)>(s4[b].engine))
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 6: /*----------По пробегу---------------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ((s4[b-1].probeg)>(s4[b].probeg))
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 7: /*---------По цене----------------*/
for(a=1; a<n; a++) for(b=n-1; b>=a; b--)
if ((s4[b-1].price)>(s4[b].price))
{
s3 = s4[b-1];
s4[b-1] = s4[b];
s4[b] = s3;
}
break;
case 8: return;
default: printf("Vvedite 1-8! \n");goto m8;
}
for (i=0; i<n; i++)
fwrite(&s4[i],sizeof(data),1,temp);
fclose(temp);
fclose(fp);
if (remove(fn) == -1)
{
perror("remove");return;
}
if (rename("temp.$$$",fn) == -1)
{
perror("rename"); return;
}
delete []s4;
}
void ramka()
{ printf("------------------------------------"
"--------------------------------------------");
printf("%-4s%-20s%-21s%-8s%-8s%-9s %-9s",
"ID","Marka","Model","God","Objom","Probeg km","Cena $");
printf("------------------------------------"
"--------------------------------------------");
}
int find_max_num()
{
FILE *fp;
data st;
if ((fp = fopen(fn,"rb")) == NULL) {
printf("File could not be opened.\n");
return -1;
}
int max=0;
while (fread(&st,sizeof(data),1,fp)) {
if (feof(fp))
break;
if (st.id>max)
max=st.id;
}
fclose(fp);
return(max);
}
int get_number()
{ FILE *fp;
int fd,n=0;
if ((fp = fopen(fn,"rb")) == NULL)
{
printf("File could not be opened.\n");
return -1;
}
fd=fileno(fp);
n=filelength(fd)/sizeof(data);
fclose(fp);
return(n);
}
void create()
{
FILE *fp;
printf("Vvedite imya fayla bez tochki i rasshireniya: ");
fflush(stdin);
gets(fn);
strcat(fn,".dat");
if ((fp=fopen(fn,"wb")) == NULL) {
printf("Error creating file \n");
getch();
exit(10);
}
fclose(fp);
interface();
}
void open()
{ FILE *fp;
printf("Vvedite imya fayla bez tochki i rasshireniya: ");
fflush(stdin);
gets(fn);
strcat(fn,".dat");
if (!(fp=fopen(fn,"rb")))
{
printf("Error openinig file \n");
getch();
exit(10);
}
fclose(fp);
interface();
}
int check(data st)
{
FILE *fp;
data temp;
int pr=0;
if ((fp = fopen(fn,"rb")) == NULL) {
printf("File could not be opened.\n");
return 0;
}
while ( fread( &temp, sizeof( data ), 1, fp))
{
if (feof(fp))
break;
if (!strcmp(st.marka,temp.marka)
&& !strcmp(st.model,temp.model)
&& (st.engine==temp.engine)
&& (st.year==temp.year)
&& (st.probeg==temp.probeg)
&& (st.price == temp.price))
{
pr=1;
break;
}
} fclose(fp);
return pr;
}
void print_str(data st)
{
printf("%-2d|%-20s|%-20s|%-8d|%-7.1f|%-7d"
"|%9.1f\n",st.id,st.marka,st.model,
st.year,st.engine,st.probeg,st.price);
}
void sost_skl()
{
FILE *fp;
data st;
if (file_empty()==1) return;
float sum=0;
int k=0;
if ((fp = fopen(fn,"rb")) == NULL)
{
printf("File could not be opened.\n");
return;
}
while (fread(&st,sizeof(data),1,fp))
{
if (feof(fp))
break;
else
sum=sum+st.price;
k++;
}
printf("\n------------------------------------"
"--------------------------------------------");
printf("Na sklade %d avto obs4ei stoimost'u %10.1f $ \n",k,sum );
fclose(fp);
printf("------------------------------------"
"--------------------------------------------");
}
char *str_cut(char *buf,int s)
{char *buff;
buff=new char[s];
printf("urezaem do %d simvolov \n",MAX-1);
for (int i=0;i<MAX-1;i++) buff[i]=buf[i];
buff[MAX-1]=buf[s];
printf("%s \n",buff);
return(buff);
}
int file_empty()
{
if (get_number()<=0) {printf(" Oshibka! Fail pust. \n");
return(1);}
else return(0);
}
Соседние файлы в папке Курсовая ИВТ ч2 маркетинг 2-й курс старый стандарт-сдана