-
下载可编辑
.
专业<
/p>
.
整理
.
中
国
地
质
大
学
本科生课程论文封面
课
程
名
称
C
语言课程设计
教
师
本科生
本科生学号
本科生专业
<
/p>
所
在
院
系
日期
:
下载可编辑
课程设计评语
对课程论文的评语
:
平时成绩:
总
成
绩:
课程论文成绩:
评阅人签名:
注:
< br>1
、无评阅人签名成绩无效;
2
、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
.
专业
.
整理
.
下载可编辑
3
p>
、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目
录
课程设计评语
..........
..................................................
......
2
目
录
...............
..................................................
........
3
1
.课程论文题目
< br>............................................... ................
4
2
.程序设计思路
< br>............................................... ................
4
3
.功能模块图
................................................ .................
5
4
.数据结构设计
< br>............................................... ................
5
5
.算法设计
.................................................
..................
5
6
.程序代码
.................................................
.................
16
7
.程序运行结果
< br>............................................... ...............
21
8
.编程中遇到的困难及解决方法
<
/p>
........................................
........
24
9
.总结心得及良好建议
............................................ ............
24
10
.致谢
..................................................
...................
24
.
专业<
/p>
.
整理
.
下载可编辑
1
.课程论文题目
一种简单的英文词典排版系统的实现:
【要求】
(
1
)能输入和现实打入的单词;
(<
/p>
2
)能分辨出单词;
< br>(
3
)对重复的单词和已经输入的单词能自动排除;
p>
(
4
)能按
p>
A~Z
的顺序排版;
(
5
)能将运行结果以文本形式储存;
(
6
)具有添加新单词重新排版
的能力。
[
提示
]
(
1
)需求分析:运行结果以文本形式储存,因而要提供文件的输
入输出操作;通
过查找操作检查重复单词;提供排序操作现实按
A~Z
的顺序排版;提供插入操作
添加新单词并重新排版。另外
通过键盘式菜单实现功能选择。
(
2
)
总体设计:
整个系统被设计为单词录
入模块,
文件存储模块和单词浏览模块。
其中单词录入模块要完
成输入单词,检查是否重复,排序操作。文件存储模块把
存放单词的数组中的数据写入文
件。单词浏览模块完成英文词典的输出,即文件
的输出操作。
(
3
)数据结构采用指针数组或二维数
组。以【
Enter
】键或者空格键作为单词输
入结束标志,对重复的单词自动排除可选用查找方法,数据结构可采用指针和数
组。
2
.程序设计思路
< br>在英文词典排版当中,人工统计的速度很慢,且容易出现差错。本英文词典
排版系
统的自动化加速了排版工作,提高工作效率本程序主要采用对零散的单词
进行自动读取,
然后按单词首字母顺序讲单词保存到文档,这样的结构化非常便
于程序后续的排版工作。
排版具体过程涉及到自动排除重复单词与添加新单词并
重新排版等问题,将于正问中详细
介绍。本程序实现了所有设计要求。
整个系统被设计为单词录
入模块、文件存储模块和单词浏览模块。其中单词
录入模块要完成输入单词、检查是否重
复、排序操作。文件存储模块把存放单词
的数组中的数据写入文件。单词浏览模块完成英
文词典的输出,即文件的输出操
作。
.
专业
.
整理
.
下载可编辑
3
.功能模块图
一种简单的英文词典排版系统
单词录入
单词浏览
单词排序
4
.数据结构设计
< br>数
据
结
构
采
用
指
针
数
组
或
二
维
p>
数
组
:
char*
dictionary[N];
或
ch
ar
dictionary[N][20]
。其中
N
是宏定义
#define N
256
(表示单词个数)
。
(
1
)单词录入模块
输入一个单词,存放在一个临时字符数组中,以空格或回车表示单词的结束
(这也是默认操作)
,然后换行输出刚刚输入的单词。
采用插入排序算法的思想把
该单词插入单词数组中,不同的是如果两个单词相同则不插
入。
(
2
)
文件存储模块
采用
fwrite
或
fprintf
把单词数组输入到文件中。
(
3<
/p>
)单词浏览模块
采用
< br>fread
或
fscanf
把单
词从文件中读出,然后输出。
5
.算法设计
(
1
)主函数
【流程图】
.
专业
.<
/p>
整理
.
显示一系列的功能选项
输入
n
,判断
n
是否是
p>
1
—
9
N
p>
根据
n
的值调用各功能模块函数
下载可编辑
Y
【程序】
#include
#include
#include
#include
#define ROWS 256
#define
COLS 32
static FILE *fp;
static char a[ROWS][COLS];
char get_option(void);
int
b(int count);
void c(char *pt[], int
count);
int check(char arr[], int
count);
void storage(char *pt[], int
count);
int
n;
//****n
< br>全局变量
*****//
char
word[N][20];
void
menu()//***
主界面
***//
{
int n,w;//*
变量
n
保存选择菜单数字,
< br>w
判断输入的数字是否在功能菜单对
应数字围
*//
do
{
puts(
puts(
puts(
puts(
puts(
puts(
puts(
puts(
puts(
printf(
scanf(
if(n<1||n>6)//*
对
选择的数字作判断
*//
{
w=1;
.
专业
.
整理
.
下载可编辑
getchar();
}
else w=0;
}while(w==1);
switch(n)
{
case
1:add();break;//*
追加模块
*//
case
2:browse();break;//*
浏览模块
*//
case
3:search();break;//*
查找模块
*//
case
4:sort();break;//*
分类模块
*//
case
5:order();break;//*
排序模块
*//
case
6:exit(0);//*
退出
*//
}
}
void main()
//********
主函数
*********//
{
menu();
}
(
2
p>
)公共函数
【程序】
int
load()//*
加载函数
*//
{
int i,count;
int start;
char *pt[ROWS];
char ch, len;
char input;
if((
fp=fopen(
以输出打开方式,在此前的记
录被覆盖
p>
*//
{
printf(
return NULL;
}
for(i=0;!feof(fp);i++)
fscanf(fp,
fclose(fp);
return
i+1;//*
返回记录个数
*//
}
.
专业
.
整理
.
下载可编辑
void
save(int n)//*
保存函数,保存
n
个记录
*//
{
FILE *fp;
int i;
if((fp=fopen(
以输出
打开方式,在此前的记
录被覆盖
*//
{
printf(
exit(0);
}
<
br>scanf( <
br>
for(i=0;i
fprintf(fp,
fclose(fp);
}
(
3
)各功
能模块设计
1
)分类模块
【程序】
void sort()
{
int i,j,k;
char c[20];
if((n=load())==0)
{
printf(
exit(0);
}
for(i=0;i
for(j=0;j
if(strcmp(word[j],word[j+1])>0)
{
strcmp(c,word[j]);
strcmp(word[j],word[j+1]);
strcmp(word[j+1],c);
}
save(n);
printf(
printf(
.
专业
.
整理
.
下载可编辑
if(k==1)
browse();
else if(k==2)
menu();
}
2
)排序模块
【流程图】
用选择法排序
保
存
返回主菜单
【程序】
void order()
//*
排序模块
*//
{
int a[N],i,j,t;
struct words;
n=load();
for(i=0;i
for(i=0;i
for(j=i+i;j
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(j=0;j
printf(
}
.
p>
专业
.
整理
.
下载可编辑
3
)修改模块
【流程图】
显示所有记录,让用户看哪个要修改
输入要修改的单词
是否找到此单词记录
Y
显示找到的单词,
调用
修改函数
Y
Y
询问用户是
返回主菜单
否继续修改
【程序】
void
modify(int a) //*
修改模块
*//
{
char c[20];
printf(
scanf(
strcpy(word[a],c);
save(n);
}
.
专业
.<
/p>
整理
.
N
提示没有找到
下载可编辑
4
)删除模块
【流程图】
显示所有记录,
让用户看哪个需要删除
输入需要删除的单词
是否找到此单词记录
Y
N
显
示
找
p>
到
的
记
录
提示没有找到
调
用
删
除
函
数
Y
N
询
问
用<
/p>
户
是
否
继
返回主菜单
续删除
【程序】
void del(int
a) //*
删除模块
*//
{
int x,i,y;
printf(
you
sure
to
delete
this
word?nt1).sure 2).no
and
back
menu [
]bb
scanf(
输入要修改的单词
*//
if(x==1)
{
for(i=a;i
查找要修改的单词
*//
strcpy(word[i],word[i+1]);
save(n-1);
printf(
scanf(
if(y==1)
search();
else if(x==2)
menu();
.
专业
.
整理
.
下载可编辑
}
else if(x==2)
{
menu();
}
}
5
)追加模块
【流程图】
调用加载函数
n=load()
;并计算可
以记录个数
n
输入用户要追加的的单词
保存追加的单词
Y
询<
/p>
问
用
户
是
否
继
续追加单词
N
返回主菜单
【程序】
void add()
//*
追加模块
*//
{
int i,x,w1,w2,w;
char c[20];
if((n=load())==0)
exit(0);
else
{
puts(
scanf(
输入要追加的单词
*//
for(i=0;i
{
if(strcmp(word[i],c)==0)
p>
.
专业
.
整理
p>
.