码迷,mamicode.com
首页 > 其他好文 > 详细

学生信息管理系统

时间:2018-07-22 14:12:05      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:4.0   技术   def   rcm   14.   int   scan   测试用例   数字   

问题描述

某班开设有英语、数学、程序设计三门课程,该班同学不多于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<<"请选择你要的功能:\n";
    cout<<"   1---添加学生信息\n";
    cout<<"   2---显示所有学生信息\n"; 
    cout<<"   3---删除学生信息\n";
    cout<<"   4---查询单个学生信息\n";
    cout<<"   5---保存当前学生信息到文件中去\n";
    cout<<"   6---载入先前保存进度\n";
    cout<<"   0---退出系统\n";
    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<<"学生姓名\t英语成绩\t数学成绩\t程序设计成绩\t总成绩\n";
    for(int i=0;i<pos;i++)
    {
        if(list_student[i].isexist)
        {
            cout<<list_student[i].name << "\t\t";
            cout<<list_student[i].english << "\t\t";
            cout<<list_student[i].math << "\t\t";
            cout<<list_student[i].program << "\t\t";
            cout<<list_student[i].sum << "\n";
        }
    }
    cout<<endl;
}//展示学生信息,提供选项是否要排序

void delete_student()
{
    cout<<"请输入你要删除的学生的名字\n";
    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<<"删除成功!\n";
            cout<<endl;
            return;
        }
    }
    cout<<"查无该学生信息\n";
    cout<<endl;
}//删除某个学生

void get_student()
{
    cout<<"请输入你要查询的学生的名字\n";
    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<<"查无该学生信息\n";
                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<<"查无该学生信息\n";
    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\n",list_student[i].name,list_student[i].english,list_student[i].math,list_student[i].program,list_student[i].sum);
            printf("写入成功!\n");
        }
    }
    fclose(fp);
}//保存当前输入数据

void loaddata()
{
    FILE *fp;
    if((fp=fopen("data.txt","r"))==NULL)//打开输入文件
    {
        cout<<"无法打开该文件\n";
        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

结果展示

技术分享图片
技术分享图片

学生信息管理系统

标签:4.0   技术   def   rcm   14.   int   scan   测试用例   数字   

原文地址:https://www.cnblogs.com/MartinLwx/p/9349731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!