#include <iostream>
#include <string>
using namespace std;
//bool manbermark=0;//标记是否有注册成员
string loginmarknumber;//记录登录时还没有一个注册的,注册时的账号
class information
{
public:
string num;//账号
string key;//密码
string num1;//学号
string name;//姓名
string sex;//性别
string age;//年龄
string tel;//电话号码
string mailbox;//邮箱
string post_code;//邮政编码
string ID;//身份证号码
string dorm_num;//宿舍号
string address;//家庭住址
string contactfa;//父亲的联系方式
string contactmo;//母亲的联系方式
information* next;//记录下一空间地址
};
int cheak_num(string str, information* head)//检查账号是否存在
{
int t = 0;//记录该账号是否存在
information* p = head;
if (head == NULL)
t = 0;
else
{
while (p->next != NULL)//对已有账号进行遍历
{
if (p->num != str)
p = p->next;
else
{
t = 1;
break;
}
}
if (t == 0)
if (p->num == str)
t = 1;
}
return t;//若账号已经存在则返回1,否则返回0
}
information* get_information(information* head)//管理员录入信息
{
information* s, * p;
s = new information;
p = new information;
cout << "请录入信息:" << endl;
cout << "账号:";
cin >> s->num;
cout << "密码:";
cin >> s->key;
cout << "学号:";
cin >> s->num1;
cout << "姓名:";
cin >> s->name;
cout << "性别:";
cin >> s->sex;
cout << "年龄:";
cin >> s->age;
cout << "电话号码:";
cin >> s->tel;
cout << "邮箱:";
cin >> s->mailbox;
cout << "邮政编码:";
cin >> s->post_code;
cout << "身份证号码:";
cin >> s->ID;
cout << "宿舍号:";
cin >> s->dorm_num;
cout << "家庭住址:";
cin >> s->address;
cout << "父亲的联系方式:";
cin >> s->contactfa;
cout << "母亲的联系方式:";
cin >> s->contactmo;
cout << endl << "====================================信息录入成功===============================" << endl;
while (1)
{
char ch;
if (head == NULL)
{
head = s;
//head->next=NULL;//头指针赋值
}
else
p->next = s; //将新结点插入已有链表的最后
cout << "是否继续录入信息 是(1),(2)否" << endl;
cin >> ch;
while (ch != '1' && ch != '2')
{
cout << "请重新输入是否继续录入 是(1) 否(2)";
cin >> ch;
}
if (ch == '1')
{
//选择“是?
p = s;// p指向链表中最后的结点
p->next = NULL;
s = new information;
s->next = NULL;
cout << "请输入注册信息:" << endl;
cout << "账号:";
string str111;
cin >> str111;
int t;
t = cheak_num(str111, head);
while (t == 1) //对已有账号进行判断 ,直到新注册账号不存在为止
{
cout << "账号已存在,请重新注册:";
cin >> str111;
t = cheak_num(str111, head);
}
s->num = str111;
cout << "密码:";
cin >> s->key;
cout << "学号:";
cin >> s->num1;
cout << "姓名:";
cin >> s->name;
cout << "性别:";
cin >> s->sex;
cout << "年龄:";
cin >> s->age;
cout << "电话号码:";
cin >> s->tel;
cout << "邮箱:";
cin >> s->mailbox;
cout << "邮政编码:";
cin >> s->post_code;
cout << "身份证号码:";
cin >> s->ID;
cout << "宿舍号:";
cin >> s->dorm_num;
cout << "家庭住址:";
cin >> s->address;
cout << "父亲的联系方式:";
cin >> s->contactfa;
cout << "母亲的联系方式:";
cin >> s->contactmo;
cout << endl;
}
else//选择“否”
{
s->next = NULL;
break;
}
cout << endl << "====================================信息录入成功===============================" << endl;
}
return head;
}
void output_information(information* head)//显示所有账号信息
{
if (head == NULL) {
cout << "暂无注册信息";
return;
}
int i = 1;
information* s;
s = head;
while (s->next != NULL)
{
cout << "用户注册编码:" << i << endl;
cout << "账号:" << s->num << endl;
cout << "密码:" << s->key << endl;
cout << "学号:" << s->num1 << endl;
cout << "姓名: " << s->name << endl;
cout << "性别:" << s->sex << endl;
cout << "年龄:" << s->age << endl;
cout << "电话号码:" << s->tel << endl;
cout << "邮箱:" << s->mailbox << endl;
cout << "邮政编码:" << s->post_code << endl;
cout << "身份证号码:" << s->ID << endl;
cout << "宿舍号:" << s->dorm_num << endl;
cout << "家庭住址:" << s->address << endl;
cout << "父亲的联系方式:" << s->contactfa << endl;
cout << "母亲的联系方式:" << s->contactmo << endl << endl;
s = s->next;
i++;
}
cout << "用户注册编码:" << i << endl;
cout << "账号:" << s->num << endl;
cout << "密码:" << s->key << endl;
cout << "学号:" << s->num1 << endl;
cout << "姓名: " << s->name << endl;
cout << "性别:" << s->sex << endl;
cout << "年龄:" << s->age << endl;
cout << "电话号码:" << s->tel << endl;
cout << "邮箱:" << s->mailbox << endl;
cout << "邮政编码:" << s->post_code << endl;
cout << "身份证号码:" << s->ID << endl;
cout << "宿舍号:" << s->dorm_num << endl;
cout << "家庭住址:" << s->address << endl;
cout << "父亲的联系方式:" << s->contactfa << endl;
cout << "母亲的联系方式:" << s->contactmo << endl;
}
int check_keys(string number, string keys, information* head)//检查账号是否存在且密码是否正确
{
int t = 0;
information* p = head;
while (p->next != NULL)
{
if (p->num != number)
p = p->next;
else
{
if (p->key == keys)
{
t = 3;//账号存在且密码正确
break;
}
else
{
t = 2;//账号存在但是密码不正确
break;
}
}
}
if (t == 0)
if (p->num == number)
if (p->key == keys)
t = 3;//账号存在且密码正确
else
t = 2;//账号存在但是密码不正确
return t;
}
void delete_information(information* p)//删除信息函数
{
p= NULL;
}
information* cheak_number(string number, information* head)//在管理员模式下或者是客户在正确输入密码后查找客户信息
{
int a = 0;//标记账户是否存在
information* p = head;
while (p->next != NULL)
{
if (p->num == number)
{
a = 1;
break;
}
else
p = p->next;
}
if (p->num == number)
a = 1;
if (a == 0)
p = NULL;
return p;//返回所查找的客户地址信息
}
void revise_information(information* p)//"修改信息"
{
string str, str1;//记录用户账号信息
char ch;//记录用户决定
while (1)
{
cout << "请选择要修改的信息 (1)账号 (2)姓名 (3)学号 (4)密码 (5)性别 (6)年龄 (7)邮箱 (8)邮政编码 (9)身份证号码 (10)宿舍号 (11)电话号码 (12)家庭住址 (13)父亲的联系方式 (14)母亲的联系方式 (15)退出修改当前账户信息 ";
cin >> ch;
while (ch != '1' && ch != '2' && ch != '3' && ch != '4' && ch != '5' && ch != '6' && ch != '7' && ch != '8' && ch != '9' && ch != '10' && ch != '11' && ch != '12' && ch != '13' && ch != '14' && ch != '15')//用户若输入业务已有误
{
cout << "请重新输入有效的业务:";
cin >> ch;
}
if (ch == '1')//修改账号
{
cout << "请输入新账号:";
cin >> str;
p->num = str;
cout << endl << "====================================修改账号成功================================" << endl;
}
else
if (ch == '2')//修改姓名
{
cout << "请输入新姓名:";
cin >> str;
p->name = str;
cout << endl << "===================================修改姓名成功==============================" << endl;
}
else
if (ch == '3')//修改学号
{
cout << "请输入正确学号:";
cin >> str;
p->num1 = str;
cout << endl << "===================================修改学号成功==============================" << endl;
}
else
if (ch == '4')//修改密码
{
cout << "请输入原密码:";
cin >> str;
while (p->key != str)
{
cout << "与原密码不一致,请重新输入原密码:";
cin >> str;
}
cout << "请输入新密码:";
cin >> str;
cout << "请确认密码:";
cin >> str1;
while (str != str1)
{
cout << "与第一次输入不同,请重新设定:";
cout << "请输入新密码:";
cin >> str;
cout << "请确认密码:";
cin >> str1;
}
cout << endl << "===============================设定成功,请记好新密码==========================" << endl;
}
else
if (ch == '5')//修改性别
{
cout << "请输入真实性别:";
cin >> str;
p->sex = str;
cout << endl << "===================================修改性别成功==============================" << endl;
}
else
if (ch == '6')//修改年龄
{
cout << "请输入真实性别:";
cin >> str;
p->age = str;
cout << endl << "===================================修改年龄成功==============================" << endl;
}
else
if (ch == '7')//修改邮箱
{
cout << "请输入新邮箱:";
cin >> str;
p->mailbox = str;
cout << endl << "===================================修改邮箱成功==============================" << endl;
}
else
if (ch == '8')//修改邮政编码
{
cout << "请输入新的邮政编码:";
cin >> str;
p->post_code = str;
cout << endl << "===================================修改邮政编码成功==============================" << endl;
}
else
if (ch == '9')//修改身份证号码
{
cout << "请输入新身份证号码:";
cin >> str;
p->ID = str;
cout << endl << "==================================修改身份证成功===============================" << endl;
}
else
if (ch == '10')//修改宿舍号
{
cout << "请输入新宿舍号:";
cin >> str;
p->dorm_num = str;
cout << endl << "====================================修改宿舍号成功================================" << endl;
}
else
if (ch == '11')//修改电话号码
{
cout << "请输入新电话号码:";
cin >> str;
p->tel = str;
cout << endl << "==================================电话号码修改成功=============================" << endl;
}
else
if (ch == '12')//修改家庭住址
{
cout << "请输入新的家庭住址:";
cin >> str;
p->address = str;
cout << endl << "===================================修改家庭住址成功==============================" << endl;
}
else
if (ch == '13')//修改父亲的联系方式
{
cout << "请输入正确父亲的联系方式:";
cin >> str;
p->contactfa = str;
cout << endl << "===================================修改父亲的联系方式成功==============================" << endl;
}
else
if (ch == '14')//修改母亲的的联系方式
{
cout << "请输入正确的母亲的联系方式:";
cin >> str;
p->address = str;
cout << endl << "===================================修改母亲的联系方式成功==============================" << endl;
}
else
break;//退出修改账户信息
}
}
void show_information(information* p)//显示当前账户信息
{
cout << "账号:" << p->num << endl;
cout << "姓名:" << p->name << endl;
cout << "学号:" << p->num1 << endl;
cout << "密码:" << p->key << endl;
cout << "性别:" << p->sex << endl;
cout << "年龄:" << p->age << endl;
cout << "邮箱:" << p->mailbox << endl;
cout << "邮政编码:" << p->post_code << endl;
cout << "身份证号码:" << p->ID << endl;
cout << "宿舍号:" << p->dorm_num << endl;
cout << "电话号码:" << p->tel << endl;
cout << "家庭住址:" << p->address << endl;
cout << "父亲的联系方式:" << p->contactfa << endl;
cout << "母亲的联系方式:" << p->contactmo << endl;
}
information* logon(information* head)//用户注册账号
{
information* s;
string str;//记录账号信息
cout << "请输入注册账号:";
cin >> str;
int t;
if (head == NULL)//如果链表不存在信息,默认为新注册的账号不存在
t = 0;
else
t = cheak_num(str, head);//判断账号是否已经存在
while (t == 1)//账号已经存在 重新输入
{
cout << "账号已存在,请重新注册:";
cin >> str;
t = cheak_num(str, head);
}
s = new information;//为链表开辟新空间
s->num = str;
if (head == NULL)
loginmarknumber = str;
cout << "姓名:";
cin >> s->name;
cout << "学号:";
cin >> s->num1;
cout << "密码:";
cin >> s->key;
cout << "性别:";
cin >> s->sex;
cout << "年龄:";
cin >> s->age;
cout << "邮箱:";
cin >> s->mailbox;
cout << "邮政编码:";
cin >> s->post_code;
cout << "身份证号:";
cin >> s->ID;
cout << "宿舍号:";
cin >> s->dorm_num;
cout << "电话号码:";
cin >> s->tel;
cout << "家庭住址:";
cin >> s->address;
cout << "父亲的联系方式:";
cin >> s->contactfa;
cout << "母亲的联系方式:";
cin >> s->contactmo;
if (head == NULL)//如果当前链表没有任何信息
{
head = s;
head->next = NULL;
}
else//将新注册的插入当前链表
{
s->next = head->next;
head->next = s;
}
cout << endl << "=====================================注册成功===================================" << endl;
return head;
}
information* choose(information* head)//普通学生登陆账号以及选择需要的业务
{
int t, loginmark = 0;
if (head == NULL) {//还没有注册账号
cout << endl << "未有账户注册,无法完成登陆功能,请先注册账户信息" << endl << "是否现在注册:(1)是,(2)稍后注册" << endl;
int x;
cin >> x;
while (x != 1 && x != 2) {
cout << "请重新选择:";
cin >> x;
}
if (x == 1) {
head = logon(head);
loginmark = 1;
}
else
return head;
}
information* p;//p是用来记录所查找到的账号的地址的
string number, keys;//number 记录登陆账号 keys记录账密码
if (loginmark == 0) {
cout << "请输入账号:";
cin >> number;
cout << "请输入账号密码:";
cin >> keys;
t = check_keys(number, keys, head); //t是用来记录是否存在账号以及密码是否正确的,若账号不存在则返回0,若账号密码错误返回2,账号存在且密码正确时返回3
while (t == 0 || t == 2)//如果账号不存在或者是密码输入错误
{
if (t == 2)//用户输入密码有误
{
cout << "密码输入错误,请重新输入账号及密码";
cout << "账号:";
}
else//账号不存在
cout << "账号不存在,请重新输入账号及密码,账号:";
cin >> number;
cout << "密码:";
cin >> keys;
t = check_keys(number, keys, head);//调用判断密码 账号是否正确
}
}
else
number = loginmarknumber;
cout << endl << "==================================普通学生登陆成功==============================" << endl << endl;
cout << "请选择业务:(1)删除信息 (2)修改信息 (3)显示账号信息 (4)退出账号" << endl;
p = cheak_number(number, head); //记录所登陆的账号地址
char ch; //记录学生所做的选择
cin >> ch;
while (1)
{
while (ch != '1' && ch != '2' && ch != '3' && ch != '4')//用户若对业务有疑问
{
cout << "请重新输入所需业务:(1)删除信息 (2)修改信息 (3)显示账号信息 (4)退出账号" << endl;
cin >> ch; //重新输入选项
}
if (ch == '7') //退出当前账户
break;
else
{
switch (ch)
{
case '1':delete_information(p); break; //删除信息
case '2':revise_information(p); break; //修改信息
case '3':show_information(p); break; //显示账号信息
}
cout << "请选择选项:(1)删除信息 (2)修改信息 (3)显示账号信息 (4)退出账号" << endl;
cin >> ch;
}
}
return head;
}
string change_monitor_keys(string monitor)
{
string string1, string2;//记录学生两次输入密码
cout << "请输入原密码:";
cin >> string1;
while (string1 != monitor)//如果管理员密码输入不正确
{
cout << "与原密码不符,是否重新输入 (1)是 (2) 否 " << endl;
char chra;
cin >> chra;//记录学生是否继续登陆
while (chra != '1' && chra != '2')//判断学生是否存在误操作
{
cout << "选择有误,请重新选择:(1)是 (2) 否 " << endl;
cin >> chra;
}
if (chra == '1')//继续登陆输入账号
{
cout << "请再次输入原密码:";
cin >> string1;
}
else {//停止登陆
cout << endl << "==================================密码未修改====================================" << endl;
break;
}
}
if (string1 != monitor)//退出修改管理员密码
return monitor;
cout << "请输入新密码:";
cin >> string1;
cout << "请再次输入确认修改密码:";
cin >> string2;
while (string1 != string2)//判断两次输入的新密码是否一致
{
cout << "两次输入密码不相同,请选择是否继续修改:(1)是 (2)否" << endl;
char jilu;//记录学生选择是否继续修改
cin >> jilu;
while (jilu != '1' && jilu != '2')//判断用户是否存在误操作,是则提示
{
cout << "请重修选择是否修改:(1)是 (2)否" << endl;
cin >> jilu;
}
if (jilu == '1')//继续修改密码
{
cout << "请输入新密码:";
cin >> string1;
cout << "请再次输入确认修改密码:";
cin >> string2;
}
else {//退出修改密码
break;
}
}
if (string2 == string1)//如果在两次输入修改密码一致,成功修改
{
monitor = string1;
cout << endl << "====================================密码修改成功===============================" << endl;
}
else
cout << endl << "==================================密码未修改==============================" << endl;
return monitor;
}
void choose_model(information* head, string monitor)//选择开始界面选项
{
information* p;
char ch, mon_cho;//记录学生选择
string str;//后面用到的是管理员密码 客户账号
cout << "==============================欢迎进入学生通讯录管理系统==============================" << endl;
while (1)
{
cout << "请选择进入模式:" << endl;
cout << "(1)管理员模式 (2)普通学生模式 (3)退出系统 " << endl;
cin >> ch;
while (ch != '1' && ch != '2' && ch != '3')//如果用户输入有误,提示
{
cout << "请选择进入模式:" << endl;
cout << "(1)管理员模式 (2)普通学生模式 (3)退出系统 " << endl;
cin >> ch;
}
if (ch == '1')//管理员模式
{
cout << "您已进入管理员模式" << endl << "请输入管理员密码:";
cin >> str;
if (monitor != str)
{
char judge;//用来记录选择
while (monitor != str)//判断管理员密码是否正确
{
cout << "管理员密码输入错误,是否重新输入 (1)是 (2)否" << endl;//此处考虑到可能是学生不小心进入可以选择退出管理员模式
cin >> judge;
while (judge != '1' && judge != '2')//如果用户输入有误,提示
{
cout << "请重新选择是否重新输入密码 (1)是 (2)否" << endl;
}
if (judge == '1')//继续输入密码
{
cout << "请重新输入管理员密码:";
cin >> str;//重新输入管理员密码
}
else
{
break;//结束本输入密码循环
}
}
}
if (monitor == str)//成功登陆管理员
{
cout << endl << "==================================管理员登陆成功===============================" << endl;
while (1)
{
cout << endl << endl << "请输入要执行的操作" << endl;
cout << "(1)学生信息录入 (2)管理学生信息 (3)修改管理员密码 (4)显示所有账户信息 (5)退出管理员模式" << endl;
cin >> mon_cho;//记录学生选择
while (mon_cho != '1' && mon_cho != '2' && mon_cho != '3' && mon_cho != '4' && mon_cho != '5')//如果用户输入有误,提示
{
cout << endl << endl << "请重新选择模式" << endl;
cout << "(1)学生信息录入 (2)管理学生信息 (3)修改管理员密码 (4)显示所有账户信息 (5)退出管理员模式" << endl;
cin >> mon_cho;
}
if (mon_cho == '1')//学生信息录入
head = get_information(head);
else
if (mon_cho == '2')//管理账户信息
{
if (head == NULL) {
cout << "对不起,由于暂无账户注册信息,该操作无法执行" << endl;
continue;
}
cout << "请输入要修改的学生账号:";
cin >> str;
p = cheak_number(str, head);//判断账户是否存在
while (p == NULL)//账户不存在,提示重新输入
{
cout << "该账号不存在,请重新输入:";
cin >> str;
p = cheak_number(str, head);
}
revise_information(p);//修改已存在的账户信息
}
else
if (mon_cho == '5')//结束管理员模式
break;
else
if (mon_cho == '4')//输出所有账户信息
output_information(head);
else//修改管理员密码
monitor = change_monitor_keys(monitor);
}
}
}
else
if (ch == '2')//选择普通学生模式
{
char jilu;//记录用户所选业务
cout << "==============================欢迎进入学生通讯录管理系统==============================" << endl;
while (1)
{
cout << "请选择需要选项:(1) 注册 (2) 登录 (3)退出普通学生模式 " << endl;
cin >> jilu;
while (jilu != '1' && jilu != '2' && jilu != '3')//判断用户误操作,提示
{
cout << "输入错误,请重新选择选项::(1) 注册 (2) 登录 (3)退出普通学生模式 " << endl;
cin >> jilu;
}
if (jilu == '1')//注册
head = logon(head);
else
if (jilu == '2')//登陆
head = choose(head);
else
break;//退出普通学生模式
}
}
else //退出该系统
break;
}
}
int main()
{
information* head = NULL;
string monitor = "123";//monitor为管理员初始密码
choose_model(head, monitor);
return 0;
}