排考场座位问题 c语言
发布网友
发布时间:2023-07-04 07:10
我来回答
共2个回答
热心网友
时间:2023-10-06 04:25
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 8
#define COL 8
int seat[ROW*COL]={0};
void main()
{
int i,j,k,a,count=0;
while(1)
{
system("cls");//清屏
fflush(stdin);//清键盘输入缓冲区
printf("\n\t\t1设定考场座位");
printf("\n\t\t2取消考场座位");
printf("\n\t\t3显示某座位考生信息");
printf("\n\t\t4查找学生座位\n\t\t\t退出程序:Ctrl+C\n\n\t请选择:");
k = getchar();
if(k<'1'||k>'4') continue;//无效的选择直接忽略
fflush(stdin);
switch (k)
{
case '1':
if(count+1 >= ROW*COL){printf("报歉,坐位已满!");break;}
printf("输入准考证号:");
scanf("%d",&k);
for(a=0; a<ROW*COL; a++) if(seat[a] == k) break;//遍历
if(a<ROW*COL)
{
printf("考生%d已经在坐位:%d排%d坐\n",k,a/COL+1,a%COL+1);
break;
}
srand((int)time(NULL));
a = rand()%(ROW*COL);
while(seat[a]!=0) a=(a+1)%(ROW*COL);//搜索到一个空坐位
seat[a] = k;//放上准考证号
printf("安排在坐位:%d排%d坐\n",a/COL+1,a%COL+1);
break;
case '2':
printf("输入准考证号:");
scanf("%d",&k);
for(a=0; a<ROW*COL; a++) if(seat[a] == k) break;//遍历
if(a<ROW*COL)
{
seat[a]=0;
printf("取消了考生%d的坐位:%d排%d坐\n",k,a/COL+1,a%COL+1);
}else{
printf("考生%d不在本考场\n",k);
}
break;
case '3':
printf("输入坐位几排几坐:");
scanf("%d %d",&i,&j);
if(i<1||i>ROW||j<1||j>COL) printf("没有该坐位:%d排%d坐!");
else
{
k = seat[(i-1)*COL+j-1];
if(k==0) printf("%d排%d坐未安排考生!");
else printf("%d排%d坐考生准考证号:%d",i,j,k);
}
break;
case '4':
printf("输入准考证号:");
scanf("%d",&k);
for(a=0; a<ROW*COL; a++) if(seat[a] == k) break;//遍历
if(a<ROW*COL)
{
printf("考生%d的坐位:%d排%d坐\n",k,a/COL+1,a%COL+1);
}else{
printf("考生%d不在本考场\n",k);
}
break;
}
fflush(stdin);printf("\n回车继续......");
getchar();
}
}
热心网友
时间:2023-10-06 04:25
写成函数的形式,不知道不觉就写成了一个小型C语言程序设计系统了。
贴出来,分享一下O(∩_∩)O~
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
typedef struct student
{
char num[20];//准考证号在20位以内
introw;//行号
int column;//列号
}stu_Info;
void exit_t()
{
printf("\n\n\n\t\tO(∩_∩)O~\t\t\t\tO(∩_∩)O~\n");
printf("\t\t\tThank you for using the mini-system\n");
printf("\t\t\t\tsee you next time!\n\n\n");
getchar();
getchar();
//system("pause");
exit(1);
}
void set(stu_Info stu[],int a[],int& num)
{
if(num>63)
{
printf("座位已满!");
return ;
}
printf("请输入准考证号:\n");
getchar();//读取空格或者回车,去除其影响
gets(stu[num].num);
int n;
srand((unsigned int)time(NULL));
while(a[n=rand()%64]);
a[n]=1;
stu[num].column = (n+1)%8 ? (n+1)%8 : 8;
stu[num].row= (n+1)%8 ? (n+1)/8+1 : (n+1)/8;
printf("随机生成座位号成功!\t该考生座位在第%d行第%d列。",stu[num].row,stu[num].column);
num++;
printf("press anykey to continue!");
getchar();
system("cls");
}
void release(stu_Info stu[],int a[],int& num)
{
int i,t,row,column;
char temp[20];
printf("请选择取消座位的方式:\n1.按学生准考证号取消\n2.按学生座位行列号取消\n");
do
{
scanf("%d",&t);
}while(t!=1 && t!=2);
switch(t)
{
case 1:
printf("请输入要取消的准考证号:\n");
getchar();
gets(temp);
for(i=0;i<num;i++)
{
if(strcmp(stu[i].num,temp)==0)
{
a[stu[i].row*8+stu[i].column%8-1] = 0;//恢复空位
stu[i].column = stu[i].row = 0;//
printf("已取消准考证号为%s考生的座位!",temp);
num--;
return ;
}
}
printf("没有找到准考证号为%s的考生!",temp);
break;
case 2:
printf("请输入要取消的座位行列号:\n");
scanf("%d %d",&row,&column);
for(i=0;i<num;i++)
{
if(stu[i].row == row && stu[i].column == column)
{
a[stu[i].row*8+stu[i].column%8-1] = 0;//恢复空位
stu[i].column = stu[i].row = 0;//
printf("已取消座位第%d行,第%d列的座位!",row,column);
num--;
return ;
}
}
printf("座位第%d行,第%d列的座位不存在或者还没有安排考生!",row,column);
break;
}
}
void display(stu_Info stu[],int num)
{
int i,row,column,cout=0;
printf("请输入要显示的座位行列号:\n");
scanf("%d %d",&row,&column);
for(i=0;i<num;i++)
{
if(stu[i].row == row && stu[i].column == column)
{
printf("座位第%d行,第%d列的座位考生的准考证号为%s",row,column,stu[i].num);
cout++;
}
}
if(!cout)
{
printf("座位第%d行,第%d列的座位不存在或者还没有安排考生!",row,column);
}
printf("press anykey to continue!");
getchar();
system("cls");
}
void find(stu_Info stu[],int num)
{
int i,cout=0;
char temp[20];
printf("请输入要查找的准考证号:\n");
getchar();
gets(temp);
for(i=0;i<num;i++)
{
if(strcmp(stu[i].num,temp)==0)
{
printf("准考证号为%s考生的座位号在第%d行,第%d列",temp,stu[i].row,stu[i].column);
cout++;
}
}
if(!cout)
{
printf("找不到准考证号为%s考生的座位号",temp);
}
printf("press anykey to continue!");
getchar();
system("cls");
}
void menu(stu_Info stu[],int a[],int& num)
{
int choice;
printf("\t\t\twelcome to the mini-system of seating\n\n");
printf("\t\t\t\t made by 嘻哈雄帅\n");
printf("\t\t\t\tcopyright@ 2011.12.31\n\n");
printf("\t\t\t\t0.退出系统\n");
printf("\t\t\t\t1.设定考场座位\n");
printf("\t\t\t\t2.取消考场座位\n");
printf("\t\t\t\t3.显示某座位考生信息\n");
printf("\t\t\t\t4.查找学生座位\n");
printf("\t\t\t\tmake your choice:(0~4)\n\t\t\t\t");
scanf("%d",&choice);
system("cls");
switch(choice)
{
case 0:
exit_t();
break;
case 1:
set(stu,a,num);
break;
case 2:
release(stu,a,num);
printf("\npress anykey to continue!");
getchar();
system("cls");
break;
case 3:
display(stu,num);
break;
case 4:
find(stu,num);
break;
default:
printf("input error!please input again.");
break;
}
}
int main()
{
int a[8*8]={0};
stu_Info stu[8*8];
static int num=0;
while(1)
menu(stu,a,num);
return 0;
}