




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计课程设计报告学生信息管理系统的设计与实现学 号: 141608010141 姓 名: 彭方林 专业班级: 计算机科学与技术1401日 期: 2015年11月11日 信息科学与工程系目 录1、课程设计目的.22、课程设计内容.23、学生信息管理系统的实现.84、系统测试及系统运行效果.95、系统设计遇到的问题及解决方案136、总结与收获13附录 源程序代码15 7、课程设计成绩351课程设计的目的 1.1 课程设计题目学生信息管理系统的设计与实现 2.1 课程设计目的本课程设计是在学习C+基本理论之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。学生通过课程设计在下述各方面得到锻炼:.能根据实际问题的具体情况,结合C+的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正确性,学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。2课程设计的内容2.1 题目分析设计一个学生信息管理系统,其中包括:学生基本信息:学号、姓名、性别、成绩(语文、离散数学、英语、毛概、电路基础、概率论、体育)。因为课程设计时间为大二上学期,所以成绩采用的是这学期本专业的课表。学生信息管理系统功能如表1-1所示,具体功能如下:1. 系统菜单显示2. 学生信息录入功能3. 学生信息浏览功能4. 查询:.学号查询.姓名查询5. 学生信息的删除与修改6. 系统中学生信息数量统计7. 学生信息排序(冒泡排序)表1-1 程序功能学号查询姓名查询添加学生信息删除学生信息修改学生信息查看已添加学生信息统计学生信息数量学生信息排序2.2 系统程序模块设计2.2.1 菜单模块 绘制菜单(包含学号查询、姓名查询、添加学生信息、删除学生信息、修改学生信息、查看已存档学生信息、统计学生信息数量、学生信息排序)。根据用户输入的值调用对应的模块函数实现该项功能2.2.2 信息录入模块查找系统中是否已存在该学号对应的信息if(存在)提示信息已存在else向文件中写入各项信息2.2.3 信息读出模块判断系统中是否存在学生信息if(不存在)提示信息不存在else在屏幕上显示该学号对应的信息2.2.4 信息查询模块 if(学号查询) 判断文件是否为空 查找系统中是否有该学号信息 if(存在) 输出学生信息 else 提示学生信息不存在 if(姓名查询) 判断文件是否为空 查找系统中是否有该姓名对应信息 if(存在) 输出学生信息 else 提示信息不存在 2.2.5 创建系统文件夹模块 判断系统文件夹是否存在 if(不存在) 创建“D学生信息”文件夹 判断系统文件是否存在 if(不存在) 创建“D:学生信息学生信息.txt”文件 2.2.6 删除学生信息模块 查看系统文件是否为空 if(文件为空) 提示学生信息不存在 else 查找系统中是否有该学号信息 if(存在) 删除该学生信息 else 提示该学生信息不存在 2.2.7 修改学生信息模块 查看系统中是否存在该学生信息 if(存在) 删除该学生信息 添加该学生新信息 修改成功 2.2.8 统计学生信息数量模块 if(文件存在) 读取学号,每读取到一个学号,数量+1 返回信息数量的值 2.2.9 学生信息排序模块 if(打开成功) 读取全部信息存到结构体数组,按照冒泡排序将信息按学号升序排序 之后将数组内容依次存入文件,并覆盖旧文件。 2.2.10 模块图 各模块之间结构图如图2-1所示学生信息管理系统 系统文件检测删除学生信息查询学生信息学生信息排序统计信息数量浏览学生信息修改学生信息添加学生信息学号查询姓名查询 图2-1 模块图2.3 系统主要函数学生信息管理采用结构化程序设计思想,除主函数外共设计了8个函数,函数原型及功能说明如图2-2所示: 图 2-2 系统主要函数 2.4 程序流程图 开始 菜单否添加是否浏览信息录入是否显示全部信息修改修改信息是否删除是否删除信息查询是否排序是学号查询姓名查询冒泡排序否查看是显示排序后的信息 结束 图2-3 程序流程图3学生信息管理系统的实现3.1 学号查询 程序每次从文件中读取出一位学生的所有信息,将读取到的学号与用户所输入的学号进行比较。如果两个学号相同,表示已找到该学号对应的信息,显示出该学生的全部信息,查找结束。若两个学号不同,则重新读取下一位学生的信息进行比较,直到文件读取到尾部,显示未找到该学号对应的信息。3.2 姓名查询程序每次从文件中读取出一位学生的所有信息,将读取到的姓名与用户所输入的姓名进行比较。如果两个姓名相同,表示已找到该姓名对应的信息,显示出该学生的全部信息,查找结束。若两个姓名不同,则重新读取下一位学生的信息进行比较,直到文件读取到尾部,显示未找到该姓名对应的信息。3.3 添加学生信息根据用户输入的学生信息数量将下列过程循环对应的次数:新建一个标识变量find的值为-1,代表文件中不存在该学生信息。用户输入学生信息后打开文件读取每个学生信息的信息,比较两个信息的学号是否相同。如果相同则修改find的值为0,代表文件中已存在该学生的信息,同时提示“此学生信息已存在,请进入菜单选择修改信息或者删除信息之后再添加!”。检查完学生信息是否重复输入后,若find的值为-1,则将该学生信息存入到文件中,若find值为0,则跳过此步骤。3.4 删除学生信息新建一个标识变量find的值为-1,代表文件中不存在该学生信息。用户输入学生信息后打开文件读取每个学生信息的信息,比较两个信息的学号是否相同。如果相同则修改find的值为0,代表文件中存在该学生的信息。若find的值为0则执行删除功能:新建一个文件“学生信息1.txt”作为临时文件,用来存储删除后的信息。读取一位学生的全部信息,如果该信息的学号和想要删除的学号不同,则将该学生信息存到“学生信息1.txt”中。若两个学号相同,则跳过该学号,不将之存入临时文件中。文件读取到末尾后,删除“学生信息.txt”,将“学生信息1.txt重命名为“学生信息.txt”,则需要删除的信息已从文件中删除。3.5 修改学生信息 修改学生信息的功能为删除和添加功能的结合,用户输入需要修改的学生学号后,系统会先调用删除学生信息功能删除该学号对应的信息,之后再调用添加学生信息功能添加新的学生信息,修改完毕。3.6 查看已添加学生信息 该功能是显示文件中所有的学生信息,根据学生信息数量确定循环次数,依次输出每位学生的信息。3.7 统计学生信息数量先新建一个变量d的值为0,代表学生信息数量。While循环的条件为(能读取到学号),当条件成立时将文件位置指针从当前学号尾部移动到学号之前,否则信息会读取混乱,并将d的值加1。当循环条件不成立时,返回d(学生信息数量)的值。每次需要用到学生信息数量的值时都会调用该函数,求出最新的信息数量。3.8 学生信息排序排序功能使用的是冒泡排序,将文件中的信息读取到数组中,通过冒泡排序将信息按照升序排序后存到文件中,再次显示的学生信息就是排序后的信息。4系统测试及系统运行效果4.1 系统主界面进入系统后将弹出菜单界面。系统主界面运行效果如图4-1所示图4-1 系统主界面4.2 添加学生信息 首先输入添加信息的数量,然后输入第一位学生的信息,提示“添加信息成功”后再依次输入其余的学生的信息。 添加学生信息的运行效果如图4-2所示图4-2 添加学生信息4.3 学号查询 输入想要查询的学号,如果存在该学生,则显示学生信息,不存在就提示该学生信息不存在。学号查询的运行效果如图4-3、4-4所示图4-3 学号查询(不存在)图4-4 学号查询(存在)4.4 姓名查询输入想要查询的姓名,如果存在该学生,则显示学生信息,不存在就提示该学生信息不存在。姓名查询的运行效果如图4-5、4-6所示图4-5 姓名查询(不存在)图4-6 姓名查询(存在)4.5 显示全部学生信息 显示学生信息的运行效果如图4-7所示图4-7 显示全部学生信息4.6 统计学生信息数量 显示学生信息的运行效果如图4-8所示图4-8 统计学生信息数量4.7 学生信息排序学生信息排序采用的冒泡排序,排序成功后会提示返回菜单或者查看排序后的信息。学生信息排序的运行效果如图4-9、4-10所示图4-9 学生信息排序图4-10显示排序后信息4.8 修改学生信息输入需要修改的学号,如果不存在,会提示该学生信息不存在。否则删除旧信息,添加该学生新的信息。修改学生信息的运行效果如图4-11所示图4-11 修改学生信息4.9 删除学生信息输入学号,如果学号不是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/标准输入输出流头文件#include/system函数头文件#include/字符串头文件#include/文件输入输出流头文件using namespace std;/使用命名空间stdifstream fin;/定义文件输入流ofstream fout;/定义文件输出流struct student/定义学生信息结构体string number;/学号string name;/姓名string sex;/性别float grade7;/*float grade0;/语文float grade1;/离散数学float grade2;/英语float grade3;/毛概float grade4;/电路基础float grade5;/概率论float grade6;/体育*/;void input_data(int n, int data_number)/学生完整信息存入文件函数int i, j, k, m;student s, s1;int find = -1;/find初始值为-1,代表未找到相同信息,若文件中已经存在此学生信息,则find为0for (i = 0; in; i+)cout 请输入学生的学号,姓名,性别,成绩(成绩顺序依次为语文,离散数学,英语,毛概,电路基础,概率论,体育。若该科成绩无,请输入0)(空格键分隔!) s.number s.sex;for (j = 0; j s.gradej;fin.open(D:学生信息学生信息.txt);/打开文件if (fin.is_open()/判断文件是否能打开,若能打开,则函数返回值-1,否则返回0for (k = 0; k s1.number s1.sex;/从文件中读取学号,姓名,性别for (m = 0; m s1.gradem;if (s.number = s1.number)/比较文件中读取的学号和要输入的学号是否一样find = 0;/文件中存在该学生信息,find的值修改为0system(cls);/清空屏幕cout 此学生信息已存在,请进入菜单选择修改信息或者删除信息之后再添加! endl;if (find != 0)/文件中没有此学生信息fin.close();/关闭文件fout.open(D:学生信息学生信息.txt, ios:app);if (fout.is_open()/检查文件能否打开fout s.number s.sex ;for (j = 0; j7; j+)fout s.gradej ;/向文件中写入各项信息,中间以空格分隔,便于下次读取fout.close();/关闭文件cout 添加信息成功 endl;elsecout 打开或写入文件失败! endl;elsecout 打开文件失败! ch;/从文件中读取一个字符if (fin.eof()/检查字符读取是否成功,若读取失败,eof函数返回-1,说明文件为空cout 没有找到学生信息,请添加信息之后再试! endl;fin.close();elsefin.close();fin.open(D:学生信息学生信息.txt);if (fin.is_open()cout 系统所有学生信息为: endl;for (i = 0; i s.number s.sex;for (j = 0; j s.gradej;cout 学号: s.number 姓名: 性别: s.sex 语文: s.grade0 离散数学: s.grade1 英语: s.grade2 毛概: s.grade3 电路基础: s.grade4 概率论: s.grade5 体育: s.grade6 endl;fin.close();elsecout 没有找到学生信息,请添加信息之后重试! ch;if (fin.eof()cout 没有找到学生信息,请添加信息之后再试! endl;fin.close();fin.open(D:学生信息学生信息.txt);if (fin.is_open()for (i = 0; i s.number s.sex;for (j = 0; j s.gradej;if (number_find = s.number)/文件中读取的学号,和要查找的学号相同find = 0;cout 该学生信息为: endl;cout 学号: s.number 姓名: 性别: s.sex 语文: s.grade0 离散数学: s.grade1 英语: s.grade2 毛概: s.grade3 电路基础: s.grade4 概率论: s.grade5 体育: s.grade6 endl;break;/输出该学生所有信息并跳出循环,查找结束if (find != 0)cout 未找到该学号对应的信息! endl;fin.close();elsecout 系统中还没有此学号的信息! endl;void student_name_find(string name_find, int data_number)/姓名查找函数int i, j;int find = -1;student s;fin.open(D:学生信息学生信息.txt);if (fin.is_open()for (i = 0; i s.number s.sex;for (j = 0; j s.gradej;if (name_find = )find = 0;cout 该学生信息为: endl;cout 学号: s.number 姓名: 性别: s.sex 语文: s.grade0 离散数学: s.grade1 英语: s.grade2 毛概: s.grade3 电路基础: s.grade4 概率论: s.grade5 体育: s.grade6 endl;break;if (find != 0)cout 未找到该姓名对应的信息! endl;fin.close();elsecout 系统中还没有此姓名的信息! ch;if (fin.eof()cout 没有找到学生信息,请添加信息之后再试! endl;fin.close();fin.open(D:学生信息学生信息.txt);if (fin.is_open()for (i = 0; i s.number s.sex;for (j = 0; j s.gradej;if (number_delete = s.number)/文件中读取的学号,和要查找的学号相同find = 0;fin.close();elsecout 系统中还没有此学号的信息! ch;if (fin.eof()cout 没有找到学生信息存档! endl;elsefin.close();fin.open(D:学生信息学生信息.txt);if (fin.is_open()for (i = 0; i s.number s.sex;for (j = 0; j s.gradej;if (number_delete != s.number)/如果学号和要删除的学号不同,将该学生信息存入学生信息1中fout.open(D:学生信息学生信息1.txt, ios:app);if (fout.is_open()fout s.number s.sex ;for (j = 0; j 7; j+)fout s.gradej ;fout.close();elsecout 删除过程出错! endl;fin.close();system(del D:学生信息学生信息.txt);/删除学生信息.txtrename(D:学生信息学生信息1.txt, D:学生信息学生信息.txt);/将学生信息1.txt重命名为学生信息.txtcout 删除信息成功 endl;elsecout 未找到该学号对应的信息! endl;elsecout 系统中没有此学号信息 ch;if (fin.eof()/如果文件为空,关闭文件fin.close();elsefin.close();fin.open(D:学生信息学生信息.txt);if (fin.is_open()/判断文件打开状态函数while (fin s.number)/如果能读取到学号fin.seekg(-12, ios:cur);/将文件位置指针从当前学号尾部移动到学号之前,否则信息会读取混乱fin s.number s.sex;for (j = 0; j s.gradej;d+;/,读取成功,学生信息数量加一fin.close();return d;/返回学生信息数量void student_data_modify()/学生信息修改int j;student s;cout 请输入新的的学号,姓名,性别,成绩(成绩顺序依次为语文,离散数学,英语,毛概,电路基础,概率论,体育。若该科成绩无,请输入0。)(空格键分隔!),系统会自动修改该学生信息! s.number s.sex;for (j = 0; j s.gradej;fout.open(D:学生信息学生信息.txt, ios:app);if (fout.is_open()/判断文件打开状态函数fout s.number s.sex s.grade0 s.grade1 s.grade2 s.grade3 s.grade4 s.grade5 s.grade6 ;fout.close();cout 修改信息成功 endl;elsecout 打开或写入文件失败! endl;void student_data_sort(int data_number)/学生信息排序(冒泡排序)int i, j;student s200, number_max;fin.open(D:学生信息学生信息.txt);if (fin.is_open()for (i = 0; i si.number si.sex;for (j = 0; j si.gradej;fin.close();number_max.number = s0.number;for (i = 0; i data_number - 1; i+)for (j = 0; jsj + 1.number)number_max = sj;sj = sj + 1;sj + 1 = number_max;fout.open(D:学生信息学生信息.txt);if (fout.is_open()for (i = 0; i data_number; i+)fout si.number si.sex si.grade0 si.grade1 si.grade2 si.grade3 si.grade4 si.grade5 si.grade6 ;fout.close();cout 排序成功! endl;elsecout 打开文件失败,无法完成排序! endl;int main()system(color 5F);/改变程序窗口颜色为湖蓝色背景黑色文字char menu;string number_find, name_find;folder();/程序运行前,先创建系统文件夹和文件menu:system(cls);/在屏幕上显示菜单信息cout 欢迎使用信息查询系统,按数字键进入菜单选项。 endl;cout 1.学号查询 endl;cout 2.姓名查询 endl;cout 3.添加学生信息 endl;cout 4.删除学生信息 endl;cout 5.修改学生信息 endl;cout 6.查看已存档的学生信息 endl;cout 7.查看已存档的学生信息数量 endl;cout 8.学生信息排序 menu;while (menu8)/当输入数值不在菜单范围内会提示输入错误cout 输入无效,请输入正确的数字! menu;system(cls);switch (int(menu) - 48)/将menu从字符型强制转换为整形case 1: char ch; int data_number; data_number = student_data_number();/求出文件中已存在的信息数量确定查找学号时的循环次数 number: cout 学号查询: endl; cout 请输入12位学号: number_find; student_number_find(number_find, data_number); cout 按*键返回菜单,按#键重新查找! ch; while (ch != *&ch != #) cout 输入错误,请输入*或#! ch; system(cls); if (ch = *) goto menu;/跳转到菜单 else goto number; break;case 2: char ch; int data_number; data_number = student_data_number(); name: cout 姓名查询 endl; cout 请输入学生姓名: name_find; student_name_find(name_find, data_number); cout 按*键返回菜单,按#键重新查找! ch; while
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年医院辐射安全与防护培训考核试题(含答案)
- 2025妇产科主治医师考试《妊娠生理》应试题及答案
- 2025年河道修防与防冶工职业技能资格知识考试题与答案
- (2025年)安徽省淮南市中级会计职称经济法预测试题含答案
- 摄影灯光师基础知识培训
- 摄影微单基础知识培训课件
- 土建技术员试题及答案
- 2025海南省出境旅游合同
- 2025原始设备制造商(OEM)采购与销售合同
- 2025汽车销售提成合同
- 会计加薪述职报告
- 服务窗口礼仪培训
- 矿山居间合同协议书范本
- 急性脑卒中的急救护理课件
- DB32T-鸭场粪污异位发酵床处理技术规范编制说明
- 无线定位技术发展趋势-洞察分析
- 《云南濒危语言保护》课件
- 居家养老服务探访制度及家属协作
- 边坡喷射混凝土施工案例分析方案
- 视频号推广方案
- 广东省广州市2024-2025学年高一上学期开学考试英语检测试题(附答案)
评论
0/150
提交评论