软件课程设计第四阶段实验报告.docx
- 文档编号:15049420
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:18
- 大小:100.99KB
软件课程设计第四阶段实验报告.docx
《软件课程设计第四阶段实验报告.docx》由会员分享,可在线阅读,更多相关《软件课程设计第四阶段实验报告.docx(18页珍藏版)》请在冰点文库上搜索。
软件课程设计第四阶段实验报告
编号:
()字号
《软件课程设计》报告
班级:
信安10-2班
姓名:
王刚
学号:
08103693
指导老师:
徐东红
中国矿业大学计算机科学与技术学院
年月
软件课程设计任务书
专业年级:
信安10-2
学生姓名:
王刚
任务下达日期:
200年月日
课程设计日期:
200年月日至200年月日
课程设计题目:
面向过程
类别
题目序号
成绩
面向过程
5.判断日期与星期
8:
加减乘除(3、4、6、7。
。
。
)
面向对象
3.用三种方法通过虚函数求Fibonacci数列
7.关于磁盘文档的输入输出(1、2、4、5、6。
。
。
)
图形界面
1.通过MFCAPPWIZARD创建一个计算器(2。
。
。
)
数据结构
2.假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。
已知p为指向链表中某结点的指针,试编写算法在链表中删除结点p的前趋结点。
4 .设计一个统计选票的算法,输出每个候选的得票结果(假设采用单链表存放选票,候选人编号依次为1,2,3,……,N,且每张选票选且只选一人)
(1、3。
。
。
).
软件课程设计指导教师评阅书
指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):
成绩:
指导教师签字:
年月日
目录
一、面向过程设计题5-------判断日期与星期(sy5.cpp)
1.1需求分析……………………………………………………………………….…9
1.2概要设计………………………………………………………………………...10
1.3详细设计与编码………………………………………………………………...11
1.4调试分析………………………………………………………………………...13
1.5用户使用说明………………………………………………………………….13
1.6设计心得………………………………………………………………………...13
二、面向过程设计题8------8:
加减乘除(sy8.cpp)
2.1需求分析…………………………………………………………………………13
2.2概要设计………………………………………………………………………...14
2.3详细设计与编码………………………………………………………………...16
2.4调试分析………………………………………………………………………...17
2.5用户使用说明………………………………………………………………….17
2.6设计心得………………………………………………………………………...17
三、面向对象设计题3------用三种方法通过虚函数求Fibonacci数列(mianxiangduixiang3.cpp)
3.1需求分析…………………………………………………………………………17
3.2概要设计………………………………………………………………………...19
3.3详细设计与编码………………………………………………………………...21
3.4调试分析………………………………………………………………………...22
3.5用户使用说明………………………………………………………………….22
3.6设计心得………………………………………………………………………...22
四、面向过程设计题7---------关于磁盘文档的输入输出(miangxiangduixiang7.cpp)
4.1需求分析…………………………………………………………………………22
4.2概要设计………………………………………………………………………...23
4.3详细设计与编码………………………………………………………………...25
4.4调试分析………………………………………………………………………...25
4.5用户使用说明………………………………………………………………….25
4.6设计心得………………………………………………………………………...25
五、图形界面1---------计算器(计算器.rar)
5.1需求分析……………………………………………………………………….26
5.2概要设计………………………………………………………………………..26
5.3详细设计与编码………………………………………………………………..28
5.4调试分析………………………………………………………………………...28
5.5用户使用说明………………………………………………………………….29
5.6设计心得………………………………………………………………………...29
六、数据结构2------删除结点p的前趋结点(数据结构2.cpp)
6.1需求分析…………………………………………………………………………30
6.2概要设计………………………………………………………………………...30
6.3详细设计与编码………………………………………………………………...34
6.4调试分析………………………………………………………………………...35
6.5用户使用说明………………………………………………………………….35
6.6设计心得………………………………………………………………………...35
七、数据结构4--------统计选票(数据结构3.cpp)
7.需求分析………………………………………………………..………….……36
7.概要设计………………………………………………………………………...37
7.详细设计与编码………………………………………………………………...39
7.调试分析………………………………………………………………………...41
7.用户使用说明………………………………………………………………….41
7.设计心得………………………………………………………………………...41
八、课程设计总结………………………………………………………………42
第四阶段 数据结构
第一题.用链表和数组两种方式分别实现栈的出栈、入栈、取栈顶元素、判空、查找等操作
1.需求分析:
题目要求使用链表和数组两种方式实现栈的一些基本操作,首先必须知道栈的特点,栈是一种有序的链表,栈中元素的特点是先进后出,而且要知道出栈、入栈、取栈顶元素、判空、查找的条件,出栈就是通过把栈顶元素赋给指针所指的数值域,然后把栈顶指针的指针域赋给设置指针的指针域,在把刚刚转换的指针赋给栈顶元素的指针;在元素入栈时,首先把栈置空,去栈顶元素时,首先判断栈是否为空,如不为空在进行出栈操作,然后释放原栈顶元素的空间,在判空操作,要看栈顶位置是否等于栈底位置,若相等则为空;在查找元素时,首先输入元素,与原输入元素比较,若相等则输出元素及其位置,否则不存在。
2.逻辑设计:
在进行具体的程序设计时,首先进行宏定义,以便下面使用方便,需要定义栈的节点,并对栈进行初始化,当把空的数据类型赋给栈顶指针时表示已经对链栈进行了初始化,当元素入栈前,链栈是被置空的,当元素出栈时,把栈顶指针的指针域赋给设置指针的指针域,在把刚刚转换的指针赋给栈顶元素的指针,在取栈顶元素时,首先把栈顶指针赋给中间变量的指针,然后判断栈顶元素是否为空,同时要把刚刚使用的中间之间指向的数值进行输出,就达到了出栈的目的,在各个操作中都需要对栈进行遍历,然后在主函数中,通过使用switch和case语句对各个操作进行选择使用,通过调用刚刚建立的栈的各个操作函数实现各个操作。
3.详细设计:
源代码
(1)、链式栈:
#include
usingnamespacestd;
intN=0;
typedefstructStack{
intdata;
structStack*next;
}Stack,*SLink;
typedefstruct{
SLinktop;
intlength;
}SqStack;
voidInitStack(SqStack&S){
S.top=NULL;
S.length=0;
}//InitStack
voidPush(SqStack&S,int&e){
SLinkp;
p=newStack;
p->data=e;
p->next=S.top;
S.top=p;
N++;
++S.length;
cout<<"插入成功。
"< }//Push voidPop(SqStack&S,int&e){ if(! S.top) {cout<<"此栈为空栈。 "< exit(0); } e=S.top->data; //--S.length; S.top=S.top->next; N--; --S.length; cout<<"已经将栈顶元素"< "< }//Pop voidGetTop(SqStack&S,int&e){ if(! S.top) {cout<<"此栈为空栈。 "< exit(0); } e=S.top->data; cout< }//GetTop voidFind(SqStack&S,int&e){ SLinkp; p=newStack; p=S.top; intt=0,n; n=S.length; do{ if(n==0)break; if(e==p->data&&n! =0){t=1;break;} if(e! =p->data) {p=p->next;n--;} }while (1); if(t==1) cout<<"该栈中有要查找的值。 "< else cout<<"该栈中没有所要查找的值。 "< }//Find voidClearStack(SqStack&S){ //将已建的栈清空,为空栈 if(! S.top) cout<<"此栈已经为空。 "< S.top=NULL; N=0; cout<<"此栈已经清空完毕。 "< }//ClearStack voidmain(){ SqStackStack; InitStack(Stack); intm,n,x,y,z,e,i=0; cout<<"请输入建立的栈的大小: "; cin>>n; do{ cout<<"请选择操作: "; cout<<"1进栈2出栈3查看栈顶值4清空栈5查找其他退出"< cin>>m; switch(m){ case1: cout<<"请输入进栈值: "; cin>>z; if(i==n) { cout<<"Sorry! ! ! "< ! "< ! ! "< exit(0); } Push(Stack,z); i++; break; case2: Pop(Stack,x); i--; break; case3: cout<<"栈顶值为: "; GetTop(Stack,y); break; case4: ClearStack(Stack); break; case5: cout<<"请输入想要查找的元素: "; cin>>e; Find(Stack,e); break; default: {cout<<"所选择的操作错误,此程序将退出! "< exit(0);} }//switch }while(m! =5||m! =4||m! =3||m! =2||m! =1); } (2)、顺序栈: #include usingnamespacestd; #defineSTACK_INIT_SIZE100 #defineSTACKINCREMENT10 typedefstruct{ int*base; int*top; intstacksize; }SqStack; voidInitStack(SqStack&S){ S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(! S.base){ cout<<"构造栈时失败。 "< exit(0);} S.top=S.base; S.stacksize=STACK_INIT_SIZE; } voidGetTop(SqStackS,int&e){ if(S.top==S.base) {cout<<"此栈为空."< exit(0); } e=*(S.top-1); cout<<"该栈顶元素为: "< } voidPush(SqStack&S,inte){ if(S.top-S.base>S.stacksize){ S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(! S.base) {cout<<"新分配空间失败。 "< exit(0); } S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top=e;++S.top; cout<<"插入元素成功"< } voidPop(SqStack&S,int&e){ if(S.base==S.top) {cout<<"此栈为空栈,无法删除。 "< exit(0); } --S.top;e=*S.top; cout<<"删除该栈顶元素"< } voidClearStack(SqStack&S){ if(S.base==S.top) cout<<"此栈已经为空。 "< S.top=S.base; cout<<"清空该栈成功。 "< } voidFind(SqStack&S,inte){ intt=0,*n; n=S.top; do{ n--; if(*n==e){t=1;break;} if(n==S.base){t=0;break;} }while (1); if(t==1) cout<<"该栈中有要查找的值。 "< else cout<<"该栈中没有所要查找的值。 "< } voidmain(){ SqStackStack; intm,n,x,y,z,e,i=0; InitStack(Stack); cout<<"输入要建立的栈的大小: "; cin>>n; Stack.stacksize=n; do{ cout<<"请选择操作: "< cout<<"1进栈2出栈3查看栈顶值4清空栈5查找其他退出"< cin>>m; switch(m){ case1: cout<<"请输入进栈值: "; cin>>z; if(i==Stack.stacksize) { cout<<"Sorry! ! ! "< ! "< ! ! "< exit(0); } Push(Stack,z); i++; break; case2: Pop(Stack,x); i--; break; case3: GetTop(Stack,y); break; case4: ClearStack(Stack); break; case5: cout<<"请输入想要查找的元素(仅能查找一次): "; cin>>e; Find(Stack,e); break; default: cout<<"所选择的操作错误,此程序将退出! "< exit(0); } }while(m! =5||m! =4||m! =3||m! =2||m! =1); } 4.测试结果: (1)、链式栈: (2)、顺序栈: 5.用户使用说明 首先,用户必须浏览程序,知道当运行无误时,该如何输入数据;然后对当前程序进行编译和运行;在运行无误的情况下,按照窗口上的提示,选择操作然后按照提示操作下去,就可以实现题目中的要求使用链表进行栈的各种操作。 6.实验体会 此次实验,对于栈的基本操作的实现过程,使我加深了对这些操作的理解,给我印象最为深刻的是在定义头文件时,为了减少麻烦也要进行一些宏定义,增加了程序的可读性,当用户使用时,为其减少了阅读上的麻烦。 自此软件课程设计暂时告一段落,在这节课之中有纠结,有兴奋,有郁闷,有欢乐,软件课程设计生活中的一部分,值得回忆……
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 课程设计 第四 阶段 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)