大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
或者看看这个,可是你需要的
创新互联是专业的老河口网站建设公司,老河口接单;提供成都网站设计、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行老河口网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
《操作系统--银行家算法》
课程设计报告
1 课程设计目的 …………………………………………………… 1
2 课程设计的要求 ………………………………………………… 1
3 课程设计题目描述 ……………………………………………… 2
4 课程设计之银行家算法原理 …………………………………… 2
5 源程序结构分析及代码实现 …………………………………… 4
6 课程设计总结 …………………………………………………… 25
一、课程设计的目的
操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。《操作系统课程设计》是《操作系统》理论课的必要补充,是复习和检验所学课程的重要手段,本课程设计的目的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。
二、课程设计的要求
1.分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。
2.画出程序的基本结构框图和流程图。
3.对程序的每一部分要有详细的设计分析说明。
4.源代码格式要规范。
5.设计合适的测试用例,对得到的运行结果要有分析。
6.设计中遇到的问题,设计的心得体会。
7.按期提交完整的程序代码、可执行程序和课程设计报告。
三、课程设计题目描述
银行家算法是一种最有代表性的避免死锁的算法。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
那么什么是安全序列呢?
安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j i )当前占有资源量之和。
银行家算法:
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
四、课程设计之银行家算法原理
1.银行家算法的思路
先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。
2.银行家算法中用到的主要数据结构
可利用资源向量 int Available[j] j为资源的种类。
最大需求矩阵 int Max[i][j] i为进程的数量。
分配矩阵 int Allocation[i][j]
需求矩阵 int need[i][j]= Max[i][j]- Allocation[i][j]
申请各类资源数量 int Request i[j] i进程申请j资源的数量
工作向量 int Work[x] int Finish[y]
3.银行家算法bank()
进程i发出请求申请k个j资源,Request i[j]=k
(1)检查申请量是否不大于需求量:Request i[j]=need[i,j],若条件不符重新输入,不允许申请大于需求量。
(2)检查申请量是否小于系统中的可利用资源数量:Request i[j]=available[i,j],若条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。
(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[i,j]= Available[i,j]- Request i[j];
Allocation[i][j]= Allocation[i][j]+ Request i[j];
need[i][j]= need[i][j]- Request i[j];
(4)试分配后,执行安全性检查,调用safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5)用do{…}while 循环语句实现输入字符y/n判断是否继续进行资源申请。
4.安全性检查算法(safe()函数)
(1)设置两个向量:
工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。
Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=0;当有足够的资源分配给进程时,再令Finish[i]=1。
(2)在进程中查找符合以下条件的进程:
条件1:Finish[i]=0;
条件2:need[i][j]=Work[j]
若找到,则执行步骤(3)否则,执行步骤(4)
(3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[j]= Work[j]+ Allocation[i][j];
Finish[i]=1;
goto step 2;
(4)如果所有的Finish[i]=1都满足,则表示系统处于安全状态,否则,处于不安全状态。
五、源程序结构分析及代码实现
1.程序结构
程序共有以下五个部分:
(1).初始化chushihua():用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。
(2).当前安全性检查safe():用于判断当前状态安全性,根据不同地方的调用提示处理不同。
(3).银行家算法bank():进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程。
(4).显示当前状态show():显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量。
(5).主程序main()
逐个调用初始化、显示状态、安全性检查、银行家算法函数,使程序有序的进行。
2.数据结构
程序使用的全局变量:
const int x=10,y=10; //定义常量
int Available[x]; //各种资源可利用的数量
int Allocation[y][y]; //各进程当前已分配的资源数量
int Max[y][y]; //各进程对各类资源的最大需求数
int Need[y][y]; //还需求矩阵
int Request[x]; //申请各类资源的数量
int Work[x]; //工作向量,表系统可提供给进程运行所需各类资源数量
int Finish[y]; //表系统是否有足够的资源分配给进程,0为否,1为是
int p[y]; //存储安全序列
int i,j; //全局变量,主要用于循环语句中
int n,m; //n为进程的数量,m为资源种类数
int l=0,counter=0;
3.函数声明
void chushihua(); //系统初始化函数
void safe(); //安全性算法函数
void bank(); //银行家算法函数
void show (); //输出当前资源分配情况
4.主函数main()
int main()
{
cout…… //显示程序开始提示信息
chushihua(); //初始化函数调用
coutendlendl;
showdata(); //输出初始化后的状态
//===判断当前状态的安全性===
safe(); //安全性算法函数调用
if (ln){
cout"\n当前状态不安全,无法申请,程序退出!!!!!"endl;
coutendl;
system("pause");
sign(); //调用签名函数
return 0; // break;
}
else{
int i; //局部变量
l=0;
cout"\n安全的状态!!!"endl;
cout"安全序列为: ";
coutendl"进程""("p[0]")"; //输出安全序列,考虑显示格式,先输出第一个
for (i=1; in; i++){
cout"==""进程""("p[i]")";
}
for (i=0; in; i++) Finish[i]=0; //所有进程置为未分配状态
coutendlendl;
}
bank(); //银行家算法函数调用
return 0;
}
5. 操作系统银行家算法流程图:
2.源程序代码:
#include iostream.h
#include stdio.h
#include stdlib.h
#include string.h
//定义全局变量
const int x=10,y=10; //常量,便于修改
int Available[x]; //各资源可利用的数量
int Allocation[y][y]; //各进程当前已分配的资源数量
int Max[y][y]; //各进程对各类资源的最大需求数
int Need[y][y]; //尚需多少资源
int Request[x]; //申请多少资源
int Work[x]; //工作向量,表示系统可提供给进程继续运行所需的各类资源数量
int Finish[y]; //表示系统是否有足够的资源分配给进程,1为是
int p[y]; //存储安全序列
int i,j; //i表示进程,j表示资源
int n,m; //n为进程i的数量,m为资源j种类数
int l=0; //l用来记录有几个进程是Finish[i]=1的,当l=n是说明系统状态是安全的
int counter=0;
//函数声明
void chushihua(); //初始化函数
void safe(); //安全性算法
void show(); //函数show,输出当前状态
void bank(); //银行家算法
void jieshu(); //结束函数
void chushihua()
{
cout"输入进程的数量: ";//从此开始输入有关数据
cinn;
cout"输入资源种类数: ";
cinm;
coutendl"输入各种资源当前可用的数量( "m" 种): "endl;
for (j=0; jm; j++)
{
cout"输入资源 "j" 可利用的数量Available["j"]: ";
cinAvailable[j]; //输入数字的过程...
Work[j]=Available[j]; //初始化Work[j],它的初始值就是当前可用的资源数
}
coutendl"输入各进程当前已分配的资源数量Allocation["n"]["m"]: "endl;
for (i=0; in; i++)
{
for (j=0; jm; j++)
{
cout" 输入进程 "i" 当前已分配的资源 "j" 数量: ";
cinAllocation[i][j];
}
coutendl;
Finish[i]=0;//初始化Finish[i]
}
coutendl"输入各进程对各类资源的最大需求Max["n"]["m"]: "endl;
for (i=0; in; i++)
{
for (j=0; jm; j++)
{
cout" 输入进程 "i" 对资源 "j" 的最大需求数: ";
cinMax[i][j];
if(Max[i][j]=Allocation[i][j]) //若最大需求大于已分配,则计算需求量
Need[i][j] = Max[i][j]-Allocation[i][j];
else
Need[i][j]=0;//Max小于已分配的时候,此类资源已足够不需再申请
}
coutendl;
}
coutendl"初始化完成"endl;
}
//安全性算法函数
void safe()
{
l=0;
for (i=0; in;i++)
{ //i++
if (Finish[i]==0)
{ //逐个查找Finish[i]==0的进程 条件一
counter=0; //记数器
for (j=0; jm; j++)
{
if (Work[j]=Need[i][j]) counter=counter+1;//可用大于需求,记数
}
if(counter==m) //i进程的每类资源都符合Work[j]=Need[i][j] 条件二
{
p[l]=i; //存储安全序列
Finish[i]=1; //i进程标志为可分配
for (j=0; jm;j++)
Work[j]=Work[j]+Allocation[i][j]; //释放资源
l=l+1; //记数,现在有L个进程是安全的,当L=N时说明满足安全序列
i= -1; //从第一个进程开始继续寻找满足条件一二的进程
}
}
}
}
//显示当前状态函数
void show() //函数show,输出当前资源分配情况
{
int i,j; //局部变量
int All[y]; //各种资源的总数量
int L1; //局部变量L1
cout"当前的状态为:"endl;
cout"各种资源的总数量:"endl;
for (j=0;jm;j++)
{
cout" 资源"j": ";
All[j]=Available[j]; //总数量=可用的+已分配的
for (i=0;in;i++) All[j]+=Allocation[i][j];
coutAll[j]" ";
}
coutendl"当前各种资源可用的量为(available):"endl;
for (j=0;jm;j++)
cout" 资源"j": "Available[j]" ";
coutendl"各进程已经得到的资源量(allocation): "endl;
for(i=0;i=m;i++)
{
for (j=i;jm;j++) cout" 资源"j;
coutendl;
for(L1=0;L1n;L1++)
{
cout"进程"L1":";
for (j=i;jm;j++) coutAllocation[L1][j]" ";
coutendl;
}
}
coutendl"各进程还需要的资源量(need):"endl;
for(i=0;i=m;i++)
{
for (j=i;jm;j++) cout" 资源"j;
coutendl;
for(L1=0;L1n;L1++)
{
cout"进程"L1":";
for (j=i;jm;j++) coutNeed[L1][j]" ";
coutendl;
}
}
}
//银行家算法函数
void bank()
{
coutendl"进程申请分配资源:"endl;
int k=0; //用于输入进程编号
bool r=false; // 初值为假,输入Y继续申请则置为真
do{//输入请求
cout"输入申请资源的进程(0-"n-1"): ";
cink;
coutendl;
while(kn-1) //输入错误处理
{
coutendl"输入错误,重新输入:"endl;
coutendl"输入申请资源的进程(0--"n-1"): ";
cink;
coutendl;
}
coutendl"输入该进程申请各类资源的数量: "endl;
for (j=0; jm; j++)
{
do{ //do……while 循环判断申请输入的情况
cout"进程 "k" 申请资源["j"]的数量:";
cinRequest[j];
coutendl;
if(Request[j]Need[k][j]){ //申请大于需求量时出错,提示重新输入(贷款数目不允许超过需求数目)
cout"申请大于需要量!"endl;
cout"申请的资源"j"的数量为"Request[j]",大于进程"k"对该资源需求量"Need[k][j]"。"endl;
cout"重新输入!"endl;
}
else //先判断是否申请大于需求量,再判断是否申请大于可利用量
if(Request[j]Available[j]){ //申请大于可利用量, 应该阻塞等待?…… ???
cout"\n没有那么多资源,目前可利用资源"j"数量为"Available[j]",本次申请不成功,进程等待!"endl;
Finish[k]=0; //该进程等待
goto ppp; //goto语句 跳转,结束本次申请
}
}while(Request[j]Need[k][j]); //Request[j]Available[j]||
}
//改变Avilable、Allocation、Need的值
for (j=0; jm; j++) {
Available[j] = Available[j]-Request[j];
Allocation[k][j] = Allocation[k][j]+Request[j];
Need[k][j] = Need[k][j]-Request[j];
Work[j] = Available[j];
}
//判断当前状态的安全性
safe(); //调用安全性算法函数
if (ln)
{
l=0;
cout"\n试分配后,状态不安全,所以不予分配!恢复原状态"endl;
//恢复数据
for (j=0; jm; j++)
{
Available[j] = Available[j]+Request[j];
Allocation[k][j] = Allocation[k][j]-Request[j];
Need[k][j] = Need[k][j]+Request[j];
Work[j] = Available[j];
}
for (i=0; in; i++)
Finish[i]=0; //进程置为未分配状态
}
else
{
l=0;
cout"\n申请资源成功!!!"endl;
for(j=0;jm;j++)
{
if(Need[k][j]==0);
else { //有一种资源还没全部申请到,则该进程不可执行,不能释放拥有的资源
l=1; //置l为1,作为判断标志
break;
}
}
if(l!=1){ //进程可以执行,则释放该进程的所有资源
for (j=0;jm;j++){
Available[j]=Available[j]+Allocation[k][j];
Allocation[k][j]=0;
}
cout"该进程已得到所有需求资源,执行后将释放其所有拥有资源!"endl;
}
l=0; //归零
cout"\n安全的状态!"endl;
cout"安全序列为: ";
coutendl"进程""("p[0]")"; //输出安全序列,考虑显示格式,先输出第一个
Finish[0]=0;
for (i=1; in; i++){
cout"==""进程""("p[i]")";
Finish[i]=0; //所有进程置为未分配状态
}
coutendlendl;
}
show(); //显示当前状态
ppp: //申请大于可利用量, 应该阻塞等待,结束本次资源申请,GOTO 语句跳转至此
coutendl"是否继续申请资源(y/n) ?";
char* b=new char; //输入y/n,判断是否继续申请 endl
cinb;
coutendl;
cout"-------------------------------------------"endlendl;
coutendl;
if(*b=='y'||*b=='Y')
r=true;
else{
r=false; //输入非 Y 则令 R =false
jieshu(); //调用结束函数
}
} while (r==true);
}
//结束函数
void jieshu()
{
coutendlendl;
cout"\t\t 演示计算完毕"endl;
coutendlendl;
}
//主函数
int main()
{
coutendlendl"\t\t\t\t模拟银行家算法"endlendl;
chushihua(); //初始化函数调用
coutendl;
show(); //输出当前状态
safe(); //判断当前状态的安全性
if (ln) //l在safe中是用来记录安全的进程的个数的
{
cout"\n当前状态不安全,拒绝申请!"endl;
coutendl;
return 0;
}
else
{
int i; //局部变量
l=0;
coutendl"\n当前的状态是安全的!安全序列为:"endl;
cout"进程""("p[0]")"; //输出安全序列
for (i=1; in; i++) cout"-""进程""("p[i]")";
for (i=0; in; i++) Finish[i]=0; //所有进程置为未分配状态
coutendl;
}
bank(); //调用银行家算法函数
cout"\t\t 演示计算完毕"endl;
return 0;
}
运行结果:
1.初始化结果
2.检测系统资源分配是否安全结果:
六、课程设计的总结
操作系统的基本特征是并发与共享。系统允许多个进程并发执行,并且共享系统的软、硬件资源。为了最大限度的利用计算机系统的资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足,分配不当而引起“死锁”。而我本次课程设计就是得用银行家算法来避免“死锁”。银行家算法就是一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。
本次程序就是按照上面的思路展开的。但是因为时间上的仓促,本课程设计的存在着以下不足:一、不能实现并发操作,即当总资源同时满足几个进程所需要的资源数时,这些进程不能同时进行,只能一一按进程顺序执行。二、扫描进程顺序单一,只能按进程到来的顺序(即编号)来扫描,从而产生的安全顺序只能是在这个顺序的基础上产生的,而其实安全顺序是有多个的。三、对进程数和资源数进行的数量进行了限制,都只能最多有十个。四、运行程序后,界面较差,进程数,所需要资源数,已分配资源数,能用资源数,不能一目了然。
这次课程设计时间上虽说仓促点,但是我依然学到了很多的实用性知识。除了更深的了解这个算法,而且对C语言进行了复习,而且其过程中有很多的知识点都不记得了,所以在此感谢在此过程中帮助过我的老师和同学。
最后的感悟就是:只要你亲自动手,你就能学到知识。
再次感谢帮助过我的老师和同学!
《数据库原理及应用》课程设计
数据库原理课程设计任务书
一、目的
1. 掌握计算机管理信息系统设计的一般方法,主要包括系统分析、系统设计的组织和实施。
2. 关系型数据库管理系统的编程技术,并能独立完成一般小系统的程序设计、调试运行等工作。
3. 培养把所学知识运用到具体对象,并能求出解决方案的能力。
二、任务(任选其一)
A.运用关系型数据库管理系统,实现本院图书馆管理信息系统。具体要求如下:
—图书、资料的登记、注销和查询。
—借书证管理,包括申请、注销借书证,查询借书证持有人等。
—借还图书、资料的登记、超期处理,超期拒借等。
—图书、资料查询,借、还图书和资料情况查询。
—图书、资料借阅情况的统计分析,拒此作为图书馆图书、资料订够的依据之一。(本项不作为基本要求)
B. 运用关系型数据库管理系统,实现服务电话管理系统
向客户现场派技术人员的服务公司可以用服务电话管理系统跟踪客户、员工、工作订单、发票、付款等等。
要求:
数据库要存储以下信息:
—客户信息
—客户工需单信息
—完成工需单所需人工
—完成工需单所需部件
—部件信息
—付款信息
—雇员信息
完成的功能:
—输入/查看 客户工需单信息
—输入/查看部件、雇员等其它信息
—付款
—打印发票等
三、结果形式
1. 设计报告:含E-R图、数据字典、关系模式、关系实例、查询描述、关系代数、SQL实现的查询语言及查询结果。
2. 上机实现。
四、考核
1. 课程设计态度(20分)。
2. 递交的书面材料(40分)。
3. 上机运行情况(40分)
目录
1.问题描述 2
1.1背景 2
1.2数据需求 2
1.3事物需求 3
1.4关系模式 3
2.方案图表设计 3
2.1 E-R图 3
2.2数据流程图 8
2.3数据字典 9
2.4关系图: 11
3.数据库源代码 12
3.1数据库建立 12
3.2数据初始化 14
4.结果数据处理 17
4.1单表查询 17
4.2超期处理 19
4.3还书操作 20
4.4借书操作 22
4.5书籍状态 24
4.6读者状态 24
5.结束语 26
5.1课程设计心得 26
1.问题描述
1.1背景
随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。
另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。
提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。
1.2数据需求
图书馆管理信息系统需要完成功能主要有:
1. 读者基本信息的输入,包括借书证编号、读者姓名、读者性别。
2.读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。
3.书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。
4.书籍类别信息的查询、修改,包括类别编号、类别名称。
5.书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。
6.书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期登记日期等。
7.借书信息的输入,包括读者借书证编号、书籍编号、借书日期。
8.借书信息的查询、修改,包括借书证编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期等。
9.还书信息的输入,包括借书证编号、书籍编号、还书日期。
10.还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。
11.超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。
12.超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名称,罚款金额等
1.3事物需求
(1)在读者信息管理部分,要求:
a.可以查询读者信息。
b.可以对读者信息进行添加及删除的操作。
(2 )在书籍信息管理部分,要求:
a.可以浏览书籍信息,要求:
b.可以对书籍信息进行维护,包括添加及删除的操作。
(3)在借阅信息管理部分,要求:。
a.可以浏览借阅信息。
b.可以对借阅信息进行维护操作。
(4)在归还信息管理部分,要求:
a.可以浏览归还信息
b.对归还信息可修改维护操作
(5)在管理者信息管理部分,要求:
a.显示当前数据库中管理者情况。
b.对管理者信息维护操作。
(6)在罚款信息管理部分,要求:
a.可以浏览罚款信息
b.对罚款信息可以更新
1.4关系模式
(一) 书籍类别(种类编号,种类名称)
(二) 读者(借书证编号,读者姓名,读者性别,读者种类,登记时期)
(三) 书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称,出版日期,登记日期)
(四) 借阅(借书证编号,书籍编号,读者借书时间)
(五) 还书(借书证编号,书籍编号,读者还书时间)
(六) 罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书时间)
以上通过关系代数方法的进行运算得到所需要的结果,在实验结果中可以看到。
2.方案图表设计
2.1 E-R图
根据1)所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。
图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体。用E-R图一一描述这些实体。
2.1.1类别实体E-R图:
图2-1类别实体E-R图
2.1.2读者信息实体E-R图:
图2-2 读者信息实体E-R图
2.1.3信息实体E-R图:
图2-3信息实体E-R图
2.1.4.记录信息实体E-R图:
图2-4 记录信息实体E-R图
2.1.5记录信息实体E-R图:
图2-5记录信息实体E-R图
2.1.6罚款信息实体E-R图:
图2-6罚款信息实体E-R图
2.1.6总的信息实体E-R图:
图2-7总的信息实体E-R图
2.2数据流程图
D5
归还信息录入 基本信息录入
D2
D1
基本信息录入 基本信息录入
D3
D4
借阅信息录入
读者信息返回 书籍信息返回
图2-7系统的数据流程图
2.3数据字典
表2-1 book_sytle 书籍类别信息表
表中列名 数据类型 可否为空 说明
bookstyleno varchar not null(主键) 种类编号
bookstyle Varchar not null 种类名称
表2-2 system_readers读者信息表格
表中列名 数据类型 可否为空 说明
readerid varchar not null(主键) 读者借书证号
readername varchar not null 读者姓名
readersex varchar not null 读者性别
readertype varchar null 读者种类
regdate datetime null 登记日期
表2-3 system_book书籍信息表
表中列名 数据类型 可否为空 说明
bookid Varchar Not null(主键) 书籍编号
bookname Varchar Not null 书籍名称
bookstyle Varchar Not null 书籍类别
bookauthor Varchar Not null 书籍作者
bookpub Varchar Null 出版社名称
bookpubdate Datetime Null 出版日期
bookindate Datetime Null 登记日期
isborrowed Varchar Not Null 是否被借出
表2-4 borrow_record 借阅记录信息表
表中列名 数据类型 可否为空 说明
readerid Varchar Not null(外主键) 读者借阅证编号
bookid Varchar Not null(外主键) 书籍编号
borrowdate Varchar Not null 读者借书时间
表2-5 return_record 借阅记录信息表
表中列名 数据类型 可否为空 说明
readername Varchar Not null(外主键) 读者借阅证编号
readerid Varchar Not null(外主键) 书籍编号
returndate datetime Not null 读者还书时间
表2-6 reader_fee 罚款记录信息表
readerid varchar Not null 读者借书证编号
readername varchar Not null 读者姓名
bookid varchar Not null(外主键) 书籍编号
bookname varchar Not null 书籍名称
bookfee varchar Not Null 罚款金额
borrowdate datetime Not Null 借阅时间
2.4关系图:
图2-8数据库存表关系图
3.数据库源代码
3.1数据库建立
3.1.1创建数据库
USE master
GO
CREATE DATABASE librarysystem
ON
( NAME = librarysystem,
FILENAME = 'd:\librarysystem.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'library',
FILENAME = 'd:\librarysystem.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO
3.1.2书本类别表建立
create table book_style
(
bookstyleno varchar(30) primary key,
bookstyle varchar(30)
)
3.1.3创建书库表
create table system_books
(
bookid varchar(20) primary key,
bookname varchar(30) Not null,
bookstyleno varchar(30) Not null,
bookauthor varchar(30),
bookpub varchar(30) ,
bookpubdate datetime,
bookindate datetime ,
isborrowed varchar (2) ,
foreign key (bookstyleno) references book_style (bookstyleno),
)
3.1.4借书证表建立
create table system_readers
( readerid varchar(9)primary key,
readername varchar(9)not null ,
readersex varchar(2) not null,
readertype varchar(10),
regdate datetime
)
3.1.5借书记录表建立
create table borrow_record
( bookid varchar(20) primary key,
readerid varchar(9),
borrowdate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid),
)
3.1.6还书记录表建立
create table return_record
( bookid varchar(20) primary key,
readerid varchar(9),
returndate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid)
)
3.1.7罚款单表建立*/
create table reader_fee
( readerid varchar(9)not null,
readername varchar(9)not null ,
bookid varchar(20) primary key,
bookname varchar(30) Not null,
bookfee varchar(30) ,
borrowdate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid)
)
3.2数据初始化
3.2.1将书籍类别加入表book_style中
insert into book_style(bookstyleno,bookstyle)values('1','人文艺术类')
insert into book_style(bookstyleno,bookstyle)values('2','自然科学类')
insert into book_style(bookstyleno,bookstyle)values('3','社会科学类')
insert into book_style(bookstyleno,bookstyle)values('4','图片艺术类')
insert into book_style(bookstyleno,bookstyle)values('5','政治经济类')
insert into book_style(bookstyleno,bookstyle)values('6','工程技术类')
insert into book_style(bookstyleno,bookstyle)values('7','语言技能类')
3.2.2将已有的图书加入system_books表中(定义相同的作者出版社的书本编号不一样)
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('00125415152','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('00125415153','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('00456456','数据库原理','6','萨师煊','高等教育出版社','2007-07-02','2007-09-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('12215121','C程序设计','6','谭浩强','清华大学出版社','2002-04-02','2004-03-14','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('9787308020558','计算机体系结构','6','石教英','浙江大学出版社','2004-10-03','2006-11-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('45456141414','数据结构(C语言版)','6','吴伟民,严蔚敏','清华大学出版社','2002-06-28','2004-01-21','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('5455515','中华历史5000年','1','吴强','北京大学出版社','2005-04-03','2006-05-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('015115','古代埃及','3','赵文华','北京大学出版社','2001-02-02','2002-09-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('1514514','日本文化','1','吴小鹏','北京大学出版社','2002-04-02','2004-03-14','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('15154656','微观经济学','5','李小刚','北京大学出版社','2000-10-03','2001-11-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('5658','影视文学','4','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1');
insert into
system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('565800020','探索宇宙奥秘','2','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1');
3.2.3将已有图书证的读者加入system_readers表中*/
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620207','陈远鹏','男','学生','2005-9-23 14:23:56')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620206','陈特','男','学生','2005-09-30 13:24:54.623')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620204','赵铭静','女','学生','2005-09-27 11:24:54.123')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620202','潘虹','女','学生','2005-09-30 13:24:54.473')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('008415','蒋伟','男','教师','2004-04-30 09:24:54.478')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('001456','李叶风','女','教师','2004-04-30 09:24:54.478')
3.2.4添加已借书读者的记录,同时将在已借出的借阅标记置0*/
insert into borrow_record(bookid,readerid,borrowdate)
values('00125415152','X05620202','2007-09-27 11:24:54.123')
update system_books
set isborrowed=0
where bookid='00125415152'
insert into borrow_record(bookid,readerid,borrowdate)
values('00125415153','X05620206','2007-12-27 08:26:51.452')
update system_books
set isborrowed=0
where bookid='00125415153' and isborrowed='1'
insert into borrow_record(bookid,readerid,borrowdate)
values('5455515','X05620207','2007-12-27 08:26:51.452')
update system_books
set isborrowed=0
where bookid='5455515' and isborrowed='1'
insert into borrow_record(bookid,readerid,borrowdate)
values('015115','X05620204','2007-10-21 12:11:51.452')
update system_books
set isborrowed=0
where bookid='015115' and isborrowed='1'
insert into borrow_record(bookid,readerid,borrowdate)
values('15154656','001456','2007-12-28 14:11:51.312')
update system_books
set isborrowed=0
where bookid='15154656' and isborrowed='1'
insert into borrow_record(bookid,readerid,borrowdate)
values('565800020','008415','2007-08-28 15:11:31.512')
update system_books
set isborrowed=0
where bookid='565800020' and isborrowed='1'
4.结果数据处理
4.1单表查询
4.1.1表book_style中查询演示:
图4-1 表book_style中内容
4.1.2表system_books中查询演示:
图4-2 表system_books中内容
4.1.3将已有图书证的读者加入system_readers表中结果查询:
图4-3 表system_readers中内容
4.1.4借书纪录表borrow_record结果查询:
图4-4 表borrow_record中内容
4.2超期处理
4.2.1现在对已有借书证的读者进行查询借书是否超期(这里归定30天):
说明:当前的getdate()以日期为2008年1月6日计算
图4-4 选出借出超过30天的读者
4.2.2同时也可以用语句超过天数的读者进行罚款,加入到罚款单里面,一天以0.3元扣除计算:
SQL语言:
insert into reader_fee(readerid,readername,bookid,bookname,bookfee,borrowdate)
select system_readers.readerid 读者借书证编号 ,readername 读者姓名,
system_books.bookid 书籍编号,bookname 书名,
0.3*(Datediff(day,convert(smalldatetime,borrowdate),getdate())-30) 超过时间天数,
borrowdate 借书时间
from borrow_record ,system_readers ,system_books
where system_readers.readerid=borrow_record.readerid
and system_books.bookid=borrow_record.bookid
and Datediff(day,convert(smalldatetime,borrowdate),getdate())=30
(所影响的行数为 3 行)
select readerid 书读者借书证编号,readername 读者姓名,
bookid 书籍编号,bookfee 超期罚款
from reader_fee
形成各本书对应的罚款金额,按0.3元每天算
图4-5查看罚款单
4.3还书操作
4.3.1现在对某一读者进行还书操作:
1.首先还书要在还书纪录中添加一条还书纪录
2.其次删除相应书本的借阅纪录
3.最后在书库中标记该本书为1,表示归还了未借,可供其他读者借阅
说明:学号为X05620207 姓名为陈远鹏 借阅的565800020书籍编号进行归还。
SQL语言:
insert into return_record(bookid,readerid,returndate)
select bookid,readerid,getdate()
from borrow_record
where bookid='565800020'
(所影响的行数为 1 行)
delete
from borrow_record
where bookid='565800020'
(所影响的行数为 1 行)
update system_books
set isborrowed=1
where bookid='565800020'
(所影响的行数为 1 行)
三个表的结果如图:
图4-6 增加了565800020纪录
图4-7 565800020这本书在借书纪录里没有了
图4-8 标记设为了‘1’
说明:这本书重新回到未被借出标记为1(注,相同的书其编号是不同的)
其结果为还书成功,相应的各表都有变化,对于罚款单通过借阅记录表borrow_record中更新。
4.4借书操作
4.4.1查询未被借出的书本:
图4-9
4.4.2查询已被借出的书本:
图4-10
4.4.3申请借书证:
SQL语言:
Insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620211','小华','男','学生',getdate())
图4-11
说明:查询相应的纪录增加了小华这样一个读者的借书证纪录:
4.4.4注销借书证:
说明:
1.在注销之前执行所有的还书过程,就是上面写到的所述SQL语句,然后执行
delete from system_readers where readerid=' X05620211',
2.小华借书证纪录就被删除了,同时要删除和小华归还纪录的内容
delete from return_record where readerid=' X05620211',
4.4.5查询所有书所对应的类别:
图4-12
4.5书籍状态
4.5.1查询所有工技术类的书:
图4-13
4.5.2查询清华大学出版社出版的书:
图4-14
4.6读者状态
4.6.1查询什么人借了什么书:
SQL语言:
select readername 读者姓名,bookname 书籍名称
from borrow_record,system_books,system_readers
where system_readers.readerid=borrow_record.readerid
and system_books.bookid=borrow_record.bookid
图4-15
4.6.2指定潘虹借了什么书:
SQL语言:
select readername 读者姓名,bookname 书籍名称
from borrow_record,system_books,system_readers
where system_readers.readerid=borrow_record.readerid
and system_books.bookid=borrow_record.bookid
and readername='潘虹'
图4-16
5.结束语
5.1课程设计心得
通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对灵据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,懂得了不少有关数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立及理解,将SQL语的查询语句用得淋漓尽致,增强了自己在数据库中应用SQL语言的灵活性,其中包括,插入、删除、修改、查询,牵涉表和表之间的联系,主建与外主键的定义,约束项的设置,使逻辑更严密,在学习过程中,我也能过上网查了不少资料,也看了一些别人设计的图书馆管理信息系统的设计报告,学以致用,自我创新,独立完成了这份自己的报告,从中在学到用,从用又到学,不断修改,系统更新。虽然不能达到完善系统,但也做到了尽善尽美,加强理论学习对完善系统会有很多帮助,不管怎么说,对这次做的课程设计自己觉得还算满意。
CREATE view s1 as select stuno,name from student where stuno in (select stuno from grade where grade='**'and dj60 )
我是刚才用QQ给你答案的.
这么多题目,估计没人给你做哦,你可以网上搜下,然后自己整理,之前在课设宝这个网站上找到过,你可以试试,他们也提供定制