//#ifndef coutAIO_H
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <stdio.h>
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iomanip>
#define MAX 1000//最大
using namespace std;
long long sz[10000][10000];//数组,用于分解整数
long long jc(long long a) {//阶乘(!a)
if (a > 1) {
return jc(a - 1) * a;
}
return 1;
}
long long zsws(long long a) {//求整数位数
short b = 0;
while (a) {
a /= 10;
b++;
}
return b;
}
void fj(long long a) {//分解整数各位
long long b = zsws(a), i;
while (b--) {
sz[0][b] = a % 10;
a /= 10;
}
}
void xycfb(long long x = 9, long long y = 9) {//把xy乘法表存在sz里。
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
sz[i][j] = (i + 1) * (j + 1);
}
}
}
void scsz(long long x = 9, long long y = 9) {//输出数组
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
cout << sz[i][j] << "\t";
}
cout << endl;
}
}
void sccfb(long long a = 9, long long b = 9) {//输出ab乘法表
xycfb(a, b);
scsz(a, b);
}
long long fbnq(long long a) {//斐波那契数列求和
if (a > 2)
return fbnq(a - 1) + fbnq(a - 2);
return 1;
}
void printsz(char* arr[]) {//打印数组
long long i = 0;
for (; *arr != NULL; arr++) {
cout << i << " " << *arr << endl;//第几个被输出与
i++;
}
}
//以上新添
void gotoxy(int y, int x)
{
COORD coord;
coord.X = x;
coord.Y = y;
HANDLE a = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(a, coord);
}
void color(int a)//打印颜色
{
/*亮白*/ if (a == 0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
/*蓝色*/ if (a == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
/*绿色*/ if (a == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
/*紫色*/ if (a == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
/*红色*/ if (a == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
/*黄色*/ if (a == 5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
/*深蓝色*/ if (a == 6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
/*土黄色or金黄色*/ if (a == 7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN);
/*灰色接近白*/ if (a == 8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void bukaqingping() {
gotoxy(0, 0);/*
for (int i = 0; i < 50; i++) {
cout << " " << endl;
}*/
system("cls");
gotoxy(0, 0);
}
template<typename o>
void swap(o & a, o & b) {
o temp = a;
a = b;
b = temp;
}
long long numberaio(string n) {
while (true) {
int i = 0;
if (n[i] == '\0')
{
return i;
}
i++;
}
}
int zfzh(string s) {//字符转换
int num = 0;
for (int i = 0; i < s.size(); ++i) {
num = 10 * num + (s[i] - '0');
}
return num;
}
void coutAIO(string b, int truefalse0 = 0, bool truefalse1 = 0) {//说的话,速度,是否回车。
int i = 0, s = 0;
long long a = numberaio(b);
while (a != 0) {
color(2);
/*
s = rand() % 9;
if (a != 0 && s == 0)
{
color(0);
}
if (a != 0 && s == 1)
{
color(1);
}
if (a != 0 && s == 2)
{
color(2);
}
if (a != 0 && s == 3)
{
color(3);
}
if (a != 0 && s == 4)
{
color(4);
}
if (a != 0 && s == 5)
{
color(5);
}
if (a != 0 && s == 6)
{
color(6);
}
if (a != 0 && s == 7)
{
color(7);
}
if (a != 0 && s == 8)
{
color(8);
}*/
cout << b[i];
a--;
i++;
if (truefalse0 == 1) {
Sleep(10);
}
if (truefalse0 == 2) {
Sleep(20);
}
if (truefalse0 == 3) {
Sleep(40);
}
if (truefalse0 == 4) {
Sleep(100);
}
if (truefalse0 == 5) {
Sleep(300);
}
if (truefalse0 == 6) {
Sleep(1000);
}
}
if (truefalse1 == 0) {
cout << endl;
}
}/*
void full_screen()
{
HWND hwnd = GetForegroundWindow();
int cx = GetSystemMetrics(SM_CXSCREEN); // 屏幕宽度 像素
int cy = GetSystemMetrics(SM_CYSCREEN); // 屏幕高度 像素
LONG l_WinStyle = GetWindowLong(hwnd, GWL_STYLE); // 获取窗口信息
// 设置窗口信息 最大化 取消标题栏及边框 //
//SetWindowLong(hwnd,GWL_STYLE,( l_WinStyle |WS_MAXIMIZE| WS_POPUP) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER);//
SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, 0);
}*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//联系人结构体
struct people {
string m_Name;//姓名
int m_Sex;//性别
int m_Age;//年龄
string m_Phone;//电话
string m_Addr;//住址
};
//通讯录结构体
struct Addressbook {
Addressbook() {
m_Size = 0;
}
people peopleArray[MAX];//联系人数组
int m_Size;//人数个数
};
void showMenu() {//显示面板
coutAIO("************************", 0);
coutAIO("***** 1.添加联系人 *****", 0);
coutAIO("***** 2.显示联系人 *****", 0);
coutAIO("***** 3.删除联系人 *****", 0);
coutAIO("***** 4.查找联系人 *****", 0);
coutAIO("***** 5.修改联系人 *****", 0);
coutAIO("***** 6.清空通讯录 *****", 0);
coutAIO("***** 0.退出通讯录 *****", 0);
coutAIO("************************", 0);
}
void AddPeople(Addressbook * abs) {
if (abs->m_Size == MAX)
{
coutAIO("通讯录已满,无法添加。");
return;
}
else {
string name;
coutAIO("请输入您朋友的姓名:", 1, 1);
cin >> name;
abs->peopleArray[abs->m_Size].m_Name = name;
int sex;
while (true)
{
coutAIO("请认真输入您朋友的性别,1男 2女:", 1, 1);
cin >> sex;
if (sex != 1 && sex != 2)
{
coutAIO("再说一遍,1是男,2是女。", 3);
continue;
}
abs->peopleArray[abs->m_Size].m_Sex = sex;
break;
}
int age;
while (true)
{
age = 0;
coutAIO("请认真输入您朋友的年龄:", 1, 1);
cin >> age;
if (age >= 200)
{
coutAIO("嗯,活得真久", 3);
continue;
}
else if (age < 0)
{
coutAIO("哇哦,这个人竟然没出生。", 1);
continue;
}
else {
abs->peopleArray[abs->m_Size].m_Age = age;
break;
}
}
string phone;
coutAIO("请认真输入您朋友的联系电话:", 1, 1);
cin >> phone;
abs->peopleArray[abs->m_Size].m_Phone = phone;
string address;
coutAIO("请认真输入您朋友的住址:", 1, 1);
cin >> address;
abs->peopleArray[abs->m_Size].m_Addr = address;
abs->m_Size++;
}
}
void showPeople(Addressbook * abs) {
if (abs->m_Size == 0)
{
bukaqingping();
coutAIO("当前记录为空");
Sleep(1000);
bukaqingping();
}
else {
for (size_t i = 0; i < abs->m_Size; i++)
{
cout << "姓名:" << abs->peopleArray[i].m_Name << "\t";
cout << "性别:" << (abs->peopleArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->peopleArray[i].m_Age << "\t";
cout << "电话:" << abs->peopleArray[i].m_Phone << "\t\t";
cout << "住址:" << abs->peopleArray[i].m_Addr << "\t";
cout << endl;
}
}
Sleep(abs->m_Size * 1000);
system("pause");
bukaqingping();
}
int isExist(Addressbook * abs, string name, int aa = 1) {
int i, flag = 0, kn[MAX] = { 0 }, flag2 = 0, temp;
for (i = 0; i < abs->m_Size; i++)
{
if (abs->peopleArray[i].m_Name == name)
{
kn[flag2] = i;
flag++;
flag2++;
}
}
temp = flag;
if (flag == 1 && aa == 0) {
cout << "姓名:" << abs->peopleArray[kn[0]].m_Name << "\t";
cout << "性别:" << (abs->peopleArray[kn[0]].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->peopleArray[kn[0]].m_Age << "\t";
cout << "电话:" << abs->peopleArray[kn[0]].m_Phone << "\t\t";
cout << "住址:" << abs->peopleArray[kn[0]].m_Addr << "\t";
cout << endl;
system("pause");
bukaqingping();
}
if (flag > 1 && aa == 1) {
flag = 1;
cout << "请问您想删除哪个" << name << "?" << endl;
for (size_t i = 0; i < abs->m_Size; i++)
{
if (abs->peopleArray[i].m_Name == name)
{
cout << flag << ".\t";
cout << "姓名:" << abs->peopleArray[i].m_Name << "\t";
cout << "性别:" << (abs->peopleArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->peopleArray[i].m_Age << "\t";
cout << "电话:" << abs->peopleArray[i].m_Phone << "\t\t";
cout << "住址:" << abs->peopleArray[i].m_Addr << "\t";
cout << endl;
flag++;
}
}
cin >> flag2;
while (flag2 > flag) {
coutAIO("别闹!");
cin >> flag2;
}
return kn[flag2];
}
if (flag > 1 && aa == 0) {
cout << "有" << flag << "个名为" << name << "的联系人,以下是人员名单:" << endl;
flag = 1;
for (size_t i = 0; i < abs->m_Size; i++)
{
if (abs->peopleArray[i].m_Name == name)
{
cout << flag << ".\t";
cout << "姓名:" << abs->peopleArray[i].m_Name << "\t";
cout << "性别:" << (abs->peopleArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->peopleArray[i].m_Age << "\t";
cout << "电话:" << abs->peopleArray[i].m_Phone << "\t\t";
cout << "住址:" << abs->peopleArray[i].m_Addr << "\t";
cout << endl;
flag++;
}
}
Sleep(1500);
system("pause");
return 0;
}
if (flag > 1 && aa == 2) {
cout << "有" << flag << "个名为" << name << "的联系人。您想改哪个?" << endl;
flag = 1;
for (size_t i = 0; i < abs->m_Size; i++)
{
if (abs->peopleArray[i].m_Name == name)
{
cout << flag << ".\t";
cout << "姓名:" << abs->peopleArray[i].m_Name << "\t";
cout << "性别:" << (abs->peopleArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->peopleArray[i].m_Age << "\t";
cout << "电话:" << abs->peopleArray[i].m_Phone << "\t\t";
cout << "住址:" << abs->peopleArray[i].m_Addr << "\t";
cout << endl;
flag++;
}
cin >> flag2;
while (flag2 > flag) {
coutAIO("别闹!");
cin >> flag2;
}
return kn[flag2];
}
return 0;
}
if (temp == 1) {
return kn[0];
}
bukaqingping();
coutAIO("查无此人");
Sleep(1500);
bukaqingping();
return -1;
}
void save(Addressbook * abs) {
ofstream ofs;
ofs.open("MyFriend.txt", ios::out);
for (size_t i = 0; i < abs->m_Size; i++)
{
ofs << abs->peopleArray[i].m_Name << ""
<< abs->peopleArray[i].m_Sex << " "
<< abs->peopleArray[i].m_Age << " "
<< abs->peopleArray[i].m_Phone << " "
<< abs->peopleArray[i].m_Addr << endl;
}
ofs.close();
}
void read(Addressbook * abs) {
ifstream ifs;
ifs.open("MyFriend.txt", ios::in);
if (!ifs.is_open()) {
return;
}
int i = 0, buf1, flag = 0, j = 0, k = 0, j1 = 0, temp = 0;
string buf = "", flag2 = "";
while (ifs >> buf) {//读入,后面的思想是找到空格后读入它前面的参数。
buf1 = (int)buf[i];
temp = numberaio(buf);
for (i = 0; i < temp; i++)
{
if (buf1 == 32 && flag == 0) {
for (j = 0; j < i; j++)
{
abs->peopleArray[i].m_Name[j] = buf[i];
}
flag++;
continue;
}
if (buf1 == 32 && flag == 1) {
for (k = j; k < i; k++)
{
flag2[j1] = buf[k];
j1++;
}
abs->peopleArray[i].m_Sex = zfzh(flag2);
flag++;
j = ++k;
j1 = 0;
flag2 = "";
continue;
}
if (buf1 == 32 && flag == 2) {
for (k = j; k < i; k++)
{
flag2[j1] = buf[k];
j1++;
}
abs->peopleArray[i].m_Age = zfzh(flag2);
flag++;
j = ++k;
j1 = 0;
flag2 = "";
continue;
}
if (buf1 == 32 && flag == 3) {
for (k = j; k < i; k++)
{
abs->peopleArray[i].m_Phone[k] = buf[i];
}
flag++;
j = ++k;
continue;
}
if (flag == 4) {
for (k = j; k < temp; k++)
{
abs->peopleArray[i].m_Addr[k] = buf[i];
}
return;
}
}
i++;
flag = 0;
}
ifs.close();
}
void deletePeople(Addressbook * abs) {
coutAIO("请输入需要删除联系人的姓名:");
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1) {
for (size_t i = ret; i < abs->m_Size; i++)
{
abs->peopleArray[i] = abs->peopleArray[i + 1];
}
abs->m_Size--;
bukaqingping();
coutAIO("删除成功");
Sleep(1500);
}
}
void findPerson(Addressbook * abs) {
coutAIO("请输入您需要查找的联系人:");
string name;
cin >> name;
isExist(abs, name, 0);
}
void modifyPeople(Addressbook * abs) {
string name;
coutAIO("请输入您要修改的联系人:", 1, 1);
cin >> name;
int ret = isExist(abs, name, 2);
if (ret == -1) {
return;
}
abs->peopleArray[ret].m_Name = name;
int sex;
while (true)
{
coutAIO("请认真输入您朋友的性别,1男 2女:", 1, 1);
cin >> sex;
if (sex != 1 && sex != 2)
{
coutAIO("再再言兑一一遍遍,11是是男男,22是是女子。", 3);
continue;
}
abs->peopleArray[ret].m_Sex = sex;
break;
}
int age;
while (true)
{
age = 0;
coutAIO("请认真输入您朋友的年龄:", 1, 1);
cin >> age;
if (age >= 200)
{
coutAIO("口恩,水舌得真久", 3);
continue;
}
else if (age < 0)
{
coutAIO("口圭口我,这个人竟然没出生。", 1);
continue;
}
else {
abs->peopleArray[ret].m_Age = age;
break;
}
}
string phone;
coutAIO("请认真输入您朋友的联系电话:", 1, 1);
cin >> phone;
abs->peopleArray[ret].m_Phone = phone;
string address;
coutAIO("请认真输入您朋友的住址:", 1, 1);
cin >> address;
abs->peopleArray[ret].m_Addr = address;
}
void my_cls(Addressbook * abs) {
abs->m_Size = 0;
coutAIO("已清空");
}
int main()
{
srand((unsigned)time(NULL));
system("title 通讯录管理系统");
int num;
Addressbook abs;
read(&abs);
while (true)
{
showMenu();
cin >> num;
switch (num)
{
case 1:
AddPeople(&abs);
break;
case 2:
showPeople(&abs);
break;
case 3:
deletePeople(&abs);
break;
case 4:
findPerson(&abs);
break;
case 5:
modifyPeople(&abs);
break;
case 6:
my_cls(&abs);
break;
case 0://直接结束主函数
coutAIO("欢迎下次使用", 1);
save(&abs);
system("pause");
bukaqingping();
system("pause");
exit(0);
break;
default:
coutAIO("抱歉", 1, 1);
coutAIO(",", 5, 1);
coutAIO("暂时没有其他功能。", 1);
system("pause");
break;
}
bukaqingping();
}
return 0;
}