基于C语言实现的Linux系统下邮件系统【100010645】
Linux 系统下邮件系统项目要求书
FlowerMail 项目概要设计
FlowerMail 项目详细设计
Linux 系统下邮件系统项目要求书
1 项目概要
开发一款运行于 Linux 操作系统平台的邮件模拟系统,可以实现局域网内任意电脑之间的信息接收与发送,也可作为支持中小型规模的企业内部信息交流。主要功能包括:
- 有方便实用的邮件登陆界面、收发邮件界面和写邮件界面;
- 可以实现局域网内任意电脑间的邮件接受与发送。
1.1 项目名称
FlowerMail 邮件系统
1.2 项目目标
- 体会从需求理解出发,到软件概要设计,详细设计,编码,测试,发布的整个流程,熟悉软件开发的全部流程;
- 熟悉 Linux 操作系统下的 C 应用程序开发环境,掌握 Linux 系统下开发工具 vi、gcc 和 gdb 的使用,以及 makefile 的写法;
- 掌握 Linux 环境下图形工具包 GTK 和网络编程中 socket“套接字”的使用;
- 练习使用 Linux 环境下的数据库 MySQL;
- 培养快速学习新知识并在项目中灵活使用的能力;
- 培养表达能力、沟通能力和团队合作能力。
1.3 开发环境
操作系统:Ubuntu 9.04
编译调试环境: VI+GCC+GDB
1.4 关键技术
- C 语言编程
- Linux 开发环境中开发工具的使用
- Gnome 图形设计——GTK+2.0
- 网络编程中 socket“套接字”的使用
- 数据库 MySQL 的使用
1.5 开发体制
2 软件详细需求
2.1 界面模块
1,有方便实用的登陆界面用户注册界面
2,有新用户注册界面,接受新用户注册,将新用户信息加入到数据库
3,有方便实用的收发界面
4,有方便实用的邮件编写界面
5,能改变邮件字体的大小、颜色等属性。
6,有添加附件功能,具有选择待传输文件的窗口,实现附件发送功能。
7,其它附加功能,如主题更换、添加界面背景,显示系统时间以及相应的软件使用说明信息等。
2.2 功能模块
1 发送邮件:
发送 | 填写收件人地址,点击发送即可 |
---|---|
抄送 | 添加抄送人地址,目标用户可以收到邮件 |
密送 | 密送人地址,对其他收件人不可见 |
转发 | 收到的邮件可以转发给他人 |
2 接收邮件:
可以接收其它此软件发送的信息,并显示在接收信息框。
登录时自动收取邮件 | 登录时服务器将用户还没有收取的邮件发给用户 |
---|---|
点击收取,收取邮件 | 点击收取功能键,收取还没有接受的邮件 |
查看邮件 | 点击邮件主题即可查看邮件内容 |
3 管理邮件:
删除邮件 | 将选中的邮件删除到垃圾箱 |
---|---|
恢复邮件 | 将垃圾箱中的邮件恢复到原位置 |
搜索 | 在搜索框中输入关键字,查找包含关键字的邮件 |
4 编写邮件
直接编写 | 在主界面点击编写,直接跳转到编写界面 |
---|---|
回复编写 | 阅读邮件时点击回复,进入编写界面 |
保存邮件到草稿箱 | 用户可以将未写好的邮件保存至草稿箱 |
草稿箱中邮件编辑 | 用户可以选择草稿箱中的邮件继续编辑 |
5 邮件存储
连接数据库 | 与数据库相连,存取数据 |
---|---|
存储邮件 | 将未转发出去的邮件存储到相应的数据库表中 |
6,邮件提醒
邮件提醒 | 有新邮件是自动接收并提醒用户 |
---|---|
3 系统整体设计
3.1 系统结构图
3.2 模块要求
各个模块简单说明:
1 界面层:
登录界面、注册界面、收发界面、和邮件编写界面等均使用 GTK 编码实现,界面美观实用;灵活应用回调函数,理解信号与回调函数的原理,使得界面与界面之间的弹出有序;对各个控件的操作均有相应的回调与之对应。
2 通信层:
数据通信使用 socket“套接字”来实现,理解 socket“套接字”的原理,并能熟练使用连接建立、数据传输等操作。通过线程的创建来实现数据的发送与接收。
3 数据存储:
将用户信息以及发送和收取的邮件信息保存到数据库中。
FlowerMail 项目概要设计
1 文档概述
1.1 文档目的和范围
作为详细设计与程序设计的参考依据。
1.2 术语/缩略语
序号 | 术语/缩略语 | 说明 |
---|---|---|
1 | Glib | Glib 是一种通用的函数库。 |
2 | GDK+ | GTK+ 是一种函数库是用来帮助制作图形交互界面的。 |
1.3 参考文档
序号 | 文档名 | 作者 | 时间 | 版本 |
---|---|---|---|---|
1 | Linux 系统下邮件系统项目要求书.doc | 孙欣 | 2012.09.05 | 1.0 |
2 | 需求理解一览表.xls | Team5 | 2012.09.05 | 1.0 |
2 模块概述
2.1 模块功能定义
序号 | 模块 | 功能点 | 功能点详细内容 |
---|---|---|---|
1 | 登陆模块 | 校验用户输入字符串 | 验证用户输入的帐号密码是否合法 |
2 | 传送数据到服务端 | 将用户填写的数据从客户端提交到服务端 | |
3 | 返回匹配结果 | 返回结果:0,1,2。0 表示成功;1 表示用户名不存在;2 表示密码错误;3 表示已经登录。 | |
4 | 注册模块 | 校验用户输入字符串 | 验证用户输入的注册内容是否合法 |
5 | 传送数据到服务端 | 将用户填写内容客户端提交到服务端 | |
验证注册 ID | 如果用户 ID 已经被注册,则不允许注册,提示用户改变 ID | ||
6 | 存储到数据库 | 如果允许注册,则存储入数据库,返回注册成功 | |
7 | 收发模块 | 加载并显示未读邮件 | 以列表形式呈现邮件概要 |
8 | 根据具体功能按钮加载并显示相应邮件 | 以列表形式呈现邮件概要 | |
9 | 搜索邮件 | 根据搜索条件或关键字以列表形式显示邮件 | |
10 | 新建邮件 | 创建一封新邮件,跳转到编写邮件窗口 | |
11 | 发送邮件 | 直接发送邮件(发送方式:抄送,密送,发送) | |
12 | 接收邮件 | 从服务器下载更新的邮件到本地 | |
13 | 回复邮件 | 快速回复邮件,在当前窗口右下角产生文本框 | |
14 | 转发邮件 | 根据选中的邮件,跳转到编写邮件界面 | |
15 | 删除邮件 | 删除选中的邮件 | |
16 | 查看邮件 | 查看邮件的内容包括附件文件名 | |
17 | 下载附件 | 如果有附件则可以下载到本地 | |
18 | 编写模块 | 选中联系人 | 从联系人列表选出收信人 |
19 | 添加联系人 | 可以手动添加联系人(备注名称,邮件地址) | |
20 | 保存草稿 | 存储当前邮件 | |
21 | 字体大小 | 设置文本字体大小 | |
22 | 字体颜色 | 设置文本字体颜色 | |
23 | 添加附件 | 从本地选中附件内容 | |
24 | 附加功能 | 主题更换 | |
25 | 添加界面背景 | ||
26 | 显示系统时间 | ||
27 | 软件使用说明信息 |
2.2 模块结构
画图或列表说明各个模块的组成结构(可以使用中文描述或函数名)。
模块名称 | 模块类型 | 概要说明 |
---|---|---|
登陆注册界面 | 外部模块 | |
收发界面 | 外部模块 | |
编辑、阅读界面 | 外部模块 | |
发送邮件 | 外部模块 | |
接收邮件 | 外部模块 | |
管理邮件 | 外部模块 | |
编写邮件 | 外部模块 | |
邮件存储 | 外部模块 | |
邮件提醒 | 外部模块 | |
数据库模块 | 内部模块 | 数据库底层函数设计 |
Socket 模块 | 内部模块 | 数据传输函数设计 |
2.3 模块动作时序
描述模块间动作的时序图。可以在其它文件中记述(这里说明参考「XXX」文件)。
3 接口说明
3.1 数据结构定义
给出模块所用数据结构的说明,以及全局变量和宏常量。
typedef strcut tagUSER_t
{
char acUserID[25];//用户ID
char acNickName[50];//昵称,默认为字符串(“新用户”)
char acPasswd[16];//密码
char acTelephone[11];//电话号码
int iState;//登录状态
} stUser;
typedef strcut tagMAIL_t
{
char acEmailID[25];//邮件ID
char acTitle[50];//邮件标题
char acContent[50];//邮件内容
int iType;//邮件类型reserved/send/receive/copy/draft/…
int iState;//0保留/1已经读过/2未读过/3已经回复/4未回复/…
char acSendTargetID[500];//多个目标用户ID串,以分号作为分隔符
char acCopyTargetID[500];//多个目标用户ID串,以分号作为分隔符
char acEmailTime[20];//邮件发送时间/接收时间/草稿保存时间/邮件回复时间
int iEmailSize;//邮件内容大小;注意取值范围0-1MB
char acAttachedFilePath[50];//多个附件存放路径字符串,以分号作为分隔符;
cahr acUserID[25];//邮件所属用户ID(邮件撰写者)
} stMail;
3.2 函数
3.2.1 模块间接口函数
3.2.1 Send
函数名 | Send | Send | Send | Send |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 发送 | 发送 | 发送 | 发送 |
记述形式 | int Send (int socket_fd ,char* pcBuffer) | int Send (int socket_fd ,char* pcBuffer) | int Send (int socket_fd ,char* pcBuffer) | int Send (int socket_fd ,char* pcBuffer) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
int | socket_fd | socket_fd | I | 套接字标示符 |
char* | pcBuffer | pcBuffer | I | 缓冲区 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 发送成功 | 发送成功 |
返回值 | 值 | 1 | 发送失败 | 发送失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
下载附件 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.1 Receive
函数名 | Receive | Receive | Receive | Receive |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 发送 | 发送 | 发送 | 发送 |
记述形式 | int Receive (int socket_fd ,char* pcBuffer) | int Receive (int socket_fd ,char* pcBuffer) | int Receive (int socket_fd ,char* pcBuffer) | int Receive (int socket_fd ,char* pcBuffer) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
int | socket_fd | socket_fd | I | 套接字标示符 |
char* | pcBuffer | pcBuffer | I | 缓冲区 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 接收成功 | 接收成功 |
返回值 | 值 | 1 | 接收失败 | 接收失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
下载附件 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2 模块内接口函数
3.2.2.1 CheckLoginInput
函数名 | CheckLoginInput | CheckLoginInput | CheckLoginInput | CheckLoginInput |
---|---|---|---|---|
文件名 | …/LoginModule.c | …/LoginModule.c | …/LoginModule.c | …/LoginModule.c |
功能概要 | 检查用户输入的账号密码时候是否合法(客户端,模块内) | 检查用户输入的账号密码时候是否合法(客户端,模块内) | 检查用户输入的账号密码时候是否合法(客户端,模块内) | 检查用户输入的账号密码时候是否合法(客户端,模块内) |
记述形式 | int CheckLoginInput (char pcUserID, char pcPasswd) | int CheckLoginInput (char pcUserID, char pcPasswd) | int CheckLoginInput (char pcUserID, char pcPasswd) | int CheckLoginInput (char pcUserID, char pcPasswd) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcUserID | pcUserID | I | 账户 |
char* | pcPasswd | pcPasswd | I | 密码 |
返回值 | 类型 | int | 说明 | 说明 |
返回值 | 值 | 0 | 输入合法 | 输入合法 |
返回值 | 值 | 1 | 账户含有非法字符 | 账户含有非法字符 |
返回值 | 值 | 2 | 密码不合法(长度或非法字符) | 密码不合法(长度或非法字符) |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
在客户端判断用户输入的账号和密码是否合法 | 在客户端判断用户输入的账号和密码是否合法 | 在客户端判断用户输入的账号和密码是否合法 | 在客户端判断用户输入的账号和密码是否合法 | 在客户端判断用户输入的账号和密码是否合法 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.2 CheckRegisterInput
函数名 | CheckRegisterInput | CheckRegisterInput | CheckRegisterInput | CheckRegisterInput |
---|---|---|---|---|
文件名 | …/RegisterModule.c | …/RegisterModule.c | …/RegisterModule.c | …/RegisterModule.c |
功能概要 | 检查用户输入注册信息是否正确(客户端,模块内) | 检查用户输入注册信息是否正确(客户端,模块内) | 检查用户输入注册信息是否正确(客户端,模块内) | 检查用户输入注册信息是否正确(客户端,模块内) |
记述形式 | int CheckRegisterInput (tagUSER_t *registerInfo) | int CheckRegisterInput (tagUSER_t *registerInfo) | int CheckRegisterInput (tagUSER_t *registerInfo) | int CheckRegisterInput (tagUSER_t *registerInfo) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
tagUSER_t * | registerInfo | registerInfo | I | 用户注册的信息 |
返回值 | 类型 | int | 说明 | 说明 |
返回值 | 值 | 0 | 输入全部合法 | 输入全部合法 |
返回值 | 值 | 1 | 注册信息不合法 | 注册信息不合法 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
在客户端检查用户输入的注册信息是否符合要求 | 在客户端检查用户输入的注册信息是否符合要求 | 在客户端检查用户输入的注册信息是否符合要求 | 在客户端检查用户输入的注册信息是否符合要求 | 在客户端检查用户输入的注册信息是否符合要求 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.3 CheckUserIdExist
函数名 | CheckUserIdExist | CheckUserIdExist | CheckUserIdExist | CheckUserIdExist |
---|---|---|---|---|
文件名 | …/RegisterModule.c | …/RegisterModule.c | …/RegisterModule.c | …/RegisterModule.c |
功能概要 | 调用 socket 函数判断是用户名是否存在(客户端,模块内) | 调用 socket 函数判断是用户名是否存在(客户端,模块内) | 调用 socket 函数判断是用户名是否存在(客户端,模块内) | 调用 socket 函数判断是用户名是否存在(客户端,模块内) |
记述形式 | int CheckUserIdExist (char *pcUserId) | int CheckUserIdExist (char *pcUserId) | int CheckUserIdExist (char *pcUserId) | int CheckUserIdExist (char *pcUserId) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcUserId | pcUserId | I | 用户 ID |
返回值 | 类型 | int | 说明 | 说明 |
返回值 | 值 | 0 | 已经被注册 | 已经被注册 |
返回值 | 值 | 1 | 未被注册 | 未被注册 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
在客户端调用 socket 函数判断输入的用户名是否已经被注册 | 在客户端调用 socket 函数判断输入的用户名是否已经被注册 | 在客户端调用 socket 函数判断输入的用户名是否已经被注册 | 在客户端调用 socket 函数判断输入的用户名是否已经被注册 | 在客户端调用 socket 函数判断输入的用户名是否已经被注册 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.4 GetNewMail
函数名 | GetNewMail | GetNewMail | GetNewMail | GetNewMail |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 获取未读邮件信息 | 获取未读邮件信息 | 获取未读邮件信息 | 获取未读邮件信息 |
记述形式 | Int GetNewMail(stMail * pstNewMail) | Int GetNewMail(stMail * pstNewMail) | Int GetNewMail(stMail * pstNewMail) | Int GetNewMail(stMail * pstNewMail) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
stMail * | pstNewMail | pstNewMail | O | 新邮件信息 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 获取成功 | 获取成功 |
返回值 | 值 | 1 | 无新邮件 | 无新邮件 |
返回值 | 值 | 2 | 通信失败 | 通信失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
从服务器端获得未读邮件 | 从服务器端获得未读邮件 | 从服务器端获得未读邮件 | 从服务器端获得未读邮件 | 从服务器端获得未读邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.5 GetLocalMail
函数名 | GetLocalMail | GetLocalMail | GetLocalMail | GetLocalMail |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 获取邮件信息 | 获取邮件信息 | 获取邮件信息 | 获取邮件信息 |
记述形式 | Int GetLocalMail (stMail pstDraftMail,char pcMailPath) | Int GetLocalMail (stMail pstDraftMail,char pcMailPath) | Int GetLocalMail (stMail pstDraftMail,char pcMailPath) | Int GetLocalMail (stMail pstDraftMail,char pcMailPath) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
stMail * | pstDraftMail | pstDraftMail | O | 草稿邮件信息 |
char* | pcMailPath | pcMailPath | I | |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 获取成功 | 获取成功 |
返回值 | 值 | 1 | 获取失败 | 获取失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
从本地获得草稿邮件 | 从本地获得草稿邮件 | 从本地获得草稿邮件 | 从本地获得草稿邮件 | 从本地获得草稿邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.6 SearchMail
函数名 | SearchMali | SearchMali | SearchMali | SearchMali |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 搜索邮件信息 | 搜索邮件信息 | 搜索邮件信息 | 搜索邮件信息 |
记述形式 | Int SearchMali (stMail pstMail,charpcKey,char* pcCondition) | Int SearchMali (stMail pstMail,charpcKey,char* pcCondition) | Int SearchMali (stMail pstMail,charpcKey,char* pcCondition) | Int SearchMali (stMail pstMail,charpcKey,char* pcCondition) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
stMail * | pstMail | pstMail | O | 邮件信息 |
char* | pcKey | pcKey | I | 搜索关键字 |
char* | pcCondition | pcCondition | I | 搜索条件 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 获取成功 | 获取成功 |
返回值 | 值 | 1 | 获取失败 | 获取失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
从本地搜索邮件 | 从本地搜索邮件 | 从本地搜索邮件 | 从本地搜索邮件 | 从本地搜索邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.7 SendMail
函数名 | SendMali | SendMali | SendMali | SendMali |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 发送邮件 | 发送邮件 | 发送邮件 | 发送邮件 |
记述形式 | IntSendMali(charpcUid,charpcToUid,charpcContent,charpcAttach,int iSendType) | IntSendMali(charpcUid,charpcToUid,charpcContent,charpcAttach,int iSendType) | IntSendMali(charpcUid,charpcToUid,charpcContent,charpcAttach,int iSendType) | IntSendMali(charpcUid,charpcToUid,charpcContent,charpcAttach,int iSendType) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcUid | pcUid | I | 发件者 id |
char* | pcToUid | pcToUid | I | 接收者 id |
char* | pcContent | pcContent | I | 邮件内容 |
char* | pcAttach | pcAttach | I | 附件路径 |
int | iSendType | iSendType | I | 发送方式 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 发送成功 | 发送成功 |
返回值 | 值 | 1 | 发送失败 | 发送失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
发送邮件 | 发送邮件 | 发送邮件 | 发送邮件 | 发送邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.8 GetAllMail
函数名 | GetAllMali | GetAllMali | GetAllMali | GetAllMali |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 接收所有邮件 | 接收所有邮件 | 接收所有邮件 | 接收所有邮件 |
记述形式 | Int GetAllMali (char* pcUid,char* pcRecvMailPath) | Int GetAllMali (char* pcUid,char* pcRecvMailPath) | Int GetAllMali (char* pcUid,char* pcRecvMailPath) | Int GetAllMali (char* pcUid,char* pcRecvMailPath) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | uId | uId | I | 收件者 id |
char* | recvMailPath | recvMailPath | I | 接收邮件的路径 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 接收到了邮件 | 接收到了邮件 |
返回值 | 值 | 1 | 没有接收到邮件 | 没有接收到邮件 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
从服务器中下载所有的邮件 | 从服务器中下载所有的邮件 | 从服务器中下载所有的邮件 | 从服务器中下载所有的邮件 | 从服务器中下载所有的邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.9 DeleteMail
函数名 | DeleteMali | DeleteMali | DeleteMali | DeleteMali |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 删除邮件 | 删除邮件 | 删除邮件 | 删除邮件 |
记述形式 | Int DeleteMali (int iType,char* pcMailPath,char * pcSql) | Int DeleteMali (int iType,char* pcMailPath,char * pcSql) | Int DeleteMali (int iType,char* pcMailPath,char * pcSql) | Int DeleteMali (int iType,char* pcMailPath,char * pcSql) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
int | iType | iType | I | O 删除本地,;1 删除服务器端 |
char* | pcMailPath | pcMailPath | I | 本地邮件的路径 |
char* | pcSql | pcSql | I | 数据库执行语句 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 删除邮件成功 | 删除邮件成功 |
返回值 | 值 | 1 | 删除邮件失败 | 删除邮件失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
删除邮件 | 删除邮件 | 删除邮件 | 删除邮件 | 删除邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.10 ViewSingleMail
函数名 | ViewSingleMali | ViewSingleMali | ViewSingleMali | ViewSingleMali |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 查看邮件 | 查看邮件 | 查看邮件 | 查看邮件 |
记述形式 | Int ViewSingleMali (char* pcMailPath,stMail * pstMail) | Int ViewSingleMali (char* pcMailPath,stMail * pstMail) | Int ViewSingleMali (char* pcMailPath,stMail * pstMail) | Int ViewSingleMali (char* pcMailPath,stMail * pstMail) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcMailPath | pcMailPath | I | 本地邮件的路径 |
stMail * | pstMail | pstMail | O | 输出邮件信息 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 打开邮件成功 | 打开邮件成功 |
返回值 | 值 | 1 | 打开邮件失败 | 打开邮件失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
查看邮件 | 查看邮件 | 查看邮件 | 查看邮件 | 查看邮件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.11 DownloadAttachedFile
函数名 | DonwloadAttachedFile | DonwloadAttachedFile | DonwloadAttachedFile | DonwloadAttachedFile |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
记述形式 | Int DonwloadAttachedFile (char* pcMailId,char* pcAttachPath) | Int DonwloadAttachedFile (char* pcMailId,char* pcAttachPath) | Int DonwloadAttachedFile (char* pcMailId,char* pcAttachPath) | Int DonwloadAttachedFile (char* pcMailId,char* pcAttachPath) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcMailId | pcMailId | I | 邮件的 id |
char* | pcAttachPath | pcAttachPath | I | 本地邮件的路径 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 下载附件成功 | 下载附件成功 |
返回值 | 值 | 1 | 下载附件失败 | 下载附件失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
下载附件 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.12 AddContact
函数名 | AddContact | AddContact | AddContact | AddContact |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
记述形式 | Int AddContact (char* pcUserId,char* pcContactId) | Int AddContact (char* pcUserId,char* pcContactId) | Int AddContact (char* pcUserId,char* pcContactId) | Int AddContact (char* pcUserId,char* pcContactId) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcUserId | pcUserId | I | 用户 id |
char* | pcContactId | pcContactId | I | 联系人 id |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 添加成功 | 添加成功 |
返回值 | 值 | 1 | 添加失败 | 添加失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
下载附件 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.13 DeleteContact
函数名 | DeleteContact | DeleteContact | DeleteContact | DeleteContact |
---|---|---|---|---|
文件名 | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c | …/RecvSendMail.c |
功能概要 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
记述形式 | Int DeleteContact (char* pcUserId,char* pcContactId) | Int DeleteContact (char* pcUserId,char* pcContactId) | Int DeleteContact (char* pcUserId,char* pcContactId) | Int DeleteContact (char* pcUserId,char* pcContactId) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char* | pcUserId | pcUserId | I | 用户 id |
char* | pcContactId | pcContactId | I | 联系人 id |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 删除成功 | 删除成功 |
返回值 | 值 | 1 | 删除失败 | 删除失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
下载附件 | 下载附件 | 下载附件 | 下载附件 | 下载附件 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.14 OpenMysql
函数名 | OpenMysql | OpenMysql | OpenMysql | OpenMysql |
---|---|---|---|---|
文件名 | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c |
功能概要 | 打开与数据库连接(服务端) | 打开与数据库连接(服务端) | 打开与数据库连接(服务端) | 打开与数据库连接(服务端) |
记述形式 | int OpenMysql () | int OpenMysql () | int OpenMysql () | int OpenMysql () |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 打开数据库成功 | 打开数据库成功 |
返回值 | 值 | 1 | 打开失败 | 打开失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
打开数据库 | 打开数据库 | 打开数据库 | 打开数据库 | 打开数据库 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.15 CloseMysql
函数名 | CloseMysql | CloseMysql | CloseMysql | CloseMysql |
---|---|---|---|---|
文件名 | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c |
功能概要 | 关闭与数据库连接(服务端) | 关闭与数据库连接(服务端) | 关闭与数据库连接(服务端) | 关闭与数据库连接(服务端) |
记述形式 | void CloseMysql () | void CloseMysql () | void CloseMysql () | void CloseMysql () |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
返回值 | 类型 | Void | 说明 | 说明 |
返回值 | 值 | |||
返回值 | 值 | |||
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
关闭数据库 | 关闭数据库 | 关闭数据库 | 关闭数据库 | 关闭数据库 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.16 ExecSql
函数名 | ExecSql | ExecSql | ExecSql | ExecSql |
---|---|---|---|---|
文件名 | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c |
功能概要 | 执行 SQL 语句(服务端) | 执行 SQL 语句(服务端) | 执行 SQL 语句(服务端) | 执行 SQL 语句(服务端) |
记述形式 | int ExecSql (char *sqltext) | int ExecSql (char *sqltext) | int ExecSql (char *sqltext) | int ExecSql (char *sqltext) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
Char * | sqltext | sqltext | I | SQL 查询字符串 |
返回值 | 类型 | Int | 说明 | 说明 |
返回值 | 值 | 0 | 查询成功 | 查询成功 |
返回值 | 值 | 1 | 查询失败 | 查询失败 |
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
执行 SQL 语句 | 执行 SQL 语句 | 执行 SQL 语句 | 执行 SQL 语句 | 执行 SQL 语句 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.17 GetNextRowData
函数名 | GetNextRowData | GetNextRowData | GetNextRowData | GetNextRowData |
---|---|---|---|---|
文件名 | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c |
功能概要 | 取出表中的下一条数据 | 取出表中的下一条数据 | 取出表中的下一条数据 | 取出表中的下一条数据 |
记述形式 | MYSQL_ROW GetNextRowData (MY_SQL_RES *res_ptr) | MYSQL_ROW GetNextRowData (MY_SQL_RES *res_ptr) | MYSQL_ROW GetNextRowData (MY_SQL_RES *res_ptr) | MYSQL_ROW GetNextRowData (MY_SQL_RES *res_ptr) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
MY_SQL_RES* | res_ptr | res_ptr | I | 数据表地址 |
返回值 | 类型 | MYSQL_ROW | 说明 | 说明 |
返回值 | 值 | MYSQL_ROW | 传出一行数据 | 传出一行数据 |
返回值 | 值 | |||
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
执行 SQL 语句 | 执行 SQL 语句 | 执行 SQL 语句 | 执行 SQL 语句 | 执行 SQL 语句 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.18 SelectTableData
函数名 | SelectTableData | SelectTableData | SelectTableData | SelectTableData |
---|---|---|---|---|
文件名 | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c |
功能概要 | 获取表数据 | 获取表数据 | 获取表数据 | 获取表数据 |
记述形式 | MYSQL_RES* SelectTableData (char *sqltext) | MYSQL_RES* SelectTableData (char *sqltext) | MYSQL_RES* SelectTableData (char *sqltext) | MYSQL_RES* SelectTableData (char *sqltext) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
char * | sqltext | sqltext | I | 连接字符串 |
返回值 | 类型 | MYSQL_ROW | 说明 | 说明 |
返回值 | 值 | MYSQL_RES* | 数据表地址 | 数据表地址 |
返回值 | 值 | |||
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
获取表数据 | 获取表数据 | 获取表数据 | 获取表数据 | 获取表数据 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
3.2.2.19 FreeMemoryData
函数名 | FreeMemoryData | FreeMemoryData | FreeMemoryData | FreeMemoryData |
---|---|---|---|---|
文件名 | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c | …/MySQLHelper.c |
功能概要 | 释放内存 | 释放内存 | 释放内存 | 释放内存 |
记述形式 | Void FreeMemoryData (MY_SQL_RES *res_ptr) | Void FreeMemoryData (MY_SQL_RES *res_ptr) | Void FreeMemoryData (MY_SQL_RES *res_ptr) | Void FreeMemoryData (MY_SQL_RES *res_ptr) |
参数 | 参数 | 参数 | 参数 | 参数 |
类型 | 变量名 | 变量名 | I/O | 说明 |
MY_SQL_RES* | res_ptr | res_ptr | I | 表存储地址 |
返回值 | 类型 | Void | 说明 | 说明 |
返回值 | 值 | |||
返回值 | 值 | |||
详细说明 | 详细说明 | 详细说明 | 详细说明 | 详细说明 |
释放存储在内存的数据 | 释放存储在内存的数据 | 释放存储在内存的数据 | 释放存储在内存的数据 | 释放存储在内存的数据 |
使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 | 使用注意事项 |
FlowerMail 项目详细设计
1 文档概述
1.1 文档目的和范围
文档目的:根据概要设计文档中的模块功能能及模块间与模块内函数,绘制主要函数的流程图,进一步设计,明确函数接口与各个模块间的功能,确定模块数据结构与全局变量,为程序员具体的编码工作提供直观明确的依据。
作用范围:整个项目实施过程
1.2 术语/缩略语
序号 | 术语/缩略语 | 说明 |
---|---|---|
1 | Glib | Glib 是一种通用的函数库。 |
2 | GDK+ | GTK+ 是一种函数库是用来帮助制作图形交互界面的。 |
3 | ||
4 | ||
5 |
1.3 参考文档
序号 | 文档名 | 作者 | 时间 | 版本 |
---|---|---|---|---|
1 | Linux 系统下邮件系统项目要求书.doc | 孙欣 | 2012.09.05 | 1.0 |
2 | 需求理解一览表.xls | Team5 | 2012.09.05 | 1.0 |
3 | 概要设计书.doc | Team5 | 2012.09.06 | 0.3 |
4 | ||||
5 |
2 处理
2.1 模块数据结构定义
typedef strcut tagUSER_t
{
char acUserID[25];//用户ID
char acNickName[50];//昵称,默认为字符串(“新用户”)
char acPasswd[16];//密码
char acTelephone[11];//电话号码
int iState;//登录状态
} stUser;
typedef strcut tagMAIL_t
{
char acEmailID[25];//邮件ID
char acTitle[50];//邮件标题
char acContent[50];//邮件内容
int iType;//邮件类型reserved/send/receive/copy/draft/…
int iState;//0保留/1已经读过/2未读过/3已经回复/4未回复/…
char acSendTargetID[500];//多个目标用户ID串,以分号作为分隔符
char acCopyTargetID[500];//多个目标用户ID串,以分号作为分隔符
char acEmailTime[20];//邮件发送时间/接收时间/草稿保存时间/邮件回复时间
int iEmailSize;//邮件内容大小;注意取值范围0-1MB
char acAttachedFilePath[50];//多个附件存放路径字符串,以分号作为分隔符;
cahr acUserID[25];//邮件所属用户ID(邮件撰写者)
} stMail;
2.1.1 全局变量定义
# define BUFFER_SIZE 1024
# define HELLO_WORLD_SERVER_PORT 12341
# define LENGTH_OF_LISTEN_QUEUE 20
# define FILE_NAME_MAX_SIZE 512
2.2 模块功能实现
2.2.1 模块间接口函数
socket 模块:
【函数式样】
int connect_socket(char* server,int port);
int Send (int socket_fd,char* pcBuffer,int length);
int Receive (int socket_fd,char* pcBuffer,int length);
close_socket(int socketfd);
【函数处理流程】
1 int connect_socket(char* server,int port);
说明:根据连接的 ip 和端口创建 socket,联通服务端,并把 socket 返回
2 int send_msg (int socket_fd,char* pcBuffer,int length);
说明:根据已连接的 socket,发送字符流到服务端
3 int recv_msg (int socket_fd,char* pcBuffer,int length);
说明:根据已连接的 socket,接收字符流
4 close_socket(int socketfd);
说明:关闭 socket
数据库模块:
【函数式样】
int OpenMysql(char * pcHost,char *pcUser,char * pcPwd,char * pcDb)
int ExecSql(char *sqltext)
int Select(char *sqltext)
MYSQL_ROW GetNextRowData()
int GetRows()
int GetInsertId()
void FreeResult()
void CloseMySql()
【函数处理流程】
1 int OpenMysql(char * pcHost,char *pcUser,char * pcPwd,char * pcDb)
说明:打开数据库
2 int ExecSql(char *sqltext)
说明:增加,更新,删除通用函数,0 为执行成功,1 为执行失败
3 int Select(char *sqltext)
说明:选择并存储查询结果 ,可以用函数 GetNextRowData 逐条读取以 table 形式存储的数据
4 MYSQL_ROW GetNextRowData()
说明:获取每条数据数据;起初指针指向第一条记录,没执行一次该函数,则下移一条记录,直到 5、MYSQL_RES 数据指向的 table 的尾端;该函数依赖查询结果
5 int GetRows()
说明:返回查询到的字段数;注意:该函数依赖查询结果
6 int GetFields()
说明:返回查询到的字段数;注意:该函数依赖查询结果
7 int GetInsertId()
说明:获得 auto increment 的值
8 void FreeResult()
说明:释放查询结果所占内存,如果没有执行查询语句,释放空指针;该函数依赖查询结果
9 void CloseMySql()
说明:关闭数据库
模块内处理函数
登陆模块:
【函数样式】
int CheckLoginInput(char *pcUserID, char* pcPasswd);
int SendLoginInfoToServer(char *pcUserID, char* pcPasswd);
int RecvLoginResFromServer();
int CreateUserFolder(char *userId);
【函数处理流程】
1 int CheckLoginInput(char pcUserID, char pcPasswd)
说明:传入用户账号和密码,分别用 while 循环逐个字符进行分析,如果全部符合规则,则返回 0;账号不符合规则返回 1,密码不符合规则则返回 2 或者 3;
图 1
2 int SendLoginInfoToServer(char pcUserID, char pcPasswd)
说明:传入用户账号和密码,将其拼接成符合 SQL 语句的字符串,调用 socket 函数,传入服务器 ip 地址和端口号,将 SQL 语句传入到服务器端。如果发送成功则返回 0,发送失败返回 1
3 int RecvLoginResFromServer();
说明:调用 socket 函数接收服务端返回来的字符串,并对字符串字符逐个分析,判断登陆结果,如果登陆成功返回 0,不存在该账户密码返回 1,已经登陆返回 2。
4 int CreateUserFolder(char *userId)
说明:先创建 data 文件夹,根据用户账号创建文件夹,在文件内再创建 recv,send, draft 文件夹。
【注册模块】
int CheckRegisterInput(stUser *userInfo);
int SendUserIdToServer(char *pcUserID);
int RecvUserIdResFromServer();
int SendRegisterInfoToServer(stUser *userInfo);
int RecvRegisterRsResFromServer();
【函数处理流程】
1 int CheckRegisterInput(stUser *userInfo)
说明:传入注册信息,对每个字段进行分析,如果全部符合规则,则返回 0;
2 int SendUserIdToServer(char *pcUserID)
说明:传入注册账号名,将其拼接成符合 SQL 语句的字符串,调用 socket 函数,传入服务端 ip 地址和端口号,将 SQL 语句传入到服务器端。如果发送成功则返回 0,发送失败返回 1
图 2
3 int RecvLoginResFromServer();
说明:调用 socket 函数接收服务端返回来的字符串,并对字符串字符逐个分析,判断数据库是否已经存在该账号,如果不存在则返回 0,存在返回 1;
4 int SendRegisterInfoToServer(stUser *userInfo)
说明:传入用户注册的信息,将其品结成符合 SQL 语句的字符串,调用 socket 函数,传入服务端 ip 地址和端口号,将 SQL 语句传入到服务器端,如果发送成功返回 0,发送失败则返回 1
5 int RecvRegisterRsResFromServer()
说明:调用 socket 函数接收服务端返回来的字符串,并对字符串逐个分心,判断注册信息是否已经提交到数据库,如果成功返回 0,失败返回 1
【函数式样】
收发模块:
Int GetNewMail(stMail * pstNewMail);
Int GetLocalMail (stMail *pstMail,char* pcMailPath)
Int SearchMali (stMail *pstMail,char*pcKey,char* pcCondition)
IntSendMali(char*pcUid,char*pcToUid,char*pcContent,char*pcAttach,int iSendType)
Int GetAllMali (char* pcUid,char* pcRecvMailPath);
Int DeleteMali (int iType,char* pcMailPath,char * pcSql);
Int ViewSingleMali (char* pcMailPath,stMail * pstMail);
Int DonwloadAttachedFile (char* pcMailId,char* pcAttachPath)
Int AddContact (char* pcUserId,char* pcContactId)
Int DeleteContact (char* pcUserId,char* pcContactId);
【函数处理流程】
收发模块:
1 Int GetNewMail(stMail * pstNewMail);
说明:获取未读邮件信息,向服务器端发送一条查询语句,查找出未读邮件,服务器端把未读邮件发送回客户端,然后客户端接收并处理未读邮件信息;然后客户端根据获取到的所有 emailid 再次请求服务器端把对应 emailid 的文件内容发送过来,客户端准备接收邮件内容
图 3
2 Int GetLocalMail (stMail pstMail,char pcMailPath)
说明:获取本地邮件的信息,根据 pcMailPath 参数,在指定目录下查找出邮件,获得邮件的信息,存放到 stMail 结构体中
图 4
3 Int SearchMali (stMail pstMail,charpcKey,char* pcCondition)
说明:根据查询条件和关键字查询出邮件信息存放到 stMail 结构体数组中
图 5
4 Int SendMali(charpcUid,charpcToUid,charpcContent,charpcAttach,int iSendType)
说明:发送邮件,首先向服务器端插入一条邮件记录,也就是发送一条插入语句到服务端,然后返回 emailid,然后以 emaiid 做报头发送邮件内容给服务端;
图 6
5 Int GetAllMali (char* pcUid,char* pcRecvMailPath);
说明:从服务器中下载所有的邮件存放到本地;
6 Int DeleteMali (int iType,char* pcMailPath,char * pcSql);
说明:iType=0,则删除本地邮件,iType=1,删除服务器的邮件
7 Int ViewSingleMali (char* pcMailPath,stMail * pstMail);
说明:查看邮件具体内容
8 Int DonwloadAttachedFile (char* pcMailId,char* pcAttachPath)
说明:下载附件到本地
9 Int AddContact (char* pcUserId,char* pcContactId)
说明:添加联系人
10 Int DeleteContact (char* pcUserId,char* pcContactId);
说明:删除联系人
服务器模块:
【函数式样】
int Insert (char *pcInsert);
int Delete (char *pcDelete);
int Update (char *pcUpdate);
int MySelect (char *pcSelect,char * buffer);
void writeto(int new_fd,char * buffer);
void writeError(int new_fd,char * buffer);
int MakeDirectory(char * pcFileName);
int MakeEmailIdDirectory(char * pcUserId, char * pcType,char *pacEmailId);
int send_file(char* file_name,int sockfd);
int recv_file (char *file_name,int sockfd);
int recv_attachedfile (char *acTempData,int sockfd);
int send_attachedfile (char * pcTempData, int sockfd);
【函数处理流程】
1 int Insert (char *pcInsert);
说明:根据客户端发过来的 SQL 插入语句,操作数据库后,发回给客户端的处理结果代码分别如下:
发回给客户端的代码 | 表示意义 |
---|---|
-1 | 主健冲突或者查询语句出错或者不存在目标表或者内容不存在,未执行 |
0 | 受影响的记录数为 0 |
正整数 | 添加成功,受影响的记录数/EmailTable 表返回插入的 emailId |
2 int Delete (char *pcDelete);
说明:根据客户端发过来的 SQL 插入语句,操作数据库后,发回给客户端的处理结果代码分别如下:
发回给客户端的代码 | 表示意义 |
---|---|
-1 | 者查询语句出错或者不存在目标表或者内容不存在,未执行 |
0 | 受影响的记录数为 0 |
正整数 | 添加成功,受影响的记录数 |
3 int Update (char *pcUpdate);
说明:根据客户端发过来的 SQL 插入语句,操作数据库后,发回给客户端的处理结果代码分别如下:
发回给客户端的代码 | 表示意义 |
---|---|
-1 | 查询语句出错或者不存在目标表或者内容不存在,未执行 |
0 | 受影响的记录数为 0 |
正整数 | 添加成功,受影响的记录数 |
4 int MySelect (char *pcSelect,char * buffer);
说明:根据客户端发过来的 SQL 插入语句,操作数据库后,发回给客户端的处理结果代码分别如下:
发回给客户端的代码 | 表示意义 |
---|---|
-1 | 查询语句存在错误或者不存在目标表,未执行查询 |
0 | 查询到的结果为空集 |
字符串 | 查询到的结果字符数组,每条记录之间用‘’分隔,每个字段之间用’|'分隔;;注意最后一条记录后面跟着‘’ |
5 void writeto(int new_fd,char * buffer);
说明:向客户端传送数据,包括文件信息
6 void writeError(int new_fd,char * buffer);
说明:向客户端传送错误提示信息
7 int MakeDirectory(char * pcFileName);
说明:建立单级文件夹,无法创建抛出错误信息给 MakeEmailIdDirectory 函数
8 int MakeEmailIdDirectory(char * pcUserId, char * pcType,char *pacEmailId);
说明:如果不存在目标文件夹,则递归建立文件夹,在每个用户下,为每封邮件创建一个文件夹,用于存储邮件信息及其附件
图 7
9 int send_file(char* file_name,int sockfd);
说明:根据客户端的请求(emailId),向目标客户端 sockfd 发送指定邮件
图 8
10 int recv_file (char *file_name,int sockfd);
说明:根据客户端的请求(emailId),接收客户端 sockfd 接收指定邮件
图 9
11 int recv_attachedfile (char *acTempData,int sockfd);
说明:根据客户端的请求(emailId),向目标客户端 sockfd 发送指定附件
图 10
12 int send_attachedfile (char * pcTempData, int sockfd);
说明:根据客户端的请求(emailId),接收客户端 sockfd 发送指定附件
图 11
3 测试项目设计
参考「测试用例.xls」。
♻️ 资源
大小: 1.94MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87415905
相关文章
- Linux的linux aarch64和linux x86_64
- Linux安装 微信开发者工具(deepin linux ubt)
- linux搜索文件过程
- linux下(lubuntu18.04.4)安装tinycc编译器及运行调试C语言
- Linux 设置语言
- Linux Command htpasswd 创建密码文件
- Easyconnect for Linux
- 详解 Linux 下 SSH 远程文件传输命令 scp
- Linux集群和自动化维1.2 IDC机房的选择及CDN的选型
- Linux上机笔记(2) vim 下编写C语言
- Linux有问必答:如何修复“ImportError: No module named scapy.all”
- linux内核在挂载ramdisk的过程中报错"RAMDISK: incomplete write (10739 != 32768)"如何处理?
- 【Linux】/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
- Linux - 正则表达式
- Linux命令之whereis
- linux:C语言通过ICMP协议判断局域网内部主机是否存活
- 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.5 位运算实战演练1
- linux 位操作
- linux下C语言获取微秒级时间
- Linux下安装Apache并以mod_wsgi方式部署django站点
- 记录一次实验室linux系统的GPU服务器死机故障的排查——Linux系统的Power States
- Linux 学习
- windows通过使用xShell远程linux上传文件
- Linux学习笔记(20)linux exec
- Linux学习笔记(12)linux文件目录与用户管理
- Linux学习笔记(11)linux网络管理与配置之一——配置路由与默认网关,双网卡绑定(5-6)
- Linux学习笔记(7)CRT实现windows与linux的文件上传下载
- 【Linux】linux中删除指定日期之前的文件