《C语言综合实验报告机房管理系统(共19页).doc》由会员分享,可在线阅读,更多相关《C语言综合实验报告机房管理系统(共19页).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上机房管理系统(c语言)在vc+ 6.0 运行学院:信息科学与工程专业 班级:电子信息工程2班姓名:张涛学号: 2012年12月10日 目录总体设计详细设计 输入函数 输出函数删除函数查找函数结论与心得体会调试报告附录基本要求输入功能:输入若干名学生的学号、班级、姓名、开始上机时间和结束上机时间。 计算功能:计算每个学生的上机费用(计算公式:上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位) 修改功能:修改学生上机的个人档案(如:增添或删除) 查询功能:按条件(班级、学好、姓名)查询学生上机信息,并能显示查询学生的相应全部档案。总体设计开始输入删除退出
2、输出查找图1主函数采用switch选择结构case 1:scan(p);break;/调用输入函数case 2:print(st,p);break/;调用输出函数case 3:del(p);break;/调用删除函数case 4:search(p);brea/k;调用查找函数case 5:开始输入数据打开文件重新写入文件关闭文件开始打开文件读取数据选择输出输出数据关闭文件 图2 图3输入函数与输出函数都用到文件的读写并且我定义了两个文件,一个存储结构体数组的内容,另一个存储数组的个数。在调用输入函数时,每次只能输入一个学生的信息,每次输入之前,先打开文件,读出数据,然后重新读入数据,并关闭文件
3、。简要流程图如图2所示。 void scan(int *p)int i;FILE *fp;FILE *fpp;for (i=*p;i*p+1;i+)printf(请输入信息!n); printf(学号(6位以下): ); scanf(%s,sti.num);printf(姓名(四位以下):);。 图4输出时,通过for循环把数据读出并输出void print(struct stu st,int *q) int i; float j; FILE *fp;fp=fopen(c:stu_list.txt,r);/打开文件printf(序号 学号 图5 班级 姓名 上机时间(时 分) 下机时间(时 分
4、) 费用n);for(i=0;i*q;i+)/开始循环输出 fread(&sti,sizeof(struct stu),1,fp); printf(%2d %6s %4s %8s,i+1,sti.num ,sti.clas,sti.name );.printf(t %3d%3d ,sti.hour1,sti.min1 ); printf( t%3d%3d,sti.hour2 ,sti.min2); j=sti.hour2 -sti.hour1+(sti.min2 -sti.min1)/60.0) ; printf( %4.2f 元n,j);. 图6删除函数采用覆盖的方法来实现目的。输入所要删除
5、的信息后,从文件中读取数据,并找到它,用后面的将其覆盖,总数量减少一个,这样以后读取数据时,就没有该数据了.。但实际上文件中任由原来个数个数据,只是不让它读出来而已,如图7。图8为简单流程图, if(strcmp(a,sti.name)=0) for(j=i;j*p-1;j+) strcpy(stj.num,stj+1.num);strcpy(stj.clas,stj+1.clas);stj.hour1=stj+1.hour1; stj.min1=stj+1.min1;。图7查找函数也就简单多了,输入所要查找的信息后,从文件中读取数据,并找到它,然后将其输出,简单代码如下 switch(a)/
6、选择查找方式 case 1: printf(学号:); scanf(%s,b); for(i=0;i*p;i+) if(strcmp(b,sti.num)=0) printf( 学号 班级 姓名 上机时间(时 分) 下机时间(时 分) 费用n); printf( %6s %4s %8s,sti.num ,sti.clas,sti.name ); printf(t %3d%3d ,sti.hour1,sti.min1 ); printf( t%3d%3d,sti.hour2 ,sti.min2); j=sti.hour2 -sti.hour1+(sti.min2 -sti.min1)/60.0)
7、 ;. 图9图8开始打开文件读取数据选择删除输入要删除的数据关闭文件查找要删除数据删除数据重新写入文件开始打开文件读取数据选择查找输入要查找的条件及内容关闭文件查找要找的数据输出数据 图10结论与心得体会 通过这次为数不多的几天计算机实践学习,加上我们这个学期的c语言课程,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难。 学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验
8、自己是否掌握c语言、自己编写的程序是否能够正确地解题。通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去隐藏程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。 不过,很多时候,我们都是眼高手低,看着书以为c语言很简单,把那些代码记住就没有问题了。可是事实上,当计算机一次又一次地报错时,我才知道我错了。不亲自上机是学不好c语言的。而且上机与看书时相互
9、配合的。上机出现错误,在书上找答案。这样经过反反复复地学习,c语言才会掌握。就拿简单的输出输入的格式符讲,总是以为它没有用了,因为太简单而不管,可到后面时,忽然发现自己连对简单的整型也不了解,更不用说进行字符的输入输出了。比如说整型变量的字节数,有效值。默认的实型变量是什么,其字节数,所以会有好多警告。虽然不影响运行,但是知道存在问题,后来问老师才知道了,也算学到些东西。所以,在这次C语言实训,不仅仅提高了我掌握和利用C语言进行程设计的能力, 而且进一步理解和运用结构化程设计的思想和方法。初步掌握了开发一个小型实用系统的基本方法。学会了调试一个较长程序的基本方法。学会了利用流程图或N-S图表示
10、算法,不过不是很规范。掌握了书写程设计开发文档的能力.为以后的实训打下坚实的基础。不过这也是在一次次报错的调试中慢慢学的。 调试与编译完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。对于我来讲,调试也蛮让人头疼的。尤其是
11、现在所讲的这个程序。经过了反反复复地修改,程序终于可以运行了,可是结果却完全出乎意料。所以调试程序也是很关键的一项。一开始,程序中的错误编译时都可以发现,还能耐心的去看看到底哪里出错。记得一次链接时出错,弄了几次一直错,可是到同学电脑就正常了,便把vc卸载了重新安装,结果好了,后来才知道,运行窗口没有关闭。再后来遇到很多编译时不能检测到的错误,一开始采用猜测并且注释部分的方法来检查出错地方,但效果不佳,经常中止。后来想到暂停语句 system(“pause”); ,是程序运行到该位置暂停,从而判断错误在该处之前你还是之后。并将该方法与同学分享。 附录:源程序清单#include#include
12、#includestruct stu char num9;char clas9;char name9;int hour1;int min1;int hour2;int min2;st99;/定义结构体数组void print(struct stu st,int *q)/输出函数int i;float j;FILE *fp;fp=fopen(c:stu_list.txt,r);/打开文件printf(序号 学号 班级 姓名 上机时间(时 分) 下机时间(时 分) 费用n);for(i=0;i*q;i+) fread(&sti,sizeof(struct stu),1,fp);printf(%2d
13、 %6s %4s %8s,i+1,sti.num ,sti.clas,sti.name );printf(t %3d%3d ,sti.hour1,sti.min1 );printf( t%3d%3d,sti.hour2 ,sti.min2);j=sti.hour2 -sti.hour1+(sti.min2 -sti.min1)/60.0) ;printf( %4.2f 元n,j); void scan(int *p)/输入函数 int i;FILE *fp;FILE *fpp;for (i=*p;i*p+1;i+) printf(请输入信息!n); printf(学号(6位以下): ); sc
14、anf(%s,sti.num); printf(姓名(四位以下):); scanf(%s,sti.name); printf(班级(四位以下):); scanf(%s,sti.clas); printf(上机时间 小时 :); scanf(%d,&sti.hour1); printf(上机时间 分钟 :); scanf(%d,&sti.min1); printf(下机时间 小时 :); scanf(%d,&sti.hour2); printf(下机时间 分钟 :); scanf(%d,&sti.min2);if(*p=0)if(fp=fopen(c:stu_list.txt,w)=NULL)
15、printf(cannot open file);elseelsefp=fopen(c:stu_list.txt,r+); for(i=0;i*p;i+) fread(&sti,sizeof(struct stu),1,fp);/写入文件for(i=0;i*p+1;i+)if(fwrite(&sti,sizeof(struct stu),1,fp)!=1)fclose(fp);*p=*p+1;if(fpp=fopen(c:stu_num.txt,w)=NULL)printf(cannot open file);return;if(fwrite(p,4,1,fpp)!=1)printf(file
16、 write error);fclose(fpp); void list()/界面 printf(t*n);printf(t* 1:输入数据 *n);printf(t* 2:计算数据 *n);printf(t* 3:删除数据 *n);printf(t* 4:查找数据 *n);printf(t* 5:结束 *n);printf(t*n);printf(t输入相应数字选择功能以回车结束n); void search(int *p)/查找函数 int a,i,c=1; float j; char b9; FILE *fp; fp=fopen(c:stu_list.txt,r); for(i=0;i*
17、p;i+) fread(&sti,sizeof(struct stu),1,fp); fclose(fp); printf(*n); printf(*请输入相应数字选择查询放条件*n); printf(* 1:学号 *2:姓名 *3:班级 *n); printf(*n); scanf(%d,&a); switch(a)/选择查找方式 case 1: printf(学号:); scanf(%s,b); for(i=0;i*p;i+) if(strcmp(b,sti.num)=0) printf( 学号 班级 姓名 上机时间(时 分) 下机时间(时 分) 费用n); printf( %6s %4s
18、 %8s,sti.num ,sti.clas,sti.name ); printf(t %3d%3d ,sti.hour1,sti.min1 ); printf( t%3d%3d,sti.hour2 ,sti.min2); j=sti.hour2 -sti.hour1+(sti.min2 -sti.min1)/60.0) ; printf( %4.2f 元n,j); c=0; if(c=1) printf(没有相关信息); ;break; case 2: printf(姓名:); scanf(%s,b); for(i=0;i*p;i+) if(strcmp(b,sti.name)=0) pri
19、ntf( 学号 班级 姓名 上机时间(时 分) 下机时间(时 分) 费用n); printf( %6s %4s %8s,sti.num ,sti.clas,sti.name ); printf(t %3d%3d ,sti.hour1,sti.min1 ); printf( t%3d%3d,sti.hour2 ,sti.min2); j=sti.hour2 -sti.hour1+(sti.min2 -sti.min1)/60.0) ; printf( %4.2f 元n,j); c=0; if(c=1) printf(没有相关信息); ;break; case 3: printf(班级:); sc
20、anf(%s,b); for(i=0;i*p;i+) if(strcmp(b,sti.clas)=0) printf( 学号 班级 姓名 上机时间(时 分) 下机时间(时 分) 费用n); printf( %6s %4s %8s,sti.num ,sti.clas,sti.name ); printf(t %3d%3d ,sti.hour1,sti.min1 ); printf( t%3d%3d,sti.hour2 ,sti.min2); j=sti.hour2 -sti.hour1+(sti.min2 -sti.min1)/60.0) ; printf( %4.2f 元n,j); c=0;
21、if(c=1) printf(没有相关信息); ;break; default :printf(没有相关信息); void del(int *p)/删除函数 int i,j; char a9; FILE *fp; FILE *fpp; fp=fopen(c:stu_list.txt,r+); for(i=0;i*p;i+) fread(&sti,sizeof(struct stu),1,fp); printf(输入删除的姓名:); scanf(%s,a); for(i=0;i*p;i+) if(strcmp(a,sti.name)=0) for(j=i;j*p-1;j+); strcpy(st
22、j.num,stj+1.num);strcpy(stj.clas,stj+1.clas);stj.hour1=stj+1.hour1; stj.min1=stj+1.min1; stj.hour2=stj+1.hour2; stj.min2=stj+1.min2; strcpy(stj.name,stj+1.name); *p=*p-1; for(i=0;i*p;i+)fwrite(&sti,sizeof(struct stu),1,fp); fclose(fp); if(fpp=fopen(c:stu_num.txt,w)=NULL) printf(cannot open file); re
23、turn; if(fwrite(p,4,1,fpp)!=1) printf(file write error); fclose(fpp); printf(该生信息已不存在!); void main()/主函数int b=0;int a,*p;FILE *fpp;p=&b;if(fpp=fopen(c:stu_num.txt,r)=NULL) printf(无历史数据);system(pause);elsefread(p,4,1,fpp);fclose(fpp);while(1)system(cls);list();scanf(%d,&a);switch(a) case 1:scan(p);break;case 2:print(st,p);break;case 3:del(p);break;case 4:search(p);break;case 5:printf(t*n);printf(t*谢谢使用*n);printf(t*作者:* *n);printf(t*n);system(pause);exit(0);default:printf(continuen);system(pause); 专心-专注-专业