您好,欢迎访问三七文档
C语言课程设计报告《计算机程序设计基础》课程设计题目学生信息管理系统学生姓名胡乔楠学号0909082109指导教师汤哲学院信息科学与工程学院专业班级电气0821班完成时间七月四号目录第一章项目概述1.1问题的要求分析与描述1.2问题的要求和限制第二章项目设计2.1系统程序的组成框图2.2:程序的流程图2.3详细设计第三章调试与结果3.1调试方法3.2测试结果(见附录A、B)第四章工作总结附录A、B;源代码;参考文献;第一章项目概述1.1问题的要求分析与描述我设计一个学生信息管理系统。首先学生的信息包括:学号、姓名、年龄、性别、出生年月、家庭地址、电话号码、电子邮件、毕业学校等等。这个管理系统需要实现以下功能:1.系统以菜单的方式工作;2.实现学生信息的录入功能,学生的信息保存在文件中;3.实现学生信息的输出功能,输出功能应包括如下算法:3_1:单个学生按学号查询功能;3_2:单个学生按姓名查询功能;3_2:全部学生的浏览功能;3_3:全部学生按学号排序浏览功能;4.实现学生信息的删除和修改;1.2问题的要求和限制1:系统要美观,有欢迎界面;2:在输入信息时要有一定的容错能力,比如年龄输入为负数或者大于150就提示有错,要求重新输入;第二章项目设计2.1系统程序的组成框图如下:欢迎界面0:退出系统;1:学生注册;2:学生查询;3:学生信息修改4:学生信息删除;1:输入学生的学号、姓名、年龄、性别、出生年月、家庭地址、电话号码、电子邮件、毕业学校等等。并保存在名为INFORMATION.TXT的文本中。只有在学生信息录入后才能查询学生信息。可以按单个学生学好来查询,也可以按单个学生姓名来查询。其中有浏览功能1:按时间先后来浏览。2:按学号大小来浏览。1:系统按时间先后打印所有学生的信息。2:系统按学好的大小打印所有学生的信息。先输入学生的学号,系统查询持学生,如果没有此学生,则系统自动返回。如果由此学生细心,则打印学生信息,并提示用户删除。先输入学生的学号,系统查询持学生,如果没有此学生,则系统自动返回。如果由此学生细心,则打印学生信息,给用户选择要修改学生的信息,并修改;结束2.2:我设计的程序,其主要流程图如下:假假真假真真假真真假假真假真假真假结束开始输入Ch1=0Ch1=1Ch1=2Ch1=3Ch1=4表达式二学生注册是否继续学生查询学生删除是否继续是否继续是否继续学生修改是否继续2.3详细设计系统在visualstudioc++中运行,visualstudioc++支持中文并且有强大输出功能。这样就能作出美观的界面,并且制作出详细的菜单。2.3.1编译预处理命令在开头就调用了“stdio.h”和“string.h”函数,并且定义了一个结构体数组,数组中有一百个结构体。每个结构体中有长整型,整型,字符型数组,还有指针,为以后制定链表用。定义了一个全局变量“i”。此变量来记录学生的个数。2.3.2main函数所有的函数都写在main函数中并给他调用。Main函数中首先定义了一些整型数据,ch1、ch2、j、长整型数据“number”,字符数组“name”,文件指针。接着“printf”函数打印出一个欢迎界面。用死循环进入一个选择菜单,用户输入选项来运行系统。用“scanf”函数来给ch1赋值。接着程序就进入一个多分支if语句中。通过判断,程序运行进入相应的功能区。Ch1=0就会跳出此模块,返回上一模块。Ch1=1时,函数进入学生信息录入功能,用户输入学生的信息。在输入信息时会有容错能力。比如输入性别不是男或女,就会提示输入错误,要求用户重新输入;使用“fwrite”函数,使学生的信息保存在C盘中名为“INFORMATION.txt”的文档中。ch1=2时,函数进入学生信息查询功能。用户根据菜单输入信息进入相应的子功能。用户可以更具菜单选择相应的功能。Ch3=0,系统就会返回上一个功能。Ch3=1,系统就会按学生学号来查询学生信息,用户输入学号。若学号正确,则系统输出相应的学生信息。若错误,系统就提示用户学号错误,请重新输入。Ch3=2,系统就会按学生姓名来查询学生信息,用户输入姓名。若姓名正确,则系统输出相应的学生信息。若错误,系统就提示用户姓名错误,请重新输入。Ch3=3,系统进入学生信息浏览功能,同样有一个菜单供用户选择,1为浏览所有学生的信息。用“for”循环把所有学生的信息从文本中用“fread”函数读出来,在把所有结构体成员一一打印出来。这时调用了一个“print(intl)”函数。在主函数中,把“i”传给“n”。2为按学号的顺序来浏览所有学生的信息,调用“paixu(intn)”函数。主函数把“i”的值传给“n”,实现学生的信息排序,并打印出来。同样,选择为0时就返回上一级菜单。若ch1=3,系统进入删除功能模块。此时调用了“deletes(intn)”,主函数把“i”的值传给“n”,实现学生信息的删除功能。若ch1=4,系统进入修改功能模块,此时调用了“changes()”,主函数实现学生信息的修改功能。(欢迎界面、开始菜单、容错能力、单个查询功能见附录A)2.3.3print函数“print(intl)”函数中,从主函数接收变量“i”,并把其值赋给“l”。“print(intl)”函数用“structstudents*p1”,定义了一个结构体指针。接着用“printf”函数打印各个结构体的成员,“p1-num”等来表示成员。2.3.4paixu函数“paixu(intn)”从主函数接收变量“i”,并把其值赋给“n”。“paixu(intn)”中定义了两个整型数据,用来作为循环时的变量。以及两个结构体数组u[100]和v[100],一个文件指针。函数先用for循环和“fread”函数把文件中的数据读出来并赋值给u[100]。接着对u[100]来进行冒泡排序,v[100]作为中间变量来实现排序。排完后,把u[100]中的数据用“printf”函数打印出来。2.3.5deletes函数“deletes(intn)”从主函数接收变量“i”,并把其值赋给“n”。“deletes(intn)”中定义了三个整型变量“j”、“k”和“chioce”,一个长整型变量“number”,一个结构体数组“structstudentsu[100]”,一个文件指针。函数先判断有没有学生信息被录入,如果没有,系统则自动返回。如果有,则要求用户输入要删除学生的学号。用“scanf”函数给“number”赋值,并判断文本中是否有此学生的信息,如果此学生的信息不存在,则系统会提示用户学生不存在,并自动返回。如果学生信息存在,则系统将打印学生的全部信息,并再一次提示用户是否要删除此学生。当用户选择1时,系统删除此学生信息,选择否时,系统将自动返回,学生信息改变。2.3.6changes函数“changes()”函数没有形参,直接对文件中的结构体进行修改。“changes()”函数中定义了两个文件指针“fp1”和“fp2”,一个长整型数据“number”,三个整形数据“j”“flag”“choice”。函数先判断有没有学生信息被录入,如果没有,系统则自动返回。如果有,则要求用户输入要修改学生的学号。“fp1”指向文本“INFORMATION.txt”,“fp2”在c盘中重新建立一个文本“change.txt”。用“fread”读出文本中的学生信息。用“scanf”函数给“number”赋值,并用“for”循环来判断文本中是否有此学生的信息,如果此学生的信息不存在,则系统会提示用户学生不存在,并自动返回。如果学生信息存在,则系统将调用“print(intn)”函数打印学生的全部信息,并给用户选择要修改的具体内容。用“switch”分支语句来判断并修改用户所指定的项。不管每个结构体是否修改,都会用“fwrite”函数把读出来的结构体写进“change.txt”中。For循环终止后,再把所有的结构体从“change.txt”中写进空的“INFORMATION.txt”中。这样就能很好的完成修改了。(其中浏览、按学号排序浏览、学生删除、学生修改的具体的执行结果见附录B)第三章调试与结果3.1调试方法:visualstudioc++有很好的调试与查错功能,写好代码后首先按“build”键来查错。程序会把所有错误和警告显示出来,找到程序有错的地方,参考错误的原因,仔细查看程序改写代码,确认无误后,再按“build”键。若有错误就再看错误并改写原代码。若无误就再纠正下一个错误。很多错误就是这样一个一个慢慢地解决。调试结果分析与讨论:开始写的代码是实现学生信息录入与单个查询功能,在查询结果时,发现毕业学校的信息被重复打印到了电子邮件里面。接着就查找打印是否有错,确认无误后,结果没有变。就查找程序开始的赋值是否有错,最终发现了错误,在“scanf(“%s”,&s[j].graduateschool);”中误加了“&”这个符号。修改后,打印结果正确。对所有学生的信息按照学号的顺序来浏览功能中,要用到冒泡排序法,用两个“for”循环来完成,其中的变量有固定的形式要求。并且终止条件也很严格的要求。刚开始我用了错误的算法,后来通过问老师,得到正确的方法,再经过反复的推敲,实现了排序功能。在实现修改功能中,我找不到算法,从书上的找了一个算法,书写完后,发现程序直接跳出修改的选择信息模块。经检查后发现“getchar()”这个函数出了问题,最后修改了代码,删除“getchar()”函数。得到了正确结果。主要问题及解决方法1。在书写长代码时,要用到很多“{}”这样的符号,有时会漏掉这个符号,导致错误;所以书写时一定要非常细心,严格按照语法来写2.“}”花括号在某些地方有很多,在修改程序或者添加程序时会很麻烦,不知道应该在哪个地方添加,或者该删除哪个“}”。所以,凡是有“{}”的都要用“/*文字*/”来标记,以后就不用一个个找原来语句了。3。在修改过程中修改了一个变量,却没有发现其他地方的相应程序也要修改,导致查出许多错误。4。我曾经用两个指针指向同一个文件,visualstudioc++并不报错,但是我的排序和修改功能一直实现不了。最后问老师,才知道一个指针只能指向同一个文件。修改了指针及相应的程序后,我的功能实现了。5.使用冒泡排序法时,结构体的个数控制得很严格,最终发现for循环多走了一步。把“n”减一就解决了问题。3.2测试结果:输入了学生的信息后能正确打印。有时候在字符数组里面输入整型数据时,后面的“scanf”函数就不再正确执行。把整型数据改为字符型后,就能正确运行程序了。有时候排序功不正确,是在终止结果里面出了错误。所有的程序运行数据和结果都在附录A、B中。第四章工作总结这次课程设计的任务原本要求是以十个人为一组一起合作完成,但是作为一个已经选了计算机科学与技术专业的学生,应该具备很强的编程能力。为了好好锻炼自己的编程能力,我毅然决定一个人独立完成此次课程设计。刚开始我只知道要用文件来做这个课程设计,但是我的文件那块掌握得不好,就看老师给我们讲的文件的程序。先是复习,再去写程序。按照课程设计的要求,我先定义结构体,再把所有的知识都运用上去。前四天,我把学生信息录入功能、学生信息按学号当个查询功能做好了。在按学生姓名查询的时候,要用到“#includestring.h”这个函数。并且字符串处理函数都忘了,接着就看书把“strcmp”这个函数的功能及用法掌握。最后完成了按学生姓名查询功能。看着自己完成的程序,心中很高兴。还拿了同学的信息来做实验。当时信心大增,想着用一个星期就能完成任务。没想到后面的程序是如此的困难。因为前四天我写的程序还不长,所用到的知识和算法都还相对简单。到了浏览学生信息的哪一个功能,我就几天都实现不了了。在这之前,我编写的程序都没有用模块化编写,一个主函数就包括了上述所有的功能。我就开始编写功能函数。把排序功能全写到一个“paixu(intn)”中。我到处查阅资料,向老师请教,问同学。终于搞清楚了算法。就是用冒泡排序法。我按照
本文标题:C语言程序设计报告
链接地址:https://www.777doc.com/doc-7025676 .html