- 需求分析:
机房上机管理系统大致需要以下几项功能
- 输入功能:输入若干名学生的学号,班级姓名,开始上机时间和结束上机时间。
- 修改功能:修改学生上机的个人档案(如增添)
- 查询功能:按条件,班级,学号,姓名查询,学生上机信息,并能显示查询学生的相应全部档案
- 显示功能:显示全部机器的使用信息
- 概要设计:
设计系统使得以上功能全部涵盖
- 详细设计:
程序源码
#include<stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct time
{int hour;
int minute ;
int second ; } ;
typedef struct
{char num[20] ;
char banji;
int flag;
char name[20];
struct time kaishi, jiesu;
}Student;
Student stu[50] ;
struct computer
{int f;
Student stut;
} com[30];
int k;
int main_menu ()
{char c;
do
{system("cls");
printf("\t ——机房上机管理系统—— \n");
printf("\t | 1.输入学生信息 | \n");
printf("\t | 2.上机时间 | \n");
printf("\t | 3.下机时间 | \n");
printf("\t | 4.电脑使用情况显示 \n");
printf("\t | 0.退出系统 | \n");
printf("\t ——————— \n");
printf("\t请选择菜单序号(0-5): ");
c=getchar();
}while(c<'0'||c>'5');
return(c-'0' ) ;}
int input(Student stu[], int n)
{int i=0;
char sign='0';
while(sign!='n'&&sign!='N')
{getchar() ;
printf("\n\t\t 学号:");
gets(stu[n+i].num);
printf("\t \t班级:");
scanf("%s" ,&stu[n+i].banji);
getchar () ;
printf("\t \t 姓名:");
gets(stu[n+i].name);
printf("\t\t 继续输入?是请按Y,否请按N:");
scanf("%c" ,&sign);
stu[n+i].flag=0;
i++;
}
return(n+i) ;
}
void shangji (Student stu[],int n)
{char num_t[20], name_t [20];
int i,s ;
do
{printf("\n\t\t使用姓名输入 1\n\t\t使用学号输入 2\n\t\t请输入序号:");
scanf("%d" ,&s);
} while(s!=1&& s !=2) ;
getchar( ) ;
if(s==1)
{printf("\t\t 请输入姓名:");
gets(name_t);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,name_t)==0)
break ; }
else
{printf("\t \t 请输入学号:");
gets(num_t);
for(i=0;i<n;i++)
{if(strcmp(stu[i].num,num_t)==0)
break;
}
}
if(i==n)
{printf("\t \t无该生记录!请输入该生信息后再上机! \n");
return;}
else if(stu[i].flag==1)
{printf("\t\t该生正在上机! \n");
return; }
else
{for (k=0;k<30 ;k++)
{if(com[k].f==0)
{com[k].f=1;
printf("\t\t请输入上机时间(当前时间):");
scanf("%d:%d:%d",&stu[i].kaishi.hour,&stu[i].kaishi.minute,&stu[i]. kaishi.second) ;
stu[i].flag=1 ;
com[k].stut=stu[i];
break;
}
}
if(k==30)
printf("\t\t机器全部使用中,请稍后再上机! \n");
}
}
void xiaji(Student stu[],int n)
{char num_t[20], name_t[20] ;
int i, s ;
do
{printf("\n\t\t使用姓名输入 1\n\t\t使用学号输入2\n\t\t请输入序号:");
scanf("%d",&s);
}while(s!=1&&s !=2);
getchar () ;
if(s==1)
{printf("\t\t请输入姓名:");
gets (name_t);
for(i=0;i<n;i++)
{if(strcmp(stu[i].name, name_t)==0)
break;
}
}
else
{printf("\t\t请输入学号:");
gets(num_t);
for(i=0;i<n;i++)
{if(strcmp(stu[i].num, num_t)==0)
break ;
}
}
if(i==n)
{printf("\t\t没有这个学生! \n");
return;
}
else if(stu[i].flag==0)
{printf("\t\t 该生未上机或已下机! \n");
return;
}
else
{printf("\t\t 请输入下机时间(当前时间):");
scanf("%d:%d:%d",&stu[i].jiesu.hour,&stu[i].jiesu.minute,&stu[i].jiesu. second);
stu[i].flag=0;
for (k=0 ;k<3;k++)
{if(strcmp (com[k].stut.num, stu[i].num)==0)
{com[k].f=0;
break;
}
}
}
}
void chaxun(Student stu[], int n)
{char num_t[20], name_t[20];
int i, s ;
do
{printf("\n\t\t 使用姓名输入 1\n\t\t 使用学号输入2\n\t\t请输入序号:");
scanf("%d",&s);
}while(s!=1&&s !=2);
getchar () ;
if(s==1)
{printf("\t\t 请输入姓名:");
gets (name_t) ;
for(i=0;i<n;i++)
{if(strcmp(stu[i ].name, name_t)==0)
break;}
}
else
{printf("\t\t 请输入学号:");
gets (num_t);
for(i=0;i<n;i++)
{if(strcmp(stu[i].num, num_t)==0)
break;
}
}
if(i==n)
{printf("\t\t记录无此学生! \n");
return;
}
else if(stu[i].flag==1)
{printf("\t\t该生正在上机 ,上机起始时间为:%d;%d:%d\n",stu[i].kaishi.hour, stu[i].kaishi.minute,stu[i].kaishi.second) ;
}else
printf("\t\t该生未上机或下机! \n") ;
}
void qingkuang()
{ printf("\t机器号 是否使用 使用者 学号 班级 上机时间\n");
printf(" \t--------------------------------------------------------\n") ;
for(k=0 ;k<30 ;k++)
{if(com[k].f==0)
printf("\t%02d 否--------:--:--\n",k+1);
else
printf("\t%02d 是 %-10s %-10s %2s %02d : %02d:%02d\n",k+1, com[k].stut.name,com[k].stut.num,com[k].stut.banji,com[k].stut.kaishi.hour, com[k].stut.kaishi.second);
}
printf("\t");
system("pause");
}
int main()
{int n=0 ;
for(k=0 ;k<30 ; k++)
com[k].f=0 ;
for(;;)
{switch(main_menu())
{case 1:
system("cls") ;
printf ("********************输入学生信息********************\n") ;
n=input(stu, n);
break;
case 2:
system("cls") ;
printf("*******************学生上机********************\n") ;
shangji (stu, n);
printf("\t \t");
system("pause");
break;
case 3:
system("cls");
printf("***********************学生下机*************************\n") ;
xiaji(stu, n);
printf("\t \t");
break ;
case 4:
system ("cls") ;
printf("********************电脑使用情况显示********************\n");
qingkuang ();
break;
case 0:
system("cls");
printf("********************感谢使用机房收费管理系统,欢迎下次使用********************!");
printf("\t \t");
system("pause");
exit(0);
}
}
return 0;}