课程设计(C语言)部分讲解

简介: 课程设计(C语言)部分讲解

课程设计(C语言版)部分讲解

重点设计及编码

以下是我从整体代码中节选的登录代码

该代码可以独立运行,后缀为.c
账户 yonghu1 yonghu2

密码 yonghu1 yonghu2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
#define N 10
/**
用于从键盘中获取指定范围[n1,n2]的整数,用于选择操作 
*/
int readInt(int n1,int n2){
  int n;
  scanf("%d",&n);
  while(n<n1||n>n2){
    printf("请重新输入:");
    scanf("%d",&n); 
  }
  return n;
}
/**
用于从键盘中获取'y'或'n' 
*/
char readConfirmSelection(){
  char c;
    for(; ;) {
      fflush(stdin);//消除回车的scanf的影响 
      scanf("%c",&c);
        if(c=='y'||c=='n') {
            break;
        }else {
            printf("选择错误,请重新输入:");
        }
    }
  return c;
}
//用于密码的隐式输入 
void mi(char word[]){
  int i=0;
  int is_b=0;
  char c;
  while(1){
    c=_getch();//获取字符 
    if(c=='\r'){
      if(is_b==1){
        //为回车符前的Back符号没删除的数组最后一项作清空 ,原因不会覆盖多输入的一项,所以要清空 
        //举例:要想输入123456,但是输入了1234567,用Back清除7但是数组中的7没被删除,所以需将最后一项清空
        //如果没有这个if,对上面的特殊情况,数组依然是1234567
        //该if对最前以及中间的Back键都起作用,可使下面的'\b'和--i的操作从要覆盖当前输入的最后一项真正变成了清除当前输入的最后一项
        word[i]=0;
      }
      break;//回车符结束输入 
    }else if(c=='\b'){
      is_b=1;
      printf("\b \b");//界面显示Back 
      --i;//数组索引前移,只有再次输入,才将会覆盖要Back的那项 
    }else{
      word[i++]=c;// 输入到数组 
      printf("*");//显示 * 
    }
  }
  printf("\n");
}
//倒计时 ,用于输入密码错误后的等待 
void daojishi (int a){
  while(a>=0)
  {
    printf("%d ",a);
    Sleep(1000);//等待1000毫秒即为1秒 
    a=a-1;
  }
  printf("\n");
} 
//用户管理界面(略) 
void userview(){
  printf("\t\t进入\n");
  printf("\t************************\n");
  printf("\t************************\n");
  printf("\t************************\n");
  printf("\t************************\n");
  printf("\t\t退出\n\n");
}
//用户登录界面 
void User(){
  char username[10][N] = {"yonghu1","yonghu2"}; //存储账户名 username [10]的二维数组 
  char password[10][N] = {"yonghu1","yonghu2"}; //存储密码 password [10]的二维数组 
  char name[10];//输入 账户名 
  char word[10];//输入 密码 
  int n=2;//用来记录有多少组username和password 
  while(1){
    printf("****************用户登录系统****************\n");
    printf("                   1登录\n");
    printf("                   2注册\n");
    printf("                   3退出\n");
    printf("请选择(1-3):");
    int choice;
    choice=readInt(1,3);
    switch(choice){
      case 1:{
        printf("登录\n");
        int signin=0; //用于判断是否登录进去 
        while(1){
          printf("\t请输入账户名:\n");  
          printf("\t账户名:");
          scanf("%s",name); 
          printf("\n");
          int i=0;//用来一一匹配name和username[i]、word和password[i] 
          int isThree=1;//用于判断是否输入了三次错误密码 
          for(i=0;i<n;i++){
            if( strcmp(username[i] , name) == 0)
            {
              printf("\t请输入密码(%d):\n",isThree);
              printf("\t密码:");
//              scanf("%s",word);
              mi(word); //隐式密码输入 
              for(isThree=1;isThree<4;isThree++){
                if( strcmp( password[i] , word) == 0 )
                {       
                  printf("\n\n");
                  printf("\t*******************************\n");
                  printf("\t*****  欢迎用户\"%s\"! *****\n",name);
                  printf("\t*******************************\n");
                  printf("\n\n");
                  userview();//进入-->退出 
                  signin=1;//登录进入 了 
                  break;
                }
                else
                {
                  if(isThree==3){
                    printf("\t密码错误超过3次\n\n"); 
                    break;
                  }
                  printf("\t密码错误,请在5秒后再次输入密码\n");
                  printf("\t");
                                daojishi(5);//等待操作 
                  printf("\t请重新输入密码(%d)!\n",isThree+1);
                  printf("\t密码:");
                  mi(word);
                  if( strcmp( password[i] , word) == 0 ){
                    printf("\n\n");
                    printf("\t*******************************\n");
                    printf("\t*****  欢迎用户\"%s\"! *****\n",name);
                    printf("\t*******************************\n");
                    printf("\n\n");
                    userview();
                    signin=1;
                    break;
                  }
                }
              } 
            }
          }  
          if(signin==1){//登录进去之后, userview()操作完成以后,退出输入账户的while循环 ,进入 用户登录系统的while循环 
            break;
          }
          if(i==n){//没有登录进去,for循环的i等于n 
            printf("\t账户名或密码错误\n");
            printf("\t 1重新输入账户名\n");
            printf("\t 2临时注册账户名\n");
            printf("\t 3     退出\n"); 
            printf("\t请输入:"); 
            int selection;
            selection=readInt(1,3);
            if(selection==1){//进入输入账户的while循环
              ;
            }else if(selection==2){
              while(1){
                printf("\t注册\n");
                printf("\t输入账户名:");
                scanf("%s",&username[n]); 
                printf("\t输入密码:"); 
                mi(password[n]);
                printf("\t请再次输入,以确认密码:");
                char twiceword[18];
                mi(twiceword);
                if(strcmp(password[n],twiceword)==0){
                  printf("\t注册成功\n\n"); 
                  n++;//记录数改变,以便用于下一次注册 
                  break;//退出注册的while循环, 进入输入账户的while循环
                }else{
                  printf("\t确认密码失败,重新注册\n");
                }
              }
            }else{
              break;//退出输入账户的while循环 ,进入 用户登录系统的while循环 
            }
          }
        } 
        break;//退出switch中的case 1 
      }
      case 2:{
        while(1){
          printf("\t注册\n");
          printf("\t输入账户名:");
          scanf("%s",&username[n]); 
          printf("\t输入密码:"); 
          mi(password[n]);
          printf("\t请再次输入,以确认密码:");
          char twiceword[18];
          mi(twiceword);
          if(strcmp(password[n],twiceword)==0){
            printf("\t注册成功\n\n"); 
            n++;//记录数改变,以便用于下一次注册
            break;
          }else{
            printf("\t确认密码失败,重新注册\n");
          }
        }
        break;//退出switch中的case 2
      }
      case 3:{
        printf("请确认是否退出(y或n):");
        char isExit;
        isExit=readConfirmSelection();
        if(isExit=='y'){
          return;//退出用户登录系统的while循环也退出User函数 ,进入main函数之后的操作 
        }
      }
    }
  }   
}
void main(){
  User();
} 
相关文章
|
搜索推荐 程序员 C语言
C语言的总结与感悟
C语言的总结与感悟
694 0
|
7月前
|
C语言
【C语言】:练手题
【C语言】:练手题
29 0
|
存储 Java 编译器
c语言学习第一课-初识c语言
c语言学习第一课-初识c语言
111 0
c语言学习第一课-初识c语言
|
存储 编译器 程序员
“C“浒传——初识C语言(更适合初学者体质哦!)
“C“浒传——初识C语言(更适合初学者体质哦!)
|
C语言
C语言练手题(52个小练习)1
C语言练手题(52个小练习)
339 0
|
机器学习/深度学习 C语言
C语言练手题(52个小练习)2
C语言练手题(52个小练习)2
348 0
|
Java 程序员 C#
【C语言学习-复习_第一课】什么是C语言?什么是计算机语言?
人与人之间交流需要使用语言,中国人和中国人之间使用汉语,其他国家之间的交流也需要使用其他国家的语言,计算机也要进行交流,他们使用哪种语言了?当然有人说使用汉语,呼叫某某某小助手可以帮助我们进行和计算机交流,但是某某某小助手是通过怎样实现的,也是程序员使用中文和计算机对话设计出来的吗?当但不是了。这样的话我们人人都是程序员,人人都是大佬!
93 0
|
算法 编译器 C语言
程序设计与c语言笔记(一)
程序设计与c语言笔记(一)
程序设计与c语言笔记(一)
|
算法 Java 程序员
【C语言程序设计】第一章:程序设计与C语言
《C语言程序设计》第一章:程序设计与C语言精炼
161 0
【C语言程序设计】第一章:程序设计与C语言
|
C语言 C++
C语言小项目——通讯录(适合刚学完C语言的初学者)
C语言小项目——通讯录(适合刚学完C语言的初学者)
C语言小项目——通讯录(适合刚学完C语言的初学者)