深入体验C_项目开发 - 在线留言簿系统.doc_第1页
深入体验C_项目开发 - 在线留言簿系统.doc_第2页
深入体验C_项目开发 - 在线留言簿系统.doc_第3页
深入体验C_项目开发 - 在线留言簿系统.doc_第4页
深入体验C_项目开发 - 在线留言簿系统.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章在线留言簿系统 当今网络应用随处可见,QQ、MSN、博客、微博、留言板、论坛随着热门生活节奏的加快,人们将更多地使用网络进行交流,而作为交流方式之一的在线留言簿系统更是深受人们的青睐。通过在线留言簿系统,可以实现身处世界各地的人们的在线交流。本章将讲解在线留言簿系统的运行流程,并通过具体的实例来讲解其具体的实现过程。2.1 第一个盈利项目无论你是一位IT菜鸟,还是职场中的程序高手,只要从事IT这一行业,就会发现这行很容易揽到私活。我在学生时代就给一些公司干过网页设计、图像处理等一些兼职,当然是给他们做下手。自从学习程序之后,我就一直想着做一个真正的项目,不但能赚到钱,而且还能让我的产品能被客户所使用。现在回忆起来,我做的第一个真正的盈利项目应该是大四那年的在线留言簿系统。2.1.1 不速之客2005年12月1日,大雪纷飞 风流倜傥的学生会主席CH来到了我们的宿舍。他的来意十分明确,学校官方网站准备升级,要增加一个在线留言簿系统供学生使用。学校想让学生来完成这个升级工作,这样不但节约开支,而且可以检验学生的实践能力。CH在得到这个消息后,第一时间想到了我们宿舍,因为华东区大学生计算机竞赛团体一等奖来自我们宿舍。有了学生会主席的大力举荐,加上我们的实力,这个项目就很自然地被我们拿下了。2.1.2 组建团队2005年12月2日,小雪飘飘虽然项目不大,我们还是组建了一个小团队,团队成员如下。舍友A:一个来自偏远山区的孩子,家庭贫困。可能因为家庭的原因,酷爱学习,快成学习超人了。仅有的零花钱全都买了辅导书:PHP、Java、ASP、Photoshop、Dreamweaver、C+、Flash。最大优点是啥都懂,缺点是啥都不精通。项目的核心编码他是不能胜任了,但是其策划经验是最好的。任务:负责项目规划,撰写系统设计规划书。舍友B:父母是做生意的,最大的特点是有钱,大学四年花钱如流水。从小酷爱编程,在C语言和数据库领域有颇深的造诣。任务:负责文件概览工作。舍友C:一个运动狂人,喜欢惊险刺激的户外运动,每天早晨去操场跑马拉松,冬天穿短裤上街,从不生病,目标是攀登珠峰。任务:负责搭建并设计数据库。舍友D:一个普通城市家庭的孩子,戴着一副眼镜,文质彬彬。此人十分聪明,属于一看就会的类型,所以学习成绩很好。课余爱好广泛,喜欢看足球、踢足球。任务:负责留言系统的编码工作。我:目前还没有出人头地,充其量是IT界一只待飞的小鸟。任务:负责系统整体框架设计,协调项目中各个模块的进展,并设计数据库访问层。具体职能结构如图2-1所示。图2-1 职能结构图整个项目的具体操作流程是:项目规划文件概览搭建数据库设计数据库访问层编码实现。2.1.3 小会议2005年12月3日,晴今天我们召开了一个动员会议,并为未来项目的进展做了一个简单的规划。我们一致认为:本项目包括后台数据库的建立、维护以及前端应用程序的开发两个方面。应用程序的开发采用目前比较流行的ADO数据库访问技术,并将每个数据库表的字段和操作封装到相应的类中,使应用程序的各个窗体都能够共享对表的操作,而不需要重复编码,使程序更加易于维护,从而将面向对象的程序设计思想成功地应用于应用程序设计中,这也是本系统的优势和特色,具体流程如图2-2所示。图2-2 实现流程最后我做了一个简单的总结:“要开发一个在线留言簿系统,首先需要进行系统需求分析和总体设计,分析系统的使用对象和用户需求,设计系统的体系结构和数据库表结构,决定使用的开发工具和后台数据库,规划项目的开发进度等。”大家一致提议:A尽快作出规划书,后续工作将以规划书为基础进行扩展。2005年12月14日,晴空万里系统规划是一个项目的基础,是任何项目的第一步工作。原来我做项目时,往往看到功能之后就忙不迭地新建工程,并进行编码。但是总是忽略了这样或那样的要求,到最后需要经过多次修改,造成了欲速则不达。这次我吸取了以前的教训,在前期阶段就进行了一丝不苟的分析。2.2 系统概述和总体设计2005年12月5日,上午,阳光明媚会议完成后,整个团队就兴奋地马上开始了具体工作。今天一大早,A就做出了项目规划书。整个规划书分为两个部分,分别是在线留言簿模块功能原理和在线留言簿系统构成模块。2005年12月5日,下午按照预先分配的任务,由A负责系统概述和总体设计,这是我们整个项目的第一步,能不能打响第一枪就靠他了。我深知A向来做事比较拖沓,所以一开始就宣称会一直紧盯着他不放。他无奈之下,只好抽出一段时间将任务完成了。2.2.1 在线留言簿模块功能原理Web站点的在线留言簿系统的实现原理比较清晰明了,其主要操作是对数据库数据进行添加和删除操作。在其实现过程中,往往是根据系统的需求而进行不同功能模块的设置。在线留言簿模块的必备功能如下。(1) 提供信息发布表单供用户发布新的留言。(2) 将用户发布的留言添加到系统库中。(3) 在页面内显示系统库中的留言数据。(4) 对某条留言数据进行在线回复。(5) 删除系统内不需要的留言。2.2.2 在线留言簿系统构成模块一个典型的在线留言簿系统构成模块如下。q 信息发表模块:用户可以在系统上发布新的留言信息。q 信息显示模块:用户发布的留言信息能够在系统上显示。q 留言回复模块:可以对用户发布的留言进行回复,以实现相互间的交互。q 系统管理模块:站点管理员能够对发布的信息进行管理控制。上述应用模块的具体运行流程如图2-3所示。图2-3 在线留言簿系统运行流程图通过前面的介绍,读者可初步了解在线留言簿模块的原理和具体的运行流程。在接下来的内容中,将通过一个具体的在线留言簿模块实例,向读者讲解一个典型在线留言簿系统的具体设计流程。2005年12月7日,上午,晴空万里历时两天,A的系统规划工作大功告成,有了这个规划书,以后的工作就有目的性了。接下来,需要B马上规划出系统所需的项目文件,为后期的编码工作做好准备。2.3 规划系统文件2005年12月7日,下午,雪花飘飘经过前面两天的忙碌,总算有了一点成果。经过总体构成模块分析后,接下来就可以根据各构成功能模块来规划系统实现文件了。规划项目文件的工作由B来完成,一下午的时间他就在Visual Studio 2005中规划好了项目文件。2.3.1 规划文件2005年12月8日,上午,阳光明媚今天是个好天气,我的心情也充满了期待。在这个美好的日子里,B在网上光顾了很多留言簿系统,并且发表了多个留言信息。根据总结的模块功能和规划的结构图,B规划出了整个项目的实现文件,具体说明如下。q 系统配置文件:功能是对项目程序进行总体配置。q 样式设置模块:功能是设置系统文件的显示样式。q 数据库文件:功能是搭建系统数据库平台,保存系统的登录数据。q 留言簿列表文件:功能是将系统内的留言信息以列表样式显示出来。q 发布留言模块:功能是向系统内添加新的留言数据。q 留言管理页面:功能是删除系统内部需要的留言数据。2.3.2 选择我的武器2005年12月8日,下午,工具的困惑在此,B准备使用当前最新的Visual Studio 2005,预期规划的各个文件在Visual Studio 2005解决方案资源管理器中的效果如图2-4所示。图2-4 预期规划的项目文件2.4 数据库设计本项目系统的开发主要包括后台数据库的建立、维护以及前端应用程序的开发两个方面。数据库设计是在线留言簿系统设计开发的一个重要组成部分。2.4.1 后台数据库及数据库访问接口的选择2005年12月9日,又见雪花,选择数据库数据库工作由C来完成,C对我们的建议为:开发数据库管理信息系统需要选择后台数据库和相应的数据库访问接口。后台数据库的选择需要考虑用户需求、系统功能和性能要求等因素。考虑到系统所要管理的数据量比较大,且需要多用户同时运行访问,本项目将使用SQL Server 2005作为后台数据库管理平台。2.4.2 数据库结构的设计对于具体的数据库设计,C参考了A的需求分析。由需求分析的规划可知整个项目对象有两种信息,所以对应的数据库也需要包含这两种信息,从而系统需要包含如下两个数据库表。q Message:留言信息表。q Reply:回复信息表。C给出了具体数据库表的书面文件:在SQL Server 2005中创建一个名为“Liuyan”的数据库,并新建了两个表:Message和Reply。(1) 表Message用于保存留言信息,具体设计结构如表2-1所示。表2-1 Message信息表结构字段名称数据类型是否主键默认值功能描述IDint是递增1编号Titlevarchar(200)否Null标题Messagetext否Null内容CreateDatedatetime否Null时间IPvarchar(20)否NullIP地址Emailvarchar(250)否Null邮箱Statustinyint否0状态(2) 表Reply用于保存留言回复信息,具体设计结构如表2-2所示。表2-2 Reply信息表结构字段名称数据类型是否主键默认值功能描述IDint是递增1编号Replyvarchar(1000)否Null内容CreateDatedatetime否Null时间IPvarchar(20)否NullIP地址MessageIDint否Null留言编号2005年12月9日,傍晚,数据库的重要性静下心细想一下,数据库工作看似比较简单,其实很有技术含量。合理的数据库设计是一个项目是否高效的基础。所以在进行设计时,C很谨慎、认真,经过4天的努力后才满足他的要求。接下来,需要我自己亲自出马,完成参数设置文件和数据库访问层的设计。2.5 系统配置设置和数据库访问层系统配置设置和数据库访问层的工作由我来完成,此步骤是整个项目的基础,项目中的具体功能将以此为基础进行扩展。我深知此步骤的重要性,所以一直通宵达旦,尽力寻求最优方案。2005年12月10日,上午,多云间阴拿着A的功能分析、B的规划文件和C的数据库设计,我仔细统筹规划,总结出此过程需要两个阶段,分别需要完成系统配置和实现数据库访问层。2.5.1 系统配置经过前面两天的忙碌,总算有了一点成果。经过总体构成功能分析后,接下来就可以根据各构成功能模块进行实质性的工作了。具体有如下两个工作。q 新建网站项目。q 实现。1. 新建网站项目实质性工作的第一步是创建一个Visual Studio 2005项目,流程如下。(1) 打开Visual Studio 2005,选择【文件】【项目】【网站】命令,在弹出的【新建网站】对话框中创建一个名为“Liuyan”的网站项目,如图2-5所示。(2) 然后根据2.3.1节中介绍的规划文件,分别创建对应的程序文件,并分别命名。创建完毕后的效果如图2-6所示。图2-5 新建网站项目 图2-6 Visual Studio 2005解决方案 资源管理器中的程序文件2. 配置系统文件我们的这个在线留言簿项目是由几个程序文件实现的。要想这些程序成功运行,需要一个前提:配置系统文件。在Visual Studio 2005开发ASP.NET程序时,系统配置文件是Web.config,其主要功能是设置数据库的连接参数,并配置了系统与Ajax服务器的相关内容。1) 配置连接字符串参数配置连接字符串参数即设置系统程序连接数据库的参数,其对应实现代码如下。其中,“source”设置连接的数据库服务器;“user id”和“pwd”分别指定数据库的登录名和密码;“database”设置连接数据库的名称。Web.config文件是ASP.NET的基本文件,通常用于存储系统的公用信息,数据库的连接语句就在里面建立。上述代码是通用的ASP.NET配置代码,但是在ASP.NET代码调试时需要加入如下调试代码。设置“compilation debug=true”后就启用了 ASPX 调试。如果将此值设置为“false”,将提高此应用程序运行时的性能。设置为“true”后可以将调试符号(.pdb 信息) 插入到编译页中。因为这将创建执行起来较慢的大文件,所以应该只在调试时将此值设置为 true,而在所有其他时候都设置为false。2) 配置Ajax服务器参数配置Ajax服务器参数即配置Ajax Control Toolkit程序集参数,为AjaxControlToolkit.dll程序集提供一个前缀字符串“AjaxControlToolkit”。这样,系统页面在引用AjaxControlToolkit.dll中的控件时,不需要额外添加代码。上述功能在元素内的对应实现代码如下。 2005年12月10日,中午,Web.config文件的重要性我深刻知道Web.config文件的重要性,在ASP.NET中,资源的配置信息包含在一组配置文件中,每个文件都名为Web.config。每个配置文件都包含XML标记和子标记的嵌套层次结构,这些标记带有指定配置设置的属性。因为这些标记必须是格式正确的XML,所以标记、子标记和属性是区分大小写的。标记名和属性名是Camel大小写形式的,这意味着标记名的第一个字符是小写的,任何后面连接单词的第一个字母都是大写的。属性值是Pascal大小写形式的,这意味着第一个字符是大写的,任何后面连接单词的第一个字母也是大写的。但true和false例外,它们总是小写的。总结完毕之后,我决定早点休息,为接下来的数据库访问层设计做好准备。2.5.2 数据库访问层设计2005年12月10日,下午,出现阳光,什么是数据库访问层设计数据库访问层我已经使用了多次,但是其具体是一个什么东西我还是不很明白。带着问题,我在网络中找到了答案:数据库访问层就是实现数据库访问。网络中检索到的信息如下。数据库访问层:有时也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的 Select、Insert、Update、Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。我编写了文件lei.cs,实现应用程序的数据库访问层。文件lei.cs的主要功能是,在ASPNETAJAXWeb. AjaxLeaveword空间内建立Message类,并实现对系统库中数据的处理。上述功能的实现流程如图2-7所示。图2-7 数据访问层实现流程图2005年12月15日,傍晚,数据访问的方式数据库访问层是.NET框架的核心知识,建立合理的数据库访问层结构,可以提高系统的效率,并为后期维护带来极大的方便。通过实现数据的访问模式,可达到对物理数据库中的表、视图等的访问。应用程序对数据库的访问有以下3种方式。(1) 事务脚本:存储过程。(2)ORM:对象-关系映射。(3) 表模型:以物理数据表为基本单位进行访问,类似 .NET中的DataTable。而我的想法是:在.NET中第三种方式更容易实现。因为表和视图有很多相似点,不同的是视图是只读的。通过表模型,可以很好地解决实现层和表现层的结合问题,并解决效率问题,这在大型站点中十分重要。下面介绍文件lei.cs的具体实现流程。1. 定义Message类定义Message类的实现代码如下。using System;using System.Data;using System.Configuration;using System.Data.SqlClient;namespace ASPNETAJAXWeb.AjaxLeavewordpublic class Messagepublic Message()2. 获取系统内留言信息获取系统内留言信息即获取系统库内已存在的留言信息,其功能是由方法GetMessages()实现的。方法GetMessages()的具体实现流程如下。(1) 从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。(2) 使用连接字符串创建con对象,实现数据库连接。(3) 新建获取数据库留言数据的SQL查询语句。(4) 创建获取数据的对象da。(5) 打开数据库连接,获取查询数据。(6) 将获取的查询结果保存在ds中,并返回ds。上述功能的对应实现代码如下。public DataSet GetMessages()/获取连接字符串string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;/创建连接SqlConnection con = new SqlConnection(connectionString);/创建SQL语句string cmdText = SELECT * FROM Message Order by CreateDate DESC;/创建SqlDataAdapterSqlDataAdapter da = new SqlDataAdapter(cmdText,con);/定义DataSetDataSet ds = new DataSet();try /打开连接con.Open();/填充数据da.Fill(ds,DataTable);catch(Exception ex) /抛出异常throw new Exception(ex.Message,ex);finally /关闭连接con.Close();return ds;数据库的设计真的很重要,因为几乎所有的动态Web站点的内容都是基于数据库数据的,所以对数据库的操作应该充分考虑效率问题。在此告诉读者一个小小的建议,建议读者充分利用所在机器内存中缓存的ADO对象。3. 添加系统留言信息添加系统留言信息,即将新发布的留言信息添加到系统库中,此功能是由方法AddMessage(string title,string message,string ip,string email)实现的。方法AddMessage(string title,string message,string ip,string email)的具体实现流程如下。(1) 从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。(2) 使用连接字符串创建con对象,实现数据库连接。(3) 使用SQL添加语句,然后创建cmd对象准备插入操作。(4) 打开数据库连接,执行新数据插入操作。(5) 将数据插入操作所涉及的行数保存在result中。(6) 插入成功则返回result值,失败则返回-1。上述功能的对应实现代码如下。public int AddMessage(string title,string message,string ip,string email) string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);/创建SQL语句string cmdText = INSERT INTO Message(Title,Message,IP,Email,CreateDate, Status)VALUES(Title,Message,IP,Email,GETDATE(),0);SqlCommand cmd = new SqlCommand(cmdText,con);/创建参数并赋值cmd.Parameters.Add(Title,SqlDbType.VarChar,200);cmd.Parameters.Add(Message,SqlDbType.Text);cmd.Parameters.Add(Ip,SqlDbType.VarChar,20);cmd.Parameters.Add(Email,SqlDbType.VarChar,255);cmd.Parameters0.Value = title;cmd.Parameters1.Value = message;cmd.Parameters2.Value = ip;cmd.Parameters3.Value = email;int result = -1;try /打开连接con.Open();/操作数据result = cmd.ExecuteNonQuery();catch(Exception ex) /抛出异常throw new Exception(ex.Message,ex);finally /关闭连接con.Close();return result;4. 删除系统留言信息删除系统留言信息即将系统内存在的留言数据从系统库中删除,此功能是由方法DeleteMessage(int messageID)实现的。其具体实现流程如下。(1) 从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。(2) 使用连接字符串创建con对象,实现数据库连接。(3) 使用SQL删除语句,然后创建cmd对象准备删除操作。(4) 打开数据库连接,执行新数据删除操作。(5) 将数据删除操作所涉及的行数保存在result中。(6) 删除成功则返回result值,失败则返回-1。上述功能的对应实现代码如下。public int DeleteMessage(int messageID)string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);/创建SQL语句string cmdText = DELETE Message WHERE ID = ID;SqlCommand cmd = new SqlCommand(cmdText,con);/创建参数并赋值cmd.Parameters.Add(ID,SqlDbType.Int,4);cmd.Parameters0.Value = messageID;int result = -1;try /打开连接con.Open();/操作数据result = cmd.ExecuteNonQuery();catch(Exception ex) /抛出异常throw new Exception(ex.Message,ex);finally /关闭连接con.Close();return result;5. 获取系统内留言回复信息获取系统内留言回复信息即查询系统库内用户对留言的回复信息数据,此功能是由方法GetReplyByMessage(int messageID)实现的。其具体实现流程如下。(1) 从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。(2) 使用连接字符串创建con对象,实现数据库连接。(3) 新建查询数据库留言回复数据的SQL查询语句。(4) 创建获取数据的对象da。(5) 打开数据库连接,获取查询数据。(6) 将获取的查询结果保存在ds中,并返回ds。上述功能的对应实现代码如下。public DataSet GetReplyByMessage(int messageID) string connectionString = ConfigurationManager. ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);/创建SQL语句string cmdText = SELECT * FROM Reply WHERE MessageID = MessageID Order by CreateDate DESC;SqlDataAdapter da = new SqlDataAdapter(cmdText,con);/创建参数并赋值da.SelectCommand.Parameters.Add(MessageID,SqlDbType.Int,4);da.SelectCommand.Parameters0.Value = messageID;/定义DataSetDataSet ds = new DataSet();try con.Open();/填充数据da.Fill(ds,DataTable);catch(Exception ex) throw new Exception(ex.Message,ex);finally /关闭连接con.Close();return ds;6. 添加留言回复信息添加留言回复信息即将新发布的留言回复信息添加到系统库中,此功能是由方法AddReply(string message,string ip,int messageID)实现的。其具体实现流程如下。(1) 从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。(2) 使用连接字符串创建con对象,实现数据库连接。(3) 使用SQL添加语句,然后创建cmd对象准备插入操作。(4) 打开数据库连接,执行新数据插入操作。(5) 将数据插入操作所涉及的行数保存在result中。(6) 插入成功则返回result值,失败则返回-1。上述功能的对应实现代码如下。public int AddReply(string message,string ip,int messageID) string connectionString = ConfigurationManager.ConnectionStrings SQLCONNECTIONSTRING.ConnectionString;SqlConnection con = new SqlConnection(connectionString);string cmdText = INSERT INTO Reply(Reply,IP,CreateDate, MessageID)VALUES(Reply,IP,GETDATE(),MessageID);SqlCommand cmd = new SqlCommand(cmdText,con);/创建参数并赋值cmd.Parameters.Add(Reply,SqlDbType.VarChar,1000);cmd.Parameters.Add(Ip,SqlDbType.VarChar,20);cmd.Parameters.Add(MessageID,SqlDbType.Int,4);cmd.Parameters0.Value = message;cmd.Parameters1.Value = ip;cmd.Parameters2.Value = messageID;int result = -1;try /打开连接con.Open();/操作数据result = cmd.ExecuteNonQuery();catch(Exception ex) /抛出异常throw new Exception(ex.Message,ex);finally /关闭连接con.Close();return result;在上述各处理方法中,使用了SQL的查询、添加和删除语句,对系统数据库内的数据进行了操作处理。在现实Web应用系统中,各类应用的数据库相关操作都是基于上述3种操作的。SQL语句是数据库技术的核心知识之一,读者可以通过在百度中检索“SQL教程”关键字来获取其相关知识。2005年12月18日,晴空万里今天完成了数据库访问层的编码工作,压力顿时减轻了许多,决定抽出一点时间做一个技术总结。在ASP.NET程序中,常把经常用到的设置性信息保存到数据库中,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,会加重数据库服务器负载,使之无法快速服务于更重要的事务处理。而且Web服务器也必须不停地创建ADO对象,从而消耗大量资源,导致当用户很多时几乎失去响应。如果能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。 在具体应用时,可以把已经取得了数据的RecordSet对象存储在Application变量中。当用户访问时,从Application变量中取得RecordSet对象,而不需再次建立数据库连接。也可以将RecordSet对象里的数据存储在数组中,然后再将数组存储在Application变量中,使用时用数组的方式读取。另外,在此总结一下效率的问题。因为数据库技术是动态站点的基础,所以在Web程序内会有大量的查询语句。同时,随着站点访问量的增加,一个站点可能同时需要查询大量数据,所以数据库查询的效率问题便提上了日常议程。在此向读者提出如下两条建议。(1) 合理使用索引。并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量重复数据时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。读者可以通过在百度中检索“索引效率优化”关键字来获取相关知识。(2) 使用存储过程。存储过程是一个很好的工具,它不但提高了程序的安全性,而且也提高了数据处理效率。编写合理的语句可以决定存储过程和触发器的效率。总结完毕之后,我决定早点休息,为接下来的具体编码阶段做准备。2.6 编 码 实 现2005年12月19日,上午,阳光明媚因为在系统框架设计中,我已经编写好了共用类,完成了数据访问层的设计,所以编码工作的思路就十分清晰了。D只需在我已经编写类的基础上进行扩充,即可完成整个编码工作。最后的编码工作很重要,所以我让思维最敏捷的D来完成。今天我把需要的前期资料(规划书、数据库设计、框架设计、类设计)都交给了D。2005年12月20日,上午,多云间阴,出现波澜5天过去了,和D约定的交付时间已经到了,但是我一直没有看见D的踪影。无奈之下,我给他打了一个电话。原来他女友父母从老家来看他,这几天陪他们去逛大明湖、千佛山了,明天准备去趵突泉,一直抽不出身来做项目。此时的我意识到了问题的严重性,D已经没有时间来完成项目了,我只好硬着头皮上架,做出了如下两个决定。(1) 找学生会主席CH出面和学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论