中南大学 数据结构实验报告

2024-05-10

中南大学 数据结构实验报告(通用8篇)

篇1:中南大学 数据结构实验报告

数据结构原理实验报告

学号:

姓名:

线性表

一、问题描述 1.实现ADT表

2.设表的Reverse运算将表中元素的次序反转。扩充用数组实现表的结构List,增加函数Reverse(L),将表L中元素的次序反转,并要求就地实现Reverse运算。

二、算法描述

从i=0开始,将表中第N个元素与N-i-1个元素调换即可

三、核心代码

void ReverseList(List L){

ListItem tmp;int i;for(i=0;in/2;i++){

} tmp = L->table[i];L->table[i] = L->table[L->n-1-i];L->table[L->n-1-i] = tmp;}

四、运行结果

篇2:中南大学 数据结构实验报告

实验名称:图及其应用

班级 姓名 学号 实验日期: 实验机时:2 学时 实验成绩:

-----------------一.实验目的:

1.熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法 2.掌握图的基本运算及应用

3.加深对图的理解,逐步培养解决实际问题的编程能力 二.实验内容:(1)基本实验内容:

采用邻接表或邻接矩阵方式存储图,实现图的深度遍历和广度遍历; 用广度优先搜索方法找出从一顶点到另一顶点边数最少的路径。三.程序及注释:

#include “stdio.h” #include “limits.h” //INT_MAX头文件 #include “windows.h” //boolean头文件 #define INFINITY INT_MAX #define MAX_VERTEX_NUM 20 #define OVERFLOW-1 #define OK 1 #define ERROR 0 typedef int Status;typedef enum {DG,DN,UDG,UDN} GraphKind;typedef int VRType;typedef char VertexType;typedef char* InfoType;typedef int QElemType;//边信息

typedef struct ArcCell{ VRType adj;//1或0表示是否邻接,对带权图,则为权值类型 InfoType *info;}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//图结构 typedef struct {

VertexType vexs[MAX_VERTEX_NUM];//定点向量 AdjMatrix arcs;

//邻接矩阵,为一二维数组 //图的当前顶点数和弧数 int vexnum,arcnum;GraphKind kind;

//图的种类标志

}MGraph;//辅助队列

typedef struct QNode{ QElemType data;//数值域 struct QNode *next;//指针域

}QNode, *QueuePtr;typedef struct{ QueuePtr front;//队头 QueuePtr rear;//队尾

}LinkQueue;//初始化队列

Status InitQueue(LinkQueue &Q){

Q.front = Q.rear =(QueuePtr)malloc(sizeof(QNode));if(!Q.front){ printf(“内存分配失败!”);exit(OVERFLOW);} Q.front->next = NULL;return OK;} //插入元素到队尾

Status EnQueue(LinkQueue &Q,QElemType e){

QueuePtr p =(QueuePtr)malloc(sizeof(QNode));if(!p){printf(“n内存分配失败!”);exit(OVERFLOW);} p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;return OK;} //队列判空

Status QueueEmpty(LinkQueue Q){ return Q.front == Q.rear;} //销毁队列

Status DestroyQueue(LinkQueue &Q){

while(Q.front){Q.rear = Q.front->next;free(Q.front);Q.front = Q.rear;} return OK;} //删除队头元素

Status DeQueue(LinkQueue &Q,QElemType &e){

if(QueueEmpty(Q)){printf(“n队列为空!”);return ERROR;} QueuePtr p = Q.front->next;e = p->data;Q.front->next = p->next;if(Q.rear==p)Q.rear = Q.front;free(p);return OK;} //对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){

for(int i=0;i

G.kind = UDN;printf(“输入顶点个数和边数(如:4,3):”);int vexnum,arcnum;scanf(“%d,%d”,&vexnum,&arcnum);G.vexnum=vexnum;G.arcnum=arcnum;//判断是否超过顶点最大个数 while(G.vexnum>MAX_VERTEX_NUM){printf(“最大顶点为20,重新输入(如:4,3):”);scanf(“%d,%d”,&G.vexnum,&G.arcnum);} printf(“n依次输入顶点向量值n”);int i;for(i=0;i

//清空缓冲区 fflush(stdin);printf(“第%d个:”,i+1);scanf(“%c”,&G.vexs[i]);} //初始化邻接矩阵 for(i=0;i

int values;printf(“n输入依附两个顶点的边及其权值<如,a,b,1>n”);for(i=0;i

printf(“第%d条:”,i+1);//清空缓冲区 fflush(stdin);scanf(“%c,%c,%d”,&rear,&front,&values);int m,n;//定位两顶点在vexs数组中的索引 m = LocateVex(G,rear);n = LocateVex(G,front);if(m==-1||n==-1){

printf(“输入顶点或不在此图中,请重新输入!n”);i--;continue;} //赋予对应矩阵位置的权值,以及对称弧的权值 G.arcs[m][n].adj = values;G.arcs[n][m].adj = values;} return OK;} //CreateUDG //矩阵输出

void printArcs(MGraph G){

int i;printf(“ ”);//输出第一行的顶点向量 for(i=0;i

for(int j=0;j

else printf(“ %d”,G.arcs[i][j].adj);}} printf(“ ∞”);

printf(“n”);} //访问顶点v输出

Status printAdjVex(MGraph G,int v){ printf(“%c ”,G.vexs[v]);return OK;} //查找v顶点的第一个邻接点

Status FirstAdjVex(MGraph G,int v){ //查找与顶点v的第一个邻接点,找到后立即返回其索引,若找不到,则返回-1 for(int i=1;i

return i;} return-1;} //查找基于v顶点的w邻接点的下一个邻接点 Status NextAdjVex(MGraph G,int v,int w){

//查找基于顶点v的w邻接点的下一个邻接点,找到之后立即返回其索引,若找不到,则返回-1 for(int i=w+1;i

boolean visited[MAX_VERTEX_NUM];//函数指针变量

Status(* VisitFunc)(MGraph G,int v);//DFS,从第v个顶点出发递归深度优先遍历图G void DFS(MGraph G,int v){

visited[v] = TRUE;//访问第v个顶点 VisitFunc(G,v);for(int w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w)){if(!visited[w])

DFS(G,w);}} //深度优先遍历

void DFSTraverse(MGraph G,Status(*Visit)(MGraph G,int v)){ //将函数复制给全局的函数指针变量,待调用DFS时使用

VisitFunc = Visit;int v;//将访问标记初始化为false for(v=0;v

void BFSTraverse(MGraph G,Status(*Visit)(MGraph G,int v)){

//按广度优先非递归遍历图G,使用辅助队列Q和访问标志数组Visited int v;int u;//将访问标记数组初始化为false for(v = 0;v

//判断顶点V是否被访问 if(!visited[v]){//将第一次访问的顶点对应的访问标记数组位置赋值为TRUE

visited[v] = TRUE;//输出顶点v Visit(G,v);EnQueue(Q,v);while(!QueueEmpty(Q)){//按入队序列取出顶点,便于查找此顶点的邻接点

DeQueue(Q,u);//查找当前顶点邻接点

for(int w=FirstAdjVex(G,u);w>=0;w = NextAdjVex(G,u,w))

if(!visited[w]){visited[w] =TRUE;Visit(G,w);EnQueue(Q,w);}}} //销毁队列 DestroyQueue(Q);} int main(){

printf(“====图的创建及其应用====n”);//创建一个图 MGraph G;CreateUDN(G);//用邻接矩阵输出图

printf(“n图的邻接矩阵输出如下:n”);printArcs(G);//深度优先遍历

printf(“n深度优先遍历序列:n”);DFSTraverse(G,printAdjVex);printf(“n”);//广度优先遍历

} printf(“n广度优先遍历序列:n”);BFSTraverse(G,printAdjVex);printf(“n”);四.运行结果:

五.实验心得:

篇3:大学物理实验数据的计算机处理

关键词:霍尔效应,螺线管,磁感应强度,EXCEL

0 引言

在大学物理实验课上,学生通过亲手操作获得了一系列的原始数据,这些数据通常都是具有一定误差。要从这些数据中得到可靠的实验结果,找出有关物理量之间的关系以及服从的物理规律,就需要对实验数据进行正确的整理分析和归纳计算,这就是数据处理。传统的数据处理是手工处理或使用计算器,不仅效率低,而且容易出错,另外在数据绘图方面具有诸多劣势。因此在物理实验教学中笔者引入计算机辅助处理方法来处理实验数据。经过比较,发现用Excel来处理数据是不错的选择。下面以霍尔效应测定螺线管轴向的磁感应强度分布实验为例介绍实验数据的计算机处理。

1. 实验原理简介

霍尔效应法测量磁场原理:

霍尔效应从本质上讲是运动的带电粒子在磁场中受洛仑兹力作用而引起的偏转。这种偏转就导致在垂直电流和磁场的方向上产生正负电荷的聚积,从而形成附加的横向电场。当载流子所受的横向电场力eEH与洛仑兹力evB相等时,霍尔器件两侧电荷的积累应达到平衡,故有

其中EH为霍尔电场,v是载流子在电流方向上的平均漂移速度。

设试样的宽为b,厚度为d,载流子浓度为n,则

由(1)、(2)两式可得

可以求得未知磁感应强度B

其中VH霍尔电压,KH称为霍尔器件的灵敏度,Is霍尔器件内部电流。

2. 数据处理表格总体设计

数据表格的设置有两个方面,一是实现原始数据的录入和管理;二是实现数据的分析处理。学生完成实验后会得到一组原始数据,将这些原始数据录入用设置好的Excel表格中,并以姓名和学号为文件名保存。这样就保证了数据的真实性和有效性,杜绝了学生在做实验报告时随意篡改或抄袭他人的数据。同时,保存的文件为查询学生的测量数据提供了方便。数据输入完毕,系统会自动生产根据录入数据分析得到实验结果及各种图表,实现了数据的分析管理,这样方便教师在批改学生的实验报告时,就很容易判断出学生的计算及作图是否准确。

基于以上构想,首先建立一个工作表,命名为霍尔效应测定螺线管轴向的磁感应强度分布处理系统,在工作表中建立如图2的表格,并将实验中给定数据录入表格中,如lm=0.600A、ls=8.00mA和测试点坐标等。数据表中存放原始数据的单元格需学生亲自录入数据,另一些单元格需要老师事先设置好,并保证学生不能改动。笔者利用EXCEL提供的保护功能将不需要录入原始数据的单元格保护起来,设置密码,不知密码的学生无法改动,保证系统的稳定性。

3. 数据的录入和分析处理

原始数据的录入和数据的分析处理是该系统的应用过程。原始数据的录入是指学生将实验课上测得的记录在实验报告上的原始数据逐一录入到数据表中放置原始数据的单元格内,这一过程必须保证准确不误;而数据处理是由系统自动完成的,系统根据原始数据和既定的函数公式计算的到各个测试点的霍尔电压和磁感应强度,并且自动画出磁感应强度分布曲线。

3.1 原始数据的录入

原始数据的输入非常方便,只要用鼠标点击,就可以选中相应的单元格,然后就直接输入数据和。在输入数据时,为了不失有效数字,先用鼠标选定要输入数字的单元格,再单击鼠标右键快捷方式,选择“数字”页面,点击数值选项,在小数位数选择框中输入要设定的位数。图2中的原始数据区是TH-H型螺线管磁场测定实验组合仪中测试仪VH屏幕读数,小数点后两位有效数字。数据处理结果区是通过原始数据和既定的函数公式计算的到的,按照间接测量量有效数字规则确定,都保留三为有效数字。

3.2 数据的分析与处理

霍尔效应测定螺线管轴向的磁感应强度分布实验数据处理包括霍尔电压VH、磁感应强度B的计算和绘制磁感应强度分布曲线。其中VH是通过V1、V2、V3和V4计算得到:

选定G5单元格后,输入“=(ABS(C5)+ABS(D5)+ABS(E5)+ABS(F5))/4”,回车后G5中显示计算结果。复制G5单元格后,选定G6至G21单元格后单击右键,选择“选择性粘贴”,然后选择公式,点击确认,G6至G21中的计算结果也显示出来了,至此,VH的设置完成了。磁感应强度B是通过VH、KH和IS计算得到:

选定H5后输入“G5*10^6/$B$2/$F$2”回车后H5中显示计算结果。同理,复制H5单元格到H6:H21,其他位置的磁感应强度自动计算出来,B的设置也完成了。实验结束后,只要学生将自己测得的原始数据V1、V2、V3、V4和TH-H型螺线管磁场测定实验组合仪上标记的霍尔器件灵敏度KH填入相应位置,系统就会实时根据这些数据计算出间接测量量VH和最终测量量B。

绘制磁感应强度分布曲线是本实验数据处理的重要环节,学生录入原始数据后VH和B自动计算出来,与此同时,系统会根据测试点位置坐标(X)和磁感应强度数据(B)绘制出螺线管轴向的磁感应强度分布曲线。图表设置方法如下:在“插入”菜单中选择“图表”,根据需要选择“XY散点图”及子图表类型,点击“下一步”,选择“系列”项,点击“添加”,选择C5至C21作为X值,H5至H21作为Y值,输入名称“螺线管轴向磁感应强度分布曲线”,点击“下一步”,输入X轴的名称“磁场位置(CM)”,输入Y轴名称“磁感应强度(mT)”,点击“下一步”,再点击“完成”即可,最后结果如图3所示。

4. 结论

普通物理实验是工科院校的必修课程,学生每年要做二十多个实验项目,实验的数据处理的任务量很大。笔者设计的利用EXCEL对实验数据处理的方法可以应用到大部分普通物理实验上,此种方法不仅能够准确快速的对每个实验的原始数据进行数据处理、误差分析、绘图图表,而且系统使用方便,大大提高学生的兴趣和机动性,具有较高的推广价值。

参考文献

[1]刘晓红.霍尔效应实验数据处理方法探讨[J].大学物理实验,2004.

[2]刘晓云.霍尔效应实验直流测量法的误差探讨及处理[J].大学物理实验,2004.

篇4:中南大学 数据结构实验报告

【关键词】教材整合; 教与学;能力培养;有效课堂

【中图分类号】G623.31 【文献标识码】B 【文章编号】2095-3089 (2012)02-0057-02

1 课题的提出

针对传统教学重知识的传授,轻能力的培养,重视教师的教,忽视学生的学,重教法、轻学法的特点和弊端,对于实践性极强的语言学科来说,实施传统教法无疑有碍于学生语言一种正确处理教与学关系的新途径,从课文教学人手,找准外语教学教法的最佳结合点,改变“重教轻学”的现象,摆正教师的位置和学生的地位,更充分地发挥教师的主导作用与学生主体作实践活动,限制了学生的言语活动量,不利于语言运用能力的培养,造成了教与学的严重失调。

课堂教学质量的提高,需要教与学双边的完美结合,需要教与学的有机协调,因此,保证教学双边的协调性与完整性是本实验的重点和焦点。由于课文教学为外语教学的主渠道,占据了课堂教学的大部分时间,因此,以改革英语课文教学为突破口,努力探索课文教学教与学的协调性为本课题研究的核心,旨在寻求用,以获得大面积提高教学质量的效果,进而达到培养学生的言语能力和自学能力的目的。

2 实验目的

从课文教学入手,找准外语教学教法与学法的最佳结合点,改变“重教轻学’的现象,正确处理教与学之间的关系,摆正教师的位置和学生的地位,更充分地发挥教师的主导作用和学生的主体作用,以获得大面积提高教学质量的效果,进而达到培养学生的言语能力和自学能力的目的。

3 实验原则与指导思想

3.1 坚持教师为主导、学生为主体的原则。 本原则要求在实验的整个过程中,必须坚持教师的示范作用。教师要根据教学大纲决定外语教学的指导思想、目的、内容、方法、进度和考核教学质量的方法,面向全体学生、针对不同程度的学生安排不同的训练内容,处理好教材中难点、知识之间的联系;学生应在教师的指导下,遵循学习和运用英语的心理认识规律,在掌握了一些语言知识和能力的基础上,应积极主动地自学,进行预习,基本上理解新知识和课文的内容,划出重点、难点、疑难问题,以便上课时重点听讲、质疑,进一步理解所学内容。在理解的基础上,要主动积极地进行听、说、读、写全面操练,变知识为自动化的熟练技巧并形成技能。

3.2 坚持外语教学与能力培养的指导思想。 本原则要求各种能力的培养应贯串外语教与学的始终。外语学习方法论认为,外语学习应分为呈现、实践、迁移三个阶段。呈现阶段是认识和熟悉课文,给学生提供外语素材及外语经验的阶段;实践阶段是逐渐缩小控制以进入交际的阶段,包括控制套用,类推使用和整理创新三步。无论是语言学家H.帕默、w.里弗斯、J.佩克还是w.斯威特对外语学习持有不同的观点和看法,但都认为其与各种能力的培养具有密切的关系。毫无疑问,应坚持外语教学中模仿力,观察力、想象力、类比力、概括力、逻辑思维和分析力、归纳——演绎力、综合力和创造力的培养同时注重能力培养的阶段性。

4 实验步骤与内容

学生学习和运用英语的心理认识过程有三个层次:了解、操练和运用。了解是指理解所学语言知识及其规律和机械地记忆套用语言知识。操练是指有意义的听、说、读、写言语操练,并通过操练培养听、说、读、写技能。运用是指灵活运用所学语言知识进行听、说、读、写言语交际活动。

从哲学的观点来看,教师的教是外因,学生的学是内因,外因要通过内因起作用。我们高九七级三位外语教师遵循外语教育规律和学生学习和运用英语的心理认识规律,从课文教学改革人手,改变原有的教学程序和方法,将课文教学分为词汇学习,课文处理和检测验收三部分,用十个课时的时间完成从知识的识记、知识的运用到技能的形成的教学全过程。步骤如下:

4.1 教学过程划分

第一部分词汇学习

本步骤重点解决词的音、形、义、性及用法。课时一,在语音室上,要求学生掌握词的拼读,并做到发音准确,书写合格。采取学生预读、听录音仿读,同学领读、教师

教读,全班齐读,个别朗读和结合课文读单词的方式,将加大读词的密度和强度,加强对词形的意识。单一要求实施多种形式的教学手段必将活跃课堂气氛,激发学习兴趣。课时二和课时三,要求学生着重掌握词的义、性及用法并加强自学能力的培养。教师提供教案(材料)给学生。学生自学为主,教师指导学习为辅,识记、理解和初步运用重点词、短语、句型、词语比较等语言知识,同时做好重点语言知识运用的准备工作,如(菲)控制性造句,上下文的填空,释义等,规定先做在“预习本”上。

第二部分课文处理

本步骤着重处理课文内容及语言点的理解、归纳和运用。课时四,学生略读课文,完成“目标检测题,和所提供的阅读理解题,师生讨论,老师评讲以获取学生理解课文程度的信息。课时五,学生细读课文,将重点句、难句(一般是复合句)的分析(用英语表述)、翻泽及改写做在预习本上。以学生先宣讲,老师后讲评的方式共同排除阅读中又一障碍——语句结构的理解。课时六,答疑课。疑难问题由以小组为单位用书面的形式课前呈交和当堂提出的两部分组成。课时七,学生精读课文,对课文进行归纳、总结。写出主题句、段意和中心思想,就课文进行答问。将课文复述、改写、缩写或命题书面表达做在预习本上。

第三部分检测验收

本步骤通过各种检测手段加强对学生进行听、说、渎、写能力的培养。课时八,复述课文,听写短文,完成就词汇、课文内容的测试题。课时九和课时十,评讲“课课练”高考模拟试题(讲评前得用两节辅导的时间完成此卷,送微机室统一评分,成绩保存)。

说明:

l、老师需要提供一份全课的教案材料,内容包括本课重点词和短语的用法举例和比较;一份有关词汇和课文的检测题:一套“课课练”高考模拟试题。

2、学生需要一个“预习本”,学完一课检查一次。

3、针对某一问题布置课文后的练习题。

4、学生将获得三个半课时的自学时间,能改变老师占用舍登时间、“满堂灌”的局面,为学生自学能力的培养提供条件。

4.2 教学程序划分。

课文教学教与学程序三段示意图

(按照外语学习分段说、学生心理认识过程和师生参与顺序)

5 实验对象和时间

实验班和对比班均由高97级六个平行班共328人组成,采用单组实验法进行纵向比较,将从第六课后“课课练”考试成绩与第六课前的某些“课课练”考试进行对比。由于考题出自于同一本资料,其难度系数的一致性可保证比较的可靠性。

實验时间:第一阶段(准备阶段)(1995年12月),收集高一册第一课到高二册第五课的“课课练”考试成绩,进行第二次“自学能力”现状的“民意测验”。

第二阶段,(实验和调查阶段)1996年1月一1996年6月),进行课题实验,收集各种资料和考试成绩,进行第二次“自学能力”现状的“民意测验”。

第三阶段(实验和分析总结阶段)(1996年7月一1996年9月)实验的分析和总结,写出实验报告、经验总结或课堂实录。

6 制度管理

本实验得到校方的大方支持。由本年级的三位外语教师(林安学、郭宗玉、于天伟)共同承担和组织课题实验,共同商讨教案,轮流撰写,随时研讨存在的问题和研究解决问题的措施和对策,定期检测。成绩、资料由郭宗玉老师管理;学生的“预习本”定期检查,统一保管。

7 实验效果

1997年6月,荣昌县分管局长、教研室、全县高中年级大部分兄弟学校的英语教师、荣昌中学外语组组员及校领导对本课题实验进行验收评定,现场听了由林安学在高九七级一班主讲的“检测验收’部分的一堂课,课后听取了就此实验所做的汇报和总结。让学生填写了调查问卷、查阅、统计、分析与实验有关的各种资料、数据、展开了充分的实事求是的评论。大家一致认为。该实验在课文教学中如何正确处理教与学双边关系及对学生的能力培养等方面取得了良好的教学效果,具有很强的可行性、推广性的特点。

篇5:中南大学 数据结构实验报告

实验地点 信息楼420 实验日期 2012-12-7

一、实验目的

1. 了解多通路的运算器与寄存器堆的组成结构。

2. 掌握多通路的运算器与寄存器堆的工作原理及设计方法。

二、实验设备

PC 机一台,TD-CMX 实验系统一套。

三、实验原理

1.ALU® 单元的结构

ALU®单元由运算器和双端口寄存器堆构成,通过不同的控制信号SEL1、SEL0 产生不同结构的运算器。运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A 和暂存器B。

SEL0 和SEL1 用于选择运算器和寄存器堆的通路:

(1)当SEL1=0、SEL0=0,ALU 的输出D7„D0、REG(右口)的输出OUT7„OUT0 和ALU与REG 的输入IN7„IN0 接到CPU 内总线上时,如图1-2-1 所示,寄存器堆只能从右口进行操作,相当于只有一组控制线的单端口寄存器堆,一般计算机组成原理实验涉及到的运算器和寄存器就是采用这种结构。

(2)当SEL1=

1、SEL0=0,REG(右口)的输出OUT7„OUT0 和ALU 与REG(右口)的输入IN7„IN0 接到CPU 内总线上时,运算器和双端口寄存器堆的结构如图1-2-2 所示,寄存器堆由两组控制信号来分别进行控制,每组控制信号都可以相对独立的对寄存器堆进行读写操作,同时增加了执行专用通道A 总线,以利于提高指令执行的效率。

(3)当SEL1=

1、SEL0=1,REG(右口)的输出OUT7„OUT0 和ALU 与REG(右口)的输入IN7„IN0 接到CPU 内总线上时,运算器和双端口寄存器堆的结构如图1-2-3 所示,在双通道双端口运算器和寄存器堆的基础上增加了暂存器旁路,把运算结果写回到寄存器堆的同时也可以写到暂存器A、暂存器B 中。由于在运算型指令中把运算的结果写到通用寄存器中的指令很多,占运算型指令的大多数,发生通用寄存器数据相关的概率相当高,因此,可以用硬件 设置专用路径来解决这种通用寄存器数据相关问题。

上面介绍了运算器和寄存器堆的三种典型的数据通路图,在计算机组成原理这门课程中我们已经对运算器有了初步的了解,明白运算器的主要功能是完成算术和逻辑类运算。在系统结构这门课程中经过进一步的研究,还会了解到运算器与寄存器堆的结构对于计算机系统的设计有着重要的作用,对于计算机性能的优劣有着很大的影响。2.ALU® 单元的应用

在了解运算器与寄存器堆结构的基础上,基于如图1-2-3 所示的双通道双端口运算器和双端口寄存器堆的结构可以设计一段程序:从IN 单元读入一个数据,存入R0;从IN 单元读入另一个数据,存于R1;将R0 和R1 相加,结果存于R0;将R0 和R1 相加,结果存于R3,同 时打入暂存器A 中;再将R0 的值送OUT 单元显示。

四、实验操作及运行结果

(1)实验步骤

1、把时序与操作台单元的“MODE”短路块插上,使系统工作在四节拍模式,按实验连接图接线。注意:连线时实验箱电源要处于关闭状态。

2、确保接线正确后,将实验箱连到电脑:电源线+并口Jtag下载线(打印机口),并打开实验箱电源。

3、在软件Quartus II 8.0中选择“File->Open Project”选项,按照以下路径查找实验过程中需要下载到FPGA中的数据“C:TangDuCMXFPGAALU® ALU®.qpf(.sof)”,打开该文件后,单击软件中的“Programmer”选项,单击“Start”完成下载。如果下载成功在界面Progress中可以看到100%的标志字样。

4、用串口电缆连接实验箱和电脑打印机口,接通电源,打开软件CMX,进行串口测试(如果串口线未连接或者串口线故障则自动弹出错误信息对话框):端口→串口选择→COM1或者COM2;然后,测试串口通讯是否成功:端口→串口测试。

5、如果串口通讯成功,在PC 机上运行TD-CMX,进入联机软件界面,选择菜单命令“【实验】—【ALU®实验】”,打开数据通路图。

6、首先按CON单元的CLR开关进行系统清零,状态机为S0态。然后,采用单节拍运行方式来观察数据流通。

1)用连接成的双通道双端口运算器和双端口寄存器堆的结构实现以下一段程序:从IN 单元读入一个数据,存入R0;从IN 单元读入另一个数据,存于R1;将R0 和R1 相加,结果存于R0;将R0 和R1 相加,结果存于R3,同时打入暂存器A 中;再将R0 的值送OUT 单元显示。

2)根据指令要求,得出用时钟进行驱动的状态机描述,即得出其有限状态机

S0:空操作,系统复位后的状态

S1:IN->R0;从IN 单元往R0 中打一个数 S2:IN->R1;从IN 单元往R1 中打一个数

S3:R0->A, R1->B;同时把R0、R1 中的数打入暂存器A、B 中 S4:A+B->R0;将A+B 的结果送往R0 S5:A+B->R3,A+B->A;增加暂存器旁路,将A+B 的结果送往R3 的同时打入暂存器A中 S6:R0->OUT;把R0 中的数送入输出单元显示

3)每个状态运行4个周期(T1—T4),即每个状态按4次单节拍运行按钮

。请在S1和S2状态,通过IN单元的开关分别输入两个数(比如1和3)。观察数据通路图中数据的变化,并检查是否与状态的描述相符合。最后观察OUT液晶单元是否显示正确(如果从IN单元输入的两个数分别为1和3,则OUT单元输出应该为4)。

7、当模型机执行完一遍后,检查OUT 单元显示的数是否正确,按下CON 单元的总清按 钮CLR,改变IN 单元的值,再次执行机器程序,从OUT 单元显示的数判别程序执行是否正确。

(2)实验结果

五、实验中出现的问题和解决方法

问题1:接线问题 解决方法:本试验我自认为是这三个实验里连线最复杂的一个,因为开始的时候小组其他的两个同学连的线,后来实验执行不成功,所以我们又检查了一下连线,虽然找到了几个错误但是仍然不成功,不得不在找一遍,最终发现了加法运算器执行不正确的地方了。问题2:串口问题

解决方法:使用新的串口需要根据实验操作指示重新安装USB转串口驱动程序。问题3:ID问题

篇6:数据结构实验报告

1.问题描述

为某个单位建立一个员工通讯录管理系统,可以方便地查询每一个员工的办公室电话号码、手机号码及电子邮箱。2.设计分析

在本设计中,整个通讯录可以采用顺序表或链表方式存储。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除以及整个通讯录表的输出。3.员工通讯信息的结构类型定义和通讯录链表的结点类型

typedef struct { char num[5];/*员工编号*/ char name[8];/*员工姓名*/ char phone[9];/*办公室电话号码*/ char call[12];/*手机号码*/ }DataType;/*员工通讯信息的结构类型*/ typedef struct node { DataType data;/*结点的数据域*/ struct node *next;/*结点的指针域*/ }ListNode,*LinkList;/*通讯录链表的结构类型*/ 4.实验源代码

// Address_List1.cpp : 定义控制台应用程序的入口点。// //#include “stdafx.h” #include“stdio.h” #include “stdlib.h” # include #include #include using namespace std;#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef intStatus;typedef struct { /*员工通讯信息的结构类型定义*/

char num[5];

/*员工编号*/

char name[8];

/*员工姓名*/ char phone[9];

/*办公室电话号码*/

char call[12];

/*手机号码*/

char mail[15];

/*邮箱*/ }DataType;/*通讯录单链表的结点类型*/ typedef struct node {

DataType data;

/*结点的数据域*/

struct node *next;

/*结点的指针域*/ }LNode, *LinkList;void CreateList(LinkList &L){//逆位序输入n个元素的值,建立带表头结点的单链线性表L

LinkList p;

int i,n;

L =(LinkList)malloc(sizeof(LNode));

L->next = NULL;

cout <<“请输入创建员工的通讯信息的个数:”;

cin >> n;

for(i = 0;i

p =(LinkList)malloc(sizeof(LNode));

cout <<“

请输入员工信息”<

cout <<“

员工编号:”;

cin>> p->data.num;

cout <<“

员工姓名:”;

cin >> p->data.name;

cout <<“办公室电话号码:”;

cin >> p->data.phone;

cout <<“

手机号码:”;

cin >> p->data.phone;

cout <<“

员工邮箱:”;

cin >> p->data.mail;

cout <<“================================”<< endl;

p->next = L->next;

L->next = p;

} } void InitList(LinkList &L){//初始化线性表

L =(LinkList)malloc(sizeof(LNode));

L->next = NULL;} void DestroyList(LinkList &L){//销毁线性表

LinkList p, q;

p = L;

q = p->next;

while(q!= NULL)

{ free(p);

} } int ListEmpty(LinkList &L){//判断线性表是否为空

if(L->next == NULL)

return TRUE;

else

return FALSE;} int ListLength(LinkList &L){//求链表的长度

LinkList p = L;

int c = 0;

while(p->next!= NULL){

c++;

p = p->next;

}

return(c);} void GetElem(LinkList &L){//取链表第i个数据元素

LinkList p = L->next;

string s;

cout <<“输入员工的编号或名字:”;

cin >> s;

while(p!= NULL)//根据相关信息,查找员工。

{

if(p->data.num == s || p->data.name == s || p->data.phone == s || p->data.call == s || p->data.mail == s)

break;

p = p->next;

}

if(!p)

cout <<“查无此人!”<< endl;

else{

cout <<“

员工信息”<< endl;

cout <<“

员工编号:”<< p->data.num << endl;

cout <<“

员工姓名:”<< p->data.name << endl;

cout <<“办公室电话号码:”<< p->data.phone << endl;

cout <<“

手机号码:”<< p->data.phone << endl;

cout <<“

员工邮箱:”<< p->data.mail << endl;

cout <<“================================”<< endl;

} } void ReviseList(LinkList &L)//修改信息 {

LinkList p = L->next;

char j[20];

string s;

int i;

cout <<“输入员工的编号或名字:”;

cin >> s;

while(p!= NULL){//根据相关信息,查找员工。

if(p->data.num == s || p->data.name == s || p->data.phone == s || p->data.call == s || p->data.mail == s)

break;

p = p->next;

}

if(!p)

cout <<“查无此人!”<< endl;

else

{

cout <<“n想修改什么信息?_1-编号 2-姓名 3-办公室电话号码 4-手机号码 5-邮箱”<< endl;

cin >> i;

cout <<“想修改成什么?”<< endl;

cin >> j;

switch(i){

case 1:strcpy(p->data.num, j);break;

case 2:strcpy(p->data.name, j);break;

case 3:strcpy(p->data.phone, j);break;

case 4:strcpy(p->data.call, j);break;

case 5:strcpy(p->data.mail, j);break;

default: cout <<“输入错误,”<< endl;

system(“pause”);

}

cout <<“修改完毕!”;

system(“pause”);

return;

} } void ListDelete(LinkList &L)//删除第i个元素 {

LinkList p, q;

int j = 0,i;p = L;

cout <<“请输入你要删除第几个员工的信息:”;

cin >> i;

while(p->next && j < i1)//删除位置不合理

cout <<“删除位置不合理”<< endl;

q = p->next;

p->next = q->next;//删除并释放结点

free(q);} void ListInsert(LinkList &L){

LinkList s, p = L;

s =(LinkList)malloc(sizeof(LNode));

cout <<“

请输入员工信息”<< endl;

cout <<“

员工编号:”;

cin >> s->data.num;

cout <<“

员工姓名:”;

cin >> s->data.name;

cout <<“办公室电话号码:”;

cin >> s->data.phone;

cout <<“

手机号码:”;

cin >> s->data.phone;

cout <<“

员工邮箱:”;

cin >> s->data.mail;

cout <<“================================”<< endl;

s->next = p->next;

p->next = s;}

void PrintList(LinkList &L)//打印线性表 {

LinkList p = L->next;

int i = 1;

if(p == NULL)

cout <<“通讯录为空!”<< endl;

while(p!= NULL)

{

cout <<“第 ”<

cout <<“

员工编号:”<< p->data.num << endl;

cout <<“

员工姓名:”<< p->data.name << endl;

cout <<“办公室电话号码:”<< p->data.phone << endl;

cout <<“

手机号码:”<< p->data.phone << endl;

cout <<“

员工邮箱:”<< p->data.mail << endl;

cout <<“==============================”<< endl;

p = L;

cout <<“请输入你要删除第几个员工的信息:”;

cin >> i;

while(p->next && j < i1)//删除位置不合理

cout <<“删除位置不合理”<< endl;

q = p->next;

p->next = q->next;//删除并释放结点

free(q);} void ListInsert(LinkList &L){

LinkList s, p = L;

s =(LinkList)malloc(sizeof(LNode));

cout <<“

请输入员工信息”<< endl;

cout <<“

员工编号:”;

cin >> s->data.num;

cout <<“

员工姓名:”;

cin >> s->data.name;

cout <<“办公室电话号码:”;

cin >> s->data.phone;

cout <<“

手机号码:”;

cin >> s->data.phone;

cout <<“

员工邮箱:”;

cin >> s->data.mail;

cout <<“================================”<< endl;

s->next = p->next;

p->next = s;}

void PrintList(LinkList &L)//打印线性表 {

LinkList p = L->next;

int i = 1;

if(p == NULL)

cout <<“通讯录为空!”<< endl;

while(p!= NULL)

{

cout <<“第 ”<

cout <<“

员工编号:”<< p->data.num << endl;

cout <<“

员工姓名:”<< p->data.name << endl;

cout <<“办公室电话号码:”<< p->data.phone << endl;

cout <<“

手机号码:”<< p->data.phone << endl;

cout <<“

员工邮箱:”<< p->data.mail << endl;

cout <<“==============================”<< endl;break;

case 4:

//添加

ListInsert(L);

cout <<“添加信息成功!”;

system(“pause”);

break;

case 5:

PrintList(L);

ListDelete(L);

cout <<“删除信息成功!”;

system(“pause”);

break;//输出全部信息

case 6:

PrintList(L);

system(“pause”);

break;

case 7:

cout <<“该通讯录共有 ”<< ListLength(L)<<“ 员工信息!”<< endl;;

system(“pause”);

break;

default:

cout <<“输入错误!”<< endl;

system(“pause”);

}

篇7:数据结构实验报告

一. 题目要求

1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历;

3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二. 解决方案

对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include “Stack.h”//栈的头文件,没有用上

typedefintElemType;

//数据类型 typedefint Status;

//返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType

data;

structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree;intInsertBST(BiTree&T,int key){//插入二叉树函数

if(T==NULL){

T =(BiTree)malloc(sizeof(BiTNode));

T->data=key;

T->lChild=T->rChild=NULL;

return 1;} else if(keydata){ InsertBST(T->lChild,key);} else if(key>T->data){

InsertBST(T->rChild,key);} else

return 0;} BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL;inti=0;while(i

//数据域

InsertBST(bst,a[i]);

i++;} returnbst;} int Delete(BiTree&T)

{

BiTreeq,s;

} if(!(T)->rChild){ //右子树为空重接它的左子树

q=T;T=(T)->lChild;free(q);}else{

if(!(T)->lChild){ //若左子树空则重新接它的右子树

q=T;T=(T)->rChild;}else{ q=T;s=(T)->lChild;while(s->rChild){

q=s;s=s->rChild;}

(T)->data=s->data;//s指向被删除结点的前驱

if(q!=T)

q->rChild=s->lChild;

else

q->lChild=s->lChild;

free(s);} } return 1;

//删除函数,在T中删除key元素 intDeleteBST(BiTree&T,int key){ if(!T)return 0;else{

if(key==(T)->data)return Delete(T);

else{

if(key<(T)->data)

returnDeleteBST(T->lChild,key);

else

returnDeleteBST(T->rChild,key);

} } } intPosttreeDepth(BiTree T){//求深度

inthr,hl,max;if(!T==NULL){ hl=PosttreeDepth(T->lChild);hr=PosttreeDepth(T->rChild);max=hl>hr?hl:hr;return max+1;} else

return 0;

} void printtree(BiTreeT,intnlayer){//打印二叉树 if(T==NULL)return;printtree(T->rChild,nlayer+1);for(inti=0;i

”);} printf(“%dn”,T->data);printtree(T->lChild,nlayer+1);} void PreOrderNoRec(BiTree root)//先序非递归遍历 { BiTree p=root;BiTreestack[50];intnum=0;while(NULL!=p||num>0){

while(NULL!=p)

{

printf(“%d ”,p->data);

stack[num++]=p;

p=p->lChild;

}

num--;

p=stack[num];

p=p->rChild;} printf(“n”);} void InOrderNoRec(BiTree root)//中序非递归遍历 { BiTree p=root;

} intnum=0;BiTreestack[50];while(NULL!=p||num>0){ while(NULL!=p){

stack[num++]=p;

p=p->lChild;} num--;p=stack[num];printf(“%d ”,p->data);p=p->rChild;} printf(“n”);void PostOrderNoRec(BiTree root)//后序非递归遍历 { BiTree p=root;BiTreestack[50];intnum=0;BiTreehave_visited=NULL;

while(NULL!=p||num>0){

while(NULL!=p)

{

stack[num++]=p;

p=p->lChild;

}

p=stack[num-1];

if(NULL==p->rChild||have_visited==p->rChild)

{

printf(“%d ”,p->data);

num--;

have_visited=p;

p=NULL;

}

else

{

p=p->rChild;

} } printf(“n”);}

int main(){//主函数

printf(“

---------------------二叉排序树的实现-------------------”);printf(“n”);int layer;inti;intnum;printf(“输入节点个数:”);scanf(“%d”,&num);printf(“依次输入这些整数(要不相等)”);int *arr=(int*)malloc(num*sizeof(int));for(i=0;i

scanf(“%d”,arr+i);} BiTreebst=CreateBST(arr,num);printf(“n”);printf(“二叉树创建成功!”);printf(“n”);layer=PosttreeDepth(bst);printf(“树状图为:n”);printtree(bst,layer);int j;int T;int K;for(;;){ loop: printf(“n”);printf(“

***********************按提示输入操作符************************:”);printf(“n”);printf(“

1:插入节点

2:删除节点

3:打印二叉树

4:非递归遍历二叉树

5:退出”);scanf(“%d”,&j);

switch(j){

case 1:

printf(“输入要插入的节点:”);

scanf(“%d”,&T);

InsertBST(bst,T);

printf(“插入成功!”);printf(“树状图为:n”);

printtree(bst,layer);

break;

case 2:

}

printf(“输入要删除的节点”);scanf(“%d”,&K);DeleteBST(bst,K);printf(“删除成功!”);printf(“树状图为:n”);printtree(bst,layer);break;case 3: layer=PosttreeDepth(bst);printtree(bst,layer);break;case 4:

printf(“非递归遍历二叉树”);printf(“先序遍历:n”);PreOrderNoRec(bst);printf(“中序遍历:n”);InOrderNoRec(bst);

printf(“后序遍历:n”);

PostOrderNoRec(bst);

printf(“树状图为:n”);

printtree(bst,layer);

break;case 5:

printf(“程序执行完毕!”);

return 0;} goto loop;} return 0;对于第四小问,要储存学生的三个信息,需要把上面程序修改一下,二叉树结构变为 typedefintElemType;

//数据类型 typedefstring SlemType;

typedefint Status;

//返回值类型 //定义二叉树结构 typedefstructBiTNode{ SlemType name;ElemType score;ElemType no;

//数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree;参数不是key,而是另外三个

intInsertBST(BiTree&T,intno,intscore,string name){//插入二叉树函数

if(T==NULL){

T =(BiTree)malloc(sizeof(BiTNode));

T->no=no;T->name=name;T->score=score;

T->lChild=T->rChild=NULL;

return 1;} else if(nono){ InsertBST(T->lChild,no,score,name);} else if(key>T->data){

InsertBST(T->rChild,no,score,name);} else

return 0;} 其他含参函数也类似 即可完成50个信息存储

用数组存储50个信息,查看以往代码

#include #include using namespace std;class student{ private: intnum;string name;int ob1;int ob2;intara;public: void set(inta,stringb,intc,int d);void show();int average();};void student ::set(inta,stringb,intc,int d){ num=a;name=b;ob1=c;ob2=d;ara=(c+d)/2;} void student::show(){ cout<<“学号:”<int main(){ cout<<“ 欢迎来到学生管理系统”<>numlock;switch(numlock){ case 0: cout<<“输入想查询的学号”<>i;if(i==j){ cout<<“该学号信息已被删除”<>j;delete[j]ptr;cout<<“删除成功”<>k;if(k!=j){

cout<<“该学号信息已经存在,添加失败”<

break;} cout<<“重新输入添加的学号”<>q;cout<<“输入姓名”<>w;cout<<“输入科目一的成绩”<>e;cout<<“输入科目二的成绩”<>r;ptr[k].set(q,w,e,r);break;case 3: for(m=1;m<20;m++){

for(int n=m+1;n<20;n++){

if(ptr[m].average()

student a;

a=ptr[m];

ptr[m]=ptr[n];

ptr[n]=a;

}}

ptr[m].show();} break;case 4: cout<<“谢谢使用”<

二叉排序树储存数据界面(储存学生信息略)

创建二叉树:

插入节点:

删除节点:

非递归遍历:

退出:

数组储存学生信息界面

分析查找效率:

因为二叉树查找要创建二叉树,而数组查找只创建一个数组,二叉树的创建时间比较长,所以对于数据量较少的情况下数组的查找效率比较高。但当数据量增加时,二叉树的查找优势就显现出来。所以数据量越大的时候,二叉树的查找效率越高。

四. 总结与改进

这个实验工作量还是很大的,做了很久。树状图形输出还是不美观,还需要改进。

一开始打算用栈实现非递归,但是根据书里面的伪代码发现部分是在C++编译器里运行不了的(即使补充了头文件和数据的定义),所以之后参考了网上的数组非递归,发现其功能和栈相似。

递归遍历的实现比非递归的遍历真的简单很多。

篇8:中南大学 数据结构实验报告

关键词:物理实验,数据处理,PHP,SQL

大学物理实验是理工科学生必修的一门实践性课程,在该课程中,每做一个实验都需要测量、记录和处理数据,在填写完成后上交实验报告。处理实验数据通常包含以下工作:

1)检测测量数据。如判断实验数据记录的正误,判断实验数据的好坏等。

2)根据有关公式计算实验测量值。

3)写出误差分析公式,并计算误差。

目前多数学校处理实验数据的方式是以手工计算为主。为了保证测量值的可靠性,通常每个值都需要测量较多的数据,再加上间接测量值的计算公式比较复杂,致使花费在数据处理的工作量比较大。就大学生而言,数值计算已不成为主要的训练内容,而应该把时间放到分析测量结果上。为此,本文基于PHP和SQL程序设计语言,设计出大学物理实验数据处理系统,实现实验数据处理和实验报告提交的自动化和网络化。

1 系统的需求分析

系统主要由学生、老师和管理员三类人员使用,针对日常的大学物理实验,报告主要功能应包括:

1)学生对物理实验数据的输入、处理、管理以及实验报告填写、管理。

2)教师能能够安排课程并对学生实验的数据和报告的浏览、评价。

3)管理员对系统成员的管理。

该系统的性能要求主要体现在两方面:正确性和安全性。正确性是指实验数据处理要严格按误差理论及有效数字正确的方式来处理。安全性是指要保证每位学生提交的实验数据的安全性,以防他人篡改。

2 系统设计

2.1 系统体系结构设计

根据系统的功能需求,该系统划分为三个主要模块:学生模块、教师模块、管理员模块,如图1所示。学生模块包含数据处理、实验报告、查看成绩、用户信息管理等子模块;教师模块包含课程安排、批改报告、查看成绩、用户信息管理等子模块。管理员则对应管理成员信息。

2.2 数据库设计

本系统关键的几张数据库表包括:

1)学校各学院班级的信息表。

2)学生用户信息表:包含学号、姓名、性别、密码、学院、班级、联系方式。

3)教师用户信息表:包含教工号、密码、性别、联系方式。

4)管理员用户信息表:包含用户ID、密码、性别、联系方式。

5)实验名称表:包含实验类别、实验名称。

6)实验数据表:包含实验名称、实验使用者、数据处理状态、实验数据。

7)实验报告表:包含实验名称、实验使用者、报告处理状态、报告内容、实验数据、实验成绩。

8)课程安排表:包含实验名称、申请教师、学期、学院、班级、课程状态。

3 功能实现

3.1 系统登陆与注册的实现

登陆界面主要包含三个输入文本域,分别是用户名,密码,验证码。若用户尚未注册,在此页面中提供注册链接。在注册页面,首先是身份选择,不同的身份,填写的内容也不一相同。选择身份后将进入相应注册页面。

3.2 学生实验数据处理功能的实现

以光学实验“用牛顿环测量透镜曲率半径”为例,该实验的实验数据包含测量环的起始环数、截止环数以及各个环的位移。为了方便操作,用户先将起始环和截止环输入到相应的文本框中,再点击“确定”按钮。在系统将自动输出用户输入所需的文本框提供用户输入相应的位移值。例如某用户测的是从21环到30环的数据。用户在起始环数输入21,在截止环数输入30,点击“确定”按钮,页面将会刷新而且制出21环到30环左右位移可输入文本框供用户填写。填完表中的数据后,用户就可以点击“提交”按钮进行下一步的计算,同时系统会对数据是否符合格式要求做出判断。数据输入界面如图2所示,处理结果显示界面如图3所示。

3.3 学生实验数据管理功能的实现

在管理数据页面中,用户可以对保存过的实验数据进行管理操作。系统将储存的数据根据所在状态分为“未上交的数据”,“待批改的数据”,“已批改的数据”三类划分,不同的分类拥有不同的管理操作权限。

在本系统具有上交和退还实验数据功能。对于未上交的实验报告用户可以上交,但是每个实验只能上交一份。上交发现有错可以退还,但一经批改后就只能查看,无法再退还和删除。

3.4 学生实验填写报告功能的实现

在本系统中,实验报告的子模块为用户提供填写实验报告的功能。实验报告项目的设立是根据广西民族大学实验报告的纸质版来设立。在实验报告填写内容框中,用户可以常规输入之外,还可以进行输入特殊字符,公式输入,粘贴等高级操作。用户只需把相应的内容填写完整,再点击“保存”按钮,系统就将内容保存到数据库中。

3.5 学生实验管理报告功能的实现

在本系统中,实验报告的子页面管理报告页面为用户提供管理实验报告。管理项目与数据管理类似,仅在此增多了打印实验报告一项。用户可以根据需要通过联网打印实验报告。

3.6 学生实验成绩查询功能的实现

在本系统中,成绩查询页面为用户提供实验成绩查询。用户可以根据学期来选择查询相应的成绩,系统对符合条件的数据进行统计并输出显示到新页面。当用户在该学期所有实验报告成绩评出后,系统就会在平均分一栏显示该学期的平均分,否则留空,如图4所示。

3.7 学生用户信息管理功能的实现

用户可以在用户管理页面对自己的资料进行修改管理。对于学生和教师用户,该用户身份和学号均不可更改,密码需要输入旧密码进行确认后方可修改。

3.8 教师实验课程安排功能的实现

教师用户只有开设了课程才可以对相应的实验报告进行批改等操作。在课程安排页面用户可实现此功能,如图5所示。

3.9 教师实验课程管理功能的实现

教师用户提交课程安排后,课程信息将储存到数据库并反馈给试验管理员,教师用户所安排的课程必须得到实验管理员的审批后方生效。教师用户对课程安排可以进行删除操作。

3.1 0 教师实验报告评分功能的实现

教师用户可以选择相应的学期、学院、班级、实验项目进行评分。

3.1 1 教师实验成绩查询功能的实现

教师用户的成绩查询和学生用户的成绩查询类似,只是教师用户成绩查询是针对班级的查询,学生用户的查询是针对个人的。

3.1 2 教师用户信息管理功能的实现

教师用户信息管理页面和学生用户信息管理页面类似,其功能效果是一致的。

4 结论

本系统以PHP语言为主,结合SQL、javascript等多种语言为辅来实现代码编写,具有良好的互交性和可靠性。而且本系统拥有完整的框架,独立的数据库以及独立的处理页面。既可独立使用,也可以整合到其他主系统中结合使用。实际运行结果表明,该系统能较好解决大学物理实验对数据处理的需求。

参考文献

[1]罗兴垅,罗颖.实验教学研究Matlab软件在物理实验数据处理中的应用[J].赣南师范学院学报,2004(3).

[2]牛原,肖霖,成正维.大学物理实验数据处理系统[J].大学物理实验,2008(1).

上一篇:2023年秋季九年级1班语文学科教学工作总结下一篇:小学生优秀作文三年级