zoukankan      html  css  js  c++  java
  • 学生信息管理系统

    问题描述

    某班开设有英语、数学、程序设计三门课程,该班同学不多于50人。编写具有下列功能的菜单驱动的程序。

    (1)添加学生信息

    (2)显示所有学生信息

    (3)删除学生信息 让操作者输入要删除学生的名字,将其删除

    (4)查询学生信息 让操作者输入要查询学生的名字,显示其信息或提示无

    (5)保存当前输入数据

    (6)载入先前数据

    (0)退出系统

    程序代码
    #include<bits/stdc++.h>
    using namespace std;
    #define max_len 51		//根据问题描述,最多50个学生
    struct Student
    {
    	double english;
    	double math;
    	double program;
    	double sum;
    	char name[20];
    	bool isexist;	//用该bool型变量来标记学生是否被删除
    } list_student[max_len];	//学生列表
    
    int pos = 0; //指向学生列表的位置
    int show_Control()
    {
    	cout<<"请选择你要的功能:
    ";
    	cout<<"   1---添加学生信息
    ";
    	cout<<"   2---显示所有学生信息
    "; 
    	cout<<"   3---删除学生信息
    ";
    	cout<<"   4---查询单个学生信息
    ";
    	cout<<"   5---保存当前学生信息到文件中去
    ";
    	cout<<"   6---载入先前保存进度
    ";
    	cout<<"   0---退出系统
    ";
    	int n;
    	cin>>n;
    	return n;
    }	//展示操作菜单并返回用户选择的数字 
    
    void add_student()
    {
    	cout<<"请输入学生的名字   ";
    	cin>>list_student[pos].name;	
    	cout<<"请输入学生的英语成绩   ";
    	cin>>list_student[pos].english;
    	cout<<"请输入学生的数学成绩   ";
    	cin>>list_student[pos].math;
    	cout<<"请输入学生的程序设计成绩   ";
    	cin>>list_student[pos].program;
    	list_student[pos].sum = list_student[pos].english + list_student[pos].math + list_student[pos].program;
    	list_student[pos].isexist = true;
    	pos++;		//指针加一
    	cout<<endl; 
    }	//添加学生信息
    
    void sortbysum()
    {
    	for(int i=0;i<pos;i++)
    		for(int j=0;j<pos-i;j++)
    		{
    			if(list_student[i].isexist && list_student[j].isexist && list_student[j].sum>list_student[j+1].sum)
    			{
    				struct Student tmp = list_student[i];
    				list_student[i] = list_student[j];
    				list_student[j] = tmp;
    			}
    		}
    }//冒泡排序,根据学生的总成绩进行排序
    
    void show_all__information()
    {
    	cout<<"你是否想对学生的总成绩进行排序后输出?(y/n)";
    	char tmp[10];
    	cin>>tmp;
    	if(tmp[0]=='y') sortbysum();
    	cout<<"学生姓名	英语成绩	数学成绩	程序设计成绩	总成绩
    ";
    	for(int i=0;i<pos;i++)
    	{
    		if(list_student[i].isexist)
    		{
    			cout<<list_student[i].name << "		";
    			cout<<list_student[i].english << "		";
    			cout<<list_student[i].math << "		";
    			cout<<list_student[i].program << "		";
    			cout<<list_student[i].sum << "
    ";
    		}
    	}
    	cout<<endl;
    }//展示学生信息,提供选项是否要排序
    
    void delete_student()
    {
    	cout<<"请输入你要删除的学生的名字
    ";
    	char student_name[20];
    	cin>>student_name;
    	for(int i=0;i<pos;i++)
    	{
    		if(strcmp(student_name,list_student[i].name)==0 && list_student[i].isexist)		//如果找到指定的学生
    		{
    			list_student[i].isexist = false;	//置为false就是删除
    			cout<<"删除成功!
    ";
    			cout<<endl;
    			return;
    		}
    	}
    	cout<<"查无该学生信息
    ";
    	cout<<endl;
    }//删除某个学生
    
    void get_student()
    {
    	cout<<"请输入你要查询的学生的名字
    ";
    	char student_name[20];
    	cin>>student_name;
    	for(int i=0;i<pos;i++)
    	{
    		if(strcmp(student_name,list_student[i].name)==0)		//如果找到指定的学生
    		{
    			if(!list_student[i].isexist)
    			{
    				cout<<"查无该学生信息
    ";
    				cout<<endl;
    				return;
    			}
    			else
    			{
    				cout<<"这位学生的英语成绩是:  " << list_student[i].english << endl;
    				cout<<"这位学生的数学成绩是:  " << list_student[i].math << endl;
    				cout<<"这位学生的程序设计成绩是:  " << list_student[i].program << endl;
    				cout<<"这位学生的总成绩是:  " << list_student[i].sum<< endl;
    				cout<<endl;
    				return;
    			}
    		}
    	}
    	cout<<"查无该学生信息
    ";
    	cout<<endl;
    }//查询单个学生信息
    
    void savedate()
    {
    	FILE *fp;
    	fp = fopen("data.txt","w");
    	for(int i=0;i<pos;i++)
    	{
    		if(list_student[i].isexist)
    		{
    			fprintf(fp,"%s %.2lf %.2lf %.2lf %.2lf
    ",list_student[i].name,list_student[i].english,list_student[i].math,list_student[i].program,list_student[i].sum);
    			printf("写入成功!
    ");
    		}
    	}
    	fclose(fp);
    }//保存当前输入数据
    
    void loaddata()
    {
    	FILE *fp;
    	if((fp=fopen("data.txt","r"))==NULL)//打开输入文件
    	{
    		cout<<"无法打开该文件
    ";
    		return;
    	}
    	char tmp[100];
    	int line_length = 0;
    	
    	while(fgets(tmp,100,fp)!=0) line_length++;	//统计行数,也是统计学生个数
    	rewind(fp);		//将光标移回文件开头
    	for(int i=0;i<line_length;i++)
    	{
    		fscanf(fp,"%s%lf%lf%lf%lf",&list_student[i].name,&list_student[i].english,&list_student[i].math,&list_student[i].program,&list_student[i].sum);
    		list_student[i].isexist = true;
    	}
    	pos = line_length;
    	fclose(fp);
    }//载入先前数据
    
    int main()
    {
    	int choice = show_Control();
    	while(choice!=0)
    	{
    		switch(choice)
    		{
    			case(0): 
                    {
                        cout<<"是否要保存并退出(y/n)";
                        char tmp[5];
                        cin>>tmp;
                        if(tmp[0]=='y')
                            savedate();
                        return 0;	
                    }//退出
    			case(1): add_student();break;		//添加学生信息
    			case(2): show_all__information();break;		//展示所有学生信息
    			case(3): delete_student();break;	//删除学生信息
    			case(4): get_student();break;		//获取单个学生信息
    			case(5): savedate();break;		//保存当前所有学生信息
    			case(6): loaddata();break;		//载入先前数据
    		}
    		choice = show_Control(); //更新用户选项 
             if(choice == 0)
    		{
    			cout<<"是否要保存并退出(y/n)";
                        char tmp[5];
                        cin>>tmp;
                        if(tmp[0]=='y')
                            savedate();
                        return 0;
    		}
    	}
    	return 0;
    }
    
    
    测试用例

    张三 154.00 15.00 59.00 228.00
    李四 489.00 15.00 49.00 553.00
    老王 156.00 155.00 156.00 467.00
    李子 156.00 114.00 236.00 506.00

    结果展示


  • 相关阅读:
    字符串-06. IP地址转换
    字符串-05. 字符串循环左移
    字符串-04. 字符串逆序
    BZOJ 3110
    UOJ 34 fft板子
    BZOJ 2716
    BZOJ 2243
    BZOJ 3697
    BZOJ 1176
    BZOJ 2599
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/9349731.html
Copyright © 2011-2022 走看看