




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件学院课程设计报告 网吧管理系统年级班级: 专业方向: 学 号: 姓 名: 指导老师: 二零一零年六月一、问题描述本程序是一个网吧管理程序,首先选择界面选择需要的服务,包括查询空机位,预订与取消机位,用户可通过屏幕提示,查询自己的信息,包括打印预订单,等候单,以及打印用户列表。操作简洁,较易掌握。 二、基本要求1、软件要求windows xp、windows vista、windows7 64位系统。使用vc+6.02、硬件要求cpu:core i5 2.14ghz 内存:4g三、需求分析1、功能需求 实现对网吧机位的预定,查询,取消预订,以及打印预订与候选单。2、性能需求根据系统提示选择查询以及预定的时间段 四、测试数据 查询时间:2010-06-23 时间段:1 机位预订:2010-06-23 时间段:1 预订者姓名:杨骥 预订者电话:123 打印预订单; 输出:预定日期:2010-06-23 预定时间:08:00 联系电话:123 五.疑难解答六. 心得体会与研究方向通过对c语言的学习,了解c语言的基本知识,运用c语言可以解决许多实际问题,尤其是在信息管理方面,c语言作为一门高级和计算机编程语言,有其强大的功能。同时我也知道了我们随时都要培养自己的动手能力,只有这样,才能更好的适应这个日新月异的飞速发展的社会。在系统的时候发现自己的能力还是有限,要想学好c语言,并且灵活应用还是需要下苦功夫的,在接下来的暑假中我会经常上机实践,做到熟练掌握c语言中的精华。数据结构是c语言的基础,希望能在把编程练习好之后,继续深入学习数据结构,并结合c语言来继续进一步提高编程能力。七. 程序源代码#include #include #include #define n 1 /* 计算机总台数,可以根据实际需要改动 */#define p 11 /* 定义输入的日期字符数组,其格式为2009-12-23,共11位(包含0),无需改动 */#define t 12 /* 手机号码长度,共12位(包含0) */#define s 13 /* 表示时间段的输出长度,如8:00-10:00,共占13位 */* 数据结构的定义 */* 计算机类(关于类,有点oop的的意味,在这里可以理解为相关数据在内存中的表现形式) */struct computer int no; /* 计算机编号,个人感觉在这里没多大用处 */ int isorder; /* 是否被预定,0表示未预定,1表示已预定 */;/* 用户类 */struct user char namep; /* 用户姓名 */ char telt; /* 用户联系方式 */ struct user *next; /* user类型指针 */;/* 预订信息类 */struct orderinfo char datep; /* 日期 */ int time; /* 时间段 */ struct user *user; /* user类型指针,指向一个user类型节点 */ struct orderinfo * next;/* 重命名结构体 */typedef struct computer computer;typedef struct orderinfo orderinfo;typedef struct user user;/* 定义相关全局变量 */static computer computersn; /* 表示20台计算机的数组 */static orderinfo orderlist; /* 预订单,以链表表示 */static orderinfo waitlist; /* 等候单 */static user userlist; /* 用户列表 */static orderinfo *orderhead = &orderlist; /* 指向预订单头结点的指针 */static orderinfo *waithead = &waitlist; /* 指向等候单头结点的指针 */static user *userhead = &userlist; /* 指向用户列表头结点的指针 */static orderinfo *ordercurrent = &orderlist; /* 指向预订单队尾的指针,初始指向头结点 */static orderinfo *waitcurrent = &waitlist; /* 指向等候单队尾的指针,初始指向头结点 */static user *usercurrent = &userlist; /* 指向用户列表队尾的指针,初始指向头结点 */static char strs = 0;/* 函数声明 */void init(); /* 系统初始化,相关全局变量的初始化 */void mainmenu(); /* 主菜单中的选项逻辑处理 */int select(char date,int time); /* 通过日期和时间段进行查询,返回繁忙的计算机的数目 */void order (char date,int time); /* 处理预定信息 */void printinfo(char date,int time,int *used,int *wait); /* 通过日期和时间段打印出相关预订单和等候单的信息,并以指针形式返回预定数目和等候数目 */void deletefromorderlist(char date,int time,int n); /* 从预订单中删除相关条目,并将等候单中第一个用户自动添加到预订单中 */void deleteformwaitlist(char date,int time,int n); /* 从等候单中删除相关条目 */void cancel(char date,int time); /* 通过日期和订单号删除相关条目 */int getdate(char date,int i); /* 获得日期的输入,并进行相关判断操作 */int isbusy(int count); /* 判断是否满员 */char* showtime(int time); /* 输出相应时间段 */void showmenu(); /* 显示主菜单选项 */int getfreetime(char date, int time); /* 通过日期和时间段获得当前是否满员,1表示未满 */void insertintolist(int i,char date,int time,char name,char tel); /* 向链表中插入数据 */* 程序入口点 */void main() init(); mainmenu();/* 系统初始化(全局变量的初始化) */void init() int i; for(i = 0; i n; i+) computersi.no = i; computersi.isorder = 0; strcpy(orderlist.date,); orderlist.time = 0; orderlist.user = null; orderlist.next = null; strcpy(waitlist.date,); waitlist.time = -1; waitlist.user = null; waitlist.next = null;/* 显示主菜单选项 */void showmenu() printf(*欢迎使用网吧管理系统*n); printf(n); printf( 1.查询n); printf( 2.机位预定n); printf( 3.取消预定n); printf( 4.退出系统n);/* 调试功能,以下三项是做测试时使用的,可以根据实际需要增删 */* * */ printf( 5.打印预订单n); printf( 6.打印等候单n); printf( 7.打印用户列表n);/* */ printf(n); printf(请输入您的选择: ); printf(n);/* 输出相应时间段 */char *showtime(int time) switch(time) case 1: strcpy(str,08:00-10:00); break; case 2: strcpy(str,10:00-12:00); break; case 3: strcpy(str,12:00-14:00); break; case 4: strcpy(str,14:00-16:00); break; case 5: strcpy(str,16:00-18:00); break; case 6: strcpy(str,18:00-20:00); break; return str;/* 主菜单逻辑处理 */void mainmenu() int choice = 0; /* 选项 */ char datep,ch; int time = -1; /* 时间段初始化为-1 */ int i,result; /* result表示输入时间数据是否满足相关要求 */* 若要开启调试功能,以下注释也应去掉 */* * */ orderinfo *ordertemp; orderinfo *waittemp; user *usertemp;/* */ showmenu(); /* 显示相关选项 */ do /* 需要循环判断,知道输入4(退出)时才结束程序 */ scanf(%d,&choice); switch(choice) case 1 : /* 查询 */ /*这条语句主要是由于在getdate()函数中将会捕获到在主菜单中选择相应功能后的那个回车, 此时选择1,然后回车,它将捕获到这个回车,造成不必要的麻烦*/ ch = getchar(); printf(请输入日期,格式yyyy-mm-dd(如:2009-12-22):n); result = getdate(date,p); while(result != 1) /* 判断是否满足相应输入要求 */ result = getdate(date,p); printf(请选择时间段:n); for(i = 1; i = 6; i+) printf(%d. %sn,i,showtime(i); /* showtime(),打印相关的时间段信息 */ scanf(%d,&time); while(time 6) /* 同样是进行输入校验 */ printf(对不起,您输入的参数有误,请核对后重新输入!nn); scanf(%d,&time); isbusy(select(date,time); /* isbusy()判断是否满员 */ system(pause); /* system(pause)-暂停dos窗口输出 */ break; case 2 : ch = getchar(); printf(请输入日期,格式yyyy-mm-dd(如:2009-12-22):n); result = getdate(date,p); while(result != 1) result = getdate(date,p); printf(请选择时间段:n); for(i = 1; i = 6; i+) printf(%d. %sn,i,showtime(i); scanf(%d,&time); while(time 6) printf(对不起,您输入的参数有误,请核对后重新输入!nn); scanf(%d,&time); order(date,time); /* 调用预定相关逻辑处理函数 */ system(pause); break; case 3 : ch = getchar(); printf(请输入日期,格式yyyy-mm-dd(如:2009-12-22):n); result = getdate(date,p); while(result != 1) result = getdate(date,p); printf(请选择时间段:n); for(i = 1; i = 6; i+) printf(%d. %sn,i,showtime(i); scanf(%d,&time); while(time 6) printf(对不起,您输入的参数有误,请核对后重新输入!nn); scanf(%d,&time); cancel(date,time); /* 调用取消预定相关逻辑处理 */ system(pause); break; case 4 : printf(欢迎下次继续使用!n); exit(0); /* 退出程序 */ break;/* 调试功能,以下部分是前面提到的调试时使用,可以按照需要选择增删此部分,这两部分应同时开启或关闭,以免引起不必要的麻烦 */* * */ case 5 : if(ordercurrent = orderhead) printf(暂无相关信息n); printf(nn); else ordertemp = orderhead-next; while(ordertemp != null) printf(预定日期: %sn,ordertemp-date); printf(预定时间: %sn,showtime(ordertemp-time); printf(预定者 : %sn,ordertemp-user-name); printf(联系方式: %sn,ordertemp-user-tel); printf(nn); if( ordertemp-next != null) ordertemp = ordertemp-next; else break; system(pause); break; case 6 : if(waithead-next = null) printf(暂无相关信息n); printf(nn); else waittemp = waithead-next; while(waittemp != null) printf(预定日期: %sn,waittemp-date); printf(预定时间: %sn,showtime(waittemp-time); printf(预定者 : %sn,waittemp-user-name); printf(联系方式: %sn,waittemp-user-tel); printf(nn); if(waittemp-next != null) waittemp = waittemp-next; else break; system(pause); break; case 7 : if(usercurrent = userhead) printf(暂无相关信息n); printf(nn); else usertemp = userhead-next; while(usertemp != null) printf(联系人姓名: %sn,usertemp-name); printf(联系人电话: %sn,usertemp-tel); printf(nn); if(usertemp-next != null) usertemp = usertemp-next; else break; system(pause); break;/*/ default : printf(对不起,您输入的参数有误,请核对后重新输入!nnn);system(pause); system(cls); /* system(cls)-清空当前dos窗口中的内容 */ showmenu(); while(choice != 4); /* 除非输入4,否则将不会结束循环 */* 获得日期的输入,并进行相关判断操作,其中i表示需要输入的字符串长度,如2009-12-23,这个字符串就是11位的(包含0) */* 以下相关代码是进行输入校验的 */int getdate(char date,int i) char *p = date,ch; int m = 0 , result = 0 ,j; /* result表示输入是否合法,1表示合法 */ while(m =0 & ch = 9 | ch= -) /* 输入的字符只能为0到9以及- */ *p+ = ch; m+; else *p = 0; break; else *p =0; break; *p+ = 0; m+; if(m = i) /* 判断长度是否符合输入要求 */ result = 1; for(j = 0; j date,date) = 0 & temp-time = time) count+; if(temp-next != null) /* 若为空,表示已到链表末尾,直接跳出循环 */ temp = temp-next; else break; while(temp != null); return count;/* 判断是否满员 */int isbusy(int count) int result = 0; /* 该变量作为返回值,指示该时间段是否满员,1表示已满,0表示空闲 */ /* 若使用数目大于20台,则提示无空闲机位,否则打印出空闲机位 */ if(count = n) printf(对不起,暂无空闲机位nn); result = 1; else printf(恭喜您,还剩%d个机位nn,n - count); return result; /* 该返回值表示是否满员 */* 通过日期和时间段获得当前是否满员,1表示未满 */int getfreetime(char date, int time) int result = 0; int count = select(date,time); if(count n) result = 1; return result;/* 预定逻辑处理,首先判断是否满员,可以调用select函数 */void order (char date,int time) int result; char namep; char telt; system(cls); printf(*欢迎使用网吧管理系统*nn); printf(您查询的时间段是: %s %snn,date,showtime(time); result = isbusy(select(date,time); if(result = 0) /* 未满 */ int ch; printf(是否开始预定?n); printf(1.是n); printf(2.否n); printf(3.返回主菜单n); scanf(%d,&ch); while(ch != 1 & ch != 2 & ch != 3) /* 同样是输入校验 */ printf(对不起,您输入的参数有误,请核对后重新输入!nnn); scanf(%d,&ch); if(ch = 1) system(cls); printf(*欢迎使用网吧管理系统*nn); printf(您预定的时间段是: %s %snn,date,showtime(time); /* 输入相关联系人的信息 */ printf(请输入预订者信息n); printf(预订者姓名: ); scanf(%s,name); printf(预订者电话: ); scanf(%s,tel); /*向预定表中插入数据*/ insertintolist(1,date,time,name,tel); /* 向链表中插入数据 */ /* 选择否 */ else if(ch = 2) system(cls); mainmenu(); /* 选择回到主菜单 */ else if(ch = 3) system(cls); mainmenu(); /* 当是满员的情况 */ else int ch, temp = 0 , t, isfree = 0,p; int chtemp; printf(预定最近机位,排队等候还是返回?n); printf(1.预定最近机位n); printf(2.排队等候n); printf(3.返回主菜单n); scanf(%d,&ch); while(ch != 1 & ch != 2 & ch != 3) printf(对不起,您输入的参数有误,请核对后重新输入!nnn); scanf(%d,&ch); /* 这里实现的功能是获得最近的空闲时间,最近时间可能是上一个时间段,也可能是下一个时间段 */* isfree = 1 时,表示还有空闲,isfree = 0 时,表示当天已经全部满员 */ if(ch = 1) for(t = 1; t 6; t+) if(time + t = 1) p = time - t; isfree = getfreetime(date,p); if(isfree = 1) break; if(isfree = 0) /* 全部满员的情况 */ printf(对不起,当天各时段已经全部满员,是否排队等候?n); printf(1. 是n); printf(2. 否n); scanf(%d,&chtemp); while(chtemp != 1 & chtemp != 2) /* 同样是输入校验 */ printf(对不起,输入参数有误.n); scanf(%d,&chtemp); if(chtemp = 1) /* 输入相关联系人的信息 */ printf(请输入预订者信息n); p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 16408:2025 EN Dentistry - Oral care products - Oral rinses
- 偷钱自愿归还协议书范本
- 文化产业项目部分股权置换与转让实施合同
- 旅游景区开发项目诚意金支付及合作终止协议
- 产业园区物业管理与招商引资合作协议
- 仓储物流园区拆迁补偿及补偿款分配协议
- 生态工业园区绿色厂房租赁合同书
- 阿里巴巴平台消费者权益保护服务合同
- 中式快餐店跨区域联营管理协议
- 厂房搬迁及安全生产责任协议
- 2025重庆水务环境控股集团有限公司招聘6人笔试参考题库附带答案详解
- 办公技能实操考试试题及答案
- 空调移机安装合同范本
- 水泥牌楼维护方案范本
- 中医药在气管炎治疗中的应用
- 银行人力资源发展计划
- 喷涂作业安全专项培训
- 危险性较大分部分项工程及建筑施工现场易发生重大事故的部位环节的预防监控措施和应应急处理预案
- 养老护理员四级试题含答案
- 全国寄生虫病防治技能知识竞赛参考试题(附答案)
- 高速公路改扩建工程监理投标方案(技术方案)
评论
0/150
提交评论