1、 网络应用课程设计报告 系 ( 院): 计算机科学学院 专业班级: 计科 z11601 姓 名: 聂力 学 号: 201610071 指导教师: 潘劲松 /邱林 设计时间: 2017.6.12 - 2017.6.23 设计地点: 4 教软件工程机房 目录 一、 课程的目的和意义 . 1 二、 系统需求及分析 . 1 2.1.设计题目 . 1 2.2 系统需求 . 1 三 、详细设计 . 2 3.1、 设计成果及心得 . 3 四、 总结 . 4 五 、 附录 . 4 第 1 页 共 14 页 一、 课程的目的和意义 计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论
2、与实践相结合。让学生用具体的实践成果,体现对理论知识的掌握程度。有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。其基本目的是: 1、 培养学生理论联系实际的设计思想,训练综合运用所学的基础理论知识,结合生产实际分析和解决网络应用中问题的能力,从而使基础理论知识得到巩固和加深。 2、 学习掌握网络应用工程的一般设计过程和方法。 二、 系统需求及分析 2.1.设计题目 题目 2:基于 TCP 协议的通讯录 2.2 系统需求 1、需要录入联系人到通讯录中; 2、能够对通讯录中各项信息进行添加删除浏览等一系列操作; 3、能够完成通讯录的基本功能; 4、程序具有一定的健壮性,不会因为
3、用户的输入错误引起程序运行错误而中 断执行。对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入 ; 5、对删除数据应给出警告。 2.3 功能分析 1、添加功能:选择此功能可以用户手动输入联系人各项信息; 2、查看功能:选择此功能时可以选择根据各种信息查询联系人电话、住址、性别、邮箱、 QQ 等各项信息; 3、删除功能:选择此功能时能够通过输入联系人姓名或者电话删除联系人的全部信息; 4、退出系统功能:选择此功能时能够退出系统并保存数据。 功能结构图: 主菜单 添加联系人 删除联系人 查看联系人 退出 第 2 页 共 14 页 流程
4、图 : 三 、详细设计 套接字是应用层到传输层的接口。准确地说是, Socket 被作为应用程序与 TCP/IP 协议交互的接口。通过 Socket 可以区分不同的 TCP/IP 连接和应用程序的进程。 TCP 客户端与服务端流程图: 服务端: void Start(); 创建套接字; std:list m_list;/链表类 链表对象 CSocket m_sock; 定义套接字; BOOL Browse(CSocket *pSocka);查看联系人信息; BOOL AddData(CSocket *pSocka);添加联系人信息; BOOL OnReceive(CSocket* pSocka
5、);收发数据; BOOL Delete(CSocket *pSocka);删除信息; 输入任意键进入主菜单 输入 03 选择功能 1:查看 2:添加 3:删除 4:退出 输入 4:退出 输入 1:查看各项信息 输入 2:添加各项信息输入 3:删除学号 第 3 页 共 14 页 客户端: void Delete();删除数据; void Print();输入数据; void Input();添加数据; int Menu();创建菜单; void Start();创建套接字; 3.1、 设计成果及心得 添加功能:客户端运行结果: 服务端运行结果: 删除功能: 客户端运行结果: 服务端运行结果: 第
6、 4 页 共 14 页 文档保存及删除: 四、 总结 紧紧张张 的两周课设 即将过去,从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里时不时的有一种喜悦。通过这 两周 的 课设 ,我认识到书上和老师教的内容是有限的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去学习,同时我们还应向他人请教,从而了解更多自己不知道的知识。回头看来,编写这个程序并不像原来想像的那么难,我们要相信自己,无论做什么事,只要我们仔细的思考了,认真的去做了,我们就一定能做好。 通过这周的编程我发现了自己的一些不足,在编写时经常犯一些低级错误,由于自己的马虎而浪费了不少时间。在不知如何进行的时候有
7、一种不自信,总想别人正在做什么,这些不足既然被发现就得在以后的做事中注意,争取改掉。 经过 两 周的努力我 掌握了一些基本的 C+进行程序设计的技巧,更深的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,同时学会了一些调试一个较长程序的基本方法,提高了书写程序设计开发文档的能力(书写课程设计报告)。这周的实践让我受益匪浅,在此我要感谢孜孜不倦指导我们的老师,感谢在我困惑时给我帮助的同学,感谢学校给我们一个这样动手动脑的机会,使我们在理论与实践相结合方面又得到了一次很好的锻炼,让我们得到很大的收获。 五 、 附录 服务端代码: Student.h 中代码: / Stud
8、ent.h: interface for the CStudent class. / / #if !defined(AFX_STUDENT_H_51E819EA_E8BD_4CCD_9E03_F45C00E0494F_INCLUDED_) #define AFX_STUDENT_H_51E819EA_E8BD_4CCD_9E03_F45C00E0494F_INCLUDED_ #include #if _MSC_VER 1000 #pragma once #include #endif / _MSC_VER 1000 enum PORT=10011; 第 5 页 共 14 页 enum REQ_
9、ADD=0x1111, REQ_DEL, REQ_MOD,/命令号 REQ_FIND, REQ_BROW, ; typedef struct SStud int nNumb; char sName20; char sAge20; char sSex4; char sUnit20; char sAdd20; DATA; class CStudent std:list m_list;/链表类 链表对象 保存到 Save 和 Load 中 CSocket m_sock;/与客户端通信的 socka 的对象 BOOL Browse(CSocket *pSocka); BOOL AddData(CSoc
10、ket *pSocka); BOOL OnReceive(CSocket* pSocka); BOOL Delete(CSocket *pSocka); public: void Load(); void Save(); void Start(); CStudent(); virtual CStudent(); ; #endif / !defined(AFX_STUDENT_H_51E819EA_E8BD_4CCD_9E03_F45C00E0494F_INCLUDED_) Student.cpp 代码: / Student.cpp: implementation of the CStudent
11、 class. / / #include “stdafx.h“ 第 6 页 共 14 页 #include “Student.h“ #include #include /#include /#include using namespace std; / / Construction/Destruction / CStudent:CStudent() CStudent:CStudent() void CStudent:Start() WSADATA wd; WSAStartup(0x0202,/套接字初始化 if(! m_sock.Create (PORT) cout Receive( list
12、:iterator it=m_list.begin(); while(it!=m_list.end() DATA /将 it 指向的结构体数据赋给 it,it 并向下移动 pSocka-Send( /将某项信息删除后更新文件 FILE *fp; int n=m_list.size(); /删除后的 n 变化 fp=fopen(“4.txt“,“w“); fprintf(fp,“n“); fprintf(fp,“%d“,d.nNumb); fprintf(fp,“t“); fprintf(fp,“%s“,d.sName ); fprintf(fp,“t“); fprintf(fp,“%s“,d.sAge ); fprintf(fp,“t“); fprintf(fp,“%s“,d.sSex ); fprintf(fp,“t“); fprintf(fp,“%s“,d.sUnit ); fprintf(fp,“t“); fprintf(fp,“%s“,d.sAdd ); fprintf(fp,“t“); fprintf(fp,“n“); fclose(fp); system(“color 0a“); cout“学号 t 姓名 t 年龄 t 性别 t 单位 t 手机号码 “endl;