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()			//析构函数
{

}