大学课件Unix实验报告_第1页
大学课件Unix实验报告_第2页
大学课件Unix实验报告_第3页
大学课件Unix实验报告_第4页
大学课件Unix实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子科技大学计算机科学与工程学院标准实验报告(实验)课程名称Unix操作系统电子科技大学教务处制表电子科技大学实验报告一、实验室名称:计算机学院实验中心二、实验项目名称:图书馆管理系统三、实验目的:掌握shell编程的一般方法,能运用常用的shell命令编写一个简单的shell程序,并能在Linux系统所提供的/bin/sh或/bin/bash下正确的运行。四、实验内容:写一个菜单驱动的Linux图书馆管理程序(LLIB),该程序能够对书库中的图书执行增加一条记录、删除一条记录、显示一条记录、更新一条记录状态和打印报表等功能。图书库为一个文本文件library,其中每一行为一个记录,包括六个字段,描述一种书的六种信息(假设每一种书只能有一本),分别是:书名作者种类,假设有三种有效类型: 系统书:简写为system 参考书:简写为reference 教科书:简写为textbook状态:表示书被借出还是在书库中。图书状态由程序决定,当增加一本书时或书被还回时,该状态自动设为in;当书被借出时,状态改为out;借阅者姓名:当图书在书库中(即状态字段为in)时,该字段为空;当书被借出(即状态字段为out)时,该字段为借阅者姓名;日期:当图书在书库中(即状态字段为in)时,该字段为空;当书被借出(即状态字段为out)时,该字段为借出日期。由于在书名和作者字段的字符串中可能包含空格,所以在每条记录中各字段之间的间隔符为冒号(:)。程序结构要求:LLIBADDDISPLAYUPDATEDELETEERROREDITREPORTSREPORT_NOLLIBADDDISPLAYUPDATEDELETEERROREDITREPORTSREPORT_NO五、实验器材(设备、元器件):个人电脑(安装window10操作系统)WSL(window10下的Linux子系统)cmder(windows10下的命令行)六、实验步骤及操作:代码:#!/bin/rbash#记录的借出状态STATUS_AVAILABLE=0STATUS_UNAVALABLE=1#加粗输出第一个参数functionechoBold(){echo-e"\033[0;0;1m$1\033[0;0;0m"}#输出标题附带第一参数functionechofunctionTitle(){echo-eLinuxLibrary-`echoBold$1`}#读输入直到正确选择yes或者nofunctionyesOrNo(){input=""whiletrue#等待正确输入doread-p"$1Y(es)orN(o)?>"inputcase"$input"inyes|yeS|yEs|yES|Yes|YeS|YEs|YES|Y|y)return1#选择‘是’;;no|No|NO|nO|N|n)return0#选择‘否’;;*);;#无法识别的输入继续循环等待输入esacdone}#欢迎界面functionwelcome(){clearecho-e`echoBold"LinuxLibraryManager"`echo-e"ThisistheLinuxLibraryapplication\nPleaseenteranykeytocontinue..."read-n1#等待任意一个字符的输入}#展示主菜单functionshowMenu(){clearechofunctionTitle"MAINMENU"echo0:`echoBoldEXIT`thisprogramecho1:`echoBoldEDIT`showMenuecho2:`echoBoldREPORTS`Menu}#输入错误显示functiononWrongInput(){clearecho-eWrongInput.Tryagain.echo-e"Pressanykeytocontinue...>\c"read-n1}#添加一本书functionaddABook(){clearechofunctionTitle"ADDMODE"title=""author=""category=""whiletest-z"$title"doread-p"Title:"title#读入非空标题donewhiletest-z"$author"doread-p"Author:"author#读入非空作者doneread-p"Category(system(sys)|reference(ref)|textbook(tb):"categorywhiletruedocase"$category"insystem|sys)category="system"#规范化存储的类别break;;reference|ref)category="reference"#规范化break;;textbook|tb)category="textbook"#规范化break;;*)#输入不在限定的类别之中echoWrongcategory.Pleaseinputagain.read-p"Category(system(sys)|reference(ref)|textbook(tb):"category;;esacdone#检测是否已经存在该条书目信息记录line=$(grep-E"${title}:${author}:[^:]*:[01]:[^:]*:[^:]*"library|wc-l)#存在该条记录不允许添加if[$line-gt0]thenecho"error:thebookexists"elseecho"${title}:${author}:${category}:${STATUS_AVAILABLE}::">>libraryfi}#根据一行记录打印信息functionshowBookInfo(){#以:为分割符取出书的具体信息title=`echo$1|cut-d":"-f1`author=`echo$1|cut-d":"-f2`category=`echo$1|cut-d":"-f3`status=`echo$1|cut-d":"-f4`echo""echo"Title:$title"echo"Author:$author"echo"Categoty:$category"#展示状态信息if["$status"=="$STATUS_AVAILABLE"]thenechoStatus:inif["$2"=="u"]#带有参数2,并且为u,打印更新相关信息thenechoNewstatus:outfielseechoStatus:outif["$2"=="u"]thenechoNewstatus:infiecho""echoCheckedoutby:`echo$1|cut-d":"-f5`echoDate:`echo$1|cut-d":"-f6`fiecho""return$status}#删除一本书functiondeleteABook(){clearauthor=""read-p"Enterthetitle>"title#查找记录中书名符合的行数line=`grep-E"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library|wc-l`#多于一行,需要再指定作者来消除冲突if[$line-lt1]thenechonosuchbookread-p"Anykeytoreturn"-n1return#少于一行,说明不存在elif[$line-gt1]thenecho$linebooksnamedtitlefound.Pleasespecifytheauthorread-p"Entertheauthor>"authorfiinfo=":::::"if["$author"!=""]#有指定作者名,以书名和作者名查找,取第一条theninfo=`grep-E"${title}:${author}:[^:]*:[01]:[^:]*:[^:]*"library|head-n1`elseinfo=`grep-E"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library`fiif[info==":::::"]||[info==""]thenechonosuchbookread-p"Anykeytoreturn>"-n1returnelseechofunctionTitle"DELETEMODE"showBookInfo$infofiyon=1whiletruedoyesOrNo"Deletethisbook?"yon=$?if[$yon=1]theniftest-nauthorthengrep-v"${title}:${author}:[^:]*:[01]:[^:]*:[^:]*"library>tmpelsegrep-v"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library>tmpfi#删除mvtmplibrarybreakelif[$yon=0]thenbreakfidone}#展示查找书目functiondisplayABook(){clear#查找方式同上#title有冲突需要指定作者author=""read-p"Enterthetitle>"titleline=`grep-E"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library|wc-l`if[$line-lt1]thenechonosuchbookread-p"Anykeytoreturn"-n1returnelif[$line-gt1]thenecho$linebooksnamed$titlefound.Pleasespecifytheauthorread-p"Entertheauthor>"authorfiinfo=":::::"if["$author"!=""]theninfo=`grep-E"${title}:${author}:[^:]*:[01]:[^:]*:[^:]*"library|head-n1`elseinfo=`grep-E"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library`fiif[info==":::::"]||[info==""]thenechonosuchbookread-p"Anykeytoreturn>"-n1returnelseechofunctionTitle"DISPLAYMODE"showBookInfo$infofi}#更新书目状态functionupdateABook(){clearauthor=""read-p"Enterthetitle>"titleline=`grep-E"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library|wc-l`if[$line-lt1]thenechonosuchbookread-p"Anykeytoreturn"-n1returnelif[$line-gt1]thenecho$linebooksnamed$titlefound.Pleasespecifytheauthorread-p"Entertheauthor>"authorfiinfo=":::::"if["$author"!=""]theninfo=`grep-E"${title}:${author}:[^:]*:[01]:[^:]*:[^:]*"library|head-n1`elseinfo=`grep-E"${title}:[^:]*:[^:]*:[01]:[^:]*:[^:]*"library`fiif[info==":::::"]||[info==""]thenechonosuchbookread-p"Anykeytoreturn>"-n1returnfiechofunctionTitle"UPDATEMODE"showBookInfo$infouoldStatus=$?echooldStatus=$oldStatus#记录旧状态(在展示书目信息里返回)yesOrNo"Update?"yon=$?if[$yon-eq1]then#确定更新#删除旧记录,并提取信息grep-v"$info"library>tmpmvtmplibrarytitle=`echo$info|cut-d":"-f1`author=`echo$info|cut-d":"-f2`category=`echo$info|cut-d":"-f3`if["$oldStatus"=="$STATUS_UNAVALABLE"]then#无需借出人信息,借出时间echo"${title}:${author}:${category}:${STATUS_AVAILABLE}::">>libraryelse#更新为借出状态,需要输入借出人姓名#使用系统时间date=`date"+%Y-%m-%d-%H-%M"`name=""while["$name"==""]doread-p"inputname(@$date)>"namedone#输出到库文件echo"${title}:${author}:${category}:${STATUS_UNAVALABLE}:${name}:${date}">>libraryfifi}#展示所有书目functionreportAllBooks(){#排序栏位置起始letstart=$1-1end=$1#临时文件,需要新创建,所以删除已经存在的if[-freport]thenrm-rfreportfi#排序后用showBookInfo输出并重定向到临时文件sort-t":"+$start-$endlibrary|whilereadlinedoshowBookInfo$line>>reportdone#展示内容morereportread-n1-p"Anykeytocontinue>"#展示结束删除临时文件rm-rfreport}#展示的菜单functionreportMenu(){whiletruedoclearechofunctionTitle"REPORTSMENU"#排序方式echo0:`echoBoldRETURN`echo1:Sortedby`echoBoldTITLES`echo2:Sortedby`echoBoldAUTHOR`echo3:Sortedby`echoBoldGATEGORY`read-p"Enteryourchoice>"chif["$ch"==0]thenreturnelif["$ch"==1]||["$ch"==2]||["$ch"==3]then#传入排序方式reportAllBooks$chbreakelseonWrongInputfidone}#展示编辑选项菜单functionshowEditMenu(){clearechofunctionTitle"EDITMENU"echo0:`echoBoldRETURN`tothemainmenuecho1:`echoBoldADD`echo2:`echoBold"UPDATESTATUS"`echo3:`echoBoldDISPLAY`echo4:`echoBoldDELETE`}#编辑选项菜单功能控制functiononEditMenu(){clearopt=""#保存选择的操作until["$opt"=="0"]doshowEditMenuread-p"Enteryourchoice>"optcase"$opt"in"0");;"1")yon=1#控制是否继续添加whiletruedoif[$yon-eq1]#输入yes,继续添加thenaddABookyesOrNo"Anymoretoadd?"yon=$?elsebreak#输入no,退出循环fidone;;"2")yon=1#控制是否继续更新whiletruedoif[$yon-eq1]#输入yes,继续更新thenupdateABookyesOrNo"Anymoretoupdate?"yon=$?elsebreak#输入no,推出循环fidone;;"3")yon=1#控制是否继续查找whiletruedoif[$yon-eq1]#输入yes,继续查找thendisplayABookyesOrNo"Anymoretolookfor?"yon=$?elsebreak#输入no,停止查找

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论