- 论坛徽章:
- 0
|
。。。。。。
写一个程序包含以下员工信息:
3位数字的员工薪水册编号
电话号码
名字,(姓,名,首大写字母)
部门编号
职称
雇佣时间
程序必须具备让用户添加,删除,查找(定位),和显示员工详细信息。
可以运用几个UNIX shell 脚本去满足这些功能。要从登入UNIX开始,并建立一个文件名为records, 这个文件中包含了以下信息,每个小信息之间用冒号(:)隔开。
111:02-98781999:Williams:Nick:T:35:Computer Officer:14-10-2000
112:02-99893878:Brown:Sarah:B:12:Electrician:09-02-1992
131:02-95673456:Couch:David:A:26:Consultant:23-04-1994
236:02-95437869:Anderson:Sarah:K:19:CEO:21-09-1988
553:03-99999999:Coles:David:M:12:Manager:12-12-1999
869:02-95671660:Jones:Sarah:B:45:Sales Manager:14-12-1995
148:02-93272658:Smith:John:C:43:Technical Manager:21-10-1988
372:02-12345678:Miller:Sam:B:22:Engineer:12-03-1998
059:02-95673455:Chen:Xiao:Y:26:Consultant:01-05-2003
812:02-98781987:Xue:Fei:L:35:Computer Officer:10-08-1998
619:02-95436669:Wang:Mengjie:X:26:Consultant:12-02-2001
注:111,112:表示为 3位数字的员工薪水册编号
02-98781999:表示电话号码
Williams:表示为姓
Nick:表示为名
T:表示为大写字母
35:表示为部门编号
Computer Officer:表示为职称
14-10-2000:表示为被雇佣的时间
程序主要脚本为一个菜单选项(必须命名为menu)给用户操作。这里要实现的操作有:
在屏幕上显示当前所有员工的记录
在屏幕上显示当前所有员工的记录(已格式和已分类过的)
在屏幕上只显示员工的名字和电话号码
在屏幕上只显示员工的名字和电话号码(已格式和已分类过的)
搜索并显示特别员工的记录
添加新的记录到records
在records删除记录
程序可以用一些简单的UNIX命令去实现操作1,2,3,4,5。操作6,7 需要另外写一个程序脚本(必须分别命名为add 和delete)并且召集这些脚本到主要脚本menu中。
写这个程序你要研究UNIX命令:awk, sort, tr, cut, paste, sed, grep和其他一些命令。你必须在你的home 目录下产生一个工作目录,命名为kxc254ass1 。
主脚本菜单(Your Main Script menu)
产生一个主要的脚本菜单如下:
Adfaith Consulting - Employee Information - Main Menu
=====================================================
1 - Print All Current Records
2 – Print All Current Records (formatted)
3 – Print Names and Phone Numbers
4 – Print Names and Phone Numbers (formatted)
5 - Search for specific Record(s)
6 - Add New Records
7 – Delete Records
Q - Quit
Your Selection: | (waiting for user input)
当用户选择一个操作并完成实现,这个主菜单必须被再次显示供用户选择下次操作。你必须结合使用while loop 和case conditional 去实现这个功能。另外,你的脚本menu 必须在菜单显示前清除使用者的屏幕。总的来说就是每一次在菜单显示前必须先清屏。
在开始你的menu 脚本,你必须先分别定义records, add, and delete 这3个变量的值, 并且在records, add, and delete文件的声明中使用这3个变量。
例如,你可以定义:record_file=records。
使用$record_file 在所有与file records相关的声明中。这样做的一个好处就是不用再次定义。
定义其他两个变量为 :add_file=add
delete_file=delete
在以上定义完之后,你的menu 脚本必须检验在当前的目录下是否存在必须的文件 (records, add, and delete)。如果任何一个脚本不存在,你的脚本menu显示下面的信息并且退出你的程序(exit your program)。
Required file(必须的文件) – theMissingFilename, does not exist.
例如, 如果 records file 不存在, 则显示:
“Required file – records, does not exist.”, and then exit your program.
如果用户选择了错误的选项,如:8,9…,则显示"Invalid code! Press Enter to continue…" 并且要确定光标指针在这句话的结尾,而不是在下一行的开头。在用户敲击ENTER后,主菜单出现,用户可再次选择。
对每个操作的具体实现:
当用户选1——Print All Current Records(在屏幕上显示当前所有员工的记录)
以下是当用户选择1后出现的结果
(The main menu here)
Your Selection: 1 (user input)
111:02-98781999:Williams:Nick:T:35:Computer Officer:14-10-2000
112:02-99893878:Brown:Sarah:B:12:Electrician:09-02-1992
131:02-95673456:Couch:David:A:26:Consultant:23-04-1994
236:02-95437869:Anderson:Sarah:K:19:CEO:21-09-1988
553:03-99999999:Coles:David:M:12:Manager:12-12-1999
869:02-95671660:Jones:Sarah:B:45:Sales Manager:14-12-1995
148:02-93272658:Smith:John:C:43:Technical Manager:21-10-1988
372:02-12345678:Miller:Sam:B:22:Engineer:12-03-1998
059:02-95673455:Chen:Xiao:Y:26:Consultant:01-05-2003
812:02-98781987:Xue:Fei:L:35:Computer Officer:10-08-1998
619:02-95436669:Wang:Mengjie:X:26:Consultant:12-02-2001
Press Enter to continue... 当用户敲击回车后,菜单再次出现
所有的冒号代替了空格,你必须找出UNIX代码实现它。
当用户选2—在屏幕上显示当前所有员工的记录(已格式和已分类过的)
以下是当用户选择2后出现的结果。。。(看英文那份资料,复制过来格式不对)
当用户选3—在屏幕上只显示员工的名字和电话号码
(The main menu here主菜单显示位置)
Your Selection: 3 (user input)
Williams,Nick,02-98781999
Brown,Sarah,02-99893878
Couch,David,02-95673456
Anderson,Sarah,02-95437869
Coles,David,03-99999999
Jones,Sarah,02-95671660
Smith,John,02-93272658
Miller,Sam,02-12345678
Chen,Xiao,02-95673455
Xue,Fei,02-98781987
Wang,Mengjie,02-95436669
Press Enter to continue...
冒号被逗号取代。每一次登入,只显示名字和电话号码。
当用户选4—在屏幕上只显示员工的名字和电话号码(已格式化和分类)
(The main menu here)
Your Selection: 4 (user input)
Anderson Sarah 02-95437869
Brown Sarah 02-99893878
Chen Xiao 02-95673455
Coles David 03-99999999
Couch David 02-95673456
Jones Sarah 02-95671660
Miller Sam 02-12345678
Smith John 02-93272658
Wang Mengjie 02-95436669
Williams Nick 02-98781999
Xue Fei 02-98781987
Press Enter to continue...等待用户敲击回车,菜单再次出现
注意上面的输出已经以姓的方式进行格式化以及分类过。每栏必须左对齐。
当用户选5—搜索并显示特别员工的记录
(The main menu here)
Your Selection: 5 (user input)
Enter keyword: Jones (user input)
869:02-95671660:Jones:Sarah:B:45:sales manager:14-12-1995
Press Enter to continue...
如果输入关键词不存在,则如下显示:
(The main menu here)
Your Selection: 5 (user input)
Enter keyword: Monks (user input)
Keyword – Monks - not found
Press Enter to continue...
,如果用户简单的输入关键词代替完整的关键词,则如下:
(The main menu here)
Your Selection, 5 (user input)
Enter keyword: (用户无输入)
No keyword entered – try again…
Enter keyword: (仍然等待用户输入)
你必须同意用户输入大写或小写的关键词,例如JONES 和jones都可以。
脚本-----添加
脚本add 是当用户选择6是需要实现的
(The main menu here)
Your Selection, 6 (user input)
(Clear the user screen first) 先清屏
Adfaith Consulting – Employee Records:
======================================
Employee Record Additions(添加):
Enter the following details of the new employee:
(输入新职员的详细信息:)
Employee 3 digit payroll number
Phone Number
Last Name
First Name
Middle Init
Dept #
Job Title
Date Hired
Enter employee 3 digit payroll number: 123 (user input)
脚本必须强迫用户依照特别的格式输入有效正确的薪水册号码,你的脚本必须检验输入是否正确
Enter employee 3 digit payroll number: (无输入,敲回车后)
No payroll number entered – try again
Enter employee 3 digit payroll number: abc (用户输入不正确的号码时)
Payroll number can contain only numerical characters
Enter employee 3 digit payroll number:(等待用户输入有效数字)
Enter Phone Number (02-12345678): 02-90807986 (user input)
脚本必须强迫用户依照特别的格式输入有效正确的电话号码,你的脚本必须检验输入是否正确
Phone Number (02-12345678),敲回车时
No phone number entered – try again
Phone Number (02-12345678),等待用户输入号码
如果用户输入号码不正确时,则:
Enter Phone Number (02-12345678): abc123 (user input)
Invalid phone number – try again
Enter Phone Number (02-12345678): 等待用户输入正确号码
有效号码例子(包括电区号) 是 02-95671600. 无效号码例子是 0363243416 (格式错误), 1099887766, 1299998877,等。有效号码区号为 02, 03, 04, 05, 06, 07, 08. 电话号码第一个数字(不包括区号) 可以是1---9任何一个数字. 其他7位数 (不包括区号) 可以是 0 -- 9 任何一数字.)
Enter Last Name: Warren (user input)
(有效的姓只可以是字母和空格。和上面描述的一样, 如果用户输入一无效姓, 则显示 Last name can contain only alphabetical characters and spaces 并且提示用户再次输入姓。 如果无输入直接敲回车,则显示 No last name entered – try again 并提示用户再次输入.)
Enter First Name: Todd (user input)
(有效的名只可以是字母和空格。和上面描述的一样, 如果用户输入无效名, 则显示 First name can contain only alphabetical characters and spaces 并且提示用户再次输入名。 如果无输入直接敲回车,则显示 No First name entered – try again 并提示用户再次输入.)
Enter Middle Init: L (user input)
(有效的中间字母只可以是字母和空格。和上面描述的一样, 如果用户输入一无效姓, 则显示 Middle Initial can contain only alphabetical characters and spaces 并且提示用户再次输入. 如果无输入直接敲回车,则显示 No middle initial entered – try again 并提示用户再次输入.)
Enter Dept #: 20 (user input)
(一个有效的部门号码只能是数字并且没有空格。同样的,如果用户输入无效的部门号, 则显示--- Dept # can contain only digits with no spaces 并且提醒用户再次输入。如果无输入直接敲回车,则显示---No Dept # entered – try again并且提示用户再次输入.)
Enter Job Title: Engineer (user input)
(有效的职称只可以是字母和空格。和上面描述的一样, 如果用户输入一无效职称,则显示 Job title can contain only alphabets and spaces 并且提示用户再次输入. 如果无输入直接敲回车,则显示Job title not entered 并提示用户再次输入.)
Enter Date Hired (dd-mm-yyyy): 21-02-1996 (user input)
你的脚本必须强迫用户依照特殊的格式输入有效的日期,脚本必须有能力检验输入是否正确
简单的是或, 假象一个月有31天. 有效的年份为 1000---- 9999.
如果输入为无效格式的日期,则显示Invalid Date Hired并提示再次输入。如果无输入直接敲回车,则显示No date hired entered – try again并提示用户再次输入.)
Record Saved 记录保存
只有当成功的添加信息到records files时显示此信息。
the UNIX command for appending contents to an existing file will display a standard error message
Add another employee record? (y)es or (n)o, y (user input)
添加其他新的职员记录?
这个操作要从清屏开始,然后重复操作
然而当用户输入NO, add就停止 并且主菜单再次出现,以便用户做另外选择。
.如果用户以外输入其他字母,add就结束并且主菜单出现。
在add脚本开始前,你必须先定义records的变量值,并且使用所有与records相关的说明。
当程序完成后添加3个新的记录组成到records file
Your Script delete( 删除)
当用户选择7时,运行删除
(The main menu here)
Your Selection, 7 (user input)
(Clear the user screen first)清屏
Adfaith Consulting – Employee Records:
======================================
Employee Record Deletion:
Enter employee’s 3 digit payroll number to enable file deletion: 869 (user input)
869:02-95671660:Jones:Sarah:B:45:sales manager:14-12-1995
脚本必须强迫用户依照特别的格式输入有效正确的薪水册号码,你的脚本必须检验输入是否正确
Enter employee 3 digit payroll number: (无输入,直接敲回车时)
No payroll number entered – try again
Enter employee 3 digit payroll number: abc 用户输入无效号码
Payroll number can contain only numerical characters
Enter employee 3 digit payroll number: 等待用户输入号码
Confirm record deletion, (y)es or (n)o, y (user input)
Record deleted.(只有在记录成功的被删除后,显示此信息。)
如果用户输入N 或者其他字母,则删除接受,主菜单出现。
Delete another? (y)es or (n)o, y (user input)
如果用户输入N 或其他字母,则出现主菜单。
然而,如果没有找到这个操作,则会产生以下过程:
Adfaith Consulting – Employee Records:
======================================
Employee Record Deletion:
Enter employee’s 3 digit payroll number to enable file deletion: 123 (user input)
Employee record for 123 not found!
Press Enter to continue ...
保证指针停留在这个信息后。完成操作过程敲击回车,主菜单出现。
在add脚本开始前,你必须先定义records的变量值,并且使用所有与records相关的说明。
提交作业:
需要包含下面4个文件(3个shell脚本和一个Text file)
Menu, add, delete, records |
|