简单的教室管理系统C语言源代码

#include
#include
#include
#include
#include

typedef struct lianbiao{ /* 定义链表 */
int jxl; /* 教学楼编号*/
int js ; /* 教室编号 */
int rl; /* 容量 */
char xz[20];/*教室性质*/
char mon[100];
char tue[100];
char wed[100];
char thu[100];
char fri[100];
char sat[100];
char sun[100];
/* 教室课程安排 */
struct lianbiao *next;
}add_list;
struct classroom{ /* 定义一个结构备用 */
int jxl;
int js;
int rl;
char xz[20];
char mon[100];
char tue[100];
char wed[100];
char thu[100];
char fri[100];
char sat[100];
char sun[100];
};
FILE *fp;
add_list *tail,*head; /* 定义链表尾节点指针和头指针 */


/* 从文件中读出数据生成通讯录链表,如果文件不存在,生成空链表 */
add_list *load(char filename[])
{ add_list *new1,*head;
struct classroom t;
head=(add_list *)malloc(sizeof(add_list));
tail=head=NULL;
if((fp=fopen(filename,"rb"))==NULL)
return head;
else
if(!feof(fp))
if(fread(&t,sizeof(struct classroom),1,fp)==1)
{
new1=(add_list *)malloc(sizeof(add_list)); /* 连入链表第一个节点 */
new1->jxl=t.jxl;
new1->js=t.js;
new1->rl=t.rl;
strcpy(new1->xz,t.xz);
strcpy(new1->mon,t.mon);
strcpy(new1->tue,t.tue);
strcpy(new1->wed,t.wed);
strcpy(new1->thu,t.thu);
strcpy(new1->fri,t.fri);
strcpy(new1->sat,t.sat);
strcpy(new1->sun,t.sun);
head=tail=new1;
new1->next=NULL;
while(!feof(fp)) /* 连入链表其余节点 */
{
if(fread(&t,sizeof(struct classroom),1,fp)==1)
{
new1=(add_list *)malloc(sizeof(add_list));
new1->jxl=t.jxl;
new1->js=t.js;
new1->rl=t.rl;
strcpy(new1->xz,t.xz);
strcpy(new1->mon,t.mon);
strcpy(new1->tue,t.tue);
strcpy(new1->wed,t.wed);
strcpy(new1->thu,t.thu);
strcpy(new1->fri,t.fri);
strcpy(new1->sat,t.sat);
strcpy(new1->sun,t.sun);
tail->next=new1;
new1->next=NULL;
tail=new1;
}
}
}
fclose(fp);
return head;
}



int pt,dmt,jt,jf;
int yj,ej,sj,sij,wj;
/* 插入一个教室信息并统计 */
void insert(add_list **head)
{

add_list * new1;
new1=(add_list *)malloc(sizeof(add_list));
system("cls");
printf("\n请输入教学楼编号:");
scanf("%d",&new1->jxl);

if(new1->jxl==1) yj++;
if(new1->jxl==2) ej++;
if(new1->jxl==3) sj++;
if(new1->jxl==4) sij++;
if(new1->jxl==5) wj++;


printf("\n请输入教室编号:"

);
scanf("%d",&new1->js);
printf("\n请输入教室容量:");
scanf("%d",&new1->rl);
printf("\n请输入教室性质:");
scanf("%s",new1->xz);


if(strcmp(new1->xz,"普通教室")==0) pt++;
if(strcmp(new1->xz,"多媒体教室")==0) dmt++;
if(strcmp(new1->xz,"阶梯教室")==0) jt++;
if(strcmp(new1->xz,"机房")==0) jf++;


printf("\n请输入教室周一课程安排:");
scanf("%s",new1->mon);
printf("\n请输入教室周二课程安排:");
scanf("%s",new1->tue);
printf("\n请输入教室周三课程安排:");
scanf("%s",new1->wed);
printf("\n请输入教室周四课程安排:");
scanf("%s",new1->thu);
printf("\n请输入教室周五课程安排:");
scanf("%s",new1->fri);
printf("\n请输入教室周六课程安排:");
scanf("%s",new1->sat);
printf("\n请输入教室周日课程安排:");
scanf("%s",new1->sun);


if(*head==NULL) /* 表头为空时 */
{
*head=new1;
new1->next=NULL;
tail=new1;
}
else /* 插入到表尾 */
{
tail->next=new1;
new1->next=NULL;
tail=new1;
}
printf("输入完成,按回车键返回......");
getchar();
getchar();
}


/* 将通讯录链表中的内容保存到指定文件中 */
void save(add_list *head,char filename[])
{
add_list *p;
struct classroom t;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("错误:不能打开文件%s\n",filename);
exit(1);
}
else
{
p=head;
while(p!=NULL)
{
t.jxl=p->jxl;
t.js=p->js;
t.rl=p->rl;
strcpy(t.xz,p->xz);
strcpy(t.mon,p->mon);
strcpy(t.tue,p->tue);
strcpy(t.wed,p->wed);
strcpy(t.thu,p->thu);
strcpy(t.fri,p->fri);
strcpy(t.sat,p->sat);
strcpy(t.sun,p->sun);
fwrite(&t,sizeof(struct classroom),1,fp);
p=p->next;
}
}
fclose(fp);
printf("保存成功,按回车键返回......");
getchar();
getchar();
}



/*按教学楼编号和教室编号查询信息*/
int searchbh(add_list *head)
{
add_list *p;
int a,b;
int flag=0;
printf("请输入要查找的教学楼编号和教室编号:");
scanf("%d,%d",&a,&b);

p=head;
while(p!=NULL)
{
if(a==p->jxl&&b==p->js)
{
printf("教学楼编号:,教室的编号:,教室德容量:,教室的性质\n:");
printf("%d,%d,%d,%s\n",p->jxl,p->js,p->rl,p->xz);
printf("周一课程安排:%s\n",p->mon);
printf("周二课程安排:%s\n",p->tue);
printf("周三课程安排:%s\n",p->wed);
printf("周四课程安排:%s\n",p->thu);
printf("周五课程安排:%s\n",p->fri);
printf("周六课程安排:%s\n",p->sat);
printf("周日课程安排:%s\n",p->sun);
flag=1;
}
p=p->next;
}
return flag;
}
/*按教室性

质查询信息*/
int searchxz(add_list *head)
{
add_list *p;
char a[40];
int flag=0;
printf("请输入的教室性质:");
scanf("%s",a);

p=head;
while(p!=NULL)
{
if(strcmp(a,p->xz)==0)
{
printf("教学楼编号:,教室的编号:,教室德容量:,教室的性质\n:");
printf("%d,%d,%d,%s\n",p->jxl,p->js,p->rl,p->xz);
printf("周一课程安排:%s\n",p->mon);
printf("周二课程安排:%s\n",p->tue);
printf("周三课程安排:%s\n",p->wed);
printf("周四课程安排:%s\n",p->thu);
printf("周五课程安排:%s\n",p->fri);
printf("周六课程安排:%s\n",p->sat);
printf("周日课程安排:%s\n",p->sun);
flag=1;
}
p=p->next;
}
return flag;
}
/*按教室容量查询信息*/
int searchrl(add_list *head)
{
add_list *p;
int a;
int flag=0;
printf("请输入的教室容量:");
scanf("%d",&a);

p=head;
while(p!=NULL)
{
if(a==p->rl)

{ printf("教学楼编号:,教室的编号:,教室德容量:,教室的性质\n:");
printf("%d,%d,%d,%s\n",p->jxl,p->js,p->rl,p->xz);
printf("周一课程安排:%s\n",p->mon);
printf("周二课程安排:%s\n",p->tue);
printf("周三课程安排:%s\n",p->wed);
printf("周四课程安排:%s\n",p->thu);
printf("周五课程安排:%s\n",p->fri);
printf("周六课程安排:%s\n",p->sat);
printf("周日课程安排:%s\n",p->sun);
flag=1;
}
p=p->next;
}
return flag; }




/* 按教室编号和教学楼编号删除一条教室信息 */
int shanchubh(add_list **head)
{
add_list *p,*q,*t;
char c;
int flag=0 ,a,b;
printf("请输入的教学楼编号和教室编号:");
scanf("%d,%d",&a,&b);

q=p=*head;
while(p!=NULL)
{
if(a==p->jxl&&b==p->js) /* 找到要删除的教室 */
{
printf("教学楼编号:,教室的编号:,教室德容量:,教室的性质:\n");
printf("%d,%d,%d,%s\n",p->jxl,p->js,p->rl,p->xz);
printf("周一课程安排:%s\n",p->mon);
printf("周二课程安排:%s\n",p->tue);
printf("周三课程安排:%s\n",p->wed);
printf("周四课程安排:%s\n",p->thu);
printf("周五课程安排:%s\n",p->fri);
printf("周六课程安排:%s\n",p->sat);
printf("周日课程安排:%s\n",p->sun);
printf("真的要删除吗?(Y:是,N:否)\n"); /* 征求意见(删&不删) */
getchar();c=getchar();
if(c=='y'||c=='Y') /* 删除 */
{
if(p==*head)
*head=p->next;
else
q->next=p->next;
t=p;
p=p->next;
free(t);
flag=1;
}
else /* 不删,

跳过 */
{
q=p;
p=p->next;
flag=1;
}
}
else /* 没找到,继续 */
{
q=p;
p=p->next;
}
}
return flag;
printf("按回车键返回......");
getchar();
}
/* 按教室性质删除一条教室信息 */
int shanchuxz(add_list **head)
{
add_list *p,*q,*t;
char c,a[100];
int flag=0;
printf("请输入教室性质:");
scanf("%s",a);

q=p=*head;
while(p!=NULL)
{
if(strcmp(a,p->xz)==0) /* 找到要删除的教室 */
{
printf("教学楼编号:,教室的编号:,教室德容量:,教室的性质\n:");
printf("%d,%d,%d,%s\n",p->jxl,p->js,p->rl,p->xz);
printf("周一课程安排:%s\n",p->mon);
printf("周二课程安排:%s\n",p->tue);
printf("周三课程安排:%s\n",p->wed);
printf("周四课程安排:%s\n",p->thu);
printf("周五课程安排:%s\n",p->fri);
printf("周六课程安排:%s\n",p->sat);
printf("周日课程安排:%s\n",p->sun);
printf("真的要删除吗?(Y:是,N:否)\n"); /* 征求意见(删&不删) */
getchar();c=getchar();
if(c=='y'||c=='Y') /* 删除 */
{
if(p==*head)
*head=p->next;
else
q->next=p->next;
t=p;
p=p->next;
free(t);
flag=1;
}
else /* 不删,跳过 */
{
q=p;
p=p->next;
flag=1;
}
}
else /* 没找到,继续 */
{
q=p;
p=p->next;
}
}
return flag;
printf("按回车键返回......");
getchar();
}
/* 按课程容量删除一条教室信息 */
int shanchurl(add_list **head)
{
add_list *p,*q,*t;
char c;
int flag=0,a;
printf("请输入教室容量:");
scanf("%d",&a);

q=p=*head;
while(p!=NULL)
{
if(a==p->rl) /* 找到要删除的教室 */
{
printf("教学楼编号:,教室的编号:,教室的容量:,教室的性质:\n");
printf("%d,%d,%d,%s\n",p->jxl,p->js,p->rl,p->xz);
printf("周一课程安排:%s\n",p->mon);
printf("周二课程安排:%s\n",p->tue);
printf("周三课程安排:%s\n",p->wed);
printf("周四课程安排:%s\n",p->thu);
printf("周五课程安排:%s\n",p->fri);
printf("周六课程安排:%s\n",p->sat);
printf("周日课程安排:%s\n",p->sun);
printf("真的要删除吗?(Y:是,N:否)\n"); /* 征求意见(删&不删) */
getchar();c=getchar();
if(c=='y'||c=='Y') /* 删除 */
{
if(p==*head)
*head=p->next;
else
q->next=p->next;
t=p;
p=p->next;

free(t);
flag=1;
}
else /* 不删,跳过 */
{
q=p;
p=p->next;
flag=1;
}
}
else /* 没找到,继续 */
{
q=p;
p=p->next;
}
}
return flag;
printf("按回车键返回......");
getchar();
}

/*统计功能*/
void tongji(add_list *head)
{
int i;
add_list *p;
p=head;
for (i=0;i<1;i++)
{
printf("普通教室的数量为:%d\n",pt);
printf("多媒体教室的数量为:%d\n",dmt);
printf("阶梯教室的数量为:%d\n",jt);
printf("机房的数量为:%d\n",jf);
printf("一教拥有教室的数量为:%d\n",yj);
printf("二教拥有教室的数量为:%d\n",ej);
printf("三教拥有教室的数量为:%d\n",sj);
printf("四教拥有教室的数量为:%d\n",sij);
printf("五教拥有教室的数量为:%d\n",wj);
}

}

int caidan_select()
{
char c;
system("cls");
printf("\t\t********************教室管理系统********************\n");
printf("\t\t\t\ 1:输入新的教室信息\n");
printf("\t\t\t\ 2:按教室编号和教学楼编号删除信息\n");
printf("\t\t\t\ 3:按教室性质删除信息\n");
printf("\t\t\t\ 4:按教室容量删除信息\n");
printf("\t\t\t\ 5:按教学楼编号和教室编号查找\n");
printf("\t\t\t\ 6:按教室性质查找\n");
printf("\t\t\t\ 7:按教室容量查找\n");
printf("\t\t\t\ 8:统计功能\n");
printf("\t\t\t\ 9:保存文件\n");
printf("\t\t\t\ 0:退出\n");
do{
printf("请输入你的选择(0~~9):");
c=getchar();
}while(c<'0'||c>'9');
return c;
}
void chushihua(add_list *head,char filename[])
{
add_list *p;
struct classroom t;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("错误:不能打开文件%s\n",filename);
exit(1);
}
else
{
p=head;
while(p!=NULL)
{


strcpy(p->mon,'\0');
strcpy(p->tue,'\0');
strcpy(p->wed,'\0');
strcpy(p->thu,'\0');
strcpy(p->fri,'\0');
strcpy(p->sat,'\0');
strcpy(p->sun,'\0');
fwrite(&t,sizeof(struct classroom),1,fp);
p=p->next;
}
}
fclose(fp);
printf("初始化成功,按回车键返回......");
getchar();

}


/* 主函数 */
void main()
{
char filename[20];
char c,d;
int t,n=1;
printf("\n\n\n\n\n\n\t\t\t\t通讯录启动中...\n\n\n\n\n\n\n\n\n\n\n\n\n");
system("cls");
printf("请输入教室管理系统的名称:");
scanf("%s",filename);
getchar();
printf("是否初始化?(Y:是,N:否)\n");
d=getchar();
getchar();
if(d=='y'||d=='Y') chushihua(head,filename);
getchar();



head=load(filename);
while(1)
{
c=caidan_select();
switch(c)
{
case

'1': insert(&head); break;
case '2': t=shanchubh(&head);
if(!t)
printf("不好意思您输错了\n按回车键返回......");getchar();getchar(); break;
case '3': t=shanchuxz(&head);
if(!t)
printf("不好意思您输错了\n按回车键返回......");getchar();getchar(); break;
case '4': t=shanchurl(&head);
if(!t)
printf("不好意思您输错了\n按回车键返回......");getchar();getchar(); break;
case '5': t=searchbh(head);
if(!t)
printf("不好意思您输错了\n按回车键返回......");getchar();getchar(); break;
case '6': t=searchxz(head);
if(!t)
printf("不好意思您输错了\n按回车键返回......");getchar();getchar(); break;
case '7': t=searchrl(head);
if(!t)
printf("不好意思您输错了\n按回车键返回......");getchar();getchar(); break;
case '8': tongji(head);
case '9': save(head,filename); break;
case '0': exit(0);

}
}
}

相关文档
最新文档