我的流水灯,数码表,矩阵键盘,串口通信学习笔记

流水灯

1 宏定义 typedef

uchar =unsigned char
他是预处理指令,不是语句
常用典型语句
宏定义是用已有类型取别名

#define unit unsigned int//无符号整形
#define uchar unsigned char//无符号字符型

有时我们也可以用typedef关键字来取别名,加分号

2.定义函数

在这里插入图片描述
在你自定义函数的时候,如果你写在main函数前面,那么不会有错误
如果写在main函数后面,那么你需要在前面声明,并记得加分号。

`3.循环位移函数

左移 -crol-
右移 -cror-
标准库函数 intrins.h

在这里插入图片描述

4. 循环移位函数与左移和右移运算符的区别

在这里插入图片描述

5.程序

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

uchar temp;
void delay(uint z)
{uint x,y;
	for(x=z;x>0;x--)
		for(y=114;y>0;y--);
	
}
void main()//main函数自己会循环
{
	
	temp=0xfe;
	P1=temp;//1111 1110
	
	while(1)
	{
		temp=_crol_ (temp,1);
		P2=temp;
		delay(100);
	}

}

矩阵键盘

在这里插入图片描述
这里 我们在进行行扫描时,将行线全部给1,列线全部给0,如果按下键盘联通,那高位也会被拉低成0,。
列扫描时,将行线全部给0,列线全部给1,如果按下键盘联通,那高位也会被拉低成0,
将对应的二进制换成十六进制,加起来是一个唯一的数字来确定是按下了哪一个按键。

程序

实验现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字
		 
注意事项:										

										  
**************************************************************************************

*/
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

#define GPIO_DIG P0//通用IO口,就是普通的输入输du出引zhi脚。,数码管连接P0口
#define GPIO_KEY P1//矩阵键盘用P1口。矩形按键控制数码管


u8 KeyValue;	没有赋值,默认初始值是0//用来存放读取到的键值

//共阳
u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
					0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名         : KeyDown
* 函数功能		   : 检测有按键按下并读取键值
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void KeyDown(void)
{
	char a=0;
	GPIO_KEY=0x0f;//行扫描
	if(GPIO_KEY!=0x0f)//读取按键是否按下
	{
		delay(1000);//延时10ms进行消抖
		if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
		{	
			//测试列
			GPIO_KEY=0X0F;重点,看似这里又重新定了,但是在你按下按键的时候大约需要20ms,GPIO_KEY的值会因为你的按下而在此改变
			switch(GPIO_KEY)这个会确定是哪一行
			{
				case(0X07):	KeyValue=0;break;
				case(0X0b):	KeyValue=1;break;
				case(0X0d): KeyValue=2;break;
				case(0X0e):	KeyValue=3;break;
			}
			//测试行
			GPIO_KEY=0XF0;//列扫描
			重点,看似这里又重新定了,但是在你按下按键的时候大约需要20ms,GPIO_KEY的值会因为你的按下而在此改变。代码运行的速度是很快的
			当你松手之后,他会通过上拉电阻回到初始状态
			
			switch(GPIO_KEY)
			{
		case(0X70):	KeyValue=KeyValue;break;
		case(0Xb0):	KeyValue=KeyValue+4;break;
		case(0Xd0): KeyValue=KeyValue+8;break;
	case(0Xe0):KeyValue=KeyValue+12;break;
			}
			
		}
	}
	while((a<50)&&(GPIO_KEY!=0xf0))	 //检测按键松手检测
	{
		delay(100);
		a++;
	}
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	

	while(1)
	{	
		KeyDown();		   //按键判断函数
		GPIO_DIG=~smgduan[KeyValue];	  //
	}		
}

在这里插入图片描述

蜂鸣器

在这里插入图片描述
在这里插入图片描述P23和VCC都是5v,那么电路处于截止状态,蜂鸣器无法工作,当P23=0,则饱和接通。
在这里插入图片描述
在这里插入图片描述
注释:p23不能直接连接蜂鸣器,单片机只适合用来做控制,不是功率器件,不适合驱动功率器件。

今天真是当头一棒,我要让蜂鸣器工作,可是我很正确的在isp上打开对应的hex文件,可是为蛇魔每次竟然还出现流水灯,疯了,真是烦人,本来我要问一个大佬,后来赶紧撤回来,这种事也问人家,真的是太依赖人家了,后来,我就问客服,客服让我加了技术人员,确信我的蜂鸣器接口是P1。5.后来我终于知道了,通过观察isp的程序文件窗口,发现惊人一幕,和一个有流水灯的文件一样,我大吃一惊,虽然也不知道为啥,可能是因为在同一个项目里,受到了干扰。哎,太懒了。然后又规规矩矩创建了一个新的项目,就成功了,蜂鸣器的声音侦听难听点。差不多是噪音。。。呵呵呵。7.21记。

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>		//因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit beep=P1^5;	   

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	while(1)
	{	
		beep=~beep;
		delay(500); //100时延时大约1ms   通过修改此延时时间达到不同的发声效果	
	}
}

数码表

工作原理

在这里插入图片描述
在这里插入图片描述
a接P0.0 低位 dp(点点)接P0.7高位
将对应8位2进制转换成16进制,高低位不要看搞错
在这里插入图片描述
在这里插入图片描述
静态数码管需要用64 8乘8 个I/O口 太费了

锁存器

在这里插入图片描述

上拉电阻

在这里插入图片描述

锁存器与数码管的连接

在这里插入图片描述

A/D电路转换

A代表连续,D代表不连续
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此处我来讲述逐次逼近式ADC转换原理,设veef为5v,vin为3.75v,DA转化器和下面的寄存器都是8位,我们给DA的第一位赋1,把VEEF的一班拿来比较,2.5<3.75,那么下面对应第一位赋1,然后再加上现在的一半 即2.5+1.25=3.75,两面相等,下面仍然赋1,再加现在的一半,大于3.75,后面将都大。下面对应1100 0000
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
AD DA应用
DA
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

串口通信

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同步通信就是一直不断地发送信息,源源不断。异步通信就是一帧一帧的发,发了一帧以后,你可以随便停一会(多长时间任意),然后再发下一帧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

比特率

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在听他一讲,我懂了就是啥呢,你的数据线越长,那么分布电容和电感越大,这些会形成滤波电路,吸收掉你的信号
注释:分布电容/寄生电容是由电气特性产生的

(不)可位寻址

可位寻址
SM0=1
不可位寻址
SM0=0x01

在这里插入图片描述
在这里插入图片描述
REN TI RI
在这里插入图片描述

比特率的计算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经计算如果想要产生9600的比特率,需要TH1赋值0xDF 还有在这里的DFH 是什么意思呢 前面就是0xDF 后面代表hex十六进制 在1 0 工作方式2 8位这种定时器情况下TH1溢出后,会直接从TL1里面赋值,所以把TL1也写成0xDF。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
小tip: 高四位是定时器1,低四位是定时器0.
在这里插入图片描述
在这里插入图片描述
通信串口初始化

void UsartInt()
{

 1. List item

1.TMOD=0x20;//0010 0000*确定计时器工作方式*,前四位定时器1,且工.作方式2 8位自动装载
2,TH1=0xF3;//*9600比特率 计算初值*
3。TL1=0xF3;//自动装载保持相同

4.PCON=0x80;// *确定是否倍增*PCON的最高位是SCON 只有这一位和串口通信有关  1000 0000 2的1次方,倍增 

}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实践开始,上面的小助手已经淘汰了,下面这个才是新版的
在这里插入图片描述
注意:
在这里插入图片描述
在这里插入图片描述
真是内心激动,又解决了一个问题,谢谢技术员们了,而且很吃惊,我这个串口是UCB串口。emmmm
我在程序里让第一个灯亮起来虽然亮灯没啥,但是我用通信串口做成的,很开心 今天尽忙活这些了。
附图

在这里插入图片描述

感觉完成作业又进了一步。详细请看
我的单片机作业

AD转换

在这里插入图片描述

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>


/************************结构体**************************/
typedef struct student
{
    char sushenum[40];//宿舍号
    char bednum[40];//床位数
    char name[40];//姓名
    char id[40];//学号
    char tel[40];//电话
    char masname[40];//寝室长姓名
    char masid[40];//寝室长学号
    char mastel[40];//寝室长电话
}stu;//学生信息
typedef struct  user
{
    char usercode[30];//用户密码
    char userid[30];//用户账号
    char grade[3];//权限级别
}use;//用户信息
/**********************函数声明***************************/
void reg();//管理员界面
void denglu();//登录
void secret();//加密
void create_accont();//创建账号
void dele_accout();//删除账号
void reget();//重置,更新
void create();//输入学生信息
void find();//查询住宿信息
void findmat1();//按照宿舍长学号查询
void findmat2();//按照宿舍长电话查询
void findnum();//按照宿舍号查询
void findmes();//按照住宿学生电话查找
void changecode();//更改密码
void getthrough();//浏览住宿信息
void emptybed();//查询空床位
void color();
int main()
{
 int a,b,c,d,e,f,g;
    reg();
denglu();
    printf("|\t\t\t\t请选择用户属性,管理员请按1,普通用户请按2.\t\t\n");

    scanf("%d",&a);

    if(a==1)
    {printf("\t\t\t\t\t进入管理员模块\t\t\n");

    scanf("%d",&b);
    loop1: switch(b)
        {
        case 1:
        {

           printf("用户信息管理\n");
          printf("\t\t\t\t====================================\n");
           printf("\t\t\t\t1.创建账号\n");
           printf("\t\t\t\t2.删除账号\n");
           printf("\t\t\t\t3.重置密码\n");
printf("\t\t\t\t====================================\n");
            scanf("%d",&c);

          loop2:  switch(c)
            {
            case 1:
                 create_accont();
                break;
            case 2:
                dele_accout();//删除账号
                break;
            case 3:
               changecode();
                break;
            default:
                printf("错误\n");
                goto loop2;
            }
        }


        case 2:
           {

            printf("住宿信息管理\n");

            printf("1.输入学生住宿信息\n");
            printf("2.删除信息\n");
            printf("3.查询住宿信息\n");

            scanf("%d",&d);

        loop3: switch(d)
            {
        case 1:
           create();

            break;
        case 2:
            dele();
            break;
        case 3:
            find();
            break;
        default:
                printf("错误\n");
                goto loop3;
            }
           }
        default:
            printf("输入错误,请重新输入");
            goto loop1;
        }
    }
    if(a==2)
    {
        printf("进入普通用户模块\n");
        printf("1.更改密码\n");
        printf("2.查找\n");
        printf("3.浏览\n");
        printf("4.查询空床位\n");

        scanf("%d",&e);
      loop4:  switch(e)
        {
        case 1:
            changecode();
            break;
        case 2:
            find();
            break;
        case 3:
            getthrough();
            break;
        case 4:
            emptybed();
            break;
        default:
            printf("输入错误,请重新输入");
            goto loop4;
        }

    }
}
void create()
{FILE *fp;
int i,n;
 stu inform[30];
if((fp=fopen("st.txt","w"))==NULL)
{
printf("文件无法打开\n");
exit(0);

}
printf("输入要输入的学生人数\n");
scanf("\t\t%d\n",&n);
printf("\t宿舍号 床位数 姓名 学号 电话 寝室长姓名 寝室长学号 寝室长电话\t\n");


for(i=0;i<n;i++)
{printf("\t\t\t==================================================\n");
    scanf("%s %s %s %s %s %s %s\n",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

}

for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %s %s %s %s %s\n",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

}
fclose(fp);
printf("信息录入成功。\n");



}
void dele()
{FILE *fp;
stu inform[40],xinxi;
char shan[40];
int i,n,flag;
printf("显示所有姓名以及学号:\n");
if((fp=fopen("st.txt","r"))==NULL)
{
    printf("文件无法打开。\n");
    exit(0);
}
while(!feof(fp))
{

fscanf(fp,"%s %s %s %s %s %s %s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
printf("%s %s\n",inform[i].name,inform[i].id);
 i++;
}
n=i;
fclose(fp);
    loop6:  printf("输入要删除的学号\n");
scanf("%s",shan);
flag=2;
  for(i=0;i<n;i++)
  {
      if(strcmp(shan,inform[i].id)==0)
      {printf("找到对应信息,将删除该信息。\n");
      flag=1;
      break;


      }
  }
  if(flag!=1)
  {
      printf("没有找到相应的信息。\n");
      goto loop6;
  }

      for(int j=i;j<n;j++)
      {
          inform[j]=inform[j+1];

      }
      printf("删除成功。\n");
      if((fopen("st.txt","w"))==NULL)
      {
          printf("文件无法打开");
          exit(0);


      }
      for(i=0;i<n-1;i++)
      {printf("%s %s %s %s %s %s %s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        fprintf(fp,"%s %s %s %s %s %s %s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

      }
      printf("新的信息输入完成。\n");
      fclose(fp);

  }
void reget()
{
    FILE *fp;
    int i,n,flag;
    stu inform[22],xinxi;
    char xiugai[22];
    flag=0;
    if((fopen("st.txt","w"))==NULL)
    {
        printf("文件无法打开。\n");

    }
    while(!feof(fp))
    {
        fscanf(fp,"%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        printf("%11s %11s",inform[i].name,inform[i].id);
        i++;
    }
    n=i;
   loop7: printf("输入想要修改的学号,以便删除对应信息。\n");
    scanf("%s",xiugai);
    printf("输入你想重置的信息。\n");
     scanf("%11s %5s %11s %11s %11s %11s %11s",xinxi.sushenum,xinxi.bednum,xinxi.name,
        xinxi.id,xinxi.tel,xinxi.masname,xinxi.masid,xinxi.mastel);
    for(i=0;i<n;i++)
    {
        if((xiugai,inform[i].id)==0)
        {   flag=1;
            printf("正在重置你所想修改的信息。。。。。。。\n");
            strcpy(inform[i].sushenum,xinxi.sushenum);
            strcpy(inform[i].bednum,xinxi.bednum);
            strcpy(inform[i].name,xinxi.name);
            strcpy(inform[i].id,xinxi.id);
            strcpy(inform[i].tel,xinxi.tel);
            strcpy(inform[i].masid,xinxi.masid);
            strcpy(inform[i].masname,xinxi.masname);
            strcpy(inform[i].mastel,xinxi.mastel);
            printf("修改重置完成。将该信息输出检查是否成功\n");
            printf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
            i++;
            break;
        }
    }
       if(flag==0)

        {
            printf("没有找到相应信息。\n");
             goto loop7;
        }

       for(i=0;i<n;i++)
       {
           fprintf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

       }
       fclose(fp);


    }
void create_accont()
{
    FILE *fp;
    int i=0,n;
    use usename[22],xinxi;
    char account[20],password[20];
    if((fp=fopen("ac.txt","r"))==NULL)
    {
        printf("文件无法打开。\n");
        exit(0);
    }
    printf("列举全部账号:\n");
    while(!feof(fp))
    {
        fscanf(fp,"%s %s\n",usename[i].userid,usename[i].usercode);
        printf("%s\n",usename[i].userid);
        i++;
    }
    fclose(fp);
    n=i;
    loop8:
        printf("输入要添加的账号:");
        scanf("%s",account);
        for(i=0;i<n;i++)
        {
            if(strcmp(usename[i].userid,account)==0)
            {
                printf("该账号已经存在。请重新输入。\n");
                goto loop8;
            }
        }
    printf("输入要添加账号的密码:");
    getchar();
    scanf("%s",password);

    strcpy(usename[i].userid,account);
    strcpy(usename[i].usercode,password);
    for(i=0;i<n+1;i++)
    {
        for(int j=i;j<n+1;j++)
        {
            if((strcmp(usename[i].userid,usename[j].userid))>0)
            xinxi=usename[i];
        usename[i]=usename[j];
        usename[j]=xinxi;

        }
    }


if((fp=fopen("ac.txt","w"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
for(i=0;i<n+1;i++)
{
    fprintf(fp,"%s %s\n",usename[i].userid,usename[i].usercode);

}
fclose(fp);
system("cls");
printf("账号录入成功。\n");
}

void dele_accout()//删除账号
{
    system("cls");
FILE *fp;
int i,n,k=0;
use user[22];
char account[22],password[22];
printf("列举全部账号。\n");
if((fopen("ac.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
while(!feof(fp))
{fscanf(fp,"%s %s\n",user[i].userid,user[i].usercode);
printf("%s %s\n",user[i].userid);
i++;


}
fclose(fp);
n=i;
 loopb:printf("输入你想要删除的账号。\n");
scanf("%s",account);
for(i=0;i<n;i++)
{

if((strcmp(user[i].userid,account))==0)
{   k=1;
    break;
}

}
if(k!=1)
   {

   printf("无此账号!请重新输入!\n");
goto loopb;
}
    for(int j=i;j<n;j++)
{
    user[j]=user[j+1];
}
system("cls");
printf("删除成功。\n");



if((fopen("ac.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
for(i=0;i<n-1;i++)
{
    fprintf(fp,"%s %s\n",user[i].userid,user[i].usercode);

}
printf("删除账号成功。\n");
fclose(fp);
}
void find()
{int choice;
printf("\t\t请选择您以何种方式查找。输入1-4代表您的选择。\t\t\n");
printf("\t\t1.按宿舍号查找。\t\t\n");
printf("\t\t2.按寝室长电话查找。\t\t\n");
printf("\t\t3.按寝室长电话查询。\t\t\n");
printf("\t\t4.按住宿学生本人信息查询。\t\t\n");
scanf("%d",&choice);

    switch(choice)
    {
        //case 1:printf("文件打开");

        case 1:findnum();//宿舍号
        case 2:findmat1();//宿舍长学号
        case 3:findmat2();//宿舍长电话
        case 4:findmes();//学生信息
    }
}
void findnum()
{
    FILE *fp;
    stu inform[23];
    char sushehao[20];
    int i=0,k=0,n;
    if((fopen("st.txt","r"))==NULL)
{
    printf("文件打开错误。!!!\n");
    exit(0);
}


 while(!feof(fp))
    {
        fscanf(fp,"%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

        printf("%s\n",inform[i].sushenum);
        i++;
    }
    fclose(fp);
    n=i;
   loop9: printf("输入你要查找的宿舍号\n");
    scanf("%s",sushehao);
    for(i=0;i<n;i++)
    {
        if((strcmp(inform[i].sushenum,sushehao))==0)
        {     k=1;
            printf("找到对应宿舍号。\n");
            printf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        }

    }
    if(k==0)
    {
        printf("没有找到对应宿舍号。\n");
        goto loop9;
    }
}
void findmat1()
{
    FILE *fp;
    stu inform[23];
    char qszxh[20];
    int i=0,k=0,n;
    if((fopen("st.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
 while(!feof(fp))
    {
        fscanf(fp,"%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

        printf("||%s||\n",inform[i].masid);
        i++;
    }
    fclose(fp);
    n=i;
   loop10: printf("输入你要查找的寝室长学号\n");
    scanf("%s",qszxh);
    for(i=0;i<n;i++)
    {
        if((strcmp(inform[i].masid,qszxh))==0)
        {     k=1;
            printf("找到对应宿舍号。\n");
            printf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        }

    }
    if(k==0)
    {
        printf("没有找到对应宿舍号。\n");
        goto loop10;
    }
}
void findmat2()
{
    FILE *fp;
    stu inform[23];
    char qszdh[20];
    int i=0,k=0,n;
    if((fopen("st.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
 while(!feof(fp))
    {
        fscanf(fp,"%s %s %s %s %s %s %s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

        printf("||%s||\n",inform[i].masid);
        i++;
    }
    fclose(fp);
    n=i;
   loop11: printf("输入你要查找的寝室长电话\n");
    scanf("%s",qszdh);
    for(i=0;i<n;i++)
    {
        if((strcmp(inform[i].mastel,qszdh))==0)
        {     k=1;
            printf("找到对应宿舍长电话。\n");
            printf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        }

    }
    if(k==0)
    {
        printf("没有找到对应宿舍长电话。\n");
        goto loop11;
    }
}
void findmes()
{
    FILE *fp;
    stu inform[23];
    char xsdh[20];
    int i=0,k=0,n;
    if((fopen("st.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
 while(!feof(fp))
    {
        fscanf(fp,"%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

        printf("||%s||\n",inform[i].tel);
        i++;
    }
    fclose(fp);
    n=i;
   loop12: printf("输入你要查找的寝室长电话\n");
    scanf("%s",xsdh);
    for(i=0;i<n;i++)
    {
        if((strcmp(inform[i].tel,xsdh))==0)
        {     k=1;
            printf("找到对应学生电话。\n");
            printf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
          inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        }

    }
    if(k==0)
    {
        printf("没有找到对应学生电话。\n");
        goto loop12;
    }
}
void changecode()
{system("cls");
    FILE *fp;
    use inform[23];
    char newcode[20],id;
    int i=0,k=0,n;
    if((fopen("ac.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
 while(!feof(fp))
    {
        fscanf(fp,"%s %s\n",inform[i].userid,inform[i].usercode);

        printf("||%s||\n",inform[i].userid);
        i++;
    }
    fclose(fp);
    n=i;
   loop14: printf("输入你要更改密码的账号。\n");
    scanf("%s",id);
    for(i=0;i<n;i++)
    {
        if((strcmp(inform[i].userid,id))==0)
        {     k=1;
            printf("找到对应账号。\n");
           printf("请输入你想设置的新密码。\n");
           scanf("%s",newcode);
           secret(newcode);
           strcpy(inform[i].usercode,newcode);
           break;
        }


    }
    if(k==0)
    {
        printf("没有找到对应账号。再此输入\n");
        goto loop14;
    }

if((fopen("ac.txt","w"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
for(i=0;i<n;i++)
{
    fprintf(fp,"inform[i].userid,inform[i].usercode");
}
fclose(fp);
printf("密码修改成功,请重新登录。\n");
main(4);
}
void getthrough()
{system("cls");
    FILE *fp;
    stu inform[45];

    int i=0,n;
    if((fopen("st.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
 while(!feof(fp))
    {
        fscanf(fp,"%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);

        printf("%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        i++;
    }
    printf("一共有%d个学生。\n",i);
    fclose(fp);


}
void emptybed()
{
system("cls");
    FILE *fp;
    stu inform[23];
char numa[20];
    int i=0,n,iden;
    if((fopen("st.txt","r"))==NULL)
{
    printf("文件打开错误。\n");
    exit(0);
}
printf("宿舍号 床位号 姓名 学号 宿舍长姓名\n ");
 while(!feof(fp))
    {
        fscanf(fp,"%11s %5s %11s %11s %11s %11s %11s",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].tel,inform[i].masname,inform[i].masid,inform[i].mastel);
        printf("*************************************************************\n");

        printf("%11s %5s %11s %11s %11s\n",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].masname);
        i++;
    }
printf("查询剩余空床位。\n");
printf("\t\t=========================\n\t\t");
printf("注释:每个宿舍6个人,本宿舍共120个宿舍,每层20个,按(楼层数+宿舍编号)标号\n\n");
printf("输入要查询的宿舍号:");
   loop15: scanf("%s",numa);
fscanf(fp,"%11s %5s %11s %11s %11s\n",inform[i].sushenum,inform[i].bednum,inform[i].name,
        inform[i].id,inform[i].masname);
        while(1)
        {
            if((strcmp(numa,inform[i].sushenum))==0)
            {
                i++;
            }
        }
if(i==6)
{printf("该宿舍已经满员");
  goto loop15;
}
else
    printf("该宿舍还有%d个空余床位。\n",6-i);

}
void secret(char password[])
{int i;
for(i=0;i<strlen(password);i++)
{
    password[i]+=20;
}

}
void reg()
{
    printf("\n\n");
    printf("\t\t\t\t.........................................................\n");
    color(10);

printf("\t\t\t\t========================================================\n");
    printf("\t\t\t\t\t欢  迎  使  用  宿  舍  管  理  系  统\t\t\n ");
    printf("\t\t\t\t=========================================================\n");
    printf("     \t\t\t\t*\t\t\t1-系统管理员\t\t\t*\n");
    printf("     \t\t\t\t*\t\t\t2-普通用户\t\t\t*\n");
    printf("\t\t\t\t=========================================================\n");

}
void color(int x) //设置字体颜色
{
if(x>=0 && x<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void denglu()
{
    char iid[20],password[22];
FILE *fp;
use inform[23];
if((fp=fopen("ac.txt","r"))==NULL)
{
    printf("File open error!\n");
}
printf("全部账号如下:\n");
int i=0,n=0;
     while(!feof(fp))
    {
        fscanf(fp,"%s %s\n",inform[i].userid,inform[i].usercode);

        printf("\t\t%s\n",inform[i].userid);
        i++;
    }
    fclose(fp);
     printf("请输入账号>>");
   loop16: scanf("%s",iid);
    int flag=0;
    n=i;
for(i=0;i<n;i++)
{
    if((strcmp(inform[i].userid,iid))==0)
    {printf("请输入密码>>");
   loopa: scanf("%s",password);

    flag=1;
    }
}
if(flag==0)
{
    printf("该账号不存在,请重新输入。\n");
    goto loop16;
}

     if((strcmp(password,"123456"))==0)
       {
           printf("登录成功\n");
       }
       else
       {
           printf("密码错误,请重新输入密码。\n");
           goto loopa;
       }

}

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值