学生信息管理系统Word文档下载推荐.docx
《学生信息管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。
6.系统中学生信息数量统计
7.学生信息排序(冒泡排序)
表1-1程序功能
学号查询
姓名查询
添加学生信息
删除学生信息
修改学生信息
查看已添加学生信息
统计学生信息数量
学生信息排序
2.2系统程序模块设计
2.2.1菜单模块
绘制菜单(包含学号查询、姓名查询、添加学生信息、删除学生信息、修改学生信息、查看已存档学生信息、统计学生信息数量、学生信息排序)。
根据用户输入的值调用对应的模块函数实现该项功能
2.2.2信息录入模块
{
查找系统中是否已存在该学号对应的信息
if(存在)
{提示信息已存在}
else
{向文件中写入各项信息}
2.2.3信息读出模块
判断系统中是否存在学生信息
if(不存在)
{提示信息不存在}
{在屏幕上显示该学号对应的信息}
2.2.4信息查询模块
{
if(学号查询)
{
判断文件是否为空
查找系统中是否有该学号信息
if(存在)
输出学生信息
else
提示学生信息不存在
if(姓名查询)
查找系统中是否有该姓名对应信息
if(存在)
else
提示信息不存在
2.2.5创建系统文件夹模块
判断系统文件夹是否存在
if(不存在)
创建“D\\学生信息”文件夹
判断系统文件是否存在
创建“D:
\\学生信息\\学生信息.txt”文件
2.2.6删除学生信息模块
查看系统文件是否为空
if(文件为空)
查找系统中是否有该学号信息
删除该学生信息
提示该学生信息不存在
2.2.7修改学生信息模块
查看系统中是否存在该学生信息
删除该学生信息
添加该学生新信息
}
修改成功
2.2.8统计学生信息数量模块
if(文件存在)
读取学号,每读取到一个学号,数量+1
返回信息数量的值
2.2.9学生信息排序模块
if(打开成功)
读取全部信息存到结构体数组,按照冒泡排序将信息按学号升序排序
之后将数组内容依次存入文件,并覆盖旧文件。
各模块之间结构图如图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的值为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++的文件读写不会使用。
XX查找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++的理解,在程序的编写过程中又学习了很多新的知识,明白了自己的短处在哪里,以后需要在哪个方向努力,认识了很多的不足。
从中学习了很多,收获了很多。
动手是提升能力的有效方法,就像我在编写这个程序之前可能就比其他同学多懂一点书上的知识。
但在写代码的过程中遇到了很多问题,每解决一个问题,就多学了一些知识,能力也有所提高。
可能很多库函数我们不知道怎么用,比如你想要实现某一个功能,你可以去网上找一下有关的帖子,多找几个帖子可能就会找到大神的帖子教你怎么用库函数去实现这些功能。
最后总结一下,XX是万能的。
附录学生信息管理系统源代码
/*
程序功能:
1.系统菜单显示
2.学生信息录入功能
3.学生信息浏览功能
4.查询:
①.学号查询
②.姓名查询
5.学生信息的删除与修改
6.系统中学生信息数量统计
7.学生信息排序(冒泡排序)
作者:
彭方林
班级:
计算机科学与技术1401
学校:
河南理工大学万方科技学院
日期:
2015年11月11日
*/
#include<
iostream>
//标准输入输出流头文件
stdlib.h>
//system函数头文件
string>
//字符串头文件
fstream>
//文件输入输出流头文件
usingnamespacestd;
//使用命名空间std
ifstreamfin;
//定义文件输入流
ofstreamfout;
//定义文件输出流
structstudent//定义学生信息结构体
stringnumber;
//学号
stringname;
//姓名
stringsex;
//性别
floatgrade[7];
/*
floatgrade0;
//语文
floatgrade1;
//离散数学
floatgrade2;
//英语
floatgrade3;
//毛概
floatgrade4;
//电路基础
floatgrade5;
//概率论
floatgrade6;
//体育
*/
};
voidinput_data(intn,intdata_number)//学生完整信息存入文件函数
inti,j,k,m;
students,s1;
intfind=-1;
//find初始值为-1,代表未找到相同信息,若文件中已经存在此学生信息,则find为0
for(i=0;
i<
n;
i++)
cout<
<
"
请输入学生的学号,姓名,性别,成绩(成绩顺序依次为语文,离散数学,英语,毛概,电路基础,概率论,体育。
若该科成绩无,请输入0)(空格键分隔!
)"
<
endl;
cin>
>
s.number>
s.name>
s.sex;
for(j=0;
j<
7;
j++)//循环输入7门科目的成绩
cin>
s.grade[j];
fin.open("
D:
\\学生信息\\学生信息.txt"
);
//打开文件
if(fin.is_open())//判断文件是否能打开,若能打开,则函数返回值-1,否则返回0
for(k=0;
k<
data_number;
k++)//检查系统中是否已存在该学号
{
fin>
s1.number>
s1.name>
s1.sex;
//从文件中读取学号,姓名,性别
for(m=0;
m<
m++)
fin>
s1.grade[m];
if(s.number==s1.number)//比较文件中读取的学号和要输入的学号是否一样
{
find=0;
//文件中存在该学生信息,find的值修改为0
system("
cls"
//清空屏幕
cout<
此学生信息已存在,请进入菜单选择修改信息或者删除信息之后再添加!
"
}
}
if(find!
=0)//文件中没有此学生信息
fin.close();
//关闭文件
fout.open("
ios:
:
app);
if(fout.is_open())//检查文件能否打开
fout<
s.number<
s.name<
s.sex<
;
for(j=0;
j++)
fout<
s.grade[j]<
//向文件中写入各项信息,中间以空格分隔,便于下次读取
fout.close();
添加信息成功"
else
打开或写入文件失败!
}
cout<
打开文件失败!
}
voidoutput_data(intdata_number)//学生完整信息读出文件函数
inti,j;
students;
charch;
fin.open("
fflush(stdin);
//清空输入缓冲区
fin>
ch;
//从文件中读取一个字符
if(fin.eof())//检查字符读取是否成功,若读取失败,eof函数返回-1,说明文件为空
没有找到学生信息,请添加信息之后再试!
fin.close();
if(fin.is_open())
系统所有学生信息为:
for(i=0;
i++)//输出所有学生信息
for(j=0;
cout<
学号:
姓名:
性别:
语文:
s.grade[0]<
离散数学:
s.grade[1]<
英语:
s.grade[2]<
毛概:
s.grade[3]<
电路基础:
s.grade[4]<
概率论:
s.grade[5]<
体育:
s.grade[6]<
fin.close();
没有找到学生信息,请添加信息之后重试!
voidstudent_number_find(stringnumber_find,intdata_number)//学号查找函数
if(fin.eof())
fin.close();
if(fin.is_open())
for(i=0;
fin>
for(j=0;
if(number_find==s.number)//文件中读取的学号,和要查找的学号相同
find=0;
该学生信息为:
break;
//输出该学生所有信息并跳出循环,查找结束
if(find!
=0)
未找到该学号对应的信息!
系统中还没有此学号的信息!
voidstudent_name_find(stringname_find,intdata_number)//姓名查找函数
f