简单的英文词典排版系统实验报告

更新时间:2023-07-20 03:48:40 阅读: 评论:0

实验目录
需求分析 ———————————— 2
整体设计 ———————————— 2
详细设计 ———————————— 4
电脑开不了机怎么办简单方法调试与测试 ——————————— 6
用户手册 ———————————— 6
总结钢铁长城 —————————————— 6
附录 —————————————— 9
  需求分析
1目的
我们所做的程序课题是一个“简单的英文词典排版系统”。该课题目的在于锻炼我们的自主动手和创新、创造能力,同时通过自己看书学习文件的输入输出等功能的实现,提升我们的自学能力。并通过自己思考程序的算法和函数的组建过程来提升我们的逻辑思维能力,最后是利用自我程序测试和改进来增加我们对编程的进一步了解,和提升编程的能力。
其大背景是要为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
公司车辆管理制度
2 预期达到功能
(1)    能输入和显示所打的单词。
(2)    能分辨出单词。
(3)    对重复的单词和已经输入的单词能自动排除。
(4)    能按A-Z的顺序排版。
(5)    能将运行结果以文本形式存储。
(6)    具有添加新单词并重新排版的能力。
(7)  实现以上功能的选择操作
3 需解决问题
主要解决单词输入到文件和从文件输出以及最后文件保存的问题,但是我们对C++的学习仍不完全,这就要求我们提前把课本上的“文件与流”这一章节的相关内容进行自学并应用于其中。
其次我们要解决如何实现查找单词、分辨单词、添加单词以及对单词进行排序的系列问题,这要求我们能对已学习的内容充分掌握并熟练应用。
  整体设计
1 程序设计功能模块图
2 程序流程示意图
1)字符排序
   
2) 检查模块
  详细设计
1 函数功能
void write(int r)    将单词写入文件的函数
int read()            读取文件函数
void zhucaidan()      主菜单函数
int paixu()          排序函数
void jiancha()        检查单词模块
void charu(char*d)    插入单词模块
void find(char *s)    查找单词模块
void xuanze()        选择菜单模块
2 参数说明
dic[N][20]            N100,即但单词库课输入100个单词,每个单词长度不得大于19
*p                      为指向Data文件的指针
flagtemp            在不同的函数模块中用于不同情况下的结果判断与后续的程序执行
s[20]d[20]f[20]    char类型的数组sdf用于临时的单词输入放置
t[20]                  char类型的 数组t是用于临时放置从文件中读取的单词
way                    是用于switch语句中功能选项的选择
ijc              是普通的int变量
3 函数调用
1) void xuanze()选择菜单调用的函数:jiancha()检查函数、find(d)查找函数、charu(d)插函数以及zhucaidan()主菜单函数
2) void find(char *s) 查找单词模块调用的函数:strcpy复制函数、strcmp比较大小函数、w
rite(r)写入文件函数
3) void charu(char*d) 插入单词模块调用的函数:read()读取函数、strcmp比较函数、strcpy复制函数、write(r)写入文件函数、paixu()排序函数、
4) void jiancha()检查单词模块调用的函数:write(r)写入文件函数
5) int paixu()排序函数调用的函数:read()读取函数、strcmp比较大小函数、strcpy复制函数、write(r)写入文件函数
6) int read()读取文件函数调用的函数:write(r)写入文件函数
7) main()主函数调用的函数:jiancha()检查函数、paixu()排序函数、xuanze()菜单选择函数
4算法实现
1) 插入模块void charu(char*d)
单词存在情况:
先输入单词放置于*d指向的d[20]临时数组中,再利用for循环和strcmp比较函数看输入的单词是否已经存在,存在flag=1,不存在将单词保存break跳出for循环从新输入单词,flag仍等于0
单词不存在情况:
flag=0,利用strcpy复制函数将新输入的单词复制到单词库已存在单词的后面,单词个数r增加1
继续输入:
利用while语句,只要继续输入的字符不为0(即输入的为单词,用户不返回主菜单),就可以执行世界上最大的胸while语句继续重复上述的检查单词和保存单词的步骤;
返回主菜单:
若输入的字符为0(即用户要返回主菜单),while语句无法执行,经过从新排序后,利用return返回调用函数,即void xuanze()菜单选择函数,可从新选择功能。
2) 查找单词模块void find(char *s)
文件读取:
利用while循环先将文件中以保存的单词读取到临时的数组t[20] ,再从t数组中复制到到dic[r]数组中,最开始r0,后r++
查找单词:
利用strcmp比较函数查找是否有与临时存放在s[20]数组中单词相同的以保存单词;若strcmp的值为0(即用户要查找的单词存在),则c=rc即为用户要查找的单词的序号,此时flag=1,若flag不为1,输出查找单词不存在;
继续查找:
方法同继续插入单词是一样的,利用输入的字符不为则执行以上查找步骤,若输入的字符为0,则不执行查找步骤并return,返回到调用函数即void xuanze()菜单选择函数中,从新选择功能。
  调试与测试冬季保暖
我们反复输入从az26个单词,用很长的单词和很短的单词来测试文件的保存能力。
曾遇到的问题:
1 单词的显示挤在一起,之后我们在输出printf中加入:“\t”来解决单词显示的美观问题;
2 输入的单词仍无法保存在文件中,我们在查找和输入等模块添加write()读取函数后,使得单词真正的保存在文件中;
3 开始并未建立文件,因此使程序无法运行,后询问老师问题得以解决;
4 一开始使用el语句来实现功能模块的选择无法运行,后改为使用switch语句问题得以解决;
5在进行字符串的复制时开始并未使用字符串函数,而是自行设计了函数来进行字符串的复制及比较,发现无法成功,咨询其他同学后讨论可以利用现成的字符串函数来解决该问题;
6在查找和插入单词的返回主菜单的算法上开始使用的是goto语句,但会跳错程序 ,因此讨论后改用return语句,直接返回主菜单的方法。
以上问题每次调试均要删除文件中以保存的单词,从新输入az26个单词,从新运行。
  用户手册
1. 进入主菜单后,输入“1”后开始输入单词。输入完毕可按“0返回主菜单。
2. 在主菜单页面输入“2”后可以查找单词,输入单词按回车开始查找,查找完毕按“0”返回主菜单。
3. 在主菜单页面输入“3后可以结束操作,同时在文件中保存已输入的单词。
4. 在主菜单页面输入“4”后可以检查所有单词,按“0”返回主菜单。
总结
开始无单词界面和主菜单:
选择way1(输入单词)并输入单词apple
选择way2(查找单词)界面:
选择way3(结束程序并保存):
选择way4(先检查所有单词):
选择0返回主菜单:
重新打开程序:
优点:程序所要求的功能基本存在且均可以正常执行。
缺点:界面不够美观,某些算法效率仍不够高。
参考文献:C++程序设计(第二版)
          C语言初级教程
   
#include<stdio.h>
#include<string.h>
#define N 100
char dic[N][20];
FILE *p;
/*file结构输入读取*/
/*写入文件*/
void write(int r)
{
    int i;
    p = fopen("","w");//以写方式打开文件
    for(i=0;i<r;i++)
    {笋怎么吃
        fprintf(p,"%s\n",dic[i]);//输入数组内容, 输入到p指向的data文件里
    }
    fclo(p);//关闭文件
}
/*读取文件*/
int read()
{
    int r=0;
    p = fopen("","r");//r打开读取文件
    while(fscanf(p,"%s",dic[r])!=EOF)//只要读取的dic内容不为结束,继续增加读取;读取出来
    {
        r++;
    }
    fclo(p);//关闭data
   
    write(r);//再从新写入
    return r;//输入了r个单词
}
/*主菜单*/
强大的祖国void zhucaidan()
{
    printf("\n\n");
    printf("____________way=1:shuru words ______________________\n");
    printf("_____________way=2:chazhao words_______________________\n");圣诞树的英文
    printf("________________way=3:end___________________________\n");
    printf("__________________way=4:jianchasuoyou_________________\n");
    printf("plea xuanz a way=");
}
/*字符排序*/
int paixu()
{
    int i,j,flag=1,r;
    char s[20];

本文发布于:2023-07-20 03:48:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1106270.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:单词   输入   函数   文件   查找   菜单   读取
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图