设计内容
实验室预约系统,计算机学院单位实验室实行全天开放,学生可以根据自己的学习进度自行安排实验时间,但是每个实验有一个限定的时间,例如某实验要在近两周内完成。假设近期将要做的实验可以有周一下午、周三下午、周五下午三个时间(可以根据实际情况进行调整),不妨称为时间一、时间二、时间三,这三个时间做实验的学生可以用队列来存储。
功能要求:
(1)插入:将预约做实验的学生插入到合适的时间队列中;
(2)删除:时间队列中前5位学生可以在该时间做实验;
(3)查询:教师可以随时查询某个时间队列中学生的预约情况;
(4)修改:在没做实验之前,学生可以对预约的时间进行修改;
(5)输出:输出每个时间队列中预约的学生名单。
代码如下
#include <stdio.h>
#include <stdlib.h>//其中包含system函数
#include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
#include <string.h>//定义字符数组
#include <math.h>
#include<memory.h>
#define LEN sizeof(struct land)//有关登录系统的结构体
struct Tland//老师登录信息
{
int zhanghao;//账号
char password[20];//密码
struct Tland*next;
};
struct land//学生登录信息
{
int zhanghao; //账号
char password[20]; //密码
struct land*next;
};
typedef struct QNode//有关学生信息的结构体
{
char name[10];//名字
char banji[10];//班级
int number;//班级
struct QNode*next;
}student;
typedef struct//有关时间点的结构体
{
QNode *front;
QNode *rear;
}linkqueue;
void lmenu(); //显示学生登录菜单函数
void main1(); // 学生端实验室预约界面函数
void land(); //学生登录功能系统函数
int xinjian(int,char[]); //学生创建账号密码函数
void xgmm(); //学生修改密码函数
void lmain(); //学生登录界面函数
void Tlmenu(); //教师端显示登录菜单函数
void main2(); // 教师端实验室预约界面函数
void Tland(); //教师端登录功能系统函数
int Txinjian(int,char[] ); //教师端创建账号密码函数
void Txgmm(); //教师端修改密码函数
void Tlmain(); //教师端登录界面函数
void shenfen(); //选择身份函数
int Ttj()
//统计老师账号密码文本个数
{
FILE *fp;
//文件指针
int zhao=0, n;
char mm[20]={
'\0'};
fp=fopen("Tland.txt","r");
//打开文件
for (n=0;!feof(fp);n++)
//逐个读文件
fscanf(fp,"%d %s",&zhao,mm);
n--;
fclose(fp);
//关闭文件
return (n);
//返回个数
}
void Tlmenu()
//显示教师端登录菜单函数
{
printf("\n\n\t欢迎使用教师端实验室预约登录系统\n\n");
printf("**********************************************\n");
printf("**********************************************\n");
printf("\n\n\t\t1.登录系统\n\n");
printf("\n\n\t\t2.创建账号\n\n");
printf("\n\n\t\t3.修改密码\n\n");
printf("\n\n\t\t4.退出登录系统\n\n");
printf("\n\n\t 请按键选择,回车确定\n");
printf("**********************************************\n");
printf("**********************************************\n");
printf("\n\t\t请选择(1-4)");
return ;
}
void Tlmain()
//登录功能函数
{
void Tland();
//登录功能系统函数
void Txinjian();
//新建账号密码函数
char choose;
Tlmenu();
scanf(" %c",&choose);
switch(choose)
//功能函数
{
case'1':
Tland();
break;
case'2':
Txinjian();
break;
case'3':
Txgmm();
break;
case'4':
system("cls");
//清屏函数
getch();
exit(0);
//正常退出
system ("cls");
break;
}
}
void Txinjian()
//新建账户密码函数
{
FILE *fp;
int zhanghao;
//账号
char password[20];
//密码
char password1[20];
//二次确认密码
char hit=0;
if ((fp=fopen("Tland.txt","r"))==NULL)
//打开文件只读
{
fp=fopen("Tland.txt","w");
//建立新的文件,只允许写入数据
fclose(fp);
//关闭文件
}
system("cls");
//清屏函数
fp=fopen("Tland.txt","a");
//打开"land"文件,并且在文件末尾写入数据
for(;;)
//输入两次密码确认,两次相同才能确认
{
printf("\n请按以下格式输入账户:\n学号 密码\n");
printf("请输入:");
scanf("%d %s",&zhanghao,password);
printf("再次输入密码:\n");
scanf("%s",password1);
if(strcmp(password,password1)==0)
//比较输入的两个密码是否一致
{
fprintf(fp,"%d %s\n",zhanghao,password);
//将数据写入文件
break;
}
else
{
printf("\n\t\t***************************************************");
printf("\n\t\t***************************************************");
printf("\n\t\t***两次输入密码不一致,继续创建按回车,退出按ESC***");
printf("\n\t\t***************************************************");
printf("\n\t\t***************************************************");
hit=getch();
if(hit=27)
//如果按ESC键
system("cls");
//清屏函数
Tlmain();
}
}
fclose(fp);
//关闭文件
printf("\n\t\t****************************");
printf("\n\t\t****************************");
printf("\n\t\t***创建成功,按任意键返回***");
printf("\n\t\t****************************");
printf("\n\t\t****************************");
getch();
system("cls");
Tlmain();
}
int Tmatch(int m,char a[20])
//匹配数据库中的账号密码函数
{
FILE*fp;
//文件指针
int n=0,i=0,zhanghao;
char password[20];
if ((fp=fopen("Tland.txt","r"))==NULL)
//不存在老师信息文件
{
system ("cls");
printf("\n ");
printf("\n\t\t*****************************");
printf("\n\t\t*****************************");
printf("\n\t\t***还未存在用户!请新建账户***");
printf("\n\t\t*****************************");
printf("\n\t\t*****************************");
getch();
system("cls");
Tlmain();
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s",&zhanghao,password);
//从文件读数据
if(m==zhanghao)
{
if(strcmp(a,password)==0)
//比较密码是否相同
return 1;
else
{
return -1;
}
}
}
return 0;
}
void Tland()
//输入账户密码的登录函数
{
int zhanghao;
char password[20];
int i=2, j, k, n;
char hit=0;
system("cls");
do
{
printf("\n请输入账号:\n");
scanf("%d",&zhanghao);
printf("\n\t\t***************************************");
printf("\n\t\t***************************************");
printf("\n\t\t***确认输入请按回车,重新输入请按ECS***");
printf("\n\t\t***************************************");
printf("\n\t\t***************************************");
hit=getch();
//暂停程序当i接收后继续下一条指令
for (;hit!=13&&hit!=27;)
//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
{
hit=getch();
}
}
while(hit==27);
printf("\n请输入密码:\n");
scanf("%s",password);
i=Tmatch(zhanghao,password);
//调用"match"函数是否账号和密码是否相关联
if(i==1)
{
printf("\n\t\t***************************");
printf("\n\t\t***************************");
printf("\n\t\t***登陆成功!按任意键继续***");
printf("\n\t\t***************************");
printf("\n\t\t***************************");
getch();
system ("cls");
//清屏函数
main1();
Tlmain();
}
else
{
if(i==-1)
{
printf("\n\t\t************************");
printf("\n\t\t************************");
printf("\n\t\t***不好意思,密码错误***");
printf("\n\t\t************************");
printf("\n\t\t************************");
getch();
Tland();
}
if(i==0)
printf("\n\t\t****************************************");
printf("\n\t\t****************************************");
printf("\n\t\t***不存在此用户,确认账号密码再来登陆***");
printf("\n\t\t****************************************");
printf("\n\t\t****************************************\n\n\n");
getch();
system("cls");
Tlmain();
}
}
void Txg(int z,char m[20