Test.cpp
#include "Message.h"
void main()
{
Message m; //建立对象
int n;
do {
system("cls");
cout << "主界面:" << endl
<<"0.结束程序" << endl
<< "1.编辑短信" << endl
<< "2.发件箱" << endl
<< "3.收件箱" << endl
<< "4.草稿箱" << endl
<< "5.最近联系人" << endl;
cin >> n;
switch (n)
{
case 0:
break;
case 1:
m.CreateMessage();
break;
case 2:
m.SendMessage();
break;
case 3:
m.ReceiveMessage();
break;
case 4:
m.DraftMessage();
break;
case 5:
m.RecentContact();
break;
default:cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
Message.h
// Message.h: interface for the Message class.
//
//
#if !defined(AFX_MESSAGE_H__7D2211A6_1DFE_4B26_AEF9_415A7C07E899__INCLUDED_)
#define AFX_MESSAGE_H__7D2211A6_1DFE_4B26_AEF9_415A7C07E899__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <stdio.h>
#include <iostream>
#include <vector>
#include <Windows.h>
#include <fstream>
#include <iterator>
#include <string>
#include <io.h>
using namespace std;
#define Max_Num 10 //联系人上限
#define Folder "f:\\" //默认路径名
#define SendFolder "\\Send" //发件箱默认地址前缀
#define ReceiveFolder "\\Receive" //收件箱默认地址前缀
#define DraftFolder "\\Draft" //草稿箱默认地址前缀
#define Contact "\\Contact" //最近联系人
class Message
{
public:
Message(); //构造函数(三个文件夹的建立、发件人的确认)
void CreateMessage(); //编辑短信(对mess处理)
void DraftMessage(); //查看草稿
void SaveAsDraft(); //存入草稿
void ReceiveMessage(); //接收短信
void SendMessage(); //发送短信
void ReadFolder(string FolderName); //查看信箱
void ReadMess(string FileName); //阅读短信
void Delete(string FileName); //删除短信
void DeleteFolder(string FolderName); //清空信箱
void getFiles(string path, vector<string>& files); //读取文件名工具函数
void Sending(string receiver); //发送短信!!
void RecentContact(); //联系人
virtual ~Message(); //析构函数
private:
string Send, RSend; //发件箱
string Receive, RReceive; //收件箱
string Draft, RDraft; //草稿箱
string Recent, RRecent; //联系人
string Sender; //用户名
string Mess; //短信内容
string Receiver; //收件人
static char Count; //短信数量
};
#endif // !defined(AFX_MESSAGE_H__7D2211A6_1DFE_4B26_AEF9_415A7C07E899__INCLUDED_)
Message.cpp
#include "Message.h"
//
// Construction/Destruction
//
char Message::Count = '0'; //初始化短信数目
Message::Message() //构造函数(无参数)
{
cout << "输入本人姓名:" << endl; //给Sender赋值,确认发送者
cin >> Sender;
string r = Folder + Sender; //
if (access(r.c_str(), 0)) //access用于判断文件夹是否存在
system(("md " + r).c_str()); //建立本人短信系统文件夹
// 发、收、草、联系箱实际地址名
Send = r + SendFolder + Sender;
Receive = r + ReceiveFolder + Sender;
Draft = r + DraftFolder + Sender;
Recent = r + Contact + Sender;
if (access(Send.c_str(), 0)) //建立发件箱
system(("md " + Send).c_str());
if (access(Receive.c_str(), 0))
system(("md " + Receive).c_str()); //建立收件箱
if (access(Draft.c_str(), 0))
system(("md " + Draft).c_str());
if (access(Recent.c_str(), 0)) //建立草稿箱
system(("md " + Recent).c_str());
}
/// 编辑短信 //
void Message::CreateMessage()
{
system("cls"); //清除当前屏幕
int n; //选择器 用于功能控制
Count++; //编辑短信 数目加1
cout << "输入收件人:" << endl; //确认收件人
cin >> Receiver;
cout << "输入短信内容:" << endl; //短信内容
cin >> Mess;
do {
system("cls"); //清除当前屏幕
cout << "请选择:" << endl //选择界面
<< "0.退出编辑" << endl
<< "1.发送" << endl
<< "2.存入草稿箱" << endl;
cin >> n; //选择结果
switch (n) //编辑后界面
{
case 0: //0.退出编辑
break;
case 1: //1.发送 结束后退出编辑
Sending("");
n = 0;
break;
case 2: //2.存入草稿箱
SaveAsDraft();
n = 0;
break;
default: //提示错误输入 重新选择
cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
/// 发送短信 //
void Message::Sending(string receiver)
{
string SAddress = Sender; //发件人地址
string RAddress; //收件人地址
string Address1; //发件箱地址
string Address2; //收件箱地址
string Address3; //联系人地址
string Address4; //收件箱地址(对方)
string news, draft; //内容、草稿
int n;
// 发件箱 草稿箱 //
if (receiver.compare("") == 0)
{
RAddress = Receiver; //收件人地址
Address1 = Send + "\\" + RAddress + Count + ".txt"; //发件箱地址
news = Mess;
}
else
{
n = receiver.find_last_of('.'); //获取收件人
RAddress = receiver.substr(0, n - 1);
Address1 = Send + "\\" + receiver;
draft = Draft + "\\" + receiver; //草稿箱地址
ifstream inf(draft.c_str()); //草稿文件
if (inf.is_open()) //将短信写入草稿
{
while (!getline(inf, news))
;
inf.close();
}
}
// 存入发件箱 //
ofstream SendNews(Address1.c_str()); //建立发送文件
if (SendNews.is_open())
{
SendNews << news; //将短信内容写入文件
SendNews.close();
}
// 最近联系人 //
Address3 = Recent + "\\" + RAddress + ".txt"; //联系人地址
ofstream RecentNews(Address3.c_str());
if (RecentNews.is_open())
{
RecentNews.close();
}
// 建立收件人的短信系统 //
string r = Folder + RAddress;
if (access(r.c_str(), 0)) //判断文件夹是否存在
system(("md " + r).c_str());
RSend = r + SendFolder + RAddress; //收件人发送箱
RRecent = r + Contact + RAddress; //收件人联系人
RReceive = r + ReceiveFolder + RAddress; //收件人收件箱
RDraft = r + DraftFolder + RAddress; //收件人草稿箱
if (access(RSend.c_str(), 0)) //判断文件夹是否存在
system(("md " + RSend).c_str());
if (access(RReceive.c_str(), 0))
system(("md " + RReceive).c_str());
if (access(RDraft.c_str(), 0))
system(("md " + RDraft).c_str());
if (access(RRecent.c_str(), 0))
system(("md " + RRecent).c_str());
// 将信息存入对方收件箱 //
if (receiver.compare("") == 0)
{
Address2 = RReceive + "\\" + SAddress + Count + ".txt"; //收件箱地址
ofstream ReceiveNews(Address2.c_str());
if (ReceiveNews.is_open())
{
ReceiveNews << news;
ReceiveNews.close();
}
}
else
{
Address2 = RReceive + "\\" + SAddress + receiver.substr(n - 1); //发件箱地址
ofstream ReceiveNews(Address2.c_str());
if (ReceiveNews.is_open())
{
ReceiveNews << news;
ReceiveNews.close();
}
}
Address4 = RRecent + "\\" + SAddress + ".txt"; //收件箱地址(对方)
ofstream RRecentNews(Address4.c_str());
if (RRecentNews.is_open())
{
RRecentNews.close();
}
}
// 保存草稿 //
void Message::SaveAsDraft()
{
string r;
ofstream DraftNews;
r = Draft + "\\" + Receiver + Count + ".txt";
DraftNews.open(r.c_str());
if (DraftNews.is_open())
{
DraftNews << Mess;
DraftNews.close();
}
else
cout << r + "文件打开失败!" << endl;
}
// 草稿箱 //
void Message::DraftMessage()
{
int n;
do {
system("cls");
cout << "请选择:" << endl
<< "0.返回主界面" << endl
<< "1.查看草稿箱" << endl
<< "2.清空草稿箱" << endl;
cin >> n;
switch (n) {
case 0:
break;
case 1:
ReadFolder(Draft);
break;
case 2:
DeleteFolder(Draft.c_str());
break;
default:cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
// 发件箱 ///
void Message::SendMessage()
{
int n;
do {
system("cls");
cout << "请选择:" << endl
<< "0.返回主界面" << endl
<< "1.查看发件箱" << endl
<< "2.清空发件箱" << endl;
cin >> n;
switch (n) {
case 0:
break;
case 1:
ReadFolder(Send);
break;
case 2:
DeleteFolder(Send.c_str());
break;
default:cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
// 收件箱 //
void Message::ReceiveMessage()
{
int n;
do {
system("cls");
cout << "请选择:" << endl
<< "0.返回主界面" << endl
<< "1.查看收件箱" << endl
<< "2.清空收件箱" << endl;
cin >> n;
switch (n)
{
case 0:
break;
case 1:
ReadFolder(Receive);
break;
case 2:
DeleteFolder(Receive.c_str());
break;
default:cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
// 查看信箱 //
void Message::ReadFolder(string FolderName)
{
int m, n, index1, index2;
vector<string> files;
getFiles(FolderName, files); //获取该路径下的所有文件
int size = files.size();
string filesname[20],name[20];
if (!size)cout << "箱内无短信!" << endl;
for (int i = 0; i < size; i++)
{
//cout<<files[i].c_str()<<endl;
index1 = files[i].find_last_of('\\');
filesname[i] = files[i].substr(index1 + 1);
index2 = filesname[i].find_last_of('.');
name[i] = filesname[i].substr(0,index2);
cout << name[i].c_str() << endl;
}
system("pause");
do {
system("cls");
if (FolderName.compare(Recent) == 0)
{
cout << "请选择:" << endl
<< "0.返回" << endl
<< "1.删除最近联系人" << endl;
}
else
{
cout << "请选择:" << endl
<< "0.返回" << endl
<< "1.阅读短信" << endl
<< "2.删除短信" << endl;
if (FolderName.compare(Draft) == 0)
cout << "3.发送短信" << endl;
}
cin >> n;
switch (n)
{
case 0:
break;
case 1:
if (FolderName.compare(Recent) == 0)
{
if (size)
{
cout << "输入删除第几个联系人" << endl;
cin >> m;//m小于size;
Delete(files[m - 1].c_str());
cout << "已删除!" << endl;
}
else
cout << "无联系人!" << endl;
}
else
{
if (size)
{
cout << "输入阅读第几条短信" << endl;
cin >> m;//m小于size;
ReadMess(files[m - 1].c_str());
}
else
cout << "箱内无短信!" << endl;
}
system("cls");
break;
case 2:
if (size)
{
cout << "输入删除第几条短信" << endl;
cin >> m;//m小于size;
Delete(files[m - 1]);
cout << "已删除!" << endl;
}
else
cout << "箱内无短信!" << endl;
system("cls");
break;
case 3:
if (FolderName.compare(Draft) == 0)
{
if (size)
{
cout << "输入发送第几条短信" << endl;
cin >> m;//m小于size;
Sending(filesname[m - 1]);
cout << "已发送!" << endl;
Delete(files[m - 1].c_str());
}
else
cout << "箱内无短信!" << endl;
}
else
cout << "输入错误,重新输入!" << endl;
system("cls");
break;
default:cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
// 阅读短信 //
void Message::ReadMess(string FileName)
{
ifstream News(FileName.c_str());
if (News.is_open())
{
char ch;
while (News.get(ch))
cout << ch;
cout << endl;
News.close();
}
else
cout << FileName + "文件打开失败!" << endl;
system("pause");
}
// 删除短信 //
void Message::Delete(string FileName)
{
DeleteFile(FileName.c_str());
}
// 清空信箱 //
void Message::DeleteFolder(string FolderName)
{
int m, n;
vector<string> files;
获取该路径下的所有文件
getFiles(FolderName, files);
char str[30];
int size = files.size();
for (int i = 0; i < size; i++)
{
Delete(files[i]);
}
cout << "已清空!" << endl;
}
// 最近联系人 //
void Message::RecentContact()
{
int n;
do {
system("cls");
cout << "请选择:" << endl
<< "0.返回主界面" << endl
<< "1.查看最近联系人" << endl
<< "2.清空最近联系人" << endl;
cin >> n;
switch (n)
{
case 0:
break;
case 1:
ReadFolder(Recent);
break;
case 2:
DeleteFolder(Recent.c_str());
break;
default:cout << "输入错误,重新输入!" << endl;
}
} while (n);
}
//稍有问题
void Message::getFiles(string path, vector<string>& files) //遍历path路径下文件夹的内容
{
long hFile = 0; //文件句柄
struct _finddata_t fileinfo; //文件信息
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
{
do
{
if ((fileinfo.attrib & _A_SUBDIR)) //如果是目录,迭代之
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
else //如果不是,加入列表
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
Message::~Message() //析构函数
{
}