版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Companynumber:【WTUT-WT88Y-W8BBGB-BWYTT-19998】Companynumber:【WTUT-WT88Y-W8BBGB-BWYTT-19998】学生信息管理系统《高级语言程序设计》课程设计报告学生信息管理系统的设计与实现学号:姓名:彭方林专业班级:计算机科学与技术1401日期:2015年11月11日信息科学与工程系目录1、课程设计目的……………………….22、课程设计内容……………………….23、学生信息管理系统的实现………….84、系统测试及系统运行效果………….95、系统设计遇到的问题及解决方案…………………136、总结与收获…………13附录源程序代码………………………157、课程设计成绩………………………351 课程设计的目的课程设计题目学生信息管理系统的设计与实现课程设计目的本课程设计是在学习C++基本理论之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。学生通过课程设计在下述各方面得到锻炼:①.能根据实际问题的具体情况,结合C++的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。②.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正确性,学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。2 课程设计的内容题目分析设计一个学生信息管理系统,其中包括:学生基本信息:学号、姓名、性别、成绩(语文、离散数学、英语、毛概、电路基础、概率论、体育)。因为课程设计时间为大二上学期,所以成绩采用的是这学期本专业的课表。学生信息管理系统功能如表1-1所示,具体功能如下:系统菜单显示学生信息录入功能学生信息浏览功能查询:①.学号查询②.姓名查询学生信息的删除与修改系统中学生信息数量统计学生信息排序(冒泡排序)表1-1程序功能学号查询姓名查询添加学生信息删除学生信息修改学生信息查看已添加学生信息统计学生信息数量学生信息排序系统程序模块设计菜单模块绘制菜单(包含学号查询、姓名查询、添加学生信息、删除学生信息、修改学生信息、查看已存档学生信息、统计学生信息数量、学生信息排序)。根据用户输入的值调用对应的模块函数实现该项功能信息录入模块{查找系统中是否已存在该学号对应的信息if(存在){提示信息已存在}else{向文件中写入各项信息}信息读出模块{判断系统中是否存在学生信息if(不存在){提示信息不存在}else{在屏幕上显示该学号对应的信息}信息查询模块{if(学号查询){判断文件是否为空查找系统中是否有该学号信息if(存在)输出学生信息else提示学生信息不存在if(姓名查询){判断文件是否为空查找系统中是否有该姓名对应信息if(存在)输出学生信息else提示信息不存在创建系统文件夹模块{判断系统文件夹是否存在if(不存在)创建“D\\学生信息”文件夹判断系统文件是否存在if(不存在)创建“D:\\学生信息\\学生信息.txt”文件删除学生信息模块{查看系统文件是否为空if(文件为空)提示学生信息不存在else查找系统中是否有该学号信息if(存在)删除该学生信息else提示该学生信息不存在修改学生信息模块{查看系统中是否存在该学生信息if(存在){删除该学生信息添加该学生新信息}修改成功统计学生信息数量模块{if(文件存在)读取学号,每读取到一个学号,数量+1返回信息数量的值}学生信息排序模块{if(打开成功)读取全部信息存到结构体数组,按照冒泡排序将信息按学号升序排序之后将数组内容依次存入文件,并覆盖旧文件。}各模块之间结构图如图2-1所示学生信息管理系统学生信息管理系统系统文件检测系统文件检测删除学生信息查询学生信息学生信息排序统计信息数量浏览学生信息修改学生信息添加学生信息删除学生信息查询学生信息学生信息排序统计信息数量浏览学生信息修改学生信息添加学生信息学号查询姓名查询学号查询姓名查询图2-1模块图系统主要函数学生信息管理采用结构化程序设计思想,除主函数外共设计了8个函数,函数原型及功能说明如图2-2所示:图2-2系统主要函数程序流程图开始开始菜单菜单否添加否添加是否浏览是否浏览信息录入是否 信息录入是否显示全部信息修改显示全部信息修改修改信息是否删除修改信息是否删除是否是否删除信息查询删除信息查询是否排序是否排序是 是学号查询姓名查询冒泡排序学号查询姓名查询冒泡排序否查看否查看是是显示排序后的信息显示排序后的信息结束结束图2-3程序流程图3 学生信息管理系统的实现学号查询程序每次从文件中读取出一位学生的所有信息,将读取到的学号与用户所输入的学号进行比较。如果两个学号相同,表示已找到该学号对应的信息,显示出该学生的全部信息,查找结束。若两个学号不同,则重新读取下一位学生的信息进行比较,直到文件读取到尾部,显示未找到该学号对应的信息。姓名查询程序每次从文件中读取出一位学生的所有信息,将读取到的姓名与用户所输入的姓名进行比较。如果两个姓名相同,表示已找到该姓名对应的信息,显示出该学生的全部信息,查找结束。若两个姓名不同,则重新读取下一位学生的信息进行比较,直到文件读取到尾部,显示未找到该姓名对应的信息。添加学生信息根据用户输入的学生信息数量将下列过程循环对应的次数:新建一个标识变量find的值为-1,代表文件中不存在该学生信息。用户输入学生信息后打开文件读取每个学生信息的信息,比较两个信息的学号是否相同。如果相同则修改find的值为0,代表文件中已存在该学生的信息,同时提示“此学生信息已存在,请进入菜单选择修改信息或者删除信息之后再添加!”。检查完学生信息是否重复输入后,若find的值为-1,则将该学生信息存入到文件中,若find值为0,则跳过此步骤。删除学生信息新建一个标识变量find的值为-1,代表文件中不存在该学生信息。用户输入学生信息后打开文件读取每个学生信息的信息,比较两个信息的学号是否相同。如果相同则修改find的值为0,代表文件中存在该学生的信息。若find的值为0则执行删除功能:新建一个文件“学生信息”作为临时文件,用来存储删除后的信息。读取一位学生的全部信息,如果该信息的学号和想要删除的学号不同,则将该学生信息存到“学生信息”中。若两个学号相同,则跳过该学号,不将之存入临时文件中。文件读取到末尾后,删除“学生信息.txt”,将“学生信息重命名为“学生信息.txt”,则需要删除的信息已从文件中删除。修改学生信息修改学生信息的功能为删除和添加功能的结合,用户输入需要修改的学生学号后,系统会先调用删除学生信息功能删除该学号对应的信息,之后再调用添加学生信息功能添加新的学生信息,修改完毕。查看已添加学生信息该功能是显示文件中所有的学生信息,根据学生信息数量确定循环次数,依次输出每位学生的信息。统计学生信息数量先新建一个变量d的值为0,代表学生信息数量。While循环的条件为(能读取到学号),当条件成立时将文件位置指针从当前学号尾部移动到学号之前,否则信息会读取混乱,并将d的值加1。当循环条件不成立时,返回d(学生信息数量)的值。每次需要用到学生信息数量的值时都会调用该函数,求出最新的信息数量。学生信息排序排序功能使用的是冒泡排序,将文件中的信息读取到数组中,通过冒泡排序将信息按照升序排序后存到文件中,再次显示的学生信息就是排序后的信息。4 系统测试及系统运行效果系统主界面进入系统后将弹出菜单界面。系统主界面运行效果如图4-1所示图4-1系统主界面添加学生信息首先输入添加信息的数量,然后输入第一位学生的信息,提示“添加信息成功”后再依次输入其余的学生的信息。添加学生信息的运行效果如图4-2所示图4-2添加学生信息学号查询输入想要查询的学号,如果存在该学生,则显示学生信息,不存在就提示该学生信息不存在。学号查询的运行效果如图4-3、4-4所示图4-3学号查询(不存在)图4-4学号查询(存在)姓名查询输入想要查询的姓名,如果存在该学生,则显示学生信息,不存在就提示该学生信息不存在。姓名查询的运行效果如图4-5、4-6所示图4-5姓名查询(不存在)图4-6姓名查询(存在)显示全部学生信息显示学生信息的运行效果如图4-7所示图4-7显示全部学生信息统计学生信息数量显示学生信息的运行效果如图4-8所示图4-8统计学生信息数量学生信息排序学生信息排序采用的冒泡排序,排序成功后会提示返回菜单或者查看排序后的信息。学生信息排序的运行效果如图4-9、4-10所示图4-9学生信息排序图4-10显示排序后信息修改学生信息输入需要修改的学号,如果不存在,会提示该学生信息不存在。否则删除旧信息,添加该学生新的信息。修改学生信息的运行效果如图4-11所示图4-11修改学生信息删除学生信息输入学号,如果学号不是12位,提示学号错误,否则如果存在该学号信息,删除该学生信息。删除学生信息的运行效果如图4-12所示图4-12删除学生信息删除后的信息如图4-13所示图4-13删除后的信息5系统设计遇到的问题及解决方案问题1:c++的文件读写不会使用。百度查找c++文件读写的方法,通过不同的帖子学习有关文件操作的各种用法和小技巧。使用fstream头文件,定义fin文件输入流,fout文件输出流。通过使用文件流的方式读取或者写入文件。问题2:代码没有报错,但是运行结果出错。将出错的函数实现代码注释掉,改成在屏幕上显示一句话。根据这句话是否显示判断程序是执行到什么地方出错的,再根据具体的情况修改代码直到正确。问题3:程序运行后闪退,不提示任何错误。使用vs的调试功能,找到程序是执行到那个地方停止运行的,修改此处的代码直到程序运行无误。问题4:不知道怎样删除文件中的指定数据,无法达到删除学生信息的功能。读取全部信息将不需要删除的信息存到临时的文件中,再将旧文件删除,修改临时文件为旧文件名,则文件中需要删除的信息已经删除。6总结与收获最初想做这个程序的起因是暑假打工夜班太无聊,所以萌生了自己做一个有点实用功能的小程序。因为在大一的时候看了一点C++的书籍对C++面向过程的部分还算比较了解,而且一直觉得C++的语法比C简单,所以本程序的代码都是用C++写的。打工的时候没带电脑,当时在网上找到一个手机上能用的编程软件,名字是c4droid功能非常强大,和vs2013一样可以显示出代码中的常见语法错误。最初构想的程序没有那么多的功能,在实际编写的时候感觉缺了一些功能不够完善再慢慢添加。在编写的时候遇到过很多问题,主要是C语言的知识掌握的还不够精通,像结构体和为文件的操作都是当时现学的,而且C和C++的语法出入比较大,当时都是需要使用某种功能的时候在网上查找帖子学习下是怎么用的然后根据自己的需要写出适合的代码。代码虽然能通过编译但是错误还是很多的,甚至有些时候都不知道错在什么地方,这是最头疼的地方。解决的方法就是把出现错误的函数里的代码注释掉,让它只显示一句话,慢慢查找是哪个代码段出了错误,最终解决了全部的问题。当时程序的大致框架用了五晚上的时间编写完成,后面又陆陆续续的对程序中不理想的地方做了一些更改最终做出了一个理想的程序。开学后课程设计就直接用的这个程序作为作业,但是又出现了新的问题,因为那时候是在手机上编写的代码,安卓系统使用的linux核心,代码中调用的system()命令和电脑上windoows系统的system()命令不同,还有文件操作的路径也要重新更改。更改完毕后又想添加一些新的功能而且最初的程序没有使用结构体,后来对结构体有了新的了解,就把程序又重新改写了一下。为了把程序做成一个能在其他电脑上也能使用的软件,又在网上学了vs中对程序的打包,为了打包出一个理想中的安装包,找了好多帖子用了一天的时间才打包出了一个正常的安装包,至此程序大功告成通过这次程序的编写加深了我对C++的理解,在程序的编写过程中又学习了很多新的知识,明白了自己的短处在哪里,以后需要在哪个方向努力,认识了很多的不足。从中学习了很多,收获了很多。动手是提升能力的有效方法,就像我在编写这个程序之前可能就比其他同学多懂一点书上的知识。但在写代码的过程中遇到了很多问题,每解决一个问题,就多学了一些知识,能力也有所提高。可能很多库函数我们不知道怎么用,比如你想要实现某一个功能,你可以去网上找一下有关的帖子,多找几个帖子可能就会找到大神的帖子教你怎么用库函数去实现这些功能。最后总结一下,百度是万能的。附录学生信息管理系统源代码/*程序功能:1.系统菜单显示2.学生信息录入功能3.学生信息浏览功能4.查询:①.学号查询②.姓名查询5.学生信息的删除与修改6.系统中学生信息数量统计7.学生信息排序(冒泡排序)作者:彭方林班级:计算机科学与技术1401学校:河南理工大学万方科技学院日期:2015年11月11日*/#include<iostream>xt");xt",ios::app); if())xt"); fflush(stdin);xt"); if()) { cout<<"系统所有学生信息为:"<<endl; for(i=0;i<data_number;i++)xt"); fin>>ch; if()) { cout<<"没有找到学生信息,请添加信息之后再试!"<<endl; } (); ("D:\\学生信息\\学生信息.txt"); if()) { for(i=0;i<data_number;i++) { fin>>>>>>; for(j=0;j<7;j++) fin>>[j]; if(number_find==xt"); if()) { for(i=0;i<data_number;i++) { fin>>>>>>; for(j=0;j<7;j++) fin>>[j]; if(name_find== { find=0; cout<<"该学生信息为:"<<endl; cout<<"学号:"<<<<""<<"姓名:"<<<<""<<"性别:"<<<<""<<"语文:"<<[0]<<"离散数学:"<<[1]<<"英语:"<<[2]<<"毛概:"<<[3]<<"电路基础:"<<[4]<<"概率论:"<<[5]<<"体育:"<<[6]<<endl; break; } } if(find!=0) cout<<"未找到该姓名对应的信息!"<<endl; (); } else cout<<"系统中还没有此姓名的信息!"<<endl;}voidfolder()xt",ios::in); if(!fin)xt");xt"); fin>>ch; if()) { cout<<"没有找到学生信息,请添加信息之后再试!"<<endl; } (); ("D:\\学生信息\\学生信息.txt"); if()) { for(i=0;i<data_number;i++) { fin>>>>>>; for(j=0;j<7;j++) fin>>[j]; if(number_delete==xt"); fin>>ch; if()) { cout<<"没有找到学生信息存档!"<<endl; } else { (); ("D:\\学生信息\\学生信息.txt"); if()) { for(i=0;i<data_number;i++) { fin>>>>>>; for(j=0;j<7;j++) fin>>[j]; if(number_delete!=xt");xt rename("D:\\学生信息\\学生信息","D:\\学生信息\\学生信息.txt");xt cout<<"删除信息成功"<<endl; } else cout<<"未找到该学号对应的信息!"<<endl; } } else cout<<"系统中没有此学号信息"<<endl; returnfind;}intstudent_data_number()xt"); fin>>ch; if())xt"); if())xt",ios::app); if())xt"); if()) { for(i=0;i<data_number;i++) { fin>>s[i].number>>s[i].name>>s[i].sex; for(j=0;j<7;j++) fin>>s[i].grade[j]; } (); =s[0].number; for(i=0;i<data_number-1;i++) for(j=0;j<data_number-1;j++) { if(s[j].number>s[j+1].number) { number_max=s[j]; s[j]=s[j+1]; s[j+1]=number_max; } } ("D:\\学生信息\\学生信息.txt"); if()) { for(i=0;i<data_number;i++) fout<<s[i].number<<""<<s[i].name<<""<<s[i].sex<<""<<s[i].grade[0]<<""<<s[i].grade[1]<<""<<s[i].grade[2]<<""<<s[i].grade[3]<<""<<s[i].grade[4]<<""<<s[i].grade[5]<<""<<s[i].grade[6]<<""; } (); cout<<"排序成功!"<<endl; } else cout<<"打开文件失败,无法完成排序!"<<endl;}intmain(){ system("color5F");号查询"<<endl; cout<<"2.姓名查询"<<endl; cout<<"3.添加学生信息"<<endl; cout<<"4.删除学生信息"<<endl; cout<<"5.修改学生信息"<<endl; cout<<"6.查看已存档的学生信息"<<endl; cout<<"7.查看已存档的学生信息数量"<<endl; cout<<"8.学生信息排序"<<endl;menu_again: fflush(stdin);//清空输入缓冲区 cin>>menu; while(menu<'1'||menu>'8')//当输入数值不在菜单范围内会提示输入错误 { cout<<"输入无效,请输入正确的数字!"<<endl; fflush(stdin); cin>>menu; } system("cls"); switch(int(menu)-48)//将menu从字符型强制转换为整形 { case1:{ charch; intdata_number; data_number=student_data_number();//求出文件中已存在的信息数量确定查找学号时的循环次数 number: cout<<"学号查询:"<<endl; cout<<"请输入12位学号:"<<endl; fflush(stdin); cin>>number_find; student_number_find(number_find,data_number); cout<<"按*键返回菜单,按#键重新查找!"<<endl; fflush(stdin); cin>>ch; while(ch!='*'&&ch!='#') { cout<<"输入错误,请输入*或#!"<<endl; fflush(stdin); cin>>ch; } system("cls"); if(ch=='*') gotomenu;//跳转到菜单 else gotonumber; break; } case2:{ charch; intdata_number; data_number=student_data_number(); name: cout<<"姓名查询"<<endl; cout<<"请输入学生姓名:"<<endl; cin>>name_find; student_name_find(name_find,data_number); cout<<"按*键返回菜单,按#键重新查找!"<<endl; fflush(stdin); cin>>ch; while(ch!='*'&&ch!='#') { cout<<"输入错误,请输入*或#!"<<endl; fflush(stdin); cin>>ch; } system("cls"); if(ch=='*') gotomenu; else gotoname; break; } case3:{ intn; intdata_number; charch; data_number=student_data_number(); add: cout<<"添加学生信息"<<endl; cout<<"请输入所添加学生信息的数量"<<endl; fflush(stdin); cin>>n; input_data(n,data_number); cout<<"按*键返回菜单,按#键重新添加信息!"<<endl; fflush(stdin); cin>>ch; while(ch!='*'&&ch!='#') { cout<<"输入错误,请输入*或#!"<<endl; fflush(stdin); cin>>ch; } system("cls"); if(ch=='*') gotomenu; else gotoadd; break; } case4:{ charch; stringstudent_delete; intdata_number; data_number=student_data_number(); delete_data: cout<<"删除学生信息:"<<endl; cout<<"请输入该学生的学号,系统会删除该学生所有信息!"<<endl; fflush(stdin); cin>>student_delete; while()!=12)//求字符串student_delete的长度 { cout<<"输入错误,请输入12位学号:"<<endl; fflush(stdin); cin>>student_delete; } student_data_delete(student_delete,data_number); cout<<"按*键返回菜单,按#键再次删除!"<<endl; fflush(stdin); cin>>ch; while(ch!='*'&&ch!='#') { cout<<"输入错误,请输入*或#!"<<endl; fflush(stdin); cin>>ch; } system("cls"); if(ch=='*') gotomenu; else gotodelete_data; break; } case5:{//先删除旧信息再添加新信息完成修改 charch; intdata_number,a; stringstudent_delete; data_number=student_data_number(); modify_data: cout<<"修改学生信息:"<<endl; cout<<"请输入该学生的学号,系统会修改该学生所有信息!"<<endl; fflush(stdin); cin>>student_delete; a=student_data_delete(student_delete,data_number);//删除学生旧信息 if(a==0) student_data_modify();//添加该学生新信息 cout<<"按*键返回菜单,按#键再次修改!"<<endl; fflush(stdin); cin>>ch; while(ch!='*'&&ch!='#') { cout<<"输入错误,请输入*或#!"<<endl; fflush(stdin); cin>>ch; } system("cls"); if(ch=='*') gotomenu; else gotomodify_data; break; } case6:{ charch; intdata_number; data_number=student_data_number(); output_data(data_number); cout<<"按*键返回菜单!"<<endl; fflush(stdin); cin>>ch; while(ch!='*') { cout<<"输入错误,请输入*!"<<endl; fflush(stdin); cin>>ch; } if(ch=='*') gotomenu; break; } case7:{ charch; intdata_number; data_number=student_data_number(); cout<<"学生信息数目:"<<endl; cout<<"已添加的学生信息数目为:"<<data
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赣东学院《逻辑学导论》2025-2026学年期末试卷
- 民办合肥滨湖职业技术学院《精神科护理学》2025-2026学年期末试卷
- 丙烯酸树脂装置操作工变革管理模拟考核试卷含答案
- 景德镇陶瓷大学《文献信息检索与利用》2025-2026学年期末试卷
- 民办合肥财经职业学院《民法学》2025-2026学年期末试卷
- 中国医科大学《税法》2025-2026学年期末试卷
- 三氯硅烷生产工安全风险测试考核试卷含答案
- 水供应服务员安全宣教强化考核试卷含答案
- 拍卖服务师岗前基础安全考核试卷含答案
- 矿井测风工标准化知识考核试卷含答案
- 2026“庆蓝优引·社会招引”市属事业单位人才招聘43人笔试备考题库及答案解析
- 2026人教版二年级数学下册《综合与实践 数学连环画》教案
- 教师防性侵承诺书
- 英语四川成都市2023级(2026届)高三年级第二次模拟测试(成都二诊)(3.23-3.25)
- 重庆市2026年普通高等学校招生全国统一考试调研(四)数学试卷
- 2024中信金融对公业务面试高频真题及完整答案
- 工业固废综合治理行动计划落实
- 智能化全过程监理实施细则
- 品质异常处理程序
- DZ∕T 0291-2015 饰面石材矿产地质勘查规范
- 《乙烯基聚乙二醇醚(VPEG)、乙烯氧基丁基聚乙二醇醚(VBPEG)》
评论
0/150
提交评论