C++课程设计:学生成绩管理系统

这篇博客介绍了作者使用C++编程实现的一个学生成绩管理系统,包括开始界面、人数及课程设置、信息输入、成绩显示、分析等功能。通过这次课程设计,作者深化了对C++的理解,对这门课程产生了更大的兴趣,并计划在考试后进一步深入学习。
摘要由CSDN通过智能技术生成
/****************************************************************
************     学生成绩管理系统     ***************************
****************************************************************/
#include <iostream>  
#include <cstring>  
#include <iomanip>  
#include <cstdlib>  
#include <fstream>  
#include <string>  
#include <cctype>  
using namespace std;  
const int SIZE=20;  
struct student  
{  
 char classnum[SIZE];                                            //班级  
 char id[SIZE];                                                  //学号  
 char name[SIZE];                                                //姓名  
 int *score;  
};  
void input(student p[], string c_name[],int s_num,int c_num);    //输入学生的成绩信息,包括学号、姓名、性别等基本信息和各科成绩  
void show(student p[], string c_name[],int s_num,int c_num);     // 显示全部学生各科成绩信息;  
void statistic(student p[], string c_name[],int s_num,int c_num);//对各科分班进行成绩统计分析,计算总分、平均分、最高分、最低分、及格率等;  
void section(student p[], string c_name[],int s_num,int c_num);  //统计各个科目各分数段人数及班级信息;  
void search(student p[], string c_name[],int s_num,int c_num);   //按学号或姓名查找并显示某个学生的各科成绩;  
void sort(student p[], string c_name[],int s_num,int c_num);     //按课程成绩或总分由高到低排序显示;  
void update(student p[], string c_name[],int s_num,int c_num);   //更新某个学生的基本信息或课程成绩;  
void quicksort(int s[],int l,int r);              //快速排序  
void fileout(student p[], string c_name[],int s_num,int c_num,int semester);//文件形式输出  
int main()  
{  
    cout<<setw(25)<<" "<<"欢迎使用本系统!"<<endl;  
    cout<<"********************************************************************************"<<endl<<endl;  
    cout<<"****************************《学生成绩管理系统》********************************"<<endl<<endl;  
    cout<<"********************************************************************************"<<endl;  
    int n=0;  
    int student_num;//学生数  
    int semester;//学期  
    int cour_num;//课程数  
    cout<<"是否从文档中读取基础信息?(Y/N):";  
    char first_sel;  
    cin>>first_sel;  
    cin.get();  
    while(tolower(first_sel)!='y'&&tolower(first_sel)!='n')  
    {  
        cout<<"输入有误,请重新输入(Y/N):";  
        cin>>first_sel;  
        cin.get();  
    }  
    if(tolower(first_sel)=='y')  
    {  
        ifstream fin;  
        n=1;  
        cout<<"****************      说明:                                  ****************"<<endl;  
        cout<<"****************      如上次保存的文档名为student.txt         ****************"<<endl;  
        cout<<"****************      则读取的文档名为basic_student.txt。     ****************"<<endl;  
        cout<<"请输入基本信息文档名:";  
        char _fname[SIZE];  
        cin.getline(_fname,SIZE);  
        fin.open(_fname);  
        while(!fin.is_open())  
        {  
            cout<<"不能打开此文档名的文档,请重新输入:";  
            cin.getline(_fname,SIZE);  
            fin.open(_fname);  
        }  
        fin>>student_num;  
        fin.get();  
        fin>>semester;  
        fin.get();  
        fin>>cour_num;  
        fin.get();  
        fin.close();  
        system("pause");  
        system("cls");  
    }  
    else  
    {  
        cout<<setfill('=')<<setw(32);  
        cout<<"请输入学生人数:";  
        cin>>student_num;  
        while(!cin.good())  
        {  
            cin.clear();  
            cin.sync();  
            cout<<"输入有误!请重新输入学生个数: ";  
            cin>>student_num;  
            cin.get();  
        }  
        cout<<"================";  
        cout<<"请输入学期(以数字形式):";  
        cin>>semester;  
        while(!cin.good())  
        {  
            cin.clear();  
            cin.sync();  
            cout<<"输入有误!请重新输入学期: ";  
            cin>>student_num;  
            cin.get();  
        }  
        cout<<setfill('=')<<setw(25);  
        cout<<"请输入第 "<<semester<<" 学期的课程数目: ";  
        cin>>cour_num;  
        cin.get();  
        while(!cin.good())  
        {  
            cin.clear();  
            cin.sync();  
            cout<<"输入有误!请重新输入第 "<<semester<<" 学期的课程数目: ";  
            cin>>cour_num;  
            cin.get();  
        }  
  
    }  
    student *p=new student[student_num];  
    string *cour_name=new string[cour_num];  
    if(tolower(first_sel)=='y')  
    {  
        ifstream fin;  
        cout<<"****************      说明:                                 ******************"<<endl;  
        cout<<"****************      如上次保存的文档名为student.txt        ******************"<<endl;  
        cout<<"****************      则读取的文档名为course_student.txt。   ******************"<<endl;  
        cout<<"请输入课程信息文档名:";  
        char _fname[SIZE];  
        cin.getline(_fname,SIZE);  
        fin.open(_fname);  
        while(!fin.is_open())  
        {  
            cout<<"不能打开此文档名的文档,请重新输入:";  
            cin.getline(_fname,SIZE);  
            fin.open(_fname);  
        }  
        for(int i=0;i<cour_num;i++)  
        {  
            getline(fin,cour_name[i]);  
        }  
        fin.close();  
        system("pause");  
        system("cls");  
    }  
    else  
    {  
		int i;
        for(i=0;i<cour_num;i++)  
        {  
            cout<<setfill('=')<<setw(25);  
            cout<<"请输入第 "<<i+1<<" 个课程名:";  
            cin>>cour_name[i];
			cin.get();
        }  
    }
	int i;
    int **all_score=new int*[student_num];  
    for(i=0;i<student_num;i++)  
        all_score[i]=new int[cour_num];
	
    for(i=0;i<student_num;i++)  
        p[i].score=&all_score[i][0];  
    if(tolower(first_sel)=='y')  
    {  
        ifstream fin;  
        cout<<"******************     说明:                                 ******************"<<endl;  
        cout<<"******************     如上次保存的文档名为student.txt        ******************"<<endl;  
        cout<<"******************     则读取的文档名为student_student.txt。  ******************"<<endl;  
        cout<<"请输入学生信息文档名:";  
        char _fname[SIZE];  
        cin.getline(_fname,SIZE);  
        fin.open(_fname);  
        while(!fin.is_open())  
        {  
            cout<<"不能打开此文档名的文档,请重新输入:";  
            cin.getline(_fname,SIZE);  
            fin.ope
学生成绩管理系统设计” A.问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。 中学生除了包括小学生所有信息外,还包括地理、历史成绩。 大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。 B.功能要求 (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (9)排序功能:可按总分和单科成绩排名次。
实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。 实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。
关于c语言和c++的课程成绩信息管理系统,共有将近6000行代码,建议使用vs2012或2010便于管理也可使用VC6.0++环境修改运行但查找麻烦,所有的语言没有脱离c和c++,主要采用模块思想,也可以转换成面向对象型的语言,只要将模块函数写进类中。同时学c语言的也可以使用,除了使用cout,cin一些很容易上手的c++代码,相当于printf,scanf,主要为了方便输入输出,不用写%d%c... 详细细节也可以访问,百度文库网址 使用注意事项 有着强大的报错功能。 1 全部采用鼠标点击功能,可以看百度网址图片。 2 录用学生信息的细节选项中,如果点击错误信息,再次点击将会取消。 3 附加功能中的高级打印功能中,如果想改变选项,只需要点击另一个即可,当前的状态就会消失。 4 输入学号为53120101--531215**(其中不包括****00,例如53120700)。(可以设置) 5 所有成绩范围为0--99。(可以设置) 6 如果想去掉钢琴曲,直接删除MP3,或者改成其他名字即可。 7 打印直方图可以根据班级的不同,向后移动。 7 如果打印不规范,可能窗口较小,可通过调节窗口大小来打印排名...... 8 请包含student.txt默认文件(文件中至少一名学生信息),否则将会程序在进行实质功能作用时意外退出(已在包中)。 头文件student.h #ifndef _STUDENT_H_ #define _STUDENT_H_ #include #include HWND hWnd; //来自msdn #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \ on line %d\n", __FILE__, GetLastError(), api, __LINE__);} void cls( HANDLE hConsole ) { COORD coordScreen = { 0, 0 }; /* here's where we'll home thecursor */ BOOL bSuccess; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ DWORD dwConSize; /* number of character cells inthe current buffer *//* get the number of character cells in the current buffer */ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi ); PERR( bSuccess, "GetConsoleScreenBufferInfo" ); dwConSize = csbi.dwSize.X * csbi.dwSize.Y;/* fill the entire screen with blanks */ bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ', dwConSize, coordScreen, &cCharsWritten ); PERR( bSuccess, "FillConsoleOutputCharacter" );/* get the current text attribute */ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi ); PERR( bSuccess, "ConsoleScreenBufferInfo" );/* now set the buffer's attributes accordingly */ bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten ); PERR( bSuccess, "FillConsoleOutputAttribute" );/* put the cursor at (0, 0) */ bSuccess = SetConsoleCursorPosition( hConsole, coordScreen ); PERR( bSuccess, "SetConsoleCursorPosition" ); return; } HANDLE hOut; HANDLE hIn; void enter(); void ReadFile(char*str="student.txt"); typedef enum grade{you=95,liang=85,zhong=75,pass=65,nopass=0 } Grade; Grade g1=you; Grade g2=liang; Grade g3=zhong; Grade g4=pass; Grade g5=nopass; void DelClass(); //学生类结构 typedef struct student{ int studentid; char name[20]; char sex[5]; char nation[20]; int biryear; int birmonth; char post[10]; int cyu; int cyushe; int cshe; int cdui; int cduishe; struct student* next; double ave; double wave; } Student; Student *stubegin=NULL; Student* stulast=NULL; int total=0; //课程类结构 typedef struct course{ char obj[30]; int time; int xuefen; int mark; Grade rank; } Course; Course c1; Course c2; Course c3; Course c4; Course c5; void InitCourse(); void AddData(Student*); void AltData(); void AddShuju(int *,Student*); void IntEro(int& ,int,int,int,int); //功能介绍 /*****************************************Loading页面*******************************************/ void input();//输入信息功能 void output();//输出信息功能 void addition();//附加功能 /*****************************************输入信息功能*******************************************/ void AddStudent(); void DelStudent(int); void AltStudent(int); void SaveMessage(); void readfile(); /*****************************************输出信息功能*******************************************/ void CalRankAve(int); void CalRankWave(int); void PrintStudent(int); void PrintCourse(int); void PrintWell(); /*****************************************打印总成绩*******************************************/ void PrintTotal(); void PrintStudentID(); void PrintAve(); void PrintWave(); /*****************************************打印科目成绩*******************************************/ void PrintObj(); void PrintCyu(); void PrintCyushe(); void PrintCshe(); void PrintCdui(); void PrintCuishe(); /*****************************************打印优秀职务单科成绩*******************************************/ void PrintObjYou(); void PrintCyuYou(); void PrintCyusheYou(); void PrintCsheYou(); void PrintCduiYou(); void PrintCuisheYou(); /*********************辅助函数**********************/ void printmark(Student *); void AddStudent1(); void SortAve(); void SortWave(); void SortId(); void SortCyu(); void SortCyushe(); void SortCshe(); void SortCdui(); void SortCduishe(); int GetInt(char* ); int Search(int); void PrintGrade(int); int GetXuefen(int,int); /****计算平均成绩和加权成绩**/ void CalAve(Student*); void CalWave(Student*); /*****************************************附加功能*******************************************/ void PrintHistogram(); void PrintTotalHistogram();
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值