LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 741|回复: 3

请问本题中的六七步该怎么做

[复制链接]
发表于 2006-3-30 13:57:15 | 显示全部楼层 |阅读模式
1.在文件student中,各个字段以#分割
学号:必须以S开头,后面前两个数字为系别编号,不允许有相同学号,且学号是8个字符长度。
名字:由英文字母及空格组成,不允许有其他字符
        性别:为male或female
        生日:年份为四位数,从1980到1989年,日期和月份均为两位数,可不考虑闰年
        系别:编号从01~16
        联系电话:以“010-”开头,后面跟8个数字

一、        写脚本完成如下功能:
1.        显示所有学生信息,各字段以空格分隔(不格式化如下)
S1001101 XiaoDong male 1989-03-02 computer 010-87456218
S1001102 XiaoLi femail 1987-05-08 computer 010-54785623
S1101101 XiaoHua male 1986-10-23 math 010-88564178

2.        显示所有学生信息,各字段以空格分隔(格式化如下,要求每列对齐)
S1001101        XiaoDong        male                1989-03-02        computer                010-87456218
S1001102        XiaoLi                femail        1987-05-08        computer                010-54785623
S1101101                XiaoHua                male                1986-10-23        math                        010-88564178

3.        只显示学生学号、姓名、性别、生日信息(不格式化)
4.        只显示学生学号、姓名、性别、生日信息,并按姓名字母顺序排序,格式化输出
5.        根据给定的学号,显示该学号对应的学生信息(即查找,若学号不存在,提示信息)
6.        添加学生信息(添加的学号必须是合法的)
7.        根据给定的学号删除该学生信息(若该学号不存在,应给出提示信息)
要求:1~5功能写在脚本menu中
          6功能写在脚本add中
          7功能写在脚本delete中


本人初学.此题是作业  前五步终于在不断的看论坛下.完成了.但六七实在..

请各位大大指教..
发表于 2006-3-30 21:52:57 | 显示全部楼层
Post by linuxcaicai
1.在文件student中,各个字段以#分割
学号:必须以S开头,后面前两个数字为系别编号,不允许有相同学号,且学号是8个字符长度。
名字:由英文字母及空格组成,不允许有其他字符
        性别:为male或female
        生日:年份为四位数,从1980到1989年,日期和月份均为两位数,可不考虑闰年
        系别:编号从01~16
        联系电话:以“010-”开头,后面跟8个数字

一、        写脚本完成如下功能:
1.        显示所有学生信息,各字段以空格分隔(不格式化如下)
S1001101 XiaoDong male 1989-03-02 computer 010-87456218
S1001102 XiaoLi femail 1987-05-08 computer 010-54785623
S1101101 XiaoHua male 1986-10-23 math 010-88564178

2.        显示所有学生信息,各字段以空格分隔(格式化如下,要求每列对齐)
S1001101        XiaoDong        male                1989-03-02        computer                010-87456218
S1001102        XiaoLi                femail        1987-05-08        computer                010-54785623
S1101101                XiaoHua                male                1986-10-23        math                        010-88564178

3.        只显示学生学号、姓名、性别、生日信息(不格式化)
4.        只显示学生学号、姓名、性别、生日信息,并按姓名字母顺序排序,格式化输出
5.        根据给定的学号,显示该学号对应的学生信息(即查找,若学号不存在,提示信息)
6.        添加学生信息(添加的学号必须是合法的)
7.        根据给定的学号删除该学生信息(若该学号不存在,应给出提示信息)
要求:1~5功能写在脚本menu中
          6功能写在脚本add中
          7功能写在脚本delete中


本人初学.此题是作业  前五步终于在不断的看论坛下.完成了.但六七实在..

请各位大大指教..

第六题:

  1. #
  2. # 添加学生信息(六项,各项之间以#分隔),并要求各项信息分别为以下格式:
  3. # 1.学号:必须以S开头,后面前两个数字为系别编号,不允许有相同学号,且学号是8个字符长度。
  4. # 2.名字:由英文字母及空格组成,不允许有其他字符
  5. # 3.性别:为male或female
  6. # 4.生日:年份为四位数,从1980到1989年,日期和月份均为两位数,可不考虑闰年
  7. # 5.系别:编号从01~16
  8. # 6.联系电话:以“010-”开头,后面跟8个数字
  9. #

  10. if [ $# -ne 6 ]
  11. then
  12.         echo Usage: $0 arg1 arg2 arg3 arg4 arg5 arg6
  13.         exit 7
  14. fi

  15. if echo $1 | grep '^S[0-9]\{8\}$' > /dev/null
  16. then
  17.         if cat student | grep "^$1#" > /dev/null
  18.         then
  19.                 echo 该学号已存在
  20.                 exit 1
  21.         fi
  22. else
  23.         echo 学号格式不对
  24.         exit 1
  25. fi

  26. if echo $2 | grep '^[ A-Za-z]*$' > /dev/null
  27. then
  28.         :
  29. else
  30.         echo 姓名格式不对
  31.         exit 2
  32. fi

  33. if echo $3 | grep '^male$' > /dev/null || echo $3 | grep '^female$' > /dev/null
  34. then
  35.         :
  36. else
  37.         echo 性别格式不对
  38.         exit 3
  39. fi

  40. if echo $4 | grep '^198[0-9]-[01][0-9]-[0-3][0-9]$' > /dev/null
  41. then
  42.         month=$(echo $4 | cut -c6,7)
  43.         day=$(echo $4 | cut -c9,10)

  44.         if [ $month -lt 1 -o $month -gt 12 ]
  45.         then
  46.                 echo 月份只能在01和12之间
  47.                 exit 4
  48.         fi
  49.        
  50.         if [ $day -lt 1 -o $day -gt 31 ]
  51.         then
  52.                 echo 日期只能在01和31之间
  53.                 exit 4
  54.         fi

  55.         case $month
  56.         in
  57.                 02)        if [ $day -gt 28 ]
  58.                         then
  59.                                 echo 2月只有28日
  60.                                 exit 4
  61.                         fi;;
  62.                 04)        if [ $day = 31 ]
  63.                         then
  64.                                 echo 4月没有31日
  65.                                 exit 4
  66.                         fi;;
  67.                 06)        if [ $day = 31 ]
  68.                         then
  69.                                 echo 6月没有31日
  70.                                 exit 4
  71.                         fi;;
  72.                 09)        if [ $day = 31 ]
  73.                         then
  74.                                 echo 9月没有31日
  75.                                 exit 4
  76.                         fi;;
  77.                 11)        if [ $day = 31 ]
  78.                         then
  79.                                 echo 11月没有31日
  80.                                 exit 4
  81.                         fi;;
  82.         esac
  83. else
  84.         echo 生日格式不对
  85.         exit 4
  86. fi

  87. if echo $5 | grep '^[01][0-9]$' > /dev/null && [ $5 -gt 0 -a $5 -le 16 ]
  88. then
  89.         :
  90. else
  91.         echo 系别格式不对
  92.         exit 5
  93. fi

  94. if echo $6 | grep '^010-[0-9]\{8\}$' > /dev/null
  95. then
  96.         :
  97. else
  98.         echo 电话格式不对
  99.         exit 6
  100. fi

  101. echo "$1#$2#$3#$4#$5#$6" >> student
  102. echo 添加学生信息成功
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-3-31 13:32:52 | 显示全部楼层
第七题:
  1. #
  2. # 根据给定的学号删除学生信息,若该不存在则给出提示信息
  3. #
  4. if [ $# -ne 1 ]
  5. then
  6.         echo Usage: $0 arg1
  7.         exit 1
  8. fi
  9. if cat student | grep "^$1#" > /dev/null
  10. then
  11.         cat student | grep -v "^$1" > student$$
  12.         mv student$$ student
  13. else
  14.         echo 该学生不存在
  15.         exit 1
  16. fi
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-31 14:10:47 | 显示全部楼层
谢谢大大...有点看不懂哦...哈..慢慢研究下..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表