我不知道天下还有比这个老师更加BT的不。
图书馆管理系统
1. 项目名称:
图书馆管理系统
2. 实验项目的目的和任务:
目的:锻炼学生综合应用UNIX系统下的各种命令、系统功能和shell程序设计语言的能力,特别是完整地设计一个接近实用的应用软件系统的逻辑思维能力。
任务:编写一个菜单驱动的UNIX图书馆管理程序(lib_mng), 该程序能够对书库中的图书执行增加一条记录、删除一条记录、显示一条记录、更新一条记录状态和打印报表等功能。
3. 上机实验内容:
图书库为一个文本文件library, 其中每一行为一个记录,包括六个字段,描述一种书的六种信息(假设每一种书只能有一本), 分别是:
? 书名
? 作者
? 种类,假设有三种有效类型:
i. 系统书:简写为system
ii. 参考书:简写为reference
iii. 教科书:简写为textbook
? 状态: 表示书被借出还是在书库中。图书状态由程序决定,当增加一本书时或书被还回时,该状态自动设为in;当书被借出时,状态改为out;
? 借阅者姓名:当图书在书库中(即状态字段为in)时,该字段为空;当书被借出(即状态字段为out)时,该字段为借阅者姓名;
? 日期:当图书在书库中(即状态字段为in)时,该字段为空;当书被借出(即状态字段为out)时,该字段为借出日期。
由于在书名和作者字段的字符串中可能包含空格,所以在每条记录中各字段之间的间隔符为冒号(:)。
程序结构如下:
lib_mng: 主菜单程序,运行时先清屏,并在屏幕中间用高亮(用tput smso命令)模式显示主菜单:
UNIX library manager
0. exit this program
1. add a book
2. delete a book
3. display a book
4. update a book’s status
5. report library’s status
Input your choice [_]
光标停留在方括号内, 等待用户选择. 用户选择0时程序退出; 选择1~5时进入相应的功能程序; 选择错误时在选择行的下一行提示:
Invalid choice, press any key to try again
光标停留在提示行的行尾, 等待用户按键, 用户按任意键后, 清除错误提示行并重新显示选择行.
程序从1~5的功能模块中退出后, 重新回到主菜单程序并显示主菜单.
add_bk: 增加一条记录(一本书).
UNIX library ---- ADD MODE
Title: Unix Shell
Author: Ellie Quigley
Category: textbook
Any more to add? (Y)es or (N)o >_
程序运行时, 先清屏, 并依次提示用户输入书名(title)、作者(author)和类型(category),再将用户输入的内容和该记录的状态(status)、借阅者(bname)和日期(date)等字段的初始值一起组成一行,用附加方式的重定向(>>)存入到图书库文件(library)中(字段之间用冒号隔开).
一条记录输入完成后,询问用户是否继续输入新的记录,如果是,则程序循环下去;否则退出add_bk程序,返回到主菜单程序lib_mng中。
del_bk: 删除一条记录
程序运行时,先清屏,并提示用户输入要删除的书名。程序在图书库文件library中查找与书名相匹配的记录,如果发现了该记录,则用合适的格式显示该记录,并显示确认提示, 例如:
UNIX library ---- DELETE MODE
Title: Unix Shell
Author: Ellie Quigley
Category: textbook
Status: in
Checked out by: student6
Date: 03/18/2003
Delete this book? (Y)es or (N)o > y
Any more to delete? (Y)es or (N)o >_
用户确认后,删除该记录。提示,删除记录可用下列命令:
grep -v “$title:$author:$category:$status:$bname:$date” library > temp
mv temp library
用户回答N或删除完成后,提示用户是否继续进行删除,如是,则循环下去;否则,返回主菜单程序。
disp_bk: 把library库文件中指定记录的内容显示出来
程序运行时,先清屏,并提示用户输入书名(title),如果找到指定记录,则按适当格式显示该书的信息;否则显示该书找不到,并提示是否继续查找,如用户回答肯定,则重新开始下一轮查找;回答否定则返回主菜单程序。
UNIX library ---- DISPLAY MODE
Title: Unix Shell
Author: Ellie Quigley
Category: textbook
Status: in
Any more to look for? (Y)es or (N)o >_
updt_bk: 当借出一本书或还回一本书时,执行该程序更改库文件library中指定记录的状态。
程序运行时,先清屏,并提示用户输入书名(title),如果找到指定记录,则按适当格式显示该书的信息;
如果原来该记录的状态为out,则显示该书的信息后,显示新的状态为in,从库文件中删除该记录,再把状态字段已改为in,以及已清除借阅者和日期字段后的新记录附加到库文件中去,例如:
UNIX library ---- UPDATE MODE
Title: Unix Shell
Author: Ellie Quigley
Category: textbook
Status: out
Checked out by: student6
Date: 03/18/2003
New status: in
Any more to update? (Y)es or (N)o >_
如果原来该记录的状态为in,则显示该书的信息后,显示新的状态为out,再提示用户输入借阅者名字,显示系统时间。从库文件中删除该记录,再把状态字段已改为out,以及已填入了借阅者和日期字段后的新记录附加到库文件中去,例如:
UNIX library ---- UPDATE MODE
Title: Unix Shell
Author: Ellie Quigley
Category: textbook
Status: in
New status: out
Checked out by: student3
Date: 03/25/2003
Any more to update? (Y)es or (N)o >_
一条记录的状态更新完成后,提示用户是否更新其它记录的状态,如果是,则继续循环;否则退出该程序返回到主菜单程序。
report_bk: 该程序运行时先清屏,再把库文件library中的各条记录,以书名排序, 按适当的格式,逐屏(用more或pg命令)显示在屏幕上。显示完成或中断显示后,返回主菜单程序,例如:
Title: Unix Shell
Author: Ellie Quigley
Category: textbook
Status: out
Checked out by: student3
Date: 03/25/2003
Title: Unix unbound
Author: Afzal Amir
Category: textbook
Status: in
Title: A Brief UNIX Guide
Author: Redd Emma
Category: reference
Status: out
Checked out by: student5
Date: 03/28/2003
---- more ---- (16%)
4. 设计要点:
本实验的首要任务是将要实现的功能合理的划分到适当的函数中,并分别用函数实现之,从而有效的降低程序的复杂度。设计时可以采用至定向下方法划分函数,实现时最好至下向上,从而便于调试和集成。
其次是对数据文件的合理设计和操作,从而方便实现需要的各项功能。
最后是熟练的应用屏幕显示控制函数,从而能够在适当的位置显示信息。
5. 项目需用仪器设备名称:
安装有Linux系统的计算机一台.
6. 所需主要元器件及耗材:
无
7. 学时数:8
对于1个学分的选修课,我只能说:无语。