用栈来设置密码.doc

上传人:土8路 文档编号:10342214 上传时间:2021-05-10 格式:DOC 页数:11 大小:159KB
返回 下载 相关 举报
用栈来设置密码.doc_第1页
第1页 / 共11页
用栈来设置密码.doc_第2页
第2页 / 共11页
用栈来设置密码.doc_第3页
第3页 / 共11页
用栈来设置密码.doc_第4页
第4页 / 共11页
用栈来设置密码.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《用栈来设置密码.doc》由会员分享,可在线阅读,更多相关《用栈来设置密码.doc(11页珍藏版)》请在三一文库上搜索。

1、用栈来设置密码为课程设计题目名称用栈来设置密码程序设计基础课程设计报告专 业: 计 算 机 科 学 与 技 术 班 级: 2008级 (2)班 学 号: 2008082288 姓 名: 胡 琴 指导教师: 秦 怀 斌 老 师二OO九 年 8 月 25 日目 录 1 课程设计目的22. 课程设计题目描述和要求23.课程设计报告内容24.测试结果95.课程设计总结96.参考书目107.流程图101.课程设计目的用栈来做一个密码验证程序,以此来检测自己所学的知识。2.课程设计题目描述和要求问题描述 用栈来做一个密码验证程序。基本要求 密码验证只有三次机会。3.课程设计报告内容#include#inc

2、lude#include#include#includeusing namespace std;#define STACK_INIT_SIZE 10 /存储空间初始分配量#define STACKINCREMENT 2 /存储空间分配增量#define INFEASIBLE -1#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0char PASSWORD10=123223323; /*密码,全局变量*/typedef char SElemType;/指定用标识符SElemType代表int类型typedef struct STACK

3、 /*定义栈类型*/ SElemType *base; /在栈构造之前和销毁之后,base的值为NULL SElemType *top; /栈顶指针 int stacksize; /当前已分配的存储空间,以元素为单位 int length;SqStack,*Stack;/Status是函数的类型,其值是函数结果状态代码typedef int Status;/-基本操作的算法描述(部分)-void InitStack(Stack *S);Status DestroyStack(Stack *S); void ClearStack(Stack *S);void Push(Stack *S,SEle

4、mType e);Status Pop(Stack *S);Status GetTop(Stack S,SElemType *e);void Change(SqStack S,char *a);void Control(Stack *s);void InitStack(Stack *S) /*初始化栈*/构造一个空栈S *S=(SqStack *)malloc(sizeof(SqStack); (*S)-base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!(*S)-base)exit(INFEASIBLE);/存储分配

5、失败 (*S)-top=(*S)-base; (*S)-stacksize=STACK_INIT_SIZE; (*S)-length=0;/ InitStackStatus DestroyStack(Stack *S) /* 销毁栈*/ free(*S)-base); free(*S); return OK;/DestroyStackvoid ClearStack(Stack *S) /*把栈置为空*/ (*S)-top=(*S)-base; (*S)-length=0;/ClearStackStatus StackEmpty(SqStack S) /*判断栈空否*/ if(S.top=S.b

6、ase) return TRUE; else return FALSE;/StackEmptyvoid Push(Stack *S,SElemType e) /*把数据压入栈*/插入元素e为新的栈顶元素 if(*S)-top - (*S)-base=(*S)-stacksize) /栈满,追加存储空间 (*S)-base=(SElemType *) realloc(*S)-base, (*S)-stacksize + STACKINCREMENT) * sizeof(SElemType); if(!(*S)-base) exit(INFEASIBLE);/存储分配失败,exit(异常代码)为异

7、常结束语句 (*S)-top=(*S)-base+(*S)-stacksize; (*S)-stacksize += STACKINCREMENT; *(*S)-top+)=e; +(*S)-length;/PushStatus Pop(Stack *S) /*删除栈顶元素*/若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR if(*S)-top=(*S)-base) return ERROR; (*S)-top-; -(*S)-length; return OK;/PopStatus GetTop(Stack S,SElemType *e)/*返回栈顶元素*/若栈不

8、空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if(S-top=S-base) return ERROR; *e=*(S-top-1); S-top-; return 0;/GetTopvoid Change(SqStack S,char *a) /*将栈中的元素按反序付给 a */ int n=S.length-1 ; while (!StackEmpty(S) GetTop(&S,&an-);/Changevoid Control(Stack *s)int i=0,k,j=0; SElemType ch,*a; k=strlen(PASSWORD); printf(输入一个

9、%d 个数的密码,你只有 3 次机会:n,k); printf(C:); for(;) if(i=3) i+; break; else if(i0&i3) for(j=1;jlength;j+)printf( ); ClearStack(s); for(;) /* 密码输入,可退格 */ ch=getch(); /* 退格 的ASCII 是8 */ if(ch!=13) /* 判断是否为回车,不是则把它付给下面*/ if(ch=8) Pop(s);printf( ); else printf(*);Push(s,ch); j=(*s)-length; else break; i+; if(k!

10、=j) continue; else a=(SElemType *)malloc(*s)-length*sizeof(SElemType); Change(*s,a); for(j=1;jlength;) if(aj-1=PASSWORDj-1) j+; else j=(*s)-length+ STACKINCREMENT;break; if(j=(*s)-length+ STACKINCREMENT) continue; else break;/*最上面的for完*/ if(i=4) printf(n密码错误,即将退出); else printf(n密码正确n); free(a);/Cont

11、rol int main() Stack s;cout初始密码为:123223323n; InitStack(&s); Control(&s); getch(); DestroyStack(&s); return 0; 4运行结果5. 课程设计总结通过一年的学习,我已经能够进行简单的程序设计,这次课程设计对自己所学知识起到了检测和提高的作用。通过和同学的讨论与交流,解决了不少问题。课程设计完成后,感觉上最大的收获就是在设计之前要有一个清晰的思路和完整的设计提纲,对各功能函数的作用做详细考虑。细心在这次课程设计中起到很关键的作用,一个标点、一个字母、一个符号都可能导致程序的不能运行,因此要有耐心

12、认真完成。当然知识是不可缺少的,只有对这学期所学得知识能够真正掌握并能加以运用,才能顺利完成这次的课程设计。课程设计是对学习c+的一个很好的检测,通过课程设计可以开发思维,提高创新能力。要想完成课程设计光靠书本上学的那点东西是不够,所以要求我们到图书馆或网上查阅相关资料,这也是自我学习的一个过程,同时使我们认识到光满足于书本知识是远远不够的,真正体会到什么是学海无涯。 6.参考书目1谭浩强,C+程序设计,北京,清华大学出版社,2006年.2严蔚敏 吴伟民 编著,数据结构(C语言版),北京,清华大学出版社,2006年.7.流程图Main函数 InitStack(&s);结束退出是 否Control(&s);getch();DestroyStack(&s); 判断密码正误

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1