VC++编写一个对话框应用程序,启动后d出一个用户身份确认对话框,当用户输入正确的密码后才能进入程序

VC++编写一个对话框应用程序,启动后d出一个用户身份确认对话框,当用户输入正确的密码后才能进入程序,第1张

首先新建一个对话框资源LoginDialog,摆好“用户名”“密码”2个EDIT(用类向导分别关联CString变量m_szLoginName,m_szPassword),“确定”“取消”2个BUTTON,再新建一个继承CDialogEx的MFC类CLoginDialog,在主程序cpp中包含LoginDialog.h,在需要d出登录对话框的地方,比如主程序初始化函数中写

CLoginDialog ld

if(ID_OK!=ld.Domodal()) return

用类向导添加“确定”按钮的单击事件,然后在LoginDialog.cpp中

LoginDialog.hLoginDialog.hvoid CLoginDialog::OnOK()

{

UpdateData(0)

if(m_szLoginName=="用户名"嫌帆&&m_szPassword=="密码")

{

MessageBox("验证通简并过","登陆提示",MB_OK)

}

else

{

MessageBox("验证未芹咐雹通过","登陆提示",MB_OK)

//AfxGetMainWnd()->PostMessage (WM_QUIT)

//EndDialog(IDCANCEL)

}

CDialog::OnOK()

}

login

1.作用

login的作用是登录系统,它的使用权限是所有用户。

2.格式

login [name][-p ][-h 主机名称]

3.主要参数

-p:通知login保持现在的环境参数。

-h:用来向远程登录的之间传输用户名。

如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:

logout

logout命令和exit命令一样,都是注销用户.

reboot

1.作用

reboot命令的作用是重新启动计算机,它的使用权限是系统管理者。

2.格式

reboot [-n] [-w] [-d] [-f] [-i]

3.主要参数

-n: 在重开机前不做将记忆体资料写回硬盘的动作。

-w: 并不会真的重开机,只是把记录写到/var/log/wtmp文件里。

-d: 不把记录写到/var/log/wtmp文件里(-n这个参数包含了-d)。

-i: 在重开机之前先把所有与网络相关的装置停止。

shutdown命令

1 作用

可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还告迅昌允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据同步的工作。

2格式

shutdown [选项] [时间] [警告信息]:

- k 并不真正关机,而只是发出警告信息给所有用户。

- r 关机后立即重新启动。

- h 关机后不重新启动。

- f 快速昌神关机,重启动时跳过fsck。

- n 快速关机,不经过init程序。

- c 取消一个已经运行的shutdown。

reboot

功能说明:重新开机。

语法:dreboot [-dfinw]

补充说明:执行reboot指令可让系统停止运作,并重新开机。

参数:

-d 重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有"-n"参数的效果。

-f 强制重新开机,不调用shutdown指令的功能。

-i 在重开机之前,先关闭所有网络界面。

-n 重开机之前不检查是否有未结束的程序。

-w 仅做测试,并不真的将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文袜扒件

halt

功能说明:关闭系统。

语法:halt [-dfinpw]

补充说明:halt会先检测系统的runlevel。若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。

参数:

-d 不要在wtmp中记录。

-f 不论目前的runlevel为何,不调用shutdown即强制关闭系统。

-i 在halt之前,关闭全部的网络界面。

-n halt前,不用先执行sync。

-p halt之后,执行poweroff。

-w 仅在wtmp中记录,而不实际结束系统。

poweroff

关机,在多用户方式下(Runlevel 3)不建议使用

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int login(char p[16])//登录,密码判断,

{

int w

char login[16]

printf("请输入密码\n")

gets(login)//输入字符串作为密码

w=strcmp(p,login)//判断两字符串是否相同,若相同则返回0

return w//返回密码判断的值

}

void display()//菜单

{

printf("*——————————————————————————————————————*\n")

printf("|请选择您所需的 *** 作: |\n")

printf("|——————————————————————————————————————|\n")

printf("|1.输入成绩 2.顺序输出成绩 3.查找最高分 4.查找最低分|\n")

printf("|5.查找特定成绩 6.降序排序成绩 7.求总成绩和平均成绩 |\n")

printf("|8.查找低于特定分数的成绩 9.分段成绩人指虚圆数及位置 10.增加成绩 |\n")

printf("|11.更改成绩12.删除单个成绩 13.删除全部成绩 14.修改密码 |\n")

printf("|0.退出 |\n")

printf("*——————————————————————————————————————*\n")

}

int input(double score[200])//输入数据

{

int p,q,i=1

printf("请输入学生人数\n")

scanf("%d"唯塌,&p)

for(q=0q<pq++)

{

printf("请输入第%d个人成绩\n",i)

scanf("%lf",&score[q])

i++

}

printf("输入完毕\n")

return p//返回总人数

}

void output(double score[200],int x)//顺序输出学生成绩

{

int i=0

if(x!=0)

while(i!=x)

{

printf("第%d个人的成绩为%lf\n",i+1,score[i])

i++

}

else

printf("数据为空,请先输入数据\n")//容错,当数组中没有数据时提示用户先输入数据

}

void max(double score[200],int x)//查询最大成绩

{

int m,n

double max

if(x!=0)

{

max=score[0]n=1

for(m=1m<xm++)//循环判断最大成绩与其所在位置,所在位置为下标加1

{

if(max<score[m])

{

max=score[m]

n=m+1

}

}

printf("最高成绩为%lf,是第%d个\n",max,n)

}

else printf("数据为空誉正,请先输入数据\n")//容错

}

void min(double score[200],int x)//查询最低成绩

{

int m,n

double min

if(x!=0)

{

min=score[0]n=1

for(m=1m<xm++)//循环判断最低成绩与其所在位置,所在位置为下标加1

{

if(min>score[m])

{

min=score[m]

n=m+1

}

}

printf("最低成绩为%lf,是第%d个\n",min,n)

}

else printf("数据为空,请先输入数据\n")//容错

}

void spe(double score[200],double m,int n)//查询特定成绩

{

int i,x=0

int location[200]

for(i=0i<ni++)//循环

if(score[i]==m)//判断是否为所查询的成绩

{

location[x]=i+1

x++

}

if(x!=0)

{

printf("您所查询的成绩为%lf,在以下位置出现\n",m)//输出所查询的成绩

for(i=0i<xi++)

printf("%d ",location[i])//输出所查询成绩的所在位置,此位置为下标加1

printf("\n")

}

else

printf("此成绩不存在\n")//容错,当所查询的成绩不存在是输出

}

void down(double score[200],int x)//降序排列

{

int m,n

double temp

if(x!=0)

{

for(m=0m<xm++)//选择排序,控制第一个数

for(n=m+1n<xn++)//选择排序,控制第二个数

if(score[m]<score[n])//判断,当后面的数比前面的小时两数交换位置

{

temp=score[m]

score[m]=score[n]

score[n]=temp

}

printf("降序排列为\n")

n=1

for(m=0m<xm++)//输出控制,每行只输出4个数

{

printf("%lf ",score[m])

n++

if(n==5)//输出控制,用于判断回车符的输出

{

n=1

printf("\n")

}

}

}

else printf("数据为空,请先输入数据\n")//容错

}

double ave(double score[200],int x)//输出总分与平均分

{

double sum=0,ave0

int i

if(x!=0)

{

for(i=0i<xi++)//累加求和,求出总分

sum=sum+score[i]

ave0=sum/x//求出平均分

printf("总成绩为%lf\n",sum)

return ave0

}

else

{

printf("数据为空,请先输入数据\n")//容错

return 0

}

}

void fil(double score[200],double w,int x)//输出小于特定分数的成绩所在位置,位置为下标加1

{

int i,m

int location[200]

for(i=0i<xi++)

if(score[i]<w)

{

location[m]=i+1

m++

}

if(m!=0)

{

printf("所查询的成绩在以下位置出现\n")

for(i=0i<mi++)

printf("%d ",location[i])

}

else

printf("此成绩不存在\n")

}

void sec(double score[200],int x)//成绩分段并输出各段人数与位置,位置为下标加1

{

int s,i=0,m=0,n=0,s80[200],s60[200],s0[200],f=1

if(x!=0)

{

for(s=0s<xs++)//循环判断各成绩所在段

{

if(score[s]>=80)

{

s80[i]=s+1

i++

}

else

if(score[s]>=60)

{

s60[m]=s+1

m++

}

if(score[s]<60)

{

s0[n]=s+1

n++

}

}

printf("80分至100分的人数为%d,在以下位置出现\n",i)//输出各段的人数

for(s=0s<is++)

{

printf("%d ",s80[s])

if(f==10)

{

printf("\n")

f=1

}

}

printf("\n60分至80分的人数为%d,在以下位置出现\n",m)

f=1

for(s=0s<ms++)

{

printf("%d ",s60[s])

if(f==10)

{

printf("\n")

f=1

}

}

printf("\n60分以下的人数为%d,在以下位置出现\n",n)

f=1

for(s=0s<ns++)

{

printf("%d ",s0[s])

if(f==10)

{

printf("\n")

f=1

}

}

}

else

printf("数据为空,请先输入数据\n")//容错

}

int add(double score[200],int x,double y,int z)

{

int i

for(i=zi>=xi--)

score[i]=score[i-1]

score[x-1]=y

printf("增加成功\n")

return 1

}

void rejigger(double score[200],int x,double y)

{

score[x-1]=y

printf("更改成功\n")

}

void del(double score[200],int x,int y)

{

int i

for(i=xi<yi++)

score[i-1]=score[i]

score[y]=0

}

int format(double score[200])

{

int i

char validate

printf("是否确认删除所有数据Y/N\n")

scanf("%c",&validate)

scanf("%c",&validate)

if(validate=='Y'||validate=='y')

{

for(i=0i<200i++)

score[i]=0

printf("删除成功\n")

return 1

}

else

{

printf("取消删除\n")

return 0

}

}

void main()

{

char password[16]="123456"//定义默认密码

double score[200],m,n,w,z

int choose,x=3,i,f,b=0,change=1,y

char *p,validate

double *a

int flag = 0

p = password

a=score

f=3i=0

while(f)//密码错误次数控制,当错误时重新输入,若连续错误3次则直接退出程序

{

i=login(password)

if(i)

{

x--

if(x>0)

printf("密码错误,请重新输入,您还有%d次机会\n",x)

else

{

printf("密码错误,程序自动退出\n")

exit(1)

}

f--//次数控制

continue

}

else//当密码输入正确时进入下一步

{

flag = 1

break

}

}

while(flag)//主循环,控制菜单的循环输出与程序的循环使用

{

display()//输出菜单

scanf("%d",&choose)//功能选择

switch(choose)//功能判断

{

case 1:b=input(score)break//输入成绩

case 2://顺序输出成绩

output(score,b)

break

case 3:max(score,b)break//输出最大值

case 4:min(score,b)break//输出最小值

case 5://查询特定成绩

if(b!=0)

{

printf("请输入要查询的成绩\n")

scanf("%lf",&m)

spe(score,m,b)

}

else

printf("数据为空,请先输入数据\n")

break

case 6:down(score,b)break//降序排列

case 7:n=ave(score,b)printf("平均成绩为%lf\n",n)break//输出总成绩与平均成绩

case 8://查询低于特定分数的成绩

if(b!=0)

{

printf("请输入分数\n")

scanf("%lf",&w)

fil(score,w,b)

}

else

printf("数据为空,请先输入数据\n")

break

case 9:sec(score,b)break//成绩分段

case 10:

if(b!=0)

{

printf("请输入要增加的成绩和所在位置\n")

scanf("%lf%d",&z,&y)

add(score,y,z,b)

b=b+1

}

else

printf("数据为空,请先输入数据\n")

break

case 11:

if(b!=0)

{

printf("请输入要修改的位置和修改后的成绩\n")

scanf("%d%lf",&y,&z)

rejigger(score,y,z)

}

else

printf("数据为空,请先输入数据\n")

break

case 12:

if(b!=0)

{

printf("请输入要删除的位置\n")

scanf("%d",&y)

del(score,y,b)

b=b-1

}

else

printf("数据为空,请先输入数字\n")

break

case 13:

y=format(score)

if(y==1) b=0

break

case 0:

printf("程序退出后所有数据将消失,确定退出程序?Y/N\n")

scanf("%c",&validate)

scanf("%c",&validate)

if(validate=='Y'||validate=='y') flag=0//退出

}

}

printf("谢谢使用\n")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12370061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存