网吧管理系统设计C语言_第1页
网吧管理系统设计C语言_第2页
网吧管理系统设计C语言_第3页
网吧管理系统设计C语言_第4页
网吧管理系统设计C语言_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要随着社会的发展,人们的生活水平逐步得到提高,科学技术的应用也逐步在人们的生活中得到体现。网吧是社会发展的产物之一,它成为了人们业余休闲的又一个场所。网吧管理者要靠人力管理网吧里面众多的电脑信息显然很困难,而且存在很多缺陷。科学技术的不断提高,计算机科学的日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对网吧的电脑信息进行管理,已成为了必然选择。 With the social development and peoples living standards improved, science and technology applications in peoples lives gradually be reflected. Internet cafes are a product of social development and it has been one of place where people spend their leisure time. It is clearly difficult that Internet cafe managers rely on human management to manage a large number of computers, and there are many defects. With the continuous improvement of science and technology, computer science and the maturing of its powerful features for people to have a profound understanding. It has entered the human society in various fields and is playing an increasingly important role. As part of the computer application, the use of the computer on the management of net-bars computer information has become an inevitable choice.1. 课程设计目的:1.1熟练掌握C语言课程中所学的理论知识;1.2通过综合C语言的基本知识来解决实际问题;1.3加强分析和解决问题的能力。2. 课程设计题目描述和要求:2.1 题目描述:2.1.1 题目:网吧电脑管理系统。2.1.2 描述:在设计该程序时,要将系统的不同功能分成各个模块,每个模块由一个函数定义,整个程序由函数调用来实现。每个模块是一个子函数,由一个主函数调用各个子函数。在定义子函数时,根据其不同的功能来选择不同的语句,需要使用循环是可以用“ dowhile ”来实现,需要使用选择时可以用“ switch ”来实现,需要使用条件时可以用“ if ”来实现等。2.2 要求:2.2.1 电脑信息要求:电脑编号,购买时间,显示器规格,是否带摄像头,每小时资费标准,当前占用情况(B-忙,S-闲)等。2.2.2 系统功能要求:、系统以菜单方式工作,管理员用密码登陆。、新增电脑信息。 用数组数据类型赋初值的方法或从键盘输入的方法把电脑信息送到各个数组中,然后把它们输出显示。、删除电脑信息。 任意输入一个电脑编号,将该电脑所有的信息从数组中删除。、查看电脑信息。 任意输入一个电脑编号,打印出该电脑的所有相关数据。同时,能提供根据用户要求的显示器规格和摄像头情况,查找未被占用的电脑。、修改电脑信息。 任意输入一个电脑编号,打印出所有相关信息后,可对某一项信息进行修改并保存。、使用计费。 输入一个用户使用的电脑编号、时长,计算该用户应支付的费用。3.课程设计内容:3.1 各个模块设计的说明:3.1.1 定义相关变量和子函数的声明 运用结构体定义每台电脑的信息。“struct computer”结构体类型包括了每台电脑不同类型的数据项(电脑编号,购买时间,显示器规格,是否带摄像头,每小时资费标准,当前占用情况(B-忙,S-闲)等);“struct buydate”结构体类型包括了购买时间的月、日、年,再套用到“struct computer”中。 对要调用的函数进行声明#define N 15 /*定义电脑的台数上限*/#include #include #include #include struct buydate /*定义结构体*/int month;int day;int year;struct computer /*定义结构体*/int num;struct buydate date;char display10;char camera;float fee;char condition;cmpN; /*定义数组*/int cmp_count=0;/*子函数声明*/void ma(); void add_cmp_info(); void search_cmp_info();void output_cmp_info();void omit_cmp_info();void motify_cmp_info();void cost_cmp_info();void go_out();3.1.2 主函数输出显示欢迎界面,通过函数getch(),printf(*)控制密码的输入输出。密码正确就进入菜单函数ma();密码错误系统会提醒printf(nn密码错误,按任意键重新返回输入!),错误次数达三次时printf(对不起!你输入的密码错误次数已达三次!你无权进入该系统!n),强制推出。 输出欢迎画面 j=0 开始循环 当j3 密码输入次数 i=0开始循环输入密码 strcmp(pass,)=0 假 真 密码错误, ma() 重新输入。 错误次数达三次,无权进入。void main() int i,j;char pass10;for(j=0;j3;j+)system(cls); /*清屏*/system(color b0); /*系统背景颜色*/printf(nnnnnn);printf(ttn);printf(tt=n);printf(tt n);printf(tt1 3 欢迎进入网吧电脑管理系统 3 1n); printf(tt n);printf(tt=n);printf(ttn);printf(nn);printf(请输入登陆密码:);fflush(stdin);for(i=0;i6;i+) passi=getch(); /*输入密码并控制其输出为星号*/printf(*);pass6=0;if(strcmp(pass,)=0) /*判断输入密码是否正确*/ma();else printf(nn密码错误,按任意键重新返回输入!); getch();printf(n);printf(对不起!你输入的密码错误次数已达三次!你无权进入该系统!n);3.1.3 新增数据函数 while(cont=y | cont=Y) 输入编号 输入购买日期 输入显示器规格 输入摄像头有无 输入资费标准 输入占用情况 是否继续新增cont y/Y =getch() n/N add_cmp_info() ma() 整体用循环结构dowhile 来实现。一组数据输入完后printf(是否继续新增?(y/n),判断while(cont=y | cont=Y)继续输入数据。 void add_cmp_info() int i;char cont;system(cls);doprintf(请输入你要新增的电脑的编号:n); scanf(%d,&i); fflush(stdin);cmpi-1.num=i; /*i-1为指针后移*/printf(请输入第%d台电脑的购买时间(月,日,年):,i);scanf(%d,%d,%d,&cmpi-1.date.month,&cmpi-1.date.day,&cmpi-1.date.year);fflush(stdin);printf(请输入第%d台电脑的显示器规格(yj17/19或cp17/19):,i);scanf(%s,&cmpi-1.display);fflush(stdin);printf(请输入第%d台电脑是否有摄像头(Y/N):,i);scanf(%c,&cmpi-1.camera);fflush(stdin);printf(请输入第%d台电脑的收费标准:,i);scanf(%f,&cmpi-1.fee);fflush(stdin);printf(请输入第%d台电脑的占用状态(S-闲,B-忙):,i);scanf(%c,&cmpi-1.condition); fflush(stdin);printf(是否继续新增?(y/n)n);fflush(stdin);cont=getchar();while(cont=y | cont=Y); /*判断是否继续新增,不分大小写*/printf(nnn按任意键返回菜单。);getch();ma(); /*调用子函数返回主菜单*/各台电脑的信息如下for(i=0;iN;i+)No.buydatedispalycamerafee condition 按任意键getch() ma()3.1.4 显示数据函数 通过for循环输出N台电脑的数据。void ouput_cmp_info() int i;system(cls);printf(n);printf(tt各台电脑的信息如下:n);printf(No.tbuydatet dispalytcameratfeetconditionn);printf(-n);printf(n);for(i=0;iN;i+)printf(%dt%d-%d-%dt%st%ct%.1ft%cn,cmpi.num,cmpi.date.month,cmpi.date.day,cmpi.date.year,cmpi.display,cmpi.camera,cmpi.fee,cmpi.condition); /*按数组顺序依次输出数据*/printf(nn按任意键返回菜单。);getch();ma(); /*调用子函数返回主菜单*/3.1.5 查找数据函数 首先显示查找菜单界面,查找方式分为两种:一种是编号查找,一种是要求查找,用选择结构switch 语句来实现选择。case 1 编号查找中套用if 语句判断输入的编号是否在电脑N上限内,再用for循环找出匹配电脑;case 2 要求查找整体运用for 循环语句和if判断语句,for循环中再套用if语句和for语句来判断查找条件是否匹配和找出匹配的电脑,其中定义了一个count记录找到的匹配电脑的数目,if(count=0)则没有匹配的电脑。每个case 中是否继续查找就用自我套用函数search_cmp_info()来实现。 查找菜单 case 1 case 2编号查找num 要求查找displayif(numN) camerafor(i=0;iN;i+) for(i=0;iN;i+)if(cmpi.num=num) if(条件满足)输出cmpi各信息 输出cmpi各信息 是否继续查找 count+ cont=getch() if(cont=y|cont=Y)search_cmp_info()else if(count=0) 无匹配电脑ma() void search_cmp_info()int num;int i,j,flag,count=0;char display10;char cont,camera;system(cls);printf(n);printf(tt*查找菜单*n);printf(tt 1.选择电脑编号查找方式n);printf(tt 2.选择根据要求查找方式n);printf(请选择查找的方式:);scanf(%d,&flag); /*选择变量*/switch(flag)case 1:printf(tt请输入你要查找的电脑编号:);scanf(%d,&num);if(numN) /*编号在查找范围内就执行*/printf(No.tbuydatetdispalytcameratfeetconditionn); printf(-n); printf(n); for(i=0;iN;i+)if(cmpi.num=num) /*找出要查找编号的电脑信息*/ printf(%dt%d-%d-%dt%st%ct%.1ft%cn,cmpi.num,cmpi.date.month,cmpi.date.day,cmpi.date.year,cmpi.display,cmpi.camera,cmpi.fee,cmpi.condition);printf(n); printf(请问你是否继续查找(y/n):); cont=getch(); printf(%c,cont);printf(n);if(cont=y|cont=Y)search_cmp_info(); /*函数自我套用,达到循环作用*/elseprintf(nn对不起!无法找到你要查找的电脑编号n); printf(nn按任意键返回菜单); getch(); ma();break;case 2:printf(tt请输入你要查找的电脑的要求(如:yj17或cp17):);scanf(%s,&display);fflush(stdin);printf(tt你要的电脑需要摄像头不(Y/N)?:);scanf(%c,&camera);fflush(stdin);printf(nn);for(i=0;iN;i+) if(strcmp(cmpi.display,display)=0&(cmpi.camera=camera)&(cmpi.condition=S|cmpi.condition=s) /*匹配条件*/count+; /*记录匹配电脑数目*/printf(tt第%d台机子符合要求n,cmpi.num); printf(No.tbuydatetdispalytcameratfeetconditionnprintf(-n); /*输出匹配电脑的信息*/for(j=0;jN;j+)if(cmpj.num=cmpi.num) printf(%dt%d-%d-%dt%st%ct%.1ft%cn,cmpi.num,cmpi.date.month,cmpi.date.day,cmpi.date.year,cmpi.display,cmpi.camera,cmpi.fee,cmpi.condition);printf(n);printf(请问你是否继续查找(y/n):);cont=getch();printf(%c,cont);printf(n);if(cont=y|cont=Y) /*是否继续查找*/search_cmp_info(); /*函数自我套用达到循环*/ printf(n); if(count=0) /*匹配电脑不存在*/printf(nn对不起!无法找到你要查找的电脑编号n);printf(nn按任意键返回菜单);getch();ma(); /*调用子函数返回主菜单*/break;printf(nn);printf(按任意键返回菜单。);getch();ma(); /*调用子函数返回主菜单*/ 3.1.6 删除数据函数用if语句判断输入的编号是否在范围内,再用for 语句找出要删除的电脑信息,进行删除。其中还用到了一个if语句用来确认是否输入 If(numN) if(judge=Y|judge=y) for(j=0;jN;j+) 删除信息 ma() if(judge=N|judge=n) ma() elsema()无误,删除部分数据是数字的就赋值味“0”,是单个字符的就赋值为空格,字符串就用strcpy复制函数覆盖原有的字符串。void omit_cmp_info()int j,num;char judge;system(cls);printf(请输入你要删除的电脑的编号:n);fflush(stdin);scanf(%d,&num);printf(n);if(numN) /*编号在查找范围内就执行*/ printf(你确定要删除的电脑信息的编号是%d吗?(Y/N)n,num); fflush(stdin); scanf(%c,&judge); if(judge=Y|judge=y) /*确认输入无误*/ for(j=0;jN;j+) if(cmpj.num=num) /*找出匹配电脑*/ cmpj.num=0; cmpj.date.month=0; cmpj.date.day=0; cmpj.date.year=0; strcpy(cmpj.display, ); cmpj.camera= ; cmpj.fee=0; cmpj.condition= ; printf(tt删除完成n); printf(nn按任意键返回菜单); getch(); ma(); /*调用子函数返回主菜单*/ if(judge=N|judge=n) printf(nn按任意键返回菜单); getch(); ma(); /*调用子函数返回主菜单*/ elseprintf(nn对不起!无法找到你要删除的电脑编号n);printf(nn按任意键返回菜单);getch(); 输入要修改的电脑编号num1 for(i=0;iN;i+)if(cmpi.num=num1)输出该电脑的信息修改项目Switch(flag)case 1 case 2 for(i=0;iN;i+)case 3case 4 if(cmpi.num=num1)case 5 case 6 相应项目的修改default break 是否继续修改Y/y N/nmodify ma()ma(); /*调用子函数返回主菜单*/3.1.7 修改数据函数输入要修改电脑的编号(dowhile),选择要修该的项目(switch语句),修改相关选项(case),修改完后选择是否继续修改(while)。void modify_cmp_info()int i,flag,num1;int num2;int month,day,year;char display10;char camera;float fee;char condition;char cont;system(cls);doprintf(tt请输入你要修改电脑信息的电脑编号:);scanf(%d,&num1);printf(nn该电脑原有信息如下:n); printf(No.tbuydatet dispalytcameratfeetconditionn); printf(-n); printf(n);for(i=0;iN;i+)if(cmpi.num=num1) /*编号的匹配*/printf(%dt%d-%d-%dt%st%ct%.1ft%cn,cmpi.num,cmpi.date.month,cmpi.date.day,cmpi.date.year,cmpi.display,cmpi.camera,cmpi.fee,cmpi.condition); /*输出匹配电脑的原有信息*/printf(nn);printf(tt电脑信息修改的项目如下:n);printf(tt 1.No.n);printf(tt 2.buydaten);printf(tt 3.displayn);printf(tt 4.cameran);printf(tt 5.feen);printf(tt 6.conditionn);printf(tt请选择你要修改的项目:);scanf(%d,&flag);fflush(stdin);switch(flag) /*选择修改项目*/case 1:printf(请输入改动的电脑编号:);scanf(%d,&num2);for(i=0;iN;i+)if(cmpi.num=num1)cmpi.num=num2;break;case 2:printf(请输入改动的日期(月/日/年):);scanf(%d,%d,%d,&month,&day,&year);for(i=0;iN;i+)if(cmpi.num=num1)cmpi.date.month=month; cmpi.date.day=day; cmpi.date.year=year;break;case 3:printf(请输入改动电脑的类型:);scanf(%s,&display);for(i=0;iN;i+)if(cmpi.num=num1) strcpy(cmpnum1-1.display,display);break;case 4:printf(请输入有无摄像头:);scanf(%c,&camera);for(i=0;iN;i+)if(cmpi.num=num1) cmpnum1-1.camera=camera;break;case 5:printf(请输入该台电脑的收费(每小时)标准:);scanf(%f,&fee);for(i=0;iN;i+)if(cmpi.num=num1) cmpnum1-1.fee=fee;break;case 6:printf(请输入该台电脑的状态(B-忙,S-闲):);scanf(%c,&condition);for(i=0;iN;i+)if(cmpi.num=num1) cmpnum1-1.condition=condition;break; default: printf(输入出错!n);printf(是否继续修改?(y/n):);fflush(stdin);cont=getchar();while(cont=y | cont=Y);printf(nnn按任意键返回菜单。);getch();ma();3.1.8 计费函数输入电脑编号和时长 cost=cmpnum-1.fee*time 是否继续Y/y N/ncost_cmp_info() ma() 输入电脑编号和时长,用乘法将运算结果赋值给cost,输出cost。是否继续计算其它电脑的费用(dowhile)。void cost_cmp_info()char cont;int num;float cost=0,time;doprintf(请输入用户使用的电脑编号和时长:); scanf(%d,%3f,&num,&time); cost=cmpnum-1.fee*time; printf(该用户需要支付%.1f元!n,cost); printf(是否继续输入?(y/n):);fflush(stdin);cont=getchar();while(cont=y | cont=Y);printf(nnn按任意键返回菜单。);getch();ma();3.1.9 退出系统函数 该子函数在菜单函数中被套用,从而推出系统exit(0)。 退出界面exit() 退出系统void go_out() system(cls);printf(nnnn);printf(ttn);printf(tt=n);printf(tt n);printf(tt 谢谢您使用电脑信息管理系统! n);printf(tt n);printf(tt * n);printf(tt n);printf(tt=n);printf(ttn);printf(n);exit(0);3.1.10 菜单函数输出选择菜单i=1 i=2 i=3 i=4 i=5 i=6 i=7 default add search ouput omit modify cost go_out ma() 显示出各个菜单选项,用switch语句选择各菜单,case 中调用相应的子函数。当选择菜单编号不存在时,提示输入出错,自我套用返回菜单函数。void ma() int i;system(cls);printf(n);printf(ttn);printf(tt*n);printf(tt n);printf(tt 选 择 菜 单 n);printf(tt n);printf(tt 1.新增电脑信息 n);printf(tt 2.查找电脑信息 n);printf(tt 3.显示电脑信息 n);printf(tt 4.删除电脑信息 n);printf(tt 5.修改电脑信息 n);printf(tt 6.使用计费情况 n);printf(tt 7.退出系统 n);printf(tt n);printf(tt n);printf(tt*n);printf(ttn);printf(n);printf(选择菜单(1-7):);scanf(%d,&i);switch(i) case 1:add_cmp_info();break;case 2:search_cmp_info();break; case 3:ouput_cmp_info();break;case 4:omit_cmp_info();break;case 5:modify_cmp_info();break;case 6:cost_cmp_info();break; case 7:go_out();break;default: printf(输入出错!按任意键返回菜单输入。n);getch();ma();3.2 程序的调试、错误分析和完善密码登陆的调试:以密码输入进入系统,密码正确就进入到主菜单画面,调试时故意输入错误的密码,会返回到密码登陆画面,无论密码错误几次都可以,考虑到实际应用密码错误的次数应有限度,在此我运用for 循环控制次数,当密码登陆界面出现三次后,自动跳出for循环,输出对不起!你输入的密码错误次数已达三次!你无权进入该系统!然后强制推出。新增数据的调试:起初我是用for循环依次输入各台电脑的相关信息,调试时发现信息的输入必须按顺序依次输入,一旦删除了中间的某台电脑的信息,想要添加新的电脑信息在该数组名中就不能了。针对这一点,我后来改用dowhile循环来完善,编号不是数组名的序列号(cmpi-1.num=i),编号是独立出来的一组信息,想在哪个空电脑信息的数组上新增都可以编号与数组名的序列号不一定要对应,后面的修改函数还会考虑到这一点。显示数据的调试:运行显示菜单,问题出现了很多,费用标准项目显示的是0.,小数点后面的零太多,还有显示器规格只显示第一个字母,看来是输入输出数据的占位符用错,将显示函数中的%f改为%.1f,%c改为%s后问题都解决了。查找数据的调试:运行查找菜单,根据要求查找时,出现条件无法匹配的状况,原来字符串的对比要用到字符串比较函数strcmp,单个字符用“=”。而且考虑到实际应用中可能出现连续查找的情况,我在两种查找方式后面增加了一个本身函数的调用来达到循环查找。删除数据的调试:就只是出现编号和数组名组列号混淆的情况,后来将两者独立出来后问题得以解决。考虑到实际操作时可能第一次输入编号错误的情况,在此我用if条件语句增加了确认一项。修改数据的调试:编号的问题在前面其它菜单的调试问题中提到了,修改方法一样。另外出现了电脑显示器项目无法修改的问题,原来我将空格赋给原字符串是用的单引号空格,而且不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论