”单词小助手“个人体会

本程序具有单词词库管理、单词词库预览、单词背诵、背诵成绩查询功能,目前版本仍然存在众多问题。

程序代码如下:

/*
作者: Key-不会挖洞的猫鼬 
版本: 20170317.5.07
文件名:wordaide 
创建时间: 2017.3.17
主要功能: 单词词库管理,单词背诵,单词预览,单词背诵成绩展示 
修改日期:2017.3.19
修改内容:单词强化记忆
问题漏洞:本版仍存在不少问题,单词强化功能不达标,单词背诵(中英)存在漏洞,同一中文意思的单词
         测试过程中,必须输入对应下标的英文形式,否则判断为错误,另外,通过修改单词信息功能可使
		 词库出现英文相同的单词。 
*/

#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];                        //单词数组
int   num;                         //单词个数
int select = 1;                      //select 为是否退出系统的标记
int wordture = 0,wordfalse = 0;     //wordture、wordfalse为正确、错误次数 

//帮助
void help()
{
    printf ("\n本系统主要实现英语单词学习的功能。用户可对词典文件中的单词进行预览,增删改查。");
	printf ("\n同时还可进行中英、英中测试。本系统还提供了测试成绩的显示功能。");
}

//从文件中读取单词的信息(只读)
void  readfile()
{
   FILE *fp;                      //用于打开文件 
   int i = 0;
   fp = fopen("data.txt","r");       //打开data.txt文档(只读方式打开) 
   if (!fp)
   {
	   printf("\n打开文件data.txt失败!");

   }
   while (fscanf(fp,"%s %s",s[i].en,s[i].ch) == 2)
   {
	   i ++;
   }
   num = i;
   if (0 == i)
	{
	   printf ("\n文件为空,请选择词典维护增加词条!");
	} 
   else
    {
	   printf ("\n");
    } 
   fclose (fp);             //关闭data.txt文档 
}

//从文件中读取单词的信息
void  writefile()
{
   FILE *fp;
   int i = 0;
   fp = fopen("data.txt","w");              //打开data.txt文档(打开只写文件) 
   if(!fp)
   {
	   printf ("\n打开文件data.txt失败!");
   }
   for(i = 0;i < num;i ++)                   //i<单词个数(num)
   {
	   fprintf (fp,"\n%s %s ",s[i].en,s[i].ch);    //读取单词中英文
   }
   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);
			}
		} 
	}
}
 
//添加单词信息
void add()
{
   int i = num,j,flag = 1;
   while (flag)
	{
		flag = 0;
		printf ("\n请输入单词的英文形式:");
		scanf ("%s",s[i].en);
		for(j = 0;j < i;j ++)
			if (strcmp(s[i].en,s[j].en) == 0)
			{
				printf ("已有该单词,请检查后重新录入!\n");
				flag = 1;
				break;                        //如有重复立即退出该层循环,提高判断速度
			}  
         }
   printf ("\n请输入单词的中文形式:");
   scanf ("%s",s[i].ch);
   num ++;
   printf ("\n您输入的信息为: 英文: %s 中文: %s  ",s[i].en,s[i].ch);
   sort();                                 //按字典排序
}

//删除单词信息
void del()
{
	int i = 0,j = 0;
	char  en[MAX_CHAR];                     //英文形式
  	printf ("\n请输入你要删除的单词英文形式:");	
	scanf ("%s",en);
	for (i = 0;i < num;i ++)                     //先找到该英文形式对应的序号
	    if (strcmp(s[i].en,en) == 0)      
		{
			for (j = i;j < num - 1;j ++)
				 s[j]=s[j + 1];
			num --;                        //数量减少 1
			return;
		}
     printf ("\n没有这个单词!");
 
}

//修改单词信息
void modify()
{
	int i = 0,choose = 0,flag = 1;          //chooses代表选项标识,flag代表是否找到单词
	char  en[MAX_CHAR];               //英文形式
	while (flag || choose)
	{
		printf ("\n请输入你要修改的单词英文形式:");	
		scanf ("%s",en);
		for (i = 0;i < num;i ++)           //先找到该英文形式对应的序号
		{ 
			if (strcmp(s[i].en,en) == 0)
			{
				printf ("\n请输入单词正确的英文形式:");
				scanf ("%s",s[i].en);
				
				printf ("\n请输入此单词正确的的中文形式:");
				scanf ("%s",s[i].ch);
				
				printf ("\n继续修改请选1,返回上一级请选0:");
				scanf ("%d",&choose);
				if( choose == 0)
				{ 
				 return;
			        }	
			}
		   flag = 0;
		} 		      
	}
  if (!flag)	
  { 
    printf ("\n没有这个单词!");
  } 
}

//单词预览
void show()
{
	int  i = 0;
	printf ("\n单词:    英文        中文         ");
	for (i = 0; i < num; i ++)
	{ 
	printf ("\n          %-12s%-12s",s[i].en,s[i].ch);
    } 
}

//中文形式查询
void searchch()
{
	int i = 0, choose = 0, flag = 1,x=0;
	char  ch[MAX_CHAR];                  //中文形式
 	while (choose || flag)
	{
    	    printf ("\n请输入你要查询的单词中文形式:");	
	    scanf ("%s",ch);
	    for (i = 0;i <= num;i ++)              //先找到该中文形式对应的序号
		{
      	              if (strcmp(s[i].ch,ch) == 0)
	 		{	
			  if (x == 0)                   //x用于判断是否输出 “英文形式  中文形式 ” 
			  {
		            printf ("\n英文形式             中文形式        ");
		            x = 1 ;
		          }
	                   printf ("\n   %-12s%12s",s[i].en,s[i].ch);
		        }
		}
		flag = 0;
		if (!flag && x == 0)	
                  { 
                       printf ("\n没有这个单词!");
                  }
		printf ("\n继续查询请选1,返回上一级请选0:");
		scanf ("%d",&choose);
		if (choose == 0) 
		  {
		     return;
		  }
		else
		  {
		   	x = 0;      //继续查询时让x值返回0 
		  }	
	}
}

//英文形式查询 
void searchen()
{
	int i = 0, choose = 0, flag = 1;
	char  en[MAX_CHAR];                  //英文形式
 	while (choose || flag)
	{
    	printf ("\n请输入你要查询的单词英文形式:");	
	scanf ("%s",en);
    	for (i = 0;i < num; i ++)              //先找到该英文形式对应的序号
	    if (strcmp(s[i].en,en) == 0)
		{		
		    printf ("\n英文形式             中文形式        ");
	            printf ("\n   %-12s%12s",s[i].en,s[i].ch);
		    printf ("\n继续查询请选1,返回上一级请选0:");
		    scanf ("%d",&choose);
		    if (choose == 0) 
			{
			 return;
			}	
		}
	    flag = 0;
	}
       if (!flag)	
         { 
           printf ("\n没有这个单词!");
         } 
}

//中译英测试
void zytest()
{	
	char b1[20];
	int z;
        int choose=1;
	int   i;
	int test;

	while (choose)
	{ 
		i = rand() % num;
		printf ("\n【%s】请输入英文单词:",s[i].ch);
		scanf ("%s",b1);
		for (z = 0;strcmp(b1,s[i].en) != 0;z ++)
		{
			printf ("\n输入错误!!请重新输入:");
			scanf ("%s",b1);
			wordfalse += 1;
			test = i;
		}
		printf ("\n恭喜你,回答正确,加10分!\n\n");
		wordture += 1;
		printf ("\n继续测试请选1,返回上一级请选0:");
		scanf ("%d",&choose);
		if (choose==0)
		{
		  i = test ;	 
		  printf ("\n【%s】请输入英文单词:",s[i].ch);
		  scanf ("%s",b1);
		  for (z = 0;strcmp(b1,s[i].en) != 0;z ++)
		    {
			  printf ("\n输入错误!!请重新输入:");
			  scanf ("%s",b1);
		  	  wordfalse += 1;
			  test  = i;
		    }  
		  printf ("\n恭喜你,回答正确,加10分!\n\n");
		  wordture += 1;
	  	  printf ("\n继续测试请选1,返回上一级请选0:");
		  scanf ("%d",&choose);
		  return;
		}	    
	}
}

//英译中测试
void yztest()
{
	char b1[20];                    //用户输入的中文
	int z,x = 41;
	int choose = 1;
	int  i;
	while (choose)
	{
		i = rand()%num;
    	printf ("【%s】请输入中文意思:",s[i].en);
    	scanf ("%s",b1);
    	for (z = 0;strcmp(b1,s[i].ch) != 0;z = z)
		{
		  printf ("输入错误!!请重新输入:");
		  scanf ("%s",b1);
		  wordfalse += 1;
		}
	    printf ("\n恭喜你,回答正确,加10分!\n\n");
		wordture += 1;
	    printf ("\n继续测试请选1,返回上一级请选0:");
	    scanf ("%d",&choose);
	    if (choose == 0)
	      { 
		   return;
	      }	
	}
}

//成绩列表
void list()
{
	printf ("\n	共计输入错误:%d次	**每次扣10分**\n",wordfalse);   //wordfalse为错误次数 
	printf ("	共计输入正确:%d次	**每次加10分**\n",wordture);   //wordture为正确次数 
	printf ("	你的总得分为:%d分\n\n",10 * wordture - 10 * wordfalse); 

}

//词典维护
void maintain()
{
        int choose;                       //维护功能选择
	printf ("   ------------------\n");
	printf ("   1.增加单词\n");
	printf ("   2.修改单词\n");
	printf ("   3.删除单词\n");
	printf ("   4.按照中文查询单词\n");
	printf ("   5.按照英文查询单词\n");
	printf ("   6.退出本菜单\n");
	printf ("   ------------------\n");
	while (1)
	{   
		
		printf (" \n请输入维护功能编号:");
		scanf ("%d",&choose);
		switch (choose)
		{
		 case 1:
			     add();               // 增加单词函数 
				 writefile();
				 break;
		 case 2:
			     modify();            //修改单词函数 
				 writefile();
				 break;
		 case 3:
			     del();
				 writefile();         //删除单词函数 
				 break;
		 case 4:
	             searchch();            //查询单词函数 
				 break;
		 case 5:
	             searchen();            //查询单词函数 
				 break;		 
	  	 case 6:  return;              //返回用户界面 
		default: 
		        printf ("\n请在1-5之间选择");
		}
	}
}

//用户界面
void menu()
{  
	int item; 
	printf ("\n");	
	printf ("              *********************************************************\n");
	printf ("              #                                                       #\n");
	printf ("              #                 英语单词小助手                        #\n");
	printf ("              #                                                       #\n");
	printf ("              #                 版本 : 20170317.5.07                 #\n");
	printf ("              #                                                       #\n");
	printf ("              *********************************************************\n");
	printf ("              #                                                       #\n");
	printf ("              #       0.词库维护          1.单词预览                  #\n");
	printf ("              #                                                       #\n");
	printf ("              #       2.单词背诵(中英)    3.单词背诵(英中)            #\n");
	printf ("              #                                                       #\n");
	printf ("              #       4.查询成绩          5.帮助                      #\n");
	printf ("              #                                                       #\n");
	printf ("              #       6.退出系统                                      #\n");
	printf ("              #                                                       #\n");
	printf ("             **********************************************************\n");  
	printf ("\n");
	printf ("                    请选择您需要的操作序号(0-5)按回车确认:");
	
	scanf ("%d", & item);
	printf ("\n");
        readfile ();
	switch (item)
	{
	 case 0:
		      maintain();            //词库维护函数 
			  break;
	 case 1:
		      show();                //单词预览函数 
			  break; 
	 case 2:
		      zytest();              //单词背诵(中英)函数 
			  break;
	 case 3:
		      yztest();              //单词背诵(英中)函数 
			   break;
         case 4:
		      list();                //查询成绩函数 
			  break;
	 case 5:
		      help();                //帮助函数 
			  break;
  	 case 6:
		      select = 0;            //用于退出系统, select为0时,退出循环
			  break;
	 default:
		     printf("请在0-6之间选择\n");
	 }
}


int main()
{ 
  	while (select)                    //select为0时,退出循环
	{
		menu();                      //用户界面函数
	}
	system ("pause");
	return 0;
} 

实际运行截图及说明:

下图为相同中文意思的不同单词查询功能的实现。


由于词库存在中文意思相同的单词,在查询时应完成词库所有单词的比对。

编程思路:利用循环把词库中的单词的中文形式与用户要查找的中文一一比对;若未发现用户查询的单词则输出

“没有这个单词!”,然后询问是否继续查询;发现用户查询的单词则按照相应的格式进行输出。

其中x用于判断是否输出“英文形式    中文形式”,如果有多个单词意思相同,x的存在保证了只有一次输出,该行输出过后则需要改变x的值,保证只输出一次,但为了避免用户继续查询单词时该行不输出,所以在选择是否查询单词之前应把x的值返回初值0。

以(!flag && x == 0)作为是否输出“没有这个单词!”的做法保证了不会出现在找到多个同一中文意思的单词之后还输出没有这个单词!”。

         中文形式查询函数如下:

//中文形式查询
void searchch()
{
	int i = 0, choose = 0, flag = 1,x=0;
	char  ch[MAX_CHAR];                  //中文形式
 	while (choose || flag)
	{
    	    printf ("\n请输入你要查询的单词中文形式:");	
	    scanf ("%s",ch);
	    for (i = 0;i <= num;i ++)              //先找到该中文形式对应的序号
		{
      	              if (strcmp(s[i].ch,ch) == 0)
			{	
			  if (x == 0)                   //x用于判断是否输出 “英文形式  中文形式 ” 
			  {
		              printf ("\n英文形式             中文形式        ");
		              x = 1 ;
		           }
	                  printf ("\n   %-12s%12s",s[i].en,s[i].ch);
		          }
		}
		flag = 0;
		if (!flag && x == 0)	
                { 
                  printf ("\n没有这个单词!");
                 }
		printf ("\n继续查询请选1,返回上一级请选0:");
		scanf ("%d",&choose);
		if (choose == 0) 
		{
		    return;
		}
		else
		{
		   	x = 0;      //继续查询时让x值返回0 
		}	
	}
}

下图为强化记忆背诵错误的单词:



如图所示,当用户单词背诵有错误时,是无法直接返回上一级的,用户必须完成该错误单词的再一次测试才可成功返回。但是目前仍无法同时记录用户所有错误的单词。故而,单词背诵(英中)仍然未添加此项功能。

数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值