版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)大型實驗用戶登錄系統(tǒng)數(shù)據(jù)結(jié)構(gòu)大型實驗 用戶登錄系統(tǒng)姓名:*學號:*班級:*浙江工業(yè)大學計算機學院完成時間:2014.12.31一、實驗內(nèi)容分析1.實驗目的【問題描述】在登錄服務(wù)器系統(tǒng)時,都需要驗證用戶名和密碼,如telnet遠程登錄服務(wù)器。用戶輸入用戶名和密碼后,服務(wù)器程序會首先驗證用戶信息的合法性。由于用戶信息的驗證頻率很高,系統(tǒng)有必要有效地組織這些用戶信息,從而快速查找和驗證用戶。另外,系統(tǒng)也會經(jīng)常會添加新用戶、刪除老用戶和更新用戶密碼等操作,因此,系統(tǒng)必須采用動態(tài)結(jié)構(gòu),在添加、刪除或更新后,依然能保證驗證過程的快速。請采用相應的數(shù)據(jù)結(jié)構(gòu)模擬用戶登錄系統(tǒng),其功能要求包括用戶登錄、用
2、戶密碼更新、用戶添加和用戶刪除等。【基本要求】1. 要求自己編程實現(xiàn)二叉樹結(jié)構(gòu)及其相關(guān)功能,以存儲用戶信息,不允許使用標準模板類的二叉樹結(jié)構(gòu)和函數(shù)。同時要求根據(jù)二叉樹的變化情況,進行相應的平衡操作,即AVL平衡樹操作,四種平衡操作都必須考慮。測試時,各種情況都需要測試,并附上測試截圖; 2. 要求采用類的設(shè)計思路,不允許出現(xiàn)類以外的函數(shù)定義,但允許友元函數(shù)。主函數(shù)中只能出現(xiàn)類的成員函數(shù)的調(diào)用,不允許出現(xiàn)對其它函數(shù)的調(diào)用。3. 要求采用多文件方式:.h文件存儲類的聲明,.cpp文件存儲類的實現(xiàn),主函數(shù)main存儲在另外一個單獨的cpp文件中。如果采用類模板,則類的聲明和實現(xiàn)都放在.h文件中。4.
3、 要求源程序中有相應注釋;5. 不強制要求采用類模板,也不要求采用可視化窗口;6. 要求測試例子要比較詳盡,各種極限情況也要考慮到,測試的輸出信息要詳細易懂,表明各個功能的執(zhí)行正確;7. 要求采用Visual C+ 6.0及以上版本進行調(diào)試;2.實驗中的基本數(shù)據(jù)結(jié)構(gòu)使用了平衡樹(AVL)來存儲用戶信息,通過在插入和刪除節(jié)點時左平衡和右平衡操作能使樹始終保持平衡。以下為實驗中涉及到的類。類名稱成員變量及成員函數(shù)UserNode(用戶信息類)private:string name; /用戶名string password; /密碼int h; /以該節(jié)點為根的子樹高度 int bf; /平衡因子:
4、左樹高度減去右樹高度UserNode *left; /指向左子樹的指針UserNode *right; /指向右子樹的指針UserNode *parent; /指向父親節(jié)點的指針public:friend class AVL;UserNode();UserNode(string n="",string p=""); int Lh(); /左子樹高度 int Rh(); /右子樹高度 void geth(); /更新以當前節(jié)點為根結(jié)點的子樹高度 void getbf(); /更新當前節(jié)點的平衡因子 string getpswd(); /獲取密碼void s
5、etpswd(string); /修改密碼 friend void save(UserNode*,ostream&); /輸出數(shù)據(jù)AVL(功能類)private:UserNode *root;public:AVL():root(NULL) /構(gòu)造函數(shù)bool empty() const; /判空 UserNode* find(string item); /查找節(jié)點 void LRotate(UserNode*,UserNode*); /左旋 void RRotate(UserNode*,UserNode*); /右旋 void LRRotate(UserNode*,UserNode*,
6、UserNode*);/左右旋 void RLRotate(UserNode*,UserNode*,UserNode*);/右左旋 void update(UserNode*); /調(diào)整平衡void insert(string,string); /插入節(jié)點 bool Delete(UserNode*); /刪除節(jié)點 void printNode(UserNode* ,int ); /打印一個節(jié)點 void print(); /打印樹 friend istream& operator >> (istream&,AVL&); /輸入文件 friend ostre
7、am& operator << (ostream&,AVL&); /輸出文件Menu(界面菜單類)private:AVL user;public:Menu(); /構(gòu)造函數(shù)void mainmenu(); /主菜單 void show(); /查看所有用戶 void load(); /登陸 void regist(); /注冊 void Change(UserNode*); /修改密碼 void Del(UserNode*); /刪除用戶 void close(); /將用戶保存到txt中3.程序流程圖主菜單登陸注冊更改密碼刪除用戶查看所有用戶退出登陸返回主
8、菜單重新注冊查看所有用戶退出退出查看所有用戶返回主菜單退出4.類及類間關(guān)系UserNodeAVLmenu5.主要函數(shù)間調(diào)用關(guān)系Menu menumenu.mainmenu()Load()registChange()Del()show()close()Main()AVL:find()Menu()Close()Yes其他AVL:Delete(UserNode*)AVL:insert(string,string)UserNode:setpswd(string)NoInsert(string na, string pswd)UserNode *item=new UserNode(na,pswd);up
9、date(item->parent)LRotate(UserNode*A ,UserNode* B)RRotate(UserNode*A,UserNode* B)LRRotate(UserNode*A ,UserNode* B)RLRotate(UserNode*A ,UserNode* B)插入函數(shù),參數(shù)為用戶名、密碼定義用戶節(jié)點更新插入節(jié)點路徑上的節(jié)點四種旋轉(zhuǎn)方式判斷:Delete(UserNode* )(刪除函數(shù))刪除節(jié)點后更新樹方式相同,但是刪除方式為將要刪除的節(jié)點與其右子樹中最小的節(jié)點交換,所以要分右子樹是否為空兩種情況討論。二、實驗驗證分析1.輸入的形式和輸入值的范圍用戶名類
10、型:string 密碼類型:string2.輸出的形式輸出的形式都是字符串,并通過換行符(n),水平制表符(t)等來規(guī)范輸出,實現(xiàn)美觀性.下面截圖演示.3.程序所能達到的功能a.用戶登錄; b.用戶密碼更新; c用戶添加(注冊) d.用戶刪除; e.查看所有用戶4.測試數(shù)據(jù)(包括正確的輸入及其輸出結(jié)果和含有錯誤的輸入及其輸出結(jié)果)在主菜單輸入1則進入登陸界面當輸入數(shù)據(jù)非法時則提醒重新輸入其他界面類似三、調(diào)試分析1.討論分析調(diào)試過程中的主要技術(shù)問題以及具體的解決方法(至少個)a)在用戶修改密碼時由于密碼時私有數(shù)據(jù),無法修改,登陸時也無法判斷密碼是否正確;解決方法:定義兩個函數(shù)getpswd()和
11、setpswd(string)分別用于獲取密碼和修改密碼;b)關(guān)于文件的輸入輸出;解決方法:參考了上學期的C+大型實驗c)有關(guān)調(diào)整樹平衡時左右旋和右左旋;解決方法:結(jié)合網(wǎng)上和書中解釋,先手畫過程在寫代碼,再根據(jù)代碼畫過程。2.技術(shù)難點分析(至少個)a)關(guān)于平衡因子的計算,原本UserNode類中int型的成員變量只有平衡因子,如何計算無從入手;后來又添加了變量h(高度),在每次某個節(jié)點有調(diào)整后就更新它的高度,同時更新平衡因子;b)簡單左旋(右旋),假設(shè)A表示離插入項最近的具有平衡因子-2(+2)的祖先節(jié)點,B表示A的右(左)孩子,需要重新設(shè)置3條鏈:(1)另A的父親指向B;(2)另A的右鏈等于
12、B的左鏈(另A的左鏈等于B的右鏈);(3)另B的左(右)鏈指向A;左旋具體代碼實現(xiàn)如下:其中g(shù)eth()和getbf()函數(shù)分別為更新高度和平衡因子;左-右旋(右-左旋),假設(shè)A表示離插入項最近的具有平衡因子+2(-2)的祖先節(jié)點,B表示A的左(右)孩子,C表示B的右孩子,需要重新設(shè)置6條鏈:(1)另B(A)的右鏈等于C的左鏈; (2)另A(B)的左鏈等于C的右鏈;(3)另A的父親指向C;(4)另C的右(左)鏈指向A;(5)另B的父親指向C;(6)另C的左(右)鏈指向B;左-右旋具體代碼實現(xiàn)如下:c)調(diào)整平衡,從當前節(jié)點向上調(diào)整,當找到不平衡節(jié)點時,根據(jù)平衡因子和不平衡狀態(tài)判斷使用哪種旋轉(zhuǎn)方法
13、,具體代碼實現(xiàn)及判斷方法如下:d)刪除節(jié)點,分該節(jié)點是否有右子樹兩種情況討論;(1)沒有右子樹:先判斷刪除節(jié)點是否為根結(jié)點,若是,則直接另根結(jié)點指向刪除節(jié)點的左子樹;否則另刪除節(jié)點的父親節(jié)點的左子樹或右子樹(根據(jù)刪除節(jié)點為其的左孩子還是右孩子)等于刪除節(jié)點的左子樹,然后從刪除節(jié)點的父親節(jié)點開始調(diào)整平衡;具體代碼實現(xiàn)如下:其中pa為刪除節(jié)點的父親節(jié)點;(2)有右子樹:將當前節(jié)點與其右子樹中最左邊的節(jié)點(設(shè)為p)交換,然后只需改變一條鏈,即另p的父親節(jié)點左子樹或右子樹(根據(jù)p為其的左孩子還是右孩子)等于p的右子樹(因為p為最左邊的節(jié)點,所以沒有左子樹),然后從p的父親節(jié)點開始調(diào)整平衡;具體代碼實現(xiàn)
14、如下:3.印象最深刻的個調(diào)試錯誤,及修正方法a)忘記考慮在選擇操作時有錯誤輸入的情況,導致輸入不正確時程序退出;修正方法:將輸入數(shù)據(jù)從int改為string型,在進行是否合法判斷,若不合法,提醒重新輸入;b) 總是忘記父親節(jié)點的存在,在刪除節(jié)點時,忘記將該節(jié)點的右子樹的父親節(jié)點指向該節(jié)點的父親節(jié)點,導致刪除用戶時第一次成功,第二次就程序就直接崩潰;c)注冊新賬戶時,發(fā)現(xiàn)每次注冊成功后查看所有用戶都沒有新注冊的賬戶,以為是插入函數(shù)寫錯了,調(diào)了半天才發(fā)現(xiàn)原來是注冊時沒有調(diào)用插入函數(shù);d)只在程序退出時保存文件,導致當用戶數(shù)據(jù)發(fā)生變化后中途查看txt時,沒有及時保存;修正方法:在每次用戶數(shù)據(jù)發(fā)生變化
15、時都調(diào)用輸出文件的函數(shù);e)txt中有用戶數(shù)據(jù),查看用戶時卻為空;修正方法:在menu的構(gòu)造函數(shù)中讀入用戶數(shù)據(jù)。四、測試結(jié)果1.展示程序的運行結(jié)果,包括輸入和輸出,分析數(shù)據(jù)的正確性;主界面輸入1,登陸界面登錄失敗分兩種情況1.用戶名不存在2.密碼錯誤登陸成功輸入1,修改密碼修改成功輸入2,刪除用戶刪除前刪除后以上為輸入3,查看所有用戶實現(xiàn)主菜單輸入2,注冊注冊失敗分兩種情況 1.用戶名已存在2.兩次密碼輸入不同注冊成功2.應用邊界數(shù)據(jù)、或極端數(shù)據(jù)測試系統(tǒng),分析結(jié)果的正確性。1)左旋在一棵空樹中按次序插入d,h,k;ddhdhkdhkd不平衡,旋轉(zhuǎn)程序內(nèi)先插入d,h再插入k旋轉(zhuǎn)2)右左旋繼續(xù)插入
16、f,e;dhkfdhkfeehkfdd不平衡,旋轉(zhuǎn)程序內(nèi)先插入f再插入e旋轉(zhuǎn)3)左右旋繼續(xù)插入g;ehkfdgefhkdgh不平衡,旋轉(zhuǎn)程序內(nèi)插入g旋轉(zhuǎn)4)右旋繼續(xù)插入aefhkdgadfhkagee不平衡,旋轉(zhuǎn)程序內(nèi)插入a旋轉(zhuǎn)以上結(jié)果均正確五、附錄UserNode.h:#ifndef USERNODE#define USERNODE#include<iostream>#include<string>using namespace std;class UserNodeprivate:string name; /用戶名 string password; /密碼 int h
17、; /以該節(jié)點為根的子樹高度 int bf; /平衡因子:左樹高度減去右樹高度UserNode *left; /指向左子樹的指針UserNode *right; /指向右子樹的指針UserNode *parent; /指向父親節(jié)點的指針public:friend class AVL;UserNode();UserNode(string n="",string p=""); int Lh(); /左子樹高度 int Rh(); /右子樹高度 void geth(); /更新以當前節(jié)點為根結(jié)點的子樹高度 void getbf(); /更新當前節(jié)點的平衡因子
18、string getpswd(); /獲取密碼void setpswd(string); /修改密碼 friend void save(UserNode*,ostream&); /輸出數(shù)據(jù) ;#endifUserNode.cpp:#include<iostream>#include"UserNode.h"using namespace std;UserNode:UserNode(string n,string p) /構(gòu)造函數(shù) name=n;password=p;h=1;bf=0;left=right=parent=NULL;int UserNode:L
19、h() /左子樹高度 return left=NULL?0:left->h;int UserNode:Rh() /右子樹高度return right=NULL?0:right->h;void UserNode:geth() /更新以當前節(jié)點為根結(jié)點的子樹高度 h=max(Lh(),Rh()+1;void UserNode:getbf() /更新當前節(jié)點的平衡因子 bf=Lh()-Rh();string UserNode:getpswd() /獲取密碼return password;void UserNode:setpswd(string pswd) /修改密碼 password=p
20、swd;void save(UserNode* item,ostream &output) /輸出數(shù)據(jù) if (item=NULL) return;output<<item->name<<" "<<item->password<<"n"save(item->left,output);save(item->right,output);function.h:#ifndef FUCTION#define FUCTION#include<iostream>#include
21、"UserNode.h"using namespace std;class AVLprivate:UserNode *root;public:AVL():root(NULL) /構(gòu)造函數(shù)bool empty() const; /判空 UserNode* find(string item); /查找節(jié)點 void LRotate(UserNode*,UserNode*); /左旋 void RRotate(UserNode*,UserNode*); /右旋 void LRRotate(UserNode*,UserNode*,UserNode*); /左右旋 void RLRo
22、tate(UserNode*,UserNode*,UserNode*); /右左旋 void update(UserNode*); /調(diào)整平衡void insert(string,string); /插入節(jié)點 bool Delete(UserNode*); /刪除節(jié)點 void printNode(UserNode* ,int ); /打印一個節(jié)點 void print(); /打印樹 friend istream& operator >> (istream&,AVL&); /輸入文件 friend ostream& operator <<
23、; (ostream&,AVL&); /輸出文件 ;#endiffunction.cpp:#include<iostream>#include<iomanip>#include"function.h"using namespace std;bool AVL:empty() const /判空 if(root=NULL) return 1;return 0;UserNode* AVL:find(string item) /查找節(jié)點UserNode* cur=root;while(cur!=NULL)if(item<cur->
24、name) cur=cur->left;else if(item>cur->name) cur=cur->right;else return cur;return NULL;void AVL:LRotate(UserNode* A,UserNode* B) /左旋 B->parent=A->parent;if(A->parent!=NULL)if(A->parent->left=A) A->parent->left=B;else A->parent->right=B;A->parent=B;A->righ
25、t=B->left;if(B->left!=NULL) B->left->parent=A;B->left=A;A->geth();B->geth();A->getbf();B->getbf();void AVL:RRotate(UserNode* A,UserNode* B) /右旋 B->parent=A->parent;if(A->parent!=NULL)if(A->parent->left=A) A->parent->left=B;else A->parent->right=B
26、;A->parent=B;A->left=B->right;if(B->right!=NULL) B->right->parent=A;B->right=A;A->geth();B->geth();A->getbf();B->getbf();void AVL:LRRotate(UserNode* A,UserNode* B,UserNode* C) /左右旋 C->parent=A->parent;if(A->parent!=NULL)if(A->parent->left=A) A->pare
27、nt->left=C;else A->parent->right=C;A->left=C->right;if(C->right!=NULL) C->right->parent=A;B->right=C->left;if(C->left!=NULL) C->left->parent=B;C->right=A;A->parent=C;C->left=B;B->parent=C;A->geth();B->geth();C->geth();A->getbf();B->ge
28、tbf();C->getbf();void AVL:RLRotate(UserNode* A,UserNode* B,UserNode* C) /右左旋 C->parent=A->parent;if(A->parent!=NULL)if(A->parent->left=A) A->parent->left=C;else A->parent->right=C;A->right=C->left;if(C->left!=NULL) C->left->parent=A;B->left=C->right
29、;if(C->right!=NULL) C->right->parent=B;C->left=A;A->parent=C;C->right=B;B->parent=C;A->geth();B->geth();C->geth();A->getbf();B->getbf();C->getbf();void AVL:update(UserNode* item) /調(diào)整平衡for(UserNode* cur=item;cur!=NULL;cur=cur->parent)cur->geth();cur->ge
30、tbf();if(cur->bf=2) /找到不平衡點 if(cur->left->Lh()>=cur->left->Rh() RRotate(cur,cur->left); /在左孩子的左子樹中,右旋 else LRRotate(cur,cur->left,cur->left->right); /在左孩子的右子樹中,左右旋 else if(cur->bf=-2) /找到不平衡點 if(cur->right->Lh()<=cur->right->Rh() LRotate(cur,cur->ri
31、ght); /在右孩子的右子樹中,左旋 else RLRotate(cur,cur->right,cur->right->left); /在右孩子的左子樹中,右左旋 if(cur->parent=NULL) root=cur; /更新根結(jié)點 void AVL:insert(string na,string pswd) /插入節(jié)點 UserNode *item=new UserNode(na,pswd);UserNode* cur=root;if(root=NULL) /當前樹為空 root=item;return;while(cur!=NULL)if(item->
32、name<cur->name) /比當前值小,進入左子樹 if(cur->left=NULL) /找到插入位置 cur->left=item;item->parent=cur;break; else cur=cur->left;else if(item->name>cur->name) /比當前值大,進入右子樹 if(cur->right=NULL) /找到插入位置 cur->right=item;item->parent=cur;break; else cur=cur->right;update(item->
33、parent); /更新路徑上的節(jié)點 bool AVL:Delete(UserNode* item) /刪除節(jié)點 ,刪除成功返回1 UserNode* pa;if(item=NULL) return 0;pa=item->parent;if(item->right=NULL) /如果右子樹為空 if(pa=NULL) /item為根結(jié)點 root=item->left;if(item->left!=NULL) item->left->parent=NULL;delete item;return 1;if(pa->left=item) pa->le
34、ft=item->left;else pa->right=item->left;if(item->left!=NULL) item->left->parent=pa;delete item;update(pa);elseUserNode* p;p=item->right;while(p->left!=NULL) p=p->left; /找到item節(jié)點右子樹中最小的節(jié)點 pstring tmp;tmp=item->name;item->name=p->name;p->name=tmp; /交換用戶名 tmp=item
35、->password;item->password=p->password;p->password=tmp; /交換密碼 pa=p->parent;if(pa->left=p) pa->left=p->right; /刪除p else pa->right=p->right;if(p->right!=NULL) p->right->parent=pa;delete p;update(pa);return 1;void AVL:printNode(UserNode* item,int deep) /打印一個節(jié)點 if(i
36、tem!=NULL)printNode(item->right,deep+1);cout<<setw(4*deep)<<" "cout<<item->name<<"n"printNode(item->left,deep+1);void AVL:print() /打印樹 printNode(root,0);istream& operator >>(istream &input,AVL &t)/輸入文件,讀取用戶同時插入樹 string name,passw
37、ord;while(input>>name>>password) t.insert(name,password);return input;ostream& operator <<(ostream &output,AVL &t) /輸出文件,將用戶保存到txt中 save(t.root,output);return output;menu.h:#ifndef MENU#define MENU#include"function.h"class Menuprivate:AVL user;public:Menu(); /
38、構(gòu)造函數(shù)void mainmenu(); /主菜單 void show(); /查看所有用戶 void load(); /登陸 void regist(); /注冊 void Change(UserNode*); /修改密碼 void Del(UserNode*); /刪除用戶 void close(); /將用戶保存到txt中;#endifmenu.cpp:#include<iostream>#include<fstream>#include"function.h"#include"menu.h"using namespace
39、std;Menu:Menu()ifstream fin("data.txt");fin>>user;fin.close();void Menu:mainmenu() /主菜單system("cls"); cout<<"nnnnnnnttt 歡迎進入用戶登錄系統(tǒng)n"cout<<"tt=n"cout<<"tt請選擇操作:nnn"cout<<"tttt1.登陸n"cout<<"tttt2.注冊n&qu
40、ot;cout<<"tttt3.查看所有用戶n"cout<<"tttt4.退出nnn"cout<<"tt=n"cout<<"tt輸入14: "string ch;cin>>ch;while(ch.length()!=1|ch>"4"|ch<"1")cout<<"tt輸入錯誤!請重新輸入14: "cin>>ch;int d=ch0-'0'switc
41、h(d)case 1:load();break;case 2:regist();break;case 3:show();break; case 4:close();break;void Menu:show() /查看所有用戶system("cls"); user.print();cout<<"nnntt=n"cout<<"tt請選擇操作:n"cout<<"tttt1.返回主菜單n"cout<<"tttt2.退出n"cout<<"
42、;tt=n"cout<<"tt輸入12: "string ch;cin>>ch;while(ch.length()!=1|ch>"2"|ch<"1")cout<<"tt輸入錯誤!請重新輸入12: "cin>>ch;int d=ch0-'0'switch(d)case 1:mainmenu();break;case 2:close();break;void Menu:load() /登陸 string name,password;s
43、ystem("cls");cout<<"nnnnnnnttt 歡迎進入用戶登錄界面n"cout<<"tt=nnn"cout<<"ttt請輸入用戶名: "cin>>name;cout<<"nttt請輸入密碼: "cin>>password;UserNode* p;p=user.find(name); system("cls");if(p!=NULL&&password=p->getps
44、wd()cout<<"nnnnnnntttt登錄成功!n"cout<<"tt=n"cout<<"tt請選擇操作:nnn"cout<<"tttt1.更改密碼n"cout<<"tttt2.刪除用戶n"cout<<"tttt3.查看所有用戶n"cout<<"tttt4.返回主菜單n"cout<<"tttt5.退出nnn"cout<<&q
45、uot;tt=n"cout<<"tt輸入15: "string ch;cin>>ch;while(ch.length()!=1|ch>"5"|ch<"1")cout<<"tt輸入錯誤!請重新輸入15: "cin>>ch;int d=ch0-'0'switch(d)case 1:Change(p);break;case 2:Del(p);break;case 3:show();break;case 4:mainmenu();brea
46、k; case 5:close();break;elseif(p=NULL) cout<<"nnnnnnntttt該用戶名不存在!n"else if(password!=p->getpswd() cout<<"nnnnnnntttt密碼錯誤!n"cout<<"tt=n"cout<<"tt請選擇操作:nnn"cout<<"tttt1.重新登陸n"cout<<"tttt2.注冊n"cout<<
47、;"tttt3.查看所有用戶n"cout<<"tttt4.退出nnn"cout<<"tt=n"cout<<"tt輸入14: "string ch;cin>>ch;while(ch.length()!=1|ch>"4"|ch<"1")cout<<"tt輸入錯誤!請重新輸入14: "cin>>ch;int d=ch0-'0'switch(d)case 1:loa
48、d();break;case 2:regist();break;case 3:show();break;case 4:break;void Menu:regist() /注冊 string name,password,password2;int f=0; system("cls");cout<<"nnnnnnnttt 歡迎進入用戶注冊界面n"cout<<"tt=nnn"cout<<"ttt請輸入想要注冊的用戶名: "cin>>name;cout<<&quo
49、t;nttt請輸入密碼: "cin>>password;cout<<"nttt請確認密碼: "cin>>password2;UserNode* p;p=user.find(name);system("cls");if(p=NULL&&password=password2)user.insert(name,password);close();cout<<"nnnnnnntttt 注冊成功!n"f=1;else if(p!=NULL) cout<<&qu
50、ot;nnnnnnnttt 該用戶名已存在,注冊失??!n"f=2;else if(password!=password2) cout<<"nnnnnnnttt 兩次密碼不同,注冊失敗!n"f=3;cout<<"tt=n"cout<<"tt請選擇操作:nnn"cout<<"tttt1.登陸n"cout<<"tttt2.重新注冊n"cout<<"tttt3.查看所有用戶n"cout<<&
51、quot;tttt4.退出nnn"cout<<"tt=n"cout<<"tt輸入14: "string ch;cin>>ch;while(ch.length()!=1|ch>"4"|ch<"1")cout<<"tt輸入錯誤!請重新輸入14: "cin>>ch;int d=ch0-'0'switch(d)case 1:load();break;case 2:regist();break;case 3:show();break;case 4:close();break;default:regist();break;void Menu:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開年會議領(lǐng)導發(fā)言稿范文(5篇)
- 幼小銜接培訓心得體會
- 感動中國十大人物先進事跡15篇
- 開業(yè)的致辭(集錦15篇)
- 感人婚禮致辭
- 第六單元課外古詩詞誦讀《朝天子.詠喇叭》 統(tǒng)編版語文九年級下冊
- 智研咨詢發(fā)布:2024年中國智能魚缸行業(yè)市場發(fā)展環(huán)境及前景研究報告
- 2024年中國無人機交通管理(UTM)行業(yè)市場規(guī)模及發(fā)展前景研究報告(智研咨詢)
- 二零二五版帶車位產(chǎn)權(quán)房屋買賣合同范本2篇
- 二零二五年度大型活動物資運輸合同書定制版3篇
- 2025年銷售部年度工作計劃
- 2024年蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學院高職單招職業(yè)適應性測試歷年參考題庫含答案解析
- 人教版初中語文2022-2024年三年中考真題匯編-學生版-專題08 古詩詞名篇名句默寫
- 2024-2025學年人教版(2024)七年級(上)數(shù)學寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- ESG表現(xiàn)對企業(yè)財務(wù)績效的影響研究
- 醫(yī)療行業(yè)軟件系統(tǒng)應急預案
- 車間空調(diào)崗位送風方案
- 使用錯誤評估報告(可用性工程)模版
- 《精密板料矯平機 第2部分:技術(shù)規(guī)范》
- 2023-2024年同等學力經(jīng)濟學綜合真題及參考答案
評論
0/150
提交評論