软件代码开发技术 C#实验报告.docx
- 文档编号:28139928
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:30
- 大小:1.23MB
软件代码开发技术 C#实验报告.docx
《软件代码开发技术 C#实验报告.docx》由会员分享,可在线阅读,更多相关《软件代码开发技术 C#实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
软件代码开发技术C#实验报告
本科实验报告
课程名称:
软件代码开发技术
实验项目:
实验一语法基础与代码风格实验
实验地点:
专业班级:
软件工程学号:
学生姓名:
指导教师:
年月
一、实验目的:
熟悉C#.NET基本语法并掌握良好的代码风格基本知识,为其他实验做好准备。
二、实验内容:
熟悉VS.NET开发环境,通过编写一个控制台程序,熟悉C#.NET基本语法,并培养良好的代码风格。
可以任选以下任一题目:
A.求一元二次方程的各根;
B.实现安全的栈;
C.实现某种快速排序(如堆排序)。
三、实验要求:
参照课本,快速熟悉命令行编译程序的方法,按所需题目编写程序,熟悉C#.NET基本语法,注重良好的代码风格(如,变量命名、代码注释、各类结构的选择等),初步掌握C#.NET开发控制台程序的能力。
四、实验环境
软件环境:
Windows7/XP/2000/2003/2008,C#.NET2008/2010;
硬件环境:
P42.4G/80G/1G/64M及较高配置的PC机。
五、实验步骤
1.安装和配置命令行编译环境;
安装visualstudio2010,在文件夹:
C:
\Windows\Microsoft.NET\Framework\v4.0.30319下找到编译器csc.exe
2.通过查阅书本、网络资料,了解选定任务的相关知识;
3.按照代码风格要求,采用C#.NET语言编写相关代码;
选取第三道题:
C.实现某种快速排序(如堆排序)。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceHeapSort{
classProgram{
staticvoidMain(string[]args){
int[]array=newint[]{46,38,65,97,76,13,27,49};
HeapSort.sort(array);
foreach(intainarray)
Console.Write(a+"\t");
Console.ReadKey();
}
}
/*
*用于堆排序的工具类
*/
publicclassHeapSort{
publicstaticvoidsort(int[]array){
buildHeap(array);
adjust(array);
}
/*
*建立堆
*/
privatestaticvoidbuildHeap(int[]array){
//i的初始值为最后一个非终结点的序号
for(inti=array.Length/2-1;i>=0;--i){
heapAdjust(array,i,array.Length);
}
}
/*
*将堆定调整到合适的位置使其重新调整成大顶堆
*/
privatestaticvoidheapAdjust(int[]array,ints,intm){
inttemp=array[s];
for(inti=2*s+1;i if(i+1 ++i; if(temp>array[i]) break;//说明此时大顶堆已建成 array[s]=array[i]; s=i; } array[s]=temp; } /* *调整大顶堆为递增序列 */ privatestaticvoidadjust(int[]array){ for(inti=array.Length-1;i>0;--i){ swap(refarray[0],refarray[i]);//交换堆顶和最后一个元素 heapAdjust(array,0,i-1); } } /* *交换两个int型的值 */ privatestaticvoidswap(refintn1,refintn2){ inttemp=n1; n1=n2; n2=temp; } } } 测试结果: 七、思考题 1.为什么要保持良好的代码风格? 良好的代码风格在视觉上给人美感,它的意义更在于代码维护的更加容易,查找错误更加方便 2.与C,C++,Java相比较,C#.NET基本语法有何新特点? 与java比较有很多不同之处: Java C# Import//包 Namepace//命名空间 Publicstaticvoidmain(String[]args) StaticvoidMain()//m是大写 对象名.静态成员//正确 只能是: 类名.静态成员 Boolean//布尔 Bool//不是boolean Final表示常量 Const表示编译时常量,readonly表示运行时常量 本科实验报告 课程名称: 软件代码开发技术 实验项目: 实验二代码结构实验 实验地点: 专业班级: 软件工程学号: 学生姓名: 指导教师: 年月 一、实验目的 通过采用C#.NET语言设计一套类结构,理解良好代码结构的重要性,为实验三做好准备。 二、实验要求 至少设计出主要类、接口内部的主要属性和操作以及类的继承关系等,初步掌握设计代码结构的基本方法。 三、实验内容 通过采用C#.NET提供的面向对象程序设计功能设计一套完整的类结构,以满足某一具体应用的需要,可以任选以下某一应用进行设计: A.杀毒软件(如诺顿); B.聊天软件(如QQ); C.学生成绩管理系统。 四、实验环境 软件环境: Windows7/XP/2000/2003/2008,C#.NET2008/2010; 硬件环境: P42.4G/80G/1G/64M及较高配置的PC机。 五、小组成员 六、实验步骤 1.通过查阅书本、网络以及试用软件,了解具体应用的主要需求; 选做聊天软件,主要实现多个客户端互联 通过这个软件编写一个常规的通信软件,具有如下功能: 1.能够接收和发送信息。 2.发送信息以及在网络上的消息传递都是使用XML来负载。 3.用户具有添加、删除好友的功能 4.用户可以看见好友是否在线,以及用户下线后,即时告知所有好友已经下线。 5.能够查看好友资料。 用数据库进行保存好友的资料等信息。 2.模仿选定应用领域的流行软件提供的功能,设计类、接口等以及编写简单的界面; 3.采用C#.NET语言编写相关代码,实现程序的主体框架。 A.首先我们将这个软件分为两个部分: 1)数据库: 负责的是注册用户的数据等,以及另外一张表保存的是与QQ相应的好友的QQ。 1)服务端: 负责的是用户登录判断,消息的传送,以及关于好友的上下线的通知,和添加好友等的关系。 2)客户端: 负责的是用户登录界面。 以及提供发送信息,查看好友是否在线,以及好友信息。 B.对整个结构的类图的设计: 1)对数据库的设计如下: 数据库的设计如下创建一张表为Login包含多个属性。 另一个表包括两个属性都是QQ号码,这两个数据都是外键约束Login表中。 2)对服务器的类图设计如下: 其中: Server类: 该类是服务端的主类,用于监听来自客户端的登录请求和注册请求,并生成对应的处理线程,包括 1.处理登录,若信息不匹配返回登录失败的信息,如果登录成功则发回服务器中的添加好友请求或响应的发送过程。 2.将收到的数据转发到特定的用户。 3.以及处理添加好友请求,对添加好友响应的处理 4.用户下线后对对他所有的好友进行通知。 5.删除好友 其中要多次引用到工具类 工具类XmlHelper.cs这个负责的是对数据传输的xml的操作包括对不同请求进行不同操作。 工具类2UserInfo.cs这个类负责的是对用户数据的定义包括QQ号密码等数据的修改获取等。 工具类3message.cs这个类封装目地号码和消息等内容。 2)客户端设计如下(流程图如下): 首先是: 进入到一个login界面: 配置的是server的ip地址,这样在服务器没有改变ip之前是不用再次进行修改的。 等有了ip的使用之后,就会写入到一个本地的文件夹里面这样,方便了客户端的登录,不用每次都去输入ip地址。 再就进入了登录界面: 在这个界面仍然提供了修改server的ip的功能实现的。 如果没有这里的QQ号码的话,就要进行注册,在这个界面也提供了这样的功能。 注册界面: 在注册界面需要提供,我们所需要的一切属性,注册成功后,就进入到登录界面,这样就可以可以进行登录了,且密码不能少于六位,用户id由服务器自动产生。 登陆成功后进入的mainForm相当于QQ的 在我们定制的界面中也需要把每个好友的备注输出。 之后在好友的图标上双击,则进入到了好友回话的状态。 而后可以直接关闭。 六、思考题: 1.类的主要性质是什么? 分别说明它们的含义。 数据成员: 它描述的是自然界类的状态属性,静态的属性,比如桌子类,桌子有长度,高度,重量等静态属性抽象为我们熟悉的数据类型,然后作为类的数据成员描述桌子。 函数成员: 它描述的是类的动态行为,比如狗类,狗能够叫,吃,跑等行为,函数成员是类的功能体现,对外界的接口。 类的主要性质是对于具体事物的高度抽象,类具有封装,继承,多态 对于封装: 简单的说就是让用户看见,它可以看见的接口,让用户看不见该用户不能看见的接口。 封装规范了用户的使用权限,让使用者不能知道内部结构,其实使用则也不必知道。 这样带来了程序简单,有序的好处 对于继承: 实现了同类事务的关联,这样可以大大的节省代码量,可以在一定的程度上减轻代码的冗余。 也可以实现在一定程度上实现同类事物的多态。 对于多态: 是在面向对象中最核心的内容,表示了一个对象可以处在不同的各个不同的状态。 这样大大的实现了程序的灵活性。 2.为什么要采用面向对象程序设计软件? 面向对象的思想是对自然界的现实抽象,如继承,这样大大的简化的代码的开发,增加的代码的重用性,面向对象将一切事物都看成一类对象,所有的动作都是对象发出的,只要规划好类的属性和行为,那么这个类将可以封装为一个整体被其他的模块调用,重用性相当的高。 正是因为有了上面说的类具有的三个特性。 又由于万事万物都可以看作一个个对象,这样的话,有了封装后就是程序更加有了结构,使程序更加的接近人的思维,而面向过程的是接近的是计算机的运行方式,所以说具有一定的难度。 主要原因还是: 面向对象更加的符合人类的思考,使编程变的更加容易接受。 也可以大大通过上面的三个特性的使用,可以减少系统的开销。 本科实验报告 课程名称: 软件代码开发技术 实验项目: 实验三软件代码开发综合实验 实验地点: 专业班级: 软件工程学号: 学生姓名: 指导教师: 年月 一、实验目的 通过运用软件代码开发技术的一般方法,以团队合作的方式针对某一具体应用,重点设计软件的构架和实现编码,并能掌握查阅资料,阅读帮助提高编写代码的效率和质量的方式,掌握针对实际应用进行构架和编码的基本过程。 二、实验要求 掌握以项目组的方式对一个真实应用进行构架和编码的基本过程,要求完成所选题目的整体构架和实现部分功能(指核心类等),并了解版本控制(建议使用jit或SubVersion)等。 三、实验内容 1.实际系统题目: 杀毒软件,聊天软件,学籍管理系统; 2.2到3人组成项目小组进行架构设计和编码; 3.实验方式: 查阅资料,调研类似系统,分析开源软件。 四、实验环境 软件环境: Windows7/XP/2000/2003/2008,C#.NET2008/2010; 硬件环境: P42.4G/80G/1G/64M及较高配置的PC机。 五、小组成员 六、实验步骤 1.根据兴趣和所选题目,2-3人自由组合成项目小组,并选出组长,负责整个项目的工作安排,领导组员设计类层次关系和分配编码等工作; 2.采用查阅资料、调研类似系统、分析开源软件等方式,对所选题目进行界面与构架设计,并编写代码实现部分功能; 在实验二中已经给出我们聊天软件的通信原理,这里给出部分类的具体实现。 Server端(部分): 负责对客户端的通信线程进行调度。 ClassServer: 服务端的核心类Server,类图如下: 该类是服务端的主类,用于监听来自客户端的登陆请求和注册请求并生成对应的处理线程 -Main(): 只是启动的是服务器的线程,也就是开启服务器。 -Server(): 作为该类的构造函数,进行了局部的变量的初始化(其中包括三个集合,分别是clients(所有活动的对客户端的处理的线程都将被加入该字典中),以及addFirendRequsts(用于存储好友请求消息的集合这一版本暂时不考虑服务器宕机导致列表丢失的情况也不考虑客户机持续不登陆,导致的内存泄露情况),addFriendInformation(添加好友通知)) -start(): 开启服务端的服务 -processRegister(XmlHelperxmlHelper,NetworkStreamns): 功能: 处理注册,分配的QQ号码将在此方法中发送给服务端。 参数: xmlHelper用于解析注册信息的XML文档字符串ns处理客户端消息的输入输出流 -processLogin(XmlHelperxmlHelper,NetworkStreamns): 功能: 处理登陆,若信息不匹配返回登陆失败的信息,若该用户已登陆返回重复登陆信息,否则返回登陆成功的信息。 登陆成功后,从数据库中检索出好友列表信息,遍历clients字典,设置每个人的在线状态,然后发送用户列表,并随后开启该客户端的专用线程(加入集合clients中)然后是滞留在服务器上的添加好友请求或响应的发送过程。 参数: xmlHelper用于解析注册信息的XML文档字符串 -sendLoginState(boolstate,intmessage,XmlHelperxmlHelper,NetworkStreamns): 功能如下: 向客户端发送登录成功或失败的状态。 -MessageArrived(Messagemess,intid): 当消息抵达后,将消息报中的目标id换成源id后发送到目标客户。 -AddFriendRequest(intid,intfriendId): 处理添加好友请求 -AddFriendResponseArrived(intid,AddFriendResponseafr): 对添加好友响应进行处理 -UserLogout(intid): 当客户端下线后,服务端将通知他所有的好友,该客户已离线。 -AddFriendReceivedArrived(intid,intfriendId): 处理客户端对好友添加的确认消息。 -DeleteFriend(intid,intdeleteId): 删除好友关系。 总结: 该类是对服务器端的核心类,控制了该程序的核心功能。 包含了多个方法,这些方法都是对客户端的每一个功能的支持。 ClassserverThread: 该类用于处理和某一个客户端的所有通信当客户端用户登陆成功后,该类的一个实例将被启动。 对于该类中的方法的说明如下: -ServerThread(intid,NetworkStreamns): 该类的构造方法参数是用户的id号码,和与客户端连接的输入输出流。 -ThreadRun(): 作为一个线程类的核心方法,启动线程要运行的方法。 (通过不同的xmlHelper中的各个不同签名,进行不同的事件处理)。 -friendLogOut(intid): 通知与该线程关联的客户端,其好友已下线。 -sendMessage(Messagemess): 向与该线程相关联的客户段发送信息 -sendRequestForAddFriend(intid): 向客户端发送好友请求 -sendResponseForAddFriend(AddFriendResponseafr): 想客户端发送好友添加响应结果 -sendDeleteFriendInformation(intid): 向客户端发送被删除通知。 //处理消息抵达时触发的事件 publiceventMessageArrivedHandlerMessageArrived; //处理添加好友请求抵达时触发的事件 publiceventAddFriendRequestHandlerAddFriendRequest; //处理响应添加好友请求抵达时触发的事件 publiceventAddFriendResponseHandlerAddFriendResponseArrived; //处理响应添加好友请求已收到消息抵达时触发的事件 publiceventAddFriendReceivedHandlerAddFriendReceivedArrived; //处理删除好友消息抵达时触发的事件 publiceventDeleteFriendHandlerDeleteFriendArrived; //处理用户下线时触发的事件 publiceventUserLogoutHandlerUserLogout; privateintid;//相关客户端的ID号 privateNetworkStreamns; XMLUtil: 这一部分是整个软件的工具工程,在它里面包含了客户端与服务端都会用到的工具类,其中主要部分是XmlHelper,它负责了客户端与服务端传输过程中的信息负载。 在这个类中声明了很多常数,定义的是发送数据的类型,这样可以帮助我们对于不同的类进行不同的方法使用(这个也是我们的精华) publicconstintREGISTER_INFO=1;//注册信息 publicconstintLOGIN_INFO=2;//登陆信息 publicconstintQQ_ID=3;//所申请的QQ号 publicconstintLOGIN_STATE=4;//登陆状态 publicconstintFRIENDS_LIST=5;//好友列表 publicconstintMESSAGE=6;//发送的消息 publicconstintLOGOUT=7;//客户端下线通知 publicconstintEnd=8;//服务端下线通知 publicconstintSEARCH_USER=9;//搜索好友 publicconstintADD_FRIEND_REQUEST=10;//添加好友请求 publicconstintADD_FRIEND_RESPONSE=11;//响应添加好友请求 publicconstintADD_FRIEND_RECEIVED=12;//添加好友结果已收到 publicconstintDELETE_FRIEND=13;//删除好友 publicconstintSEARCH_RESULT=14;//搜索好友的结果以下是 以下是对与函数的描述: -voidSendByXml(RegisterInforif,Streams): 利用给定的RegisterInfo对象,构造XML文档格式的字符串发送到流中 -XmlElementgetBirthdayXml(DateTimedate,XmlDocumentdocument): 利用给定的DateTime对象,构造XmlElement对象,用于封装日期返回: 构造好的XmlElement对象 -XmlElementgetDatetimeXml(DateTimedate,XmlDocumentdocument): 利用给定的DateTime对象,构造XmlElement对象,用于封装日期和时间.返回: 构造好的XmlElement对象 -voidSendByXml(LoginInfolif,Streams): 利用给定的LoginInfo对象,构造XML文档格式的字符串发送到流中 -voidSendByXml(Messagemess,Streams): 利用给定的Message对象,构造XML文档格式的字符串发送到流中 -voidSendByXml(SearchResultsr,Streams): 利用给定的SearchResult对象,构造XML文档格式的字符串发送到流中 -XmlElementgetUserInfoXmlElement(UserInfouserInfo,XmlDocumentdocument): 利用给定的UserInfo对象,构造XmlElement对象,用于封装日期和时间.返回: 构造好的XmlElement对象,参数为空时返回空 -voidSendByXml(AddFriendResponseafr,Streams): 利用给定的AddFriendResponse对象,构造XML文档格式的字符串发送到流中.在客户端发送请求的时候 -voidSendByXmlForQQId(intid,inttype,Streams): 利用给定的id号,构造XML文档格式的字符串发送到流中.参数: type消息类型 -voidSendByXml(LoginStateloginState,Streams): 利用给定的登陆状态对象,构造XML文档格式的字符串发送到流中 -voidSendByXml(Dictionary 利用给定的用户信息对象,构造XML文档格式的字符串发送到流中 -voidSendByXmlForType(inttype,Streams): 构造仅包含type属性的XML文档格式的字符串发送到流中 -XmlHelper(stringxml): 构造XmlHelper对象,它的参数是要被解析的xml文档字符串 -voidLoadXml(stringxml): 载入XML,它的参数是要被解析的xml文档字符串 -intGetDataType(): 返回文档类型 -RegisterInfoGetRegisterInfo(): 利用给定的xml文档字符串,构造Ge
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件代码开发技术 C#实验报告 软件 代码 开发 技术 C# 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)