Курсовая работа: Работа с языками С и С++
#include "my.
h"
void nameSort (char *fileName) {
FILE *f;
int n=1, i,l,k=0;
char a [51];
char b [51];
char name [10];
if (! (f=fopen (fileName,"rb+")))
{
while (getchar ()! ='\n')
continue;
do{
readName (name);
if (name [0] =='\0')
return;
printf ("Невозможно открыть файл c именем '%s'. \n",name);
}while (! (f=fopen (name,"rb+")));
system ("clear");
printf ("Файл с именем '%s' отсортирован", name);
}
else
printf ("Файл с именем '%s' отсортирован", fileName);
while (n==1) {
n=0;
fseek (f,0,SEEK_SET);
while (! feof (f)) {
fread (a,1,51,f);
fread (b,1,51,f);
if (feof (f))
break;
if ( (strcmp ( (a+5), (b+5))) >0) {
fseek (f,-102,SEEK_CUR);
fwrite (b,51,1,f);
fwrite (a,51,1,f);
n=1;
}
fseek (f,-51,SEEK_CUR);
}
}
fclose (f);
return;
}
“ del. cpp ”
Функция del () - удаляет одну запись
по её номеру
Принимаемые значения: Указатель на указатель на первый элемент,
количество считанных элементов
Возвращаемые значения: нет
#include "my.
h"
void del (struct e **head, int n) {
struct e *k;
k=*head;
int d;
if (n==1) {
printf ("Запись удалена");
return;
}
printf ("Введите номер удаляемой записи\n");
while (! scanf ("%d",&d)) {
printf ("Неверное число\n");
while (getchar ()! ='\n')
continue;
}
if ( (d>n) || (n<=0)) {
printf ("Такой записи нет");
return;
}
while (k->number! =d)
k=k->next;
if (d==1) {
*head=k->next;
}
else
k->pre->next=k->next;
if (d! =n)
k->next->pre=k->pre;
free (k);
while (k->next! =NULL) {
k=k->next;
k->number--;
}
printf ("Запись удалена");
return;
}
“ readName. cpp ”
Функция readName () - вспомогательная
функция. Она используется в функциях работающих с файлами. Считывает имя файла с
клавиатуры и проверяет его корректность.
Принимаемые значения: Указатель на строку, в которую будут записаны
считанные данные
Возвращаемые значения: нет
#include"my.
h"
void readName (char* name)
{char i, c;
printf ("Введите имя файла (не более 10 символов) \nЕсли
вы передумали, просто нажмите клавишу 'Ввод'\n");
c=1;
while (c==1) else
return;
}
“ f2s. cpp ”
Функция f2s
() - вспомогательная функция. Она используется в функциях сортировки. Предназначена
для обмена местами двух соседних элементов в связном списке.
Принимаемые значения: указатель на первый элемент, указатель
на второй элемент, указатель на указатель на первый элемент
Возвращаемые значения: нет
#include "my.
h"
void f2s (struct e *f, struct e *s, struct e
**head) {
int n;
if (f! =*head)
f->pre->next=s;
else
*head=s;
if (s->next! =NULL)
s->next->pre=f;
s->pre=f->pre;
f->pre=s;
f->next=s->next;
s->next=f;
return;
}
“Makefile”
Файл необходимый для работы утилиты make
2: my. h vvod. o vyvodAll. o vyvodOne. o 2. cpp max3. o min4. o buble. o insertion. o f2s. o readFileB. o writeFileB. o nameSort. o del. o readName. o readFileBC. o writeFileBC. o vvodC. o
g++ - o 2 2. cpp vvod. o vyvodAll. o vyvodOne. o max3. o min4. o insertion. o buble. o f2s. o writeFileB. o readFileB. o nameSort. o del. o readName. o readFileBC. o writeFileBC. o vvodC. o
vvod. o: my. h vvod. cpp
g++ - c vvod. cpp
vvodC. o: my. h vvodC. cpp
g++ - c vvodC. cpp
vyvodAll. o:
my. h vyvodAll. cpp
g++ - c vyvodAll. cpp
vyvodOne. o:
my. h vyvodOne. cpp
g++ - c vyvodOne. cpp
max3. o: my. h max3. cpp
g++ - c max3. cpp
min4. o: my. h min4. cpp
g++ - c min4. cpp
buble. o: my. h buble. cpp f2s. cpp
g++ - c buble. cpp
insertion. o: my. h insertion. cpp f2s. cpp
g++ - c insertion. cpp
f2s. o: my. h f2s. cpp
g++ - c f2s. cpp
readFileB. o: my. h readFileB. cpp
g++ - c readFileB. cpp
writeFileB. o: my. h writeFileB. cpp
g++ - c writeFileB. cpp
readFileBC. o: my. h readFileBC. cpp
g++ - c readFileBC. cpp
writeFileBC. o: my. h writeFileBC. cpp
g++ - c writeFileBC. cpp
nameSort. o: my. h nameSort. cpp
g++ - c nameSort. cpp
del. o: my. h del. cpp
g++ - c del. cpp
readName. o: my. h readName. cpp
g++ - c readName. cpp
clean:
rm - rf *. o 2
В процессе написания программы часть функций была переведена
на язык С++. Ниже представлены листинги этих функций написанные на языке С. Свойства
этих функций такие же как и у их аналогов, поэтому я не буду делать к ним описание,
а просто приведу их исходный код.
“readFileBC. с”
#include "my.
h"
void readFileBC (struct
e **head, char *fileName, int *n) {
int i;
char name [10];
struct e *k;
*head= (struct e*)
malloc (sizeof (struct e));
k=*head;
FILE *f;
if (! (f=fopen (fileName,"rb")))
{
while (getchar ()!
='\n')
continue;
do{
readName (name);
if (name [0] =='\0')
return;
printf ("Невозможно открыть файл c именем '%s'. \n",name);
}while (! (f=fopen
(name,"rb")));
system ("clear");
printf ("Файл
с именем '%s' прочитан", name);
}
else
printf ("Файл
с именем '%s' прочитан", fileName);
k->pre=NULL;
(*n) =0;
while (1) {
fread (k->year,1,5,f);
fread (k->name,1,40,f);
fread (& (k->a),4,1,f);
fread (& (k->db),2,1,f);
fread (& (k->p),2,1,f);
(*n) ++;
k->I=k;
k->number=*n;
if ( (fread (&i,4,1,f)))
{
k->next= (struct
e*) malloc (sizeof (struct e));
k->next->pre=k;
k=k->next;
}
else{
k->next=NULL;
break;
}
fseek (f,-4,SEEK_CUR);
}
fclose (f);
return;
}
“vvodC. с”
#include "my.
h"
int vvodC (struct e
*k, int n) {
struct e *q;
q=k;
int i=0,c;
char y;
while ( (getchar ())!
='\n')
continue;
if (n! =0) {
while (k->next!
=NULL)
k=k->next;
k->next=malloc
(sizeof (struct e));
k=k->next;
k->pre=q;
}
for (; y! ='y'; n++)
{
printf ("Введите
год БП №%d\n",n+1);
c=1;
while (c==1) k->year [i] <48)
printf ("Введите название БП №%d\n",n+1);
c=1;
while (c==1)
printf ("Введите количество разьёмов БП №%d\n",n+1);
while (! scanf
("%d",&k->a))
while (getchar ()!
='\n')
continue;
printf ("Введите мощность БП №%d\n",n+1);
while (! scanf
("%hd",&k->p))
while (getchar ()!
='\n')
continue;
while ( (getchar ())!
='\n')
continue;
printf ("Закончить
(y/any key) \n");
scanf ("%c",&y);
while ( (getchar ())!
='\n')
continue;
k->this=k;
k->number=n+1;
if (y=='y') {
k->next=NULL;
}
else{
k->next=malloc
(sizeof (struct e));
k->next->pre=k;
k=k->next;
}
}
system ("clear");
printf ("Ввод
закончен");
return n;
}
“writeFileBC. с”
#include "my. h"
void writeFileBC (struct e *k, char *fileName)
{
FILE *f;
int i;
char name [11];
if (! (f=fopen (fileName,"wb"))) {
while (getchar ()! ='\n')
continue;
do{
readName (name);
if (name [0] =='\0')
return;
printf ("Невозможно создать файл
c именем '%s'.
\n",name);
}while (! (f=fopen (name,"wb")));
system ("clear");
printf ("Файл с именем '%s' создан",
name);
}
else
printf ("Файл с именем '%s' создан",
fileName);
while (1) {
fwrite (& (k->year),5,1,f);
fwrite (& (k->name),40,1,f);
fwrite (& (k->a),sizeof (int),1,f);
fwrite (& (k->p),sizeof (short),1,f);
if (k->next==NULL)
break;
else
k=k->next;
}
fclose (f);
return;
}
Вместе с исходным кодом программы прилагается
файл такого содержания
год |
название |
разъёмы |
шум |
мощность |
2009 |
Thermaltake EVO_Blue 650W (W0307RU) |
24 |
22 |
650 |
2008 |
ETG ESP-550X-S 550W |
24 |
30 |
550 |
2009 |
FSP Group ATX-600PNR 600W |
20 |
27 |
600 |
2009 |
Antec HCG-620 620W |
20 |
22 |
620 |
2010 |
Thermaltake TR2 RX 750W |
24 |
25 |
750 |
Заключение
Результатом выполнения данной работы является
информационно-поисковый справочник "Блок питания". В нём были реализованы
следующие функции:
Страницы: 1, 2, 3, 4 |