本文主要是介绍C语言程序设计课程设计 (电子英汉词典),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 课程设计题目
电子英汉词典
1、每个单词结构包含:英文拼写、中文释义;
2、文件中至少保存30个单词,简单单词为主;
3、包含词条录入、单词查询、词条修改、词条删除功能,修改后保存到文件;
4、信息显示,将所有单词按字母顺序显示。
- 内容及要求
1、主函数是一个功能选择菜单,其它功能都用各自的函数实现;
2、所有数据文件形式存储,至少提供10组原始数据,在程序执行前,通过文件导入,程序执行完毕后,再将新的数据存入文件(避免在程序执行过程中反复对文件进行读写);
3、多组数据的存储可用结构体数组,用链表实现可加分;
4、可以对数据可以进行增、删、改的编辑操作,增加时,系统监测所添加信息是否存在,如果存在,会提示已经存在,是否修改;删除时,同样要求再次确定;
5、如涉及到排序、查找操作,使用多种算法如选择排序、冒泡排序、折半查找等可加分;
6、对于程序的输入,要有验证功能,如命令菜单只有5项,输入6将提示输入错误,请重新输入,再如需要输入学号,如果输入中文字符将提示输入错误;
7、在基本功能的基础上,如有创新功能可加分。
- 算法和数据结构设计
#include <stdio.h>
#include <string.h>//调用字符串处理函数
#pragma warning(disable:4996)//忽略改警告
#define MAX_WORDS 100 // 最多存储 100 个单词
struct Word {
char eng[20]; // 英文拼写
char chn[50]; // 中文释义
};
struct Word dict[MAX_WORDS]; // 用数组保存单词信息
int wordNum = 0; // 当前保存的单词数量
//单词录入,先打开文件,以追加方式写入单词和中文释义,
//关闭文件,用文件操作 函数 完成
void saveWordsToFile() {
FILE *fp = fopen("dictionary.txt", "w"); // 打开文件,写入模式
int i;
for (i = 0; i < wordNum; i++) {
fprintf(fp, "%s %s\n", dict[i].eng, dict[i].chn); // 将单词写入文件
}
fclose(fp); // 关闭文件
}
//读取
void readWordsFromFile() {
FILE *fp = fopen("dictionary.txt", "r"); // 打开文件,读取模式
if (fp == NULL) {
printf("未找到词典文件\n");
return;
}
char eng[20], chn[50];
while (fscanf(fp, "%s %s", eng, chn) != EOF) { // 从文件中读取单词
strcpy(dict[wordNum].eng, eng);
strcpy(dict[wordNum].chn, chn);
wordNum++;
}
fclose(fp); // 关闭文件
}
//添加单词,上限报错
void addWord() {
if (wordNum >= MAX_WORDS) { // 单词数量达到上限
printf("单词数量已达上限,无法添加\n");
return;
}
char eng[20], chn[50];
printf("请输入英文单词:");
scanf("%s", eng);
printf("请输入中文释义:");
scanf("%s", chn);
strcpy(dict[wordNum].eng, eng);
strcpy(dict[wordNum].chn, chn);
wordNum++;
saveWordsToFile(); // 将新的单词信息追加写入文件
printf("添加成功!\n");
}
//查询 ,遍历查找所有的单词
void searchWord() {
char eng[20];
printf("请输入要查询的单词:");
scanf("%s", eng);
int i;
for (i = 0; i < wordNum; i++) {
if (strcmp(eng, dict[i].eng) == 0) { // 如果找到了单词
printf("%s:%s\n", dict[i].eng, dict[i].chn);
return;
}
}
printf("未找到该单词\n");
}
//修改 ,先遍历找到该单词 并进行修改
void modifyWord() {
char eng[20];
printf("请输入要修改的单词:");
scanf("%s", eng);
int i;
for (i = 0; i < wordNum; i++) {
if (strcmp(eng, dict[i].eng) == 0) { // 如果找到了单词
printf("原单词:%s %s\n", dict[i].eng, dict[i].chn);
printf("请输入修改后的中文释义:");
scanf("%s", dict[i].chn);
saveWordsToFile(); // 将修改后的单词信息写入文件
printf("修改成功!\n");
return;
}
}
printf("未找到该单词\n");
}
//词条删除,输入要删除的英文单词,遍历查找中文释义
//删除后写入所有单词与中文释义
void deleteWord() {
char eng[20];
printf("请输入要删除的单词:");
scanf("%s", eng);
int i;
for (i = 0; i < wordNum; i++) {
if (strcmp(eng, dict[i].eng) == 0) { // 如果找到了单词
int j;
for (j = i + 1; j < wordNum; j++) { // 将后面的单词向前移动
strcpy(dict[j - 1].eng, dict[j].eng);
strcpy(dict[j - 1].chn, dict[j].chn);
}
wordNum--;
saveWordsToFile(); // 将删除后的单词信息写入文件
printf("删除成功!\n");
return;
}
}
printf("未找到该单词\n");
}
//单词排序,主要是 冒泡排序
void showWords() {
if (wordNum == 0) { // 没有单词信息
printf("词典为空\n");
return;
}
int i, j;
char temp[20];
for (i = 0; i < wordNum - 1; i++) {
for (j = i + 1; j < wordNum; j++) {
if (strcmp(dict[i].eng, dict[j].eng) > 0) { // 如果前面的单词应该排在后面
strcpy(temp, dict[i].eng);
strcpy(dict[i].eng, dict[j].eng);
strcpy(dict[j].eng, temp);
strcpy(temp, dict[i].chn);
strcpy(dict[i].chn, dict[j].chn);
strcpy(dict[j].chn, temp);
}
}
}
//最终显示
printf("英文单词\t中文释义\n");
for (i = 0; i < wordNum; i++) {
printf("%s\t\t%s\n", dict[i].eng, dict[i].chn);
}
}
int main() {
readWordsFromFile(); // 从文件中读取单词信息
int choice;
while (1) {
printf("\n电子英汉词典\n");
printf("1. 添加单词\n");
printf("2. 查询单词\n");
printf("3. 修改单词\n");
printf("4. 删除单词\n");
printf("5. 显示所有单词\n");
printf("0. 退出程序\n");
printf("请输入功能选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
addWord();
break;
case 2:
searchWord();
break;
case 3:
modifyWord();
break;
case 4:
deleteWord();
break;
case 5:
showWords();
break;
case 0:
return 0;
default:
printf("无效的选项,请重新输入\n");
}
}
return 0;
}
- 核心代码分析
这里不需要连续打印出完整代码,在介绍实现的各个功能时,对应的贴上相应那段代码,并用文字加以解释。
1. 添加单词
void addWord() {
if (wordNum >= MAX_WORDS) { // 单词数量达到上限
printf("单词数量已达上限,无法添加\n");
return;
}
char eng[20], chn[50];
printf("请输入英文单词:");
scanf("%s", eng);
printf("请输入中文释义:");
scanf("%s", chn);
strcpy(dict[wordNum].eng, eng);
strcpy(dict[wordNum].chn, chn);
wordNum++;
saveWordsToFile(); // 将新的单词信息追加写入文件
printf("添加成功!\n");
}
2.查询 ,遍历查找所有的单词
void searchWord() {
char eng[20];
printf("请输入要查询的单词:");
scanf("%s", eng);
int i;
for (i = 0; i < wordNum; i++) {
if (strcmp(eng, dict[i].eng) == 0) { // 如果找到了单词
printf("%s:%s\n", dict[i].eng, dict[i].chn);
return;
}
}
printf("未找到该单词\n");
}
3.修改单词 ,先遍历找到该单词 并进行修改
void modifyWord() {
char eng[20];
printf("请输入要修改的单词:");
scanf("%s", eng);
int i;
for (i = 0; i < wordNum; i++) {
if (strcmp(eng, dict[i].eng) == 0) { // 如果找到了单词
printf("原单词:%s %s\n", dict[i].eng, dict[i].chn);
printf("请输入修改后的中文释义:");
scanf("%s", dict[i].chn);
saveWordsToFile(); // 将修改后的单词信息写入文件
printf("修改成功!\n");
return;
}
}
printf("未找到该单词\n");
}
4.词条删除,输入要删除的英文单词,遍历查找中文释义
void deleteWord() {
char eng[20];
printf("请输入要删除的单词:");
scanf("%s", eng);
int i;
for (i = 0; i < wordNum; i++) {
if (strcmp(eng, dict[i].eng) == 0) { // 如果找到了单词
int j;
for (j = i + 1; j < wordNum; j++) { // 将后面的单词向前移动
strcpy(dict[j - 1].eng, dict[j].eng);
strcpy(dict[j - 1].chn, dict[j].chn);
}
wordNum--;
saveWordsToFile(); // 将删除后的单词信息写入文件
printf("删除成功!\n");
return;
}
}
printf("未找到该单词\n");
}
5.单词排序,主要是冒泡排序
void showWords() {
if (wordNum == 0) { // 没有单词信息
printf("词典为空\n");
return;
}
int i, j;
char temp[20];
for (i = 0; i < wordNum - 1; i++) {
for (j = i + 1; j < wordNum; j++) {
if (strcmp(dict[i].eng, dict[j].eng) > 0) { // 如果前面的单词应该排在后面
strcpy(temp, dict[i].eng);
strcpy(dict[i].eng, dict[j].eng);
strcpy(dict[j].eng, temp);
strcpy(temp, dict[i].chn);
strcpy(dict[i].chn, dict[j].chn);
strcpy(dict[j].chn, temp);
}
}
}
6.最终显示
printf("英文单词\t中文释义\n");
for (i = 0; i < wordNum; i++) {
printf("%s\t\t%s\n", dict[i].eng, dict[i].chn);
}
- 运行效果分析
主页菜单
1.添加单词
2.查询单词
3.修改单词
4.删除单词
5.显示所有单词
6.退出程序
- 总结
一周的课程设计已经结束了。回想学习c语言的过程中,既有快乐又有烦恼,通过这次c语言的课程设计,我明白了很多也知道了很多,更收获了很多。
回顾这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论和知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。在设计的过程中遇到的问题,这毕竟独立做的,难免会遇到各种各样的问题,同时在设计的过程中发现自己的不足之处,对以前所学的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识从新温故。
很感谢这次的课程设计,它使我更加地体会到多看专业书的重要性,只有掌握了一定量的专业知识才能得心应手地解决诸多问题;另外,在做任何事倒要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。
这篇关于C语言程序设计课程设计 (电子英汉词典)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!