资源描述
课程设计汇报
课程设计题目:曼彻斯特编码模拟
学生姓名:*****
专 业:计算机科学和技术
班 级:*******
学 号:***********
指导老师:*****
12月19日
目 录
第1章 需求分析···························· 2
1. 1 引言 ·························· 2
1. 2 任务概述························ 2
1. 3 功效划分························ 2
1. 4 运行需求及其它·················· 3
第2章 总体设计···························· 3
2. 1 系统方案························ 3
2. 2 软件结构························ 4
第3章 具体设计···························· 5
第4章 试验源码···························· 6
第5章 试验测试···························· 9
5. 1 测试步骤及内容················· 9
5. 2 测试总结······················· 10
第6章 试验总结···························· 11
第一章 需求分析
1. 1 引 言
为方便以后软件维护及升级,编写此需求说明书。根据此次课程设计相关要求,在老师指导下设计完成了程序。程序推荐在VC++ 6.0环境下运行。
以下是程序中用到相关变量及函数名称释义:
int d[20][4],用来存放转换后二进制数数组
char c[20], 用来存放十六进制数据数组
int i, 用来进行运算及统计数组长度变量
int g, 用来存放数组长度变量
int u, 用来计算输出二维数组第一维维数变量
int j 用来计算输出二维数组第二维维数变量
int e, 用来判定是否进行图像输出
void Man() 将字符串数据转换为十进制数,然后进行二进制转换函数
void Tu() 显示曼彻斯特模拟编码
设计过程中使用到参考资料有以下:
1、 C程序设计(第四版)----谭浩强 著,清华大学出版社
2、 计算机网络(第三版)----吴功宜 著,清华大学出版社
3、 软件工程(6月第一版)----景秀丽、吕洪林著,中国水利水电出版社
1. 2 任务概述
任务目标是输入十六进制数据,输出曼彻斯特编码模拟波形图。最终使程序能够在VC++6.0中运行。要求在三天上机课内完成任务,经老师验证后,方可准备试验汇报。汇报内容应该包含封面、目录、需求分析、总体设计、具体设计、编码(具体写出编程步骤)、测试步骤和内容、课程设计总结、参考资料等。
1. 3 功效划分
第一部分为输入数据;
第二部分为字符串转换十进制数;
第三部分为十进制转换二进制数;
第四部分为输出曼彻斯特模拟编码;
第五部分为主函数入口。
1. 4 运行需求及其它
程序在VC++6.0环境下编写,能够在支持语言环境下运行。软件不含有保密功效,但可维护性强。若用户对保密性要求高,不推荐使用或测试。
第二章 总体设计
2. 1 系统方案
数据流图 :
读取数据
输入数据
将二进制数对应图形输出
将字符串转
换为二进制数
显示图像
根据数据流图实现方法,推荐设计两个函数,第一个是将字符串转换为二进制函数,第二个是将二进制数对应图像显示函数。
2. 2 软件结构
层次图 :
曼彻斯特编
码模拟系统
判定输出图形
转换为二进制
转换为十进制
输出
输入
编辑
第三章 具体设计
依据第二章系统方案中数据流图和总体设计中软件结构层次图设计,画出具体程序步骤图。
开始
步骤图设计以下 :
输入数据
字符是否正当?
NO
YES
将字符转换
为十进制数
输犯错误提醒
结束
对应输出相
正确波形图像
为十进制数
将十进制数
转换二进制
第四章 试验源码
试验源码以下 :
(
附编程步骤:
1、 写文件头并建立main函数
2、 定义要创建两个子函数
3、 main函数中调用子函数并进行第一次编译检验
4、 完成子函数具体内容
5、 进行最终编译及运行检测
)
#include"stdio.h"
#include"String.h"
int d[20][4]={0};//用来存放转换后二进制数
char c[20]={0}; //用来存放十六进制数据
int i=0;//用来进行计算
int e=0;
int g;//用来计算数组长度
////////////////////////////////////////////////////////////////////////////////////////////////
void Man()//将数据进行二进制转换
{
printf("请输入十六进制数据(小于20位):");
scanf("%s",c);
while(c[i])//将字符串数据转换为数字
{
if(c[i]>='0'&&c[i]<='9')
c[i]=c[i]-48;
else if(c[i]>='A'&&c[i]<='F')
c[i]=c[i]-55;
else if(c[i]>='a'&&c[i]<='f')
c[i]=c[i]-87;
else
{
printf("数据错误!请退出重来!!\n");
e=1;
return;
}
i++;
}
g=i;
int j;
printf("该数据转换为二进制为:");
for(i=0;i<g;i++)//将十六进制转换为二进制
{
for(j=3;j>=0;j--)
{
d[i][j]=c[i]%2;
c[i]/=2;
}
for(j=0;j<4;j++)
{
printf("%d",d[i][j]);
}
}
printf("\n");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tu()//显示曼彻斯特模拟编码
{
if(e==1)
return;
printf("该数据曼彻斯特模拟编码为 :\n\n");
for(int u=0;u<i;u++)
for(int j=0;j<4;j++)
{
if(u==(g-1)&&j==3)
{
if(d[u][j]==0)
printf("▔|▁");
else
printf("▁|▔");
}
else if(d[u][j]==0)
{
printf("▔|▁");
if(j==3&&u<g)
{
if(d[u+1][0]==d[u][3])
printf("|");
}
else
{
if(d[u][j+1]==d[u][j])
printf("|");
}
}
else
{
printf("▁|▔");
if(j==3&&u<g)
{
if(d[u+1][0]==d[u][3])
printf("|");
}
else
{
if(d[u][j+1]==d[u][j])
printf("|");
}
}
}
i++;
printf("\n\n");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
Man();
Tu();
}
第五章 试验测试
5. 1 测试步骤及内容
首优异行正确数据测试
第一次测试:
输入十六进制数据为:a12
第二次测试:
输入十六进制数据为:0a12
接下来进行不正确数据测试
第三次测试:
输入数据为:ppq
第四次测试:
输入数据为:12sq
测试总结:输入适宜或不适宜数据全部能够得到正确回复,满足了课程设计要求。
第六章 试验总结
前前后后大修改代码不下六次,第一次代码当然是不完善,即使经过自己数次验证,认为已经是正确。其实当初还存在相当大缺点,比图像显示很难看,没有显示出竖杠“|”,也不能进行数次循环实施。认识到这些缺点后,果断开始进行完善。
第一步是对数次循环进行完善。第一次尝试使用for循环来实现。失败后,选择了最不受喜爱goto语句,我竟然实现了!经过对循环内容数次修改,实现了输入正确数据显示图像以后循环,包含在选择时候退出程序。也实现了输入错误数据提醒以后循环及退出。万万没料到是第二天经过老师测试,发觉循环没问题,可是在第二次循环输入时候,对字母(比如“a”)进行二进制转换时竟然会出现错误。不过数字却不会。迷惑同时,接到老师提醒,遂寻求修正错误。花去大量时间以后,发觉个人处理不了,便认为是循环方法犯错。改为while循环,修改完成以后,不仅发觉第二次对字母进行二进制转换会犯错,而且会在第二输出二进制数是多加上一组四个零数据。无奈之下只好放弃循环。
放弃循环以后,程序没有出现什么奇怪错误了。于是进行第二步,对图像显示完善。利用特殊字符将“▔”、“|”、“▁”输出来了。再次找老师进行审查。老师提出了此次课程设计本人最终一个问题:最终输出图像多出了一竖。经过添加判定语句以后完善了这个缺点,老师也最终“无可奈何”认可了我程序。
最终,我对我第三次(goto语句)代码还是存在很多疑问,为何我第一次进行对字母二进制转换没有问题,第二次会犯错,数字却不会一起犯错??第四次(while语句)代码为何每次第二次进行二进制转换全部会多出四个零??知道此次课程设计结束,为何字母第二次转换会出现错误仍然没有处理。我将利用我自己课余时间找出问题所在,尽全力处理。
最终最终,我再一次认识到自己编码能力不足,以后一定会加强程序设计锻炼,早日成为一个合格程序猿~ ~
展开阅读全文