电子英汉词典

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_SIZE 100
//定义结构体数组最大长度

struct Book
{
	char word[20];//单词
	char ans[20];//解释
};

//显示信息
void Display(struct Book book[],int n)
{
	int i;
	printf("%-15s%-20s\n","单词","释义");
	for(i=0;i<n;i++)//遍历结构体数组 输出
	{
		printf("%-15s%-20s\n",book[i].word,book[i].ans);
	}
}

//根据查找
void Search_By_Word(struct Book book[],int m)
{
	int i;
	int flag=0;
	char temp[20];
	system("cls");
	printf("请输入要查询单词:");
	scanf("%s",temp);
	
	for(i=0;i<m;i++)
	{
		if(!strcmp(temp,book[i].word))//如果作者相同
		{
			Display(&book[i],1);//显示该信息
			flag=1;//说明已经找到
		}
	}
	if(flag==0)
	{
		printf("无该书名!\n");
	}
	system("pause");	
}


//输入信息
int Input(struct Book book[],int n)
{
	system("cls");
	printf("请输入单词拼写:");
	scanf("%s",book[n].word);
	printf("请输入单词释义:");
	scanf("%s",book[n].ans);
	printf("录入成功!\n");
	system("pause");
	return n+1;
}

//删除信息
void Del(struct Book book[],int* n)
{
	int i,m=*n,j;
	int flag=0;
	char temp[20];
	system("cls");
	printf("请输入要删除的单词:");
	scanf("%s",temp);
	
	for(i=0;i<m;i++)
	{
		if(!strcmp(temp,book[i].word))//如果相同
		{
			flag=1;//说明已经找到
			break;
		}
	}
	if(flag==0)
	{
		printf("无该单词!\n");
		printf("\t\t\t");
		system("pause");
		return ;
	}
	Display(&book[i],1);//显示信息
	for(j=i;j<m;j++)//结构体数组前移
	{
		book[j]=book[j+1];//用后一个数据覆盖前一个 达到删除效果
	}
	printf("删除成功!\n");
	system("pause");
	(*n)--;//删除成功 结构体数组长度减一
}
//修改信息
void Modify(struct Book book[],int m)
{
	int i;
	int flag=0;
	char temp[20];
	system("cls");
	printf("请输入要修改的单词拼写:");
	scanf("%s",temp);
	
	for(i=0;i<m;i++)
	{
		if(!strcmp(temp,book[i].word))//如果相同
		{
			flag=1;//说明已经找到
			break;
		}
	}
	if(flag==0)
	{
		printf("无该单词!\n");
		system("pause");
		return ;
	}
	Display(&book[i],1);//显示该信息
	printf("请输入单词拼写:");
	scanf("%s",book[i].word);
	printf("请输入单词释义:");
	scanf("%s",book[i].ans);
	printf("修改成功!\n");
	system("pause");
}

int Menu()
{
	int i;
	system("cls");
	printf("1:词条录入\n");
	printf("2:信息显示\n");
	printf("3:词条修改\n");
	printf("4:词条删除\n");
	printf("5:单词查询\n");
	printf("0:退出系统\n");
	printf("请输入选择:");
	scanf("%d",&i);
	while(i<0||i>5)//判断输入的是不是0-5范围内
	{
		printf("\t\t\t请重新选择:");
		scanf("%d",&i);
	}
	return i;
}

void Save(struct Book stu[],int n)//保存信息到文件
{
	int i;
	FILE* fp;
	fp= fopen("book_info.txt","w+");//打开文件
	if(fp==NULL)//打开失败则退出
	{
		return;
	}
	for(i=0;i<n;i++)//循环写入到文件
	{
		fwrite(&stu[i],1,sizeof(struct Book),fp);
	}
	fclose(fp);
}

int Read(struct Book stu[])//读取文件
{
	int i=0;
	FILE* fp;
	fp= fopen("book_info.txt","r+");
	if(fp==NULL)
	{
		return 0;
	}
	while(fread(&stu[i++],1,sizeof(struct Book),fp));//当文件不为空 一直读取
	fclose(fp);
	if(i>=1)//把读取的回车去掉
	{
		return i-1;
	}
	return 0;
}


int main()
{
	int choice;
	struct Book book[MAX_SIZE];//记录图书信息
	int n=Read(book);//图书数量
	while(1)
	{
		choice=Menu();//获取用户选择
		switch(choice)//根据选择进入相应功能
		{
		case 0:
			Save(book,n);//保存文件
			exit(0);//退出
			break;
		case 1:
			n=Input(book,n);
			Save(book,n);
			break;
		case 2:
			system("cls");
			Display(book,n);
			system("pause");
			break;
		case 3:
			Modify(book,n);
			Save(book,n);
			break;
		case 4:
			Del(book,&n);
			Save(book,n);
			break;
		case 5:
			Search_By_Word(book,n);
			break;
		}
	}
	return 0;
}
  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值