河北工业大学数据库实验报告

合集下载

数据库原理与技术实验报告

数据库原理与技术实验报告

数据库原理与技术实验报告
一、实验目的
本次实验的主要目的是了解和学习数据库原理与技术,具体要求是:
1.熟悉数据库系统的基本概念;
2.理解数据库管理系统(DBMS)的核心功能;
3.掌握数据库系统的创建,维护和应用技术;
4.掌握基于SQL查询语言(SQL)的SQL语句的使用;
5.学习SQL语言的基本知识;
6.学习和应用数据库的实用技术;
7.掌握数据库的安全保护技术;
8.熟悉数据的事务处理;
9.掌握数据的并发控制等。

二、实验环境
本次实验所使用的系统环境为Oracle Database,版本为11g。

三、实验内容
1.概念部分:
(1)数据库概念:数据库概念主要是指数据库的概念、特点、应用领域、数据库结构与模式等;
(2)数据库管理系统:数据库管理系统(DBMS)是一种综合的数据管理软件,它有助于保护组织内的数据,并帮助实现全面的数据管理;
(3)数据库应用:数据库应用是一种以数据库管理系统为基础的应用程序,它主要是用来收集、组织、存储、操作和检索数据,以满足组织内的信息需要;
(4)SQL查询语言:SQL查询语言(SQL)是一种关系型数据库管理系统的标准化数据库查询语言。

河北工业大学-数据结构实验报告-基于哈夫曼编码的通信系统的设计与实现

河北工业大学-数据结构实验报告-基于哈夫曼编码的通信系统的设计与实现

基于哈夫曼编码的通信系统的设计与实现一、实验目的(1)掌握二叉树的存储结构及其相关操作。

(2)掌握构造哈夫曼树的基本思想,及其编码/译码过程。

二、实验内容利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码。

对于双工信道,每端都需要一个完整的编/译码系统。

试为这样的信息收发站设计一个基于哈夫曼编码的通信系统。

一个完整的系统应具有以下功能1)初始化处理:建立通信系统(1)建立有100句中文的信息集合,每个句子称为一条信息。

(2)输入编码参数:①从终端输入编码字符集大小n,字符编码长度m(设n为4,m为8);②从终端输入编码字符(设为A,B,C,D);(3)生成每条信息的字符编码,构造字符编码集合;(4)计算每个字符编码集合中出现的概率;(5)根据字符概率构造哈夫曼树,求出每个字符的二进制编码。

2)发送端信息编码(1)用户从信息集合中选择一条信息,找到该信息对应的字符编码;(2)根据该信息的字符编码,哈夫曼树求出的每个字符的二进制编码,构造出该信息的二进制编码,记录二进制比编码。

3)接受端信息译码(1)根据得到的信息的二进制编码,利用哈夫曼树求出每个字符的二进制编码还原出信息的字符编码;(2)根据信息的字符编码,找到对应的信息。

三、源程序代码#include<stdio.h>#include<malloc.h>#include<stdlib.h>char *codechar;int ncodechar,lcodechar;int *arraychar[100];char *temp;float *proba;char pass[50];int passl;struct node{float pro;int num;struct node* p;struct node* lc;struct node* rc;char *res;int length;}*hc;char message[100][20]={{"人之初"}, {"性本善"}, {"性相近"}, {"习相远"}, {"苟不教"}, {"性乃迁"},{"教之道"}, {"贵以专"}, {"昔孟母"}, {"择邻处"}, {"子不学"}, {"断机杼"},{"窦燕山"}, {"有义方"}, {"教五子"}, {"名俱扬"}, {"养不教"}, {"父之过"},{"教不严"}, {"师之惰"}, {"子不学"}, {"非所宜"}, {"幼不学"}, {"老何为"},{"玉不琢"}, {"不成器"}, {"人不学"}, {"不知义"}, {"为人子"}, {"方少时"},{"亲师友"}, {"习礼仪"}, {"香九龄"}, {"能温席"}, {"孝于亲"}, {"所当执"},{"融四岁"}, {"能让梨"}, {"弟于长"}, {"宜先知"}, {"首孝弟"}, {"次见闻"},{"知某数"}, {"识某文"}, {"一而十"}, {"十而百"}, {"百而千"}, {"千而万"},{"三才者"}, {"天地人"}, {"三光者"}, {"日月星"}, {"三纲者"}, {"君臣义"},{"父子亲"}, {"夫妇顺"}, {"曰春夏"}, {"曰秋冬"}, {"此四时"}, {"运不穷"},{"曰南北"}, {"曰西东"}, {"此四方"}, {"应乎中"}, {"曰水火"}, {"木金土"},{"此五行"}, {"本乎数"}, {"曰仁义"}, {"礼智信"}, {"此五常"}, {"不容紊"},{"稻粱菽"}, {"麦黍稷"}, {"此六谷"}, {"人所食"}, {"马牛羊"}, {"鸡犬豕"},{"此六畜"}, {"人所饲"}, {"曰喜怒"}, {"曰哀惧"}, {"爱恶欲"}, {"七情具"},{"匏土革"}, {"木石金"}, {"丝与竹"}, {"乃八音"}, {"高曾祖"}, {"父而身"},{"身而子"}, {"子而孙"}, {"自子孙"}, {"至玄曾"}, {"乃九族"}, {"人之伦"},{"父子恩"}, {"夫妇从"}, {"兄则友"}, {"弟则恭"}} ;int zifushengcheng();int probability();int huffman();int Exchange(struct node *a,struct node *b);int Exchangenum(int *a,int *b);int Exchangepoint(struct node **a,struct node ** b);int produce(struct node *a,int *b);int sent();int receive();int main(){int i;char t;printf("初始化通讯系统:\n请输入编码字符集大小n,字符编码长度m(以n m格式来输入):\n");scanf("%d %d",&ncodechar,&lcodechar);codechar=(char *)malloc(sizeof(char)*ncodechar);proba=(float *)malloc(sizeof(float)*ncodechar);for(i=0;i<ncodechar;i++){proba[i]=0;}for(i=0;i<100;i++){arraychar[i]=(int *)malloc(sizeof(int )*lcodechar);}hc=(struct node*)malloc(sizeof(struct node)*(ncodechar*2-1));temp=(char *)malloc(sizeof(char)*(ncodechar));printf("请输入编码字符(以A B C D的格式来输入):\n");for(i=0;i<ncodechar;i++){scanf("%c",&t);if(t=='\n'||t==' '){i--;continue;}codechar[i]=t;}zifushengcheng();probability();huffman();sent();receive();return 1;}int sent(){int i,j,k,x;printf("\n--------------------------------发送方------------------------------------\n");for(i=0;i<100;i++){printf("%d:",i+1);for(j=0;j<20;j++){printf("%c",message[i][j]);}printf(" 相应的字符编码:");for(k=0;k<lcodechar;k++){printf("%c",codechar[arraychar[i][k]]);}printf("\n");}printf("请从以上100条信息中选择发送的信息,输入你的信息号:");scanf("%d",&x);printf("你选择发送的信息是:");for(j=0;j<20;j++){printf("%c",message[x-1][j]);}printf("\n相应的字符编码是:");for(i=0;i<lcodechar;i++){printf("%c",codechar[arraychar[x-1][i]]);}printf("\n根据哈夫曼树得到的哈夫曼编码是:");for(i=0;i<lcodechar;i++){for(j=0;j<ncodechar*2-1;j++){if(arraychar[x-1][i]==hc[j].num){for(k=0;k<hc[j].length;k++){printf("%c",hc[j].res[k]);pass[passl]=hc[j].res[k];passl++;}}}}return 1;}int receive(){int i,j,k=0,m;int *get=(int *)malloc(sizeof(int)*lcodechar);printf("\n--------------------------------接收方------------------------------------\n接收到的哈夫曼编码是:");for(i=0;i<passl;i++){printf("%c",pass[i]);}i=0;while(i!=lcodechar){for(j=0;(j<ncodechar*2-1);j++){for(m=0;m<hc[j].length;m++,k++){if(hc[j].res[m]!=pass[k]){break;}}if(m==hc[j].length){get[i]=hc[j].num;i++;break;}k=k-m;}}printf("\n根据哈夫曼树转换出的字符编码为:\n");for(i=0;i<lcodechar;i++){printf("%c",codechar[get[i]]);}for(i=0;i<100;i++){for(j=0;j<lcodechar;j++){if(get[j]!=arraychar[i][j])break;}if(j==lcodechar){printf("\n字符编码转换后得到的信息是:\n");for(k=0;k<20;k++){printf("%c",message[i][k]);}break;}}printf("\n接收结束,谢谢使用!");return 1;}int zifushengcheng(){int i,j=0,k=0,yushu,x;int *b[100];for(i=0;i<100;i++){b[i]=(int *)malloc(sizeof(int)*lcodechar);for(j=0;j<lcodechar;j++){b[i][j]=0;}for(i=0;i<100;i++){x=i;do{yushu=x%ncodechar;x=(int)(x/ncodechar);b[i][j]=yushu;j++;}while(x!=0);for(j=ncodechar-1;j>=0;j--,k++){arraychar[i][k]=b[i][j];}j=0;k=0;}for(i=0;i<100;i++){for(j=ncodechar;j<lcodechar;j++){arraychar[i][j]=rand()%ncodechar;}}/*for(i=0;i<100;i++){for(j=0;j<lcodechar;j++){printf("%d ",arraychar[i][j]);}printf(" ");for(j=0;j<lcodechar;j++){printf("%c",codechar[arraychar[i][j]]);}printf("\n");}*/return 1;}int probability(){for(i=0;i<100;i++){for(j=0;j<lcodechar;j++){for(k=0;k<ncodechar;k++){if(arraychar[i][j]==k){proba[k]++;}}}}printf("随机生成的字符编码概率:\n");for(i=0;i<ncodechar;i++){proba[i]=proba[i]/(100*lcodechar);printf("%c:%f ",codechar[i],proba[i]);}return 1;}int huffman(){int i,j,k,l=0;for(i=0;i<(ncodechar*2-1);i++){hc[i].lc=NULL;hc[i].rc=NULL;hc[i].p=NULL;hc[i].num=i;if(i<ncodechar){hc[i].pro=proba[i];continue;}hc[i].pro=0;}for(i=0;i<ncodechar-1;i++){for(j=i*2;j<(ncodechar+i);j++){for(k=j+1;k<(ncodechar+i);k++){if(hc[k].pro<hc[j].pro&&hc[k].pro!=0){Exchange(&hc[k],&hc[j]);}}}hc[i+ncodechar].pro=hc[i*2].pro+hc[i*2+1].pro;hc[i+ncodechar].lc=&hc[i*2];hc[i+ncodechar].rc=&hc[i*2+1];hc[i*2].p=&hc[i+ncodechar];hc[i*2+1].p=&hc[i+ncodechar];}printf("\n构造的哈夫曼树:");for(i=0;i<ncodechar*2-1;i++){printf("\nchar:%c num:%d pro:%f",codechar[hc[i].num],hc[i].num,hc[i].pro);printf(" lc:");if(hc[i].lc==NULL){printf(" ");}else{printf("%d,",hc[i].lc->num);}printf(" rc:");if(hc[i].rc==NULL){printf(" ");}else{printf("%d,",hc[i].rc->num);}printf(" p:");if(hc[i].p==NULL){printf(" ");}else{printf("%d,",hc[i].p->num);}}produce(&hc[ncodechar*2-2],&l);printf("\n生成的哈夫曼编码是:");for(i=0;i<ncodechar*2-1;i++){printf("\nchar:%c num:%d length:%d code:",codechar[hc[i].num],hc[i].num,hc[i].length);for(j=0;j<hc[i].length;j++){printf("%c",hc[i].res[j]);}}return 1;}int produce(struct node*a,int *b){int i;a->length=(*b);a->res=(char *)malloc(sizeof(char)*(*b));for(i=0;i<(*b);i++){a->res[i]=temp[i];}if(a->lc!=NULL&&a->rc!=NULL){temp[(*b)]='0';(*b)++;produce((a->lc),b);temp[(*b)]='1';(*b)++;produce((a->rc),b);}(*b)--;return 1;}int Exchange(struct node*a,struct node*b){float t;t=a->pro;a->pro=b->pro;b->pro=t;Exchangenum(&a->num,&b->num);Exchangepoint(&a->p,&b->p);Exchangepoint(&a->lc,&b->lc);Exchangepoint(&a->rc,&b->rc);return 1;}int Exchangepoint(struct node **a,struct node ** b) {struct node *t;t=*a;*a=*b;*b=t;return 1;}int Exchangenum(int *a,int *b){int t;t=*a;*a=*b;*b=t;return 1;}参考至《百度文库》四、结果分析本次实验是学习编程以来接触的最大程序,参考了较多相关源文件,对c语的函数引用有了更深刻的了解,初步掌握了二叉树的存储结构及其相关操作。

数据库实验报告(通用3篇)

数据库实验报告(通用3篇)

数据库实验报告(通用3篇)数据库试验报告篇1一、实训时间:20_年5月13日至5月24日二、实训地点:三、实训目的与意义:1,这次实习可以使我们在课本上学到的学问用于实践增加了我对电脑技巧的一些认知。

2,通过这次实习也可以让我体验到上班族的生活为我将来毕业后找工作打下了基础。

3,并且这次实习可以非常好的关心我完成将来的毕业论文。

四、实训感悟:还依旧记得来的第一天对这里很茫然,不知道实习要做些什么。

然后经过老师的急躁讲解,熟悉了自己实习要做些什么,得到了许多心理熟悉,对许多问题都有了一些更深的了解。

同时,我熟识了河北玛世电子商务有限公司,总部位于国家命名的“中国丝网之乡”、“中国丝网产业基地”、中国丝网产销基地“、”中国丝网出口基地“—河北省安平县。

使我们队公司有了更进一步的了解实习,就是在实践中学习。

经过这半个月的实习训练,我了解到自己所学的如何在实践中运用。

当然学的更多的是如何在更新网站内容和添加商品,每天不厌其烦的更新添加,观察自己的胜利更多的是兴奋。

还有发布了一些关于公司产品的博客,比如新浪,网易。

而后又尝试在百度知道上提问与回答,在回答问题的过程中,通过网站搜寻相关内容来回答各种丝网问题,通过百度知道这个平台,我对公司又了更一步的了解。

经过半个月的实训我学到了许多之前没有学过没有接触到的东西,熟悉到自己的不足,需要更加努力,才能尽快的学会在社会上生活,敢于面对社会的压力,使自己可以在社会上成长进展。

数据库试验报告篇2由于平常接触的都是一些私人项目,这些项目大都是一些类库,其他人的沟通相对可以忽视不计,因此也就不考虑规范化的文档。

实际上从学习的经受来看,我们接触的学问体系都是属于比较老或比较传统的,与现在进展快速的IT行业相比许多状况已不再适用,尤其是当开源模式渐渐走近开发者后更是如此。

虽然这次是一个数据库课程设计,由于本人在选择项目的时候是本着对自己有实际应用价值的角度考虑的,所以其中也涉及到一些数据库以外的设计。

河北工业大学-数据结构实验报告-内部排序算法效率比较平台的设计与实现

河北工业大学-数据结构实验报告-内部排序算法效率比较平台的设计与实现

实验五内部排序算法效率比较平台的设计与实现1.试验内容1、问题描述各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。

设计和实现内部排序算法效率比较平台,通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观的感受。

2、基本要求(1)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

(2)待排序的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。

(3)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。

3、测试数据由随机数产生器生成。

4、实现提示主要工作是设法在已知算法中的适当位置插入对关键字的比较次数和移动次数的计数操作。

程序还可以考虑几组数据的典型性,如,正序、逆序和不同程度的乱序。

注意采用分块调试的方法。

2.试验目的掌握多种排序方法的基本思想,如直接插入、冒泡、简单选择、快速、堆、希尔排序等排序方法,并能够用高级语言实现。

3.流程图4.源程序代码#include<iostream.h>#include<string.h>#include<stdlib.h>#define le 100struct point{char key[11];};//冒泡法void maopao(point c[]){point a,b[le];int i,j,jh=0,bj=0,q;for(i=0;i<le;i++){b[i]=c[i];};for(i=0;i<le;i++){for(j=le-1;j>i;j--){bj=bj+1;q=strcmp(b[i].key,b[j].key);if(q==1){a=b[i];b[i]=b[j];b[j]=a;jh=jh+3;};};};cout<<"冒泡法:"<<endl<<"完成的序列如下:"<<endl;for(i=0;i<le;i++){cout<<b[i].key<<" ";};cout<<endl<<"共进行比较"<<bj<<"次,进行交换"<<jh<<"次"<<endl<<"***************************"<<endl;};//直接插入排序void zhijiecharu(point c[]){point b[le+1];int i,j,jh=0,bj=0,q;for(i=0;i<le;i++){b[i+1]=c[i];};for(i=2;i<=le+1;i++){q=strcmp(b[i].key,b[i-1].key);bj=bj+1;if(q==-1){b[0]=b[i];b[i]=b[i-1];jh=jh+2;q=strcmp(b[0].key,b[i-2].key);bj=bj+1;for(j=i-2;q==-1;j--){b[j+1]=b[j];jh=jh+1;q=strcmp(b[0].key,b[j-1].key);bj=bj+1;};b[j+1]=b[0];jh=jh+1;};};cout<<"直接插入排序:"<<endl<<"完成的序列如下:"<<endl;for(i=1;i<le+1;i++){cout<<b[i].key<<" ";};cout<<endl<<"共进行比较"<<bj<<"次,进行交换"<<jh<<"次"<<endl<<"***************************"<<endl;};//void shellinsert(point c[],int dk,int d[]){int j,i,q;point a;for(i=dk+1;i<le+1;i++){q=strcmp(c[i].key,c[i-dk].key);d[0]=d[0]+1;if(q==-1){a=c[i];q=strcmp(a.key,c[i-dk].key);d[0]=d[0]+1;d[1]=d[1]+1;for(j=i-dk;j>0&&q==-1;j=j-dk){c[j+dk]=c[j];d[1]=d[1]+1;q=strcmp(a.key,c[j-dk].key);};c[j+dk]=a;d[1]=d[1]+1;};};};void shellsort(point c[],int dlta[],int t){int k,d[2],i;d[0]=0;d[1]=0;point b[le+1];for(k=0;k<le;k++){b[k+1]=c[k];};for(k=0;k<t;k++)shellinsert(b,dlta[k],d);cout<<"希尔排序:"<<endl<<"完成的序列如下:"<<endl;for(i=1;i<le+1;i++){cout<<b[i].key<<" ";};cout<<endl<<"共进行比较"<<d[0]<<"次,进行交换"<<d[1]<<"次"<<endl<<"***************************"<<endl;};//希尔排序void xier(point c[]){int dlta[20],t,i;t=le/2;for(i=0;i<20;i++){dlta[i]=t+1;if(t==0)break;t=t/2;};t=i+1;shellsort(c,dlta,t);};//简单选择排序void jiandanxuanze(point c[]){point a,b[le];int i,j,jh=0,bj=0,q,w;for(i=0;i<le;i++){b[i]=c[i];};for(i=0;i<le-1;i++){q=i;for(j=i+1;j<le;j++){bj=bj+1;w=strcmp(b[q].key,b[j].key);if(w==1)q=j;};if(q==i)continue;else {a=b[i];b[i]=b[q];b[q]=a;jh=jh+3;};};cout<<"简单选择排序排序:"<<endl<<"完成的序列如下:"<<endl;for(i=0;i<le;i++){cout<<b[i].key<<" ";};cout<<endl<<"共进行比较"<<bj<<"次,进行交换"<<jh<<"次"<<endl<<"***************************"<<endl;};int partition(point c[],int low,int high,int d[]){point a,b;int jh=0,bj=0,q;a=c[low];while(low<high){q=strcmp(c[high].key,a.key);d[0]=d[0]+1;while(low<high&&q!=-1){high--;q=strcmp(c[high].key,a.key);d[0]=d[0]+1;};b=c[low];c[low]=c[high];c[high]=b;d[1]=d[1]+3;q=strcmp(c[low].key,a.key);d[0]=d[0]+1;while(low<high&&q!=1){low++;q=strcmp(c[low].key,a.key);d[0]=d[0]+1;};b=c[low];c[low]=c[high];c[high]=b;d[1]=d[1]+3;};return(low);};void qsort(point c[],int low,int high,int d[]){int pivotloc;if(low<high){pivotloc=partition(c,low,high,d);qsort(c,low,pivotloc-1,d);qsort(c,pivotloc+1,high,d);};};//快速排序void kuaisu(point c[]){point b[le];int i,d[2];d[0]=0;d[1]=0;for(i=0;i<le;i++){b[i]=c[i];};qsort(b,0,le-1,d);cout<<"快速排序:"<<endl<<"完成的序列如下:"<<endl;for(i=0;i<le;i++){cout<<b[i].key<<" ";};cout<<endl<<"共进行比较"<<d[1]<<"次,进行交换"<<d[0]<<"次"<<endl<<"***************************"<<endl;};void diu(point b[],int we,int *jh,int *bj){point a;int i,q;for(i=we/2-1;i>=0;i--){q=strcmp(b[i].key,b[2*i].key);*bj=*bj+1;if(q==-1){a=b[i];b[i]=b[2*i];b[2*i]=a;*jh=*jh+3;};if(2*i+1<we){q=strcmp(b[i].key,b[2*i+1].key);*bj=*bj+1;if(q==-1){a=b[i];b[i]=b[2*i+1];b[2*i+1]=a;*jh=*jh+3;};};};a=b[we-1];b[we-1]=b[0];b[0]=a;*jh=*jh+3;};//堆排序void diup(point c[]){point b[le];int i,jh=0,bj=0,*j,*bl;j=&jh;bl=&bj;for(i=0;i<le;i++){b[i]=c[i];};for(i=le;i>1;i--){diu(b,i,j,bl);};cout<<"堆排序:"<<endl<<"完成的序列如下:"<<endl;for(i=0;i<le;i++){cout<<b[i].key<<" ";};cout<<endl<<"共进行比较"<<bj<<"次,进行交换"<<jh<<"次"<<endl<<"***************************"<<endl;};void main(){int i,j,n=10,ans,an;char b[]="abcdefghijklmnopqrstuvwxyz";point a[le];for(i=0;i<le;i++){n=10;an=rand()*(n-1)/RAND_MAX+1;n=26;for(j=0;j<an;j++){ans=rand()*(n-0)/RAND_MAX+0;a[i].key[j]=b[ans];};a[i].key[j]='\0';};for(i=0;i<le;i++){cout<<a[i].key<<endl;};zhijiecharu(a);maopao(a);xier(a);jiandanxuanze(a);kuaisu(a);diup(a);}参考自百度文库5.实验结果运行结果如下:直接插入排序:完成的序列如下:***************************冒泡法:完成的序列如下:***************************希尔排序:完成的序列如下:*************************** 简单选择排序排序:完成的序列如下:*************************** 快速排序:完成的序列如下:*************************** 堆排序:完成的序列如下:。

河北工业大学数据挖掘实验报告

河北工业大学数据挖掘实验报告

实验一数据预处理一、实验目的1、熟悉 VC++编程工具和完全数据立方体构建、联机分析处理算法。

2、浏览拟被处理的的数据,发现各维属性可能的噪声、缺失值、不一致性等,针对存在的问题拟出采用的数据清理、数据变换、数据集成的具体算法。

3、用 VC++编程工具编写程序,实现数据清理、数据变换、数据集成等功能。

4、调试整个程序获得清洁的、一致的、集成的数据,选择适于全局优化的参数。

5、写出实验报告。

二、实验原理1、数据预处理现实世界中的数据库极易受噪音数据、遗漏数据和不一致性数据的侵扰,为提高数据质量进而提高挖掘结果的质量,产生了大量数据预处理技术。

数据预处理有多种方法:数据清理,数据集成,数据变换,数据归约等。

这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间。

2、数据清理数据清理例程通过填写遗漏的值,平滑噪音数据,识别、删除离群点,并解决不一致来“清理”数据。

3、数据集成数据集成将数据由多个源合并成一致的数据存储,如数据仓库或数据立方体。

4、数据变换通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。

5、数据归约使用数据归约可以得到数据集的压缩表示,它小得多,但能产生同样(或几乎同样的)分析结果。

常用的数据归约策略有数据聚集、维归约、数据压缩和数字归约等。

三、实验内容和步骤1、实验内容1、用VC++编程工具编写程序,实现数据清理、数据变换、数据集成等功能,并在实验报告中写出主要的预处理过程和采用的方法。

2、产生清洁的、一致的、集成的数据。

3、在试验报告中写明各主要程序片段的功能和作用。

2、实验步骤1)仔细研究和审查数据,找出应当包含在你分析中的属性或维,发现数据中的一些错误、不寻常的值、和某些事务记录中的不一致性。

2)进行数据清理,对遗漏值、噪音数据、不一致的数据进行处理。

例如:1、日期中的缺失值可以根据统一的流水号来确定。

2、购买的数量不能为负值。

大二数据库实验报告

大二数据库实验报告

大二数据库实验报告1.引言1.1 概述概述部分的内容应该对整个实验和实验报告进行简要介绍和概括。

可以从以下几个方面进行撰写:概述部分主要从以下几个方面进行撰写:1. 引入数据库实验的背景:可以描述数据库实验是大学计算机科学专业中重要的实践环节之一,通过实验可以加深对数据库管理系统的理解和应用,并提高学生的实践能力和问题解决能力。

2. 对实验目标的概述:可以说明本次实验的主要目的是通过设计和实现一个小规模数据库系统,熟悉数据库的基本操作和编程接口,掌握数据库设计和管理的基本要点。

3. 对实验内容的概述:可以简要介绍实验涉及的主要内容,如数据库的概念和基本原理、关系型数据库的设计和实现、SQL语言的基本操作、数据库表的创建和查询等方面。

同时,可以提及实验所使用的工具和技术,如MySQL数据库管理系统、SQL编程语言等。

4. 对实验报告结构的概述:可以提及实验报告的整体结构,介绍本报告的章节组成和每个章节的主要内容,以帮助读者了解报告的组织架构和阅读顺序。

以上是概述部分的内容撰写建议,可以结合实际情况进行适当调整和扩充。

文章结构部分的内容:本实验报告共包含三个主要部分,即引言、正文和结论。

首先,引言部分(Chapter 1)是整篇实验报告的开篇之章,用于引入该实验的背景和目的,使读者对实验的内容有一个初步的了解。

在引言部分,我们将首先对本次实验进行概述(1.1 概述),介绍该实验的基本背景、研究领域和应用场景。

然后,我们将对本报告的文章结构进行介绍(1.2 文章结构),概括性地列出报告的主要章节和各个章节的内容概要。

最后,我们将明确本次实验的目的(1.3 目的),说明在本次实验中我们需要实现的具体目标和解决的问题。

接下来,正文部分(Chapter 2)是实验报告的核心,包含了本次实验的详细过程、实验设计、实验结果以及相应的分析和讨论。

在正文部分的第一个要点(2.1 第一个要点)中,我们将详细介绍本次实验的背景和相关的理论知识,对数据库的概念、结构和操作进行深入阐述。

数据库实验报告(合工大)

数据库实验报告(合工大)

设计数据库、数据表并编程实现一、实验目的通过“数据库系统概论”书本知识学习和“数据库原理与应用”课程教学所授知识对“教学管理系统”的实验内容进行分析,通过建立数据库、数据表、数据视图以及触发器,利用SQL结构化查询语言提供的数据操纵功能,设计实现对数据的定义、修改、删除、查询、更新以及控制等操作,并按照实验指导书的各项要求完成实验内容。

二、实验内容(1)根据实验建议所示,建立“学生管理”数据库。

(2)建立数据表的方法,建立五个相关的数据表。

完成数据库的建立并定义各表的完整性约束条件。

分别使用企业管理器和SQL 语言来实现。

(3)熟练掌握并应用SQL中的数据表定义、删除和修改等操作命令;(4)熟练掌握为各表常用字段建立索引,以提高数据检索效率。

create database 学生管理;create table student ( sno Char(9),sname Char(10) not null,sbirthday Datetime,ssex Char(2) check(ssex in ('男','女')),sclass Char(20),sremark Char(100),address Char(40),zipcode Char(6),phone Char(15),email Char(40), primary key(sno) );create table course ( cno char(6) primary key,cname char(20),cpno char(6),ctime Numeric(2),credit Numeric(2),foreign key(cpno)references course(cno));create table score(sno char(9), cno char(6),primary key(sno,cno),foreign key(sno)references student(sno),foreign key(cno)references course(cno),score Numeric(3));create table teacher( Tno char(20) primary key,Tname char(20) ,Tsex Char(2) check(Tsex in ('男','女')),Department char(15),tbirthday Datetime);create table Teaching(Tno char(20),cno char(6),tdate datetime,classroom char(10),sclass char(20),primary key(Tno,cno),foreign key(Tno)references teacher(Tno),foreign key(cno)references course(cno));设计数据插入、修改、删除、查询和视图等操作并编程实现一、实验目的(1)熟练掌握数据更新语句,灵活地操作插入数据、修改数据和删除数据;(2)熟练掌握关系数据库中的完整性概念的应用;(3)掌握单表查询的基本方法;(4)掌握多表连接查询的基本方法;(5)熟练掌握以下练习,并进行以下各类查询:①选择表中的若干列、查询全部列、查询经过计算的值;②选择表中的若干元组,即消除取值重复的行与查询满足指定条件的元组(包括:比较大小、确定范围、确定集合、字符匹配、涉及空值和多种条件查询);③对查询结果排序;④使用集函数;⑤对查询结果分组(6)熟练掌握以下练习,并进行下列各类连接查询:①等值与非等值连接查询;②自身连接;③外连接;④复合条件连接;(7)掌握嵌套查询的基本方法;(8)掌握集合查询的基本方法;(9)熟练掌握查询视图操作(10)熟练掌握更新视图操作(11)熟练关系的完整性概念,领会视图的用途(12)练习以下各类查询:①带有IN谓词的子查询;②带有比较运算符的子查询;③带有ANY或ALL谓词的子查询;④带有EXISTS谓词的子查询;⑤视图查询与更新操作;二、实验内容根据以下给定的部分数据表信息,分别对student, course, score, teacher, teching 表进行数据插入以及根据题目要求用SQL语句实现。

河北工业大学-数据结构实验报告-约瑟夫环问题实验报告

河北工业大学-数据结构实验报告-约瑟夫环问题实验报告

实验一:约瑟夫环问题一.实验目的:要求设计一个程序模拟约瑟夫环问题过程,求出出列编号序列。

二.实验内容:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。

开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。

如此下去,直到所有人全部出列为止。

令n最大值取30。

要求设计一个程序模拟此过程,求出出列编号序列。

三.实验过程:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,把被删除结点的密码作为新的m值,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。

#include<stdio.h>#include<stdlib.h>#define MAX_NODE_NUM 30#define TRUE 1#define FALSE 0typedef struct NodeType{ int number;int password;struct NodeType *next;} NodeType;/* 创建单向循环链表*/static void CreaList(NodeType **, const int);/* 运行"约瑟夫环"问题*/static void StatGame(NodeType **, int);/* 打印循环链表*/static void PrntList(const NodeType *);/* 得到一个结点*/static NodeType *GetNode(const int, const int);/* 测试链表是否为空, 空为TRUE,非空为FALSE */static unsigned EmptyList(const NodeType *);int main(void){ int n, m;NodeType *pHead=NULL;while(1){printf("输入总的人数n(<=%d):",MAX_NODE_NUM);scanf("%d",&n);printf("初始循环的密码为:");scanf("%d",&m);if(n>MAX_NODE_NUM){printf("数字太大,请重新输入!\n");continue;}elsebreak;}CreaList(&pHead,n);printf("\n打印出原始每个结点的序列号和密码\n"); PrntList(pHead);printf("\n最终每个结点退出的序列号和密码\n"); StatGame(&pHead,m);return 0;}static void CreaList(NodeType **ppHead, const int n){int i,iCipher;NodeType *pNew, *pCur;for(i=1;i<=n;i++){printf("第%d个人的密码为:",i);scanf("%d", &iCipher);pNew=GetNode(i,iCipher);if(*ppHead==NULL){*ppHead=pCur=pNew;pCur->next=*ppHead;}else{pNew->next=pCur->next;pCur->next=pNew;pCur=pNew;}}printf("已完成结点初始化!\n");}static void StatGame(NodeType **ppHead, int iCipher){int iCounter, iFlag=1,i=1;NodeType *pPrv, *pCur, *pDel;pPrv=pCur=*ppHead;while(pPrv->next!=*ppHead)pPrv=pPrv->next;while(iFlag){for(iCounter=1;iCounter<iCipher;iCounter++){pPrv=pCur;pCur=pCur->next;}if(pPrv==pCur)iFlag=0;pDel=pCur;pPrv->next=pCur->next;pCur=pCur->next;iCipher=pDel->password;printf("第%d个退出的是序列号为%d的人,其密码为:%d\n",i, pDel->number,pDel->password);free(pDel);++i;}*ppHead=NULL;}static void PrntList(const NodeType *pHead){const NodeType *pCur=pHead;if (EmptyList(pHead))return;do{printf("第%d 个人,密码:%d\n",pCur->number,pCur->password);pCur=pCur->next;} while (pCur!=pHead);}static NodeType *GetNode(const int iId,const int iCipher){NodeType *pNew;pNew=(NodeType *)malloc(sizeof(NodeType));if(!pNew){printf("错误,内存不足!\n");exit(-1);}pNew->number=iId;pNew->password=iCipher;pNew->next=NULL;return pNew;}static unsigned EmptyList(const NodeType *pHead){if(!pHead){printf("列表为空!\n");return TRUE;}return FALSE;}参考至“百度文库”《C语言约瑟夫环问题》收获:学会了创建循环链表及相关操作,巩固了线性链表的知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据库原理及应用》实验报告题目:SQL语言(视图、数据控制、空值和空集的处理)1.4视图一实验目的熟悉SQL语言支持的有关视图的操作,能够熟练使用SQL语句来创建需要的视图,对视图进行查询和取消视图。

二实验内容(1)定义常见的视图形式,包括:·行列子集视图。

· WITH CHECK OPTION的视图。

·基于多个基表的视图。

·带表达式的视图。

·分组视图。

(2)通过实验考察WITH CHECK OPTION 这一语句在视图定义后产生的影响,包括对修改操作、删除操作、插入操作的影响。

(3)讨论视图的数据更新情况,对子行列视图进行数据更新。

(4)使用DROP语句删除一个视图,由该视图导出的其它视图定义仍在数据词典中,但已经不能使用,必须显式删除。

同样原因,删除基表时,由该基表导出的所有视图定义都必须显式删除。

三实验题目(1)定义选课信息和课程名称的视图VIEWCcreate view VIEWc asselect CHOICES.cid,ame,sid,tid,scorefrom CHOICES,COURSES where CHOICES.cid=COURSES.cid(2)定义学生姓名与选课信息的视图VIEWScreate view VIEWS asselectSTUDENTS.sname,CHOICES.cid,CHOICES.sid,CHOICES.tid,choices.scorefrom CHOICES,STUDENTS where CHOICES.sid=STUDENTS.sid(3)定义年级低于1998的学生视图S1(SID,SNAME,GRADE)drop view s1create view S1 asselect STUDENTS.sid ,sname,grade from STUDENTSwhere grade>1998(4)查询学生为”uxjof”的学生的选课信息select*from VIEWSwhere sname='uxjof'(5)查询选修课程”UML”的学生的编号和成绩select sid,score from VIEWC where cname='UML'(6)向视图S1插入记录(”60000001,Lily,2001”)insert into s1values('60000001','Lily',2001)(7)定义包括更新和插入约束的视图S1,尝试向视图插入记录(“60000001,Lily,1997”),删除所有年级为1999的学生记录,讨论更新和插入带来的影响。

drop view s1create view S1asselect STUDENTS.sid,sname,grade from STUDENTSwhere grade>1998with check option插入记录:insert into s1values('60000001','Lily',1997)出现错误,原因是目标视图指定了WITH CHECK OPTION,而该操作的一个或多个结果行又不符合CHECK OPTION 约束。

delete from s1where grade=1999命令成功执行。

(8)在视图VIEWS中将姓名为“uxjof”的学生的选课成绩都加上5分update VIEWS set score=score+5where sname='uxjof'and score<95(9)取消以上建立的所有视图drop view VIEWCdrop view VIEWSdrop view S11.5数据控制一实验目的熟悉SQL的数据控制功能,能够使用SQL语句来向用户授予和收回权限。

二实验内容(1)使用GRANT语句对用户授权,对单个用户和多个用户授权,或使用保留字PUBLIC对所有用户授权。

对不同的操作对象包括数据库、视图、基本表等进行不同权限的授权。

(2)使用WITH GRANT OPTION子句授予用户传播该权限的权利。

(3)在授权时发生循环授权,考察DBS能否发现这个错误。

如果不能,结合取消权限操作,查看DBS对循环授权的控制。

(4)使用REVOKE子句收回授权,取消授权的级联反应。

三实验题目(1)授予所有用户对表STUDENTS的查询权限。

grant select on STUDENTS to public(2)授予所有用户对表COURSES的查询和更新权限。

grant select,update on courses to public(3)授予USER1对表TEACHERS的查询,更新工资的权限,且允许USER1可以传播这些权限。

grant select,update(salary)on teachers to USER1with grant option(4)授予USER2对表CHOICES的查询,更新成绩的权限。

grant select,update(score)on choices to USER2(5)授予USER2对表TEACHERS的除了工资之外的所有信息的查询。

create view TV asselect tid,tname,email from TEACHERSgrant select on TV to USER2(6)由USER1授予USER2对表TEACHERS的查询权限,和传播此项权限的权利。

以USER1的身份登录数据库grant select on teachers to user2with grant option (7)由USER2授予USER3对表TEACHERS的查询权限,和传播此项权限的权利。

再由USER3授予USER2上述权限,这样的SQL语句能否得到执行?以USER2的身份登录数据库grant select on teachers to user3with grant option以USER3的身份登录数据库grant select on teachers to user2with grant option命令成功执行。

(8)取消USER1对表STUDENTS的查询权限,考虑由USER2的身份对表STUDENTS进行查询,操作能否成功,为什么?revoke select on teachers from user1操作不成功。

消息提示为:若要撤消或拒绝可授予的特权,请指定CASCADE 选项(9)取消USER1和USER2的关于表COOURSES的权限revoke select,update on COURSES from USER1,USER21.6空值和空集的处理一实验目的认识NULL值在数据库中的特殊含义,了解空值和空值对于数据库的数据查询操作,特别是空值在条件表达式中与其他的算术运算符或逻辑运算符的运算中,空集作为嵌套查询的子查询的返回结果时候的特殊性,能够熟练使用SQL语句来进行与空值、空集相关的操作。

二实验内容通过实验验证在原理解析中分析过的SQL SERVER对NULL的处理包括:·在查询的目标表达式中包含空值的运算·查询条件中空值与比较运算符的运算结果·使用“IS NULL"或"IS NOT NULL”来判断元组该列是否为空值·对存在取空值的列按值进行ORDER BY排序.·使用保留字DISTINCT对空值的处理,区分数据库的多种取值与现实中的多种取值的不同。

·使用GROUP BY对存在取空值的属性值进行分组·结合分组考察空值对各个集合函数的影响.特别注惫对COUNT(*)和COUNT(列名)的不同影响·考察结果集是空集时,各个集函数的处理情况。

·验证嵌套查询中返回空集的悄况下与各个谓词的运算结果·进行与空值有关的等值连接运算.三实验习题1、查询所有课程记录的上课学时〔数据库中为每星期学时),以一学期十八个星期计算每个课程的总学时,注意HOUR取NULL值的情况。

select cid,hour*18 from COURSES对NULL值做算术运算结果为NULL2、通过查询选修课程C++的学生的人数,其中成绩合格的学生人数,不合格的学生人数,讨论NULL值的特殊含义。

选修课程C++的学生的人数为187人成绩合格的人数: 151select choices.cid,COUNT(*)from CHOICES,COURSESwhere ame='C++'and COURSES.cid=CHOICES.cid and score>=60 group by choices.cid成绩不合格的人数:19select choices.cid,COUNT(*)from CHOICES,COURSES where ame='C++'and COURSES.cid=CHOICES.cidand score<60 group by choices.cid成绩为NULL的人数:17select choices.cid,COUNT(*)from CHOICES,COURSES where ame='C++'and COURSES.cid=CHOICES.cidand score is null group by choices.cid3、查询选修课程C++的学生的编号和成绩使用ORDER BY按成统进行排序时,取NULL的项是否出现在结果中?如果有在什么位置?select sid,score from CHOICES,COURSESwhere ame='C++'and COURSES.cid=CHOICES.cidorder by score取NULL的项出现在结果的最前面。

NULL值被当作最小值。

4、在上面的查询的过程中,如果加上保留字DISTINCT会有什么效果呢?select distinct sid,score from CHOICES,COURSESwhere ame='C++'and COURSES.cid=CHOICES.cidorder by score加上DISTINCT,执行结果没有区别5、按年级对所有的学生进行分组,能得到多少个组?与现实的情况有什么不同?select grade from STUDENTS group by grade得到15个组,有一条记录中grade为NULL。

相关文档
最新文档