公共资源管理与共享子系统——公共资源管理模块(转载)



目 录
摘要……………………………………………………………………………………1
一、      引言…………………………………………………………………………….1
(一)开发公共资源管理与共享系统的意义………………………………………….2
(二)应用技术简介…………………………………………………………………….2
1. 开发工具(Microsoft Visual Studio.net、C#、SQL SEVER)的简介
2. 关键技术ADO.NET的介绍
二、需求分析…………………………………………………………………………5
三、数据库设计……………………………………………………………………….6
四、系统设计…………………………………………………………………………8
(一)体系结构………………………………………………………………………….8
(二)公共资源管理模块详细设计…………………………………………………….9
(三)数据访问层的部分代码…………………………………………………….......9
五、结论…………………………………………………………………………….14
六、致谢…………………………………………………………………………….14
七、主要参考文献与附录…………………………………………………………. 14
(一)主要参考文献……………………………………………………………….......14
(二)附录………………………………………………………………………….......15
附录1:院系与学生之间关系的ER图……………………………………………...15
附录2:权限控制的ER图…………………………………………………………...16
附录3:体系结构图………………………………………………………………….16
附录4:公共资源管理模块中资源的调用过程图………………………………….17
 
 
 
 
 
 
 
 
公共资源管理与共享子系统
    ——公共资源管理模块
 
郑亚芬
西南师范大学计算机与信息科学学院,重庆 400715
 
摘要:公共资源管理与共享系统CResource提供了MyCollege.Net中各种应用系统最常使用的公共数据资源,应用系统可以通过网络受控的使用这些数据资源。不同的应用系统对于不同的资源类型及资源属性有不同的访问权限。这样各应用系统的开发将有很强的灵活性,开发者可以针对该系统未来的运行环境(如网络状况等)制定出相应的数据访问方案,在减少数据的冗余性,增强数据更新的同步性,数据使用的跨平台性等方面获得最好的效果。
Abstract:The system of common resource management & share provides common data resource for kinds of application systems in Mycollege.Net. In control of qualification, application systems can use these data resource by network .Different application systems have their access qualifications for different resource types and resource attributions. So, programmers can flexibly develop various application systems and they also can design proper data access scenarios in according to the running environments in the future (e.g. the statements of network).Besides these advantages, our system can reduce data redundancy, enhance the synchronization of the data update and application systems can use data in different develop environments.
关键词  公共资源,管理,共享,信息,权限
 
一、       引言
 
公共资源管理与共享系统模块是由我们小组两人共同努力完成的。其中公共资源管理模块、数据库设计及部分数据访问层的代码由郑亚芬完成;公共资源共享模块、权限控制及部分数据访问层代码由帅琳娜完成。其它的工作由我们两人共同完成。
 
 
 
(一) 开发公共资源管理与共享系统的意义
 
公共资源管理与共享系统主要是对学生资料以及院系资料的管理。学校里各个管理系统都需要学生或院系的资料。比如说:图书馆管理系统,学校机房管理系统,学费收费管理系统等等。假如每个管理系统的数据库中都必须存储学生资料的话,那么同样的工作需要重复进行。这样不仅会造成资源的浪费,增加系统开发的难度;而且容易出现数据的冗余和数据访问的不一致。我们开发本系统就是为了解决上述这些问题。
本系统的开发是基于WebService模式的,目标是实现公共资源的集中管理,并通过网络实现公共资源在不同系统、不同平台下的共享。其它管理系统只需调用本系统提供的公共调用接口就可以直接访问所需的公共资源信息,没必要自己再设计此方面的数据库。这样一方面可以避免公共资源信息重复存储造成的资源浪费和数据冗余,另外也简化了其它管理系统的开发。
 
(二)应用技术简介
 
1.开发工具简介
   Microsoft Visual Studio.net 是全方位的开发平台,可以使用它来开发一般的应用程序、数据库应用程序,硬件的驱动程序或是Web-based应用程序。Visual Studio.net 包含了Visual Basic,C/C++以及C#等不同的语言,开发者可以根据需要选择采用何种语言,当然它也提供了不同程序语言间的整合性功能,例如COM+。另外在Visual Studio.net 中还提供了可视化的开发环境,你可以快速完成应用程序的接口设计。对于本系统我们采用Visual Studio.net 中的C#作为开发语言。
C#是一种面向对象的程序设计语言,它的基本语法与C/C++相同,其将软件开发中的逻辑分成5大部分:商业外观层(BusinessFacade),商业规则层(BusinessRules),数据访问层(DataAccess),Model层等。这种逻辑上的划分使得软件的开发更加方便,并使语句和数据库的访问分开,而由商业规则层单独提出规则,便于软件的扩展和维护。
Microsoft SQL Sever是高性能的客户/服务器关系数据库管理系统。有许多重要的新特性,如透明分布式处理、简明管理、基于对象嵌入与链接技术(0LE)的程序设计接口,以及与Internet的集成等。选择Microsoft SQL Sever最重要的原因是由于它的可扩展性。因为Microsoft SQL Sever是基于多线程并行数据库内核,它能够发挥附加处理器的优势。在许多情况下,只有使用特定的并行数据库和操作系统才能获得对对称多处理技术的支持。当然它还具备很高的安全性,对用户资料进行有效的保护。
2.开发本系统所使用的关键技术
本系统的代码编写完全采用了面向对象化的编程思想,其中很多函数类都是封装和继承的。我们的整个系统MyCollege.Net采用了. Net技术作为主要的开发技术,而作为MyCollege.Net中的一个模块——公共资源管理与共享系统,由其所实现的功能性质决定了其需要管理的数据量很大,提供给用户调用的数据也很多。为了保证用户能够高效准确的调用数据,我们采用了三层构建模式,并在数据访问层采用了ADO.NET技术。
 
ADO.NET技术的介绍
(1) ADO.NET的编程基础:
ADO.NET是在.NET Framework平台中负责数据存储的对象。
(2) 什么是ADO.NET技术及使用的必要性?
ADO.NET是Active  Data  Objects2.6(ADO)的后续版本。ADO.NET的主要目的是可以在.NET Framework中更容易的创建分布式的数据共享的应用程序。ADO.NET建立在如XML的业界的基础之上,就像ADO,它提供了一个数据访问接口,以便和OLE DB兼容的数据源进行通信,如SQL Server或Oracle。应用程序可以使用ADO.NET连接这些数据源,并检索,处理和更新数据。
可能大家已经学过ADO,那么在旧版本还能正常工作时,为什么还要学习新的数据访问对象模型呢?如果需要,也可以在NET.Framework中使用ADO,但需要为COM层方面付出一些性能上的代价,另外,NET.Framework并不支持COM Variant数据类型,这是ADO用于Recordset对象中的Field对象值的数据类型,也就是说,如果在.NET中使用ADO Recordset对象,为了访问数据,NETCLR就经常会对每个字段进行类型转换,如果要一直访问数据,进行这些类型转换就会造成太大的系统开销。
使用ADO.NET最重要的理由是可以获取一个真正断开连接的数据体系结构和XML的紧密集成和一个通用的数据表示法,可以将各种不同数据源中的数据组合起来,并优化了和数据库交互的功能,同样ADO.NET和NET.Framework的其它部分紧密的集成在一起,并充分利用NET.Framework中所有对象的层结构及设计模式。ADO.NET建立在ADO的基础之上,而且为数据访问工具集提供了许多工具。
(3) ADO.NET的特点
(a) ADO.NET使用不连接的数据结构;
(b) 数据被缓存到数据集内;
(c) 数据集独立于数据源;
(d) 数据保持为XML
         数据需要从数据存储区移动到数据集以及从数据集移动到各种组件,在ADO.NET中,传统数据的格式是XML。类似地,如果需要保持数据,则将其存储为XML,如果有XML文件,则可以像使用任何数据源一样使用它,并从它创建数据集。
        实际上,在ADO.NET,XML是数据的基本格式,ADO.NET数据API自动用数据集内的信息创建XML文件或流,并将它们发送给另一个组件,第二个组件可以调用类似的API将XML读回数据集。
(e) 使数据协议以XML为基础可提供一个多便利之处,XML是工业标准格式。这意味着你的应用程序数据组件可以与其他任何应用程序中其他任何组件交换数据,只要该组件理解为XML,许多应用程序被编写为可理解XML,为异类应用程序间交换提供空前高的水平。
XML是基于文本的,数据的XML表示形式不使用任何二进制信息,这使它可以通过任何协议发送,大多数防火墙将阻塞二进制信息,但通过将信息格式化为XML,组件仍可以方便的交换信息。对于大多数方案,不必知道XML便可以使用ADO.NET中的数据。ADO.NET自动根据需要将数据转换为XML或XML自动根据需要将数据转化为ADO.NET,便使用普通编程的方法与数据进行交互。
(f) 架构定义数据结构
尽管不必知道有关XML的任何事情便可以读写数据库和数据集,但也有一些事情使用XML恰是你追求的标准。不打算访问数据而要进行数据设计时的情况,也就是,在ADO.NET中使用元数据时,将直接使用XML。
数据集以XML表示,数据集的结构使用XML架构进行定义,就像数据集包含的数据可以从XML加载和序列化为XML,数据集的结构也可以从XSD架构和序列化为XSD架构。
对ADO.NET中的数据进行的大部分操作,不必深入钻研架构。通常,基于Visual Studio.NET工具将可以在可视化设计器中进行操作,并根据需要生成和更新架构。
 
 
 
 
二、需求分析:
 
功能描述
公共资源管理与共享系统主要完成学生信息管理,院系信息管理及共享权限控制三大功能。
1、学生信息管理包括以下的内容:
(1) 学生信息:姓名,学号,性别,身份证号码,专业,院系,宿舍电话,宿舍地址,家庭电话,生源地,家庭住址等信息。
(2) 功能模块:
(a) 添加信息
(b) 修改信息
(c) 删除信息
(d) 查询信息
 
2、  院系信息管理包括以下内容:
(1) 院系信息:包含学院名,代号,创建时间等。所开设专业资料包含专业名,代号,创建时间等。
(2) 功能模块:
(a) 添加信息
(b) 修改信息
(c) 删除信息
(d) 查询信息
3、  访问权限控制:
该系统的所有数据存取功能都将通过网络调用接口向外部公开,因此可以说这是一个纯粹的开放式系统。不同的应用系统都可以使用其中的数据资源,但对于不同的管理系统,它们使用本系统的数据权限不一样。
(1) 权限控制属性包括:应用系统的USID,资源类型,属性,可读,可写。
(2) 功能模块:        
可读属性:只包含查询操作权限。由应用系统的USID和资源类型这两个属性来共同决定用户只能进行相应的查询功能,而且查询返回的相关资料类型与数量也是由应用系统的USID和资源类型来决定的。
可写属性:包含了查询,添加,删除,修改等操作权限。由应用系统的USID和资源类型这两个属性来共同决定用户具有以上相关操作的权限,而且也是根据应用系统的USID和资源类型来决定对哪些资料进行以上操作。
 
三、数据库设计
由于本系统主要是对学生信息,院系信息的管理,同时也对应用系统的共享权限进行控制,所以这里涉及到对以上三种资料信息的物理数据库设计。
 
1、院系和学生信息数据库的设计
(1) 首先是学生信息和院系信息之间的两个关系,它们的ER图如附录1。
(2) 根据附录1进行如下描述:
(a) 学院(TDepts)和专业(TMajors)之间是一对多的关系:
TDepts(学院代码DeptId,学院名称DeptName),其中学院代码DeptId是主码;
TMajors(专业代码MajorId,专业名称MajorName,学院代码DeptId),其中专业代码MajorId是主码,学院代码DeptId是外码。
(b) 专业(TMajors)和学生(TStudents)之间是一对多的关系:
TStudents(学号SNumber,姓名SName,性别Sex,民族Nation,专业代码MajorId,年级Grade,生日Birthday,身份证号码IDCard),其中学号SNumber是主码,专业代码MajorId是外码。
(3) 根据上述的分析对学生和院系资料列出以下三张表:
(a) 学生信息表(TStudents)
 
 
列名
数据类型
长度
是否允许空
    PK
SNumber
nvarchar
20
N
    FK
MajorID
int
4
N
 
SName
nvarchar
20
N
 
IDCard
nvarchar
20
Y
 
Nation
nvarchar
10
N
 
Sex
nvarchar
10
N
 
Grade
int
4
N
 
Birthday
datetime
8
Y
学生表用来存储学生的基本信息。如表所示,学生具有八个基本属性,其属性类型、长度及是否为空上表已表明。
(b) 学院信息表(Ddepts)
 
 
列名
数据类型
长度
是否允许空
PK
DeptId
int
4
N
 
DeptName
char
50
N
学院信息表用来存储学院的基本信息。如表所示,学院具有两个基本属性。其属性类型、长度及是否为空上表已表明。
(c) 专业信息表(TMajors)
 
 
列名
数据类型
长度
是否允许空
PK
MajorID
int
4
N
FK
DeptId
int
4
N
 
MajorName
char
50
N
专业信息表用来存储专业的基本信息。如表所示,专业具有三个基本属性。其属性类型、长度及是否为空上表已表明。
2、权限信息数据库的设计
(1) 这个权限的设置是保证外部系统受限的访问本系统中的公共资源。
(2) 它的ER图如附录2。
(3) 根据上面的ER图进行如下描述:
(a) TControl代表权限控制这个实体,它与访问本系统数据资源的外部系统发生联系。
(b) USID(主码)代表应用系统的身份认证这个属性,Resource Type(主码)代表资源类型这个属性。这两个主码属性决定了用户对我们这个子系统资源的控制权大小。
(c) Attribute代表了数据资源的各个属性。
(d) CanRead代表了用户对我们资源是否具有可读这一属性。
(e) CanWrite代表了用户对我们资源是否具有可写这一属性。
权限控制表(Tcontrol)                                                                 
 
列名
数据类型
长度
是否允许空
PK
USID
int
10
N
PK
ResourceType
nvarchar
50
N
 
Attribute
char
40
N
 
CanRead
boolean
6
Y
 
CanWrite
boolean
6
Y
权限控制表用来存储外部系统对本系统中的公共资源所具有的共享权限。如表所示,权限控制表具有五个基本属性。其属性类型、长度及是否为空上表已表明。
 
四、系统设计
 
(一)体系结构
为了实现本系统的两个主要功能,我们采用了三层设计模式:用户界面层、中间层和物理数据库层。其中,中间层又分为:WebService层,商务外观层(Business Façade),商务逻辑层(Business Rules)和数据库访问层(DataAccess)。商务外观层和商务逻辑层都可以访问数据库访问层。商务外观层主要是针对用户的,而WebService层则是面向不同的应用系统。本子系统设计结构的构建参考了整个系统的体系结构,是Mycollege.Net 体系结构的一个简化
(1) 结构图如附录3。
(2) 根据结构图对各层描述如下:
(a) 商务外观层(BusinessFacade)
它主要是封装应用系统中分散的商务逻辑,给用户表示层提供一个简洁的无状态的界面。它实际上是对需求在函数接口层的精确描述,即该层类中的函数完全表达了需求中涉及的功能。这样,一旦该层设计完成,表示层的开发者就可以利用该层进行独立的界面开发。
在我们这个子系统中,它主要面向调用公共数据资源管理模块的用户。当某个用户通过界面层对我们公共数据资源进行操作时,该模块首先把它传递给商务外观层,接着商务外观层就将该用户的需求传递给数据库访问模块,以便数据库访问模块执行相应的操作,然后商务外观层再对数据库访问模块返回的值做出响应,若操作成功则向用户返回成功信息,否则返回错误信息。
(b) 商务逻辑层(BusinessRules)
BusinessRules层主要是表达商务规则。在本子系统模块中,它主要设置用户对数据资源共享时的权限规则。
(c) WebService模块
WebService模块是一个开放函数接口。它主要面向共享本子系统数据资源的应用系统。当某个应用系统通过WebService模块调用公共资源时,该模块就把应用系统的要求传递给商务逻辑层,商务逻辑层应用其规则首先判断它的访问权限,若权限允许,商务逻辑层就将该应用系统的要求传给数据库访问模块,以便数据库访问模块执行相应的操作。然后WebService模块再对数据库访问模块返回的值做出响应,若操作成功则向用户返回成功信息,否则返回错误信息。
(d) 数据库访问模块(DA)
数据库访问模块(DA) 的主要功能是直接对数据库执行各种操作,如向数据库中添加新的信息,删除数据库中的某个信息,按要求查询信息及修改数据库中的信息等,同时根据执行情况返回一个相应的值。
(e) 物理数据库
所有的公共资源都存储在物理数据库中。
 
(二)公共资源管理模块详细设计
用户对公共资源管理模块中的数据资源进行调用的过程:
(a) 公共资源管理模块中资源的调用过程见附录4。
(b) 根据附录4描述如下:
若要增加一个新学生,首先把该学生的各种信息输入给用户界面层,用户界面层把接收到的学生信息传递给中间层中的商务外观层,由它来判断这些信息的有效性。若允许增加,商务外观层就把该任务交给数据库访问层来完成。数据库访问层根据获得的这些信息在系统数据库中增加该学生的记录,并返回一个执行结果。这时,商务外观层对数据库访问层返回的值进行分析,以便向用户界面层做出相应的响应。
 
(三) 数据访问层的部分代码
 
数据库访问层中对学生信息进行操作的代码:
namespace DataAccess
{
    /// <summary>
    /// Students 的摘要说明。
    /// </summary>
    public class Students
    {
       public Students()
       {
           //
           // TODO: 在此处添加构造函数逻辑
           // 
       }
 
public int Add(string snumber,string sname,string sex,string nation,string major,int grade)
       {
           //首先根据专业名查找对应的专业编号,为下面的调用准备参数
           SqlParameter m=new SqlParameter("@MajorName",SqlDbType.VarChar);
           m.Value=major;
           SqlDataReader reader=SqlHelper.ExecuteReader(DAConfig.ConnectionString,CommandType.Text,
"select MajorID from TMajors where MajorName=@MajorName",m);
           if(reader.Read()==false)
              return 0;
           int majorID=reader.GetInt32(0);
           //为插入数据准备参数
           SqlParameter[] ms=new SqlParameter[6];
           ms[0]=new SqlParameter("@SNumber",SqlDbType.VarChar);
           ms[1]=new SqlParameter("@SName",SqlDbType.VarChar);
           ms[2]=new SqlParameter("@Sex",SqlDbType.VarChar);
           ms[3]=new SqlParameter("@Nation",SqlDbType.VarChar);
           ms[4]=new SqlParameter("@MajorID",SqlDbType.Int);
           ms[5]=new SqlParameter("@Grade",SqlDbType.Int);
           ms[0].Value=snumber;
           ms[1].Value=sname;
           ms[2].Value=sex;
           ms[3].Value=nation;
           ms[4].Value=majorID;
           ms[5].Value=grade;
           //插入数据库
           int ret=SqlHelper.ExecuteNonQuery(DAConfig.ConnectionString,CommandType.Text,
"insert into TStudents(SNumber,SName,Sex,Nation,MajorID,Grade) values(@SNumber,@SName,@Sex,@Nation,@MajorID,@Grade)",ms);
          
           return ret;
       }
       public int Remove(string snumber)
       {
           //准备参数
           SqlParameter m=new SqlParameter("@SNumber",SqlDbType.VarChar);
           m.Value=snumber;
           //删除数据
           int ret=SqlHelper.ExecuteNonQuery(DAConfig.ConnectionString,CommandType.Text,
"delete from TStudents where SNumber=@SNumber",m);
           return ret;
       }
       public int SetSingleInfo(string snumber,string field,object info)
        {
           if(field=="MajorName")//处理特殊情况
           {
              //首先根据专业名查找对应的专业编号,为下面的调用准备参数
              SqlParameter m=new SqlParameter("@MajorName",SqlDbType.VarChar);
              m.Value=info;
              SqlDataReader reader=SqlHelper.ExecuteReader(DAConfig.ConnectionString,CommandType.Text,
"select MajorID from TMajors where MajorName=@MajorName",m);
              if(reader.Read()==false)
                  return 0;
              int majorID=reader.GetInt32(0);
 
              SqlParameter[] ms=new SqlParameter[2];
              ms[0]=new SqlParameter("@MajorID",SqlDbType.Int);//这里使用了前面获取的类型
               ms[1]=new SqlParameter("@SNumber",SqlDbType.NVarChar);
              ms[0].Value=majorID;
              ms[1].Value=snumber;
              //
              int ret=SqlHelper.ExecuteNonQuery(DAConfig.ConnectionString,CommandType.Text,
"update TStudents set MajorID=@MajorID where SNumber=@SNumber ",ms);
              return ret;
           }
           else//处理一般情况
           {
              System.Type type=null;
              //首先要获取该属性的数据类型
              //这里查询返回了所有的数据集,效率很低,应该使用某一函数获取表的模式来进行改进
              DataSet pre=SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,
"select * from TStudents",null);
              foreach(DataColumn col in pre.Tables[0].Columns)
              {
                  if(col.ColumnName==field)
                  {
                     type=col.DataType;
                     break;
                  }
              }
 
              SqlParameter[] ms=new SqlParameter[2];
              //将系统数据类型转换为SQL SERVER中的标准数据类型
              ms[0]=new SqlParameter("@"+field,SqlDbTypeConvert.ConvertType(type));//这里使用了前面获取的类型
              ms[1]=new SqlParameter("@SNumber",SqlDbType.VarChar);
              ms[0].Value=info;
              ms[1].Value=snumber;
              //查询并返回数据集
              int ret=SqlHelper.ExecuteNonQuery(DAConfig.ConnectionString,CommandType.Text,
"update TStudents set "+field+"=@"+field+" where SNumber=@SNumber ",ms);
              return ret;
           }
       }
       public DataSet GetStudentBySNumber(string snumber)
       {
           //准备参数
           SqlParameter[] ms=new SqlParameter[1];
           ms[0]=new SqlParameter("@SNumber",SqlDbType.NVarChar);
           ms[0].Value=snumber;
           string sql="select * from VStudents where SNumber=@SNumber ";
           //查询并返回数据集
           return SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,sql,ms);
       }
       public DataSet GetStudentBySName(string sname)
       {
           //准备参数
           SqlParameter[] ms=new SqlParameter[1];
           ms[0]=new SqlParameter("@SName",SqlDbType.NVarChar);
           ms[0].Value="%"+sname+"%";
           string sql="select * from VStudents where SName like @SName ";
           //查询并返回数据集
           return SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,sql,ms);
       }
       public DataSet ListStudentsByMajor(string major,int grade)
       {
           //准备参数
           SqlParameter[] ms=new SqlParameter[2];
           ms[0]=new SqlParameter("@MajorName",SqlDbType.NVarChar);
           ms[1]=new SqlParameter("@Grade",SqlDbType.Int);
           ms[0].Value=major;
           ms[1].Value=grade;
           //查询并返回数据集
           return SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,"select * from VStudents where MajorName=@MajorName and Grade=@Grade",ms);
       }
       public DataSet ListStudentsByDept(string dept,int grade)
       {
           //准备参数
           SqlParameter[] ms=new SqlParameter[2];
           ms[0]=new SqlParameter("@DeptName",SqlDbType.NVarChar);
           ms[1]=new SqlParameter("@Grade",SqlDbType.Int);
           ms[0].Value=dept;
           ms[1].Value=grade;
           //查询并返回数据集
           return SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,"select * from VStudents where DeptName=@DeptName and Grade=@Grade",ms);
       }
       public DataSet ListAllStudentsByGrade(int grade)
       {
           //准备参数
           SqlParameter[] ms=new SqlParameter[1];
           ms[0]=new SqlParameter("@Grade",SqlDbType.Int);
           ms[0].Value=grade;
           //查询并返回数据集
           return SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,"select * from VStudents where  Grade=@Grade",ms);
       }
       public DataSet ListAllStudentsInCollege()
       {
           //查询并返回数据集
           return SqlHelper.ExecuteDataset(DAConfig.ConnectionString,CommandType.Text,"select * from VStudents",null);
       }   }   }   
五、结论
本系统模块的所有开发过程均是根据软件工程的思想和要求进行的,需求分析、系统设计、数据库设计和编码等方面都是严格按照客观分析,认真设计的宗旨来完成的。
本系统是在Microsoft Visual Studio.net的环境下,采用了基于.NET的C#编程语言进行开发的,同时采用了SQL SERVER 2000数据库来对数据库进行开发与设计。
由于时间关系,我们只实现了完整的数据库及公共资源共享这一块,并与其它子系统成功集成。公共资源管理模块及公共资源共享模块中的权限管理逻辑层尚未实现。
通过这次毕业设计,我们认识到了理论与实践相结合的重要性,并学会了应用新的技术去解决问题,比如我们的开发环境和编程语言在以前的学习中从未接触过,但通过查阅资料和编程实践,我们现在已经对.net的各种性能及C#的使用技巧有了一定的了解。除此之外,我们还体会到了良好的团队精神对工作的有效运作起到了一个关键性作用。这些都将使我们在以后的学习和工作中受益。
六、致谢
本次毕业设计能够顺利完成离不开我们指导老师邹显春老师的指导和帮助,卢心红老师、陈武老师、闻晓老师、李运刚老师在此过程中也给予了极大的帮助,对他们的帮助表示衷心的感谢。还有小组所有成员对我的大力支持,在此对他们表示衷心的感谢!
 
七、主要参考文献与附录
(一)主要参考文献
 
[1]  郭胜.C#.NET程序设计,清华大学出版社,2002
[2]   嘉木工作室.C#编程思想, 机械工业出版社,2003
[3]  凡若切提..NET数据服务C#高级编程 , 清华大学出版社,2002
[4]  巴韦尔.VB.NET高级编程 ,  清华大学出版社,2002
[5]   张莉.SQL Server数据库原理及应用教程  ,清华大学出版社,2003
[6]   闪四清.SQL Server2000数据库管理 ,  北京希望电子出版社,2002
[7]   梁方明.SQL Server2000数据库编程 ,  北京希望电子出版社,2002
 
 
 
 
 
(二)附录
附录1:院系与学生之间关系的ER图
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
附录2:权限控制的ER图
 
 
附录3:体系结构图
 
  
附录4:公共资源管理模块中资源的调用过程图

posted on 2005-08-15 09:50  junetan  阅读(1284)  评论(3编辑  收藏  举报

导航