簡易登錄界面

先上效果圖。


接下來你將學(xué)習(xí):將光標(biāo)定位于任何位置,以及輸入密碼時用星號代替。

首先我們需要對控制臺的窗口有所了解。


默認(rèn)情況下,屏幕可以輸出300行完整的信息,但往往一屏只顯示25行,想要看到更多信息就得往下拉進(jìn)度條,一行有80列,這樣就可以得到300*80的矩陣圖。

<!-------預(yù)備知識完畢--------->

然后我們可以通過調(diào)用函數(shù)gotoxy(int x,int y)來把光標(biāo)移動到想要的坐標(biāo)位置。

遺憾的是,gotoxy函數(shù)是包含在TC版本的conio.h里面的,(該版本下還有許多函數(shù)可以在控制臺中畫出圖形如正弦函數(shù)等)。

VS版本的conio.h里面沒有這個函數(shù)、、、、

沒有沒關(guān)系,我們可以自己寫一個。

首先include<windows.h>

void gotoxy(int x, int y)

{

COORD pos = {x,y}; ? ? ? ? ? ? ? ? //設(shè)置光標(biāo)位置

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); ? ?// 獲取標(biāo)準(zhǔn)輸出設(shè)備句柄

SetConsoleCursorPosition(hOut, pos); ? ? ?//兩個參數(shù)分別是指定哪個窗體,什么位置?

}

是不是很熟悉呢,沒錯啦,又回到我們親愛的HANDLE,這次新增了一個COORD類型,這是什么東東。

COORD是一個結(jié)構(gòu)體。

typedef struct _COORD{

SHORT ?X;

SHORT ?Y;

}COORD;

//X:橫坐標(biāo);

//Y:縱坐標(biāo)。

微軟最喜歡typedef了,基本上大寫的都是經(jīng)過typedef的,就像INVALID_HANDLE_VALUE事實上就是-1 ? ?@_@


這里補(bǔ)充說明一下,建立的坐標(biāo)系是以左上角為原點,以水平方向為x軸,以垂直方向為y軸,也就是平時的直角坐標(biāo)系的第四象限。


這樣函數(shù)就寫好了,調(diào)用調(diào)用調(diào)用。

system("title login");

system("color 0A");

gotoxy(3,8);

cout<<"華南理工大學(xué)教務(wù)管理系統(tǒng)\n";

gotoxy(10,10);

cout<<"用戶名 :";

gotoxy(10,12);

cout<<"密 ?碼 :";

打印完這些以后,把光標(biāo)回到用戶名右邊以便輸入。

gotoxy(20,10);

char arr[16];

cin>>arr;

用戶輸入以后,把光標(biāo)移動到密碼旁邊以便輸入。

輸入時以*代替明文。

gotoxy(20,12);

char brr[16];

for(int i=0;i<15;)//此循環(huán)把每一個輸入的字符依次存到brr數(shù)組中

{

? ?while( ? ?(brr[i++]=_getch()) ? != ? 13 ? ? )//_getch()函數(shù)是包含在conio.h里面,直接讀進(jìn)去一個字符,并且不顯示在屏幕上

? ? {cout<<"*";} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//回車的ansic值是13

brr[--i]='\0';//輸入結(jié)束時,brr中包含了密碼和一個回車,i指向回車的下一個位置,這步把回車置為'\0'

break;

}

到此程序基本算是完成了,當(dāng)然還有輸入時擔(dān)心數(shù)組越界的問題,這不在本次考慮范圍之內(nèi)。

最后說一下_getch()函數(shù),這個函數(shù)與getch()函數(shù)差不多,都是讀取輸入流的一個字符,返回int類型,區(qū)別在于前者不把它回顯在屏幕上,即時輸入即時生效,在做小游戲的時候可以用用。



<!---------update----------->

現(xiàn)在密碼的輸入都會先顯示實際輸入數(shù)據(jù),然后再用星號代替。接下來,我們來試試。

基本思路是先輸出原始數(shù)據(jù),等待用戶看到確認(rèn)之后,然后用'\b'退格鍵刪掉顯示的數(shù)據(jù)并且輸出星號。

代碼如下


分析一下,Sleep(X)函數(shù)是Windows.h里面的一個庫函數(shù),可以讓程序暫停X毫秒。

cout<<"\b"能實現(xiàn)光標(biāo)向前移動一位(但不改變該位置的數(shù)據(jù)),緊接著在該位置上輸出星號取代原始數(shù)據(jù)。

注意到變量i的自增的位置也不同了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • #include stdio.h #include windows.h #include stdlib.h #in...
    Tangbh閱讀 541評論 0 0
  • //出自51博客:www.Amanda0928.51.com 第一章 一、選擇題 1.B; (typedef ,t...
    Damongggggg閱讀 11,407評論 0 1
  • 1.面向?qū)ο蟮某绦蛟O(shè)計思想是什么? 答:把數(shù)據(jù)結(jié)構(gòu)和對數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的方法封裝形成一個個的對象。 2.什么是類?...
    少帥yangjie閱讀 5,121評論 0 14
  • /*類和對象 1.類和實例化定義類聲明類定義成員函數(shù)數(shù)據(jù)成員的賦值使用類的對象。 2.構(gòu)造函數(shù)數(shù)據(jù)封裝默認(rèn)構(gòu)造函數(shù)...
    aofeilin閱讀 1,186評論 1 2
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,243評論 0 38

友情鏈接更多精彩內(nèi)容