资源描述
目录
一. 设计内容
二. 设计规定
(1)题目规定
(2)输入/输出规定
三. 整体设计思路
四. 流程图
(1)层次模块图
(2)空机号查询N—S图
五.主函数及功能菜单阐明
六.各模块简要阐明
七.心得体会
附录
一. 源程序代码
二. 各模块运营成果截图
一:设计内容
题目:机房管理系统
设计机房管理系统,规定由菜单进行管理。
(1)上机前先检查与否有空机位,有则将其显示出,无则提示无空位。
(2)尚有空位置时,运营进入,并记录下位置号以及序号,与上机时间。
(3)可对上机者上机信息进行查询,修改与删除。
(4)设计有关模块,显示上机者上机费用。
(5)显示所有上机者上机信息。
二:设计规定
题目规定:
(1) 为各项操作功能设计一种菜单。应用程序运营后,先显示这个菜单,然后顾客通过菜单项选取但愿进行操作项目。
(2) 规定以上功能分别用函数实现。
输入/输出规定:
(1) 应用程序运营后,先显示一种菜单,然后顾客依照需要选取相应操作项目。进入每个操作后,依照程序提示输入相应信息。
(2) 规定顾客输入数据时,要给出清晰、明确提示信息,涉及输入数据内容、格式及结束方式等。
三:整体设计思路
在设计该程序时,要将系统不同功能提成各个模块。每个模块由一种函数定义,整个程序由函数调用来实现。每个模块是一种子函数,由一种主函数调用各个子函数。在定义子函数时,依照不同功能选取不同语句,如需要使用循环时可以用“do……while”来实现;需要使用选取时可以用“switch”或“if”语句来实现等。
设计以菜单方式工作机房管理系统,重要涉及六个模块,分别是上机者信息输入模块,上机者信息查询模块,上机者信息修改模块,上机者信息删除模块,上机者上机费用计算模块,所有上机者信息显示模块。每个模块由成员相应完毕。此外考虑到机房特殊规定,新增一种上课模式,此模式功能是将所有机子启动,统一赋上上机者有关信息,避免管理员一种一种给机子输入信息。
本系统程序核心在于一种空机位检索,亦是本程序核心之所在。本程序是通过给StudentList[time]赋值为0或1分别实现空机号判断。0代表无人上机,及为空机号,反之1代表有人上机,及不为空机号。
本程序通过定义构造体,涉及姓名[name],机号[seat],学号[stu_num],上机时间[time]四个成员。详细如下;
Struct student_info{char name[10];
int seat;
Long stu_num;
int time;}
四:流程图
层次模块图
主菜单
退出系统
上课模式模块
显示所有上机信息模块
显示上机费用模块
删除上机信息模块
修改上机信息模块
查询上机状况模块
空机号查询模块
学生信息输入模块
空机号查询N—S图
i=0,k=0
for(i=0;i<80;i++)
StudentList[i].time==0
Y N
输出i; Y k==0 N
K=1 输出
“无空机位”
空机号检索是本程序核心,本程序其他几种模块皆是通过先对空机号判断然后进行下去(及先对StudentList[time]值进行0或1判断)。例如“显示所有上机信息模块”,咱们小组通过一种for循环语句,从机号0—79号逐个判断,符合条件则将其输出。而判断原则就是if(StudentList[i].time!=0)。N—S图如下所示:
i=0
for(i=0;i<80;i++)
StudentList[i].time!=0
Y N
输出上机信息 不输出
其他模块类似,流程图省略。
五:主函数及功能菜单阐明
在主函数之前,咱们一方面定义了一种构造体,同步进行了有关函数声明。其中,构造体涉及:姓名[name],机号[seat],学号[stu_num],上机时间[time]四个成员。在主函数中,咱们定义了一种变量j,通过一种for循环语句,从j=0到j=80,分别给所有机子编号,同步给所有机子上机时间赋以初值0,即:
for(j=0;j<80;j++)
{StudentList[j].time=0;
StudentList[j].seat=j;}
从而为空机号检索以及下面各个模块顺利连接编译做下铺垫。
而功能菜单实现,咱们采用是switch选取语句并结合do……while循环办法,通过人为输入来实现菜单操作。为美化菜单,咱们加上相应头文献#include<stdlib.h>,再加上相应颜色函数:system( "color 5A "),从而成功使系统界面背景颜色与字体分别变成紫色与绿色。
系统菜单界面截图
六:各模块简要阐明
学生信息输入模块
学生信息输入模块是本系统第一种模块,亦是本系统尤为核心一种模块。下面模块可以正常运营,皆离不开这一模块。
结合主函数,咱们在输入上机者信息时,咱们通过对 StudentList[i].time进行0或1判断,对整个机房进行一种空机号检索,检查与否有空机号,有则执行输入功能,无则输出“机房已满”信息。固然,管理员亦能先执行第二个模块:空机号检索模块,先检索出空机,再让上机者选取机号上机。
空机号查询模块
详见上文流程图某些简介。
查询、修改、删除、显示上机信息模块
这四个模块采用设计思路基本一致,皆通过对StudentList[i].time值进行0或1判断,达到功能实现。例如:查询上机信息模块。在此模块中,设计者通过一种if判断语句(即:if(StudentList[i].time!=0) ),对管理员所输入机号进行一种与否为空机号判断,若检测到所输机号是空机号(即:StudentList[i].time=0)时,则不输出有关信息 ,反之,输出有关上机者信息。
显示上机费用模块
此模块采用是时间乘上每单位时间费用计费方式来进行计费。在本系统中,咱们规定每小时上机费用是2元,通过调用在“学生信息输入模块”中所输入上机时间(即:StudentList[i].time)乘上此费用,从而得到上机者上机费用。
上课模式模块
此模块为本系统新增模块,是依照机房某些时候特殊需要设计,旨在可以以便管理员一次性输入数据。而为达到这一功能,咱们采用了一种for循环语句,从0号机始终到79号机统一赋上相似上机时间,学号。For循环语句如下: for(i=0;i<80;i++)
{
StudentList[i].time=n;
StudentList[i].stu_num=0;
strcpy(StudentList[i].name,"");
}
七:心得体会
C语言程序设计是本学期才开课,虽然到当前已经告一段落,但是当前回忆,觉得通过大半个学期学习,自己确学到了不少东西,但是依然只是个入门者,经后还得靠自己继续学习,加强。
这次C语言课程设计,在咱们小组开始准备时,人们几乎都是一头雾水,特别是我这个当组长,更是不知该如何给小构成员分派任务,这也是我遇到第一种难题。日后在学习函数并且与其他小组讨论之后,徐徐有了眉目。于是我决定按功能模块给小构成员分派任务,咱们这个小组基本上是一人负责一种模块,而我在负责“删除上机信息模块”同步,也肩负起主函数与连接各个模块任务。在这个过程中我于是遇到了第二个困难。
这第二个困难就是如何运用“构造体”。说句实话,在咱们小组开始着手准备之时连构造体都弄不清晰,由于压根就还没学到此某些。但在自己查阅有关书籍以及与同窗讨论再加上日后教师在“构造体”一章中解说,咱们终于在最后用构造体完毕了本次课程设计。
本次课程设计之因此可以顺利完毕也离不开成员之间团结协作。例如在本次课程设计中,起初人们都不懂得该如何将各个某些连接起来,也就是说该如何选用一种统一判断原则。日后在通过成员讨论并亲自实践调试之后,人们得到了一致意见。从本系统源程序代码中可以人们可以发现,咱们小组所编写程序核心就是空机号判断,及上文所提到StudentList[j].time值判断。(Student[i].time==0表达空机号,等于1则表达非空极号,有人正在操作此机)。于是在接下来模块编写时,咱们小构成员都严格统一遵循此规定完毕了接下来任务。例如“显示所有上机信息模块”,咱们小组就是通过一种for循环语句,通过逐个检查,遇到符合条件则将其输出。而咱们判断原则就是Student[i].time值为零则不输出,不为零则将其输出。
由于在这次C语言课程设计中,咱们小组可谓经历了一次“自学大作战”,因而咱们也逐渐感受到了自学妙处,我想这必将会对我此后学习产生一定积极影响。例如在咱们小组基本完毕设计之后,咱们觉得主界面不够美观,与否可以改进一下呢?于是咱们通过上网查阅了有关资料,发现咱们其实可以给主界面以及字体加点背景颜色,而这项工作也并不是很难,只需要调用库函数中颜色函数。于是咱们在主函数中加上System("color 0A"),并加上相应头文献#include<stdlib.h>。于是咱们就成功实现了这一功能,给该程序主界面赋上了紫色,字体也变为了绿色。
在课程设计中,收获知识,提高能力同步,我也学到了诸多人生哲理,懂得如何去制定筹划,怎么样去实现这个筹划,并掌握了在执行过程中如何去克服心理上不良情绪,因而在后来生活和学习过程中,我一定会把课程设计精神带到生活中,不畏艰难,勇往直前!
附录
一:源程序代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MaxSize 80
struct student_info
{
char name[10]; //姓名
int seat; //机号
long stu_num; //学号
int time; //上机时间
}StudentList[MaxSize];
void Insert();
void Empty();
void Search();
void Update();
void Delete();
void Dispallmoney();
void Show();
void Class();
int main()
{
int i,j;
system("color 5A"); //字体和背景颜色
for(j=0;j<80;j++)
{
StudentList[j].time=0; //给所有机子上机时间赋值为0,代表空机
StudentList[j].seat=j; //给所有机子编号
}
printf("\t\t\t*****************************\n\n");//显示一种简易菜单
printf("\t\t\t 欢迎使用机房管理系统\n\n");
printf("\t\t\t*****************************\n\n");
do
{printf("\n");
printf("\t\t\t1------输入学生信息(Insert)\n");
printf("\t\t\t2------查询空机位(Empty)\n");
printf("\t\t\t3------查询上机状况(Search)\n");
printf("\t\t\t4------修改上机信息(Update)\n");
printf("\t\t\t5------删除上机信息(Delete)\n");
printf("\t\t\t6------显示学生上机费用(Dispallmoney)\n");
printf("\t\t\t7------显示所有上机信息(Show)\n");
printf("\t\t\t8------上课模式(Class)\n");
printf("\t\t\t9------退出(Exit)\n");
scanf("%d",&i); //接受顾客选取
switch(i)
{case 1:Insert(); //调用学生信息输入函数
break;
case 2:Empty(); //调用空机号检索函数
break;
case 3:Search(); //调用上机信息查询函数
break ;
case 4:Update(); //调用上机信息修改函数
break;
case 5:Delete();
break;
case 6:Dispallmoney(); //调用计费函数
break;
case 7:Show(); //调用上机信息全显示函数
break;
case 8:Class(); //调用机房上课模式函数
break;
case 9:break;
default:printf("错误选取!请重选");break;
}
}while(i!=9);
return 0;
}
void Insert()
{
int i,k=0;
for(i=0;i<80;i++)
{
if(StudentList[i].time==0) //检测机房与否有空机位
k=1;
}
if(k==0)
{printf("机房已满!");return;}
printf("请输入机号:");
scanf("%d",&i);
if(i>=80)
{printf("请输入不大于80整数");return;}
if(StudentList[i].time!=0)
{printf("已有人正在操作此机:");return;}
printf("请输入上机者姓名:");
scanf("%s",StudentList[i].name);
printf("请输入上机者学号:");
scanf("%ld",&StudentList[i].stu_num);
printf("请输入上机时间:");
scanf("%d",&StudentList[i].time);
}
void Empty()
{
int i,k=0;
printf("空机号为:\n");
for(i=0;i<80;i++) //检测空机号并将其输出
{
if(StudentList[i].time==0)
{printf("%d\t",i);
k=1;
}
}
if(k==0)
{printf("无空机位!");return;}
}
void Search()
{int i;
printf("请输入要查询机号:");
scanf("%d",&i);
if(StudentList[i].time!=0) //判断原则,检索到则输出
{printf("姓名:%s\t",StudentList[i].name);
printf("学号:%ld\t",StudentList[i].stu_num);
printf("上机时间:%d\t",StudentList[i].time);
}
else
printf("没有查询到!");
}
void Update()
{int i;
printf("请输入要修改数据机号:");
scanf("%d",&i);
if(StudentList[i].time!=0) //判断原则,检索到则输出
{
printf("请输入姓名:");
scanf("%s",StudentList[i].name);
printf("请输入学号:");
scanf("%ld",&StudentList[i].stu_num);
printf("请输入上机时间:");
scanf("%d",&StudentList[i].time);
}
else
printf("没有查询到可以修改数据!");
}
void Delete()
{int i;
printf("请输入要删除信息机号:");
scanf("%d",&i);
if(StudentList[i].time==0)
printf("无需修改!");
StudentList[i].time=0;
strcpy(StudentList[i].name,"");
}
void Dispallmoney()
{int i,money;
printf("请输入结账机号:");
scanf("%d",&i);
money=2*StudentList[i].time;//计费采用公式:时间*每次费用,简朴计算
printf("您上机费用为:%d",money);}
void Show()
{int i;
printf("\n");
printf("机号\t姓名\t学号\t\t上机时间\n");
for(i=0;i<80;i++)
if(StudentList[i].time!=0) //判断原则,检索到则输出
{printf("%d\t",StudentList[i].seat);
printf("%s\t",StudentList[i].name);
printf("%ld\t\t",StudentList[i].stu_num);
printf("%d\n",StudentList[i].time);
}
}
void Class()
{
int i,n;
printf("请输入上学时间:\n");
scanf("%d",&n);
for(i=0;i<80;i++) //给所有机子上机时间统一赋值,所有机子启动
{
StudentList[i].time=n;
StudentList[i].stu_num=0;
strcpy(StudentList[i].name,"");
}
}
二:各模块运营成果截图
1.主菜单界面
2.学生信息输入界面
3. 空机号查询界面
(注意:Mike所上12号机已经没有显示。)
4. 查询上机信息界面
5. 修改上机信息界面
(注意:从所截图中可看出12号机信息已经修改成功。)
6. 删除上机信息界面
(注意:从所截图中可看出12号机信息已经成功删除。)
7. 显示学生上机费用界面
8. 显示所有上机信息界面
9. 上课模式界面
(注意:从截图中可以看出机房成功启动上课模式。)
展开阅读全文