Ребята вот почти закончил работу над словарём, и решил код разместить здесь, чтобы вы помогли мне сделать всё грамотно.Прошу строго не судить, я новичок в программировании.Программа написана на чистом Си.
Приветствую любые пожелания и предложения, и если я что-то не так сделал( что весьма вероятно ), прошу показать, как надо правильно.
Задача ставилась такая: сделать простой словарь, с линейным поиском слов, с базой данных в виде текстового файла и без алфавитной сортировки.
Словарь должен:
1.Находить заданное слово.
2.Показывать весь список слов из базы.
3.Добавлять новые слова.
4.Удалять слова.
Код:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct newWord {
char word[15];
char translate[15];
};
int display() {
system("color e");
system("title Slovar");
printf("+======================================+\n");
printf("| |\n");
printf("| Proshu wybrat punkt: |\n");
printf("| |\n");
printf("| 1.Nayti slowo |\n");
printf("| 2.Pokazat vse slowa |\n");
printf("| 3.Dobavic slowo |\n");
printf("| 4.Udalic slowo |\n");
printf("| 5.Wyjti |\n");
printf("| |\n");
printf("+======================================+\n");
}
int search() {
FILE *pDb;
int n = 0;
char c, word[15], *memArray, *macrostr;
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Poisk slowa |\n");
printf("| |\n");
printf("+======================================+\n");
pDb = fopen( "data/database.txt" , "r" );
if( pDb ) {
while( c != EOF ) {
c = fgetc( pDb );
n ++;
}
fclose( pDb );
}
else {
perror("\nFile error:");
fclose( pDb );
}
printf("\n* Vvedi slowo dla poiska: ");
fflush(stdin);
scanf("%s",word);
pDb = fopen( "data/database.txt" , "r" );
if( pDb ) {
memArray = (char*)malloc(n*sizeof(char));
if( !memArray ) {
perror("\n* Memory error:");
fclose( pDb );
exit;
}
else {
printf("\n+======================================+\n\n");
while( fgets( memArray, n, pDb ) ) {
if( macrostr = strstr( memArray, word ) )
printf(" > %s", macrostr);
}
printf("\n+======================================+\n");
fclose( pDb );
free( memArray );
select();
}
}
else {
perror("\n* Database error:");
fclose( pDb );
exit;
}
}
int select() {
int option;
do {
printf("\n* Proshu wybrat punkt: ");
fflush(stdin);
scanf("%i" , &option );
system("cls");
display();
}
while( option<=0 || option>5 );
switch( option ) {
case 1: search(); break;
case 2: list(); break;
case 3: addWord(); break;
case 4: deleteWord(); break;
case 5: exit; break;
default: printf("\n*** Indefined error! ***"); exit;
}
}
int list() {
FILE *pDb;
int n = 0;
char c, *memArray;
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Spisok vseh slow |\n");
printf("| |\n");
printf("+======================================+\n");
pDb = fopen( "data/database.txt" , "r" );
if( pDb ) {
while( c != EOF ) {
c = fgetc( pDb );
n ++;
}
fclose( pDb );
}
else {
perror("\nFile error:");
fclose( pDb );
}
pDb = fopen( "data/database.txt" , "r" );
if( pDb ) {
memArray = (char*)malloc(n*sizeof(char));
if( !memArray ) {
perror("\n* Memory error:");
fclose( pDb );
exit;
}
else {
printf("\n+======================================+\n\n");
while( fgets( memArray, n, pDb ) )
printf(" > %s", memArray);
printf("\n+======================================+\n");
fclose( pDb );
free( memArray );
select();
}
}
else {
perror("\n* Database error:");
fclose( pDb );
exit;
}
}
int addWord() {
FILE *pDb;
struct newWord base;
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Dobavlenie slowa |\n");
printf("| |\n");
printf("+======================================+\n");
printf("\n* Vvedite slowo: ");
fflush(stdin);
gets( &base.word );
printf("* Vvedite ego perevod: ");
fflush(stdin);
gets( &base.translate );
pDb = fopen( "data/database.txt" , "a" );
if( pDb ) {
if( fprintf( pDb, "%-15s %-15s\n" , base.word, base.translate ) > 0 ) {
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Slowo dobavleno |\n");
printf("| |\n");
printf("+======================================+\n");
}
else {
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Slowo nie dobavleno |\n");
printf("| |\n");
printf("+======================================+\n");
fclose( pDb );
exit;
}
fclose( pDb );
}
else {
perror("\n* Adding error:");
fclose( pDb );
}
select();
}
int deleteWord() {
FILE *pDb, *out;
int n = 0, flag = 0;
char c, word[15], *memArray, *string;
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Udalenie slowa |\n");
printf("| |\n");
printf("+======================================+\n");
pDb = fopen( "data/database.txt" , "r+" );
if( pDb ) {
while( c != EOF ) {
c = fgetc( pDb );
n ++;
}
fclose( pDb );
}
else {
perror("\n* File error:");
fclose( pDb );
}
fflush(stdin);
printf("\n* Vvedite slowo dla udalenia: ");
scanf("%s",word);
pDb = fopen( "data/database.txt" , "r+" );
out = fopen( "data/out.txt" , "w" );
if( !out ) {
perror("\n* Can't create file:");
exit;
}
if( pDb ) {
memArray = (char*)malloc(n*sizeof(char));
if( !memArray ) {
perror("\n* Memory error:");
fclose( pDb );
exit;
}
else {
while( string = fgets( memArray, n, pDb ) ) {
if( strstr( memArray, word ) == 0 ) {
fprintf( out, "%s", string );
system("cls");
display();
printf("\n+======================================+\n");
printf("| |\n");
printf("| Slowo niuedaleno |\n");
printf("| |\n");
printf("+======================================+\n");
}
else {
system("cls");
display();
continue;
}
}
fclose( pDb );
fclose( out );
if( remove( "data/database.txt" ) != 0 ) {
perror( "\n* Error deleting file" );
exit(1);
}
else {
if ( rename( "data/out.txt", "data/database.txt" ) )
exit(1);
else {
free( memArray );
list();
}
}
}
}
else {
perror("\n* Database error:");
fclose( pDb );
exit;
}
}
int main()
{
display();
select();
return 0;
}
Для работы нужно создать папочку data а в ней файлик database.txt.Слова можно добавить через программу с помощью 3его пункта, а можно и в ручную загнать в файл в виде: zdes here
ya i'm
P.S У меня стоит windows xp и я не знаю работает ли такая команда как system(); в unix(