合肥学院计算机科学与技术系课程设计报告2013~2014学年第2学期课程面向过程综合设计课程设计名称学生籍贯信息记录簿设计学生姓名司雨学号1304092019专业班级软件工程(2)班指导教师徐静华姗姗2014年6月一、需求分析随着学校办学规模的不断扩大、办学层次的多样化、在校生的不断增多。开发这系统可以是教务处老师减轻工作压力,比较系统的对学生进行管理,加快速度、加强管理,使各项管理更加规范化。要求设计一个学生籍贯信息记录簿系统,该系统要求对学生籍贯信息进行管理和维护,系统中学生信息应该包括:学号、姓名、性别、年龄、籍贯。创建信息链表并以磁盘文件保存;读取磁盘文件并显示输出所有学生的籍贯信息;按学号或姓名查询其籍贯;按籍贯查询并输出该籍贯的所有学生;能添加、删除和修改学生的籍贯信息。为了解决这些问题,在程序设计中,会设计解决相应问题的子函数,在主函数中进行调用。二、算法设计(一)设计思想:流程图开始菜单界面读取磁盘文件并显示输出所有学生的信息按学号查询学生信息按姓名查询学生信息按籍贯查询并输出该籍贯的所有学生能添加、删除、修改学生信息退出程序读取显示按学号查询按姓名查询按籍贯查询添加学生信息结束程序(二)、设计表示为了更好地满足题目上的信息要求,从而创建了结构体类型,用于储存所有学生的籍贯信息。结构体类型如下:typedefstructstudent//定义新结构体student{charname[20];//定义名字intnum;//定义学号charsex[10];//定义性别intage;//定义年龄charlocation[20];//定义籍贯}S;每个子函数原型及其功能如下:(1)voidPUT该函数为磁盘文件内容的读取函数,将学生的籍贯基本信息存储于txt文档文件中。用此函数来读取并显示,从而实现籍贯信息的现实,函数模块的运行成功。(2)voidmenu该函数为显示菜单函数,为用户提供选择的功能。在该函数内包含了各个功能函数对应的号码,键入后即可以实现所需要使用的功能。(3)voidNUM该函数为按学号查找学生信息函数,当用户键入一个学生学号时,就会判断输入的号码与文件中哪个号码一致,当号码一致时,输出该号码对应的学生所有信息。(4)voidNAME该函数为按学生姓名查找学生信息函数,当用户键入一个学生姓名时,就会判断输入的学生姓名与文件中哪个学生姓名一致,当姓名一致时,输出该姓名对应的学生所有信息。(5)voidLO该函数为按籍贯查找学生信息函数,当用户键入籍贯时,就会判断输入的籍贯与文件中哪个学生籍贯一致,当籍贯一致时,输出该籍贯对应的所有学生信息。(6)voidADD该函数为添加函数,开始会让用户输入添加学生的人数,接下来输入学生的信息。输入完成后,会出现录入成功提示。(7)voidFun该函数为判断函数,是要继续操作还是退出系统。键入Y或y表示继续操作,键入N或n表示退出系统。(8)voidmain该函数为主函数。主函数中将调用上述几个子函数,用switch语句进行选择,选择完毕后会提示是否继续,继续则进入到主菜单,否则退出系统。(三)、实现注释该系统已经能够完全实现题目要求的一些内容,即创建了磁盘文件存储了文件信息,即txt文档中的学生籍贯信息记录簿。能够实现信息的显示、添加学生信息,还有就是查询功能,都已经能够很好的准确查询,从学生的学号或者姓名查询籍贯,或者从籍贯查询学生的姓名等,这些都已经能够实现。三、学生籍贯信息记录簿的使用说明进入系统后按照提示输入数字并键入enter即可实现你需要的操作。进入后会有提示信息提示用户应该怎么做,按照提示输入后再键入enter即可实现功能。具体操作:进入系统后,会出现一个菜单,根据上面的内容进行选择。选择“1”再键入enter,就会显示所有学生信息,之后会出现一个选择,是继续操作,还是退出系统,键入Y或者y时,继续操作,键入N或者n时,退出系统;选择“2”再键入enter,按学号查找学生信息,根据提示依次输入你想查找的学生学号,键入enter,就会显示你查找的学生信息,接下来的选择操作同选择“1”;选择“3”再键入enter,按姓名查找学生信息,根据提示输入学生姓名,键入enter就会显示你查找的学生信息;选择“4”再键入enter,按籍贯查找学生信息,根据提示输入你要找的籍贯对应的学生,键入enter就会显示你查找的学生信息;选择“5”再键入enter,添加学生信息,根据提示输入要加入的学生人数及各个学生信息,键入enter会显示已添加成功;选择“6”再键入enter,退出系统。本系统较为简单,使用时按照提示操作,输入所提示的信息后按enter键即可。四、调试及测试4.1.1显示所有信息进入系统后键入“1+enter”后即可显示如下界面。选择第一个选项后,系统将会读取磁盘文件information.txt中所保存的信息,并在显示屏上显示(如下图),且会提示是继续操作还是退出系统。如果输入y或Y,会跳回主菜单,如果输入n或N,会跳出系统,并显示”欢迎您再次使用!”4.1.2按学号查询系统会先提示:“请输入学号”。输入学号(例如:9)后键入“enter”:随后键入“Y”或“y”继续运行程序。4.1.3按姓名查询键入“enter”后,若磁盘文件中有你输入的学生姓名,则该同学的信息会在显示屏上显示。4.1.4按籍贯查询若磁盘文件所有学生籍贯信息中有你所输入的地点这会显示所有这个地点的学生,若无此地点的学生则直接跳到继续操作这一项。4.1.5添加学生信息系统先会提示你要输入的学生数目。接着会提示要依次输入那些信息:“请输入增加学生的姓名、学号、性别、年龄及籍贯”。输入的信息将会被写入“information.txt”文件中。如下图:4.1.6退出系统随后任意键入一个键就结束程序。4.2调试小结自己做的这个程序虽然简单,但过程中还是遇到了很多困难。例如对字符串的处理。开始时总是无法显示输入的学生姓名,性别,籍贯这三项信息。后来通过自己看书和询问同学,总算把字符串问题处理得当了。程序虽简单,调试过程中总是会出现这样那样很多错误,例如:少分号,未定义等等。有些错误很简单,自己看一下就可以改出来,但有些错误怎么也修改不出来,例如简单的少分号,很多时候加了分号还是没用!此时只有问同学和请教老师。开始时,想从键盘中输入学生信息并录入磁盘文件中,但是因为链表不太会,老是出现错误,最终放弃链表。后来又直接用结构体数组,当程序编写完成并成功运行后,又将结构体数组改写成动态数组。后来还是遇到了问题,开始是所有信息都读取不出来,经过问老师之后问题解决。可是后来的查找也显示不出来,又问了指导老师,老师说是因为指针读取时,将上一个记录覆盖,之后我又把查找的函数改为结构体数组。在整个程序中,只要稍微改动一点点,立马出现很多问题,所以我选择一个函数一个函数测试,当每一个都没有问题时,再统一到一起就不会出现大错误。之后,又修改了小毛病,努力奋斗后,最终成功运行。五、总结通过这次课程设计,使我们更加熟悉的掌握了VisualC++语言的运用。帮助我们熟悉了更多VisualC++语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验.同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。现在知道自己还有很多的不足,而且,由于认识的有限,无法去完善现在的程序,导致这个程序有很多功能还没有实现。对此,自己以后还需要继续学习,把它完善。在这次课程设计中,让我意识到,要做好一个程序,是需要耗费精力和时间的。在编程时,每一步都很重要,只要有一个地方出错,接下来的程序,错误百出。所以,我们在以后编程时,一定要小心仔细!六、参考文献[1]马安鹏.VisualC++程序设计导学。北京:清华大学出版社,2002[2]谭浩强,C程序设计(第四版)[2]电子书籍.VisualC++技术内幕(第四版).网址:[3]BeckZaratian.MicrosoftVisualVisualC++6.0程序员指南.希望图书创作室译.北京:北京希望电脑公司出品,1998[4]RichardC.Leinecker,TomArcher.VisualC++6宝典.张艳,张谦译.北京:电子工业出版社,1999[5]李强,贾云霞.VisualC++项目开发实践.北京:中国铁道出版社,2004[6]郑莉,董渊,张瑞丰.C++语言程序设计.2003.[7]H.M.Deitel,P.J.Deitel.SmallC++HowtoProgram.2006.[8]C语言程序设计/苏小红,王宇颖,孙志岗等编者。北京:高等教育出版社,2011.4[9]C语言课程设计/王新,孙雷编著。北京:清华大学出版社,2009.7附录:#includestdio.h//宏定义函数#includestdlib.h//串操作及内存操作函数#includestring.h//调用系统函数#includemalloc.h//动态内存#defineNULL0typedefstructstudent//定义新结构体student{charname[20];//定义名字intnum;//定义学号charsex[10];//定义性别intage;//定义年龄charlocation[20];//定义籍贯}S;voidFun(){charch1;/*定义字符*/M:printf(继续操作?\n\t——输入Y继续操作/N退出系统[不区分大小写]\n);scanf(%s,&ch1);switch(ch1){case'Y':case'y':break;case'N':case'n':printf(欢迎您再次使用。\n);exit(0);default:{printf(输入有误!请重新输入:);gotoM;}}system(cls);//清屏}voidmenu()//菜单{printf(**********欢迎进入学生籍贯信息记录簿*************\n);printf(\n1--显示所有信息\n);printf(\n2--按学号查询\n);printf(\n3--按姓名查询\n);printf(\n4--按籍贯查询\n);printf(\n5--添加学生信息\n);printf(\n6--结束程序\n);printf(***********请选择您需进行的选项************\n);}voidPUT()//显示学生信息函数{FILE*fp;//定义文件型指针变量S*stu;stu=(S*)malloc(sizeof(S));//给S申请一个内存空间fp=fopen(information.txt,r+);//以读的形式打开文件information.txtif(fp==NULL)//判断文件是否能打开{printf(文件打开失败!);exit(0);}while(!feof(fp)){fscanf(fp,%s,stu-name);//读取姓名、学号、性别、年龄、籍贯信息printf(%s,stu-name);fscanf(fp,%d,&stu-num);printf(%d,stu-num);fscanf(fp,%s,stu-sex);printf(%s,stu-sex);fscanf(fp,%d,&stu-age);printf(%d,stu-age);fscanf(fp,%s,stu-location);printf(%s\n,stu-location);}fclose(fp);//关闭文件free(stu);//释放内存}voidADD()//添加学生信息函数{FILE*fp;S*stu;//定义一个stu指针inta;stu=(S*)malloc(sizeof(S));//申请内存空间fp=fopen(information.txt,a+);//以添加的方式打开文件if(