详细设计说明书
目录
一.基本情况概述... 3
1.用户名
2. 基本说明
3. 背景
4.编写目的
5.主要参考资料
二.软件详解... 4
1.设计流程图
2.软件主要功能
3.软件各模块
三.测试分析... 5
1.限制条件
2.出现的问题
四.源代码解析... 6
一.基本情况概述
- 用户名:GCGLDEXZ
(工程概论第二小组)
2.基本说明:
a、软件系统的名称:羽毛球场馆预订及查询系统(Badminton venue booking and enquiry system)
b、本项目的任务提出者:
本项目的开发者:
本项目的用户:在校学生,教师,校园游客
3.背景:
当前羽毛球场馆预订查询及预订较为麻烦,且网络卡顿较为严重,很难预订成功
4.编写目的:
本详细设计说明书是针对羽毛球场馆预订及查询系统(Badminton venue booking and enquiry system)的项目编写。目的是对该项目进行详细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,为进行后面的实现和测试做准备。本详细设计说明书的预期读者为本项目小组的成员以及对该小程序感兴趣,在以后想对系统进行拓展和维护的人员。
5.主要参考资料:
CSDN博主liu_rong_fei《c语言开发窗口应用程序》
二.软件详解
1.设计流程图:
2.软件主要功能:
3.软件各模块:
(1).查询模块:
a.直接查询:可以直接查询本周任何时间段的空闲状况
b.输出查询:可以直接输出本周所有空闲时间段
(2).预订模块:
a.直接预订:可以直接预订本周任何空闲时间段
b.辅助预订:可以结合课表输出本周可选时间段
三.测试分析
1.限制条件
a.需要提前录入课表及初始场地空闲状况
答:考虑过用户直接输入课表与初始场地空闲状况以提高软件实时性,但用户反映太过麻烦,于是改成了提前录入课表及初始场地空闲状况这种模式
b.必须按照系统提示输入数字否则程序会进入死循环
答:虽然参考了CSDN博主的帖子,但是开发者暂时无法解决这个问题。
2.出现的问题:
(1).预订系统中已预订的场次虽然在查询时显示已被预订,但是在输出所有空闲场次时依然出现
答:重编预订函数与查询函数,将两者串联
(2). 不按照系统提示输入数字程序会进入死循环或者得出错误结果
例如:
答:虽然参考了CSDN博主的帖子,但是开发者暂时无法解决这个问题。
(3).使用太多跳转函数,修改时非常麻烦:
答:第一次编写这种程序,下次注意。
四.源代码解析
#include <stdio.h>
#include<windows.h>
#include<conio.h>
#include<string.h>
void color(short x) //控制台变色函数
{
if (x >= 0)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int yuding2(int guozuori[][3],int zhoumo[][13],int ke[][5]) //输出所有无课时间段中空闲场次
{
while(1)
{
system("cls"); //系统清屏函数
printf("所有无课时间段中空闲场次:\n");
int i=0,j,k,f,a,b,c,h;
for(j=0;j<5;j++)
{
for(k=0;k<3;k++)
if(ke[i][j]==0&&guozuori[j][k]==0) printf("周%d %d:00~%d:00\n",j+1,k+18,k+19);
}
for(i=1;i<3;i++)
{
for(j=0;j<2;j++)
if(ke[i][0]==0&&zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
for(j=2;j<4;j++)
if(ke[i][1]==0&&zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
for(j=4;j<6;j++)
if(zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
for(j=6;j<8;j++)
if(ke[i][2]==0&&zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
for(j=8;j<10;j++)
if(ke[i][3]==0&&zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
for(j=10;j<11;j++)
if(zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
for(j=11;j<13;j++)
if(ke[i][4]==0&&zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
} //条件+循环语句控制
printf("\n\n选择预订场次请输入1,返回预订系统请输入2\n");
scanf("%d",&f);
return f;
}
}
int yuding(int guozuori[][3],int zhoumo[][13],int ke[][5]) //预订主函数
{
int f,a,b,c,h,F=0;
while(1) //控制循环
{
Beggn: system("cls");
printf("欢迎使用羽毛球场馆预订系统\n");
Began6: printf("直接预订请输入1,输出所有无课时间段中空闲场次请输入2,返回上一级请输入3\n");
scanf("%d",&f); //选择功能
if(f==1)
{
while(1)
{
Began: system("cls");
Begin1: printf("请输入所要预订的时间段(eg:1 18:00~19:00(周一晚上六点至七点))\n");
scanf("%d %d:00~%d:00",&a,&b,&c);
if(c!=b+1) {MessageBox(0,"请输入正确时间","预订系统",0);goto Began;}
if(a>=1&&a<=5) if(b>=18&&b<=20){if(guozuori[a-1][b-18]==0) {MessageBox(0,"预订成功","预订系统",0);guozuori[a-1][b-18]=1;}else MessageBox(0,"该场地已被预订,请选择其他场次","预订系统",0);}else {MessageBox(0,"请输入正确时间","预订系统",0);goto Began; }
if(a>=6&&a<=7) if(b>=8&&b<=20){if(zhoumo[a-6][b-8]==0) {MessageBox(0,"预订成功","预订系统",0);zhoumo[a-6][b-8]=1;}else MessageBox(0,"该场地已被预订,请选择其他场次","预订系统",0); }else {MessageBox(0,"请输入正确时间","预订系统",0);goto Began;}
if(a<=0||a>7) {MessageBox(0,"请输入正确时间","预订系统",0);goto Began;}
printf("\n\n继续预订请输入1,退出直接预订输入2\n");
Began1: scanf("%d",&h);
if(h==2) break;
if(h==1) {printf("\n");}
if(h!=1&&h!=2) {MessageBox(0,"请输入正确数字","预订系统",0);printf("\n");goto Began1;} //预订功能
}
}
if(f==2)
{
Began2: f=yuding2(guozuori,zhoumo,ke);
if(f!=1&&f!=2) {MessageBox(0,"请输入正确数字","预订系统",0);printf("\n");goto Began2;}
if(f==1) {printf("\n\n");goto Begin1;}
if(f==2) goto Beggn;
}
if(f==3) {F=1;return F; }
if(f!=1&&f!=2&&f!=3) {MessageBox(0,"请输入正确数字","预订系统",0);printf("\n");goto Began6;} //返回主函数
}
}
int chaxun(int guozuori[][3],int zhoumo[][13],int ke[][5]) //查询函数
{
int a,b,c,f,F=0,h;
while(1)
{
Begin: system("cls");
printf("欢迎使用羽毛球场馆查询系统\n");
Began4: printf("查询单个场次请输入1,输出所有空闲场次请输入2,返回上一级请输入3\n");
scanf("%d",&f);
if(f==1) //条件语句
{
while(1)
{
system("cls");
printf("请输入所要查询的时间段(eg:1 18:00~19:00(周一晚上六点至七点))\n");
scanf("%d %d:00~%d:00",&a,&b,&c);
if(c!=b+1) {MessageBox(0,"请输入正确时间","查询系统",0);goto Begin;}
if(a>=1&&a<=5) if(b>=18&&b<=20){if(guozuori[a-1][b-18]==0) MessageBox(0,"该场地空闲","查询系统",0);else MessageBox(0,"该场地已被预订","查询系统",0);}else {MessageBox(0,"请输入正确时间","查询系统",0);goto Begin; }
if(a>=6&&a<=7) if(b>=8&&b<=20){if(zhoumo[a-6][b-8]==0) MessageBox(0,"该场地空闲","查询系统",0);else MessageBox(0,"该场地已被预订","查询系统",0); }else {MessageBox(0,"请输入正确时间","查询系统",0);goto Begin;}
if(a<=0||a>7) {MessageBox(0,"请输入正确时间","查询系统",0);goto Begin;}
printf("\n\n继续查询请输入1,退出查询系统输入2\n");
scanf("%d",&h);
if(h==2) break;
if(h!=1&&h!=2) MessageBox(0,"请输入正确数字","查询系统",0);
}
}
if(f==2)
{
while(1)
{
system("cls");
printf("所有空闲场次:\n");
int i=0,j,k,f,h;
for(j=0;j<5;j++)
{
for(k=0;k<3;k++)
if(guozuori[j][k]==0) printf("周%d %d:00~%d:00\n",j+1,k+18,k+19);
}
for(i=1;i<3;i++)
{
for(j=0;j<13;j++)
if(zhoumo[i-1][j]==0) printf("周%d %d:00~%d:00\n",i+5,j+8,j+9);
}
printf("\n\n返回查询系统请输入1,进入预订系统请输入2\n");
scanf("%d",&f);
if(f==1) goto Begin;
if(f==2) yuding(guozuori,zhoumo,ke); //跳转函数与控制
}
}
if(f==3) {F=1;return F; } //返回上一级
if(f!=1&&f!=2&&f!=3) {MessageBox(0,"请输入正确数字","预订系统",0);printf("\n");goto Began4;}
}
}
int main() //主函数
{
char str[9]="GCGLDEXZ",yonghu[9]; //用户名
int f,h,guozuori[5][3]={0},zhoumo[2][13]={0},ke[3][5]={0}; //课表及初始场地状况录入
system("color F0");
LOOP: color(249); //控制台色号选择
printf("羽毛球场馆查询及预订系统说明:\n本系统提供当周羽毛球场馆查询及预订功能,其中查询功能分为查询单个场次和输出所有空闲场次,预订功能分为直接预订和输出无课时间段中的空闲场次");
printf("\n注:本系统需要提前录入课表及初始场地空闲状况,默认无课与场地初始全空闲态\n");
color(244);
printf("请输入用户名以使用本系统:\n");
gets(yonghu);
if(strcmp(str,yonghu)==0)
{
while(1)
{
system("cls");
color(244);
LOOQ: printf("欢迎使用羽毛球场馆查询及预订系统\n");
printf("羽毛球馆仅在工作日18:00~21:00及周末8:00~21:00开放\n");
Began2: printf("进入查询系统请输入1,进入预订系统请输入2,结束进程请输入3\n"); //欢迎使用!!!
scanf("%d",&f); //各主要功能实现
if(f==1)
{
h=chaxun(guozuori,zhoumo,ke);
if(h==1) {system("cls");goto LOOQ; }
}
if(f==2)
{
h=yuding(guozuori,zhoumo,ke);
if(h==1) {system("cls");goto LOOQ; }
}
if(f==3) break;
if(f!=1&&f!=2&&f!=3) {MessageBox(0,"请输入正确数字","主系统",0);system("cls");goto LOOQ;}
}
}
else
{
MessageBox(0,"用户名无权使用,请重新输入","登陆界面",0); //抱歉啦!
system("cls");
goto LOOP;
}
}