供参考:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
typedef struct word
{
char danci[64];
char jieshi[64];
int frequency;
struct word* next;
}Word;
int N = 0, Min = 0;
Word* input_file()
{
char danci[64], jieshi[64];
int frequency;
Word* head = NULL, * p = NULL, * p1 = NULL;
FILE* fp;
if ((fp = fopen("danciku.txt", "r")) == NULL)
{
printf("danciku.txt文件不存在.");
}
else{
Min = INT_MAX;
while (1)
{
if (fscanf(fp, "%s %s %d\n", danci, jieshi, &frequency) != 3) break;
p = (Word*)malloc(sizeof(Word));
if (!p) {
printf("申请内存空间失败!");
break;
}
p->next = NULL;
strcpy(p->danci, danci);
strcpy(p->jieshi, jieshi);
p->frequency = frequency;
if (Min > frequency) Min = frequency;
if (head == NULL)
head = p;
else
p1->next = p;
p1 = p;
N++;
}
fclose(fp);
}
return head;
}
void print(Word* p)
{
Word* head = p;
while (head != NULL)
{
printf(" %s %s\n", head->danci, head->jieshi);
head = head->next;
}
}
void input(Word** p)
{
char ch;
int n = 0;
Word* head = NULL, * q = NULL;
FILE* fp;
if ((fp = fopen("danciku.txt", "a")) == NULL)
{
printf("danciku.txt 文件打开失败!");
}
else{
for (head = NULL, q = (*p); q != NULL; head = q, q = q->next);
do{
printf("请输入英语单词和其解释(中间用空格隔开):\n");
q = (Word*)malloc(sizeof(Word));
if (!q) {
printf("申请内存空间失败!");
break;
}
q->next = NULL;
scanf("%s %s", q->danci, q->jieshi);
q->frequency = 0;
if (head == NULL)
(*p) = q;
else
head->next = q;
head = q;
fprintf(fp, "%s %s %d\n", q->danci, q->jieshi, q->frequency);
n++;
printf("你已成功录入了%d个单词,目前共%d个单词\n", n, N + n);
printf("\n是否继续录入单词,回答Y or N。\n");
getchar();
scanf(" %c", &ch);
} while (ch == 'Y' || ch == 'y');
fclose(fp);
N += n;
}
}
void translate(Word *p)
{
FILE* fp;
char danci[64];
int a[100], x, number = 0;
int j, i, n, min, k;
Word* head = p;
printf("\t请输入你要检测的单词数量:");
getchar();
scanf("%d", &x);
srand((unsigned int)time(NULL));
for (i = 0; i < 100; i++)
a[i] = i;
i = 0; min = Min;
if (x > N){
printf("\t对不起,没那么多单词。\n");
}
else{
while (1)
{
n = rand() % N;
if (a[n] != -1)
{
for (j = 0, head = p; j < n; j++)
head = head->next;
if (head->frequency <= min)
{
printf("\n\t中文:[ %s ] ,",head->jieshi);
printf("请输入对应单词: ");
getchar();
scanf("%s", danci);
if (strcmp(danci, head->danci) == 0)
{
printf("\t恭喜你,答对了。\n\t该单词你已获%d分\n\n", ++head->frequency);
number++;
if (Min >= head->frequency-1) Min = head->frequency;
}
else{
printf("\t抱歉,你答错了\a\n\t该单词你已获%d分\n\n", --head->frequency);
if (Min > head->frequency) Min = head->frequency;
}
a[n] = -1;
if ((++i) == x)
{
printf("\t你本次共答对%d道题\n", number);
break;
}
}
else
continue;
}
else {
if (head->frequency > min)
min++;
}
}
if ((fp = fopen("danciku.txt", "w")) == NULL)
{
printf("danciku.txt 文件打开失败!");
}
else {
head = p;
while (head)
{
fprintf(fp, "%s %s %d\n", head->danci, head->jieshi, head->frequency);
head = head->next;
}
fclose(fp);
}
}
}
void main()
{
int n=1;
Word* head = input_file();
while (n)
{
printf("\n\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
printf("\t***********************************************\n");
printf("\t** **\n");
printf("\t**");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
printf(" 1、单词录入");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf(" 2、单词展示 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
printf("**\n");
printf("\t** **\n");
printf("\t**");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf(" 3、单词检查");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
printf(" 4、退出系统 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
printf("**\n");
printf("\t** **\n");
printf("\t***********************************************\n");
printf(" 请选择您需要的操作序号<1-4>,按回车结束:");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
scanf("%d", &n);
switch (n)
{
case 1:input(&head); break;
case 2:print(head); break;
case 3:translate(head);break;
case 4:
n = 0;
break;
default:
printf("\t你输入了错误,请重新输入。");
break;
}
}
}