- 论坛徽章:
- 0
|
请大虾帮我检查有什么错误?
假设悉尼有个公司需要编一个程序来保存它的员工的一些数据。这些数据包含了以下内容:
电话号码,姓名,部门号码,工作头衔和聘用时间。这个程序应该允许用户增加,定位(即查找)和显示所指定员工的相关具体信息。为了满足上述要求,你可以通过编写几个unix的shell脚本来实现。
首先,你应该在一个文本编辑器里创建一个名为records文件,该文件包含了以下记录信息:
02-95671660:Jones:Sarah:B:45:sales manager:14-12-1995
02-93272658:Simth:John:C:43:technical manager:12-10-1993
02-98781987:Williams:Nick:T:35:computer officer:10-8-1998
接着,你的主脚本(必须命民为menu)需要显示一张程序所提供功能的菜单,程序运行时,用户可以通过选择上述菜单所提供的功能代号,使得程序能完成相应的描述功能。因此,你所编写的程序因完成三个任务:
任务1.可以在屏幕上显示当前所有员工的记录信息
任务2.可以搜索并显示特定员工的记录信息
任务3.在记录文件里增加新员工的记录信息
你可以使用一些简单的UNIX命令来完成任务1。对于任务2和任务3,你必须通过编写两个独立的shell脚本(他们必须分别命名为search和add)来实现。然后,通过上述的主脚本(即menu)来调用这两个脚本。
(好了,至此,我已经把要完成的工作大体描述清楚了,现在来详细描述你们需要完成的任务。)
主脚本menu
你的主脚本menu应该能够显示下面的的菜单,这样程序使用者就可以根据菜单选择相应的操作了。
Employees Info Main Menu
========================
P - Print Current Records
S - Search for specific Record(s)
A - Add New Records
Q - Quit
Your Selection: (waiting for user input)
• 在用户做出相应的选择并且程序执行了相应的功能之后,上面的主菜单必须能够再次显示出来,这样用户就可以做再一次的选择了。你应该使用一个while循环和一个case条件选择语句来编写这个程序。此外,你的主脚本应该能够实现在每次主菜单之前都使得屏幕清空。
• 在你的主脚本menu的开始,你应该定义三个变量,他们的值分别为records, search和 add ,然后在程序中始终用这三个变量来指代另外三个脚本文件: records, search, and add. 比如,你可以这样定义:
record_file=records
这样,在程序的其它地方你就可以通过使用 $record_file 来表示records这个脚本了。这样的定义的好处在于,如果你以后不得不对record这个脚本文件重新命名,你这需在上面程序的变量处改变就可以了,而不需要对程序中任何用到这个record的地方都做改动。
• 定义完所有的变量后,你的主脚本应该检查一下这些所需的脚本文件(records, search, and add)是否都位于当前目录底下。如果里面的任何一个文件不存在,你的menu脚本应该显示以下信息,并退出(exit)脚本的执行。
Required file (填所缺的文件名) does not exist.
比如, if records 文件不存在,信息就应该显示为
Required file records does not exist.
• 你的脚本应该允许用户键入相应的字母(P, S, A, 或 Q且大小写应均可)。如果用户输入的不是代表P, S, A, 或 Q的大小写字母,屏幕上应该出现提示信息:
• "Invalid code!! Press Enter to continue…" (请保证此时光标应该停在这条提示信息的末尾而不是下一行的开始位置). 在用户输入Enter时,主菜单应该再次显示这样用户可以开始一次全新的选择。
当用户键入P(或p)时
这里提供了一个当用户在主菜单下选择p(或P)时,menu脚本的输出:
(这里显示的是主菜单)
Your Selection: p (p是用户输入的)
02-95671660:Jones:Sarah:B:45:sales manager:14-12-1995
02-93272658:Simth:John:C:43:technical manager:12-10-1993
02-98781987:Williams:Nick:T:35:computer officer:10-8-1998
Press Enter to continue... (程序停在这儿,等待用户输入Enter,然后主菜单重新显示一下,等待用户再次做选择)
你的search脚本
当用户在主菜单下选择S(或s)时, search脚本将被激活。下面是执行search后的一个输出结果的例子:
(这里显示的是主菜单)
Your Selection: s (s是用户输入的)
Enter keyword: Sarah (Sarah是用户输入的)
02-95671620:Jones:Sarah:M:45:admin assistant:12-12-1990
Press Enter to continue... (程序停在这儿,等待用户输入Enter,然后主菜单重新显示一下,等待用户再次做选择)
如果你键入的搜索关键字(keyword)没找到相应的匹配结果,那么这种情况下,search的输出结果如下:
(这里显示的是主菜单)
Your Selection: s (s是用户输入的)
Enter keyword: Kate (Kate 是用户输入的)
Kate not found
Press Enter to continue... (程序停在这儿,等待用户输入Enter,然后主菜单重新显示一下,等待用户再次做选择)
•
• 在你的search脚本的开始,你应该定义一个变量来代替records,然后在整个脚本里用该变量指代records文件.
• 你必须允许用户键入的关键字可以是大写的也可以是小写的 (如, sarah 和SARAH 可以产生相同的输出).
你的add脚本
当用户在主菜单下选择A(或a)时, add脚本将被激活。下面是执行add后的一个输出结果的例子:
(这里显示的是主菜单)
Your Selection: a (a是用户输入的)
(首先清屏)
Employee Info Additions=======================
Enter the following details of the new
employee- enter NA if not available:
Phone Number
Last Name
First Name
Middle Init
Dept #
Job Title
Date Hired
Phone Number (xx-xxxxxxxx): 02-90807986 (用户输入)
Last Name: Warren (用户输入)
First Name: Todd (用户输入)
Middle Init:L (用户输入)
Dept #: 20 (用户输入)
Job Title: engineer (用户输入)
Date Hired (dd-mm-yyyy): 01-02-1996 (用户输入)
Record Saved (仅当成功地把记录填加到records文件中的时候,这条信息才能显示出来。如果填加失败,这条信息不应该显示。后一种情况中,应该将错误信息输出中标准错误文件。)
Add another? (y)es or (n)o: y (用户输入)
(如果输入的是y,上面的过程将重新执行一遍-从 (首先清屏)开始重复)
但是,如果用户键入的是n, 程序将退出add 脚本主菜单又被显示出来,这样,
用户就可以再做一次新的选择了。(比如,这时候用户可能想看一下records文件的内容以确保刚才填加的文件确实已经加入到记录中去了) 。如果用户不小心输入的即不是y也不是n,那么程序一样将退出add 脚本并显示主菜单。
• 你必须使用一个while循环来实现上述操作。
• 在你的add脚本的开始,你应该定义一个变量来代替records,然后在整个脚本里用该变量指代records文件.
• 加入三条新的记录到records 文件中去。 |
|