#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CHAR
20
// 最大字符
#define MAX_NUM
100
// 单词的最大个数
typedef struct word
//单词的结构体
{
char
en[MAX_CHAR]; // 英文形式
char
no[MAX_CHAR];
//中文形式
}word;
word
s[MAX_NUM]; //单词数组
int
num;
//单词个数
void
read_from_file()
//从文件中读取单词的信息
{
FILE *fp;
int i=0;
fp=fopen("test.txt","rb");
if(!fp)
{
printf("打开文件test.txt失败!\n");
return ;
}
fread(&num,1,sizeof(num),fp); //先读取单词的个数
for(i=0;i<num;i++)
fread(&s[i],1,sizeof(word),fp); //读取每个单词的信息存放到结构体
fclose(fp);//关闭文件
}
static int c=0,d=0;
void
write_to_file()
//从文件中读取单词的信息
{
FILE *fp;
int i=0;
fp=fopen("test.txt","wb+");
if(!fp)
{
printf("打开文件test.txt失败!\n");
return ;
}
fwrite(&num,1,sizeof(num),fp); //先写入单词的个数
for(i=0;i<num;i++)
fwrite(&s[i],1,sizeof(word),fp); //写入每个单词的信息
fclose(fp);//关闭文件
}
void add_infor()
//单词添加
{
int a,i=num;
printf("请输入单词的英文形式:");
scanf("%s",s[i].en);
printf("请输入单词的中文形式:");
scanf("%s",s[i].no);
num++;
printf("您输入的信息为: 英文: %s 中文: %s \n
Enter 0 继续输入;
Enter 1 返回主菜单",s[i].en,s[i].no);
}
void del_infor()//删除单词信息
{
int i=0,j=0;
char
no[MAX_CHAR];
//中文形式
printf("请输入您要删除的单词(中文):");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该中文形式对应的序号
if(strcmp(s[i].no,no)==0)
{
for(j=i;j<num-1;j++)
s[j]=s[j+1];
num--; //数量减少 1
puts("删除成功!");
printf("Enter 4 继续删除;
Enter 1 返回主菜单");
return;
}
printf("没有找到对应的单词!\n");
printf("Enter 4 继续删除;
Enter 1 返回主菜单");
}
void modify_infor()//修改单词信息
{
int i=0;
char
no[MAX_CHAR];
//中文形式
printf("请输入你要修改的单词中文形式:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该中文形式对应的序号
if(strcmp(s[i].no,no)==0)
{
printf("请输入单词正确的英文形式:");
scanf("%s",s[i].en);
printf("请输入此单词正确的的中文形式:");
scanf("%s",s[i].no);
printf("Enter 5 继续修改
Enter 1 返回主菜单");
return;
}
printf("没有这个单词!");
printf("Enter5 继续修改
Enter 1 返回主菜单");
}
void show_infor()
{int
i=0;
printf("单词:
英文
中文
\n");
for(i=0;i<num;i++)
printf("
%10s%10s\n",s[i].en,s[i].no);
printf("
Enter 1 返回主菜单");
}
void search_infor()//查询单词
{
int i=0;
char
no[MAX_CHAR];
//中文形式
system("cls");//清屏
printf("请输入你要查询的单词中文形式:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该中文形式对应的序号
if(strcmp(s[i].no,no)==0)
{
printf("英文形式
中文形式
\n");
printf("%10s%12s\n",s[i].en,s[i].no);
printf("Enter 6 继续查询;
Enter 1 返回主菜单\n");
return;
}
printf("没有这个中文形式!\n");
printf("Enter 6 继续查询
Enter 1 返回主菜单");
}
void CtoE_infor()
{
char b1[20];
int z;
int
i;
i = rand()%num;
printf("【%s】请输入英文单词:",s[i].no);
scanf("%s",b1);
system("cls");//清屏
for(z=0;strcmp(b1,s[i].en)!=0;z=z)
{printf("抱歉,你答错了,请重新输入:");scanf("%s",b1);c=c+1;}
printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;
printf("Enter 2 继续输入
Enter 1 返回主菜单\n",s[i].en,s[i].no);
}
void EtoC_infor()
{
char b1[20];
int z,x=41;
int
i;
i = rand()%num;
printf("【%s】请输入中文意思:",s[i].en);
scanf("%s",b1);
system("cls");//清屏
for(z=0;strcmp(b1,s[i].no)!=0;z=z)
{printf("抱歉,你答错了,请重新输入:");scanf("%s",b1);c=c+1;}
printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;
printf("\n
Enter 3 继续输入
Enter 1 返回主菜单",s[i].en,s[i].no);
}
void chengji_infor()
{
int c,d;
printf("\n
共计输入错误:%d次
**每次扣10分**\n",c);
printf("
共计输入正确:%d次
**每次加10分**\n",d);
printf("
你的总得分为:%d分\n\n",10*d-10*c);
printf("
Enter 1 返回主菜单");
}
void show_main_menu()
{
printf("\n");
printf("
\n");
printf("
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
\n");
printf("
\n");
printf("
背
单
词
系
统
\n");
printf("
\n");
printf("
1、背诵(中to英)
2、背诵(英to中)
\n");
printf("
\n");
printf("
3、添加单词信息
4、删除单词信息
\n");
printf("
\n");
printf("
5、修改单词信息
6、显示单词信息
\n");
printf("
\n");
printf("
7、查询成绩
8、查询单词信息
\n");
printf("
\n");
printf("
9、退出
\n");
printf("
\n");
printf("
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ \n");
//用户界面
printf("\n");
printf("
选择您需要的操作序号(1-9),按回车确认:");
}
int main()
{
int m=0;
char a;
num=0;//初始化单词个数为0
read_from_file(); //读取文件
show_main_menu();
scanf("%d",&m);
printf("\n");
while(m!=9)
{
switch(m)
{
case 1:
CtoE_infor();break;
case 2:
EtoC_infor();break;
case 3:
add_infor();break;
case 4:
del_infor();break;
case 5:
modify_infor();break;
case 6:
show_infor();break;
case 7:
chengji_infor();break;
case 8:
search_infor();break;
case
9:return 0;
}
while (a<10000){scanf("%d",&a);
if(a==0){
write_to_file();
add_infor();}
if(a==1)
{printf("\n");
system("cls");//清屏
write_to_file();
main();
printf("\n");}
if(a==2)
{
write_to_file();
CtoE_infor();}
if(a==3)
{
write_to_file();
EtoC_infor();}
if(a==4)
{
write_to_file();
del_infor();}
if(a==5)
{
write_to_file();
modify_infor();}
if(a==6)
{
write_to_file();
search_infor();}
else
{break;}
}
write_to_file();//写入文件
}
printf("
***************谢谢使用背单词系统!欢迎再次使用!***************
\n");
getchar();
return 1;
}