1、项目简介
该项目为《C/C++程序设计》课程设计,具体要求如下:
学生成绩管理系统内容
- 主菜单模块
该模块主要用来实现整个系统的流程。主界面提供用户选择并调用各个子模块。
- 输入模块
当初次使用系统时,学生信息需要从键盘逐个输入。学生信息由学生的学号、姓名、性别、高等数学、英语、计算机和平均成绩等信息构成。
- 查询模块
用户可以按照学生的学号或姓名进行查找。若查找到该学生的相关信息记录,则输出相关信息,否则提示未找到。
- 更新模块
主要完成对学生信息的维护。包括增加记录、删除记录、修改成绩。当完成更新记录后,需要将修改的数据存入数据文件中。
- 排序模块
根据键盘输入的升序或降序选择按平均成绩对学生记录进行排序,并输出排序后的结果。
- 统计模块
统计各个分数段的人数及不及格人数。
- 输出模块
将学生信息显示在屏幕上,并根据键盘输入的选择,如“是否保存到文件?(Y/N)”,可以将学生信息写入文件中。
2、设计思路
首先定义了学生结构体Student,然后以Student为类型创建数组,后续各个模块的设计,都将学生数组的首地址作为参数传入,进行相关设计。
1.输入模块:
主要功能:用来对学生基本信息(姓名,学号,性别)和成绩进行输入。在初次使用学生信息管理系统时,用户需逐个输入学生信息。在准确输入学生信息后,就可以将学生信息保存在学生数组中。学生信息输入成功后,系统会提示是否继续进行操作,如果想继续输入学生成绩就输入 yes ,不想再输入学生成绩的话就输入no 输入no之后,系统返同到主菜单。
主要设计思路:通过用户键盘输入直接向数组输入的各个数据,在输入时,我们对数组保存数据是否达到最大值进行了判断,学号作为学生唯一标识符,我们对用户输入学号是否重复进行判断,以及对用户输入的成绩是否有效进行判断,提高了程序的健壮性。
2.输出模块:
主要功能:用来对学生的基本信息和成绩进行输出。在数组已经录入了学生信息的前提下,使用该功能可以显示所有学生的信息。具体包括学生的学号、姓名、性别、高等数学、英语、计算机和平均成绩。在屏幕打印输出学生信息后,系统会提示用户是否将学生信息保存在文件中(是否保存到文件?(Y/N),用户可通过选择进行相应操作
主要设计思路:通过对数组的遍历,将学生信息按照一定的格式打印输出在屏幕上。写入文件的思路:首先定义文件指针,后通过fprintf函数按一定格式将学生信息输出到文件。
3.查询模块:
主要功能:是用来查找学生信息。在数组保存学生信息的前提下,通过输入学号或者姓名进行查找,若查找到,系统就会显示该学生基本信息和各科成绩。
主要设计思路:
- 通过学号进行查询:
通过while循环进行判断,让输入的学号与数组中存放的学号进行比较(数组下标从0开始),若相等则退出while循环,此时的数组下标即为所查询学号在数组中存放的位置,后通过cout将学生信息输出到屏幕上。
- 通过姓名进行查询:
姓名存在同名情况,所以我组用for循环从0到数组元素个数进行遍历,只要数组中储存的姓名与所查询姓名相同,就将该学生信息输出。
- 通过学号的模糊查询:
如果用户只记得学号的几位数,则可通过学号模糊查询,查找到学生信息。我们小组主要通过strstr()函数进行字串的匹配,若匹配成功,则输出该学生信息。 (说明:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。)
4.排序模块:
主要功能:是通过对学生成绩的平均成绩的比较进行排序,并将排序结果打印输出到屏幕上
主要设计思路:通过直接插入排序,按照学生平均成绩对数组进行排序
5.统计模块:
主要功能:统计各个分数段的人数及不及格人数,并将统计结果输出
主要设计思路:通过定义一系列整形变量,这些变量起到计数功能。后通过for语句对数组的遍历,在for语句内设置多个if语句用于判断成绩区间,相应的变量做自增的操作,实现对各个分数段人数的统计功能。
6.更新模块:
主要功能:学生信息的维护。包括增加记录、删除记录、修改成绩。
主要设计思路:
- 增加学生信息:
首先统计学生数组中的个数,将统计的个数作为数组下标,后通过用户键盘输入实现增加学生信息
- 删除记录:
通过学号删除:
首先通过while循环找到所输入学号在数组中存放的位置,后通过for语句让该位置后面覆盖所需删除学生信息位置的数据。
通过姓名删除:
存在同名情况,我们小组首先通过for语句进行遍历,设置一个整形变量flag,若查找到一个姓名与输入姓名相同,则flag++,并用变量pos记录与查找姓名相同姓名的数组下标,若flag等于1,说明没有同名情况,删除方法与学号删除方法类似,若flag大于1,说明存在同名情况,则提示用户需通过学号进行删除
- 修改成绩:
通过学号修改,通过姓名修改设计思想与删除设计思想类似,只不过删除是找到位置后将该位置后的数据依次覆盖前一次数据,而修改则是找到位置后,系统提示用户重新输入学生成绩。
3、项目成果
项目展示录屏
4、代码
代码运行很简单,创建一个cpp文件就可以了。(将下面代码赋值到你创建的.cpp文件)
#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
const int MAXSIZE=100; //学生信息管理系统最多存放的数据个数
using namespace std;
//定义学生结构体
struct Student{
string num; //学号
string name; //姓名
char sex[10]; //性别
float math; //高等数学
float english; //英语
float computer; //计算机
float average; //平均成绩
};
//函数声明
int Count(Student stu[]); //统计人数
char menu(); //菜单模块
void Input(Student stu[]); //输入模块
void inputStudent(Student stu[],int size);
void findStudentNum(Student stu[]); //查询模块,通过学号查找
void findStudentName(Student stu[]); //查询模块,通过姓名查找
void findNclear(Student stu[]); //学号的模糊查找
void additionStudentInformation(Student stu[]) ; //更新模块——增加
void Delete(Student stu[]); //更新模块——删除
void modifyStudentInformation(Student stu[]); //更新模块——修改
void upOrder(Student stu[]); //排序模块
void downOrder(Student stu[]);
void Statistic(Student stu[]); //统计模块
void printStudentInformation(Student stu[]); //输出模块
void print(Student stu[]);
void wfile(Student stu[]); //写入文件
//统计人数
int Count(Student stu[]){
int count=0;
for (int i = 0; i <MAXSIZE; i++) //统计有多少学生数据
{
if(stu[i].num!="0")
count++;
}
return count;
}
//菜单模块
char menu() {
char c;
do {
cout << "******************************************************" << endl;
cout << " * 【1】查询学生成绩 * " << endl;
cout << " * 【2】增加学生成绩 * " << endl;
cout << " * 【3】删除学生成绩 * " << endl;
cout << " * 【4】修改学生成绩 * " << endl;
cout << " * 【5】各个分数段的人数及不及格人数 * " << endl;
cout << " * 【6】按平均分排列 * " << endl;
cout << " * 【7】显示学生成绩 * " << endl;
cout << " * 【0】退出管理系统 * " << endl;
cout << "******************************************************" << endl;
cout << "请选择您的操作 (0-7):" << endl;
cin>>c;
} while (c < '0' || c > '7'); //输入数字是否有效
return c;
}
void inputStudent(Student stu[],int size){
int j = size;
if(j>=MAXSIZE){
cout<<"当前人数已满,无法插入新的学生信息"<<endl;
return;
}
int flag; //成绩输入是否有效标志
//输入学号
a: cout << "学号:";
cin >>stu[j].num;
for(int i=0;i<=j-1;i++){
if((stu[i].num.compare(stu[j].num)==0))
{
cout<<"学号重复,请重新输入"<<endl;
goto a;
}
}
//输入姓名
cout << "姓名:";
cin >> stu[j].name;
//输入性别
cout << "性别:";
cin>>stu[j].sex;
//高等数学成绩输入
do {
flag = 0;
cout << "高等数学成绩:";
while(!(cin >> stu[j].math)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入高等数学成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[j].math > 100 || stu[j].math < 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//英语成绩输入
do {
flag = 0;
cout << "大学英语成绩:";
while(!(cin >> stu[j].english)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入大学英语成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[j].english > 100 || stu[j].english < 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//计算机成绩输入
do {
flag = 0;
cout << "计算机成绩:";
while(!(cin >> stu[j].computer)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入计算机成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[j].computer > 100 || stu[j].computer< 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//平均分计算
stu[j].average = (stu[j].math + stu[j].english+ stu[j].computer)/3;
cout << "平均分为:" << stu[j].average<<endl;
}
//输入模块
void Input(Student stu[]){
int j=0;
string sign="0";
cout << endl<<"======>> 请输入学生成绩 <<======"<<endl;
while (sign != "no" && sign != "NO") {
inputStudent(stu,j);
cout << "======>> 提示:是否继续写入学生成绩 ?(yes/no)";
cin >> sign;
j++;
}
}
//查询模块,通过学号查找
void findStudentNum(Student stu[]){
int countstudent=Count(stu); //统计学生数量
string xuehao;
cout << endl << "======>> 查找学生成绩 <<======" << endl;
cout << "请输入要查找学生的学号:";
loop: int i = 0;
cin >> xuehao; //输入查找学号
while ((stu[i].num.compare(xuehao)!=0) && i<countstudent)i++;
if (i==countstudent){
cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
cout << "======>> 请重新输入要查找学生的学号:<<======";
goto loop;
}
else {
cout << endl << "======>> 所查询学生成绩表 <<======\n" << endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t" << "大学英语" << "\t" << "计算机" << "\t" <<"平均成绩" << "\t" <<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
}
}
//通过姓名查找
void findStudentName(Student stu[]) {
string name;
int i=0;
cout << endl << "======>> 查找学生成绩 <<======" << endl;
cout << "请输入要查找学生的姓名:";
cin >> name; //输入查找姓名
int flag=0;
int countstudent=Count(stu); //计算人数
cout << endl << "======>> 所查询学生成绩表 <<======\n" << endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t" << "大学英语" << "\t" << "计算机" << "\t" <<"平均成绩" << "\t" <<endl;
for(i=0;i<countstudent;i++){
if(stu[i].name.compare(name)==0){
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
flag=1;
}
}
if(flag==0)cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
}
//学号的模糊查找
void findNclear(Student stu[]){
int flag=0;
char a[20];
cout<<"请输入学号关键词:";
cin>>a;
int count=Count(stu);
cout << endl << "======>> 所查询学生成绩表 <<======\n" << endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t" << "大学英语" << "\t" << "计算机" << "\t" <<"平均成绩" << "\t" <<endl;
for(int i=0;i<count;i++){
char temp[20];
strcpy_s(temp,stu[i].num.c_str()); //c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同
if(strstr(temp,a)!=nullptr){ //strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
flag=1;
}
}
if(flag==0)cout<<"模糊查找失败"<<endl;
}
//输出板块
void printStudentInformation(Student stu[]) {
int countstudent=Count(stu);
if(countstudent==0){
cout<<"当前记录为空" << endl;
return;
}
cout << endl << "======>> 学生成绩表 <<======\n" << endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t" << "大学英语" << "\t" << "计算机" << "\t" <<"平均成绩" << "\t" <<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
string sign = "0"; //用于判断用户是否保存文件
//打印输出
for (int i = 0; i <countstudent; i++)
cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout<<"是否保存到文件?(Y/N)";
cin>>sign;
if(sign=="Y"||sign=="y") wfile(stu);
}
void print(Student stu[]){
cout << endl << "======>> 学生成绩表 <<======\n" << endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t" << "大学英语" << "\t" << "计算机" << "\t" <<"平均成绩" << "\t" <<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
int countstudent=Count(stu);
//打印输出
for (int i = 0; i <countstudent; i++)
cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
}
//更新模块——增加
void additionStudentInformation(Student stu[]) {
int countstudent=Count(stu);
string sign = "0"; //用于判断用户是否继续增加学生信息
cout << endl << "=======>> 增加学生成绩 <<========" << endl;
while (sign != "no" && sign != "NO") {
inputStudent(stu,countstudent);
wfile(stu);
cout << "======>> 提示:是否继续增加学生成绩 ?(yes/no)";
cin >> sign;
countstudent++;
}
}
//更新模块——删除
void Delete(Student stu[]) {
string xuehao; //定义查询学号
string name;
int i = 0,j,choice,pos; //choice——用户选择,pos——位置
int countstudent=Count(stu);
cout << endl << "======>> 删除学生成绩 <<======" << endl;
cout<<"1.通过学号删除"<<endl;
cout<<"2.通过姓名删除"<<endl;
cin>>choice;
if(choice==1){
cout << "请输入要删除的学生的学号:";
cin >> xuehao;
while ((stu[i].num!= xuehao && i <countstudent)) i++;
if (i == countstudent) {
cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
}
else {
for (j = i; j <countstudent - 1; j++) {
stu[j]=stu[j+1];
}
stu[j].num="0"; //防止重复输出,而且也是通过学号是否为0判断人数
wfile(stu);
cout << "======>> 提示:已成功删除!" << endl;
}
}
if(choice==2){
cout << "请输入要删除的学生的姓名:";
cin >>name;
int flag=0;
for(i=0;i<countstudent;i++)
{
if(stu[i].name==name)
{
flag++;
pos=i;
}
}
if (flag==0) {
cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
}
else if(flag==1){
for (j = pos; j <countstudent - 1; j++) {
stu[j]=stu[j+1];
}
stu[j].num="0"; //防止重复输出,而且也是通过学号是否为0判断人数
wfile(stu);
cout << "======>> 提示:已成功删除!" << endl;
}
else if(flag>1){
cout<<"存在同名情况,请通过学号进行删除,以下学号学生姓名相同:"<<endl;
for(i=0;i<countstudent;i++)
{
if(stu[i].name==name)
{
cout<<stu[i].num<<endl;
}
}
}
}
}
//更新模块——修改
void modifyStudentInformation(Student stu[]) {
string s,name;
int i = 0,choice;
cout << endl << "======>> 修改学生成绩 <<======" << endl;
cout<<"1.通过学号修改"<<endl;
cout<<"2.通过姓名修改"<<endl;
cin>>choice;
if(choice==1){
cout << "请输入要修改成绩学生的学号:";
cin >> s; //输入学号
int countstudent=Count(stu);//统计有多少学生数据
int flag; //成绩输入是否有效标志
while ((stu[i].num!=s && i < countstudent))i++;
if (i == countstudent) {
cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
}
else {
cout << endl << "请重新输入该学生成绩: " << endl;
//高等数学成绩输入
do {
flag = 0;
cout << "高等数学成绩:";
while(!(cin >> stu[i].math)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入高等数学成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[i].math > 100 || stu[i].math < 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//英语成绩输入
do {
flag = 0;
cout << "大学英语成绩:";
while(!(cin >> stu[i].english)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入大学英语成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[i].english > 100 || stu[i].english < 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//计算机成绩输入
do {
flag = 0;
cout << "计算机成绩:";
while(!(cin >> stu[i].computer)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入计算机成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[i].computer > 100 || stu[i].computer< 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//平均分计算
stu[i].average = (stu[i].math + stu[i].english+ stu[i].computer)/3;
cout << "平均分为:" << stu[i].average<<endl;
wfile(stu);
}
}
if(choice==2){
cout << "请输入要修改成绩学生的姓名:";
cin >> name; //输入姓名
int countstudent=Count(stu);//统计有多少学生数据
int flag; //成绩输入是否有效标志
int flag1=0,pos;
for(i=0;i<countstudent;i++)
{
if(stu[i].name==name)
{
flag1++;
pos=i;
}
}
if (flag1==0) {
cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
}
else if(flag1==1){
cout << endl << "请重新输入该学生成绩: " << endl;
//高等数学成绩输入
do {
flag = 0;
cout << "高等数学成绩:";
while(!(cin >> stu[pos].math)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入高等数学成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[pos].math > 100 || stu[pos].math < 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//英语成绩输入
do {
flag = 0;
cout << "大学英语成绩:";
while(!(cin >> stu[pos].english)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入大学英语成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[pos].english > 100 || stu[pos].english < 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//计算机成绩输入
do {
flag = 0;
cout << "计算机成绩:";
while(!(cin >> stu[pos].computer)) //输入数据与定义不匹配
{
cout<<"======>> 提示:对不起,这是无效数字"<<endl;
cin.clear(); //清除错误标记
cout << "请重新输入计算机成绩:";
while(cin.get()!='\n'){
continue;
}
}
if (stu[pos].computer > 100 || stu[pos].computer< 0) {
cout << "对不起,请输入1-100之间的数字!!\n";
}
else {
flag = 1;
}
} while (flag == 0);
//平均分计算
stu[pos].average = (stu[pos].math + stu[pos].english+ stu[pos].computer)/3;
cout << "平均分为:" << stu[pos].average<<endl;
wfile(stu);
}
else if(flag1>1)
{
cout<<"存在同名情况,请通过学号进行修改,以下学号学生姓名相同:"<<endl;
for(i=0;i<countstudent;i++){
if(stu[i].name==name)
{
cout<<stu[i].num<<endl;
}
}
}
}
}
//排序模块——升序
void upOrder(Student stu[])
{
int size=Count(stu);
int i,j;
Student temp1;
for(i=1;i<size;i++)
{
temp1=stu[i];
for(j=i-1;j>=0&&temp1.average<stu[j].average;j--)
stu[j+1]=stu[j];
stu[j+1]=temp1;
}
}
//排序模块——降序
void downOrder(Student stu[])
{
int size=Count(stu);
int i,j;
Student temp;
for(i=1;i<size;i++)
{
temp=stu[i];
for(j=i-1;j>=0&&temp.average>stu[j].average;j--)
stu[j+1]=stu[j];
stu[j+1]=temp;
}
}
//统计模块
void Statistic(Student stu[]) {
cout << endl << "======>> 输出学生统计数据 <<======\n" << endl;
cout << "-----------------------------------------------------------------------------" << endl;
int count1=0; //统计不及格人数
int count11=0; //统计60~80分段人数(不包含80)
int count12=0; //统计80~100分段人数
int count2=0;
int count21=0;
int count22=0;
int count3=0;
int count31=0;
int count32=0;
int size=Count(stu);//统计有多少学生数据
for (int i = 0; i < size; i++)
{
if(stu[i].math<60) count1++;
if(stu[i].english<60) count2++; //统计各科不及格人数
if(stu[i].computer<60) count3++;
if(stu[i].math>=60&&stu[i].math<80) count11++;
if(stu[i].english>=60&&stu[i].english<80) count21++; //统计60~80分段人数(不包含80)
if(stu[i].computer>=60&&stu[i].computer<80) count31++;
if(stu[i].math>=80&&stu[i].math<=100) count12++;
if(stu[i].english>=80&&stu[i].english<=100) count22++; //统计80~100分段人数
if(stu[i].computer>=80&&stu[i].computer<=100) count32++;
}
cout<<" 当前学生信息如下 "<<endl;
print(stu);
cout<<endl;
cout <<" 高等数学" << " 大学英语"<< " 计算机" << endl;
cout << "-----------------------------------------------------------------------------" << endl;
cout<<"不及格人数 ";
cout <<"\t\t"<< count1 << "\t\t" <<count2 << "\t\t" <<count3<<endl;
cout<<"60~80分段人数(不含80)";
cout <<"\t\t"<<count11 << "\t\t" << count21<< "\t\t" << count31 << endl;
cout<<"80~100分段人数 ";
cout <<"\t\t"<<count12++<< "\t\t" << count22++ << "\t\t" << count32++ <<endl;
cout << "-----------------------------------------------------------------------------" << endl;
}
//将学生信息写入文件
void wfile(Student stu[]) //将学生的记录信息写入文件
{
FILE *file; //定义文件指针
int size=Count(stu); //统计有多少学生数据
if((file=fopen("C:\\Users\\86183\\Desktop\\学生成绩信息.txt","wt"))==nullptr)
{
cout<<"文件打开失败"<<endl; //文件打开失败的处理
exit(0); //退出程序
}
for(int i=0;i<size;i++)
{
char c[20];
char a[20];
strcpy_s(c,stu[i].num.c_str());
strcpy_s(a,stu[i].name.c_str());
fprintf(file,"%s\t%s\t%s\t%4.2f\t%4.2f\t%4.2f\t%4.2f\n",c,a,stu[i].sex,stu[i].math,stu[i].english,stu[i].computer,stu[i].average);
}
fclose(file); //%4.2f表示打印结果有效位为4位,小数点两位
}
int main(){
Student stu[MAXSIZE];
for(int i=0;i<MAXSIZE;i++)
stu[i].num="0";
string sortchoice; //排序选择
cout << "--------------------------------欢迎使用学生成绩管理系统-------------------------------" << endl;
cout<<endl;
cout<<"-----------------------------初次使用系统时,应逐个输入学生信息---------------"<<endl;
Input(stu);
for(;;){
switch(menu()) {
case '1':
int flag;
cout<<"请输入选择(1-3)"<<endl;
cout<<"1.按学号查找"<<endl;
cout<<"2.按姓名查找"<<endl;
cout<<"3.学号的模糊查找"<<endl;
cin>>flag;
if(flag==1)findStudentNum(stu);
if(flag==2)findStudentName(stu);
if(flag==3)findNclear(stu);
system("pause");
system("cls");
break;
case '2':
additionStudentInformation(stu);
system("pause");
system("cls");
break;
case '3':
Delete(stu);
system("pause");
system("cls");
break;
case '4':
modifyStudentInformation(stu);
system("pause");
system("cls");
break;
case '5':
Statistic(stu);
system("pause");
system("cls");
break;
case '6':
cout<<"选择按平均成绩升序排列(up)还是降序排列(down)(输入up或者down):";
cin>>sortchoice;
if(sortchoice=="up")
{
downOrder(stu);
upOrder(stu);
cout<<"升序成绩信息如下:"<<endl;
print(stu);
}
else
{
downOrder(stu);
cout<<"降序成绩信息如下:"<<endl;
print(stu);
}
system("pause");
system("cls");
break;
case '7':
printStudentInformation(stu);
system("pause");
system("cls");
break;
case '0':
cout << endl << "================感谢您使用学生成绩管理系统==============\n" << endl;
exit(0);
break;
}
}
return 0;
}