赞
踩
目录
运用的知识点:单链表、结构体、类、文件I/O
1.结构体
//结构体
typedef struct list
{
char name[32];
char password[32];
struct list* next;
}node;
2.类
//类
class L_list
{
//公有
public:
L_list(); //构造函数
void insert(node* p); //头插
void show(); //显示
node* find(node* q); //查找
void user_read(L_list q); //读取
void user_write(); //写入//私有
private:
node* head;
};
3.头插
//头插
void L_list::insert(node* p) {
p->next = head->next;
head->next = p;
}
4.显示
/显示
void L_list::show() {
node* p;
p = head->next;
while (p)
{
cout << "账号:" << p->name << " " << "密码:" << p->password << endl;
p = p->next;
}
}
5.查找
//查找
node* L_list::find(node* q) {
node* p;
p = head->next;
while (p)
{
if (!strcmp(p->name, q->name))
{
return p;
}
p = p->next;
}
return NULL;
}
6.文件写入
//写入
void L_list::user_write()
{
node* p;
p = head->next;//打开
ofstream out("./user.txt", std::ios::out);while (p)
{
out.write(p->name, sizeof(p->name));
out.write(p->password, sizeof(p->password));
p = p->next;
}//关闭
out.close();
}
7.文件读取
//读取
void L_list::user_read(L_list q)
{
node* p;//打开
ifstream in("./user.txt", std::ios::in);while (1)
{
p = new node;
memset(p->name, 0, sizeof(p->name));
memset(p->password, 0, sizeof(p->password));
p->next = NULL;
in.read(p->name, sizeof(p->name));
in.read(p->password, sizeof(p->password));
int tt = strlen(p->name);
if (tt == 0)
{
break;
}
q.insert(p);
}//关闭
in.close();
}
- #include <iostream>
- #include <fstream>
-
- using namespace std;
-
- //结构体
- typedef struct list
- {
- char name[32];
- char password[32];
- struct list* next;
- }node;
-
- //类
- class L_list
- {
- //公有
- public:
- L_list(); //构造函数
- void insert(node* p); //头插
- void show(); //显示
- node* find(node* q); //查找
- void user_read(L_list q); //读取
- void user_write(); //写入
-
- //私有
- private:
- node* head;
- };
-
- //构造函数
- L_list::L_list() {
- head = new node;
- head->next = NULL;
-
- //清空数组
- memset(head->name, 0, sizeof(head->name));
- memset(head->password, 0, sizeof(head->password));
- }
-
- //头插
- void L_list::insert(node* p) {
- p->next = head->next;
- head->next = p;
- }
-
- //显示
- void L_list::show() {
- node* p;
- p = head->next;
- while (p)
- {
- cout << "账号:" << p->name << " " << "密码:" << p->password << endl;
- p = p->next;
- }
- }
-
- //查找
- node* L_list::find(node* q) {
- node* p;
- p = head->next;
- while (p)
- {
- if (!strcmp(p->name, q->name))
- {
- return p;
- }
- p = p->next;
- }
- return NULL;
- }
-
- //写入
- void L_list::user_write()
- {
- node* p;
- p = head->next;
-
- //打开
- ofstream out("./user.txt", std::ios::out);
-
- while (p)
- {
- out.write(p->name, sizeof(p->name));
- out.write(p->password, sizeof(p->password));
- p = p->next;
- }
-
- //关闭
- out.close();
- }
-
- //读取
- void L_list::user_read(L_list q)
- {
- node* p;
-
- //打开
- ifstream in("./user.txt", std::ios::in);
-
- while (1)
- {
- p = new node;
- memset(p->name, 0, sizeof(p->name));
- memset(p->password, 0, sizeof(p->password));
- p->next = NULL;
- in.read(p->name, sizeof(p->name));
- in.read(p->password, sizeof(p->password));
- int tt = strlen(p->name);
- if (tt == 0)
- {
- break;
- }
- q.insert(p);
- }
-
- //关闭
- in.close();
- }
-
- //主函数
- int main(void)
- {
- //定义局部变量
- L_list p;
- node* isnew, * user, * srt;
- char str;
- int set;
-
- //读取文本数据
- p.user_read(p);
-
- //开辟堆空间
- user = new node;
-
- //死循环
- while (1)
- {
- cout << "-----------菜单------------" << endl;
- cout << " a.登录" << endl;
- cout << " b.注册" << endl;
- cout << " d.显示" << endl;
-
- //用户输入
- cout << "请选择:";
- cin >> str;
-
- switch (str)
- {
- //登录
- case 'a':
- //清空数据
- memset(user->name, 0, sizeof(user->name));
- memset(user->password, 0, sizeof(user->password));
-
- //用户输入
- cout << "账号:";
- cin >> user->name;
-
- //查找是否存在
- srt = p.find(user);
- if (srt == NULL)
- {
- cout << "账号不存在!" << endl;
- break;
- }
- else
- {
- //用户输入
- cout << "密码:";
- cin >> user->password;
-
- //判断两次输入的密码是否正确
- if (!strcmp(user->password, srt->password))
- {
- cout << "登录成功!" << endl;
- }
- else
- {
- cout << "密码错误!" << endl;
- }
- break;
- }
-
- //注册
- case 'b':
- //清空数组
- memset(user->password, 0, sizeof(user->password));
-
- //开辟堆空间
- isnew = new node;
-
- //用户输入
- cout << "账号:";
- cin >> isnew->name;
-
- //查找是否存在
- srt = p.find(isnew);
- if (srt != NULL)
- {
- cout << "账号已存在!" << endl;
- break;
- }
- if (srt == NULL)
- {
- //用户输入
- cout << "密码:";
- cin >> isnew->password;
- cout << "再次确认密码:";
- cin >> user->password;
-
- //判断是否相等
- set = strcmp(isnew->password, user->password);
- if (set == 0)
- {
- //头插
- p.insert(isnew);
-
- //写入文本保存
- p.user_write();
- cout << "账号注册成功!" << endl;
- break;
- }
- else
- {
- cout << "两个密码不同,注册失败!" << endl;
- break;
- }
- }
-
- //显示
- case'd':
- p.show();
- break;
- }
- }
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。