沈阳理工大学课程设计专用纸NO.成绩评定表学生姓名马舒阳班级学号1203070102专业电子信息科学与技术课程设计题目编程技术基础实训评语组长签字:成绩日期2013年月日沈阳理工大学课程设计专用纸NO.1课程设计任务书学院信息科学与工程学院专业电子信息科学与技术学生姓名马舒阳班级学号1203070102课程设计题目编程技术基础实训实践教学要求与任务:利用C语言编写下题的代码。题目名称:设计求两数之差的绝对值的函数和学生成绩统计程序内容及要求:(1)题目一的内容和要求:1).设计一个选择式菜单。栈子系统*******************************************************1……入栈**2……出栈**3……显示**4……数制转换**0……返回*******************************************************请选择菜单号(0…4):2).设计一个整型数据元素的链栈。3).编写入栈、出栈和显示栈中全部元素的程序。4).编写一个把十进制数转换成八进制数的应用程序。(2)题目二的内容和要求:通讯录实质上是一个线性表,由于通讯录长度不确定,且插入或删除操作比较频繁,因此,采用单链式存储结构。要求实现如下功能:1).设计一个选择式菜单。沈阳理工大学课程设计专用纸NO.2通讯录管理系统*******************************************************1……通讯录单链表的建立**2……通讯者的插入**3……通讯者的删除**4……通讯者的查询**0……退出*******************************************************请选择菜单号(0…4):2).编程实现通讯录单链表的建立、通讯者的插入、通讯者的删除、通讯者的查询、通讯录的输出。工作计划与进度安排:第1天:1、指导教师布置课程设计题目及任务2、查找相关资料第2~4天:1、根据具体设计题目进行具体分析2、对设计题目进行编码和调试3、指导教师进行验收第5天:1、指导教师针对课程设计进行答辩2、完成课程设计报告指导教师:2013年月日专业负责人:2013年月日学院教学副院长:2013年月日沈阳理工大学课程设计专用纸NO.3目录一、课程设计目的------------------------------------------------------------1二、课程设计内容和要求---------------------------------------------------1三、题目一设计过程---------------------------------------------------------2四、题目二设计过程--------------------------------------------------------24五、设计总结-----------------------------------------------------------------36六、参考文献-----------------------------------------------------------------36沈阳理工大学课程设计专用纸NO.4题目栈子系统、通讯录管理系统一、课程设计的目的本学期我们对《数据结构》这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具备一定的C语言基础和编程能力。(1)题目一的目的:1.掌握栈的特点及其描述方法2.掌握链式存储结构实现一个栈3.掌握链栈的各种基本操作4.掌握栈的典型应用的算法(2)题目二的目的:1.掌握线性表的特点2.掌握线性表的顺序存储结构和链式存储结构的基本运算3.掌握线性表的基本操作二、课程设计的内容和要求(1)题目一的内容和要求:1).设计一个选择式菜单。栈子系统*******************************************************1……入栈**2……出栈**3……显示**4……数制转换*沈阳理工大学课程设计专用纸NO.5*0……返回*******************************************************请选择菜单号(0…4):2).设计一个整型数据元素的链栈。3).编写入栈、出栈和显示栈中全部元素的程序。4).编写一个把十进制数转换成八进制数的应用程序。(2)题目二的内容和要求:通讯录实质上是一个线性表,由于通讯录长度不确定,且插入或删除操作比较频繁,因此,采用单链式存储结构。要求实现如下功能:1).设计一个选择式菜单。通讯录管理系统*******************************************************1……通讯录单链表的建立**2……通讯者的插入**3……通讯者的删除**4……通讯者的查询**0……退出*******************************************************请选择菜单号(0…4):2).编程实现通讯录单链表的建立、通讯者的插入、通讯者的删除、通讯者的查询、通讯录的输出。三、题目一设计过程1、题目分析本题要求合理地设计一个栈的结构及入栈、出栈、删除、查找等基本操作,并运用此结构实现数制转换。2、算法描述沈阳理工大学课程设计专用纸NO.6首先定义一个结点结构体,指针域包括两个指针,分别指向前驱结点和后继结点,数据域为一个DataType类型的变量,其中DataTYpe类型为宏定义;在定义一个栈结构体,结构体内包括两个指针,分别为栈顶指针和栈低指针,还有一个int型记录栈的长度。欢迎界面后,进入主菜单,主菜单用switch设计,其中调用函数NUM,该函数可返回有效的菜单号,可屏蔽并提示错误信息及重新输入,菜单下调用了其他功能函数,菜单内除退出和初始化函数外所有的功能函数均存放在FUN.c.下。下面仅详细阐述一下各功能模块的工作原理。入栈为栈的首次赋值,利用do{}while();可按需求循环输入多组信息,并及时退出返回到主菜单,在实现循环多组输入时调用了函数Push,Push为机械入栈一个新元素,将参数nn,入栈到栈tt内,栈的长度加一。出栈函数Pop中,首先判断栈是否为空,为空时,不可出栈;非空时,输出栈顶元素及栈的长度,并删除栈顶节点,栈的长度减一。信息输出完毕后按任意键返回主菜单。显示函数Show中,即利用do...while循环多次调用出栈函数,每次输出时要按任意键继续一次,以保障画面整洁。信息输出完毕后按任意键返回主菜单。数制转换函数chang中,大体结构包括一个大的do...while允许多次使用信息转换,do中首先输入数及其进制和预期进制,然后判断是否为十进制,经费是禁止的数字转换为十进制,再将其循环除以预期进制,将其余数存在新建号的栈中,直到余数为零,停止循环,然后依次出栈,将栈顶元素依次显示出来,即转换结束。可选N或Y,继续下一次转换,或者返回主菜单。3、源代码ST.h:#ifndefST_H#defineST_H沈阳理工大学课程设计专用纸NO.7#includestdio.h#includestdlib.h#includeconio.h#includewindows.htypedefintDataType;typedefstructNode{structNode*pro;DataTypedata;structNode*next;}NN;//双向链栈的结点typedefstruct{NN*top;NN*base;intsize;}ST;//栈//main.c:主函数//Menu.c:框架界面函数和初始化退出函数voidInitiate(ST*tt);//栈的初始化及双向链的初始化voidJM();//界面intNum();//菜单序号选择voidExit();//退出沈阳理工大学课程设计专用纸NO.8//FUN.c:具体功能函数voidInput(ST*tt);//入栈voidPush(ST*tt,DataTypenn);//机械入栈intPop(ST*tt);//机械出栈voidShow(STtt);//显示voidchange(STtt);//数制转换#endifMenu.c:#includeST.HvoidJM()//界面函数{intch;STtt;Initiate(&tt);printf(\n\n\n\n\n\n\n\n\t\t欢迎您使用《栈子系统》!\n\n\n);printf(\t\t\t\t设计者:马舒阳(1203070102)\n);getch();do{system(cls);printf(\n\n\t\t\t\t栈子系统\n);printf(\t********************************************\n);printf(\t*1……入栈*\n);printf(\t*2……出栈沈阳理工大学课程设计专用纸NO.9*\n);printf(\t*3……显示*\n);printf(\t*4……数制转换*\n);printf(\t*0……返回*\n);printf(\t********************************************\n);printf(\t*提示:本系统仅可用于整型数数据的储存,望谅解。*\t\n);printf(\t********************************************\n);ch=Num();switch(ch){case1:Input(&tt);break;case2:Pop(&tt);break;case3:Show(tt);break;case4:change(tt);break;case0:Exit();case-1:沈阳理工大学课程设计专用纸NO.10;}}while(ch);}intNum()//判断菜单号{intk;printf(\n\t\t请选择菜单号(0…4):);scanf(%d,&k);getchar();if(k0||k5){printf(\n\t\t输入错误!按任意键继续...);getch();return(-1);}elsereturnk;}voidInitiate(ST*tt)//栈空的初始化注意:此函数内的tt为栈型指针,不同于JM内的tt{tt-base=(NN*)malloc(sizeof(NN));tt-top=tt-base;tt-size=0;}沈阳理工大学课程设计专用纸NO.11voidExit()//退出{system(cls);printf(\n\n\n\n\n\n\t\t谢谢使用程序退出!);printf(\n\n\n\n\n\n\t\t\t);printf(按任意键继续...);getch();}main.c:#includeST.Hintmain(){JM();return0;}FUN.c:#includeST.HvoidInput(ST*tt)//栈的初始化{DataTypenn;intch;system(cls);printf(\n\n\t\t老师早安!开始入栈!\n\n);do{沈阳理工大学课程设计专用纸NO.12printf(\n\t\t请输入新栈顶数据:);scanf(%d,&nn);//%dgetchar();Push(tt,nn);//调用入栈函数do{printf(\n\t\t继续?YorN);ch=getchar();getchar();if(ch!='N'&&ch!='Y')printf(\n\t\t请输入Y或N!\n);elsebreak;}while(1);}while(ch==