课程设计说明书刘宗坤.docx
- 文档编号:16973946
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:26
- 大小:109.87KB
课程设计说明书刘宗坤.docx
《课程设计说明书刘宗坤.docx》由会员分享,可在线阅读,更多相关《课程设计说明书刘宗坤.docx(26页珍藏版)》请在冰点文库上搜索。
课程设计说明书刘宗坤
苏州市职业大学
课程设计说明书
名称机房收费管理程序
2012年2月13日至2012年2月26日共2周
院 系计算机工程系
班级11应用技术4
姓名刘宗坤(116308121)
系 主 任李金祥
教研室主任叶良
指导教师顾小晶、熊志勇
目录
1概述与背景-3-
1.1背景分析-3-
2需求分析-3-
2.1功能要求-3-
2.2操作方法-4-
3总体设计-5-
3.1模块划分-4-
4详细设计-5-
5程序调用与测试(错误分析)-5-
6结论与心得体会-11-
7参考文献-12-
8附录(源程序)-12-
1概述与背景
1.1背景分析
随着机房在教学中的地位的加重,原有的陈旧的人工管理机房已经不能在适应现在的大量人流的管理情况,通过手动管理,劳动强度大,而且容易出错,会引起一系列的问题。
如(速度慢,计算错误等等)要想更加高效合理的利用机房,真正体现出机房对广大学生的利用性,我们必须要改良传统的机房管理方式,让机房收费管理更加高效便捷。
为此,我们有必要开发一套全新的机房管理程序,以提高机房的管理效率,为广大学生提供更加优质的服务。
2需求分析
2.1功能要求
现代社会人们对网络的需求量越来越大,因此良好的机房收费管理系统也越来越重要。
机房收费系统的需求分析是为了让软件开发人员对开发的系统做一个全面的分析,以便开发出一个更好的收费系统,能够更好的服务大众。
同时,为了提高机房管理者的管理效率和减轻管理者的劳动强度,提高机房的利用率,发挥计算机的方便性和快捷性,需要实现机房自由上机收费管理。
基本要求
输入功能:
输入若干名(根据程序限制,建议限制在30名学生以内,该程序可适当更改)学生的学号、班级、姓名、开始上机时间和结束上机时间。
计算功能:
计算每个学生的上机费用(计算公式:
上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位)
查询功能:
按条件(班级、学号、姓名)查询学生上机信息,下机信息。
除此以外,还可以查看整个机房的使用情况。
2.2操作方法
1.首先,运行程序,程序正处于清屏状态。
等待中,界面自动显示菜单。
2.功能实现:
在运行中,享受基本功能。
如首先,需要输入“2“回车再输入若干学生的学号、班级、姓名,回车。
若要上机,直接进入,输入之前已经存档的相关信息,确认上机时间,即可。
上机过程中,可以随时了解某学生上机使用情况。
同时也可以了解所有学生上机情况;并判断机房是否满了。
该程序简单灵活,可以基本满足机房收费的要求。
简单明了,操作方便。
3总体设计
3.1模块划分
4详细设计
按照课程设计概要列出的模块,设计出与这些,模块一一对应的功能函数,以供主函数调用。
下列列出各功能函数的函数名和调用规格。
main-menu函数:
输出机房管理系统菜单
input函数:
输入若干个学生的学号、班级和姓名
online函数:
学生上机,输入上机学生学号或姓名及时间
calculate函数:
计算上机费用并输出
offline函数:
学生下机,输入下机时间,调用calculate函数得到上机费用
search函数:
查找学生上机信息
display函数:
显示全部机器的使用信息
main函数:
函数调用以及结束程序
主要数据结构类型:
结构体+单项列表
structmanage
{
char*name;
char*code;
char*class;
structtimetime[N];
}student;
structtime
{
char*starttime;
char*endtime;
inttimeperiod;
}time;
structPC
{char*code;
char*state;
}PC;
5程序调用与测试(错误分析)
(1)查询上机时间
voidsearch(Studentstu[],intn)/*上机时间查询*/
{
charnum_t[20],name_t[20];
inti,s;
do
{
printf("\t\t使用姓名按1,使用学号按2:
");
scanf("%d",&s);
}while(s!
=1&&s!
=2);
getchar();
if(s==1)
{
printf("\t\t请输入姓名:
");
gets(name_t);
for(i=0;i { if(strcmp(stu[i].name,name_t)==0) break; } } else { printf("\t\t请输入学号: "); gets(num_t); for(i=0;i { if(strcmp(stu[i].num,num_t)==0) break; } } if(i==n) { printf("\t\t查无此生! \n"); return; } elseif(stu[i].flag==1) printf("\t\t该生正在上机,上机起始时间为%02d: %02d: %02d\n",stu[i].start.hour,stu[i].start.minute, stu[i].start.second); else printf("\t\t该生未上机或已下机! \n"); }如下图: (5-1-1) (2)机器使用情况 voiddisplay()/*全部机器使用情况显示*/ { printf("\t机器号是否使用使用者学号班级上机时间\n");/*显示格式,表头*/ printf("\n"); for(k=0;k<30;k++) { if(com[k].f==0) printf("\t%02d否--------: --: --\n",k+1); else printf("\t%02d是%-10s%-10s%2d%02d: %02d: %02d\n",k+1, com[k].stut.name,com[k].stut.num,com[k].stut.banji,com[k].stut.start.hour, com[k].stut.start.minute,com[k].stut.start.second); } printf("\t"); system("pause");/*使刚显示的内容在屏幕上停留一段时间,直到继续操作为止*/ } (5-2-1) (3)学生下机使用情况: voidcalculate(Studentstu)/*上机时间及费用计算*/ { intt; structtimetimet; if(stu.finish.second { if(stu.finish.minute==0) { stu.finish.hour-=1; stu.finish.minute=59; } else stu.finish.minute-=1; timet.second=stu.finish.second+60-stu.start.second; } else timet.second=stu.finish.second-stu.start.second; if(stu.finish.minute { stu.finish.hour-=1; timet.minute=stu.finish.minute+60-stu.start.minute; } else timet.minute=stu.finish.minute-stu.start.minute; timet.hour=stu.finish.hour-stu.start.hour; if(timet.second==0&&timet.minute==0) t=timet.hour; else t=timet.hour+1;/*不满一小时按一小时记*/ printf("\t\t该生上机用时%d小时,费用为%d元\n",t,t); } voidoffline(Studentstu[],intn)/*下机*/ { charnum_t[20],name_t[20]; inti,s; do { printf("\t\t使用姓名按1,使用学号按2: "); scanf("%d",&s); }while(s! =1&&s! =2); getchar(); if(s==1) { printf("\t\t请输入姓名: "); gets(name_t); for(i=0;i { if(strcmp(stu[i].name,name_t)==0) break; } } else { printf("\t\t请输入学号: "); gets(num_t); for(i=0;i { if(strcmp(stu[i].num,num_t)==0) break; } } if(i==n) { printf("\t\t没有这个学生! \n"); return; } elseif(stu[i].flag==0) { printf("\t\t该生未上机或已下机! \n"); return; } else { printf("\t\t请输入下机时间(当前时间): "); scanf("%d: %d: %d",&stu[i].finish.hour,&stu[i].finish.minute,&stu[i].finish.second); calculate(stu[i]);/*计算并输出上机费用*/ 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; } } }如图: (5-3-1) (5-3-1) 调试时,程序在制作过程中主要出现了两种错误: 编译错误和逻辑错误。 注释: 图上这是明显的编译错误,”intt”后面很自然的漏掉了”;”,不同于逻辑错误,它是比较容易犯的错误。 而逻辑错误常常隐藏很深,总得不到想要的结果。 6结论与心得体会 课程设计是我们目前对C语言实际应用的一次检验,是对上学期成果的一种体现。 我们在设计过程中,需要大量灵活运用平时经常用到的理论知识。 理论毕竟是理论,做起来并不是想象那么容易,因为是一头雾水。 在我们实际操作过程中,不停查阅资料和向同学求助,在结合自己的一些独立思考,通过团队力量的发挥,整个程序在短短2周顺利完成。 期间,我不否认,自己有很多不足,因为需要一些参考,毕竟我们在C语言道路上还是初生牛犊,需要更多的训练更多的挑战。 今天,C语言挑战我。 明天,我挑战C语言。 7参考文献 秦友淑,曹化工编著.C语言程序设计教程.〔M〕武汉: 华中理工大学出版社,1996 黄明等编著.21世纪进阶辅导C语言程序设计.〔M〕大连理工大学出版 袁志祥、秦锋主编《数据结构(c语言版)例题详解与课程设计指导》第二版《中国科学技术大学出版社出版》 8源程序 #include #include #include #include structtime { inthour; intminute; intsecond; }; typedefstruct { charnum[20];/*学号*/ intbanji;/*班级*/ intflag;/*用来标记学生是否上机*/ charname[20];/*姓名*/ structtimestart,finish;/*上机起止时间*/ }Student; Studentstu[50];/*信息库*/ structcomputer/*机器信息*/ { intf;/*用来标记机器是否使用*/ Studentstut;/*使用这台机器的学生*/ }com[30];/*30台机器*/ intk; intmain_menu()/*主菜单*/ { charc; do { system("cls");/*清屏*/ printf("\t\t\t****机房收费管理系统****\n"); printf("\t\t\t1.输入学生信息\n"); printf("\t\t\t2.上机\n"); printf("\t\t\t3.下机\n"); printf("\t\t\t4.查询上机时间\n"); printf("\t\t\t5.机器使用情况显示\n"); printf("\t\t\t0.退出系统\n"); printf("\t\t\t************************\n"); printf("\t\t\t请选择菜单(0-5): "); c=getchar(); }while(c<'0'||c>'5');/*判断输入是否合法*/ return(c-'0'); } intinput(Studentstu[],intn)/*输入学生信息*/ { inti=0; charsign='0'; while(sign! ='n'&&sign! ='N')/*判断是否继续输入学生信息*/ { getchar();/*回车*/ printf("\t\t学号: "); gets(stu[n+i].num); printf("\t\t班级: "); scanf("%d",&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); } voidonline(Studentstu[],intn)/*上机*/ { charnum_t[20],name_t[20]; inti,s; do { printf("\t\t使用姓名按1,使用学号按2: "); scanf("%d",&s); }while(s! =1&&s! =2); getchar(); if(s==1) { printf("\t\t请输入姓名: "); gets(name_t); for(i=0;i if(strcmp(stu[i].name,name_t)==0) break; } else { printf("\t\t请输入学号: "); gets(num_t); for(i=0;i { if(strcmp(stu[i].num,num_t)==0) break; } } if(i==n) { printf("\t\t信息库中暂无该生,请输入该生信息再上机! \n"); return; } elseif(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].start.hour,&stu[i].start.minute,&stu[i].start.second); stu[i].flag=1;/*该生标记为上机*/ com[k].stut=stu[i];/*记录使用该台机器的学生信息*/ break; } if(k==30) printf("\t\t机器全部使用中,请稍后再上机! \n"); } } voidcalculate(Studentstu)/*上机时间及费用计算*/ { intt; structtimetimet; if(stu.finish.second { if(stu.finish.minute==0) { stu.finish.hour-=1; stu.finish.minute=59; } else stu.finish.minute-=1; timet.second=stu.finish.second+60-stu.start.second; } else timet.second=stu.finish.second-stu.start.second; if(stu.finish.minute { stu.finish.hour-=1; timet.minute=stu.finish.minute+60-stu.start.minute; } else timet.minute=stu.finish.minute-stu.start.minute; timet.hour=stu.finish.hour-stu.start.hour; if(timet.second==0&&timet.minute==0) t=timet.hour; else t=timet.hour+1;/*不满一小时按一小时记*/ printf("\t\t该生上机用时%d小时,费用为%d元\n",t,t); } voidoffline(Studentstu[],intn)/*下机*/ { charnum_t[20],name_t[20]; inti,s; do { printf("\t\t使用姓名按1,使用学号按2: "); scanf("%d",&s); }while(s! =1&&s! =2); getchar(); if(s==1) { printf("\t\t请输入姓名: "); gets(name_t); for(i=0;i { if(strcmp(stu[i].name,name_t)==0) break; } } else { printf("\t\t请输入学号: "); gets(num_t); for(i=0;i { if(strcmp(stu[i].num,num_t)==0) break; } } if(i==n) { printf("\t\t没有这个学生! \n"); return; } elseif(stu[i].flag==0) { printf("\t\t该生未上机或已下机! \n"); return; } else { printf("\t\t请输入下机时间(当前时间): "); scanf("%d: %d: %d",&stu[i].finish.hour,&stu[i].finish.minute,&stu[i].finish.second); calculate(stu[i]);/*计算并输出上机费用*/ 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; } } } voidsearch(Studentstu[],intn)/*上机时间查询*/ { charnum_t[20],name_t[20]; inti,s; do { printf("\t\t使用姓名按1,使用学号按2: "); scanf("%d",&s); }while(s! =1&&s! =2); getchar(); if(s==1) { printf("\t\t请输入姓名: "); gets(name_t); for(i=0;i { if(strcmp(stu[i].name,name_t)==0) break; } } else { printf("\t\t请输入学号: "); gets(num_t); for(i=0;i { if(strcmp(stu[i].num,num_t)==0) break; } } if(i==n) { printf("\t\t查无此生! \n"); return; } elseif(stu[i].flag==1) printf("\t\t该生正在上机,上机起始时间为%02d: %02d: %02d\n",stu[i].start.hour,stu[i].start.minute, stu[i].start.second); else printf("\t\t该生未上机或已下机! \n"); } voiddisplay()/*全部机器使用情况显示*/ { printf("\t机器号是否使用使用者学号班级上机时间\n");/*显示格式,表头*/ printf("\n"); for(k=0;k<30;k++) { if(com[k].f==0) printf("\t%02d否--------: --: --\n",k+1); else printf("\t%0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 说明书 刘宗坤