专业技能训练报告
学 院:肇庆学院
课程名称: C程序设计综合实践
专业班级: 计算机科学与技术12科技2班
学生姓名: 陈振孝 学号: 46
指导教师: 邵平
完成时间:20##年6月25日
目 录
第1部分 课程设计题目与要求.................................. 1
1.问题描述...................................................... 1
2.功能要求...................................................... 1
3.任务分工...................................................... 1
第2部分 设计与功能实现 ..................................... 3
1.总体设计...................................................... 3
2.数据结构...................................................... 4
3.算法设计...................................................... 2
4.程序代码设计.................................................. 8
5.测试与调试................................................... 11
第3部分 实训总结.......................................... 16
1.个人总结..................................................... 16
2.结束语....................................................... 17
附录Ⅰ 程序清单............................................ 17
附录Ⅱ 用户使用说明书....................................... 37
参考文献................................................... 38
第1部分 课程设计题目与要求
1.问题描述
根据需要,建立属于自己的生词库,使用起来方便。生词选自本人常需要的单词中,对于英语单词,给出中文含义,对于中文单词给出英文含义。
2.功能要求
循环显示如图(a)所示的主菜单。
在主菜单中选择1:创建生词库。用文件建立一个单词库,中英文单词均有,对于英文单词,给出中文解释,对于中文单词给出英文解释。
在主菜单中选择2:进入子菜单,并显示词库。显示是哟有单词和单词数、所有中文单词和单词数、所有英文单词和单词数,显示英文单词时按字母从小到大的顺序排列。在子菜单选择4,返回主菜单;选择0,推出整个系统。
在主菜单中选择3:首先确认密码。然后进入子菜单,并编辑词库,如添加新词、删除旧词、修改旧词。在子菜单中选择4,返回主菜单,选择0,推出整个程序。
在主菜单中选择4:查找生词。显示所要查找的单词和其含义。
在主菜单中选择5:记忆单词。
在主菜单中选择0:显示结束信息。按任意键后退出主序。
3.任务分工
完成所有的功能模块。
第2部分 设计与功能实现
1.总体设计
被调用的函数:
void CJ();//创建生词库
void CJE();//创建英汉
void CJC();//创建汉英
void XSCK();//显示词库
void XSSY();//显示所有单词
void XSZW();//显示中文单词
void XSYW();//显示英文单词
void BJCK();//编辑词库
void TJ();//添加新词
void SC();//删除旧词
void dele();//删除英汉类型
void delc();//删除汉英类型
void XG();//修改旧词
void xge();//修改英汉类型
void xgc();//修改汉英类型
void CZCC();//查找生词
void cze();//查找英文
void czc();//查找中文
void CXGN();//创新功能
//void xxe();//学习英汉类型
//void xxc();//学习汉英类型
头文件名:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
2.数据结构
struct English
{
char word[20];
char explain[20];
};
struct Chinese
{
char word[20];
char explain[20];
};
3.算法设计
采用模块化的思想,按照“自顶向下,逐步细化”的原则设计算法。
主模块:
创建函数:
显示函数:
编辑函数:
查找函数:
单词记忆:
4.算法设计与程序代码设计
主函数:
int choose;
while(1)
{
printf(" |------------------------------------|\n");
printf(" | 请输入选项编号(0--5) |\n");
printf(" |------------------------------------|\n");
printf(" | 1--创建生词库 |\n");
printf(" | 2--显示词库 |\n");
printf(" | 3--编辑词库 |\n");
printf(" | 4--查找生词 |\n");
printf(" | 5--创新功能 |\n");
printf(" | 0--退出系统 |\n");
printf(" |------------------------------------|\n");
printf("请输入选项\n");
scanf("%d",&choose);
if(choose>5||choose<0)
{
fflush(stdin); continue;
}
else
switch(choose)
{
case 1:CJ();;break;
case 2:XSCK();break;
case 3:BJCK();;break;
case 4:CZCC();break;
case 5:CXGN();break;
case 0:exit(0);
default:printf("非法输入!\n");break;
}
}
}
void XSCK()//显示词库
{
fflush(stdin);
char yn;
int choose;
do{
printf(" *-------------------------------------*\n");
printf(" * 请输入编号(0--4) *\n");
printf(" *-------------------------------------*\n");
printf(" * 1--显示所有单词 *\n");
printf(" * 2--显示中文单词 *\n");
printf(" * 3--显示英文单词 *\n");
printf(" * 4--返回 *\n");
printf(" * 0--退出系统 *\n");
printf(" *-------------------------------------*\n");
printf("请输入你的选择!\n");
scanf("%d",&choose);
switch(choose)
{
case 1:XSSY();break;
case 2:XSZW();break;
case 3:XSYW();break;
case 4:return;
case 0:exit(-1);
default:printf("输入错误\n");
}
int num;
do{
printf(" |*************************************|\n");
printf(" | 请输入选项编号(0--4) |\n");
printf(" |*************************************|\n");
printf(" | 1--添加新词 |\n");
printf(" | 2--删除旧词 |\n");
printf(" | 3--修改旧词 |\n");
printf(" | 4--返回 |\n");
printf(" | 0--退出系统 |\n");
printf(" |*************************************|\n");
printf("请输入你的选项!\n");
scanf("%d",&num);
if(num>4||num<0)
{
fflush(stdin); continue;
}
switch(num)
{
case 1:TJ();break;
case 2:SC();break;
case 3:XG();break;
case 4:return;
case 0:exit(0);
}
continue;
}while(1);
注:完整程序请详见附录A,这里省略。
5.测试与调试
|------------------------------------|
| 请输入选项编号(0--5) |
|------------------------------------|
| 1--创建生词库 |
| 2--显示词库 |
| 3--编辑词库 |
| 4--查找生词 |
| 5--创新功能 |
| 0--退出系统 |
|------------------------------------|
请输入选项
1
请输入创建的类型(E表示英汉,C表示汉英)
e
请输入英文单词:
happy
请输入中文的解释:
幸福的
操作成功!你要继续吗?(Y/N)
n
|------------------------------------|
| 请输入选项编号(0--5) |
|------------------------------------|
| 1--创建生词库 |
| 2--显示词库 |
| 3--编辑词库 |
| 4--查找生词 |
| 5--创新功能 |
| 0--退出系统 |
|------------------------------------|
请输入选项
2
*-------------------------------------*
* 请输入编号(0--4) *
*-------------------------------------*
* 1--显示所有单词 *
* 2--显示中文单词 *
* 3--显示英文单词 *
* 4--返回 *
* 0--退出系统 *
*-------------------------------------*
请输入你的选择!
1
单词:happy 解释:幸福的
单词:sd 解释:ds
单词:男人 解释:man
单词:同学 解释:classmate
单词:鞋子 解释:shoot
单词:振孝 解释:zhenxiao
单词:中国 解释:china
单词:男人 解释:man
单词:同学 解释:classmate
单词:鞋子 解释:shoot
单词:振孝 解释:zhenxiao
单词:我 解释:me
生词总数为:12
要继续显示吗(Y/N)?
4
要继续显示吗?请重新输入!
n
|------------------------------------|
| 请输入选项编号(0--5) |
|------------------------------------|
| 1--创建生词库 |
| 2--显示词库 |
| 3--编辑词库 |
| 4--查找生词 |
| 5--创新功能 |
| 0--退出系统 |
|------------------------------------|
请输入选项
3
快快输入密码:
111
密码错误!请重新输入密码
快快输入密码:
1111
|*************************************|
| 请输入选项编号(0--4) |
|*************************************|
| 1--添加新词 |
| 2--删除旧词 |
| 3--修改旧词 |
| 4--返回 |
| 0--退出系统 |
|*************************************|
请输入你的选项!
2
请选择选择删除的类型(E/C)
happy
|*************************************|
| 请输入选项编号(0--4) |
|*************************************|
| 1--添加新词 |
| 2--删除旧词 |
| 3--修改旧词 |
| 4--返回 |
| 0--退出系统 |
|*************************************|
请输入你的选项!
请选择选择删除的类型(E/C)
e
输入要删除的单词:happy
删除成功
你想继续继续吗(Y/N)
n
|*************************************|
| 请输入选项编号(0--4) |
|*************************************|
| 1--添加新词 |
| 2--删除旧词 |
| 3--修改旧词 |
| 4--返回 |
| 0--退出系统 |
|*************************************|
请输入你的选项!
4
|------------------------------------|
| 请输入选项编号(0--5) |
|------------------------------------|
| 1--创建生词库 |
| 2--显示词库 |
| 3--编辑词库 |
| 4--查找生词 |
| 5--创新功能 |
| 0--退出系统 |
|------------------------------------|
请输入选项
4
请选择选择查找的类型(E/C)
c
请输入你想要查找的单词!
中国
该单词的英文释义是:china
你想继续继续吗(Y/N)
n5
|------------------------------------|
| 请输入选项编号(0--5) |
|------------------------------------|
| 1--创建生词库 |
| 2--显示词库 |
| 3--编辑词库 |
| 4--查找生词 |
| 5--创新功能 |
| 0--退出系统 |
|------------------------------------|
请输入选项
5
显示汉语意思,写出正确的英文单词!
解释:中国
请输入正确的单词
英文:china
恭喜你答对了!
解释:男人
请输入正确的单词
英文:man
恭喜你答对了!
解释:同学
请输入正确的单词
英文:classmate
恭喜你答对了!
解释:鞋子
请输入正确的单词
英文:shoote
回答错误,请重新输入!
解释:鞋子
请输入正确的单词
英文:shoot
恭喜你答对了!
解释:振孝
请输入正确的单词
英文:zhenxiao
恭喜你答对了!
解释:我
请输入正确的单词
英文:me
恭喜你答对了!
练习结束!
要继续选择听写单词吗(Y/N)?
n
|------------------------------------|
| 请输入选项编号(0--5) |
|------------------------------------|
| 1--创建生词库 |
| 2--显示词库 |
| 3--编辑词库 |
| 4--查找生词 |
| 5--创新功能 |
| 0--退出系统 |
|------------------------------------|
请输入选项
0
Press any key to continue
第3部分 实训总结
1.个人总结
由于实验做得比较着急,所以在实验基本完成后进行测试才发现存在很多的错误,甚至有些错误是错的很白痴的。可能是太想把实验马上完成了,才导致有时候一个小小错误自己看了一个多小时后还是没有发现,而且还把思路换了又换,没办法,直到自己真的是疲倦的时候,一个不小心才无意的看到原来是标点符号中文化了。这让又兴奋又让我感到无奈。
在这次的小小的错误而花费大量的时间后,我觉得个人的心态是很重要的,有时候想快一点完成任务,结果却发现原来过程竟然出现了那么多自己本该知道的错误,所以,一个编程员的心态很重要,它决定了你心细!
虽然这个系统任务让我花费了很多的时间,但是我也尝试到了成功的美味。档每一个小小的模块成功建立的时候,我的神经都会被兴奋一下。我能感受到那种成功的喜悦!
每个目的的达成都是不简单的、一开始,我看到这个实验系统要求的时候。我个人真的是有点感到些头晕,知道能做,但是就是不知道从何下手。不过,经过和大家探讨和上网查询一些相关的资料之后,发现自己的思路越来越清晰了。最后,在一个完整的思路中开始了一个又一个的模块。。。
当然,软件是完成了,但是,也会存在不足之处,还不够健壮,而且个人觉得软件内存空间比较大,运行起来比较慢,如果能用指针和链表来实现的话,运行的效率可能会大大的提高。
总的来说,困难是必须的,克服是一定的,只要努力,进步是绝对的!
2.结束语
感谢邵平老师的指导,和同学们热心的帮助!
附录Ⅰ 程序清单
/*
题目:4.电子生词库系统
姓名:陈振孝
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define M 100
struct English
{
char word[20];
char explain[20];
};
struct Chinese
{
char word[20];
char explain[20];
};
void CJ();//创建生词库
void CJE();//创建英汉
void CJC();//创建汉英
void XSCK();//显示词库
void XSSY();//显示所有单词
void XSZW();//显示中文单词
void XSYW();//显示英文单词
void BJCK();//编辑词库
void TJ();//添加新词
void SC();//删除旧词
void dele();//删除英汉类型
void delc();//删除汉英类型
void XG();//修改旧词
void xge();//修改英汉类型
void xgc();//修改汉英类型
void CZCC();//查找生词
void cze();//查找英文
void czc();//查找中文
void CXGN();//创新功能
void main()
{
int choose;
while(1)
{
printf(" |------------------------------------|\n");
printf(" | 请输入选项编号(0--5) |\n");
printf(" |------------------------------------|\n");
printf(" | 1--创建生词库 |\n");
printf(" | 2--显示词库 |\n");
printf(" | 3--编辑词库 |\n");
printf(" | 4--查找生词 |\n");
printf(" | 5--创新功能 |\n");
printf(" | 0--退出系统 |\n");
printf(" |------------------------------------|\n");
printf("请输入选项\n");
scanf("%d",&choose);
if(choose>5||choose<0)
{
fflush(stdin); continue;
}
else
switch(choose)
{
case 1:CJ();;break;
case 2:XSCK();break;
case 3:BJCK();;break;
case 4:CZCC();break;
case 5:CXGN();break;
case 0:exit(0);
default:printf("非法输入!\n");break;
}
}
}
void CJ()//创建生词库
{
char choice;
fflush(stdin);
printf("请输入创建的类型(E表示英汉,C表示汉英)\n");
scanf("%c",&choice);
switch(choice)
{
case 'E':CJE();break;
case 'e':CJE();break;
case 'C':CJC();break;
case 'c':CJC();break;
default:printf("输入错误!\n");break;
}
}
void CJE()//创建英汉
{
int i=0;
char yn;
struct English EH[M];
FILE* fp=NULL;
fp=fopen("c://english.txt","a");
if(fp==NULL)
{
printf("文件打开失败\n");
return ;
}
printf("请输入英文单词:\n");
scanf("%s",EH[i].word );
printf("请输入中文的解释:\n");
scanf("%s",EH[i].explain );
fprintf(fp,"%10s%10s",EH[i].word ,EH[i].explain );
printf(" 操作成功!你要继续吗?(Y/N)\n");
fflush(stdin);
yn=getchar();
if(yn=='n'||yn=='N')
{
fclose(fp);
return;
}
if(yn=='y'||yn=='Y')
{
while(1)
{
i++;
printf("请输入英文单词:\n");
scanf("%s",EH[i].word );
printf("请输入中文的解释:\n");
scanf("%s",EH[i].explain );
fprintf(fp,"%10s%10s",EH[i].word ,EH[i].explain );
printf("操作成功!你要继续吗?(Y/N)\n");
fflush(stdin);
yn=getchar();
if(yn=='n'||yn=='N')
break;
}
}
fclose(fp);
return;
}
void CJC()//创建汉英
{
int i=0;
char yn;
struct Chinese HE[M];
FILE *fp=NULL;
fp=fopen("c:\\chinese.txt","a");
if(fp==NULL)
{
printf("很遗憾,文件打不开!\n");
return;
}
printf("请输入中文单词:\n");
scanf("%s",HE[i].word );
printf("请输入英文单词:\n");
scanf("%s",HE[i].explain );
fprintf(fp,"%10s%10s",HE[i].word,HE[i].explain);
printf("操作成功!你要继续吗?(Y/N)\n");
fflush(stdin);
yn=getchar();
if(yn=='n'||yn=='N')
{
fclose(fp);
return;
}
if(yn=='y'||yn=='Y')
{
while(1)
{
i++;
printf("请输入中文单词:\n");
scanf("%s",HE[i].word );
printf("请输入英文的解释:\n");
scanf("%s",HE[i].explain );
fprintf(fp,"s10%10s",HE[i].word ,HE[i].explain );
printf("操作成功!你要继续吗?(Y/N)\n");
fflush(stdin);
yn=getchar();
if(yn=='n'||yn=='N')
break;
}
}
fclose(fp);
return;
}
void XSCK()//显示词库
{
fflush(stdin);
char yn;
int choose;
do{
printf(" *-------------------------------------*\n");
printf(" * 请输入编号(0--4) *\n");
printf(" *-------------------------------------*\n");
printf(" * 1--显示所有单词 *\n");
printf(" * 2--显示中文单词 *\n");
printf(" * 3--显示英文单词 *\n");
printf(" * 4--返回 *\n");
printf(" * 0--退出系统 *\n");
printf(" *-------------------------------------*\n");
printf("请输入你的选择!\n");
scanf("%d",&choose);
switch(choose)
{
case 1:XSSY();break;
case 2:XSZW();break;
case 3:XSYW();break;
case 4:return;
case 0:exit(-1);
default:printf("输入错误\n");
}
fflush(stdin);
printf("要继续显示吗(Y/N)?\n");
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续显示吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
}
void XSSY()//显示所有单词
{
int j=0;
int n=0;
int i=0,k=0;
struct English EH[M];
struct English t;
struct Chinese HE[M];
FILE* fp=NULL,*fp1=NULL;
if((fp=fopen("c:\\english.txt","r"))==NULL)
{
printf("很遗憾,文件打开失败!\n");
return;
}
fp1=fopen("c:\\chinese.txt","r");
if(fp1==NULL)
{
printf("很遗憾,文件打开失败!\n");
return;
}
fscanf(fp,"%s%s",EH[n].word,EH[n].explain);
while(feof(fp)==0)
{
n++;
fscanf(fp,"%10s%10s",EH[n].word,EH[n].explain);
}
for(i=0;i<n+1;i++)
{
k=i;
for(j=k;j<n+1;j++)
{
if(strcmp(EH[i].word,EH[j].word)>=0)
{
k=j;
t=EH[i];
EH[i]=EH[j];
EH[j]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("单词:%s\t解释:%s\n",EH[i].word,EH[i].explain);
}
j=0;
fscanf(fp1,"%s%s",HE[j].word,HE[j].explain);
fflush(stdin);
while(feof(fp1)==0)
{
j++;
fscanf(fp1,"%10s%10s",HE[j].word,HE[j].explain);
}
for(i=0;i<j+1;i++)
{
printf("单词:%s\t解释:%s\n",HE[i].word,HE[i].explain);
}
fclose(fp);
fclose(fp1);
if((n+j)==0)
printf("不好意思,没有任何数据!\n");
else
printf("生词总数为:%d\n",n+j+1);
}
void XSZW()//显示中文单词
{
FILE *fp1=NULL;
struct Chinese HE[M];
int i=0,j=0,n=0;
fp1=fopen("c:\\chinese.txt","r");
if(fp1==NULL)
printf("很遗憾,文件打开失败!\n");
fscanf(fp1,"%s%s",HE[j].word,HE[j].explain);
while(feof(fp1)==0)
{
j++;
fscanf(fp1,"%10s%10s",HE[j].word,HE[j].explain);
}
for(i=0;i<j+1;i++)
{
printf("单词:%s\t解释:%s\n",HE[i].word,HE[i].explain);
}
fclose(fp1);
if(j==0)
printf("不好意思,没有任何数据!\n");
else
printf("生词总数为:%d\n",j+1);
}
void XSYW()//显示英文单词
{
int i=0,j=0,k=0;
int n=0;
struct English EH[M];
struct English t;
FILE *fp=NULL;
if((fp=fopen("c:\\english.txt","r"))==NULL)
{
printf("很遗憾,文件打开失败!\n");
return;
}
fscanf(fp,"%10s%10s",EH[n].word,EH[n].explain);
while(feof(fp)==0)
{
n++;
fscanf(fp,"%10s%10s",EH[n].word,EH[n].explain);
}
for(i=0;i<n+1;i++)
{
k=i;
for(j=k;j<n+1;j++)
{
if(strcmp(EH[i].word,EH[j].word)>=0)
{
k=j;
t=EH[i];
EH[i]=EH[j];
EH[j]=t;
}
}
}
for(i=0;i<n+1;i++)
{
printf("单词:%s\t解释:%s\n",EH[i].word,EH[i].explain);
}
fclose(fp);
if(n==0)
printf("不好意思,没有任何数据!\n");
else
printf("生词总数为:%d\n",n);
}
void BJCK()//编辑词库
{
char choice[20]="1111";
char choice1[20]="";
int count=0;
int count1=0;
int num=0;
do{
printf("快快输入密码:\n");
scanf("%s",choice1);
if(strcmp(choice,choice1)==0)
{
count++;
break;
}
else
{
count1++;
printf("密码错误!请重新输入密码\n");
}
}while(count1<=3);
if(count>0)
{
int num;
do{
printf(" |*************************************|\n");
printf(" | 请输入选项编号(0--4) |\n");
printf(" |*************************************|\n");
printf(" | 1--添加新词 |\n");
printf(" | 2--删除旧词 |\n");
printf(" | 3--修改旧词 |\n");
printf(" | 4--返回 |\n");
printf(" | 0--退出系统 |\n");
printf(" |*************************************|\n");
printf("请输入你的选项!\n");
scanf("%d",&num);
if(num>4||num<0)
{
fflush(stdin); continue;
}
switch(num)
{
case 1:TJ();break;
case 2:SC();break;
case 3:XG();break;
case 4:return;
case 0:exit(0);
}
continue;
}while(1);
}
}
void TJ()//添加新词
{
fflush(stdin);
char yn='\0';
char choice;
do{
printf("请选择添加的类型:E/C(E为英汉,C为汉英)\n");
scanf("%c",&choice);
switch(choice)
{
case 'E':CJE(),printf("恭喜你!已添加成功!\n");break;
case 'e':CJE(),printf("恭喜你!已添加成功!\n");break;
case 'C':CJC(),printf("恭喜你!已添加成功!\n");break;
case 'c':CJC(),printf("恭喜你!已添加成功!\n");break;
default:printf("输入错误!");break;
}
fflush(stdin);
printf("要继续吗(Y/N)?\n");
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续显示吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
fflush(stdin);
if(yn=='n'||yn=='N')
return;
}while(yn=='Y'||yn=='y');
}
void SC()//删除旧词
{
char ch;
fflush(stdin);
printf("请选择选择删除的类型(E/C)\n");
scanf("%c",&ch);
if(ch=='e'||ch=='E') dele();
if(ch=='c'||ch=='C') delc();
}
void dele()//删除英汉类型
{ char word[20]="";
char yn;
int n=0,i=0,j=0,k=-1;
struct English de[M];
FILE *fp=NULL;
fp=fopen("C:\\english.txt","r");
if(fp==NULL)
{
printf("很不好意思,文件打不开!\n");
return;
}
while(feof(fp)==0)
{
fscanf(fp,"%s%s\n",de[n].word,de[n].explain);
n++;
}
fclose(fp);
do
{
fflush(stdin);
printf("输入要删除的单词:");
gets(word);
for(i=0;i<n;i++)
{
if(strcmp(word,de[i].word)==0)
{
j=i,k=0;
for(i=j;i<n-1;i++)
de[i]=de[i+1];
}
}
n--;
if(k<0)
{
printf("没有该单词\n");
printf("你想继续继续吗(Y/N)\n");
}
else
{
printf("删除成功\n");
printf("你想继续继续吗(Y/N)\n");
}
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续删除吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
fp=fopen("C:\\english.txt","w");
if(fp==NULL)
{
printf("文件打开失败!\n");
return;
}
for(i=0;i<n;i++)
fprintf(fp,"%10s%10s\n",de[i].word,de[i].explain);
fclose(fp);
}
void delc()//删除汉英类型
{
char word[20]="";
char yn;
int n=0,i=0,j=0,k=-1;
struct English de[M];
FILE *fp=NULL;
fp=fopen("C:\\chinese.txt","r");
if(fp==NULL)
{
printf("很不好意思,文件打不开!\n");
return;
}
while(feof(fp)==0)
{
fscanf(fp,"%s%s\n",de[n].word,de[n].explain);
n++;
}
fclose(fp);
do
{
fflush(stdin);
printf("输入要删除的单词:");
gets(word);
for(i=0;i<n;i++)
{
if(strcmp(word,de[i].word)==0)
{
j=i,k=0;
for(i=j;i<n-1;i++)
de[i]=de[i+1];
}
}
n--;
if(k<0)
{
printf("没有该单词\n");
printf("你想继续继续吗(Y/N)\n");
}
else
{
printf("删除成功\n");
printf("你想继续继续吗(Y/N)\n");
}
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续删除吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
fp=fopen("C:\\english.txt","w");
if(fp==NULL)
{
printf("文件打开失败!\n");
return;
}
for(i=0;i<n;i++)
fprintf(fp,"%10s%10s\n",de[i].word,de[i].explain);
fclose(fp);
}
void XG()//修改旧词
{
char ch;
fflush(stdin);
printf("请选择选择修改的类型(E/C)\n");
scanf("%c",&ch);
if(ch=='e'||ch=='E') xge();
if(ch=='c'||ch=='C') xgc();
}
void xge()//修改英汉类型
{
char word[20];
char yn;
int n=0,i=0,j=0,k=-1;
struct English de[M];
FILE *fp=NULL;
fp=fopen("C:\\english.txt","r");
if(fp==NULL)
{
printf("很不好意思,文件打不开!\n");
return;
}
while(feof(fp)==0)
{
fscanf(fp,"%s%s\n",de[n].word,de[n].explain);
n++;
}
fclose(fp);
do
{
fflush(stdin);
printf("输入要修改的英文单词:\n");
gets(word);
for(i=0;i<n;i++)
{
if(strcmp(word,de[i].word)==0)
{
k=1;
printf("请输入想修改后的英文单词:\n");
scanf("%s",de[i].word);
printf("请输入该单词的中文意思:\n");
scanf("%s",de[i].explain );
}
}
if(k<0)
{
printf("没有该单词\n");
printf("你想继续继续吗(Y/N)\n");
}
else
{
printf("修改成功\n");
printf("你想继续继续吗(Y/N)\n");
}
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("你想继续继续吗(Y/N)\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
fp=fopen("C:\\english.txt","w");
if(fp==NULL)
{
printf("文件打开失败!\n");
return;
}
for(i=0;i<n;i++)
fprintf(fp,"%10s%10s\n",de[i].word,de[i].explain);
fclose(fp);
}
void xgc()//修改汉英类型
{
char word[20];
char yn;
int n=0,i=0,j=0,k=-1;
struct English de[M];
FILE *fp=NULL;
fp=fopen("C:\\chinese.txt","r");
if(fp==NULL)
{
printf("很不好意思,文件打不开!\n");
return;
}
while(feof(fp)==0)
{
fscanf(fp,"%s%s\n",de[n].word,de[n].explain);
n++;
}
fclose(fp);
do
{
fflush(stdin);
printf("输入要修改的英文单词:\n");
gets(word);
for(i=0;i<n;i++)
{
if(strcmp(word,de[i].word)==0)
{
k=1;
printf("请输入修改后的中文单词:\n");
scanf("%s",de[i].word);
printf("请输入该单词的英文意思:\n");
scanf("%s",de[i].explain );
}
}
if(k<0)
{
printf("没有该单词\n");
printf("你想继续继续吗(Y/N)\n");
}
else
{
printf("修改成功\n");
printf("你想继续继续吗(Y/N)\n");
}
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续修改吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
fp=fopen("C:\\chinese.txt","w");
if(fp==NULL)
{
printf("文件打开失败!\n");
return;
}
for(i=0;i<n;i++)
fprintf(fp,"%10s%10s\n",de[i].word,de[i].explain);
fclose(fp);
}
void CZCC()//查找生词
{
char ch;
fflush(stdin);
printf("请选择选择查找的类型(E/C)\n");
scanf("%c",&ch);
if(ch=='e'||ch=='E') cze();
if(ch=='c'||ch=='C') czc();
}
void cze()//查找英文
{
char word[20];
char yn;
struct Chinese dc[M];
int n=0,i=0,k=-1;
FILE* fp;
if((fp=fopen("c:\\english.txt","r"))==NULL)
printf("很不好意思,文件打不开!\n");
while(feof(fp)==0)
{
fscanf(fp,"%s%s",dc[n].word ,dc[n].explain );
++n;
}
fclose(fp);
do
{
printf("请输入你想要查找的单词!\n");
fflush(stdin);
gets(word);
for(i=0;i<n;i++)
{
if(strcmp(word,dc[i].word )==0)
{
printf("该单词的英文释义是:%s\n",dc[i].explain );
k=1;
break;
}
}
if(k<0)
printf("没有该单词\n");
printf("你想继续继续吗(Y/N)\n");
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续查找吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
fflush(stdin);
fclose(fp);
}
void czc()//查找中文
{
char word[20];
char yn;
struct Chinese dc[M];
int n=0,i=0,k=-1;
FILE* fp;
if((fp=fopen("c:\\chinese.txt","r"))==NULL)
printf("很不好意思,文件打不开!\n");
while(feof(fp)==0)
{
fscanf(fp,"%s%s",dc[n].word ,dc[n].explain );
++n;
}
fclose(fp);
do
{
printf("请输入你想要查找的单词!\n");
fflush(stdin);
gets(word);
for(i=0;i<n;i++)
{
if(strcmp(word,dc[i].word )==0)
{
printf("该单词的英文释义是:%s\n",dc[i].explain );
k=1;
break;
}
}
if(k<0)
printf("没有该单词\n");
printf("你想继续继续吗(Y/N)\n");
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("要继续查找吗?请重新输入!\n");
fflush(stdin);
yn=getchar();
};
}while(yn=='Y'||yn=='y');
fflush(stdin);
fclose(fp);
}
void CXGN()//创新功能
{
do{
char yn;
int n=0,i=0,j=0;
int count;
char word[20];
struct Chinese bei[M];
FILE *fq;
printf("显示汉语意思,写出正确的英文单词!\n");
if((fq=fopen("c:\\chinese.txt","r"))==NULL)
{
printf("文件打开失败!\n");
return;
}
fscanf(fq,"%s%s",bei[n].explain,bei[n].word);
while(feof(fq)==0)
{
n++;
fscanf(fq,"%s%s",bei[n].explain,bei[n].word);
}
count=0;
printf("\n");
fclose(fq);
do
{
fflush(stdin);
printf("解释:%s\n",bei[i].explain);
printf("请输入正确的单词\n");
printf("英文:");
gets(word);
if(strcmp(word,bei[i].word)==0)
{
count++;
printf("恭喜你答对了!\n");
}
else
{
printf("回答错误,请重新输入!\n");
continue;
}
i++;
}while(count<=n);
printf("练习结束!\n");
printf("要继续选择听写单词吗(Y/N)?\n");
fflush(stdin);
yn=getchar();
while(yn!='y'&&yn!='Y'&&yn!='N'&&yn!='n')
{
printf("n请重新输入!\n");
fflush(stdin);
yn=getchar();
};
if(yn=='Y'||yn=='y')
{
fclose(fq);
continue;
}
else
return;
}while(1);
}
附录B 用户使用说明书
应用本程序需要使用Microsoft Visual C++6.0,根据信息提示可以顺利运行。使用情况如下:
运行程序后:
选择1:创建生词库
选择2:显示词库
选择1:显示所有单词
选择2:显示中文单词
选择3:显示英文单词
选择4:返回主菜单
选择5:退出系统
选择3:编辑词库
选择1:添加新词
选择2:删除旧词
选择3:修改旧词
选择4:返回主菜单
选择5:退出系统
选择4:查找生词
选择c:按中文查找
选择e:按英文查找
选择5:单词练习
参考文献
参考文献一:《C程序设计教程》
参考文献二:《C程序设计辅导与实训》
《C程序设计综合实践》评分表
指导教师签名:
日 期:_2013年6月25日_