求数据结构(用面向对象方法与C++语言描述)第二版 殷人昆主编 课后答案

求数据结构(用面向对象方法与C++语言描述)第二版 殷人昆主编 课后答案,第1张

第一章 习题答案

2、××√

3、(1)包含改变量定义的最小范围

(2)数据抽象、信息隐蔽

(3)数据对象、对象间的关系、一组处理数据的 *** 作

(4)指针类型

(5)集合结构、线性结构、树形结构、图状结构

(6)顺序存储、非顺序存储

(7)一对一、一对多、多对多

(8)一系列的 *** 作

(9)有限性、输入、可行性

4、(1)A(2)C(3)C

5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)

第二章 习题答案

1、(1)一半,插入、删除的位置

(2)顺序和链式,显示,隐式

(3)一定,不一定

(4)头指针,头结点的指针域,其前驱的指针域

2、(1)A(2)A:E、A

B:H、L、I、E、A

C:F、M

D:L、J、A、G或J、A、G

(3)D(4)D(5)C(6)A、C

3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。

头结点:为了 *** 作方便,可以在单链表的第一个结点之前附设一个结点,

该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。

首元素结点:线性表中的第一个结点成为首元素结点。

4、算法如下:

int Linser(SeqList *L,int X)

{ int i=0,k

if(L->last>=MAXSIZE-1)

{ printf(“表已满无法插入”);

return(0)

}

while(i<=L->last&&L->elem[i]<X)

i++

for(k=L->lastk>=Ik--)

L->elem[k+1]=L->elem[k]

L->elem[i]=X

L->last++

return(1)

}

5、算法如下:

#define OK 1

#define ERROR 0

Int LDel(Seqlist *L,int i,int k)

{ int j

if(i<1||(i+k)>(L->last+2))

{ printf(“输入的i,k值不合法”)

return ERROR

}

if((i+k)==(L->last+2))

{ L->last=i-2

ruturn OK

}

else

{for(j=i+k-1j<=L->lastj++)

elem[j-k]=elem[j]

L->last=L->last-k

return OK

}

}

6、算法如下:

#define OK 1

#define ERROR 0

Int Delet(LInkList L,int mink,int maxk)

{ Node *p,*q

p=L

while(p->next!=NULL)

p=p->next

if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk))

{ printf(“参数不合法”)

return ERROR

}

else

{ p=L

while(p->next-data<=mink)

p=p->next

while(q->data<maxk)

{ p->next=q->next

free(q)

q=p->next

}

return OK

}

}

9、算法如下:

int Dele(Node *S)

{ Node *p

P=s->next

If(p= =s)

{printf(“只有一个结点,不删除”);

return 0

}

else

{if((p->next= =s)

{s->next=s

free(p)

return 1

}

Else

{ while(p->next->next!=s)

P=p->next

P->next=s

Free(p)

return 1

}

}

}

第三章 习题答案

2、(1)

3、栈有顺序栈和链栈两种存储结构。

在顺序栈中,栈顶指针top=-1时,栈为空;栈顶指针top=Stacksize-1时,栈为满。

在带头结点链栈中,栈顶指针top-〉next=NULL,则代表栈空;只要系统有可用空间,链栈就不会出现溢出,既没有栈满。

5、

#include<seqstack1.h>

#include "stdio.h"

void main( )

{

char ch,temp

SeqStack s

InitStack(&s)

scanf("%c",&ch)

while(ch!='@'&&ch!='&')

{

Push(&s,ch)

scanf("%c",&ch)

}

while(ch!='@'&&!IsEmpty(&s))

{

Pop(&s,&temp)

scanf("%c",&ch)

if(ch!=temp)

break

}

if(!IsEmpty(&s))

printf("no!\n")

else

{

scanf("%c",&ch)

if(ch=='@') printf("yes!\n")

else printf("no!\n")

}

}

12、(1)功能:将栈中元素倒置。

(2)功能:删除栈中的e元素。

(3)功能:将队列中的元素倒置。

第四章习题答案

1、StrLength(s) *** 作结果为14;SubString(sub1,s,1,7) *** 作结果为sub1=’I AM A ’;

SubString(sub2,s,7,1) *** 作结果为sub2=’ ’;StrIndex(s,’A’,4) *** 作结果为5;

StrReplace(s,’STUDENT’,q) *** 作结果为’I AM A WORKER’;

StrCat(StrCat(sub1,t), StrCat(sub2,q)) *** 作结果为’I AM A GOOD WORKER’;

2、

int StrReplace(SString S,Sstring T,SString V)

{

int i=1 //从串S的第一个字符起查找串T

if(StrEmpty(T)) //T是空串

return ERROR

do

{

i=Index(S,T,i) //结果i为从上一个i之后找到的子串T的位置

if(i)//串S中存在串T

{

StrDelete(S,i,StrLength(T)) //删除该串T

StrInsert(S,i,V) //在原串T的位置插入串V

i+=StrLength(V)//在插入的串V后面继续查找串T

}

}while(i)

return OK

}

第五章习题答案

1、(1)数组A共占用48*6=288个字节;

(2)数组A的最后一个元素的地址为1282;

(3)按行存储时loc(A36)=1000+[(3-1)*8+6-1]*6=1126

(4)按列存储时loc(A36)=1000+[(6-1)*6+3-1]*6=1192

9、(1)(a,b)(2)((c,d))(3)(b)(4)b(5)(d)

10、D

第六章 习题答案

1、三个结点的树的形态有两个;三个结点的二叉树的不同形态有5个。

2、略

3、证明:分支数=n1+2n2+…+knk (1)

n= n0+n1+…+nk (2)

∵n=分支数+1(3)

将(1)(2)代入(3)得

n0= n2+2n3+3n4+…+(k-1)nk+1

4、

注:C结点作为D的右孩子(画图的时候忘记了,不好意思)

5、n0=50,n2=n0-1=49,所以至少有99个结点。

6、(1)前序和后序相同:只有一个结点的二叉树

(2)中序和后序相同:只有左子树的二叉树

(3)前序和中序相同:只有右子树的二叉树

7、证明:∵n个结点的K叉树共有nk个链域,分支数为n-1(即非空域)。

∴空域=nk-(n-1)=nk-n+1

8、对应的树如下:

9、(答案不唯一)

哈夫曼树如下图所示:

哈夫曼编码如下:

频率 编码

0.07 0010

0.19 10

0.02 00000

0.06 0001

0.32 01

0.03 00001

0.21 11

0.10 0011

11、对应的二叉树如下:

12、求下标分别为i和j的两个桔点的最近公共祖先结点的值。

typedef int ElemType

void Ancestor(ElemType A[],int n,int i,int j)

{while(i!=j)

if(i>j) i=i/2

else j=j/2

printf("所查结点的最近公共祖先的下标是%d,值是%d",i,A[i])

}

15、编写递归算法,对于二叉树中每一个元素值为X的结点,删去以它为根的子树,并释放相应的空间。

void Del_Sub(BiTree T)

{ if(T->lchild) Del_Sub(T->lchild)

if(T->rchild) Del_Sub(T->rchild)

free(T)

}

void Del_Sub_x(BiTree T,int x)

{ if(T->data==x) Del_Sub(T)

else

{if(T->lchild) Del_Sub_x(T->lchild,x)

if(T->rchild) Del_Sub_x(T->rchild,x)

}

}

22、

int Width(BiTree bt)

{if (bt==NULL) return (0)

else

{BiTree p,Q[50]

int front=1,rear=1,last=1

int temp=0, maxw=0

Q[rear]=bt

while(front<=last)

{p=Q[front++]temp++

if (p->lchild!=NULL) Q[++rear]=p->lchild

if (p->rchild!=NULL) Q[++rear]=p->rchild

{last=rear

if(temp>maxw) maxw=temp

temp=0}

}

return (maxw)

}

}

第七章 习题答案

1、(1)顶点1的入度为3,出度为0;

顶点2的入度为2,出度为2;

顶点3的入度为1,出度为2;

顶点4的入度为1,出度为3;

顶点5的入度为2,出度为1;

顶点6的入度为2,出度为3;

(2)邻接矩阵如下:

0 0 0 0 0 0

1 0 0 1 0 0

0 1 0 0 0 1

0 0 1 0 1 1

1 0 0 0 0 0

1 1 0 0 1 0

(3)邻接表

(4)逆邻接表

2、答案不唯一

(2)深度优先遍历该图所得顶点序列为:1,2,3,4,5,6

边的序列为:(1,2)(2,3)(3,4)(4,5)(5,6)

(3)广度优先遍历该图所得顶点序列为:1,5,6,3,2,4

边的序列为:(1,5)(1,6)(1,3)(1,2)(5,4)

3、

(1)每个事件的最早发生时间:

ve(0)=0,ve(1)=5,ve(2)=6, ve(3)=12, ve(4)=15, ve(5)=16,

ve(6)=16, ve(7)=19, ve(8)=21, ve(9)=23

每个事件的最晚发生时间::

vl(9)=23, vl(8)=21, vl(7)=19, vl(6)=19, vl(5)=16, vl(4)=15,

vl(3)=12, vl(2)=6, vl(1)=9, vl(0)=0

(2)每个活动的最早开始时间:

e(0,1)=0, e(0,2)=0, e(1,3)=5, e(2,3)=6, e(2,4)=6, e(3,4)=12, e(3,5)=12,

e(4,5)=15, e(3,6)=12, e(5,8)=16, e(4,7)=15, e(7,8)=19, e(6,9)=16, e(8,9)=21

每个活动的最迟开始时间:

l(0,1)=4, l(0,2)=0, l(1,3)=9, l(2,3)=6, l(2,4)=12, l(3,4)=12, l(3,5)=12, l(4,5)=15, l(3,6)=15, l(5,8)=16, l(4,7)=15, l(7,8)=19, l(6,9)=19, l(8,9)=21

(3)关键路径如下图所示:

4、顶点1到其余顶点的最短路经为:

1-〉3最短路经为1,3;长度为15

1-〉2最短路经为1,3,2;长度为19

1-〉5最短路经为1,3,5;长度为25

1-〉4最短路经为1,3,2,4;长度为29

1-〉6最短路经为1,3,2,4,6;长度为44

13、A(7)B(3)C(2)D(11)E(8)

14、略

15、略

第八章 查找

1、画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。

解:

ASL=(1+2*2+4*3+3*4)/10=2.9

5、

解:(1)插入完成后的二叉排序树如下:

ASL=(1+2*2+3*3+3*4+2*5+1*6)/12=3.5 ????

(2)ASL=(1+2*2+3*4+4*5)=37/12

(3)

12、

解:哈希表构造如下:

0 1 2 3 4 5 6 7 8 9 10

22 41 30 01 53 46 13 67

H(22)=(22*3)%11=0

H(41)=(41*3)%11=2

H(53)=(53*3)%11=5

H(46)=(46*3)%11=6

H(30)=(30*3)%11=2 与(41)冲突

H1(30)=(2+1)%11=3

H(13)=(13*3)%11=6 与46冲突

H1(13)=(6+1)%11=7

H(01)=(01*3)%11=3 与30冲突

H1(01)=(3+1)%11=4

H(67)=(67*3)%11=3 与30冲突

H1(67)=(3+1)%11=4 与01冲突

H2(67)=(3+2)%11=5 与53冲突

H3(67)=(3+3)%11=6 与46冲突

H4(67)=(3+4)%11=7 与13冲突

H5(67)=(3+5)%11=8

ASLsucc=(1*4+2*3+6)/8=2

ASLunsucc=(2+8+7+6+5+4+3+2)/8=37/8

第九章 排序

1、以关键字序列(503,087,512,061,908,170,897,275,653,426)为例,手工执行以下排序算法,写出每一趟派结束时的关键字状态。

(1)直接插入排序(2)希尔排序(增量序列为5,3,1)(3)快速排序(4)堆排序(5)归并排序

解:(1)略

(2)增量为5的排序结果:170,087,275,061,426,503,897,512,653,908

增量为3的排序结果:061,087,275,170,426,503,897,512,653,908

增量为1的排序结果:061,087,170,275,426,503,512,653,897,908

(3)一次划分后:{426 087 275 061 170}503{897 908 653 512}

分别进行:{170 087 275 061}426 503 {512 653} 897 {908}

{061 087}170{275}426 503 512 {653} 897 908

061 087 170 275 426 503 512 653 897 908

(4)略

7、已知一组关键字:(40,27,28,12,15,50,7),要求采用快速排序法从小到大排序。请写出每趟排序后的划分结果。

解:初始状态:40 27 28 12 15 50 7

一次划分:{7 27 28 12 15} 40 {50}

依次划分:7 {27 28 12 15} 40 50

7 {15 12} 27 {28} 40 50

7 12 15 27 28 40 50

16、(1)A3 B1 C4 D2 E7

(2)C

(3)C

17、对,错,对

数据结构课程设计指导书

一、设计内容

1.飞机订票系统(限1 人完成)

【问题描述】

设计一个飞机订票系统,可以模拟处理飞机订票过程中的各种 *** 作。

【基本要求】

通过此系统可以实现如下功能:

1)录入

可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)。

2)查询

可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);

可以输入起飞抵达城市,查询飞机航班情况。

3)订票(订票情况可以存在一个数据文件中,结构自己设定)

可以订票,如果该航班已经无票,可以提供相关可选择航班。

4)退票

可退票,退票后修改相关数据文件。

客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

5)修改航班信息

当航班信息改变可以修改航班数据文件

根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

2.文章编辑(限1 人完成)

【问题描述】

输入一页文字,程序可以统计出文字、数字、空格的个数。

【基本要求】

静态存储一页文章,每行最多不超过80个字符,共N行;

1)分别统计出其中英文字母数和空格数及整篇文章总字数;

2)统计某一字符串在文章中出现的次数,并输出该次数;

3)删除某一子串,并将后面的字符前移;

4)用指定的字符串替换某一子串;

5)存储结构使用线性表,分别用几个子函数实现相应的功能;

6)输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

7)输出形式:①分行输出用户输入的各行字符;②分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";③输出删除某一字符串后的文章;④输出替换某一字符串后的文章。

3.宿舍管理查询软件(限1 人完成)

【问题描述】

为宿舍管理人员编写一个宿舍管理查询软件。

【基本要求】

1) 程序设计要求:

①采用交互工作方式

②建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)

2) 查询菜单: (用二分查找实现以下 *** 作)

①按姓名查询

②按学号查询

③按房号查询

3) 输出任一查询结果(可以连续 *** 作)

4.全国交通咨询模拟

【问题描述】

处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

【设计要求】

1)提供对城市信息进行编辑(如:添加或删除)的功能。

2)提供对列车时刻表进行编辑(增设或删除)的功能。

3) 提供两种最优决策:最快到达和最省钱到达。

4)旅途中耗费的总时间应该包括中转站的等候时间。

5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明于何时乘坐哪一趟列车到何地。

测试数据:参考教科书7.6节图7.33的全国交通图,自行设计列车时刻表。

【实现提示】

1) 对全国城市交通图和列车时刻表进行编辑,应该提供文件形式输入和键盘输入两种方式。列车时刻表则需根据交通图给出各个路段的详细信息,例如:基于教科书7.6节图7.33的交通图,对从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至上海各段的出发时间、到达时间及票价等信息。

2) 以邻接表作交通图的存储结构,表示边的结构内除含有邻接点的信息外,还应包括交通工具、路程中耗费的时间和花费以及出发和到达的时间等多种属性。

5.哈夫曼编码/译码器(限1 人完成)

【问题描述】

设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。

【基本要求】

1) 将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)

2) 分别采用动态和静态存储结构

3) 初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;

4) 编码:利用建好的哈夫曼树生成哈夫曼编码;

5) 输出编码;

6) 设字符集及频度如下表:

字符 空格 A B C D E F G H I J K L M

频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20

字符 N O P Q R S T U V W X Y Z

频度 57 63 15 1 48 51 80 23 8 18 1 16 1

【进一步完成内容】

1) 译码功能;

2) 显示哈夫曼树;

3) 界面设计的优化。

6.走迷宫游戏

【问题描述】

以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

【基本要求】

1.首先用二维数组存储迷宫数据,迷宫数据由用户输入。

2.一个以链表作存储结构的栈类型,然后编写一个求解迷宫的递归或非递归程序。求得的通路以三元组(i,j,d)形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东、南、西、北四个方向所用代表数字,自行定义)。

3.可以用多种方法实现,但至少用两种方法,用三种以上可加分。

【实现提示】

1.计算机解迷宫问题通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

迷宫的入口点的下标为(1,1),出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫的任一位置,均可约定有东、南、西、北四个方向可通。

2.有一种简单走出迷宫的方法,把手放在右边的墙上开始前进,始终不要把手从墙上移开。如果迷宫向右拐,你也顺着墙向右拐。只要不把手从墙上移开,最终就会到达迷宫的出口。当然这样得到的路径可能不是一个最短的路径,但它可以最终得到结果,换句话说,这种方法走不出迷宫的风险是最小的。

7.作业评分系统

【问题描述】

设计一个可以给小学生出题并且可以给出分数的系统软件。

【基本要求】

利用栈求表达式的值,可供小学生作业,并能给出分数。

1)建立试题库文件,随机产生n个题目;

2)题目涉及加减乘除,带括弧的混合运算;

3)随时可以退出;

4)给出作业分数。

【进一步完成内容】

1)保留历史分数,能回顾历史,给出与历史分数比较后的评价。

2)界面设计的优化。

8.散列表的设计与实现

【问题描述】

设计散列表实现电话号码查找系统。

【基本要求】

1)设每个记录有下列数据项:电话号码、用户名、地址;

2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;

3)采用一定的方法解决冲突;

4)查找并显示给定电话号码的记录;

5)查找并显示给定用户名的记录。

【进一步完成内容】

1) 系统功能的完善;

2) 设计不同的散列函数,比较冲突率;

3) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。

9.停车场管理

【问题描述】

设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

【基本要求】

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行 *** 作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。

【测试数据】

设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),

(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(Arrival);‘D’表示(Departure);‘E’表示输入结束(End)。

【实现提示】

需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。

10.八皇后问题

【问题描述】

求出在一个n×n的棋盘上,放置n个不能互相捕捉的国际象棋“皇后”的所有布局。

这是来源于国际象棋的一个问题。皇后可以沿着纵横和两条斜线8个方向相互捕捉。如图所示,一个皇后放在棋盘的第4行第3列位置上,则棋盘上凡打“×”的位置上的皇后就能与这个皇后相互捕捉,也就是下一个皇后不能放的位置。

1 2 3 4 5 6 7 8

× ×

× × ×

× × ×

× × Q × × × × ×

× × ×

× × ×

× ×

× ×

从图中可以得到以下启示:一个合适的解应是在每列、每行上只有一个皇后,且一条斜线上也只有一个皇后。

【实现提示】

求解过程从空配置开始。在第1列至第m列为合理配置的基础上,再配置第m+1列,直至第n列配置也是合理时,就找到了一个解。接着改变第n列配置,希望获得下一个解。另外,在任一列上,可能有n种配置。开始时配置在第1行,以后改变时,顺次选择第2行、第3行、…、直到第n行。当第n行配置也找不到一个合理的配置时,就要回溯,去改变前一列的配置。

二、时间安排

2005~2006(一)第19周进行。

第一天: 分析题目,查阅资料;

第二天:算法设计、编码;

第三天:编码、调试运行;

第四天:调试运行,撰写设计报告;;

第五天:答辩。

三、设计工作要求

1.对学生的要求

(1) 要求学生认真阅读设计任务书,了解所做的设计内容及要求,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。

(2)学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。

(3)查阅相关的参考文献;独立完成设计任务。

(4)认真撰写课程设计说明书,要求文字通顺、有逻辑性、真正反映设计的水平,设计要有创新。

(5)设计完成后上交相关内容要求:

①上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)。

 ②课程设计说明书:到教务处网站下载课程设计报告纸及封面。格式及要求见附录。

2.对教师的要求

(1)做好设计题目的选题工作,使题目达到一定的综合性要求,工作量合理;

(2)加强指导,严格考勤、考核;

(3)做好答辩、设计报告的评审以及成绩评定工作。

附录:

课程设计说明书,格式及要求如下:

一、封面;

二、目录;

三、设计任务书;

四、说明书正文,主要内容包括:

1.设计题目;

2.设计目的;

3.算法思想分析;

4.算法描述与实现;

5.结论

我也想要啊,4号就考试了!555,只找到课后题的题目,没翻译,给你分享啦~~

第1章

Explain the five parts of an information system.

解释信息系统的5个部分。

What part do people play in this system?

做什么的一部分人在这个系统中扮演什么角色?

What is system software?

什么是系统软件?

What kinds of programs are included in system software?

什么类型的程序都包括在系统软件?

Define and compare basic and specialized application software.

定义和比较基本和专门应用软件。

Describe some different types of basic applications.

描述基本的应用有不同的类型。

Describe some types of specialized applications.

描述了某些类型的专门应用。

Describe the different types of computers.

描述了不同类型的计算机。

What is the most common type?

什么是最常见的类型?

What are the types of microcomputers?

微型计算机是什么类型的?

What is connectivity?

什么是连接?

How are the wireless revolution and connectivity related?

如何无线革命和连接相关? What is a computer network?

什么是计算机网络?

What are the Internet and the Web?

什么样的互联网和Web?

Chapter 2 第2章

Discuss the uses of the Internet.

讨论互联网的使用。

Which activities have you participated in?

哪些活动你参加了?

Which one do you think is the most popular?

哪一种你认为最流行?

Explain the differences between the three types of providers.

说明提供者之间的三种类型的差异。

What are the basic elements of an e-mail message?

什么是电子邮件消息的基本要素?

What are the types of discussion groups?

什么是小组讨论的类型?

Describe any groups you participate in.

请描述你参加任何团体英寸

Describe the different types of search engines.

描述的搜索引擎的不同类型。

Give an example of the type of search each engine is best for.

举一个类型的搜索引擎是每个最好的例子。

Chapter 3 第3章

Explain the difference between general-purpose and special-purpose applications.

解释一下,一般用途和特殊用途的应用差异。

What is the difference between a function and a formula?

是什么之间的函数和公式的区别?

How is a formula related to what-if analysis?

如何与假设分析公式?

What are presentation graphics programs?

什么是演示图形程序?

How are they used?

他们如何使用?

Explain the difference between a linked object and an embedded object?

解释之间的链接对象和嵌入的对象不同?

What are the advantages of OLE?

OLE的是什么优势?

What is the difference between an integrated package and a software suite?

什么是综合性的一揽子之间和套装软件的区别?

What are the advantages and disadvantages of each?

有哪些优点和缺点?

Chapter 4 第4章

Describe graphics, including desktop publishers, image editors, illustration programs, image galleries, and graphics suites.

描述图形,包括桌面出版,图像编辑,插图程序,图象画廊,和图形套房。

Discuss audio and video editing software.

讨论音频和视频编辑软件。

What is multimedia?

什么是多媒体?

How are multimedia presentations developed?

多媒体演示如何发展?

Describe Web authoring, including Web site design and Web authoring programs.

描述网站包括网站设计和网页制作软件创作。

Discuss three areas of artificial intelligence.

讨论三个人工智能领域。

Chapter 5 第5章

Describe system software.

描述系统软件。

What are the four types of system programs?

什么是系统程序的四种类型?

What are the basic functions of every operating system?

什么是每一个 *** 作系统的基本功能?

What are the three basic operating system categories?

什么是三个基本的 *** 作系统类别?

Explain the differences and similarities between Windows, Mac OS , and Linux.

解释之间的差异和在Windows,Mac *** 作系统相似,和Linux。

Discuss utilities.

讨论工具。

What are the five most essential utilities?

什么是五个最重要的事业吗?

What is a utility suite?

什么是实用工具套件?

Explain the role of device drivers.

解释设备驱动程序的作用。

Discuss the Add Printer Wizard and Windows Update.

讨论添加打印机向导和Windows Update。

Chapter 6 第6章

Describe the four basic types of system units.

描述系统的四个基本类型的单位。

Describe the two basic components of the CPU.

描述了两个CPU的基本组成部分。

What are the differences and similarities between the three types of memory?

有什么区别和记忆之间的三种类型相似的呢?

Identify five expansion cards and describe the function of each.

确定5个扩展卡和描述每个功能。

Identify and describe four standard ports and three specialized ports.

确定并描述四个标准端口和三个专门端口。

Chapter 7 第7章

Define input and output devices.

定义输入和输出设备。

Describe the different types of pointing, scanning, image capturing, and audio-input devices.

描述指向的不同类型,扫描,图像捕捉,音频输入设备。

Describe the three categories of output devices.

描述的输出设备三类。

Define output and output devices.

定义输出和输出设备。

What are combination input and output devices?

什么是组合的输入和输出设备?

Describe four such devices.

描述四个这样的设备。

Chapter 8 第8章

Discuss the traditional and high-capacity floppy disks.

论传统和高容量软盘。

What are the three types of hard disks?

什么是硬盘的三种类型?

Describe three ways to improve hard disk performance.

描述三种方法来提高硬盘性能。

What are the two most common optical disc formats?

什么是最常见的两种光盘格式?

What is hi def?

什么是高科技高清?

Describe the basic types for each format.

每种格式描述的基本类型。

Discuss solid-state storage, Internet hard drives, and magnetic tape.

讨论固态存储,网络硬盘和磁带。

What are the advantages and disadvantages of each?

有哪些优点和缺点?

Discuss mass storage, enterprise storage systems, and mass storage devices.

讨论海量存储,企业级存储系统,以及大容量存储设备。

Chapter 9 第9章

Define and discuss connectivity, the wireless revolution, and communications.

定义和讨论的连接,无线革命和通讯。

Identify and describe the various physical and wireless communication channels.

查明和说明各种物理和无线通信渠道。

Identify the standard Internet protocol and discuss its essential features.

确定标准的Internet协议,并讨论其基本特点。

Define and discuss the four principal network topologies.

定义并讨论四个主要的网络拓扑。

Define and discuss the three most common network strategies.

定义并讨论三种最常用的网络战略。

Chapter 10 第10章

Discuss the relationship between databases and privacy.

讨论数据库和隐私之间的关系。

Discuss the Code of Fair Information Act.

讨论展会信息法码。

Why has this Act not been made into law?

为什么还没有成为法律本法?

Discuss the various kinds of computer criminals.

讨论计算机的各种犯罪分子。

What are the principal measures used to protect computer security?哪些主要措施来保护计算机安全?

What is encryption?

什么是加密?

How is it used by corporations and individuals?

它是怎样由企业和个人使用?

What is ergonomics?

什么是人体工程学?

How does computer use impact mental health?

如何使用电脑的心理健康的影响?

Physical health?身体健康?

Chapter 11 第11章

Name and discuss the five common functions of most organizations.

名称和讨论最多的5个组织的共同职责。

Discuss the roles of the three kinds of management in a corporation.

讨论在公司的管理的三种角色。

What are the four most common computer-based information systems?

什么是四种最常见的电脑为基础的信息系统?

Describe the different reports and their roles in managerial decision making.

描述了不同的报告和管理决策中的作用。

What is the difference between an office automation system and a knowledge work system?

是什么之间的办公自动化系统和知识工作系统的区别?

chapter 12 第12章

Describe the five logical data groups or categories.

描述逻辑数据的五个群体或类别。

What is the difference between batch processing and real-time processing?

之间有什么批处理和实时处理的区别?

Identify and define the five parts of DBMS programs.

查明和确定项目的数据库管理系统的5个部分。

What are the five types of databases?

什么是数据库的5类?

Why does more than one kind of database exist?

为什么多个类型的数据库存在?

What are some of the benefits and limitations of databases?

有什么好处和数据库的一些限制?

Why is security a concern?

为什么是安全的关注?

Chapter 13 第13章

What is a system?

什么是系统?

What are the six phases of the systems life cycle?

什么是系统生命周期的六个阶段?

Why do corporations undergo this process?

为什么公司经过这一进程?

What are the tools used in the analysis phase?

什么是在分析阶段使用的工具?

What is top-down analysis?

什么是自上而下的分析?

How is it used?

它是如何使用?

Describe each type of system conversion.

描述每个系统的转换类型。

Which is the most commonly used?

这是最常用的?

What is system maintenance?

什么是系统维护?

When does it occur?

什么时候发生?

Explain prototyping and RAD.

解释原型和RAD。

When might they be used by corporations?

当他们可能会被利用公司呢?

Chapter 14 第14章

Identify and discuss each of the six steps of programming.确定并讨论节目的六个每个步骤。

Describe CASE tools and OOP.描述和面向对象的CASE工具。 How does CASE assist programmers?案例如何帮助程序员?

What is meant by “generation” in reference to programming languages?什么是“一代人在提到编程语言”? What is the difference between low-level and high-level languages?之间有什么低级和高级语言的区别?

What is the difference between a compiler and an interpreter?什么是编译器之间的差异和翻译? What role would these tools have in programming with natural languages?什么样的作用将这些工具与自然语言编程?

What are logic structures?什么是逻辑结构? Describe the differences between the three types.描述三种类型之间的差异。

Chapter 15 第15章

Why is strategy important to individual success in the information age?为什么战略的重要的信息时代的个人成功? What is your strategy?你的战略是什么?

Describe how technology changes the nature of competition.描述技术如何改变了竞争的性质。

How can your computer competencies and knowledge help you get ahead in today's market?如何才能在个人电脑的能力和知识,帮助您在今天的市场领先?

What does proactive mean?主动意味着什么? What is a proactive computer user?什么是积极的计算机用户? What advantages does this type of user have over the other types?哪些优点这种类型的用户具有比其他类型的?

Discuss several different careers in information technology.信息技术的讨论几种不同的职业。 Which are of interest to you?哪些是您感兴趣的?

据访问需要的完整解datamodule4.adoquery2.sql.add('SELECT借书证号,密码FROM[user]WHERE(借书证号=:tt)')

datamodule4.adoquery2.parameters[0].value:=username

datamodule4.adoquery2.open

在为TQuery或TADOquery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery或TADOquery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面,在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。

在这里要特别注意的,一般情况下TQuery或TADOquery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery或TADOquery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为SQL属性设置多条SQL语句。

在为TQuery或TADOquery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。

在设计过程中,设置完TQuery或TADOquery部件的SQL属性之后将其Active属性的值置为True,这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery或TADOquery部件相连的数据浏览部件(如TDDGridTDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。

在应用程序运行过程中,通过程序调用TQuery或TADOquery组件的Open方法或ExecSQL方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令),并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT,UPDATE,DELETE等命令),例如:

Query1.Open(这样会返回一个查询结果集)

如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL方法来代替Open方法。如:

Query1.ExecSQL(没有返回结果)

当然在设计应用程序时,程序设计人员是无法确定TQuery或TADOquery组件中的SQL语句是否会返回一个查询结果的。对于这种情况应当用Try…Except模块来设计程序。在Try部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。

例如:

Try

Query1.Open

Except

Query1.ExecSQL

End

通过Tquery或TADOquery组件可以获得两种类型的数据:

u“活动”的数据

这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中。

u非活动的数据(只读数据)

用户通过数据浏览部件是不能修改其中的数据。在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得“活动”的数据,在应用程序中必须要设置Tquery或TADOquery组件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得“活动”的数据的,要想获得“活动”的数据,除了将TQuery部件的RequestLive属性设置为True外,相应的SQL命令还要满足以下条件。

本地SQL语句查询情况下,要得到可更新的数据集,SQL语句的限制为:

n查询只能涉及到一个单独的表

nSQL语句中不能包含ORDERBY命令

nSQL语句中不能含聚集运算符SUM或AVG

n在Select后的字段列表中不能有计算字段

n在Select语句WHERE部分只能包含字段值与常量的比较运算,这些比较运算符是:Like,>,<,>=,<=。各比较运算之间可以有并和交运算:AND和OR

当通过SQL语句查询数据库服务器中的数据库表:

n查询只能涉及到一个单独的表

nSQL语句中不能包含ORDERBY命令

nSQL语句中不能含聚集运算符SUM或AVG运算

另外,如果是查询Sybase数据库中的表,那么被查询的表中只能有一个索引。

如果在应用程序中要求TQuery或TADOquery组件返回一个“活动”的查询结果数据集,但是SQL命令语句不满足上述约束条件时,对于本地数据库的SQL查询,BDE只能返回只读的数据集。对于数据库服务器中的SQL查询,只能返回错误的代码。当Tquery或TADOquery组件返回一个“活动”的查询结果数据集时,它的CanModIfy属性的值会被设置成True。

§3.4MSSQLServer简述

SQLServer是一个后台数据库管理系统,它功能强大 *** 作简便,日益为广大数据库用户所喜爱。越来越多的开发工具提供了与SQLServer的接口。SQLServer是一个关系数据库管理系统,它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的。于1988年推出了第一个OS/2版本,在WindowsNT推出后,Microsoft与Sybase在SQLServer的开发上就分道扬镳了,Microsoft将SQLServer移植到WindowsNT系统上,专注于开发推广SQLServer的WindowsNT版本。

SQLServer2000是Microsoft公司推出的SQLServer数据库管理系统的最新版本,该版本继承了SQLServer7.0版本的优点,同时又比它增加了许多更先进的功能、具有使用方便、可伸缩性好与相关软件集成程度高等优点。可跨越从运行MicrosoftWindows98的膝上型电脑到运行MicrosoftWindows2000的大型多处理器的服务器等多种平台使用。MSSQLServer不但可以应用于大中型数据库管理中,建立分布式关系数据库,并且也可以开发桌面数据库。事实上,SQLServer数据库处理的基本结构,采取关系型数据库模式,尽管如此,相信大家都可以轻易的发现,在SQLServer的数据库处理方式,则是使用面向对象的 *** 作方式与精神,也就是说,SQLServer的所有功能,都可以基于系统已经建立好的一些对象来达成,是相当OO(面向对象)的一个系统结构。

SQLServer企业管理器是SQLServer的主要管理工具,它提供了一个遵从MMC标准的用户界面,使用户得以:

·定义SQLServer实例组。

·将个别服务器注册到组中。

·为每个已注册的服务器配置所有SQLServer选项。

·在每个已注册的服务器中创建并管理所有SQLServer数据库、对象、登录、用户和权限。

·在每个已注册的服务器上定义并执行所有SQLServer管理任务。

·通过唤醒调用SQL查询分析器,交互地设计并测试SQL语句、批处理和脚本。

·唤醒调用为SQLServer定义的各种向导。

·

第三章图书管理系统设计分析

§4.1应用需求分析

图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行 *** 作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人员、图书借阅者、图书进行管理和维护,及系统状态的查看、维护并生成催还图书报表。

图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。一般情况下,图书借阅者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他借阅者的借书情况和个人信息,就要知道其他图书借阅者的借书证号和密码。这些是很难得到的,特别是密码,所以不但满足了图书借阅者的要求,还保护了图书借阅者的个人隐私。

图书馆工作人员有修改图书借阅者借书和还书记录的权限,所以需对工作人员登陆本模块进行更多的考虑。在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录,并打印生成相应的报表给用户查看和确认。

图书馆管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对图书信息、借阅者信息、总体借阅情况信息的管理和统计、工作人员和管理人员信息查看及维护。图书馆管理员可以浏览、查询、添加、删除、修改、统计图书的基本信息;浏览、查询、统计、添加、删除和修改图书借阅者的基本信息,浏览、查询、统计图书馆的借阅信息,但不能添加、删除和修改借阅信息,这部分功能应该由图书馆工作人员执行,但是,删除某条图书借阅者基本信息记录时,应实现对该图书借阅者借阅记录的级联删除。并且还应具有生成催还图书报表,并打印输出的功能。

在本系统中由于没有打印机设备供试验,所以预先把报表打印改成报表预览。

设计不同用户的 *** 作权限和登陆方法

对所有用户开放的图书查询

借阅者维护借阅者个人部分信息

借阅者查看个人借阅情况信息

维护借阅者个人密码

根据借阅情况对数据库进行 *** 作并生成报表

根据还书情况对数据库进行 *** 作并生成报表

查询及统计各种信息

维护图书信息

维护工作人员和管理员信息

维护借阅者信息

处理信息的完整性

对借阅过期的图书生成报表

图4-2图书管理系统数据库应用需求的总结

根据以上所做的需求分析,并略掉一些细节(如不考虑用户的登录;对记录的维护),得出以下的三层数据流图。

§4.2系统功能模块划分

系统功能框图如图4-10所示。

§4.3系统数据库设计

4.3.1概念设计

在概念设计阶段中,设计人员从用户的角度看待数据及处理要求和约束,产生一个反映用户观点的概念模式。然后再把概念模式转换成逻辑模式。将概念设计从设计过程中独立开来,使各阶段的任务相对单一化,设计复杂程度大大降低,不受特定DBMS的限制。

利用ER方法进行数据库的概念设计,可分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局模式,最后对全局ER模式进行优化,得到最终的模式,即概念模式。

(1)设计局部ER模式

实体和属性的定义:

图书(图书编号,图书名称,作者,出版社,出版日期,备注,价格,数量,)

借阅者(借书证号,姓名,性别,身份z,联系电话,密码)

身份(身份编号,身份描述,最大借阅数)

图书类别(图书类别编号,类别描述)

ER模型的“联系”用于刻画实体之间的关联。一种完整的方式是对局部结构中任意两个实体类型,依据需求分析的结果,考察局部结构中任意两个实体类型之间是否存在联系。若有联系,进一步确定是1:N,M:N,还是1:1等。还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等。联系定义如图4-5所示。解释如下:

u一个借阅者(用户)只能具有一种身份,而一种身份可被多个借阅者所具有;

u一本图书只能属于一种图书类别(类别),而一种图书类别可以包含多本图书;

u一个用户可以借阅多本不同的书,而一本书也可以被多个不同的用户所借阅。

(2)设计全局ER模式

所有局部ER模式都设计好了后,接下来就是把它们综合成单一的全局概念结构。全局概念结构不仅要支持所有局部ER模式,而且必须合理地表示一个完整、一致的数据库概念结构。

1)确定公共实体类型

为了给多个局部ER模式的合并提供开始合并的基础,首先要确定各局部结构中的公共实体类型。在这一步中我们仅根据实体类型名和键来认定公共实体类型。一般把同名实体类型作为公共实体类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一类候眩

2)局部ER模式的合并

合并的原则是:首先进行两两合并;先和合并那些现实世界中有联系的局部结构;合并从公共实体类型开始,最后再加入独立的局部结构。

3)消除冲突

冲突分为三类:属性冲突、结构冲突、命名冲突。

设计全局ER模式的目的不在于把若干局部ER模式形式上合并为一个ER模式,而在于消除冲突,使之成为能够被所有用户共同理解和接受的同一的概念模型。

3)全局ER模式的优化

在得到全局ER模式后,为了提高数据库系统的效率,还应进一步依据处理需求对ER模式进行优化。一个好的全局ER模式,除能准确、全面地反映用户功能需求外,还应满足下列条件:实体类型的个数要尽可能的少;实体类型所含属性个数尽可能少;实体类型间联系无冗余。

综上所述,“图书管理系统”的全局ER模式如图4-13所示。

4.3.2关系数据库的逻辑设计

由于概念设计的结果是ER图,DBMS一般采用关系型(本人所使用的MSSQLServer就是关系型的DBMS),因此数据库的逻辑设计过程就是把ER图转化为关系模式的过程。由于关系模型所具有的优点,逻辑设计可以充分运用关系数据库规范化理论,使设计过程形式化地进行。设计结果是一组关系模式的定义。

(1)导出初始关系模式

book(图书编号#,图书名称,图书类别#,作者,出版社,出版日期,备注,价格,数量)class(图书类别#,类别名)user(借书证号#,姓名,性别,身份编号#,身份z,联系电话,密码)ID(身份编号#,身份描述,最大借阅数)Owner(借书证号#,图书编号#,借书日期)

图4-14关系模式集

(2)产生子模式

子模式是用户所用到的那部分数据的描述。除了指出用户用到的数据外,还应指出数据与概念模式中相应数据的联系,即指出概念模式与子模式之间的对应性。

借书子模式(借书证号#,姓名,图书编号#,图书名称,借书日期)

图4-15部分子模式

(3)根据设计中出现的问题本人在写系统时还加入了两个关系模式:

1、ownertemp:用于工作人员在处理借书、还书工作时临时存储借书、还书信息,以便打印报表时使用。

2、keyer:用于存储工作人员和图书馆管理员的用户名和密码及权限,以便工作人员或图书馆管理员进入相应的功能模块时进行验证用户的身份。

4.3.3数据库的实现

我选用MicrosoftSQLServer2000(企业版)数据库来进行数据库的逻辑设计。首先创建七个基本数据库表如表4-1-4-7所示,然后根据全局ER图,建立各个表之间的联系,如图4-8所示。

表4-1借阅者基本信息表的结构(User)

表4-2图书信息表的结构(Book)

表4-3图书类别信息表的结构(Class)

表4-4借阅者身份信息表的结构(ID)

表4-5借阅情况信息表的结构(Owner)

表4-6借阅情况临时存储信息表的结构(Ownertemp)

注:在owner表和ownertemp表中加入了索引字段,用来唯一标识一条借书记录,并且设置为标识,标识种子为1。

表4-7工作人员和管理员信息表的结构(Keyer)

图4-8数据库表间联系图

第五章图书管理系统应用程序设计

§5.1系统窗体模块组成

§5.2数据模块窗体的设置

在编写数据库应用程序时,经常要遇到这样的情况,即好多组件、窗体同时访问相同的数据源,如果为每一个组件或者窗体都设置一个数据源将是十分耗时的工件,而且要保证这些数据源的确是相同的也需花一番功夫。那么,能不能将这些数据源集中管理,最好是做成一个统一的模块,需要时就将该模块引入而不必直接 *** 作数据源本身呢?数据模块(DataModule)是解决这个问题最好的答案。简单说来,数据模块是用来集中管理数据源的一个窗体,该窗体可被需要的地方随时引入。

但本人在开发这个系统时,开始使用了一下数据模块,但在使用过程中却碰到了一些问题。并且考虑这个系统使用到的TADOQuery控件比较多,如果使用数据控件可能会带来管理上的麻烦,如弄混各个数据控件的作用。还考虑到使用动态生成ADOQuery可能会更节省资源。所以在本人的系统中,开始做的第一个模块“借阅者个人模块”中还稍微使用了一下数据模块。但在后面做的两个模块中大多都是用动态生成ADOQuery来实现的。并且由于SQL语句是动态加入的所以datamodule中的控件也不会多。

§5.3启动画面的实现

启动画面是为了给用户一个良好的印像,加深软件的亲和力,没有实际的功能,在Form1窗体中加入了Image和Time组件。启动画面的窗体略,主要的源代码如下:

§5.4用户登录窗体的的实现

本窗体是为三种不同的用户(一般用户,工作人员,管理员)提供选择以进入不同的模块,满足不同用户的需求。源代码比较简单,略。

§5.5用户密码认证窗体的的实现

本窗体是为了让工作人员或图书馆管理员按照用户名和密码进行登录,并且跟据用户名检查Keyer表中的“权限”字段,以分辩进入图书馆管理人员模块还是进入工作人员模块。窗体界面、源代码如下

§5.6借阅者服务模块的实现

借阅者服务窗体的功能主要是图书的查询,个人借阅情况查看及个人部分信息的修改。界面图如下:

5.6.1图书查询功能的实现

在本系统中,任何人都有权限使用查询功能,不做任何限制。界面如下,

由于实现的查询功能有多种,如按图书编号、图书名称等字段进行完全体配查找和部分体配的模糊查找,还有按多个条件进行逻辑与或是逻辑或的多条件查找。其中实现的方法者差不多,所以只给出多条件查找的代码,如下:

5.6.2借阅者登录功能的实现

这个功能的实现与工作人员和管理人员登录功能实现的方法大致一样,并且还要简单。是从User表中查到到借阅证号与密码,看与用户输入的是否一致。如果一致,那么用户就可查看自已的借阅情况并维护自己的部分信息。源代码与借阅者登录界面都略。

5.6.3借阅者借阅情况功能的实现

当借阅者正确登录到系统后,此功能将被激活,使用户能查看到自身的借阅情况。在此系统中,信息的显示一般用ListView来实现,只在较少的情况下用到了DBgrid,因为我觉得ListView更好实现,并能使信息数据对用户的完全分离。

在这里跟据借阅者的不同要求实现借阅情况的查询,有检查所有的借阅情部、某本书的借阅情况、和根据已借阅天数的来查询。其中根椐借阅天数来查询更有代表性,有方式一和方式二。以下给出此功能的源代码

按借阅天数查询方式一

按借阅天数查询方式二

5.6.4借阅者个人资料维护功能的实现

此功能实现当前借阅者部份资料的修改,但借书证号和身份类别这样的信息不允许修改,这是图书馆管理员模块的功能。在此界面中点击修改按钮将出现“修改”窗体(Form8),点击修改密码按钮将出现groupbox8,在这里进行密码修改。关键源代码如下。

这里给出个人部分信息修改的源代码:

这里给出密码修改的源代码:

5.7工作人员-图书借阅/归还模块的实现

5.7.1工作人员进行图书借阅功能实现

在这个功能中,工作人员输入借阅者的借阅证号和所要借阅的图书的图书编号,然后点击借阅按钮就可进行图书借阅。考虑到实际中可能会出现只知图书名而不知图书编号的情况,在此界面下方加入了一个转换功能,可以把图书名称转换成图书编号,再进行图书借阅。

在借阅完成后会生借阅报表以便借阅者检查和确认,借阅报表的打印效果如下图,实现比较简单,略去实现过程。

5.7.2工作人员进行图书归还功能实现

在此功能中,工作人员根据借阅者的借书证号和归还的图书编号进行图书的归还工作。并且根据现实中可能会出现的只知图书名不知图书编号的归还情况,所以加入了按书籍名称进行归还的功能。这个功能是图书借阅功能中把图书名称转换成图书编号的一种改进方法,这样就不用如借阅功能中一样要先转换再借阅了。归还完成后,同样会打印出归还报表以便用户检查和确认。

5.8图书馆管理员模块的实现

5.8.1图书馆管理员图书管理功能的实现

在这个功能中可以在(*图书编号)中输入图书编号,点查找按钮后就会在各个相应的组件中显示出信息,或按图书名称模糊查找到所要的记录,在各个相应的组件中显示第一条记录的信息,也可在下端的ListView组件中点击某一条记录,在各个相应的组件中也会显示所选记录的信息。在入库功能中只要不是相同的图书编号并且带*号提示的字段不为空就可插入新的图书记录。删除则删除那些Book表中的图书记录,如果借出还可依用户要求连带删除owner表中的记录。因为图书修改与图书入库的功能与工作人员记录修改和工作人员记录添加的实现过程一样,所以下面仅给出删除功能的源代码,如下

5.8.2图书馆管理员工作人员和管理员管理功能的实现

在此功能中可以加入工作人员或是管理员,或是修改他们的密码、权限。

在此功能中如果选中ListView中的记录,则在右边相应的组件中显示出信息,并且管理员还可对这些记录进行修改或加入新的记录。并且也可以点删除按钮删除选中的一条或多条记录。删除功能与图书记录的删除一般,所以下面只给出添加与修改的实现过程。

5.8.3图书馆管理员修改图书类别及统记功能的实现

在此窗体中能对图书的类别进行删除,添加和修改,这模块的功能的实现过程与图书记录的删除,添加和修改一样的,但是这个窗体还能跟据图书类别进行统计,还可根据Book表和owner表统计出图书总数目,库存图书数目,借出图书数目及借阅过期的图书数目。在这里给出统计图书总数目,库存图书数目,借出图书数目及借阅过期的图书数目的实现过程中的几个函数和过程

5.8.4图书馆管理员借阅者管理功能的实现

查询借阅者可根据借阅者的借书证号或姓名或身份编号查找到借阅者的信息,也可以实行模糊查找,这个功能的实现与前面图书查找的实现过程一般,就不再详细说明。

5.8.5图书馆维护借阅者管理功能的实现

此功能能对借阅者信息进行查看添加、删除、修改。在这里给出刷新按钮的实现过程

5.8.6图书馆身份维护功能的实现

这一部分是对借阅者身份进行管理,能对身份进行添加、删除、修改。并且同样的在listview中选中某条或多条记录时会在相应的右边的组件中显示出信息。此功能实现过程与前面所叙有雷同,略。

5.8.7图书馆借阅者统计功能的实现

此功能按借阅者身份进行统计,得出具有某种身份的借阅者总数,此种身份的并借阅图书的借阅者数和所借阅的图书数,在下面给出实现过程。

5.8.8图书馆统计借阅过期记录功能的实现

打印出的借阅过期催还报表如下图所示:

此报表能显示按借书证号升序排列的借阅信息超过限定时限的信息,其中主要的SQL语句如下:

5.9系统信息显示的实现

显过本系统的信息,并且右边的字向上滚动显示,主要实现如下:

另外,虚机团上产品团购,超级便宜


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9255740.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存