《软件技术实验报告.docx》由会员分享,可在线阅读,更多相关《软件技术实验报告.docx(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件技术实验报告 软件技术实验报告 实验序号 一 名称 BVB的感性认识-BVB基本控件 班级 学号 姓名 实验内容及完成情况: 实验内容: 11) 在屏幕上开辟一个窗口(文本框),窗口的上部放置一个标签,标签中显示:“欢迎使用0VisualBasic6.0中文版”。窗口的下部有三个按钮,左边按钮中标有“开始显示”,中间按钮中标有“清屏”,右边按钮中标有“结束”。当鼠标单击左边按钮时,文本框中显示“欲穷千里目,更上一层楼!”如果单击中间按钮,则清除文本框中显示的内容,单击右边按钮则程序结束。 22)单击“清屏”后,让光标出现在文本框中,此时往文本框中输入若干文字,例如“您好”,然后单击窗体,使
2、得在窗体的指定位置上显示在文本框中输入的文字。 33)如果将11)中单击左边按钮后文本框中显示的“欲穷千里目,更上一层楼!”改为“白日依山尽,黄河入海流,欲穷千里目,更上一层楼!”此时文本框在一行中将显示不下所有文本,请试调整该文本框的“Multiline”属性,并将文本框纵向距离调整到可容纳两行以上文字。此时再次执行程序,观察执行结果所发生的变化。 完成情况:顺利完成。 实验中遇到的问题及解决方法: 实验中所涉及的知识及技术: 文本框的双向作用(即输入与输出);窗体的双重作用(容器与输出);事件过程的编写;输入输出的简单实现;窗体、文本框、标签、命令按钮等基本控件的常用属性的动、静态设置等。
3、 实验中的创新及功能扩充: 实验收获与体会: 备注: 文章信息量很大! 软件开发技术基础 实验报告 学院:XX学院 班级:XX 姓名:XX 学号:XX 软件开发技术基础实验报告 实验名称:实验一顺序表的操作 班级学号姓名第周星期节成绩 一、实验目的: 1、掌握顺序表结构的实现方式; 2、掌握顺序表常用算法的实现; 3、熟悉利用顺序表解决问题的一般思路; 4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。 二、实验要求: 1、掌握顺序表的特点及常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技
4、巧、心得体会。 三、实验内容: 1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务: (1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。 (3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。 2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。 四、程序要求: 1、采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。 2、写
5、出完整的程序并能调试运行。 五、实验结果: 1、顺序表的结果: 2、电话簿的结果: 六、实验中遇到的问题及解决方法: 1.在删除数据的时候如果有两个一样的数时要怎样解决?解决方法:用while进行判断。 2.在删除操作中,删除函数中的l是指针,所以用-指向,而在主函数中l是结构体,用“.”。3.在查找的时候有一个返回值,而这个返回值是指针,所以在写查找函数的时候要把返回值类型写上。 七、实验心得体会: 一开始不知所措,首先应该有一个大的方向,把主程序编号,再逐步求精,落实到每一个函数的编写。对于c语言要熟练掌握,要熟悉循环等得操作,要熟练掌握顺序表中的插入,删除,查找,的基本函数。在此的基础上
6、灵活使用。附: 1、顺序表的程序:#include#include#include#include#definexxxx50 structSeqlist ;Seqlist*init() voidinsert(Seqlist*p) intnum=0;printf(请输入要键入的个数:);scanf(%d,&num);if(numlength=0;returnp;intdataxxxx;intlength;else printf(键入数据为:n);for(;num0;num-)p-length+;scanf(%d,p-data+p-length-1); if(p-length=xxxx) prin
7、tf(数组已满n);break;getchar();voiddeletee(Seqlist*p) intfind(Seqlist*p)inti=0;printf(请输入要删除元素的位置:);scanf(%d,&i);if(ip-length)printf(表中没有第%d个元素!n,i);else getchar();for(intj=i;jlength-1;j+)p-dataj-1=p-dataj;p-length-; intx;printf(请输入要查找的数据:);scanf(%d,&x);for(inti=0;ilength;i+) if(i=p-length)printf(数组中没有此数
8、据!n);if(p-datai=x) printf(此数据位于第%d个位置n,i+1);returni+1;getchar();return0;voiddisplay(Seqlist*p) intmain(void)Seqlist*p;for(inti=0;ilength;i+)printf(%-5d,p-datai);putchar(n);getchar(); p=init();charflag;printf(1-插入2-删除3-查找4-显示0-退出n);while(1) printf(请输入操作:);switch(flag=getchar()case1:insert(p);putchar(
9、n);break;case2:deletee(p);printf(删除后数据为:);display(p);putchar(n);getchar();break;case3:find(p);putchar(n);getchar();break;case4:printf(显示数据为:);display(p);putchar(n);break;case0:free(p);return0; 2、电话簿的程序:#include#include#include#includeusingnamespacestd;typedefstructcontact stringname;stringphonenumbe
10、r;stringphone;contact*next;CNT;claPhonebookpublic: Phonebook();CNT*Input();CNT*Turn_to_end();voidAdd();voidDelete();voidShowmenu();CNT*Find();voidShow_item(CNT*p);voidDisplay();voidModification();private:; Phonebook:Phonebook()head=newCNT;CNT*head; head-next=NULL;voidPhonebook:Show_item(CNT*p)coutna
11、mephonenumberphone voidPhonebook:Display() CNT*p;coutnext;p!=NULL;p=p-next)coutnamephonenumberphone cout CNT*Phonebook:Input() CNT*Phonebook:Turn_to_end() CNT*temp=head;while(temp-next!=NULL)coutnext;CNT*temp;temp=newCNT;couttemp-name;couttemp-phonenumber;couttemp-phone;temp-next=NULL;cout voidPhone
12、book:Add() voidPhonebook:Delete() CNT*p,*q;q=p=head;stringdata;coutdata;for(p=p-next;p!=NULL&p-name!=data&p-phonenumber!=data&p-phone!=data;CNT*temp,*p;temp=Input();p=Turn_to_end();p-next=temp;coutnext) q=p;if(p!=NULL)q-next=p-next;deletep; elsecout CNT*Phonebook:Find() CNT*p=head;stringdata;coutdat
13、a;for(p=p-next;p!=NULL&p-name!=data&p-phonenumber!=data&p-phone!=data;coutnext); if(p!=NULL)Show_item(p);else cout intmain()intselect;Phonebookphbook;CNT*p;p=Find();if(p!=NULL) coutp-name;coutp-phonenumber;coutp-phone; phbook.Showmenu();while(1) coutselect;getchar();switch(select)case0:exit(0);break
14、;case1:phbook.Add();break;case2:phbook.Display();break;case3:phbook.Delete();break;case4:phbook.Find();break;case5:phbook.Modification();break; return0; 实验名称:实验二链表的操作 (一) 班级学号姓名第周星期 节成绩 一、实验目的: 1、掌握单链表结构的实现方式; 2、掌握单链表常用算法的实现。 二、实验要求: 1、掌握链表的特点及常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设
15、计技巧、心得体会。 三、实验内容: 1、设计一个链表,要求编程实现如下任务: (1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。 (3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。 (4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法:问题:在
16、查找数据时显示的是一样的? 解决方法:在查找函数前要标明返回值的类型lnode*find。 七、实验心得体会: 首先要把书上的关于单链表的定义理解,在这个的基础上使用它。单链表通过结点在数据后附加后继元素的指针信息,可以更灵活的添加,删除,查找,插入,元素。要清楚指针的指向。首先要定义一个头结点,并且指针域要为空。将各个操作分别编写函数,有利于分块使用而且可以多次使用。附: #includeinta50,leng=0;voiddelet();voidchazhao();voidmain() coutleng;coutai;inty;couty;if(y=1)delet();couti;if(i
17、=leng)cout for(intj=i;jtemp;for(inti=0;i if(ai=temp)x=i+1;cout if(x=0)cout 实验名称:实验三链表的操作 (二) 班级学号姓名第周星期 节成绩 一、实验目的: 1、熟悉利用线性链表解决问题的一般思路; 2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。 二、实验要求: 1、熟练掌握链表的使用,并能运用其解决些常规问题。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、使用链表实现一个电话本的管理程序
18、,电话本中的每条记录包括姓名和电话两项。要求实现菜单、初始化、添加、删除和显示等功能。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法:1.实验结果版面不好看 解决方法:反复调试执行,每次都对自己不满意的地方进行一些改正。2.怎样比较name与s-name? 解决方法:用string.h中的strcmp函数。3.在传递数据时有问题? 解决方法:返回的值要注意数据类型,是指针还是整数等。 七、实验心得体会: 在应用中可以利用while实现选择,并根据选择用switch来完成选择。为
19、了简化编程,结点插入操作可仅仅在头部进行。单链表的方法使添加操作更加简便。不需要事先分配结点空间,而是在需要时动态的申请,节省了空间。、附: #include#include#include#includetypedefstructStudentcharstu_number12;charstu_name12;charstu_phone12;structStudent*next;STU; voidshow_menu()puts(1添加2删除3查找4插入5显示0退出); voidshow_item(STU*p)printf(|编号|学号|姓名|电话号码|n);printf(|1|%-12s|%-1
20、2s|%-12s|n,p-stu_number,p-stu_name,p-stu_phone); STU*init()STU*p;p=(STU*)malloc(sizeof(STU);p-next=NULL;returnp; voiddisplay(STU*head)inti;STU*p;p=head-next;printf(|编号|学号|姓名|电话号码|n);for(i=1;p!=NULL;i+,p=p-next) printf(|%-4d|%-12s|%-12s|%-12s|n,i,p-stu_number,p-stu_name,p-stu_phone); STU*turn_to_end(
21、STU*head)STU*p;for(p=head;p-next!=NULL;p=p-next);returnp; STU*putin()STU*temp;temp=(STU*)malloc(sizeof(STU);printf(请输入姓名:);gets(temp-stu_name);printf(请输入学号:);gets(temp-stu_number);printf(请输入电话号码:);gets(temp-stu_phone);temp-next=NULL;returntemp; voidadd(STU*head)STU*temp,*p;p=head;temp=putin();p=turn
22、_to_end(head);p-next=temp; STU*find(STU*head,inti)STU*p;if(i puts(输入错误);else for(p=head;p-next!=NULL&i0;i-,p=p-next); if(i0) puts(不存在该结点); returnNULL; returnp;STU*find_stu(STU*head,char*data)STU*p,*q;q=p=head;for(p=head-next;p!=NULL&strcmp(p-stu_name,data)!=0&strcmp(p-stu_number,data)!=0&strcmp(p-st
23、u_phone,data)!=0;p=p-next) q=p;if(p!=NULL) returnq;else puts(不存在该信息); returnp;voiddelet(STU*head,char*data)STU*p,*q;p=q=head;q=find_stu(head,data);if(q!=NULL) p=q-next; q-next=p-next; free(p);voidinsert(STU*head,inti) STU*p,*q,*temp;q=p=head;if(i puts(输入错误);elseif(i=0) temp=putin(); temp-next=p-next
24、; q-next=temp; elseif(find(head,i)!=NULL) q=find(head,i); p=q-next; temp=putin(); q-next=temp; temp-next=p;else return; intmain(void)STU*head,*temp;intselct,node;chardata12;head=init();show_menu();while(1) printf(请选择操作:); scanf(%d,&selct); getchar(); switch(selct) case1: add(head); putchar(n); break
25、; case2: display(head); printf(请输入要删除学生的学号、姓名或电话号码:); scanf(%s,data); getchar(); delet(head,data); display(head); putchar(n); break;case3: puts(请输入要查找的数据); scanf(%s,data); getchar(); if(temp=find_stu(head,data) show_item(temp-next); else puts(不存在该信息); putchar(n); break;case4: puts(请输入要插入结点的位置); scan
26、f(%d,&node); getchar(); insert(head,node); putchar(n); break;case5: display(head); putchar(n); break;case0: exit(0); break;return0; 实验名称:实验四栈的操作 班级学号姓名第周星期节 成绩 一、实验目的: 掌握栈的的定义和运算,了解栈的应用。 二、实验要求: 1、掌握栈的特点及常见算法。 2、参照给定的栈的程序样例,验证给出的栈的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实
27、验内容: 1、堆栈的测试和应用。要求: 设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 四、程序要求: 1、栈的长度自行确定。 2、重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果: 六、实验中遇到的问题及解决方法: 七、实验心得体会: 栈是后进先出表,只允许在栈顶进行插入和删除。要掌握顺序栈初始化,出栈,入栈的基本程序,在理解得基础上加以运用。要清楚栈和单链表的区别。附: #include#includeusingnamespacestd;claSq
28、stackprivate:int*data;inttop;intmaxsize;public:Sqstack();voidpush();voidpop(int&);voiddisplay();voidmodify();Sqstack:Sqstack()top=-1;maxsize=5;data=newintmaxsize; voidSqstack:push()inttemp;if(top=maxsize-1) cout cout cintemp; top+; *(data+top)=temp; voidSqstack:pop(int&e)if(top-1) e=*(data+top); top
29、-; cout cout-1) i=top; for(;i=0;i-) cout cout voidSqstack:modify()inttemp;couttemp;if(temp0) maxsize=temp;else cout0 intmain()Sqstacktest;inttemp,select;cout cout cinselect; switch(select) case1: test.push(); break; case2: test.pop(temp); break; case3: test.display(); break; case4: test.modify(); br
30、eak; case0: exit(0); break; default: cout getch(); break; return0; 实验名称:实验五队列的操作 班级学号姓名第周星期节 成绩 一、实验目的: 掌握队列的定义及其运算,了解队列的应用。 二、实验要求: 1、掌握队列的特点及常见算法。 2、参照给定的队列的程序样例,验证给出的队列的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、队列测试和应用。要求: 设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,
31、10入队,然后出队中的数据元素并在屏幕上显示。 四、程序要求: 1、队列的长度由自行确定。 2、重点理解队列的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果 六、实验中遇到的问题及解决方法: 七、实验心得体会: 队列是只允许在一端进行删除操作的线性表。在操作时会有假溢出的情况出现,可以将存放队列元素的数组守卫相接,形成循环队列。即:rear=(rear+1)%m;Front=(front+1)%m附: #include#includeusingnamespacestd; typedefstructTemp intdata; structTemp*
32、next;T;claLinksqueueprivate:T*front,*rear;public:Linksqueue();voidEnqueue();voidDequeue(T*);voiddisplay(); Linksqueue:Linksqueue()front=rear=new(T);front-next=NULL; voidLinksqueue:Enqueue()T*temp;temp=new(T);couttemp-data;temp-next=NULL;rear-next=temp;rear=temp; voidLinksqueue:Dequeue(T*s)T*temp;if(
33、front-next!=NULL) temp=front; front=front-next; *s=*front; coutdata deletetemp; else cout voidLinksqueue:display()T*temp;if(front=rear) cout cout; for(temp=front-next;temp-next!=NULL;temp=temp-next) coutdata coutdata; coutrear intmain()Linksqueuetemp;T*a;a=new(T);intselect;cout cout cinselect; switc
34、h(select) case1: temp.Enqueue(); break; case2: temp.Dequeue(a); break; case3: temp.display(); break; case0: exit(0); break;default: cout getch(); break;return0; 实验名称:实验六二叉树的生成与遍历 班级学号姓名第周星期 节成绩 一、实验目的: 1、熟悉二叉树节点的定义和生成方式; 2、熟悉二叉树链式结构的生成方式; 3、掌握二叉树遍历算法的实现。 二、实验要求: 1、掌握二叉树的常见算法。 2、参照给定的二叉树的程序样例,验证给出的有关
35、二叉树的常见算法,并实现有关的操作。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1设计实现二叉树的建立及遍历算法,要求: (1)编写创建二叉链式存储结构的二叉树程序并输出。(2)编写递归实现二叉树的先序、中序、后序遍历算法。 (3)编写主函数测试以上二叉树的创建和遍历函数。2.假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。 四、实验结果: 五、实验中遇到的问题及解决方法: 调试的时候显示没有错误但是程序运行不出来?在if语句中的相等要用“=”。要注意! 六、
36、实验心得体会: 二叉树的遍历有先序,中序,后序遍历。这三种遍历都是用递归的形式实现的。而二叉树的插入结点的算法与许多因素有关,我们要在理解二叉树结构的基础上根据需要来编写程序。我在实验中使用的二叉排序树可以作为静态查找表使用也可以作为动态查找表。附: #include#include#include#definemaxsize1024typedefchardatatype;typedefstructnodedatatypedata;structnode*lchild,*rchild;bitree;bitree*xxxxE()/建立二叉树函数,函数返回值指向根节点指针charch;bitree*
37、Qmaxsize;intfront,rear;bitree*root,*s;root=NULL; front=1;rear=0;printf(请输入二叉树的各节点,表示虚节点,#表示节点:n);scanf(%c,&ch);while(ch!=#) putchar(ch); s=NULL; if(ch!=) s=(bitree*)malloc(sizeof(bitree);s-data=ch; s-lchild=NULL; s-rchild=NULL; rear+; Qrear=s; if(rear=1)root=s; else if(s&Qfront) if(rear%2=0) Qfront-
38、lchild=s; elseQfront-rchild=s; if(rear%2=1) front+; scanf(%c,&ch);returnroot;voidpreorder(bitree*p)if(p!=NULL) printf(%c,p-data); preorder(p-lchild); preorder(p-rchild);return;voidinorder(bitree*p)if(p!=NULL) inorder(p-lchild); printf(%c,p-data); inorder(p-rchild);return;voidpostorder(bitree*p)if(p!
39、=NULL) postorder(p-lchild); postorder(p-rchild); printf(%c,p-data);return;intyzjd(bitree*t)if(t=NULL)return(0);if(t-lchild=NULL&t-rchild=NULL)return(1); return(yzjd(t-lchild)+yzjd(t-rchild);voidmain()bitree*root;root=xxxxE(); printf(n先序遍历结果如下:n);preorder(root);printf(n中序遍历结果如下:n);inorder(root);printf(n后序遍历结果如下:n);postorder(root);printf(n叶子节点的个数为