搜档网
当前位置:搜档网 › c语言课程设计机房机位预定系统绝对正确,附源代码

c语言课程设计机房机位预定系统绝对正确,附源代码

c语言课程设计机房机位预定系统绝对正确,附源代码
c语言课程设计机房机位预定系统绝对正确,附源代码

1 设计目的

机房机位预定系统

2 任务概述

20台机器,编号1到20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。功能要求:

(1)系统以菜单方式工作

(2)查询,根据输入时间,输出机位信息。(3)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。

(4)退出预定,根据输入的时间,机器号撤销该事件的预定!

(5 )查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。

3 模块划分

4 主要函数说明及其N-S 图

1. 主函数:

int main() {

Menu(); /* 当前状态函数*/ }

void Menu() /* 主界面*/

{

int n,w;

do

puts("\t\t*

puts("\t\t* 机房机位预约系统*\n");

**\n");

puts("\t\t\t 1.

puts("\t\t\t 2. puts("\t\t\t 3. puts("\t\t\t 4. puts("\t\t\t 5.查询某时间段机位状态"); /* 查询某时间段机位状态*/ 预定空机位"); /* 预定空机位*/ 取消预订"); /* 取消预订*/

查询等待信息"); /* 查询等待信息*/

退出"); /* 退出*/

puts("\t\t*

******************************************************

printf(" 选择菜单号(1-5):");

scanf("%d",&n);

if(n<1||n>5)

{w=1;getchar();} else w=0;

}while(w==1);

switch(n)

{

case 1:Situation();break;

case 2:Book();break;

case 3:Cancel();break;

case 4:SearchWaiting();break;

case 5:exit(0);break;

}

getch();

}

2. 机位查询: void Situation() { int time; printf(" 输在(8-20) 范围内的时间:"); scanf("%d",&time);

if(time<8||time>20)

{printf("\t 时间输入错误!\n"); printf(" 输入在(8-20) 范围内的时间:");

scanf("%d",&time);

}

detail(time); /* 函数调用*/ getchar();

Menu();}

3. 机位预定: void Book() {int time,i=0,x,y;

FILE *fp;

char c;

printf(" 在(8-20) 时间范围内输入你想要预定的时间:"); scanf("%d",&time);

if(time<8||time>20)

{

printf("\t 时间输入错误!\n");

printf("\t 在(8-20) 时间范围内输入你想要预定的时间:");

scanf("%d",&time);

}

detail(time); /* 函数调用*/ if(sum[T]>0)

{ if((fp=fopen("waitlist.txt","a"))==NULL)

{

printf("\n 无法打开文件!\n"); exit(0);

printf("\n\t 请输入你想要预定的机号,并且留下你的电话号码!:\n");

scanf("%s %s",wait[i].number,wait[i].telephonenumber);

for(i=0;i<1;i++)

fwrite(&wait[i],sizeof(struct waitlist),1,fp);

fclose(fp);/* 向文本文档添加一个结构体单元*/ printf("\t 再次输入你想要预定的时间!\n"); scanf("%d",&x);

/*sum[T]--; / * 预定后该时间段空机位数减1*/

/*computer[T][x]=1; / * 预定后该机状态变为1*/ printf("\t 预订成功!\n");

getchar();

Menu();

}

else

{

printf(" 这是在这个时间段内未预定的电脑!\n");

for(i=T+1;i<6;i++)

{ time=9+2*i;

detail(time); /* 函数调用*/

if(sum[T]>0)

printf("\tThe latest free time is %d,%d\n",2*i+8,2*i+10);break; }

printf("\t 你想要预定吗?:y/n?");

scanf("%s",&c);

getchar();

if(c=='Y'||c=='y')

{

if((fp=fopen("waitlist.txt","r"))==NULL)

{

printf("\n 无法打开文件!\n");

exit(0);

}

else

{ printf("waitlist :number telephonenumber\n"); for(i=0;!feof(fp);i++)

{

fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);

}

fclose(fp);

}

for(i=0;i<10;i++)

{ prione(i);}

printf("\n\t 请输入你想要预定的机号,并且留下你的电话号码!:\n");

if((fp=fopen("waitlist.txt","a"))==NULL)

{

printf("\n 无法打开文件!\n");

exit(0);

}

scanf("%s %s",wait[i].number,wait[i].telephonenumber); for(i=0;i<1;i++)

fwrite(&wait[i],sizeof(struct waitlist),1,fp);

fclose(fp); /* 若等待,就用文件的方式列出当时的等待

表并提示输入你的等待序号和联系方式*/

printf(" 再次输入电脑的序号!\n");

scanf("%d",&y);

sum[T]--;

computer[T][y]=1;

printf("\t 好了, 请等待我们的电话!\n");

Menu();

}

else Menu();

}

4. 取消预定: void Cancel() {int time,number;

printf(" 在(8-20) 时间范围内输入你已经预定的时间:"); scanf("%d",&time);

if(time<8||time>20)

{

printf("\t 输入时间错误!\n");

printf("\t 在(8-20) 时间范围内输入你已经预定的时间:"); scanf("%d",&time);

} else

{printf("\t 输入你预定的机号:"); scanf("%d",&number);} detail(time);

/* sum[T]++; / * 预定后该时间段空机位数加1*/

/*computer[T][number]=0; / * 预定后该机状态变为0*/

printf("\t 取消成功!\n"); getchar();

Menu();

5. 查询等待信息:

void SearchWaiting()

{

int time,i;

FILE *fp;

printf("\tInput time you want to search between(8-20):");

scanf("%d",&time);

if(time<8||time>20)

{

printf("\tWrong time!\n");

printf("\tInput time you want to search between(8-20):"); scanf("%d",&time);

}

else

if((fp=fopen("waitlist.txt","r"))==NULL)

{

printf("\nCannot open file!\n");

exit(0);

}

else

{ printf("waitlist

number telephonenumber\n");

for(i=0;!feof(fp);i++)

{

fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);

}

fclose(fp);

}

for(i=0;i<10;i++) { prione(i);} Menu();

}

5 程序运行数据及其结果

1.主菜单:

2. 机位查询:

4. 查询等待信息:

6 课程设计心得

课程设计是培养学生综合运用所学知识, 发现, 提出,分析和解决实际问题,锻炼实践能

力的重要环节, 是对学生实际工作能力的具体训练和考察过程. 随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握一些基本的软件开发技术是十分重要和必要的。

回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力

,这样才能真正为体会和认识它,才能写出一个完整的程序代码,才能使自己在过程中得到锻炼和提高。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问

题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体的建立, 指针的应用等都不太熟练。通过这次课程设计,也使我对以前所学过的知识重新温故和加强。

程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么; 其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法;最后可得结论。

通过这次课程设计,我深刻地体会到:

<1>. 细节决定成败:在学习的过程中,要注意每一个细节,要知道一个分隔符或一个括号都会使整个程序出现错误。

<2>. 要熟练掌握一些经典的结构和方法,如选择排序,递归,递推等,在遇到问题是可直接应用,快速解决问题。

<3>. 要熟悉一些标准数据库,对一些可直接利用的函数就直接利用,没必要重新定义。

<4>. 在设计过程中最好使程序模块化,既便于阅读,也可增加其移植性。

<5>. 熟能生巧。平时应该多加训练,要知道,即使我们能完全看懂一个程序,但要让你自己写出一个时仍是很困难的。它要求你对每一个语句,每一个变量,每一个函数,每一个模块都充分的熟悉,要知道它们的作用,作用域等等。因此只有平时做的多了,到时候才会游刃有余。

一个多礼拜中, 我有过山穷水尽的困惑;有过柳暗花明的惊喜;一个多礼拜的时间我经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考

验。经过这次课程设计,我不仅学到了很多知识和技能, 更重要的是我学会了如何运用所学知识去解决实际问题.

附录:

#include

#include

#include

#define N 20

#define T (time-8)/2

int sum[6]={0};

int computer[6][20]={{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1},

{1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1},

{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},

{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,1},

{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0},

{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1}};/* 该数组表示假设某天某人查询时机房各个时间段机位数情况*/

void Menu();

void Situation();

void Book();

void Cancel();

void SearchWaiting();

void detail(int time);

void prione(int i);

struct waitlist /* 等待列表*/ {

char number[3];

char telephonenumber[11];

} wait[N];

void printone(int i);

int main()

{

Menu(); /* 当前状态函数*/

}

void Menu() /* 主界面*/

{

int n,w;

do

{

puts("\t\t****************机房机位预约系统************************\n");

puts("\t\t*************************菜单***************************\n");

puts("\t\t\t 1.查询某时间段机位状态"); /* 查询某时间段机位状态*/

puts("\t\t\t 2.预定空机位"); /* 预定空机位*/

puts("\t\t\t 3.取消预订");/* 取消预订*/

puts("\t\t\t 4.查询等待信

息"); /* 查询等待信息*/

puts("\t\t\t 5.退出"); /*退出*/

printf(" 选择菜单号(1-5):");

scanf("%d",&n); if(n<1||n>5) {w=1;getchar();} else w=0;

}while(w==1);

switch(n)

{

case 1:Situation();break;

case 2:Book();break;

case 3:Cancel();break;

case 4:SearchWaiting();break;

case 5:exit(0);break;

}

getch();

}

/* 时间查询*/

void Situation() int time;

printf(" 输在(8-20) 范围内的时间:"); scanf("%d",&time);

if(time<8||time>20) {printf("\t 时间输入错误!\n"); printf(" 输入在(8-20) 范围内的时间:");

scanf("%d",&time);

} detail(time); /* 函数调用*/ getchar();

Menu();

}

/* 预定函数*/ void Book() {int time,i=0,x,y;

puts("\t\t* *\n" );

FILE *fp;

char c;

printf(" 在(8-20) 时间范围内输入你想要预定的时间:"); scanf("%d",&time);

if(time<8||time>20)

{

printf("\t 时间输入错误!\n");

printf("\t 在(8-20) 时间范围内输入你想要预定的时间:");

scanf("%d",&time);

}

detail(time); /* 函数调用*/ if(sum[T]>0)

{ if((fp=fopen("waitlist.txt","a"))==NULL)

{

printf("\n 无法打开文件!\n");

exit(0);

}

!:\n");

printf("\n\t 请输入你想要预定的机号,并且留下你的电话号码

scanf("%s %s",wait[i].number,wait[i].telephonenumber);

for(i=0;i<1;i++) fwrite(&wait[i],sizeof(struct waitlist),1,fp); fclose(fp);/* 向文本文档添加一个结构体单元*/ printf("\t 再次输入你想要预定的时间!\n"); scanf("%d",&x);

/*sum[T]--; / * 预定后该时间段空机位数减1*/ /*computer[T][x]=1; / * 预定后该机状态变为1*/ printf("\t 预订成功!\n"); getchar();

Menu();

}

else

{

printf(" 这是在这个时间段内未预定的电脑!\n"); for(i=T+1;i<6;i++)

{ time=9+2*i;

detail(time); /* 函数调用*/ if(sum[T]>0)

printf("\t 最近的空闲时间是%d,%d\n",2*i+8,2*i+10);break; }

printf("\t 你想要预定吗?:y/n?"); scanf("%s",&c); getchar();

if(c=='Y'||c=='y')

{ if((fp=fopen("waitlist.txt","r"))==NULL)

{

printf("\n 无法打开文件!\n"); exit(0);

}

else

{ printf("waitlist :number telephonenumber\n"); for(i=0;!feof(fp);i++)

{

fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);

} fclose(fp);

} for(i=0;i<10;i++) { prione(i);}

printf("\n\t 请输入您想预定的机号并留下您的联系方式!:\n");

if((fp=fopen("waitlist.txt","a"))==NULL)

{

printf("\n 无法打开文件!\n"); exit(0);

}

scanf("%s %s",wait[i].number,wait[i].telephonenumber);

for(i=0;i<1;i++) fwrite(&wait[i],sizeof(struct waitlist),1,fp); fclose(fp); /* 若等待,就用文件

的方式列出当时的等待列

表并提示输入你的等待序号和联系方式*/ printf(" 再次输入电脑的序号!\n"); scanf("%d",&y); sum[T]--; computer[T][y]=1;

printf("\t 好了, 请等待我们的电话!\n");

Menu();

}

else Menu();

}

}

/* 取消预订*/

void Cancel()

{

int time,number;

printf(" 在(8-20) 时间范围内输入你已经预定的时间:"); scanf("%d",&time);

if(time<8||time>20)

{

printf("\t 输入时间错误!\n");

printf("\t 在(8-20) 时间范围内输入你已经预定的时间:");

scanf("%d",&time);

}

else

{printf("\t 输入你预定的机号:");

scanf("%d",&number);}

detail(time);

/* sum[T]++; / * 预定后该时间段空机位数加1*/

/*computer[T][number]=0; / * 预定后该机状态变为0*/

printf("\t 取消成功!\n");

getchar();

Menu();

}

/* 查看等待信息*/

void SearchWaiting()

{

int time,i;

FILE *fp;

printf("\t 在(8-20) 之间输入您要搜索的时间:");

scanf("%d",&time);

if(time<8||time>20)

{

printf("\t 时间输入错误!\n");

printf("\t 在(8-20) 之间输入您要搜索的时间:"); scanf("%d",&time);

}

else

if((fp=fopen("waitlist.txt","r"))==NULL)

{

printf("\nCannot open file!\n");

exit(0);

}

else

{ printf("waitlist :number telephonenumber\n"); for(i=0;!feof(fp);i++)

{

fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);

}

fclose(fp);

}

for(i=0;i<10;i++)

{ prione(i);}

Menu();

}

/* 公共函数*/

void detail(int time) /* 此函数功能是实现查找每个时间段空机位总数和空机位号*/ {

int i,j=0,k,s=0;

int v[30];

for(i=0;i<20;i++)

{ if(computer[T][i]==0)

{ s++;

v[j++]=i;

}

}

sum[T]=s;

printf("\t 目前空置的电脑:%d\n",sum[T]);

for(k=0;k

printf("\t 空置的电脑是:%d\n",v[k]);

void prione(int i) /* 此函数功能是实现输出等待列表到屏幕*/ { printf("\t\t%s %s \n",wait[i].number,wait[i].telephonenumber);}

如有侵权请联系告知删除,感谢你们的配合!

相关主题