文档库 最新最全的文档下载
当前位置:文档库 › 安徽工业大学编译原理实验报告

安徽工业大学编译原理实验报告

编译原理实验报告

姓名:叶玉虎

班级:计122班

指导老师:王森玉

实验日期:2015/5/11

实验内容:

1.求出每个非终结符的FIRST集合

2.求出每个产生式右部的FIRST集合

3.求出每个非终结符的Follow集合

实验环境:

Visual Studio2010

实验目的:

让同学们掌握FIRST集合和FOLLOW集合的求法实验代码:

#include

#include

#define MAX 50

char css[MAX][MAX];//保存所有的产生式

int count=0;

int cnt=0;

struct L{//保存所有的终结符

char ch;

int flag;//1:能推出ε,0:不能,初值:-1

int num;

char first[MAX];

int s;//first的长度

char follow[MAX];

int l;//follow的长度

}l[MAX];

//对输入的格式进行控制,并校验输入是否符合格式

int handle(char a[])

{

int len,i=0,j,k;

len=strlen(a);

while(a[i]!=10)

{

if(a[i]=='$')

return 2;

if((' '==a[i])||(9==a[i]))

{

i++;

continue;

}

if((a[i]>='A')&&(a[i]<='Z'))

{

if((a[i+1]!='-')||(a[i+2]!='>'))

{

printf("产生式格式错误\n");

return -1;

}

else

{

j=i;

k=0;

while((a[j]!=' ')&&(a[j]!=9)&&(a[j]!='$')&&(a[j]!=10))

{

if(a[j]=='|')

{

css[count][k]='\0';

count++;

if((a[j+1]==' ')||(a[j]==9)||(a[j]=='$')||(a[j]==10))

{

printf("产生式格式错误\n");

return 0;

}

css[count][0]=a[i];

css[count][1]=a[i+1];

css[count][2]=a[i+2];

k=3;

j++;

continue;

}

css[count][k]=a[j];

k++;

j++;

}

css[count][k]='\0';

i=j;

count++;

}

}

else

{

printf("产生式格式错误\n");

return -1;

}

}

return 0;

}

//从键盘获得输入

int input()

{

char a[MAX*MAX];

int v;

printf("输入产生式,产生式之间以空格回车或Tab键分隔,并以$键结束.\n");

printf("用@表示虚拟符号ε,终结符用大写字母表示,其他字符表示非终结符\n");

while(1)

{

fgets(a,MAX*MAX,stdin);

v=handle(a);

if(v==-1)

return -1;

if(v==2)

return 0;

}

}

//求出能推出ε的非终结符

void seekEmpty()

{

int i,j,k,t;

int flag=0,flag2=0;

int len,c;

char a[MAX][MAX],ch;

for(i=0;i

{

strcpy(a[i],css[i]);

}

//求出含有的非终结符的个数,并把各终结符保存起来

for(i=0;i

{

for(j=0;j

{

if(l[j].ch==a[i][0])

{

l[j].num++;

flag=1;

break;

}

else

flag=0;

}

if((!cnt)||(!flag))

{

l[cnt].ch=a[i][0];

l[cnt].flag=-1;

l[cnt].num=1;

l[cnt].s=0;

l[cnt].l=0;

cnt++;

flag=1;

continue;

}

}

c=count;

while(c)

{

for(i=0;i

{

//如果该终结符推出ε,从a[]中删除所有带有该终结符的产生式

if(a[i][3]=='@')

{

ch=a[i][0];

for(j=0;j

{

if(ch==a[j][0])

{

if(j!=c-1)

{

for(k=j;k

strcpy(a[k],a[k+1]);

c--;

j--;

}

else

{

c--;

j--;

}

}

}

for(j=0;j

{

if(ch==l[j].ch)

{

l[j].flag=1;

break;

}

}

i--;

continue;

}

len=strlen(a[i]);

for(j=3;j

{

//当该产生式右边含有非终结符时从a[]中删除该条记录if((a[i][j]<'A')||(a[i][j]>'Z'))

{

flag2=1;

break;

}

}

if(flag2)

{

for(k=0;k

{

if(a[i][0]==l[k].ch)

{

l[k].num--;

if(l[k].num==0)

l[k].flag=0;

break;

}

}

if(i!=c-1)

for(k=i;k

{

strcpy(a[k],a[k+1]);

}

c--;

i--;

flag2=0;

continue;

}

//如果产生式右边为非终结符看看该终结符能不能推出εfor(j=3;j

{

if((a[i][j]>='A')&&(a[i][j]<='Z'))

{

for(k=0;k

{

if(a[i][j]==l[k].ch)

{

if(l[k].flag==0)

{

flag2=1;

break;

}

else if(l[k].flag==1)

{

for(t=j;t

a[i][t]=a[i][t+1];

a[i][len-1]='\0';

j--;

len--;

break;

}

break;

}

}

if(flag2)

break;

}

}

if(a[i][3]=='\0')

{

ch=a[i][0];

for(j=0;j

{

if(ch==a[j][0])

{

if(j!=c-1)

{

for(k=j;k

strcpy(a[k],a[k+1]);

c--;

j--;

}

else

{

c--;

j--;

}

}

}

i--;

for(k=0;k

{

if(ch==l[k].ch)

{

l[k].flag=1;

break;

}

}

}

if(flag2)

{

for(k=0;k

{

if(a[i][0]==l[k].ch)

{

l[k].num--;

if(l[k].num==0)

l[k].flag=0;

}

}

if(i!=c-1)

for(k=i;k

{

strcpy(a[k],a[k+1]);

}

c--;

i--;

flag2=0;

continue;

}

}

}

}

//求每个非终结符的First集合

void seekFirstVn()

{

int i,j,k,t,t1,t2,c,item;

int len,s,flag=0,flag2=0,fchange;

char a[MAX][MAX],ch[MAX];

for(i=0;i

{

strcpy(a[i],css[i]);

}

c=count;

while(1)

{

fchange=0;

for(i=0;i

{

//右部为ε,将ε并入到左部的First中

if(a[i][3]=='@')

{

/*for(j=0;j

{

if(l[j].ch==a[i][0])

{

for(k=0;k

if(l[j].first[k]==a[i][3])

{

flag=1;

break;

}

if(!flag)

{

l[j].first[l[j].s]=a[i][3];

l[j].s++;

l[j].first[l[j].s]='\0';

fchange=1;

break;

}

flag=0;

}

}*/

//从当前列表a[]中删除

if(i!=c-1)

for(j=i;j

strcpy(a[j],a[j+1]);

c--;

i--;

continue;

}

len=strlen(a[i]);

//产生式右边符号为终结符时,将该终结符并入到左部的First集合中for(j=3;j

{

if((a[i][j]<'A')||(a[i][j]>'Z'))

{

for(k=0;k

{

if(a[i][0]==l[k].ch)

{

for(t=0;t

{

if(a[i][j]==l[k].first[t])

{

flag=1;

break;

}

}

if(!flag)

{

l[k].first[l[k].s]=a[i][j];

l[k].s++;

l[k].first[l[k].s]='\0';

fchange=1;

}

flag=0;

break;

}

}

//从a[][]中删除该条产生式

if(i!=c-1)

for(k=i;k

strcpy(a[k],a[k+1]);

c--;

i--;

break;

}

//产生式右边符号为非终结符时

else if((a[i][j]>='A')&&(a[i][j]<='Z'))

{

/*将该非终结符的FIRST集合除去ε并入到当前

非终结符的FIRST集合中*/

for(k=0;k

{

if(a[i][j]==l[k].ch)

{

for(t=0;t

{

if(a[i][0]==l[t].ch)

{

for(t1=0;t1

{

for(t2=0;t2

{

if(l[k].first[t1]==l[t].first[t2])

{

break;

}

}

if((t2==l[t].s)&&(l[k].first[t1])!='@')

{

fchange=1;

l[t].first[l[t].s]=l[k].first[t1];

l[t].s++;

l[t].first[l[t].s]='\0';

}

}

break;

}

}

break;

}

}

if(l[k].flag)

continue;

else

break;

}

}

}

if(!fchange)

{

for(i=0;i

{

if(l[i].flag)

{

l[i].first[l[i].s]='@';

l[i].s++;

l[i].first[l[i].s]='\0';

}

printf("FIRST(%c): %s\n",l[i].ch,l[i].first);

}

printf("\n");

break;

}

}

}

//求产生式右部的First集合

void seekFirstRight()

{

struct Right{

char a[MAX];

char first[MAX];

int s;

}r[MAX];

int i,j,k,t;

int cnt=0,len,len1,flag=0;

for(i=0;i

{

for(j=0;j

{

if(!strcmp(css[i]+3,r[j].a))

{

flag=1;

break;

}

}

if(flag)

{

flag=0;

continue;

}

strcpy(r[j].a,css[i]+3);

r[j].s=0;

cnt++;

}

for(i=0;i

{

len=strlen(r[i].a);

for(j=0;j

{

//遇到终结符

if(r[i].a[j]=='@')

{

r[i].first[r[i].s]='@';

r[i].s++;

r[i].first[r[i].s]='\0';

break;

}

else if((r[i].a[j]<'A')||(r[i].a[j]>'Z'))

{

r[i].first[r[i].s]=r[i].a[j];

r[i].s++;

r[i].first[r[i].s]='\0';

break;

}

else

{

for(k=0;k

{

if(r[i].a[j]==l[k].ch)

{

len1=strlen(l[k].first);

for(t=0;t

{

if(l[k].first[t]!='@')

{

r[i].first[r[i].s]=l[k].first[t];

r[i].s++;

r[i].first[r[i].s]='\0';

}

}

break;

}

}

if(l[k].flag)

{

if(j==len-1)

{

r[i].first[r[i].s]='@';

r[i].s++;

r[i].first[r[i].s]='\0';

}

continue;

}

else

break;

}

}

}

for(i=0;i

{

printf("FIRST(%s): %s\n",r[i].a,r[i].first);

}

printf("\n");

}

//求每个非终极符的Follow集合

void seekFollow()

{

int i,j,k,t,t1,t2,t3,c=0;

int flag=0,len;

int fchange;//判断一次循环是否有改动的地方char a[MAX][MAX],ch[MAX];

for(i=0;i

{

len=strlen(css[i]);

for(j=3;j

{

if((css[i][j]>='A')&&(css[i][j]<='Z'))

{

break;

}

}

if(j!=len)

{

strcpy(a[c],css[i]);

c++;

}

}

l[0].follow[l[0].l]='#';

l[0].l++;

l[0].follow[l[0].l]='\0';

while(1)

{

fchange=0;

for(i=0;i

{

len=strlen(a[i]);

for(j=3;j

{

if((a[i][j]>='A')&&(a[i][j]<='Z'))

{

//判断该非终结符的前一位是否为非终结符,是的话,

//将其First集合去ε后并到其前一位非终结符的Follow集合中if((a[i][j-1]>='A')&&(a[i][j-1]<='Z'))

{

for(k=0;k

{

if(a[i][j-1]==l[k].ch)

{

for(t=0;t

{

if(a[i][j]==l[t].ch)

{

for(t1=0;t1

{

if(l[t].first[t1]=='@')

continue;

for(t2=0;t2

if(l[t].first[t1]==l[k].follow[t2])

break;

if(t2==l[k].l)

{

fchange=1;

l[k].follow[l[k].l]=l[t].first[t1];

l[k].l++;

l[k].follow[l[k].l]='\0';

}

}

break;

}

}

break;

}

}

}

//如果该非终结符是最后一位,

//将该产生式左部非终结符的Follow集合

//加入到当前非终结符的Follow集合中.

//然后从当前终结符开始向右判断是否为非终结符,是的话,进行相应处理//循环直到当前非终结符推不出ε或当前为终结符时退出

if(j==len-1)

{

t3=j;

strcpy(ch,a[i]);

while(!flag)

{

if((ch[t3]>='A')&&(ch[t3]<='Z'))

{

for(k=0;k

{

if(ch[0]==l[k].ch)

{

for(t=0;t

{

if(ch[t3]==l[t].ch)

{

for(t1=0;t1

{

for(t2=0;t2

if(l[k].follow[t1]==l[t].follow[t2])

break;

if(t2!=l[t].l)

continue;

else

{

fchange=1;

l[t].follow[l[t].l]=l[k].follow[t1];

l[t].l++;

l[t].follow[l[t].l]='\0';

}

}

if(l[t].flag)

ch[t3--]='\0';

else

{

flag=1;

t3--;

}

break;

}

}

break;

}

}

}

else

break;

}

flag=0;

}

}

//如果当前位为终结符,判断其前一位是否为非终结符

//是的话,将该终结符并到该非终结符的Follow集合中

else

{

if((a[i][j-1]>='A')&&(a[i][j-1]<='Z'))

{

for(k=0;k

{

if(a[i][j-1]==l[k].ch)

{

for(t=0;t

if(a[i][j]==l[k].follow[t])

break;

if(t==l[k].l)

{

fchange=1;

l[k].follow[l[k].l]=a[i][j];

l[k].l++;

l[k].follow[l[k].l]='\0';

}

}

}

}

}

}

}

if(!fchange)

{

for(i=0;i

printf("FOLLOW(%c): %s\n",l[i].ch,l[i].follow);

break;

}

}

}

int main()

{

int i;

if(input()==-1)

return -1;

seekEmpty();

seekFirstVn();

seekFirstRight();

seekFollow();

return 0;

}

实验演示:

因为不知道怎么用电脑输出’ε’符号,我在代码里用’@’来表示‘ε’.以‘$’来结束输入

测试数据1:

S->MH|a

H->LSo|@

K->dML|@

L->eHf

M->K|bLM

测试数据2:S->aH

H->aMd|d

M->Ab|@

A->aM|e

实验感想:

经过这几次的实验,不仅让我们更加深刻的知道了first集合和follow集合的计算步骤和方法,还很好的培养了我们动手能力。虽然这两个集合用笔算的方法很简单,但是要让计算机来演算就不是那么容易了,这需要设计合理的数据结构和算法才能正确地求出结果。当然在设计算法的时候难免会出现错误,这就需要我们这些程序员们仔细的去调试,发现错误并改正。本以为这次的实验代码不会很长,但是实际写好了却有好几百行,可能是我的算法不够好吧。总的来讲这次的实验没有遇到太大的问题,因为课上老师很认真的给我们讲解了

它们的求法,笔推也做了好几次练习,让我们理清了思路。

数据库实验

安徽工业大学数据库上机实验报告 专业:工业工程 班级:工112 学号: 姓名:

【实验2_1】查询学生基本信息表中的所有信息。 SQL语句如下: SELECT * FROM 学生基本信息表; 【实验2_2】在学生基本信息表中查询学生的学号、姓名、性别和族别信息。SQL语句如下: SELECT 学号, 姓名, 性别, 族别 FROM 学生基本信息表;

【实验2_3】从学生基本信息表中查询学生由哪些民族构成。 学生的族别有多行重复,要快速查询学生的民族构成,实际上就是对相同值的族别只需要显示一行,可使用DISTINCT关键字实现。 SQL语句如下: SELECT DISTINCT 学生基本信息表.族别 FROM 学生基本信息表 【实验2_4】从成绩表中查询学生成绩。 SQL语句如下: SELECT 学号, 成绩 FROM 成绩表; 【实验2_5】从相关表中查询每一位学生的学号、姓名、课程名称、成绩。 SQL语句如下:

SELECT 成绩表.学号, 学生基本信息表.姓名, 课程信息表.课程名称, 成绩表.成绩 FROM 课程信息表, 成绩表, 学生基本信息表 WHERE 学生基本信息表.学号=成绩表.学号and 成绩表.课程编号=课程信息表.课程编号; 【实验2_6】在课程信息表中查找“Delphi程序设计”课程的任课老师。 SQL语句如下: SELECT 课程名称, 任课教师 FROM 课程信息表 WHERE 课程名称="Delphi程序设计"; 【实验2_7】查询少数民族学生的基本情况。 SQL语句如下: SELECT * FROM 学生基本信息表

编译原理实验报告

编译原理实验报告 姓名: 学号: 班级: 学院: 南昌大学信息工程学院计算机系 2014年6月

目录 实验一 (3) 实验二 (8) 实验三 (15)

实验1 词法分析程序的设计 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验目的 掌握计算机语言的词法分析程序的开发方法。 二、实验内容 编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。 三、实验要求 1、根据以下的正规式,编制正规文法,画出状态图; 标识符<字母>(<字母>|<数字字符>)* 十进制整数0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 如有余力,则进一步分析八进制和十六进制整数,其正规式如下: 八进制整数0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六进制整数0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 运算符和界符+ - * / > < =<= >=( ) ;{ } 关键字main if then else while do int (可根据需要添加) 2、根据状态图,设计词法分析函数int scan( ),完成以下功能: 1)从文本文件中读入测试源代码,根据状态转换图,分析出一个单词, 2)以二元式形式输出单词<单词种类,单词属性> 其中单词种类用整数表示: 0:标识符 1:十进制整数 2:八进制整数 3:十六进制整数 运算符和界符,关键字采用一字一符,不编码 其中单词属性表示如下: 标识符,整数由于采用一类一符,属性用单词表示 运算符和界符,关键字采用一字一符,属性为空 3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。 四、实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境

安徽工业大学信息检索考试

一、单选题(每题1分,共20题) 1.期刊类参考文献的标准著录格式是____________。(D)正确 A、[序号]作者.题名[D].保存地点:保存单位,年 B、[序号]作者.题名[A].见(英文用In):主编.论文集名[C].出版地:出版者,出版年.起止页码 C、[序号]著者.书名[M].版本(第一版不写).出版地:出版者,出版年.起止页码 D、[序号]作者.题名[J].刊名,出版年份,卷号(期号):起止页码 2.检索语言中,_______是自然语言。(D)正确 A.标题词 B.主题词 C.单元词 D.关键词 3.下列属于布尔逻辑算符的是____________ 。(D)正确 A、与 B、或 C、非 D、以上都是 4.下列属于文献外表特征的是(C)正确 A.分类号 B.主题词 C.文献题名 D.关键词 5.字段代码AU、AB、PY所代表的字段是?(B)正确 A.标题、注释、文摘类型 B.著者、文摘、出版年 C.叙词、分类、语言 6.ISBN号是哪种文献特有的标识?(A)正确 A.图书 B.期刊 C.科技报告 D.专利文献 7.请标出文献:[3]李旭东,宗光华,毕树生,等.生物工程微操作机器人视觉系统的研究[J].北京航空航天大学学报,2002,28(3):249~252 属于哪种文献类型____________。(B)正确 A、图书 B、期刊 C、科技报告 D、报纸 8.以下哪些数据库不属于数值与事实数据库?(D)正确

B.搜数网统计年鉴数据库 C.国研网之国研数据 D.人大报刊复印资料 9.我馆所收藏的由叶迷著的图书《诺亚方舟》(珠海出版社2004 )的索书号是(A)正确 A.I247.57/H1282; B.I247.7/H1282 ; C.H247.57/H1282; D.I247.57/Y1282 10.在线公共目录检索系统(OPAC)属于什么检索系统(A)正确 A.目录检索系统 B.文摘检索系统 C.全文检索系统 11.利用文献末尾所附参考文献进行检索的方法是(C)正确 A.倒查法 B.顺查法 C.引文追溯法 D.抽查法 12.本馆常用外语类、经济类图书的分类号分别是:(A)正确 A.H、F B.H、C C.I、H E.I、F 13.截词符“?”可以用来代替0个或()个字符?(B)正确 A.多个 B.1个 C.2个 D.3个 14.国际上评价期刊最有影响力的一个指标是(A)正确 A.影响因子 B.读者统计数据 C.引文量 D.价格 15.查找安工大图书馆纸本图书和纸本期刊收藏地点,可利用:(A)错误正确答案:D A. CNKI B.重庆维普 C.文献传递

编译原理实验报告(语法分析器)

. 编译原理实验专业:13级网络工程

语法分析器1 一、实现方法描述 所给文法为G【E】; E->TE’ E’->+TE’|空 T->FT’ T’->*FT’|空 F->i|(E) 递归子程序法: 首先计算出五个非终结符的first集合follow集,然后根据五个产生式定义了五个函数。定义字符数组vocabulary来存储输入的句子,字符指针ch指向vocabulary。从非终结符E函数出发,如果首字符属于E的first集,则依次进入T函数和E’函数,开始递归调用。在每个函数中,都要判断指针所指字符是否属于该非终结符的first集,属于则根据产生式进入下一个函数进行调用,若first集中有空字符,还要判断是否属于该非终结符的follow集。以分号作为结束符。 二、实现代码 头文件shiyan3.h #include #include

#include using namespace std; #define num 100 char vocabulary[num]; char *ch; void judge_E(); void judge_EE(); void judge_T(); void judge_TT(); void judge_F(); 源文件 #include"shiyan3.h" void judge_E() { if(*ch==';') { cout<<"该句子符合此文法!"<

int a=0; cout<<"按1结束程序"<>a; if(a==1) exit(0); } else if(*ch=='('||*ch=='i') { judge_T(); judge_EE(); } else { cout<<"该句子不匹配此文法!"<>a; if(a==1) exit(0); }

安徽工业大学文献检索E次作业

一、单选题(每题2分,共5题) 1.智立方?知识发现系统是一个知识资源的大数据服务平台,它是哪家数据资源服务商推出的?(B)正确 A. 中国知网 B. 维普资讯 C. 万方数据 D. 读秀学术搜索 E. EBSCO 2.在万方数据平台检索我校刘晓东的论文《DC/DC变换器并联均流技术》的出处:(A)正确 A. 《安徽工业大学学报(自然科学版)》2013年1期 B. 《电子技术应用》2012年12期 C. 《工业控制计算机》 2012年5期 D. 《电子技术应用》2013年2期 3.在万方中查找“基于粗糙集的神经网络建模方法研究”的文献,检索结果最多的是:(D)正确 A. 粗糙集神经网络建模方法 B. 基于粗糙集的神经网络建模方法研究 C. 粗糙集神经网络建模研究 D. 粗糙集神经网络建模 4. 在万方数据资源(网站地址:https://www.wendangku.net/doc/e315519000.html,)进入学术期刊,使用“期刊检索”功能,“按学科分类”找到“ 自动化技术与计算机技术”中的“自动化与仪表”,打开该期刊的2014年第8期,选出篇名为“基于ARM-Linux的火电机组在线性能监测系统”的文献的第一作者:(A)正确 A. 方彦军 B.董政呈 C.杨军

D.林涛 5. 在万方数据资源(网站地址:https://www.wendangku.net/doc/e315519000.html,)进入学术期刊,使用“学位检索”功能,“学科、专业目录”找到“ 电气工程”中的"电力系统及其自动化",打开2013年博士学位论文,选出篇名为“间歇性能源输出功率预测与储能系统规划”的论文的作者:(B)正确 A. 王守相 B. 张娜 C. 王俊 D. 罗卫红 二、多选题(每题5分,共8题) 1.进入维普期刊资源整合服务平台(https://www.wendangku.net/doc/e315519000.html,/)期刊文献检索,利用 “基本检索”功能查找安徽工业大学谢能刚为第一作者2001-2012年发表的期刊论文,正确的检索结果是?(A、C、E)正确 A. 40篇; B. 107篇; C.被EI收录16篇; D.EI收录26篇; E.核心期刊31篇。 2.进入维普期刊资源整合服务平台(https://www.wendangku.net/doc/e315519000.html,/)期刊文献检索,利用 “基本检索”功能查找安徽工业大学谢能刚为第一作者2005-2012年发表的期刊论文,正确的检索结果是?(A、C、E)错误正确答案:A、D、E A. 17篇; B. 107篇; C.被EI收录16篇; D.被EI收录6篇; E.核心期刊14篇。

安徽工业大学软件工程实验报告

《软件工程》实验报告 姓名:江文杰 学号:139074333 班级:网133 指导老师:周兵

一.实验目的 1.能按照软件工程的思想,采用面向过程的方法开发出一个小型软件系统。 2.在软件系统开发过程中,能综合利用一门编程语言和软件工程等多门课程的知识。 3.培养良好的软件开发习惯,了解软件企业文化。 4.掌握结构化数据流分析技术。 5.掌握结构化程序设计的基本概念与技术,并且养成良好的编码风格。 6.掌握单元测试的一般步骤及技术。 7.掌握集成测试的一般步骤和技术。 二.实验内容 1.软件需求分析 ①、功能需求分析 ·输入一个年份(1-3000),然后显示12个月的月历 ·能解决闰年和平年问题 ·能输出显示结果 ②、运行需求分析 ·操作系统:Windows9x, Windows2000, Windows XP及更高版本 ③、数据流图

软件结构图: 2.软件设计与编码 #include #include #include #include #define firstdayof1 1 /* 定义第一年的第一天,星期日=7 */ #define gap " " /* set gap between numbers of dates */ #define dent " " /* set right margin. */ struct info { int month; int firstdayofmonth; int daysofmonth; int leap; }monthinfo;

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

数据库实验报告

《数据库系统概论》实验报告书 专业班级软件 学号16677777 姓名哈哈 指导教师陈业斌 安徽工业大学计算机学院

实验一:数据定义/数据操纵语言 [ 实验日期 ] 2016 年 9 月 24 日 [ 实验目的 ] 熟悉Oracle上机环境;熟练掌握和使用DDL语言,建立、修改和删除数据库表;熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。 [ 实验内容 ] 1.SQL数据定义语句: 例1-1: (建立如附录一所示的四张数据表) 按要求建立教学数据库表结构及其完整性约束关系,并将数据分别插入到教学数据库的四个数据库表中。 例1-2: (修改表结构) 在Student表中将SSEX字段修改为char(2),观察返回结果,分析原因。显示:alter table STUDENT modify (SSEX char(2)) 错误报告 - SQL 错误: ORA-01441: 无法减小列长度, 因为一些值过大 01441. 00000 - "cannot decrease column length because some value is too big" 例1-3: (修改表结构) 在Student表中增加BirthDay(date) 字段。 alter table STUDENT add BirthDay DATE; 例1-4: (修改表结构) 在Student表中删除BirthDay字段。 alter table STUDENT drop column BirthDay; 例1-5: (修改表结构) 在Student表中增加一个默认值约束,约束’性别’的默认值为’男’。alter table STUDENT modify (SSEX default '男'); 2. SQL数据操纵语句: 例2-1: (插入数据) 执行如下语句向student表中插入一条数据。 insert into student(sno,sname,sdept) values('96001','张三','SC'); (1)根据返回信息解释其原因; 显示: 在行: 5 上开始执行命令时出错 - insert into student(sno,sname,sdept) values('96001','张三','SC') 错误报告 - SQL 错误: ORA-01400: 无法将 NULL 插入 ("STU"."STUDENT"."SCLASS") 01400. 00000 - "cannot insert NULL into (%s)" 原因:在定义表结构时已将SCLASS约束为NOT NULL。并且学号是主键,表里已经有学号为96001的学生,违反了主键的唯一性约束条件。 (2)修改上面插入语句,让其能正确地插入一条记录。

安徽工业大学误差实验报告

实验一 误差的基本性质与处理 一、实验目的 了解误差的基本性质以及处理方法 二、实验原理 (1)正态分布 设被测量的真值为0L ,一系列测量值为i L ,则测量列中的随机误差i δ为 i δ=i L -0L (2-1) 式中i=1,2,…..n. 正态分布的分布密度()()2 22f δσδ -= (2-2) 正态分布的分布函数()()22 2F e d δδσδδ --∞=(2-3) 式中σ-标准差(或均方根误差); 它的数学期望为 ()0E f d δδδ+∞ -∞==? (2-4) 它的方差为 ()22f d σδδδ+∞ -∞=? (2-5) (2)算术平均值 对某一量进行一系列等精度测量,由于存在随机误差,其测得值皆不相同,应以全部测得值的算术平均值作为最后的测量结果。 1、算术平均值的意义 在系列测量中,被测量所得的值的代数和除以n 而得的值成为算术平均值。 设 1l ,2l ,…,n l 为n 次测量所得的值,则算术平均值121...n i n i l l l l x n n =++==∑ 算术平均值与真值最为接近,由概率论大数定律可知,若测量次数无限增加,则算术平均值x 必然趋近于真值0L 。

i v = i l -x i l ——第i 个测量值,i =1,2,...,;n i v ——i l 的残余误差(简称残差) 2、算术平均值的计算校核 算术平均值及其残余误差的计算是否正确,可用求得的残余误差代数和性质来校核。 残余误差代数和为: 11n n i i i i v l nx ===-∑∑ 当x 为未经凑整的准确数时,则有 1n i i v ==∑0 1)残余误差代数和应符合: 当1 n i i l =∑=nx ,求得的x 为非凑整的准确数时,1n i i v =∑为零; 当1 n i i l =∑>nx ,求得的x 为凑整的非准确数时,1n i i v =∑为正;其大小为求x 时的余数。 当1n i i l =∑

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

编译原理实验报告一 简单样本语言的词法分析器

理工大学信息工程与自动化学院学生实验报告 (2012 —2013学年第一学期) 一、实验目的及容 编译技术是理论与实践并重的课程,而其实验课要综合运用所学的多门课程的容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。 调试并完成一个词法分析程序,加深对词法分析原理的理解。 二、实验原理及基本技术路线图(框原理图或程序流程图) 1、待分析的简单语言的词法 (1)关键字: begin if then while do end 所有关键字都是小写。 (2)运算符和界符: := + –* / < <= <> > >= = ; ( ) #

(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter| digit)* NUM=digit digit * (4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 2、各种单词符号对应的种别码 3、词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 二、所用仪器、材料(设备名称、型号、规格等或使用软件)

1台PC以及VISUAL C++6.0软件。 三、实验法、步骤(或:程序代码或操作过程) (1)程序代码: #include #include #include char prog[80],token[8]; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner() { for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { ch=prog[p]; p++; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { m=0; while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { token[m++]=ch; ch=prog[p++]; } token[m++]='\0'; p--; syn=10; for(n=0;n<6;n++)

安徽工业大学——java实验报告

Java实验报告 学号149074353 姓名程裕博 班级物141 指导教师柯栋梁 安徽工业大学计算机学院2016年11月

实验一: 利用JAVA 反射技术分析类结构 自己定义的类: package chap05; public class analysis { private int a; private char c; protected int b; public double d; public void test1() { } private void test2() { } protected double test3() { return 1.0; } } 用java反射技术分析输出的结果: Enter class name (e.g. java.util.Date): chap05.analysis class chap05.analysis { public chap05.analysis(); public void test1(); private void test2(); protected double test3(); private int a; private char c; protected int b; public double d; } 1.分析程序运行时的输出结果。 输出的结果中显示了被分析类的方法与变量,包括这些方法与变量的

修饰符 2.分析与JAVA反射技术相关的几个类的作用: https://www.wendangku.net/doc/e315519000.html,ng.reflect.Constructor; Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。 https://www.wendangku.net/doc/e315519000.html,ng.reflect.Field; Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。 https://www.wendangku.net/doc/e315519000.html,ng.reflect.Method; Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。https://www.wendangku.net/doc/e315519000.html,ng.reflect.Modifier; Modifier 类提供了static 方法和常量,对类和成员访问修饰符进行解码。修饰符集被表示为整数,用不同的位位置(bit position) 表示不同的修饰符。 实验二:利用JAVA 反射技术分析对象结构 实验内容:运行示例程序,分析Integer 数组对象的结构;改写程序分析一下自定义 的类对象,如Employee 类。

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

编译原理实验报告

学生学号0120810680316 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称《编译原理》 开课学院计算机科学与技术学院 指导老师姓名何九周 学生姓名刘洋 学生专业班级软件工程0803 2010 —2011 学年第二学期

实验课程名称:编译原理 实验项目名称单词的词法分析程序设计实验成绩实验者刘洋专业班级软件0803 组别 同组者实验日期 2011 年 5 月 17日 第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 实验目的: 设计,编制并调试一个词法分析程序,加深对词法分析原理的理解。 实验要求: 在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法编制和程序代码的编写;上机时应随带有关的高级语言教材或参考书;要学会程序调试与纠错;每次实验后要交实验报告。 实验题目: 对于给定的源程序(如C语言或Pascal等),要求从组成源程序的字符行中寻找出单词,并给出它们的种别和属性——输出二元组序列。以便提供给语法分析的时候使用。要求能识别所有的关键字,标志符等,并且能够对出先的一些词法规则的错误进行必要的处理。 二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述) 实验原理: 由于这是一个用高级语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出.输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能.当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号.当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串. 编写的时候,使用了文件的输入和输出,以便于词法分析的通用型,同时在文件输出时,并保存在输出文件output文件中。 从左到右扫描程序,通过初始化:1为关键字;2为标志符; 3为常数;4为运算符或界符。 三、主要仪器设备及耗材 计算机

数据库概论课程设计安徽工业大学戴小平

《数据库系统概论》课程设计 2017年 06月03 日 安徽工业大学计算机学院 姓 名 李根 专 业 计算机科学与技术 班 级 计141 学 号 149074007 指导教师 戴小平

摘要 随着计算机科学技术的日益发展及信息化技术向各个领域的不断深入,人们的学习生活已越来越趋向于信息化。为跟上时代的要求及人们生活的步伐,药店管理系统随运而生。它的发展不仅给人们带来了很大的便利性,还在很大程度上减轻了其管理人员的工作压力,基于这一事实开发本系统。 本系统主要要实现的是药店管理系统进行药品的管理。本系统的主要功能包括:用户操作和管理员操作。用户操作包括:用户登录,用户注册,用户购买药品,查看药品基本信息等功能。管理员操作包括:管理员登录,添加药品至仓库,修改药品信息,查看入库信息,出库信息,库存信息,以及从仓库出库至药店等功能。 本系统是利用Microsoft Visual Studio 2017开发工具、C#语言和Microsoft SQL Serve数据库来开发的。 关键词:药店;仓库;管理系统;

目录 1绪论 (3) 1.1 概述 (3) 1.1.1 问题的提出 (3) 1.1.2 本课题的意义 (3) 1.2 开发环境与工具介绍 (3) 1.2.1 Microsoft Visual Studio简介 (3) 1.2.2 C# 简介 (3) 1.2.3 Microsoft SQL Server简介 (4) 2 系统需求分析与设计 (4) 2.1 用户需求分析 (4) 2.1.1 用户需求 (4) 2.1.3 系统性能需求 (4) 2.1.4数据分析 (4) 2.2 功能模块图及分模块功能描述 (5) 2.2.1 系统的功能模块图 (5) 2.2.2 系统功能模块简介 (5) 2.3 数据库设计 (5) 2.3.1 系统E-R图 (5) 2.3.2 数据库逻辑结构设计 (6) 3 系统实施 (8) 3.1 建立数据库 (8) 3.2 数据库连接 (10) 3.3 主要模块实施 (10) 3.3.1 登录模块的开发 (10) 3.3.2 管理员主界面 (11) 3.3.3 用户主界面开发 (12) 3.4 系统测试 (12) 3.4.1 软件测试的对象 (12) 4 系统说明 (15) 4.1 开发环境 (15) 4.2 系统安装、配置与发布应用程序的步骤 (15) 总结 (16) 参考文献 (16) 附录:部分源代码 (16) 登录主界面源代码: (16) 用户注册界面代码: (18) 管理员主界面: (20) 购买药品代码: (23) 插入药品信息代码: (26)

安徽工业大学sap实验报告

《ERP 实习》 实验报告 学号 姓名 班级 指导老师 2014年 1月7日 一、所做实验项目分类 实验项目1 系统基本信息设置 一、实验目的与要求 ERP 作为计划与控制信息系统,需要进行大量的信息处理。任何一个制造企业

都有大量的生产与经营动作数据。数据必须经过加工、处理才能产生有用的信息供决策者使用。学生通过已经配置好环境的ERP 软件操作,了解企业基础数据的作用,了解ERP 的管理流程。 1. 熟悉SAP 实验环境;学习SAP 客户端软件的安装和登录配置;熟悉系统操作 环境和方法; 2. 学习维护液压锤GT10 产品各种基础数据,如:仓库、物料编码、BOM、工作 中心、工艺路线等数据维护。 二、实验环境: 1. Microsoft Windows XP Professional。 2. SAP 软件实验教学系统。 三、实验内容: 1. SAP 系统环境 2. 库存地点信息维护; 3. 物料编码和主文件维护; 4. 物料清单维护; 5. 工作中心数据维护; 6. 工艺路线维护。 四、实验步骤及实验截图: 1、登录sap系统 2、仓储地点维护 3、物料档案设置 通过事务码MM01/MM02/MM03进行物料编码和主文件维护设置操作; (1)物料油漆的创建 (2)物料钎杆的创建

(3)物料缸体的 (4)物料活塞杆的创建 (5)物料板材的创建 (6)半成品视图维图 (7)物料清单

(8)物料清单设置: 通过事务码CS01/CS02/CS03进行BOM主数据的维护; (9)物料清单展开 通过事务码CS11/CS12/CS15进行BOM主数据的逐层显示BOM、多层显示BOM、反查BOM。

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

安徽工业大学--数据库课程设计--含代码

《数据库系统概论》课程设计 实验报告书 安徽工业大学计算机学院 姓名 专业 班级 学号 指导教师 2011年12 月25 日

目录 1、绪论*****************************************3 2、系统需求分析与设计***************************4 3、系统实施*************************************7 4、系统说明*************************************13 5、总结*****************************************13 参考文献****************************************14 附录代码****************************************14

1 绪论 1.1 概述 1.1.1 问题的提出 高效率的完成学生成绩的管理,开发一个具有使用意义的学生成绩管理系统。 1.1.2 本课题的意义 通过对学校日常教学管理中的课程、选课、学生、教师、成绩等相关内容进行分析,完成具有学生管理、成绩管理、课程管理等相关功能的小型数据库管理应用系统。 1.2 开发环境与工具介绍 本系统采用Microsoft Visual C++6.0作为开发工具,C++为开发语言,采用Oracle 9i版本数据库管理系统建立数据库,先在Oracle中设计并制作各部分需要调用的数据库,并进行初始数据的输入,再进行界面的设计和事件代码的编写,在指导老师的帮助下,已经基本上成功地实现了设计要求。其中数据库设计和程序设计是系统的核心部分。通过对数据库的概念设计、逻辑设计、物理设计和系统的模块设计,使得系统界面简洁,功能明确,方便了工作人员的操作。 1.2.1 ODBC简介 ODBC(Open Database Connectivity) 是"开放数据库互连"的简称,是一种使用SQL的应用程序接口(API),是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL 来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。 一个完整的ODBC由下列几个部件组成:应用程序、 ODBC管理器、驱动程序管理器、 ODBC API、 ODBC 驱动程序、数据源。 1.2.2 学生成绩管理系统研究状况 学生成绩管理是各大学的主要日常管理工作之一,涉及到校、系、师、生的诸多方面,随着教学体制的不断改革,尤其是学分制、选课制的展开和深入,学生成绩日常管理工作及保存管理日趋繁重、复杂。迫切需要研制开发一款功能强大,操作简单,具有人性化的学生成绩管理系统。 在国外高校,与国内不同,他们一般具有较大规模的稳定的技术队伍来提供服务与技术支持。而国内高校信息化建设相对起步较晚。在数字校园理论逐步应用的过程中,各高校一方面不断投资购建各种硬件、系统软件和网络,另一方面也不断开发实施了各类教学、科研、办公管理等应用系统,形成了一定规模的信息化建设体系。但是,由于整体信息化程度相对落后,经费短缺,理论体系不健全等原因,国内高校教务管理系统在机构设置、服务范围、服务质量及人员要求上与国外高校相比都有一定的差距。 纵观目前国内研究现状,在安全性和信息更新化方面存在有一定的不足,各现有系统资料单独建立,共享性差;在以管理者为主体的方式中,信息取舍依赖管理者对于信息的认知与喜好,较不容易掌握用户真正的需求,也因此无法完全满足用户的需求。因此,教务管理软件应充分依托校园网,实现教务信息的集中管理、分散操作、信息共享,使传统的教务管理朝数字化、无纸化、智能化、综合化的方向发展,并为进一步实现完善的计算机教务管理系统和全校信息系统打下良好的基础。

相关文档