当前位置:   article > 正文

C++编写一个简单的单链表注册登录小项目(简单+注释)_编写一个登录程序用c++

编写一个登录程序用c++

目录

一、效果图

二、代码分解

三、完整代码 


运用的知识点:单链表、结构体、类、文件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();
}

三、完整代码 

  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. //结构体
  5. typedef struct list
  6. {
  7. char name[32];
  8. char password[32];
  9. struct list* next;
  10. }node;
  11. //类
  12. class L_list
  13. {
  14. //公有
  15. public:
  16. L_list(); //构造函数
  17. void insert(node* p); //头插
  18. void show(); //显示
  19. node* find(node* q); //查找
  20. void user_read(L_list q); //读取
  21. void user_write(); //写入
  22. //私有
  23. private:
  24. node* head;
  25. };
  26. //构造函数
  27. L_list::L_list() {
  28. head = new node;
  29. head->next = NULL;
  30. //清空数组
  31. memset(head->name, 0, sizeof(head->name));
  32. memset(head->password, 0, sizeof(head->password));
  33. }
  34. //头插
  35. void L_list::insert(node* p) {
  36. p->next = head->next;
  37. head->next = p;
  38. }
  39. //显示
  40. void L_list::show() {
  41. node* p;
  42. p = head->next;
  43. while (p)
  44. {
  45. cout << "账号:" << p->name << " " << "密码:" << p->password << endl;
  46. p = p->next;
  47. }
  48. }
  49. //查找
  50. node* L_list::find(node* q) {
  51. node* p;
  52. p = head->next;
  53. while (p)
  54. {
  55. if (!strcmp(p->name, q->name))
  56. {
  57. return p;
  58. }
  59. p = p->next;
  60. }
  61. return NULL;
  62. }
  63. //写入
  64. void L_list::user_write()
  65. {
  66. node* p;
  67. p = head->next;
  68. //打开
  69. ofstream out("./user.txt", std::ios::out);
  70. while (p)
  71. {
  72. out.write(p->name, sizeof(p->name));
  73. out.write(p->password, sizeof(p->password));
  74. p = p->next;
  75. }
  76. //关闭
  77. out.close();
  78. }
  79. //读取
  80. void L_list::user_read(L_list q)
  81. {
  82. node* p;
  83. //打开
  84. ifstream in("./user.txt", std::ios::in);
  85. while (1)
  86. {
  87. p = new node;
  88. memset(p->name, 0, sizeof(p->name));
  89. memset(p->password, 0, sizeof(p->password));
  90. p->next = NULL;
  91. in.read(p->name, sizeof(p->name));
  92. in.read(p->password, sizeof(p->password));
  93. int tt = strlen(p->name);
  94. if (tt == 0)
  95. {
  96. break;
  97. }
  98. q.insert(p);
  99. }
  100. //关闭
  101. in.close();
  102. }
  103. //主函数
  104. int main(void)
  105. {
  106. //定义局部变量
  107. L_list p;
  108. node* isnew, * user, * srt;
  109. char str;
  110. int set;
  111. //读取文本数据
  112. p.user_read(p);
  113. //开辟堆空间
  114. user = new node;
  115. //死循环
  116. while (1)
  117. {
  118. cout << "-----------菜单------------" << endl;
  119. cout << " a.登录" << endl;
  120. cout << " b.注册" << endl;
  121. cout << " d.显示" << endl;
  122. //用户输入
  123. cout << "请选择:";
  124. cin >> str;
  125. switch (str)
  126. {
  127. //登录
  128. case 'a':
  129. //清空数据
  130. memset(user->name, 0, sizeof(user->name));
  131. memset(user->password, 0, sizeof(user->password));
  132. //用户输入
  133. cout << "账号:";
  134. cin >> user->name;
  135. //查找是否存在
  136. srt = p.find(user);
  137. if (srt == NULL)
  138. {
  139. cout << "账号不存在!" << endl;
  140. break;
  141. }
  142. else
  143. {
  144. //用户输入
  145. cout << "密码:";
  146. cin >> user->password;
  147. //判断两次输入的密码是否正确
  148. if (!strcmp(user->password, srt->password))
  149. {
  150. cout << "登录成功!" << endl;
  151. }
  152. else
  153. {
  154. cout << "密码错误!" << endl;
  155. }
  156. break;
  157. }
  158. //注册
  159. case 'b':
  160. //清空数组
  161. memset(user->password, 0, sizeof(user->password));
  162. //开辟堆空间
  163. isnew = new node;
  164. //用户输入
  165. cout << "账号:";
  166. cin >> isnew->name;
  167. //查找是否存在
  168. srt = p.find(isnew);
  169. if (srt != NULL)
  170. {
  171. cout << "账号已存在!" << endl;
  172. break;
  173. }
  174. if (srt == NULL)
  175. {
  176. //用户输入
  177. cout << "密码:";
  178. cin >> isnew->password;
  179. cout << "再次确认密码:";
  180. cin >> user->password;
  181. //判断是否相等
  182. set = strcmp(isnew->password, user->password);
  183. if (set == 0)
  184. {
  185. //头插
  186. p.insert(isnew);
  187. //写入文本保存
  188. p.user_write();
  189. cout << "账号注册成功!" << endl;
  190. break;
  191. }
  192. else
  193. {
  194. cout << "两个密码不同,注册失败!" << endl;
  195. break;
  196. }
  197. }
  198. //显示
  199. case'd':
  200. p.show();
  201. break;
  202. }
  203. }
  204. return 0;
  205. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/182092
推荐阅读
相关标签
  

闽ICP备14008679号