学生成绩管理系统——C++课程设计(完整代码)

课程设计名称:C高级语言程序设计课程设计

课程设计题目:学生成绩管理系统的设计与实现

 

一、问题描述

        针对学生成绩管理,应用C语言程序设计的基本理论和方法,从对问题的分析研究开始,到编程调试结束的整个过程进行分析和设计,学生成绩信息至少包括:学号,姓名,若干门课程成绩(至少三门)。

二、基本要求

         主要功能:

                ⑴ 能对学生成绩进行录入和删除;

                ⑵ 能浏览所有学生的成绩;

              ⑶ 能按学号或姓名查询某学生成绩信息;

                ⑷ 统计与排序:根据成绩排序;统计某一分数段的学生人数。

                ⑸ 结果格式化显示。

        要求:使用文件方式存储数据,系统以菜单方式工作,模块化设计。 

三、测试要求 

           (1)设计的程序能够方便地运行,达到设计的目的;

           (2)每个模块都要用不少于20条的实际数据加以测试,并给出测试结果;

           (3)用户界面友好,功能明确,操作方便。

四、 完整代码:

#include<iostream>
#include<string>
#include<fstream>
#define MAX 1000  //定义学生数组最大容量
using namespace std;

//设计学生信息结构体
struct person
{
	long num;//学号
    string name;//姓名
    int sex;//性别
    int age;//年龄
	int math;//数学
	int chinese;//语文
	int english;//英语
	int number;//总分
};

//学生成绩管理系统
struct personbook 
{
    person parry[MAX];//学生数组最大容量
    int M_size;//当前容量
};

//1、菜单界面
void showmenu() 
{
	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 <<endl;
	cout << "*****请输入菜单序号******"<<endl;
}

//添加学生信息
void addperson(personbook * abs) 
{
	person parry[MAX];

	ofstream outfile("学生成绩管理系统.dat",ios::app);//创建或打开文件,以输出方式打开文件
	if(!outfile)
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}

    //判断学生成绩管理系统是否已经满了
    if (abs->M_size == MAX)
	{
        cout << "学生成绩管理系统已满,无法添加!" << endl;
        return;
    }
    else 
	{
		//添加学生学号
		//long num;
		cout<<"请输入学号:"<<endl;
		cin >> parry[abs->M_size].num;
        abs->parry[abs->M_size].num;
		outfile<<parry[abs->M_size].num<<'\t';
        //添加学生姓名
        //string name;
        cout << "请输入姓名:" << endl;
        cin >> parry[abs->M_size].name;
        abs->parry[abs->M_size].name;
		outfile<<parry[abs->M_size].name<<'\t';
        //性别
        //int sex;
        cout << "请输入性别:" << endl;
        cout << "1--男" << endl;
        cout << "2--女" << endl;
        while (true) 
		{
        cin >> parry[abs->M_size].sex;
        if (parry[abs->M_size].sex == 1 || parry[abs->M_size].sex == 2) 
		{
            abs->parry[abs->M_size].sex;
			outfile<<parry[abs->M_size].sex<<'\t';
            break;
        }
        else
		{
            cout << "无效输入,请重新输入" << endl;
        }
        }
       //输入年龄
        //int age;
        cout << "请输入年龄:" << endl;
        cin >>parry[abs->M_size].age;
        abs->parry[abs->M_size].age;
		outfile<<parry[abs->M_size].age<<'\t';
		//输入数学成绩
		//int math;
		cout<<"请输入数学"<<endl;
		cin>> parry[abs->M_size].math; 
		abs->parry[abs->M_size].math;
		outfile<<parry[abs->M_size].math<<'\t';
        //输入语文成绩
        //int chinese;
        cout << "请输入语文:" << endl;
        cin >> parry[abs->M_size].chinese;
        abs->parry[abs->M_size].chinese;
		outfile<<parry[abs->M_size].chinese<<'\t';
        //输入英语成绩
        //int english;
        cout << "请输入英语:" << endl;
        cin >> parry[abs->M_size].english;
        abs->parry[abs->M_size].english;
		outfile<<parry[abs->M_size].english<<'\t';
		//总分
        //int number;
        /*cout << "请输入英语/:" << endl;*/
        parry[abs->M_size].number=parry[abs->M_size].math + parry[abs->M_size].chinese + parry[abs->M_size].english;
        abs->parry[abs->M_size].number;
		outfile<<parry[abs->M_size].number<<'\n';
        abs->M_size++;
        cout << "添加成功!" << endl;
		
		system("pause");
        system("cls");//清屏
    }
	outfile.close();//关闭文件
}

//显示学生成绩信息
void showperson(personbook * abs)
{
	person parry[MAX];

	ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
	if(!infile)
	{  
		cerr<<"open error!"<<endl;
		exit(1);
	}
	//system("pause");
    system("cls");

    if (abs->M_size == 0)  //判断学生成绩管理系统中人数是否为0,如果为0,提示记录为空;如果不为0,显示记录的学生信息信息
	{
        cout << "还未添加学生信息" << endl;
		system("pause");
        system("cls");
    }
    else 
	{
        for (int i = 0; i < abs->M_size; ++i) 
		{
			infile>>parry[i].num>>parry[i].name>>parry[i].sex>>parry[i].age>>parry[i].math>>parry[i].chinese>>parry[i].english>>parry[i].number;

			cout << "学号:" << parry[i].num << "\t";
            cout << "姓名:" << parry[i].name << "\t";
            cout << "性别:" << (parry[i].sex==1?"男":"女") << "\t";//三步运算符
            cout << "年龄:" << parry[i].age << "\t";
			cout<<  "数学: " << parry[i].math<<"\t";
            cout << "语文:" << parry[i].chinese << "\t";
            cout << "英语:" << parry[i].english << "\t";
			cout << "总分:" << parry[i].number << endl;
        }
    }
	infile.close();//关闭文件
	system("pause");
    system("cls");
}

//查找学生成绩实现步骤
int isexist(personbook * abs,string name) 
{
	person parry[MAX];

	ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
	if(!infile)
	{  
		cerr<<"open error!"<<endl;
		exit(1);
	}

    for (int i=0; i < MAX; ++i)
	{
		infile>>abs->parry[i].name;
        if (name == abs-> parry[i].name)
		{
            return i;
        }
    }
    return -1;//如果没查到就返回-1  
	infile.close();//关闭文件
}

//删除学生信息
void deleteperson(personbook * abs)
{

    cout << "请输入您要删除的学生信息" << endl;
    string name;
    cin >> name;
    int ret = isexist(abs,name);
    if (ret == -1) 
	{
        cout << "查无此人" << endl;
    }
    else
	{
        for (int i = ret; i < abs->M_size; ++i) 
		{
            abs->parry[i] = abs->parry[i + 1];//数据前移
        }
        abs->M_size--;
        cout << "删除成功" << endl;
    }
	system("pause");
    system("cls");
}

//查找学生信息信息
void findperson( personbook * abs) 
{
	person parry[MAX];

	ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
	if(!infile)
	{  
		cerr<<"open error!"<<endl;
		exit(1);
	}
    cout << "请输入您要查找的人:" << endl;
    string name;
    cin >> name;
    int ret = isexist(abs,name);
    if (ret != -1) 
	{
		infile>>abs->parry[ret].num>>abs->parry[ret].name>>abs->parry[ret].sex>>abs->parry[ret].age>>abs->parry[ret].math>>abs->parry[ret].english>>abs->parry[ret].english>>abs->parry[ret].number;

		cout << "学号:" << abs->parry[ret].num << "\t";
        cout << "姓名:" << abs->parry[ret].name << "\t";
        cout << "性别:" << (abs->parry[ret].sex == 1 ? "男" : "女") << "\t";//三步运算符
        cout << "年龄:" << abs->parry[ret].age << "\t";
		cout<<  "数学: " << abs->parry[ret].math<<"\t";
        cout << "语文:" << abs->parry[ret].chinese << "\t";
        cout << "英语:" << abs->parry[ret].english << "\t";
		cout << "总分:" << abs->parry[ret].number << endl;
    }
    else 
	{
        cout << "查无此人" << endl;
    }
	system("pause");
    system("cls");
	infile.close();//关闭文件
}
 

//统计某分数段的所有学生数量
void statistics(personbook* abs)
{
	person parry[MAX];

	ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
	if(!infile)
	{  
		cerr<<"open error!"<<endl;
		exit(1);
	}
	cout<<"根据总分进行统计,请输入你要统计的分数段"<<endl;
	int num_min;
	int num_max;
	int x=0;//统计数量
	cout<<"请输入最低分数:";
	cin>>num_min;
	cout<<"请输入最高分数:";
	cin>>num_max;
	for (int i=0; i < MAX; ++i)
	{
		infile>>abs->parry[i].num>>abs->parry[i].name>>abs->parry[i].sex>>abs->parry[i].age>>abs->parry[i].math>>abs->parry[i].chinese>>abs->parry[i].english>>abs->parry[i].number;
        if (num_min < abs->parry[i].number && num_max >= abs->parry[i].number)
		{
			x++;
			cout<<x<<"  ";
			cout << "学号:" << abs->parry[i].num << "\t";
            cout << "姓名:" << abs->parry[i].name << "\t";
   		    cout << "性别:" << (abs->parry[i].sex == 1 ? "男" : "女") << "\t";//三步运算符,水平制表
		    cout << "年龄:" << abs->parry[i].age << "\t";
			cout<<  "数学: " <<abs->parry[i].math<<"\t";
			cout << "语文:" << abs->parry[i].chinese << "\t";
			cout << "英语:" << abs->parry[i].english << "\t";
			cout << "总分:" << abs->parry[i].number << endl; 
        }
    }
	cout<<endl;
	cout<<"该分数段共有  "<<x<<"人"<<endl;
	system("pause");
    system("cls");
	infile.close();//关闭文件
}

//学生信息排序
//按照总成绩从高到低排序
void sortPerson(personbook * abs)
{
	person parry[MAX];
	int zongfeng[MAX];
	int num;

	ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
	if(!infile)
	{  
		cerr<<"open error!"<<endl;
		exit(1);
	}

	for (int i=0; i < abs->M_size; ++i)
	{
		infile>>abs->parry[i].num>>abs->parry[i].name>>abs->parry[i].sex>>abs->parry[i].age>>abs->parry[i].math>>abs->parry[i].chinese>>abs->parry[i].english>>abs->parry[i].number;

		zongfeng[i]=abs->parry[i].number;
	}

	//冒泡排序
	for(int m=0;m<abs->M_size-1;++m)
		for(int n=0;n<abs->M_size-m;++n)
		{
			if(zongfeng[n]<zongfeng[n+1])
			{
				num = zongfeng[n];
				zongfeng[n] = zongfeng[n+1];
				zongfeng[n+1]=num;
			}
		}
	for (int j=0; j < abs->M_size; ++j)
	for (int i=0; i < abs->M_size; ++i)
	{
		infile>>abs->parry[i].num>>abs->parry[i].name>>abs->parry[i].sex>>abs->parry[i].age>>abs->parry[i].math>>abs->parry[i].chinese>>abs->parry[i].english>>abs->parry[i].number;
		if(zongfeng[j]==abs->parry[i].number)
		{
			cout << "学号:" << abs->parry[i].num << "\t";
			cout << "姓名:" << abs->parry[i].name << "\t";
   			cout << "性别:" << (abs->parry[i].sex == 1 ? "男" : "女") << "\t";//三步运算符,水平制表
			cout << "年龄:" << abs->parry[i].age << "\t";
			cout<<  "数学: " <<abs->parry[i].math<<"\t";
			cout << "语文:" << abs->parry[i].chinese << "\t";
			cout << "英语:" << abs->parry[i].english << "\t";
			cout << "总分:" << abs->parry[i].number << endl; 
	
		}
	}
	infile.close();//关闭文件
	system("pause");
    system("cls");
	
}

//清空学生信息
void cleanPerson(personbook * abs)
{
	while(true)
	{
        cout << "如果确定清空学生信息" << endl;
        cout << "1--是" << endl;
        cout << "2--否" << endl;
        int flag;
        cin >> flag;
        if (flag == 1)
		{
        abs->M_size = 0;
		ofstream outfile("学生成绩管理系统.dat",ios::out);//创建或打开文件,以输出方式打开文件
		outfile.close();//关闭文件
        cout << "学生信息已清空" << endl;
        break;
        }
        else if(flag == 2) 
		{
            break;
        }
        else
		{
            cout << "无效输入,请重新输入" << endl;
            break;   
        }
    }
	system("pause");
    system("cls");
}

//主函数
int main()
{
	personbook abs;//初始化学生成绩管理系统
    abs.M_size = 0;

	int select = 0;
    while (true)//无限循环
	{
		showmenu();
		cin >> select;
		system("cls");
		
		switch (select) 
	{
    case 1:
        addperson(&abs);
        break;
	case 2:
		showperson(&abs);
		break;
	case 3:
        deleteperson(&abs);
        break;
	case 4:
        findperson(&abs);
        break;
	case 5:
		statistics(&abs);
		break;
	case 6:
		sortPerson(&abs);
		break;
	case 7:
		cleanPerson(&abs);
		break;
	case 0:
        cout << "欢迎下次使用" << endl;
        return 0;
        break;
	}
	}
	return 0;
}

 

 

 

 

  • 15
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
c++/qt写的项目,项目都经测试过,真实可靠,可供自己学习c++/qt。Qt是一个用标准C++编写的跨平台开发类库,它对标准C++进行了扩展,引入了元对象系统、信号与槽、属性等特性,使应用程序的开发变得更高效。 Qt类库中大量的类以模块形式分类组织的,包括基本模块和扩展模块等。一个模块通常就是一个编程主题,如数据库、图表、网络等。 一、Qt核心特点 1.1.概述 Qt本身并不是一种编程语言,它本质上是一个跨平台的C++开发类库,是用标准C++编写的类库,它为开发GUI应用程序和非GUI应用程序提供了各种类。 Qt对标准C++进行了扩展,引入了一些新概念和功能,例如信号和槽、对象属性等。Qt的元对象编译器(Meta-Object Compiler,MOC)是一个预处理器,在源程序被编译前先将这些Qt特性的程序转换为标准C++兼容的形式,然后再由标准C++编译器进行编译。这就是为什么在使用信号与槽机制的类里,必须添加一个Q_OBJECT宏的原因,只有添加了这个宏,moc才能对类里的信号与槽的代码进行预处理。 Qt Core模块是Qt类库的核心,所有其他模块都依赖于此模块,如果使用qmake来构建项目,Qt Core模块则是被自动加入的。 Qt为C++语言增加的特性就是在Qt Core模块里实现的,这些扩展特性由Qt的元对象系统实现,包括信号与槽机制、属性系统、动态类型转换等。 1.2.元对象系统 Qt的元对象系统(Meta-Object-System)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。 元对象系统由以下三个基础组成: 1.QObject类是所有使用元对象系统的类的基类; 2.在一个类的private部分声明Q_OBJECT宏,使得类可以使用元对象的特性,如动态属性、信号与槽。 3.MOC(元对象编译器)为每个QObject的子类提供必要的代码来实现元对象系统的特征。 构建项目时,MOC工具读取C++源文件,当它发现类的定义里有Q_OBJECT宏时,它就会为这个类生成另外一个包含有元对象支持代码C++源文件,这个生成的源文件连同类的实现文件一起被编译和连接。 除了信号和槽机制外,元对象还提供如下一些功能。 1.QObject::metaObject()函数返回类关联的元对象,元对象类QMetaObject包含了访问元对象的一些接口函数,例如QMetaObject::className()函数可在运行时返回类的名称字符串。 QObject obj=new QPushButton; obj->metaObject()->className(); 2.QMetaObject::newInstance()函数创建类的一个新的实例。 3.QObject::inherits(const charclassName)函数判断一个对象实例是否是名称为className的类或QObject的子类的实例。 1.3.属性系统 1.属性定义 Qt提供一个Q_PROPERTY()宏可以定义属性,它也是属于元对象系统实现的。Qt的属性系统与C++编译器无关,可以用任何标准的C++编译器编译定义了属性的Qt C++程序。 2.属性的使用 不管是否用READ和WRITE定义了接口函数,只要知道属性名称,就可以通过QObject::property()读取属性值,并通过QObject::setProperty()设置属性值。 3.动态属性 QObject::setProperty()函数可以在运行时为类定义一个新的属性,称之为动态属性。动态属性是针对类的实例定义的。 动态属性可以使用QObject::property()查询,就如在类定义里用Q_PROPERTY宏定义的属性一样。 例如,在数据表编辑界面上,一些字段是必填字段,就可以在初始化界面时为这些字段的关联显示组件定义一个新的required属性,并设置值为“true"。 4.类的附加信息 属性系统还有一个宏Q_CLASSINFO(),可以为类的元对象定义”名称——值“信息。
关于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();

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿杰_Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值