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