C++ 学生成绩管理系统

功能:学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。系统

要求实现以下功能:

1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);

2、信息查询:输入学号,查询学生各门课程的成绩,并显示。

3、排序:按各门课程的成绩平均分进行排序,并显示。

4、信息删除与修改——输入学号,删除该学生的成绩信息。

分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。

3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。

jkl_1.h 头文件
#ifndef JKL_1_H_INCLUDED
#define JKL_1_H_INCLUDED
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
struct student
{
	int number;
	char name[40];
	char sex[4];
	int score[3];
	int avg;

};
bool GreaterSort(student a,student b);
ostream &operator<<(ostream &os,student a);
void Input(const char*fileDat);
void Inquire(const char*fileDat);
int Change(const char*fileDat);
void Modify(const char*fileDat);
void Search(const char*fileDat);
void Delete(const char*fileDat);
void Add(const char*fileDat);
void Modify(const char*fileDat);
void Stusort(const char*fileDat);
bool Search(const char*fileDat,int num);
int endMark(student stu);


#endif // JKL_1_H_INCLUDED

main.cpp

#include <iostream>
#include "jkl_1.h"
#include <cstdlib>
using namespace std;

const char*fileDat="c:/StudentDates";
int main()
{
	char choice;
	while(1)
	{
		system("cls");
		cout<<"**********************************************"<<endl;
		cout<<"*                 学生信息管理系统           *"<<endl;
		cout<<"**********************************************"<<endl;
		cout<<"*               1:录入成绩                  * "<<endl;
		cout<<"*               2:成绩浏览                  * "<<endl;
		cout<<"*               3:查询成绩                  * "<<endl;
		cout<<"*               4: 修改成绩                  * "<<endl;
		cout<<"*               5: 成绩补录                  *"<<endl;
		cout<<"*               6: 删除数据                  *"<<endl;
		cout<<"*               7: 学生排序                  *"<<endl;
		cout<<"*               q: 退出程序                  * "<<endl;
		cout<<"**********************************************"<<endl;
		cout<<"请输入您的选择:";
		cin>>choice;
switch(choice)
	{
        case'1':Input(fileDat); break;
        case'2':Inquire(fileDat);break;
        case'3':Change(fileDat);break;
        case'4':Modify(fileDat);break;
//		case'5':Add(fileDat);break;
		case'6':Delete(fileDat);break;
		case'7':Stusort(fileDat);break;
        case'q':
        case'Q':cout<<"退出系统\n";return 0;
//		default:cout<<"输入错误,请再输入";
    }
	}
}

Change.cpp 查询功能

#include "jkl_1.h"
#include <cstring>
int Change(const char*fileDat){
    ifstream fin;
    fin.open(fileDat);
    if(!fin.is_open()){cout<<"文件打开失败";}
    else {
            cout<<"1:按学号查询\n2:按姓名查询\n";
            int n;
            cin>>n;

            if(n==1){
            int num;
            cout<<"输入要查询的学号:";
            cin>>num;
          student stu;
          while(fin.read((char*)&stu,sizeof stu)) {
            if(stu.number==num)
            {      num=0;
                 cout<<stu.number<<"\t"<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.score[0]<<"\t"<<stu.score[1]<<"\t"<<stu.score[2]<<"\t"<<endl;
                 break;
            }
          }
          if(num!=0){cout<<"没有发现你输入的学号\n";
                    fin.close();
                    system("pause");
                    return 0;}
                    }
                else {
                          char name[40];
            cout<<"输入要查询的学生姓名:";
            cin>>name;
            int num =1;
          student stu;
          while(fin.read((char*)&stu,sizeof stu)) {
            if(!strcmp(name,stu.name))
            {      num=0;
                 cout<<stu.number<<"\t"<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.score[0]<<"\t"<<stu.score[1]<<"\t"<<stu.score[2]<<"\t"<<endl;
                 break;
            }
          }
          if(num!=0){cout<<"没有发现你输入的姓名学生\n";
                    fin.close();
                    system("pause");
                    return 0;}

                }
        }
                    fin.close();
                    system("pause");
                    return 1;



}    

Delete.cpp 删除功能

#include "jkl_1.h"
#include <fstream>
ostream &operator<<(ostream &os,student a){os<<a.name;return os;}
//void fun(student & a){
//    cout<<a.name<<endl;
//}
void Delete(const char*fileDat){



        vector <student> vec;
        ifstream fin;
        fin.open(fileDat);
         if(!fin.is_open()){cout<<"文件打开失败";}
         else {
                student stu;
                while(fin.read((char *)&stu,sizeof stu))
                 {

                  stu.avg=(stu.score[0]+stu.score[1]+stu.score[2])/3;
                    vec.push_back(stu); }
                     fin.close();
                int num;
                cout<<"输入要删除的学号:";
                cin>>num;

                if(Search(fileDat,num)) {
               vector<student>::iterator  it =vec.begin();

               for(;it!=vec.end();it++)
               {
                   if(it->number==num)
                   {
                       vec.erase(it);
                       cout<<"删除成功!";
                       break;
                   }
               }



                        ofstream fout;
                        fout.open(fileDat,ios_base::binary);
                        if(!fout.is_open()){cout<<"文件打开失败!";}
                        else {
                                for(auto it=vec.begin();it!=vec.end();it++)
                                {

                                  fout.write((char *)&*it,sizeof stu);
                                }
                                fout.close();

                            }

                            }
                else {cout<<"学号不存在!\n";}
                            }




        system("pause");
}

Input.cpp 插入记录功能

#include"jkl_1.h"




void Input(const char*fileDat)
{
    ofstream fout;




        student stu;
        cout<<"输入学生学号,学号为0表示结束输入:";
        cin>>stu.number;


        while(stu.number!=0){
              if(Search(fileDat,stu.number)) cout<<"此学号已经存在重新输入!\n";
        else {


            cout<<"输入学生姓名:";
            cin>>stu.name;
            cout<<"输入学生性别:";
            cin>>stu.sex;
            cout<<"输入学生三科成绩:";
            cin>>stu.score[0]>>stu.score[1]>>stu.score[2];




            fout.open(fileDat,ios_base::out|ios_base::app|ios_base::binary);
            if(!fout.is_open()){cout<<"打开文件失败!!";fout.close();break;}
            else
                fout.write((char *)&stu,sizeof(stu));
                fout.close();
            }
            cout<<"输入学生学号,学号为0表示结束输入:";
            cin>>stu.number;


            }






            system("pause");






}

Inquire.cpp 查询学生信息

#include "jkl_1.h"
#include <cstdlib>
using namespace std;
void Inquire(const char*fileDat){

    ifstream fin;
    fin.open(fileDat);
    if(!fin.is_open()){cout<<"文件打开失败!";}
    else {
        student stu;
        while( fin.read((char *)&stu,sizeof(stu))){
            cout<<stu.number<<"\t"<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.score[0]<<"\t"<<stu.score[1]<<"\t"<<stu.score[2]<<"\t"<<endl;
        }

    }
    fin.close();
    system("pause");

}

Modify.cpp 修改数据功能

#include "jkl_1.h"

void Modify(const char*fileDat){
        int  gps;
        ifstream fin;
        fin.open(fileDat,ios_base::in|ios_base::binary);
         if(!fin.is_open()){cout<<"文件打开失败";}
         else{
                int num;
                cout<<"输入要修改的学号:";
                cin>>num;
                student stu;

            while(!fin.eof())
            {
                gps=fin.tellg();
                cout<<"编号"<<gps<<endl;
                fin.read((char *)&stu,sizeof stu);
                if(stu.number==num)
                {
                    cout<<stu.number<<"\t"<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.score[0]<<"\t"<<stu.score[1]<<"\t"<<stu.score[2]<<"\t"<<endl;
                    fin.close();
                    break;
                }
            }

            if(fin.is_open()) {cout<<"没有找到此编号!";fin.close();}

                else {  cout<<"输入修改后的三科成绩:";
         cin>>stu.score[0]>>stu.score[1]>>stu.score[2];

                        fstream fout;
                        fout.open(fileDat,ios_base::in|ios_base::out|ios_base::binary);
                        if(!fout.is_open()){cout<<"文件打开失败!";}
                        else {
                                if(gps!=0)fout.seekp(gps);
                                fout.write((char *)&stu,sizeof stu);
                                cout<<"修改成功!";
                                fout.close();
            }

            }

         }


        system("pause");

}

Search.cpp 搜索功能

#include "jkl_1.h"
bool Search(const char*fileDat,int num){

    ifstream fin(fileDat,ios_base::in|ios_base::binary);
    if(!fin.is_open()) cout<<"ËÑË÷Îļþ´ò¿ª´íÎó£¡";
    else
    {   student stu;
        while(fin.read((char *)&stu,sizeof stu))
        if(stu.number==num) {fin.close();return true;}
    }

    fin.close();
    return false;

}

Stusort.cpp 排序功能

#include "jkl_1.h"
bool GreaterSort(student a,student b){return a.avg>b.avg;}
void Stusort(const char*fileDat){

        vector <student> vec;
            ifstream fin;
            fin.open(fileDat);
         if(!fin.is_open()){cout<<"文件打开失败"; fin.close();}
         else {
                student stu;
                while(fin.read((char *)&stu,sizeof stu))
                {   stu.avg=(stu.score[0]+stu.score[1]+stu.score[2])/3;
                     vec.push_back(stu);
                }

                     fin.close();
                sort(vec.begin(),vec.end(),GreaterSort);
                        ofstream fout;
                        fout.open(fileDat);
                        if(!fout.is_open()){cout<<"文件打开失败!"; fout.close();}
                        else {
                                for(auto it=vec.begin();it!=vec.end();it++)
                                {
                                    fout.write((char *)&*it,sizeof stu);
                                }
                                fout.close();

                            }
            }
            cout<<"排序完成!\n";
            system("pause");

}

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页