zl程序教程

您现在的位置是:首页 >  系统

当前栏目

基于C语言实现的Linux系统下邮件系统【100010645】

LinuxC语言系统 实现 基于
2023-09-11 14:17:49 时间

Linux 系统下邮件系统项目要求书

FlowerMail 项目概要设计

FlowerMail 项目详细设计

Linux 系统下邮件系统项目要求书

1 项目概要

开发一款运行于 Linux 操作系统平台的邮件模拟系统,可以实现局域网内任意电脑之间的信息接收与发送,也可作为支持中小型规模的企业内部信息交流。主要功能包括:

  1. 有方便实用的邮件登陆界面、收发邮件界面和写邮件界面;
  2. 可以实现局域网内任意电脑间的邮件接受与发送。

1.1 项目名称

FlowerMail 邮件系统

1.2 项目目标

  1. 体会从需求理解出发,到软件概要设计,详细设计,编码,测试,发布的整个流程,熟悉软件开发的全部流程;
  2. 熟悉 Linux 操作系统下的 C 应用程序开发环境,掌握 Linux 系统下开发工具 vi、gcc 和 gdb 的使用,以及 makefile 的写法;
  3. 掌握 Linux 环境下图形工具包 GTK 和网络编程中 socket“套接字”的使用;
  4. 练习使用 Linux 环境下的数据库 MySQL;
  5. 培养快速学习新知识并在项目中灵活使用的能力;
  6. 培养表达能力、沟通能力和团队合作能力。

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 术语/缩略语

序号术语/缩略语说明
1GlibGlib 是一种通用的函数库。
2GDK+GTK+ 是一种函数库是用来帮助制作图形交互界面的。

1.3 参考文档

序号文档名作者时间版本
1Linux 系统下邮件系统项目要求书.doc孙欣2012.09.051.0
2需求理解一览表.xlsTeam52012.09.051.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

函数名SendSendSendSend
文件名…/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说明
intsocket_fdsocket_fdI套接字标示符
char*pcBufferpcBufferI缓冲区
返回值类型Int说明说明
返回值0发送成功发送成功
返回值1发送失败发送失败
详细说明详细说明详细说明详细说明详细说明
下载附件下载附件下载附件下载附件下载附件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.1 Receive

函数名ReceiveReceiveReceiveReceive
文件名…/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说明
intsocket_fdsocket_fdI套接字标示符
char*pcBufferpcBufferI缓冲区
返回值类型Int说明说明
返回值0接收成功接收成功
返回值1接收失败接收失败
详细说明详细说明详细说明详细说明详细说明
下载附件下载附件下载附件下载附件下载附件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2 模块内接口函数

3.2.2.1 CheckLoginInput

函数名CheckLoginInputCheckLoginInputCheckLoginInputCheckLoginInput
文件名…/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*pcUserIDpcUserIDI账户
char*pcPasswdpcPasswdI密码
返回值类型int说明说明
返回值0输入合法输入合法
返回值1账户含有非法字符账户含有非法字符
返回值2密码不合法(长度或非法字符)密码不合法(长度或非法字符)
详细说明详细说明详细说明详细说明详细说明
在客户端判断用户输入的账号和密码是否合法在客户端判断用户输入的账号和密码是否合法在客户端判断用户输入的账号和密码是否合法在客户端判断用户输入的账号和密码是否合法在客户端判断用户输入的账号和密码是否合法
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.2 CheckRegisterInput

函数名CheckRegisterInputCheckRegisterInputCheckRegisterInputCheckRegisterInput
文件名…/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 *registerInforegisterInfoI用户注册的信息
返回值类型int说明说明
返回值0输入全部合法输入全部合法
返回值1注册信息不合法注册信息不合法
详细说明详细说明详细说明详细说明详细说明
在客户端检查用户输入的注册信息是否符合要求在客户端检查用户输入的注册信息是否符合要求在客户端检查用户输入的注册信息是否符合要求在客户端检查用户输入的注册信息是否符合要求在客户端检查用户输入的注册信息是否符合要求
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.3 CheckUserIdExist

函数名CheckUserIdExistCheckUserIdExistCheckUserIdExistCheckUserIdExist
文件名…/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*pcUserIdpcUserIdI用户 ID
返回值类型int说明说明
返回值0已经被注册已经被注册
返回值1未被注册未被注册
详细说明详细说明详细说明详细说明详细说明
在客户端调用 socket 函数判断输入的用户名是否已经被注册在客户端调用 socket 函数判断输入的用户名是否已经被注册在客户端调用 socket 函数判断输入的用户名是否已经被注册在客户端调用 socket 函数判断输入的用户名是否已经被注册在客户端调用 socket 函数判断输入的用户名是否已经被注册
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.4 GetNewMail

函数名GetNewMailGetNewMailGetNewMailGetNewMail
文件名…/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 *pstNewMailpstNewMailO新邮件信息
返回值类型Int说明说明
返回值0获取成功获取成功
返回值1无新邮件无新邮件
返回值2通信失败通信失败
详细说明详细说明详细说明详细说明详细说明
从服务器端获得未读邮件从服务器端获得未读邮件从服务器端获得未读邮件从服务器端获得未读邮件从服务器端获得未读邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.5 GetLocalMail

函数名GetLocalMailGetLocalMailGetLocalMailGetLocalMail
文件名…/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 *pstDraftMailpstDraftMailO草稿邮件信息
char*pcMailPathpcMailPathI
返回值类型Int说明说明
返回值0获取成功获取成功
返回值1获取失败获取失败
详细说明详细说明详细说明详细说明详细说明
从本地获得草稿邮件从本地获得草稿邮件从本地获得草稿邮件从本地获得草稿邮件从本地获得草稿邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.6 SearchMail

函数名SearchMaliSearchMaliSearchMaliSearchMali
文件名…/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 *pstMailpstMailO邮件信息
char*pcKeypcKeyI搜索关键字
char*pcConditionpcConditionI搜索条件
返回值类型Int说明说明
返回值0获取成功获取成功
返回值1获取失败获取失败
详细说明详细说明详细说明详细说明详细说明
从本地搜索邮件从本地搜索邮件从本地搜索邮件从本地搜索邮件从本地搜索邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.7 SendMail

函数名SendMaliSendMaliSendMaliSendMali
文件名…/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*pcUidpcUidI发件者 id
char*pcToUidpcToUidI接收者 id
char*pcContentpcContentI邮件内容
char*pcAttachpcAttachI附件路径
intiSendTypeiSendTypeI发送方式
返回值类型Int说明说明
返回值0发送成功发送成功
返回值1发送失败发送失败
详细说明详细说明详细说明详细说明详细说明
发送邮件发送邮件发送邮件发送邮件发送邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.8 GetAllMail

函数名GetAllMaliGetAllMaliGetAllMaliGetAllMali
文件名…/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*uIduIdI收件者 id
char*recvMailPathrecvMailPathI接收邮件的路径
返回值类型Int说明说明
返回值0接收到了邮件接收到了邮件
返回值1没有接收到邮件没有接收到邮件
详细说明详细说明详细说明详细说明详细说明
从服务器中下载所有的邮件从服务器中下载所有的邮件从服务器中下载所有的邮件从服务器中下载所有的邮件从服务器中下载所有的邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.9 DeleteMail

函数名DeleteMaliDeleteMaliDeleteMaliDeleteMali
文件名…/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说明
intiTypeiTypeIO 删除本地,;1 删除服务器端
char*pcMailPathpcMailPathI本地邮件的路径
char*pcSqlpcSqlI数据库执行语句
返回值类型Int说明说明
返回值0删除邮件成功删除邮件成功
返回值1删除邮件失败删除邮件失败
详细说明详细说明详细说明详细说明详细说明
删除邮件删除邮件删除邮件删除邮件删除邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.10 ViewSingleMail

函数名ViewSingleMaliViewSingleMaliViewSingleMaliViewSingleMali
文件名…/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*pcMailPathpcMailPathI本地邮件的路径
stMail *pstMailpstMailO输出邮件信息
返回值类型Int说明说明
返回值0打开邮件成功打开邮件成功
返回值1打开邮件失败打开邮件失败
详细说明详细说明详细说明详细说明详细说明
查看邮件查看邮件查看邮件查看邮件查看邮件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.11 DownloadAttachedFile

函数名DonwloadAttachedFileDonwloadAttachedFileDonwloadAttachedFileDonwloadAttachedFile
文件名…/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*pcMailIdpcMailIdI邮件的 id
char*pcAttachPathpcAttachPathI本地邮件的路径
返回值类型Int说明说明
返回值0下载附件成功下载附件成功
返回值1下载附件失败下载附件失败
详细说明详细说明详细说明详细说明详细说明
下载附件下载附件下载附件下载附件下载附件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.12 AddContact

函数名AddContactAddContactAddContactAddContact
文件名…/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*pcUserIdpcUserIdI用户 id
char*pcContactIdpcContactIdI联系人 id
返回值类型Int说明说明
返回值0添加成功添加成功
返回值1添加失败添加失败
详细说明详细说明详细说明详细说明详细说明
下载附件下载附件下载附件下载附件下载附件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.13 DeleteContact

函数名DeleteContactDeleteContactDeleteContactDeleteContact
文件名…/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*pcUserIdpcUserIdI用户 id
char*pcContactIdpcContactIdI联系人 id
返回值类型Int说明说明
返回值0删除成功删除成功
返回值1删除失败删除失败
详细说明详细说明详细说明详细说明详细说明
下载附件下载附件下载附件下载附件下载附件
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.14 OpenMysql

函数名OpenMysqlOpenMysqlOpenMysqlOpenMysql
文件名…/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

函数名CloseMysqlCloseMysqlCloseMysqlCloseMysql
文件名…/MySQLHelper.c…/MySQLHelper.c…/MySQLHelper.c…/MySQLHelper.c
功能概要关闭与数据库连接(服务端)关闭与数据库连接(服务端)关闭与数据库连接(服务端)关闭与数据库连接(服务端)
记述形式void CloseMysql ()void CloseMysql ()void CloseMysql ()void CloseMysql ()
参数参数参数参数参数
类型变量名变量名I/O说明
返回值类型Void说明说明
返回值
返回值
详细说明详细说明详细说明详细说明详细说明
关闭数据库关闭数据库关闭数据库关闭数据库关闭数据库
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.16 ExecSql

函数名ExecSqlExecSqlExecSqlExecSql
文件名…/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 *sqltextsqltextISQL 查询字符串
返回值类型Int说明说明
返回值0查询成功查询成功
返回值1查询失败查询失败
详细说明详细说明详细说明详细说明详细说明
执行 SQL 语句执行 SQL 语句执行 SQL 语句执行 SQL 语句执行 SQL 语句
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.17 GetNextRowData

函数名GetNextRowDataGetNextRowDataGetNextRowDataGetNextRowData
文件名…/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_ptrres_ptrI数据表地址
返回值类型MYSQL_ROW说明说明
返回值MYSQL_ROW传出一行数据传出一行数据
返回值
详细说明详细说明详细说明详细说明详细说明
执行 SQL 语句执行 SQL 语句执行 SQL 语句执行 SQL 语句执行 SQL 语句
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.18 SelectTableData

函数名SelectTableDataSelectTableDataSelectTableDataSelectTableData
文件名…/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 *sqltextsqltextI连接字符串
返回值类型MYSQL_ROW说明说明
返回值MYSQL_RES*数据表地址数据表地址
返回值
详细说明详细说明详细说明详细说明详细说明
获取表数据获取表数据获取表数据获取表数据获取表数据
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

3.2.2.19 FreeMemoryData

函数名FreeMemoryDataFreeMemoryDataFreeMemoryDataFreeMemoryData
文件名…/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_ptrres_ptrI表存储地址
返回值类型Void说明说明
返回值
返回值
详细说明详细说明详细说明详细说明详细说明
释放存储在内存的数据释放存储在内存的数据释放存储在内存的数据释放存储在内存的数据释放存储在内存的数据
使用注意事项使用注意事项使用注意事项使用注意事项使用注意事项

FlowerMail 项目详细设计

1 文档概述

1.1 文档目的和范围

文档目的:根据概要设计文档中的模块功能能及模块间与模块内函数,绘制主要函数的流程图,进一步设计,明确函数接口与各个模块间的功能,确定模块数据结构与全局变量,为程序员具体的编码工作提供直观明确的依据。

作用范围:整个项目实施过程

1.2 术语/缩略语

序号术语/缩略语说明
1GlibGlib 是一种通用的函数库。
2GDK+GTK+ 是一种函数库是用来帮助制作图形交互界面的。
3
4
5

1.3 参考文档

序号文档名作者时间版本
1Linux 系统下邮件系统项目要求书.doc孙欣2012.09.051.0
2需求理解一览表.xlsTeam52012.09.051.0
3概要设计书.docTeam52012.09.060.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