通信工程C语言强化训练实验报告学号:*******姓名:诸葛逍遥提交日期:2012年7月4日成绩:评语:教师签字:东北大学秦皇岛分校计算机与通信工程学院题目:背单词1.概述该系统是帮助单词背诵单词的软件,要求用户可以选择背诵的词库,并可以编辑自己的词库,系统可以给出中文,让单词输入其英文意思,也可输出英文让单词输入中文意思。
并判定词义是否正确。
如不正确给出提示并要求用户重新输入。
如正确给以鼓励。
还应有词语预览功能。
基本功能:1)词库的维护2)课程预览3)显示中文用户输入英文的背诵方法4)显示英文用户输入中文的背诵方法5)背诵成绩的记录。
2.课程设计目的综合训练单词用C语言编程解决问题和处理问题的能力,巩固其对C语言课程内容和知识的掌握。
3.对课程设计的基本要求1)尽量多的应用C语言中所学到的知识和语句2)课程设计前应书写开题报告主要内容包括(对题目的分析和对该课程设计的概要设计)3)课程设计后应交《课程设计报告》,和软件原代码及编译后的应用软件4)课程设计最后一次上机实验时检查题目的完成情况5)课程设计中必须用到的内容为a文件的存取b结构体的使用c数组的使用d指针操作一、开题报告1.变量和结构体说明1)单词信息的结构体如下:typedef struct word//单词的结构体{char en[M_CHAR]; // 英文形式char ch[M_CHAR]; //中文形式}word;2)存放单词的信息的变量如下:word s[M_NUM]; //单词数组int num; //单词个数2.概要设计1)定义结构体数组用来存放单词的信息2)单词信息存放在data.txt中,文件格式如下:单词个数—长度为4个字节第1个单词的信息-----长度为sizeof(word)第2个单词的信息-----长度为sizeof(word)。
第n个单词的信息-----长度为sizeof(word)3)读文件data.txt的过程如下:打开文件data.txt用fopen函数(以mode指定的方式打开名为filename的文件)先读取单词个数,然后逐个读取单词的信息,采用fread函数(从fp所指定的文件中读取长度为size的n个数据项,存到pt所指向的内存区)4)写文件data.txt的过程如下:先写入单词个数,然后逐个写入单词的信息,采用fwrite函数(把ptr所指向的n*size个字节输出的fp所指向的文件中)5)删除单词和修改单词信息的时候,都需要先输入英文,从该英文找到单词的位置6)程序采用菜单的形式显示,用户可以输入选择进行操作3.树型结构模块图功能模块图如下:4课程流程图5.操作说明1)本程序需要目录下存在“data.txt”文件2)系统的菜单如下3)添加单词信息的功能操作方法如下:4)删除单词信息的功能操作方法如下:5)修改单词信息的功能操作方法如下:6)显示单词信息功能操作方法如下:7)显示单词背诵(中至英)功能操作方法如下:1、回答正确2、回答错误8)显示单词背诵(英至中)功能操作方法如下:9)成绩查询的功能操作方法如下:6.课程详细代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#define M_CHAR 20 // 最大字符#define M_NUM 100 // 单词的最大个数int c=0,d=0;//统分变量typedef struct word//单词的结构体{char en[M_CHAR]; // 英文形式char ch[M_CHAR]; //中文形式}word;word s[M_NUM]; //单词数组int num; //单词个数void read_from_file()//从文件中读取单词的信息{FILE *fp;int i=0;fp=fopen("data.txt","rb");//以rb(为读而打开一个二进制文件)打开data.txt文件if(!fp){printf("打开文件data.txt失败!\n");return ;}fread(&num,1,sizeof(num),fp); //先读取单词的个数for(i=0;i<num;i++)fread(&s[i],1,sizeof(word),fp); //读取每个单词的信息存放到结构体fclose(fp);//关闭文件}void write_to_file()//向文件中输入单词的信息{FILE *fp;int i=0;fp=fopen("data.txt","wb+");//“wb+”建立一个新文件,进行写操作,随后读和写可以由位置函数设置读和写的起始位置if(!fp){printf("打开文件data.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].ch);num++;printf("您输入的信息为: 英文: %s \n 中文: %s \n Enter 0 继续输入; Enter 1 返回主菜单",s[i].en,s[i].ch);}void del_infor()//删除单词信息int i=0,j=0;char ch[M_CHAR]; //中文形式printf("请输入你要删除的单词中文形式:");scanf("%s",ch);for(i=0;i<num;i++)//先找到该中文形式对应的序号if(strcmp(s[i].ch,ch)==0)//strcmp(比较两个字符串str1和str2){for(j=i;j<num-1;j++)s[j]=s[j+1];num--; //数量减少1printf("删除成功!\n Enter 1 返回主菜单"); return;}printf("没有这个单词!");printf("Enter Enter 1 返回主菜单");}void modify_infor()//修改单词信息{int i=0;char ch[M_CHAR]; //中文形式printf("请输入你要修改的单词中文形式:");scanf("%s",ch);for(i=0;i<num;i++)//先找到该中文形式对应的序号if(strcmp(s[i].ch,ch)==0){printf("请输入单词正确的英文形式:");scanf("%s",s[i].en);printf("请输入此单词正确的的中文形式:");scanf("%s",s[i].ch);printf("修改成功!\n Enter 1 返回主菜单"); return;}printf("没有这个单词!");printf("Enter 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].ch);printf("Enter Enter 1 返回主菜单");}void search_infor()//查询单词int i=0;char ch[M_CHAR]; //中文形式printf("请输入你要查询的单词中文形式:");scanf("%s",ch);for(i=0;i<num;i++)//先找到该中文形式对应的序号if(strcmp(s[i].ch,ch)==0){printf("英文形式中文形式\n");printf("%10s%12s\n",s[i].en,s[i].ch);return;}printf("没有这个中文形式!");printf("Enter Enter 1 返回主菜单");}void ch_to_en_infor(){char b1[20];int z;int i;i = rand()%num;printf("【%s】请输入英文单词:",s[i].ch);scanf("%s",b1);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 返回主菜单",s[i].en,s[i].ch);}void en_to_ch_infor(){char b1[20];int z,x=41;int i;i = rand()%num;printf("【%s】请输入中文意思:",s[i].en);scanf("%s",b1);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(){printf("\n 共计输入错误:%d次**每次扣10分**\n",c);printf(" 共计输入正确:%d次**每次加10分**\n",d);printf(" 你的总得分为:%d分\n\n",10*d-10*c);}void show_main_menu(){System(“color 2f”);System(“mode con cols=100 lines=40”);printf("\n");printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n"); printf(" ◎◎\n"); printf(" ●帮你背单词●\n"); printf(" ◎◎\n"); printf(" ●●\n"); printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n"); printf(" ◎◎\n"); printf(" ●1、添加单词2、删除单词●\n"); printf(" ◎◎\n"); printf(" ●3、修改单词4、显示单词●\n"); printf(" ◎◎\n"); printf(" ●5、背诵(中至英) 6、背诵(英至中) ●\n"); printf(" ◎◎\n"); printf(" ●7、查询成绩8、退出●\n"); printf(" ◎◎\n"); printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n"); / printf(" ◎◎\n"); printf(" ●作者:41109班熊炫朱均安●\n"); printf(" ◎马金坤汪婷静◎\n"); printf(" ●●\n"); printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n"); //用户界面printf("\n");printf(" 请选择您需要的操作序号(1-8)按回车确认:");}int main(){int a,choose=0;num=0;//初始化单词个数为0read_from_file(); //读取文件show_main_menu();scanf("%d",&choose);printf("\n");while(choose!=8){switch(choose){case 1:add_infor();break;del_infor();break;case 3:modify_infor();break;case 4:show_infor();break;case 5:ch_to_en_infor();break;case 6:en_to_ch_infor();break;case 7:chengji_infor();break;}while (a<10000){scanf("%d",&a);if(a==0){write_to_file();add_infor();}if(a==1){printf("\n");write_to_file();main();printf("\n");}if(a==2){write_to_file();ch_to_en_infor();}if(a==3){write_to_fil_e();en_to_ch_infor();}if(a>3){break;}}write_to_file();//写入文件}printf(" ***************谢谢使用单词背诵系统!再见!*************** \n");getchar();return 1;}7.心得体会通过本次C语言课程设计,加深了我对C语言的文件的存取、结构体的使用、数组的使用和指针操作的理解。