学生信息管理系统简介

双选信息管理系统简介

本项目组织者：陈辉东；

开发者：陈辉东、李波、李博、闫会鹏、马晓希、蒙春颖
班级： 通信01-2班 电话：7392086 2003-12-15

开发工具：VisualC++6.0+Asp+Access

运行环境：Windows2000\98+Access2000\98

系统开发的总体任务是实现单位与学生的网上签约的系统化、规范化和自动化。系统功能的分析是系统开发的总体任务的基础上完成的。本系统需要完成的功能主要有：

●个人信息的输入，包括个人基本信息、家庭住址、科研情况和参赛情况、爱好等。

●个人信息的查询，包括个人基本信息、所属专业、学生来源等。

● 个人信息的修改。

● 公司信息的输入，包括公司的名称、公司的性质、公司的主页、公司的简介、公司的电话等。

●公司信息的查询。

●公司信息的修改。

●招聘信息输入，包括招聘公司名称、招聘专业、各专业所需人数、基本工资等。

●招聘信息的查询。

●招聘信息的修改。

●求职信息输入包括个人信息、所学专业、期望工作地点、工资

及求职人是否签约等。

●求职信息的查询。

●求职信息的修改。

●签约信息输入包括已签约人的信息、签约公司、签约条款、求职人意见、公司方意见、签约时间等。

●签约信息的查询。

●签约信息的修改。

●违约信息输入包括违约人姓名、违约公司、应负的责任、违约时间等。

●违约信息的查询。

●违约信息的修改。

●数据库信息输入，包括个人信息输入，公司信息输入等等。

●数据库信息查询，包括数据库优化、数据库打开、数据库修复等。

●数据库修改


关于SQL语言操作速查手册

本帮助文档是从我的软件工程大作业——双选信息管理系统上取下来的，我重新整理了一下，把SQL语言操作的大部分内容都包括进去了，因此把它作为手头一个‘速查手册’是挺不错的！

文档里面的内容是从《数据库系统概论（第三版）》（萨师煊 王珊，高等教育出版社，2003.2）中摘录下来的，每一个SQL操作至少带有一个例子，很值得一看！

本手册的完成，还得感谢我的几个同学：李雪、张丽娟、朱小娟、谭玉珍！我在这里对她们给我提供的帮助表示感谢！

本文档只作为个人学习使用，不得用于商业用途！版权归作者所有！

禁止对该文档进行方向编译！违者必究！

陈辉东

2004-2-28


SQL语言操作参考 3.2.1 定义、删除与修改基本表

SQL语言操作参考

3.2.1 定义、删除与修改基本表
一、定义基本表
SQL语言使用CREATE TABLE语句定义基本表，其一般格式如下：
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]……
[，<表级完整性约束条件>])；

例1 建立一个“学生”表student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空，值是唯一的，并且姓名取值也唯一。
CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE, /*列级完整性约束条件，Sno取值唯一，不许取空值*/
Sname CHAR(20) UNIQUE,
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15));
定义表的各个属性时需要指明其数据类型及长度。
SMALLINT 半字长二进制整数。
INTEGER或INT 全字长二进制整数。
DECIMAL(p[,q]) 压缩十进制数，共P位，其中小数后有q
或DEC(p[,q]) 位。0<=q<=p<=15,q=0时可以省略不写。
FLOAT 双字长浮点数。
CHARTER(n)或CHAR(n) 长度为n的定长字符串。
VARCHAR(n) 最大长度为n的变长字符串。
GRAPHIC(n) 长度为n的定长图形字符串。
VARGRAPHIC(n) 最大长度为n的变长图形字符串。
DATE 日期型，格式为YYYY-MM-DD。
TIME 时间型，格式为HH.MM.SS。
TIMESTAMP 日期加时间。


SQL语言操作参考 二、修改基本表

二、修改基本表
SQL语言使用ALTER TABLE 语句修改基本表，其一般格式如下：
ALTER TABLE <表名>
[ADD<新列名><数据类型>[完整性约束]]
[DROP<完整性约束名>]
[MODIFY<列名><数据类型>]；

例2 向Student表增加“入学时间”列，其数据类型为日期型。
ALTER TABLE Student ADD Scome DATE；
例3 将年龄的数据类型改为半字长整数。
ALTER TABLE Student MODIFY Sage SMALLINT;


SQL语言操作参考 三、删除基本表

三、删除基本表
当某个基本表不再使用时，可以使用DROP TABLE语句删除它。其一般格式为：
DROP TABLE <表名>;
例4 删除Student表。
DROP TABLE Student;


SQL语言操作参考 一、建立索引

3.2.2 建立与删除索引
一、建立索引
SQL语言中，建立索引使用CREATE INDEX语句，其一般格式为：
CREATE[UNIOUE][CLUSTER]INDEX<索引名>
ON <表名>(<列名>[<次序>][，<列名>[<次序>]]……)；
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER 表示要建立的索引是聚簇索引，所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。

例如： 执行下面的CREATE INDEX语句：
CREATE CLUSTER INDEX Stusname ON Student(Sname)；
将会在Student 表的Sname(姓名)列上建立一个聚簇索引，而且Student 表中的记录将按照Sname值的升序存放；

例5 为学生-课程数据库中的Student，Course,SC三个表建立索引。其中Student 表按学号升序建唯一索引，表Course按课程号升序建唯一 索引，SC表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);


SQL语言操作参考 二、删除索引

3.2.2 建立与删除索引
二、删除索引
SQL语言中，删除索引使用DROP INDEX语句，其一般格式为：
DROP INDEX <索引名>

例6 删除Student表的Stusname索引
DROP INDEX Stusname；


SQL语言操作参考 3.3.1 单表查询

3.3 查询
查询的一般格式为：
SELECT[ALL|DISTINCT] <目标列表达式>[，<目标列表达式>]……
FROM<表名或视图名>[,<表名或视图名>]……
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]]；
3.3.1 单表查询
一、选择表中若干列
1.查询指定列
例7：查询全体学生的学号与姓名。
SELECT Sno，Sname
FROM Student；
2.查询全部列
例8 查询全体学生的详细记录。
SELECT *
FROM Student； 等价于： SELECT Sno，Sname，Ssex,Sage,Sdept
FROM Student;
3.查询经过计算的值
例9 查全体学生的姓名及其出生年份
SELECT Sname，1996-Sage
FROM Student；


SQL语言操作参考 3.3.1 单表查询 2.查询满足条件的元组。

3.3 查询
查询的一般格式为：
SELECT[ALL|DISTINCT] <目标列表达式>[，<目标列表达式>]……
FROM<表名或视图名>[,<表名或视图名>]……
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]]；

二、选择表中的若干元组
1.消除取值重复的行
两个本来并不完全相同的元组，投影到指定的某些列上后，可能变成相同的行了。
例 10 查询选修了课程的学生学号。
SELECT Sno
FROM SC;
该查询结果里包含了许多重复的行。如果想去掉结果表中的重复项，必须指定DISTINCT短语：
SELECT DISTINCT Sno
FROM SC；
如果没有指定DISTINCT短语，则缺省为ALL，即保留结果表中的重复的行。


SQL语言操作参考 3.3.1 单表查询 2.查询满足条件的元组。

3.3 查询
查询的一般格式为：
SELECT[ALL|DISTINCT] <目标列表达式>[，<目标列表达式>]……
FROM<表名或视图名>[,<表名或视图名>]……
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]]；

二、选择表中的若干元组

2.查询满足条件的元组。
(1)比较大小
查询满足条件的元组可以通过WHERE子句实现。
用与进行比较的运算符一般包括：
=(等于)，>(大于),<(小于),>=(大于等于),<=(小于等于),!=或<>(不等于)。
还包括：!>(不大于),!<(不小于)。
例11 查询所有年龄在20岁以下的学生姓名及年龄。
SELECT Sname,Sage
FROM Student
WHERE Sage<20;
或 SELECT Sname,Sage
FROM Student
WHERE NOT Sage>=20;
(2)确定范围
谓词BETWEEN……AND……和NOT BETWEEN……AND……可以用来查询属性值在（或不在）指定范围内的元组，其中BETWEEN后是范围的下限（即低值），AND后是范围的上限（即高值）。
例12 查询年龄不在20 ~23岁之间的学生姓名、系别和年龄。
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
(3)确定集合
谓词IN可以用来查找属性值属于指定集合的元组。
例13 查询信息系（IS）、数学系（MA）和计算机科学系（CS）学生的姓名和性别。
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('IS'，'MA'，'CS')
(4)字符匹配
谓词LIKE可以进行字符串的匹配。其一般格式如下：
[NOT]LIKE’<匹配串>‘[ESCAPE’<换码字符>']
.%(百分号) 代表任意长度（长度可以为0）的字符串。例如a%b表示以a开头，以b结尾的任意长度的字符串。
._(下横线) 代表任意单个字符。
例14 查询学号为95001的学生的详细情况。
SELECT *
FROM Student
WHERE Sno LIKE'95001';
等价于：SELECT *
FROM Student
WHERE Sno ='95001';
例15 查询名字第二个字为“阳”字的学生的姓名和学号。
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE'_ _阳%';
如果用户查询的字符串的字符串本身就含有%或_ _,这时就要使用ESCAPE '<换码字符>'短语对通配符进行转义了。
例16 查询以“DB_”开头，且倒数第3个字符为i的课程的详细情况。
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i_ _'ESCAPE'\';
(5)涉及空值的查询
例17 查询所有有成绩的学生学号和课程号。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL;
(6)多重条件查询
逻辑运算符AND和OR可用来联结多个查询条件。AND的优先级高于OR，但用户可以用括号改变优先级。
例18 查询计算机系年龄在20岁以下的学生姓名。
SELECT Sname
FROM Student
WHERE Sdept='cs'AND Sage<20;


SQL语言操作参考 3.3.1 单表查询 三、对查询结果排序

3.3 查询
查询的一般格式为：
SELECT[ALL|DISTINCT] <目标列表达式>[，<目标列表达式>]……
FROM<表名或视图名>[,<表名或视图名>]……
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]]；

3．3．1 单表查询
三、对查询结果排序
用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序（ASC）或
降序（DESC）排列，缺省值为升序。
例：查询选修了3毫课程的学生的学号及成绩，查询结果按分数的降序排列。
SELECT Sno,Grade
FROM SC
WHERE Cno=’3’
ORDER BY Grade DESC;


SQL语言操作参考 3.3.1 单表查询 四、使用集函数

3.3 查询
查询的一般格式为：
SELECT[ALL|DISTINCT] <目标列表达式>[，<目标列表达式>]……
FROM<表名或视图名>[,<表名或视图名>]……
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]]；

3．3．1 单表查询

四、使用集函数
SQL提供的集函数主要有：
COUNT([DISTINCT|ALL]*) 统计元组个数
COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数（空值不计）
SUM ([DISTINCT|ALL]<列名>) 计算一列值的总和（此列必须是数值型）
AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值（此列必须是数值型）
MAX([DISTINCT|ALL]<列名>) 求一列值中的最大值
MIN([DISTINCT|ALL]<列名>) 求一列值中的最小值
例：查询学生总人数
SELECT COUNT(*)
FROM Student;
例：计算1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno=’1’;


SQL语言操作参考 3.3.1 单表查询 五、对查询结果分组

3.3 查询
查询的一般格式为：
SELECT[ALL|DISTINCT] <目标列表达式>[，<目标列表达式>]……
FROM<表名或视图名>[,<表名或视图名>]……
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]]；

3．3．1 单表查询
五、对查询结果分组
GROUP BY子句将查询结果表按某一列或多列值分组，值相等的为一组。如果
分组后还要求按一定的条件对这些组进行筛选，最终只输出满足指定条件的
组，则可以使用HAVING短语指定筛选条件。
例：求各个课程号及相应的选课人数，且只输出超过3人的课号
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno
HAVING COUNT(Sno)>3;


SQL语言操作参考 3．3．2 连接查询

3．3．2 连接查询
若一个查询同时涉及两个以上的表，则称之为连接查询。
一、等值与非等值连接
当连接运算符为＝时，称为等值连接。
若在等值连接中把目标列中重复的属性列去掉则为自然连接。
例：查询每个学生及其选修课程的情况
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno;
二、外连接
例：SELECT Student.Sno,SNAME,Cno,Grade
FROM Student LEFT JOIN SC
WHERE Student.Sno=SC.Sno;
三、复合条件连接
WHERE子句中可以有多个连接条件，称为复合条件连接。
例：查询选修2号课程且成绩在90分以上的所有学生
SELECT Student.Sno,SNAME
FROM Student,SC
WHERE Student.Sno=SC.Sno AND SC.Cno=’2’ AND SC.Grade>90;


SQL语言操作参考 3．3．3 嵌套查询

 3．3．3 嵌套查询
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询
称为嵌套查询。
一、 带有IN谓词的子查询
例：查询与刘晨在同一个系学习的学生
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname=’刘晨’）；
二、 带有比较运算符的子查询
例：SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept=(SELECT Sdept
FROM Student
WHERE Sname=’刘晨’)；


SQL语言操作参考 3．3．3 嵌套查询

三、 带有ANY或ALL谓词的子查询
例：查询其他系中比信息系某一学生年龄小的学生姓名和年龄
SELECT Sname,Sage
FROM Student
WHERE Sage<ANY(SELECT Sage
FROM Student
WHERE Sdept=’IS’);

四、 带有EXISTS谓词的子查询
EXISTS代表存在量词。带有EXISTS谓词的子查询不返回任何数据，只产生逻
辑真值“true”或逻辑假值“false”。

例：查询所有选修了1号课程的学生姓名
SELECT Sname
FROM Student
WHERE EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno=’1’);


SQL语言操作参考 3.3.4 集合查询

3.3.4 集合查询
多个SELECT语句的结果可进行集合操作。集合操作主要包括UNION、INTERSECT、MINUS。
例45 查询计算机科学系的学生及年龄不大于19的学生。
SELECT *
FROM Student
WHERE Sdept='CS'
UNION
SELECT *
FROM Student
WHERE Sage<=19
使用UNION将多个查询结果合并起来时,系统会自动去掉重复元组.


SQL语言操作参考 3.4 数 据 更 新

3.4 数 据 更 新
SQL中数据更新包括插入数据、修改数据和删除数据三条语句。
3.4.1 插入数据
SQL的数据插入语句INSERT通常有两种形式。

一、插入单个元组
插入单个元组的INSERT语句的格式为：
INSERT
INTO<表名>[<属性列1>[,<属性列2>...)]
VALUES(<常量1>[,<常量2>]...)
例1 插入一条选课记录('95020','1')
INSERT
INTO SC(Sno,Cno)
VALUES('95020','1')
新插入的记录在Grade列上取空值。

二、插入子查询结果
插入子查询结果的INSERT语句的格式为：
INSERT
INTO<表名>[<属性列1>[,<属性列2>...)]
子查询；
例3 对每一个系，求学生的平均年龄，并把结果存入数据库。
CREATE TABLE Deptage
(Sdept CHAR(15)
Avgage SMALLNT);
然后对表按系分组求平均年龄,再把系名和平均年龄存入新表中。
INTERT
INTO Deptage(Sedpt,Avgage)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;


SQL语言操作参考 3.4.2 修改数据

3.4.2 修改数据
修改操作语句的一般格式为:
UPDATE <表名>
SET<列名>=<表达式>[,<列名>=<表达式>]...
[WHERE<条件>];
一、 修改某一个元组的值
例4 将学生95001的年龄改为22岁。
UPDATE Student
SET Sage=22；
WHERE Sno='95001'；

二、修改多个元组的值
例5 将所有学生的年龄增加1岁。
UPDATE Student
SET Sage=Sage+1；

三、带子查询的修改语句
子查询也可以嵌套在UPDATE语句中。
例6 将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE 'CS'=
(SELECT Sdept
FROM Student
GROUP Student.Sno=SC.Sno);


SQL语言操作参考 3.4.3 删除数据

3.4.3 删除数据
删除语句的一般格式为:
DELETE
FROM<表名>
[WHERE<条件>];
一、删除某一个元组的值
例7 删除学号为95019的学生记录。
DELETE
FROM Student
WHERE Sno='95019';

二、删除多个元组的值
例8 删除所有的学生的选课记录
DELETE
FROM SC；

三、带子查询的删除语句
例9 删除计算机科学所有学生的选课记录。
DELETE
FROM SC
WHERE 'CS'=
(SELECT Sdept
FROM Student
GROUP Student.Sno=SC.Sno);

四、更新操作与数据库的一致性


SQL语言操作参考 3.5 视 图

3.5 视 图
3.5.1 定义视图
一、建立视图
SQL语言用CREATE VIEW命令建立视图，其一般格式为：
CREATE VIEW[<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION];
子查询不允许含有ORDER BY 子句和DISTINCT短语。
例1 建立信息系学生的视图。
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
本例中省略了视图IS_Student的列名,隐含了由子查询中SELECT子句中的三个列名组成。
二、删除视图
该语句的格式为：
DROP VIEW <视图名>;
例8 删除视图IS_S1
DROP VIEW IS_S1;
执行此语句后, IS_S1视图的定义将从数据字典中删除。


SQL语言操作参考 3.5.2 查询试图

3.5 视 图
3.5.2 查询试图
视图定义后，用户就可以象对基本表一样对视图进行查询了。
例1 在信息系学生的视图中找出年龄小于20岁的学生。
SELECT Sno，Sage
FROM IS_Student
WHERE Sage<20；
DBMS执行对视图的查询时，首先进行有效性检查，检查查询的表、视图等是否存在。如果
存在，则从数据字典中取出视图的定义，把定义中的子查询和用户的查询结合起来，转换成等
价的对基本表的查询，然后再执行修正了的查询。这一转换过程为视图消解（View Resoluti
on）。
本例转换后的查询语句为：
SELECT Sno，Sage
FROM Student
WHERE Sdept＝'IS' AND Sage<20；


SQL语言操作参考 3.5.3 更新视图

3.5 视 图
3.5.3 更新视图
更新视图是指通过视图来插入（INSERT）、删除（DELETE）和修改（UPDATE）数据。
例2.向信息系学生视图IS_S中插入一个新的学生记录，其中学号为95029，姓名为赵新，年龄
为20岁。
INSERT
INTO IS_Student
VALUES('95029','赵新',20);
转换为对基本表的更新：
INSERT
INTO Student（Sno，Sname，Sage，Sdept）
VALUES('95029','赵新',20,'IS');
这里系统自动将系名‘IS’放入VALUES子句中。


SQL语言操作参考 3.5.4 视图的作用

3.5 视 图
3.5.4 视图的作用
视图最终是定义再基本表之上的，对视图的一切操作最终也要转换为对基本表的操作。而
且对于非行列子集视图进行查询和更新时还有可能出现问题。既然如此，为什么还要定义视图
呢？这是因为合理使用视图能够带来许多好处。
1.视图能够简化用户的操作
2.视图使用户能以多种角度看待同一数据
3.视图对重构数据库提供了一定程度的逻辑独立性
4.视图能够对机密数据提供安全保护


SQL语言操作参考 3.3.5 SELECT语句的一般格式

3.3.5 SELECT语句的一般格式
SELECT语句的一般格式:
SELECT[ALL/DISTINCT]<目标列表达式>[别名][,<目标列表达式>[别名]]...
FROM<表名或视图名>[别名][, <表名或视图名>[别名]]...
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC/DESC]];
1.目标列表达式有以下可选格式:
(1)*
(2)<表名>.*
(3)COUNT([DISTINCT/ALL]*)
(4)[<表名>.]<属性列名表达式>[,[<表名>.]<属性列名表达式>]...


SQL语言操作参考 3.6 数据控制

3.6 数据控制
3.6.1 授权
SQL语言用GRANT语句向用户授予操作权限，GRANT语句的一般格式为： GRANGT<权限>[
,<权限>]…
[ON<对象类型><对象名>]
TO<用户>[,<用户>]…
[WITH GRANT OPTION];
其语义为：将对指定操作对象的指定操作权限授予指定的用户。

例1 把查询Student表的权限授给用户U1。
GRANT SELECT
ON TABLE Student
TO U1;


SQL语言操作参考 3.6.2 收回权限

3.6 数据控制
3.6.2 收回权限
授予的权限可以有DBA和其他授权者用REVOKE语句收回，REVOKE语句的一般格式为：
REVOKE<权限>[,<权限>]…
[ON<对象类型><对象名>]
FROM<用户>[,<用户>]…;

例7 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)NO TABLE Student FROM U4;


通信协会简介 通信协会

通信协会简介

通信协会，成立于2002年9月份，是隶属于计算机与通信工程学院的一个科技实践组织。通信协会的前身是通信活动小组。
通信协会的宗旨是当通信专业的先锋和引路人。 现有成员 31名,指导老师11 名.现任会长陈辉东，辅导员李忠伟 。内设网络信息部、通讯部、秘书部 、外联部 。

通信协会是一个年轻的组织，它的成长和壮大还需要您的支持。谢谢！


使用本系统时的提醒事项

使用双选信息管理系统时的提醒事项：

1.使用报表选择时得事先切换到报表视图；

2.使用报表选择时，若要用SQL语句，则须把复选框‘以SQL为主’选中；

3.使用查询时，表格和字段都必须先选中；使用精确查询或模糊查询时，必须先选中‘精确查询’或‘模糊查询’的单选框；

4.授权用户可以添加新的用户，但不能删除用户；只有系统管理员才有权删除用户。

5.为了避免误操作（如删除表格等），本系统设定只有管理员权限才能使用查询和SQL、签约回复操作，若您想使用本权限，请向陈辉东咨询管理员口令。


致 谢

在设计的整个过程中，我受到了很多老师、同学、好友的关心和帮助，我在此表示感谢：

李忠伟（辅导员）、崔学荣（老师）、李昕、李博、李雪、徐翠屏、吴敏、朱小娟、张丽娟、谭玉珍、樊学芹等等我平日的好友及我的寝室的好友。谢谢他们对我的帮助！

2003-11-10