当前位置:文档之家› 高级程序实验报告6.9

高级程序实验报告6.9

高级程序实验报告6.9
高级程序实验报告6.9

高级程序语言设计

—记事本

1.课程设计主要目的:

本课程设计是高级程序语言设计学习中很重要的实践性环节之一,是在学习完高级程序语言课程后进行的一次全面的综合练习。旨在巩固加深学生对高级程序语言课程的基本知识的理解和掌握,掌握QT编程和程序调试的基本技能;利用QT进行基本软件的设计,提高运用高级程序语言解决实际问题的基本能力。

2.技术任务及技术要求:

2.1主要任务

(1)根据要求分析题目。

(2)设计软件方案。包括:软件功能结构、各功能模块的详细描述、关键程序流程图等。

(3)使用C++语言,并结合QT creator 设计界面,实现软件功能。

(4)调试、修改并完善程序。

(5)撰写课程设计报告。

2.2 技术要求

(1)文本文档的新建、打开、保存、另存为。

(2)文本内容的编写、修改和删除、查找替换、字体的选择。

(3)文本页面的设置、打印等功能。

(4)文本的撤销和删除等操作。

3.总体设计

3.1系统功能分析

(1)新建操作:用户可以根据需要,建立新的记事本文档,进行操作。

(2)打开操作:用户在可以打开任何文本内容进行操作。

(3)保存操作:用户在对文本操作进行以后,可以按照需求进行保存操作。

(4)撤销操作:若文本内容不符合用户的需求,可以撤销当前的操作。

(5)剪切操作:用户可以可按照需求,对需要的内容进行剪切,将其移植其他处。

(6)复制操作:移植的内容可以进行复制,这样更方便用户修改相应内容。

(7)粘贴操作:将要复制的内容进行粘贴。

(8)删除操作:删除不需要的内容。

(9)查找操作:该功能为了方便用户进行查找文本内容中需要的内容。

(10)替换操作:用户根据需要选择自己需要替换的内容,方便使用。

(11)全选操作:全选内容方便用户进行相应的剪切,复制,粘贴等内容。

(12)格式操作:用户可根据需求将文本内容进行字体设置。

(13)退出操作:用户不需要进行任何操作时候,可以退出。

3.2 设计目标

通过分析,主要实现如下目标:

(1)编写新建模块。用户新建任何文本文档。

(2)编写打开模块。用户可打开电脑中的任何文本文档。

(3)编写保存模块。保存已操作的文本内容。

(4)编写退出模块。退出记事本。

(5)编写撤销模块。撤销当前编辑的文本内容。

(6)编写剪切模块。将需要编辑的内容进行剪切。

(7)编写复制模块。复制用户选中的内容。

(8)编写粘贴模块。粘贴需要复制的内容。

(9)编写删除模块。删除选中的文本内容。

(10)编写查看模块。查找用户需要的内容。

(11)编写替换模块。替换文本中的一些内容。

(12)编写全选模块。选中需要进行操作的文本内容。

(13)编写格式模块。按照需求对文本内容进行相应设置。

3.3概要设计

本应用软件是简单的记事本,其能实现文件的新建、打开、保存、另存、退出,撤销、剪切、复制、粘贴、删除、全选、查找、替换,对字体进行设置。为实现这些功能,需要设置以下模块:主模块如图3.1所示:

图3.1主模块

文件相关功能模块如图3.2所示:

图3.2 实现文件功能的模块

文档编辑模块如图3.3所示:

图3.3 文档编辑模块

格式设置模块如图3.4所示:

图3.4 格式设置模块

3.4详细设计

3.4.1文件模块的详细设计

3.4.1.1新建模块的详细设计

用户选择新建后,先检测当前的文本内容是否修改过。如果未修改过,则新建一个空文本文档。如果修改过,先弹出提示保存对话框,提示用户是否保存,如果选择“是”,先保存当前文本内容,再新建一个空文本文档。如果选择“否”,则直接新建一个空文本文档。如图4.1所示:

图4.1 新建模块流程图

3.4.1.2打开模块的详细设计

用户选择打开时,先检测文件是否存在。如果存在,选择需要打开的文件,则文本区域内显示被选中文本的内容。如图4.2所示:

图4.2 打开模块流程图 图4.3 保存、另存模块流程图

3.4.1.3保存、另存模块的详细设计

当用户选择保存或另存时,先检测文件内容是否修改过。如果修改过,保存对文档的修改。如图4.3所示:

3.4.1.4退出模块的详细设计

当用户选择退出时,弹出提示保存对话框,询问用户是否保持。如果选择“是”,先保存文档,再退出程序。如果选择“否”,直接退出程序。如图4.4所示:

图4.4 退出模块流程图 图4.5撤销模块流程图

3.4.2编辑模块的详细设计

3.4.2.1撤销模块的详细设计

打开一个文本文档,当用户选择编辑或右键弹出菜单中的撤消操作后,判断一个文本是否已被修改,若已修改,撤消上一步的操作,否则不进行任何操作。如图4.5所示:

选中,若已选中,删除选中的文字,并将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.6所示:

图4.6剪切模块流程图 图4.7复制模块流程图

中,将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.7所示:

3.4.2.4粘贴模块的详细设计

运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单,选中“粘贴”,判断文本文档是否进行了复制和剪切操作(即判断系统剪切板是否有内容),如果有就将剪切板的内容粘贴到光标处,没有就继续执行其他操作步骤。如图4.8所示:

图4.8 粘贴模块流程图 图4.9删除模块流程图

运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单选中“删除”,程序判断文本文档是否有已选中的内容,如果有就将选中的内容删除掉,没有就执行其他操作。如图4.9所示:

3.4.2.6全选模块的详细设计

运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单,选中“全选”,就选中了文本的所有内容。如图4.10所示:

图4.10全选模块流程图

3.4.2.7查找、替换模块的详细设计

查找、替换模块实现对文档中内容的查找和替换操作,方便用户查询所要查找的内容,加快对文档的编辑。首先在编辑菜单中设置菜单项“查找”和“替换”,然后增加菜单项的监听者,最后实现监听,即实现查找和替换功能。包括设置响应事件后弹出的对话框界面布局及对应功能按钮的事件处理。

用户运行程序后,先写入要编辑的文本或直接打开文件,然后点击编辑菜单中的“查找”,会弹出查找对话框。输入要查找的内容后点击“查找”按钮,若查找内容存在则显示出内容,若内容不存在则弹出对话框对用户进行提示。如图 4.11 所示:

点击编辑菜单中的“替换”,会弹出替换对话框。在文本框中分别输入要查找和替换的内容,然后点击“替换”按钮,若查找的内容存在则替换成功,若内容不存在则提示用户查找的内容不存在。如图 4.12 所示:

图4.11查找模块流程图 图4.12替换模块流程图

3.4.3格式模块的详细设计

格式菜单主要对编辑的文本文档进行字体设置方便用户的使用。在主函数中添加格式事件接听器,然后实现接听事件,并写出相应字体设置的用到调用函数,接着利用对话框对字体进行设置。最后,在对话框中实现对字体的设置。

用户首先打开任何文档文件,然后选择格式菜单里的字体,会出现对话框,对话框包括三个模块,第一个模块主要是字体,大小两个列表以及字形复选框,第二个模块是样例标签,方便用户预览选中字体,第三个模块是确定取消按钮模块,用户根据选择响应对应按钮。

选择对应按钮,用户所打开文本内容相应改变。如图4.12所示:

图4.12退出模块流程图

4重要代码分析

有些细节已在程序之中详细备注

4.1全部链接函数

void dispLineNum();//显示当前行数

void on_action_About_triggered();//关于

void on_action_Delete_triggered();//撤销

void on_action_Quit_triggered();//退出

void on_action_goToLine_triggered();//转到行

void on_action_FindNext_triggered();//查找下一个

void setAutoLine(bool);//自动换行

void setNeedSave();//保存文件(自动命名)

void on_action_SaveAs_triggered();//保存为

void on_action_Create_triggered();//新建

void on_action_Save_triggered();//保存

void on_action_Open_triggered();//打开

void on_action_Date_triggered();//日期/时间

void on_action_PageSet_triggered();//页面设置

void on_action_Print_triggered();//打印

void on_action_Font_triggered();//字体

void on_action_Find_triggered();//查找

void on_action_Undo_triggered();//撤销

void on_action_SelectAll_triggered();//全选

void on_action_Redo_triggered();//恢复

void on_action_Paste_triggered();//粘贴

void on_action_Cut_triggered();//剪切

void on_action_Copy_triggered();//复制

关于粘贴复制新建保存及字体的有关内容我们在以前已经学过,在这里就不再重复了,这次我们的记事本新加了查找替换功能,显示当前行数,自动换行,页面设置,打印等,所以仅做这些新功能的函数分析.

4.2查找替换

void DialogFind::findNextUp(QString text,Qt::CaseSensitivity cs)//向上查找

{

if(cs==Qt::CaseSensitive)

this->mytextArea->find(text,QTextDocument::FindCaseSensitively|QTextDocument::FindBackw ard);

if(cs==Qt::CaseInsensitive)

this->mytextArea->find(text,QTextDocument::FindBackward);

}

void DialogFind::findNextDown(QString text,Qt::CaseSensitivity cs)//向下查找

{

if(cs==Qt::CaseSensitive)

this->mytextArea->find(text,QTextDocument::FindCaseSensitively);

if(cs==Qt::CaseInsensitive)

this->mytextArea->find(text);

}

void DialogFind::on_pushButton_Find_clicked()//查找

{

Qt::CaseSensitivity cs;

if(ui->checkBox_Case->isChecked())

{

cs=Qt::CaseSensitive;

}

else

{

cs=Qt::CaseInsensitive;

}

if(ui->radioButton_Down->isChecked())

{

findNextDown(ui->lineEdit_Find->text(),cs);

}

else if(ui->radioButton_Up->isChecked())

{

findNextUp(ui->lineEdit_Find->text(),cs);

}

}

void DialogFind::on_checkBox_Replace_clicked(bool checked)//替换触发

{

ui->groupBox_2->setVisible(checked);

}

void DialogFind::on_lineEdit_Find_textChanged(QString)//替换为(查找后选择替换){

if(ui->lineEdit_Find->text().isEmpty())

{

ui->pushButton_Find->setEnabled(false);

}

else

{

ui->pushButton_Find->setEnabled(true);

}

}

void DialogFind::on_pushButton_Replace_clicked()//替换

{

if(this->mytextArea->textCursor().selectedText().isEmpty())

{

QMessageBox::information(this,"提醒","请先选中或者查找要替换的文本!");

return;

}

this->mytextArea->cut();

this->mytextArea->insertPlainText(ui->lineEdit_Replace->text());

4.3显示当前行数

void SourceInsight::dispLineNum()//显示当前行数

{

ui->statusBar->showMessage("当前位于第

["+QString::number(ui->textEdit->textCursor().blockNumber()+1)+"]行");

}

4.4自动换行具体由Qt实现

void SourceInsight::setAutoLine(bool chlicked)//自动换行

{

if(chlicked)

{

ui->textEdit->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);

}

else

{

ui->textEdit->setWordWrapMode(QTextOption::NoWrap);

}

}

4.5转到行

void gotoTheLine::letGo(int line)//转到行

{

QTextCursor tc=this->mytextArea->textCursor();

tc.setPosition(0,QTextCursor::MoveAnchor);

tc.movePosition(QTextCursor::NextBlock,QTextCursor::MoveAnchor,line-1);

this->mytextArea->setTextCursor(tc);

}

void gotoTheLine::setLineNum(int num)//选择转到页

{

ui->spinBox->setRange(1,num);

}

void gotoTheLine::on_pushButton_ok_clicked()

{

letGo(ui->spinBox->value());

this->hide();

}

4.6页面设置

void SourceInsight::on_action_PageSet_triggered()//页面设置

{

QPrinter printer;

QPageSetupDialog pageSet(&printer,this);

pageSet.exec();//转页面设置

}

4.7打印

void SourceInsight::on_action_Print_triggered()//打印

{

QPrinter printer;

QPrintDialog print(&printer,this);

print.exec();//转到打印程序

}

4.8查看日期/时间

QString SourceInsight::getDateTime()//日期/时间

{

QDateTime current;

current=QDateTime::currentDateTime();//时间设置

return current.toLocalTime().toString("yyyy-MM-dd hh:mm:ss");//显示当前时间}

4.9全选

void SourceInsight::on_action_SelectAll_triggered()//全选

{

ui->textEdit->selectAll();

}

4.10关于

void SourceInsight::on_action_About_triggered()//关于该记事本

{

Dialog_MyLog*myLog=new Dialog_MyLog(this);

myLog->show();

}

5系统测试

5.1程序主界面

运行程序后,显示主界面如图5.1所示

图 4.1主界面

4.2文件界面

点击文件,显示文件菜单的各种功能,如图5.2所示:

图 4.2文件菜单

点击打开,出现以下对话框,如图5.3所示:

图4.3打开文件弹出菜单

打开一文件,如图4.4所示:

图 4.4 文字显示

点击另存为,弹出保存对话框,如图4.5所示:

通过复制或剪切操作获取的内容,粘贴到想要粘贴到的地方。对文件内容粘贴操作如图4.6所示:

图4.6选择粘贴

执行粘贴后,如图4.7所示:

图4.7执行粘贴

选中想要删除的内容,点击编辑菜单上的删除菜单项进行删除操作,具体步骤如图4.8所示:

图 4.8执行删除

选择编辑菜单中的全选操作,然后执行复制,粘贴,操作如下:

图4.9选择全选

链表实验报告

C语言程序设计实验报告 实验一:链表的基本操作一·实验目的 1.掌握链表的建立方法 2.掌握链表中节点的查找与删除 3.掌握输出链表节点的方法 4.掌握链表节点排序的一种方法 5.掌握C语言创建菜单的方法 6.掌握结构化程序设计的方法 二·实验环境 1.硬件环境:当前所有电脑硬件环境均支持 2.软件环境:Visual C++6.0 三.函数功能 1. CreateList // 声明创建链表函数 2.TraverseList // 声明遍历链表函数 3. InsertList // 声明链表插入函数 4.DeleteTheList // 声明删除整个链表函数 5. FindList // 声明链表查询函数 四.程序流程图 五.程序代码 #include #include typedef int Elemtype; typedef int Status; typedef struct node//定义存储节点 { int data;//数据域 struct node *next;//结构体指针 } *linklist,node;//结构体变量,结构体名称 linklist creat (int n)//创建单链表 { linklist head,r,p;//定义头指针r,p,指针 int x,i; head=(node *)malloc(sizeof(node));//生成头结点

r=head;//r指向头结点 printf("输入数字:\n"); for(i=n;i>0;i--)//for 循环用于生成第一个节点并读入数据{ scanf("%d",&x); p=(node *)malloc(sizeof(node)); p->data=x;//读入第一个节点的数据 r->next=p;//把第一个节点连在头结点的后面 r=p;//循环以便于生成第二个节点 } r->next=0;//生成链表后的断开符 return head;//返回头指针 } void output (linklist head)//输出链表 { linklist p; p=head->next; do { printf("%3d",p->data); p=p->next; } while(p); printf("\n") } Status insert ( linklist &l,int i, Elemtype e)//插入操作 { int j=0; linklist p=l,s; while(jnext; ++j; } if(!p || j>i-1) return -1; else { s=(node *)malloc(sizeof(node)); s->data=e; s->next=p->next; p->next=s; return 1; } } Status delect ( linklist &l,int i, Elemtype &e)//删除操作 { int j=0; linklist p=l,q; while(jnext) { p=p->next; ++j; } if(!p->next || j>i-1) return -1;

《数据结构》实验报告 设计循环单链表

《数据结构》实验报告 1、实验名称:设计循环单链表 2、实验日期: 2013-3-26 3、基本要求: 1)循环单链表的操作,包括初始化、求数据元素个数、插入、删除、取数据元素; 2)设计一个测试主函数实际运行验证所设计循环单链表的正确性。 4、测试数据: 依次输入1,2,3,4,5,6,7,8,9,10,删除5,再依次输出数据元素。 5、算法思想或算法步骤: 主函数主要是在带头结点的循环单链表中删除第i个结点,其主要思想是在循环单链表中寻找到第i-1个结点并由指针p指示,然后让指针s指向a[i]结点,并把数据元素a[i]的值赋给x,最后把a[i]结点脱链,并动态释放a[i]结点的存储空间。 6、模块划分: 1)头文件LinList.h。头文件LinList.h中包括:结点结构体定义、初始化操作、求当前数据个数、插入一个结点操作、删除一个结点操作以及取一个数据元素操作; 2)实现文件dlb.cpp。包含主函数void main(void),其功能是测试所设计的循环单链表的正确性。

7、数据结构: 链表中的结点的结构体定义如下: typedef struct Node { DataType data; struct Node *next; }SLNode; 8、源程序: 源程序存放在两个文件中,即头文件LinList.h和实现文件dlb.cpp。//头文件LinList.h typedef struct Node { DataType data; struct Node *next; }SLNode; void ListInitiate(SLNode **head) //初始化 { *head=(SLNode *)malloc(sizeof(SLNode)); //申请头结点,由head指示其地址 (*head)->next=*head; }

软件工程 实验报告

v1.0 可编辑可修改 院系:计算机科学学院 专业:计算机科学与技术 年级: 2013级 课程名称:软件工程 组员:司少武(1135) 兰少雄(1136) 张宇(1133) 纳洪泽(1132) 指导教师:刘卫平 2015年 12月 26 日

聊天室 1 前言 即时消息系统的研究现状 即时消息系统[1](Instant Messenger,IM)是一种在后 PC 时代兴起的,以Internet 网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时消息系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。 本工程的主要内容 随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台,也是网络与现实最贴近的实用型网站。本文所介绍的网络聊天系统是基于开放的JAVA应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求,且具有脱离数据库技术方法,易于维护和更新的特点。 2 需求分析 本系统所要实现的主要功能是当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加

单链表实验报告

计算机与信息技术学院综合性、设计性实验报告 一、实验目的 (1)熟悉顺序表的创建、取值、查找、插入、删除等算法,模块化程序设计方法。 二、实验仪器或设备 (1)硬件设备:CPU为Pentium 4 以上的计算机,内存2G以上 (2)配置软件:Microsoft Windows 7 与VC++6.0 三、总体设计(设计原理、设计方案及流程等) 设计原理: 单链表属于线性表,线性表的存储结构的特点是:用一组任意存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。因此,对于某个元素来说,不仅需要存储其本身的信息,还需要存储一个指示其直接后继的信息。 设计方案: 采用模块化设计的方法,设计各个程序段,最终通过主函数实现各个程序段的功能。设计时,需要考虑用户输入非法数值,所以要在程序中写入说可以处理非法数值的代码。 设计流程: 1. 引入所需的头文件; 2. 定义状态值; 3. 写入顺序表的各种操作的代码; 写入主函数,分别调用各个函数。在调用函数时,采用if结构进行判断输 入值是否非法,从而执行相应的程序 四、实验步骤(包括主要步骤、代码分析等) #include // EOF(=A Z 或F6),NULL #in clude // srand( ) ,rand( ),exit (n) #in clude // malloc( ),alloc( ),realloc() 等 #in clude // INT_MAX 等 #in clude #in clude #in clude // floor(),ceil( ),abs() #in clude // cout,ci n #in clude // clock( ),CLK_TCK,clock_t #defi ne TRUE 1 #defi ne FALSE 0 #defi ne OK 1 #defi ne ERROR 0 #defi ne INFEASIBLE -1

高级语言程序设计实验报告 C语言实验报告

C语言程序设计实验报告 实验二循环结构程序设计 班级 2012196 学号 201219628 姓名李明月 一、实验目的 (1)掌握用while语句,do-while语句和for语句实现循环的方法; (2)掌握循环结构的嵌套; (3)掌握break语句和continue语句的使用方法。 二、实验内容及步骤 1.相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。国王能兑现他的许诺吗? 程序1:试编程计算舍罕王共要多少粒麦子赏赐他的宰相,这些麦子合多少立方米?(已知1立方米麦子约1.42e8粒)总粒数为:sum=1+2+22+23+…+263 程序代码: #include int main( ) //定义一个主函数 { int i; double t=1,sum=1,v; //定义变量 for(i=1;i<=63;i++) //用for循环语句实现循环运算 { t=t*2; sum+=t; //循环表达式 } printf("总麦粒数为:%f\n",sum); v=sum/1.42e8; printf("折合体积为: %f立方米\n",v); //对结果进行输出 return 0; } 运行结果:

2. 求完数。 程序2:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数,输出所有的完数(要求:一行显示6个数); 程序代码: #include int main() { int i,j,sum,n=0; printf(" 1000以内的完数有:\n"); for(i=1;i<=1000;i++) { sum=0; for(j=1;j

网络程序设计实验报告-Winsock编程接口实验

网络程序设计 实验报告 实验名称: Winsock编程接口实验 实验类型:____验证型实验_____ __ 指导教师:______________________ 专业班级:_____________________ 姓名:_______________________ 学号:_____________________ 电子邮件:____________ 实验地点:______ _______ 实验日期2013 年 3 月29 日 实验成绩:__________________________

一、实验目的 ●掌握Winsock的启动和初始化; ●掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。 二、实验设计 由实验内容可以知道: 1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip https://www.doczj.com/doc/da11547160.html, https://www.doczj.com/doc/da11547160.html,,能输出https://www.doczj.com/doc/da11547160.html,和https://www.doczj.com/doc/da11547160.html,对应的IP地址列表。 2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC 地址。 首先要了解一些基本的知识gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的基本知识gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。 之后要根据内容画出函数流程图

三、实验过程(包含实验结果) 1.在实验过程中调用GetAdaptersInfo()时,出现了undeclared identifier的报错,原因是没有包含其头文件,之后进行一些修改解决了问题. 2.实验结果 3.选择查看本机信息 四、讨论与分析 1.Winsock初始化的作用是什么? 答:使用winsock初始化可加载winsock编程的动态链接库。

单链表的插入和删除实验报告

. 实验一、单链表的插入和删除 一、目的 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 二、要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 三、程序源代码 #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表

ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存 //==========主函数============== void main() { char ch[10],num[10]; LinkList head; head=CreatListR1(); //用尾插入法建立单链表,返回头指针printlist(head); //遍历链表输出其值 printf(" Delete node (y/n):");//输入“y”或“n”去选择是否删除结点scanf("%s",num); if(strcmp(num,"y")==0 || strcmp(num,"Y")==0){ printf("Please input Delete_data:"); scanf("%s",ch); //输入要删除的字符串 DeleteList(head,ch); printlist(head); } DeleteAll(head); //删除所有结点,释放内存 } //==========用尾插入法建立带头结点的单链表

网络编程实验报告

实验一TCP Socket API程序设计 一、预备知识 1.网络编程基本概念 网络上的计算机间的通讯,实质上是网络中不同主机上的程序之间的通讯。在互联网中使用IP地址来标识不同的主机,在网络协议中使用端口号来标识主机上不同进程,即使用(IP地址,端口号)二元组。 套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄,通信时一个网络程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡相连的传输介质将这段信息发送到另一台主机的Socket中,以供其他程序使用。 图1-1 TCP通信流程 2.TCP通信流程 TCP程序是面向连接的,程序运行后,服务器一直处于监听状态,客户端与

服务器通信之前必须首先发起连接请求,由服务器接收请求并在双方之间建立连接后才可以互相通信。 二、实验目的 1.了解Winsock API编程原理; 2.掌握TCP Socket程序的编写; 3.了解C/S模式的特点; 4.学会解决实验中遇到的问题。 三、实验任务 使用Winsock API相关类实现TCP Socket通信程序,并能成功运行。 四、实验环境及工具 1. Windows2000/XP/7 2. Visual C++开发平台 3. Visual Studio2010 五、实验内容和步骤 参照《Visual C++网络编程教程》书中81页,TCP Socket API程序设计。 连接: void CChatClientDlg::OnConnect() { WSADATA wsd; //WSADATA结构 WSAStartup(MAKEWORD(2,2),&wsd); //加载协议,使用Winsock 2.2版 m_client = socket(AF_INET,SOCK_STREAM,0); //创建流式套接字 //服务器地址 sockaddr_in serveraddr; UpdateData(); if(ServerIP.IsBlank()) { AfxMessageBox("请指定服务器IP!"); return; } if(sPort.IsEmpty()) { AfxMessageBox("请指定端口!"); return; }

单链表实验报告

数据结构 课程设计 设计题目:单链表 专业班级:11软会四班 指导教师:吉宝玉 日期:2012 目录 一、实验目的 (2) 1、 (2) 2、 (2) 二、实验内容 (3)

三、实验基本要求(软、硬件) (3) 四、算法设计思想 (3) 1、 (3) 2、 (3) 3、 (3) 4、 (3) 5、 (3) 6、 (3) 7、 (3) 8、 (3) 五、算法流程图 (4) 六、算法源代码 (4) 七、运行结果 (9) 1、 (9) 2、 (10) 3、 (11) 4、 (11) 5、 (11) 6、 (12) 7、 (12) 8、 (13) 9、 (13) 八、收获及体会 (14) 一、实验目的 1、理解并掌握单链表的结构特点和相关概念; 2、学会单链表的基本操作:建立、插入、删除、查找、 输入、撤销、逆置、求前驱和后继等并实现其算法。

二、实验内容 利用头插建立一个带头结点的单链表,并用算法实现该单链表的插入、删除查找、输出、求前驱和后继、再把此单链表逆置,然后在屏幕上显示每次操作的结果当所有操作完成后能撤销该单链表。 三、实验基本要求(软、硬件) 用VC++6.0软件平台,操作系统:Windows XP 硬件:内存要求:内存大小在256MB,其他配置一般就行。 四、算法设计思想 1、定义一个创建链表的函数,通过该函数可以创建一个链表,并为下面的函数应用做 好准备。 2、定义输出链表的算法,通过对第一步已经定义好的创建链表函数的调用,在这一步 通过调用输出链表的函数算法来实现对链表的输出操作。 3、定义一个遍历查找的算法,通过此算法可以查找到链表中的每一个节点是否存在。 4、定义查找链表的每一个前驱和后继,通过定义这个算法,可以很容易的实现对链表 的前驱和后继的查找工作。 5、定义插入节点的算法,通过定义这个算法,并结合这查找前驱和后继的算法便可以 在连链表的任意位置进行插入一个新节点。 6、定义删除节点的操作,这个算法用于对链表中某个多余节点的删除工作。 7、定义一个逆置单链表的操作,通过定义这个算法,可以逆置输出单链表。 8、定义一个撤销链表的算法,这个算法用于删除单链表中的所有节点,使链表为空。

高级程序设计实验报告

高级程序设计 实验报告 班级 学号: 姓名: 实验名称: 指导老师: 日期:

实验十一文件和流I/O 一、实验题目:文件和流I/O 二、实验内容: 1.掌握磁盘的基本操作 2.掌握目录的基本操作 3.文件的基本操作 4.文本文件的读取和写入 5.字符串的读取和写入 6.二进制文件的读取和写入I 7. 二进制文件的读取和写入2 三、主要程序代码: 1. using System; using System.IO; using System.Collections.Generic; using System.Text; namespace实验1 { class Test { public static void Main() { DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { Console.WriteLine("Drive {0}", https://www.doczj.com/doc/da11547160.html,); Console.WriteLine(" File type: {0}", d.DriveType); if (d.IsReady == true) { Console.WriteLine(" Volume label: {0}", d.VolumeLabel); Console.WriteLine(" File system: {0}", d.DriveFormat); Console.WriteLine(" Available space to current user:{0, 15} bytes",d.AvailableFreeSpace); Console.WriteLine("Total available space: {0, 15} bytes",d.TotalFreeSpace); Console.WriteLine( " Total size of drive: {0, 15} bytes ", d.TotalSize); } } Console.ReadKey();

数据结构实验报告 - 答案汇总

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序 的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表 LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表 ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点 void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存

C语言链表实验报告

链表实验报告 一、实验名称 链表操作的实现--学生信息库的构建 二、实验目的 (1)理解单链表的存储结构及基本操作的定义 (2)掌握单链表存储基本操作 (3)学会设计实验数据验证程序 【实验仪器及环境】计算机 Window XP操作系统 三、实验内容 1、建立一个学生成绩信息(学号,姓名,成绩)的单链表,按学号排序 2、对链表进行插入、删除、遍历、修改操作。 3、对链表进行读取(读文件)、存储(写文件) 四、实验要求 (1)给出终结报告(包括设计过程,程序)-打印版 (2)对程序进行答辩

五、实验过程、详细内容 1、概念及过程中需要调用的函数 (1)链表的概念结点定义 结构的递归定义 struct stud_node{ int num; char name[20]; int score; struct stud_node *next; }; (2)链表的建立 1、手动输入 struct stud_node*Create_Stu_Doc() { struct stud_node *head,*p; int num,score; char name[20]; int size=sizeof(struct stud_node); 【链表建立流程图】

2、从文件中直接获取 先建立一个 (3)链表的遍历 (4 )插入结点 (5)删除结点 (6)动态储存分配函数malloc () void *malloc(unsigned size) ①在内存的动态存储区中分配一连续空间,其长度为size ②若申请成功,则返回一个指向所分配内存空间的起始地址的指针 ③若申请不成功,则返回NULL (值为0) ④返回值类型:(void *) ·通用指针的一个重要用途 ·将malloc 的返回值转换到特定指针类型,赋给一个指针 【链表建立流程图】 ptr ptr ptr->num ptr->score ptr=ptr->next head pt r s s->next = ptr->next ptr->next = s 先连后断 ptr2=ptr1->next ptr1->next=ptr2->next free (ptr2)

合工大汇编语言程序设计实验报告

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级:**************** 学号:********** 姓名:***** 目录

实验一 (3) 实验二 (7) 实验三 (12) 实验四 (22)

实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二.实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三.实验过程和程序 实验内容一: e ds:0200 E7 1A 3F 00 e ds:0204 C4 E5 6B 00 实验内容二: (1)直接寻址方式 MOV AX,[0200] MOV BX,[0202] ADD AX,[0204] ADC BX,[0206] MOV [0208],AX MOV [020A],BX (2)寄存器间接寻址方式 MOV SI,0200H MOV DI,0204H MOV BX,0208H MOV AX,[SI] MOV DX,[SI+2] ADD AX,[DI] ADC DX,[DI+2]

算法程序设计实验报告

程序设计》课程设计 姓名:王 学号:20100034 班级:软件工程00 班 指导教师:王会青 成绩: 2010年 6 月 实验一.构造可以使n 个城市连接的最小生成树 专业:__软件工程___ 班级:__软件姓名:_王___ 学号:_20100034 完成日期:_2010/6/26 ________ 一、【问题描述】给定一个地区的n 个城市间的距离网,用Prim 算法或Kruskal 算法建立最小生成树,并计算得到的最小生成树的代价。 1 城市间的道路网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道

路,则将相应边的权值设为自己定义的无穷大值。 2 显示出城市间道路网的邻接矩阵。 3 最小生成树中包括的边及其权值,并显示得到的最小生成树的总代价。 4 输入城市数、道路数→输入城市名→输入道路信息→执行Kruskal 算法→执行Prim 算法→输出最小生成树 二、【问题分析】 1. 抽象数据类型结构体数组的定义: #ifnd ef ADJACENCYMATRIXED// 防止该头文件被重复引用 #define ADJACENCYMATRIXED // 而引起的数据重复定义 #define INFINITY 32767 // 最大值∞ #define MAX_VERTEX_NUM 20 // 最大顶点个数 typedef int VRType; // 权值,即边的值 typedef char InfoType; // 附加信息的类型,后面使用时会定义成一个指针 typedef char VertexType[MAX_VERTEX_NUM]; // 顶点类型 typedef enum {DG=1, DN, UDG, UDN} GraphKind; //{ 有向图,有向网,无向图,无向网} typedef struct ArcCell { VRType adj; //VRType 是顶点关系类型。对无权图,用1 或0 表示相邻否;对带权图,则为权值类型。 InfoType*info; // 该弧关系信息的指针

链表基本操作实验报告

实验2 链表基本操作实验 一、实验目的 1.定义单链表的结点类型。 2.熟悉对单链表的一些基本操作和具体的函数定义。 3.通过单链表的定义掌握线性表的链式存储结构的特点。 二、实验内容与要求 该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。 要求: 同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。 三、算法分析与设计。 1.创建单链表: 头结点L

...... 2.单链表插入

s s->data=x; s->next=p->next; p->next=s; 3.单链表的删除: p->next=p->next->next;

四、运行结果 1.单链表初始化 2.创建单链表 3.求链表长度 4.检查链表是否为空 5.遍历链表 6.从链表中查找元素 7.从链表中查找与给定元素值相同的元素在顺序表中的位置

8.向链表中插入元素 插入元素之后的链表 9.从链表中删除元素 删除位置为6的元素(是3) 10.清空单链表 五、实验体会 经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程

C++高级程序设计实验报告四(125)

西財is Jc I擊学生实验报告 学院:软件与通信工程学院 课程名称:C++高级程序设计(软件) 专业班级:12软件5班________ 姓名:____________________________ 学号:____________________________ 学生实验报告(4)

一、实验综述 1、实验目的及要求 (1)进一步理解继承与派生的概念,掌握它们的使用; (2)理解类之间的继承与派生关系,能设计并编程实现若干个相互有关联的自定义类,且对这些类进行简单的使用; (3)了解虚基类的作用与方法。 (4)掌握类的多态性与虚函数的定义与使用; (5)了解纯虚函数和抽象类的的概念和用法。实验题: (1)教材390第9题; (2)某商店有如下的几种货品:衬衣、帽子、立柜。每一种货物都有详细的说明信息。 衬衣:布料、单价、产地、库存量; 帽子:布料、样式(平顶或尖顶)、单价、产地、库存量; 立柜:木料、颜色、单价、产地、库存量; 对这些商品的操作有:商品的进库(增加库存量),商品的出库(减少库存量),该类货品总价格的计算。 要求自行设计数据结构,用类结构将上述的货品表示出来。在上一步的基础上,将上述的商品管理计算机化,完成操作要求的功能。 (3)教材414第5题; (4)声明一个Shape抽象类,在此基础上派生出 Redtangle和Circle 类,二者都使用GetArea ()函数计算对象的面积,GetPerim ()函数计算对象的周长。 实验要求: 认真完成实验题,一定要使所编写的程序运行成功,提交实验报告并上传程序,实验报告要求写出操作步骤、结果、问题、解决方法、体会等。 2、实验仪器、设备或软件 计算机、VC++6.0 office、相关的操作系统等。 二、实验过程(实验步骤、记录、数据、分析) 写明具体实施的步骤,包括实验过程中的记录、数据和相应的分析

网络编程实验报告

网络编程技术实验报告 一实验目的: 网络编程技术是计算机科学与技术专业、网络工程专业、软件工程专业的一门专业基础课程。本课程以Java技术为主讲授,Java语言是当前最流行的网络编程语言。本课程是一门实用性和综合运用性都很强的课程,实践教学环节是教学过程中必不可少的重要内容。通过实验,让学生熟悉JDK中的主要内容,掌握用JDK调试和运行程序的方法,掌握网络编程的基本思想和开发方法、面向对象编程的思想,JA V A中的基本方法和技术,能够熟练使用JA V A设计、编写程序,特别是基于TCP/IP的Socket 编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。通过实验,提高学生使用Java语言程序设计开发的能力,提高应用面向对象技术分析和解决实际问题的能力,并在此基础上强化学生的实践意识、提高其分析问题、解决问题的能力以及动手能力和创新能力。 二实验要求 要求学生熟悉JDK中的主要内容,掌握用JDK调试和运行程序的方法,掌握网络编程的基本思想和开发方法、面向对象编程的思想,JAVA中的基本方法和技术,能够熟练使用JAVA设计、编写程序,特别是基于TCP/IP的Socket编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。要注意培养学生良好的编程习惯,自始至终贯彻课程中所介绍的程序设计风格。为保证尽量在统一安排的上机时间内完成程序设计任务,学生应事先做问题分析,并做静态检查。学生应记录实验中所遇到的问题,并写出详细的实验报告。课前准备上机程序,上机认真调试,课后撰写实验报告,实验报告包括实验目的、实验内容、源程序、实验结果及分析。

. 实验一java基本语法 实验目的: 了解Java的数据类型,掌握各种变量的声明方式,理解运算符的优先级,掌握Java基本数据类型、运算符与表达式,掌握顺序结构、选择结构和循环结构语法的程序设计方法。 实验要求: 1、编写一个声明Java不同数据类型变量的程序。 2、编写使用不同选择结构的程序。 3、编写使用不同循环结构结构的程序。 实验内容: 1、编写一个声明Java不同数据类型变量的程序。 public class DataTypes { public static void main(String args[]) { byte b=127; short s=32767; int i=2147483647; long l=9223372036l;//为什么long表示的数比Int还小? char c='c'; float f=1.23F; double d=0.9E-3; boolean bool=true; System.out.println(" b="+b); System.out.println(" s="+s); System.out.println(" i="+i); System.out.println(" l="+l); System.out.println(" c="+c); System.out.println(" f="+f); System.out.println(" d="+d); System.out.println(" bool="+bool); }

链表基本操作实验报告记录

链表基本操作实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

实验2链表基本操作实验 一、实验目的 1.定义单链表的结点类型。 2.熟悉对单链表的一些基本操作和具体的函数定义。 3.通过单链表的定义掌握线性表的链式存储结构的特点。 二、实验内容与要求 该程序的功能是实现单链表的定义和主要操作。如:单链表建立、输出、插入、删除、查找等操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。程序中的单链表(带头结点)结点为结构类型,结点值为整型。 要求: 同学们可参考指导书实验2程序、教材算法及其他资料编程实现单链表相关操作。必须包括单链表创建、输出、插入、删除操作,其他操作根据个人情况增减。 三、算法分析与设计。 1.创建单链表: LinkedList LinkedListCreat( ) 创建链表函数 LinkedList L=LinkedListInit(),p, r; 调用初始化链表函数 r=L; r指向头结点 使用malloc函数动态分配存储空间,指针p指向新开辟的结点,并将元素存 放到新开辟结点的数据域, p=(LinkedList)malloc(sizeof(LNode)); p->data=x; r->next=p; 将新的结点链接到头结点r之后 r=p; r指向p结点 scanf("%d",&x); 满足条件循环输入链表元素 while(x!=flag) 当输入不为-1时循环 r->next=NULL; return L; 将链表结尾赋空值,返回头结点L 头结点L L ...... ^ ^ An A1 A2

C++高级程序设计实验报告三(综合性实验)(125)

本科学生综合性实验报告 项目组长____________ 学号__________________ 成员______________________________________ 专业软件工程班级12软件5班 实验项目名称类和对象的综合应用 指导教师及职称_____________________________ 开课学期12 至—13_学年一二学期 上课时间2013年 2 月20 日 学生实验报告三(综合性实验)

一、实验综述 1、实验目的及要求 通过运用C++编程对类和对象的概念及使用进一步加深理解,并对用Visual C++进行应用程序开发有一个初步的认识,掌握C++程序设计的方法,熟练掌握类 和对象的定义和使用方法,掌握对象的初始化和赋值的方法,掌握静态成员的使用方法,理解数据成员和函数成员的属性、使用权限、调用方法。综合训练C++知识, 包括C++S序的分析与设计、函数调用、算法设计等,从而为后续课程的学习打下杂实的编程基础。 实验题: 编写设计一个People (人)类。该类的数据成员有年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员,成员函数有构造函数(People)、进食(Eatting)、运动(Sporting)、睡眠(Sleeping)、显示(Show)和显示人数(ShowNum)其中构造函数由已知参数年龄(a)、身高(h)和体重㈣构造对象,进食函数使体重加1,运动函数使身高加1,睡眠函数使年龄、身高、体重各加1, 显示函数用于显示人的年龄、身高、体重,显示人数函数为静态成员函数,用于显示人的个数。假设年龄的单位为岁,身高的单位为厘米,体重的单位为市斤,要求所有数据成员为protected访问权限,所有成员函数为public访问权限,在主函数中通过对象直接访问类的所有成员函数。 实验要求: 认真完成实验题,一定要使所编写的程序运行成功,提交实验报告并上传程序,实验报告要求写出操作步骤、结果、问题、解决方法、体会等。 2、实验仪器、设备或软件 计算机、VC++6.0 office、相关的操作系统等。 二、实验过程(实验步骤、记录、数据、分析) 写明需求分析,功能模块的设计和说明,具体实施的步骤,包括实验过程中的记录、数据和相应的分析

网络编程实验报告

【实验目的】 掌握基于多线程并发服务器的基本设计框架和实现方法。 【实验性质】 综合性实验 【实验器材与所需软件】 计算机、交换机、windows操作系统、java集成开发环境 【实验学时】 8学时 【实验内容】 实现一个多线程并发服务器(服务器功能自选),要求该服务器可以体现出同时为多个客户端服务的特性。 【实验过程与步骤】 实验设计并实现了一个基于多线程并发服务器的网络聊天室工具。 1,需求分析: 工具采用了Client/Server结构,将聊天室划分为两个子程序:客户端子程序、服务器端子程序。 ●客户端程序: 实现客户端与服务器端进行连接,并可与服务器端进行实时通讯。 ●服务器端: 实现建立与多个客户端程序之间的连接,管理连接并能够通过多线程技术同时与多个客户端进行实时通讯。 2,系统设计: 系统的设计中,客户端与服务器端的连接,通过TCP/IP网络建立,并依托Socket进行实时通讯。系统中,各个模块之间的关系如下图所示:

上图中,显示同一服务器,通过网络可以同时与多个客户端程序建立连接并实现实时通讯功能,通讯流程如下图所示: 根据图示,客户端与服务器之间通过Socket()进行实时通讯,通讯步骤是:服务器监听、客户端发出请求、服务器接受、建立连接、交互通讯、关闭连接。另外,由于聊天室工具必须实现多客户端同时连接通讯的要求,因此,在服务器端设计时考虑采用多线程技术,每个服务器拥有多个服务线程,每个线程负责与一个客户端进行连接通讯,从而达到一个服务器同时与多个客户端并发通讯的效果。 3,系统实现: 在网络聊天室的最终实现时,设计服务器类、服务器线程类、客户端类以及系统界面类: ●服务器类 Class Server: 主要负责管理系统中的服务器线程,通过线程管理与客户端之间的连接及通讯,是服务器的主要管理端。 ●服务器线程类 Class ServerThread: 线程类中,实现了具体的服务器与客户端之间一一对应的连接关系,并通过Socket与客户端进行实时通讯。 ●客户端类 Class Client:

相关主题
文本预览
相关文档 最新文档