英语单词小助手

1.题目分析
单词小助手,要求完成以下任务:

  1. 改写程序为良好程序风格(文档注释,函数注释,语句注释)。
  2. 将单词测试中的功能完善,可针对做错的单词重复记忆。
  3. 查询单词的功能添加英文词查询,中文查询的功能完善(考虑如何显示同样中文意义,不同的英文单词)
    提高要求:
  4. 可将程序中的不足(如数据验证,排名功能)等根据自己的能力与理解完成。

2.关键算法构造
程序流程总图
在这里插入图片描述

用户分数排序盒图

在这里插入图片描述

判断是否输入是汉字盒图(其他判断类似)

在这里插入图片描述

3.程序实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CHAR  20  // 最大字符
#define MAX_NUM  200  // 单词的最大个数
struct word//单词的结构体
{
	char  en[MAX_CHAR]; // 英文形式
	char  ch[MAX_CHAR];   //中文形式
} s[MAX_NUM]; //单词数组

struct sco//用户的结构体
{
	char  id[MAX_CHAR]; // id 
	int  sc;   //成绩 
} user[MAX_CHAR]; //用户 
struct word w[MAX_NUM];//定义一个错误单词的结构体数组
int   m;
int   num; //单词个数
int   wnum;//记录错误单词的总数
int   unum;//记录用户的个数
int select = 1;//select 为是否退出系统的标记
int d = 0, c = 0;//声明全局变量,记录用户答对以及回答错误的单词个数,以便计算分数
//帮助查询函数
void help()
{
	printf("\n本系统主要实现英语单词学习的功能。用户可对词典文件中的单词进行预览,增删改查。");
	printf("\n同时还可进行中英、英中测试。本系统还提供了测试成绩的显示功能。");
	printf("\n主要功能:。");
	printf("\n1.词库维护:可以增加、删除、修改和中文查询单词,英文查询单词。");
	printf("\n2.单词预览:将文件中的单词在屏幕上显示中英文词义。");
	printf("\n3.单词背诵(中英):随机显示中文,用户需输入英文,正确得十分,错误扣十分。");
	printf("\n4.单词背诵(英中):随机显示英文,用户需输入中文,正确可得十分,错误扣十分。");
	printf("\n5.成绩查询:显示中英、英中单词检测的成绩与总成绩。");
	printf("\n6.写错的词存入错词本,用户可以查看加强记忆,也可以将答错的词可以从单词本删除");
	printf("\n同时还可进行中英、英中测试。本系统还提供了测试成绩的显示功能。");
	printf("\n");
	printf("\n");

}

int getRealInput() {
	char c;
	int flag = 0;
	do
	{
		scanf("%c", &c);
		if (c == '1' || c == '0')
		{
			flag = 0;
		}
		else
		{
			flag = 1;
		}
	} while (flag);
	return c - 48;
}
//从单词库文件中读取单词的信息
void  readfile()
{
	FILE *fp;//声明文件
	int i = 0;//定义变量
	fp = fopen("data.txt", "r");//打开存放单词的·文件库
	if (!fp)//如果文件不存在
	{
		printf("\n打开文件data.txt失败!");

	}
	while (fscanf(fp, "%s %s ", s[i].en, s[i].ch) == 2)//读取下一个单词
	{
		i++;//计数器+1
	}
	num = i;//记录单词总数
	if (0 == i)
		printf("\n文件为空,请选择词典维护增加词条!");
	else
		printf("\n");
	fclose(fp);//关闭文件
}

//向文件写入单词的函数
void  writefile()
{
	FILE *fp;//声明文件
	int i = 0;//定义变量
	fp = fopen("data.txt", "w");//打开文件
	if (!fp)//如果文件不存在
	{
		printf("\n打开文件data.txt失败!");
	}
	for (i = 0; i < num; i++)//循环遍历写入单词
	{
		fprintf(fp, "\n%s %s ", s[i].en, s[i].ch);//fprintf(可以从一个文件流中格式化写入数据)
	}
	printf("\n");
	fclose(fp);//关闭文件
}

//读取错题库文件
void  readwrongfile()
{
	FILE *fp;//声明文件
	int i = 0;//定义变量 	
	fp = fopen("wrongword.txt", "r");//打开存放记错单词文件库
	if (!fp)//如果文件不存在
	{
		printf("\n打开文件wrongword.txt失败!");

	}
	while (fscanf(fp, "%s %s ", w[i].en, w[i].ch) == 2)//读取下一个单词
	{
		i++;//计数器+1
	}
	wnum = i;//记录单词总数
	if (0 == i)
		// printf("\n文件为空,棒棒哒,你还没有记错单词哟");
		printf("\n");
	else
		printf("\n");
	fclose(fp);//关闭文件
}

void sort()/*按字典排序*/
{
	int i, j;
	char temp[MAX_CHAR];
	for (i = 0; i < num - 1; i++)
	{
		for (j = num - 1; j > i; j--)
			if (strcmp(s[j - 1].en, s[j].en) > 0)
			{
				strcpy(temp, s[j - 1].en);
				strcpy(s[j - 1].en, s[j].en);
				strcpy(s[j].en, temp);
				strcpy(temp, s[j - 1].ch);
				strcpy(s[j - 1].ch, s[j].ch);
				strcpy(s[j].ch, temp);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值