文档介绍:数据结构大型实验 2015/2016 (1) 实验题目用户登录系统学生姓名____ 学生学号主要工作树的结构、框架编写负责人学生班级任课教师提交日期 计算机科学与技术学院浙江工业大学计算机科学与技术学院大类基础课程大型实验报告用户登录系统一. 实验题目和要求: 【问题描述】在登录服务器系统时,都需要验证用户名和密码,如 远程登录服务器。用户输入用户名和密码后,服务器程序会首先验证用户信息的合法性。由于用户信息的验证频率很高,系统有必要有效地组织这些用户信息,从而快速查找和验证用户。另外,系统也会经常会添加新用户、删除老用户和更新用户密码等操作,因此,系统必须采用动态结构,在添加、删除或更新后,依然能保证验证过程的快速。请采用相应的数据结构模拟用户登录系统,其功能要求包括用户登录、用户密码更新、用户添加和用户删除等。【基本要求】 1. 要求自己编程实现二叉树结构及其相关功能,以存储用户信息,不允许使用标准模板类的二叉树结构和函数。同时要求根据二叉树的变化情况,进行相应的平衡操作,即 AVL 平衡树操作,四种平衡操作都必须考虑。测试时,各种情况都需要测试,并附上测试截图; 2. 要求采用类的设计思路,不允许出现类以外的函数定义,但允许友元函数。主函数中只能出现类的成员函数的调用,不允许出现对其它函数的调用。 :.h文件存储类的声明,.cpp 文件存储类的实现,主函数main 存储在另外一个单独的 cpp 文件中。如果采用类模板,。 ; ,也不要求采用可视化窗口; 6. 要求测试例子要比较详尽,各种极限情况也要考虑到,测试的输出信息要详细易懂,表明各个功能的执行正确; Visual C++ 及以上版本进行调试; 二. 设计思路: 浙江工业大学计算机科学与技术学院大类基础课程大型实验报告 1. 系统总体设计: 采用平衡二叉查找树( AVL ),以用户名( IP)作为比较的关键词进行插入。平衡二叉查找树是在二叉搜索树( BST )的基础上进行了优化,使得树基本达到平衡。定义内部类 userNod e来存储 AVL 树的节点信息。 2. 系统功能设计: 要创建一颗包含用户名和用户密码的二叉树,要能适应频繁的查找,因为每个用户名是唯一的,将用户名( string 类型)作为 AVL 树的比较参数,这样就可以实现快速的插入、删除和查找,重定义 userNode 类的比较函数。AVL 树是用模板类实现的,这样就可以直接比较两个用户类,方便了很多。图1 系统功能结构图 3. 类的设计: //节点的类 class userNode { private : string name; string password; short int height; 主界面画树登录注册退出删除用户修改密码浙江工业大学计算机科学与技术学院大类基础课程大型实验报告 public : userNode *left; userNode *right; userNode( const string &name, const string &password); userNode( const userNode & temp); void setName( const string &name); void setPassword( const string &password); string getName(); string getPassword(); int getHeight(); void changeHeight( const int height); // 改变树的高度 bool checkName( const string &name); }; //树的类 class tree { private : userNode *root; public : tree(); ~tree(); void insert_node(userNode *&t ,userNode &temp); void insert_node(userNode &temp); // 新建一个节点 void remove(userNode *&r,userNode *&temp); void remove(userNode *&temp); // 删除一个节点 void clear(userNode *t); void clear(); void print(); void print( int index,userNode *r); // 输出一棵树 void Print(); void Pr