Detailed address book and simple student management system code

#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;
}

 

Published 17 original articles · won praise 9 · views 195

Guess you like

Origin blog.csdn.net/shnagmiao/article/details/104427333