学生信息管理系统

时光怂恿深爱的人放手 提交于 2020-01-16 03:30:26

顺序表实现学生信息管理系统

#include <iostream>
#include<iomanip>
#include <fstream>
#include<string>

using namespace std;

#define MAXSIZE 10000
#define OK 1
#define ERROR 0
typedef int Status;

typedef struct {
    string no;         //8位学号
    string name;      //姓名
    int score;          //成绩
}Student;

typedef Student ElemType;
typedef struct{         //顺序表的结构体
    ElemType *elem;
    int length;
    int listSize;
}SqList;

void Menu(){
    cout<<"********欢迎使用学生成绩管理系统********"<<endl;
    cout<<"1.输入学生人数与信息"<<endl;
    cout<<"2.从指定文件输入学生信息来初始化线性表"<<endl;
    cout<<"3.显示学生信息"<<endl;
    cout<<"4.根据姓名查找学生信息"<<endl;
    cout<<"5.显示指定学生信息"<<endl;
    cout<<"6.在指定位置插入学生信息"<<endl;
    cout<<"7.学生信息更新"<<endl;
    cout<<"8.删除指定位置的学生信息"<<endl;
    cout<<"9.统计学生个数"<<endl;
    cout<<"10.退出程序"<<endl;
}

void CreatList(int n,SqList &L){        //创建顺序表并输入学生信息
    L.elem = new ElemType[MAXSIZE];
    L.length=0;
    for(int i=0;i<n;i++){
    cout<<"请输入学生姓名: "<<endl;
    cin>>L.elem[i].name;
    cout<<"请输入学生学号: "<<endl;
    cin>>L.elem[i].no;
    cout<<"请输入学生成绩: "<<endl;
    cin>>L.elem[i].score;
    L.length++;
    }
}

void OpenFile(SqList &L)                           //从指定文件输入学生信息来初始化线性表
{
    L.elem=new ElemType[MAXSIZE];
    char filename[20]={0};
    int i=0;
    cout<<"请输入文件的名称: "<<endl;;
    cin>>filename;
    fstream file;
    file.open(filename);
    if(!file){
        cout<<"未找到相关文件,无法打开!"<<endl;
    }
    while(!file.eof()){
        file>>L.elem[i].name>>L.elem[i].no>>L.elem[i].score;
        i++;
    }
    cout<<"录入学生信息完毕"<<endl;
    file.close();
}

void DisplayList(SqList &L){        //显示学生信息
    for(int i=0;i<L.length;i++)
    {
        cout<<"姓名: "<<L.elem[i].name<<endl;
        cout<<"学号: "<<L.elem[i].no<<endl;
        cout<<"成绩: "<<L.elem[i].score<<endl;
    }
}

void SearchName(SqList &L){      //根据姓名查找学生信息
    string str1,str2;
    int i=0;
    cout<<"请输入姓名:";
    cin>>str1;
    while(i<L.length)
    {
        str2=L.elem[i].name;
        if(str2==str1)
        {
            cout<<"该生的学号是: "<<L.elem[i].no<<endl;
            cout<<"该生的成绩是: "<<L.elem[i].score<<endl;
        }
        i++;
    }
    if(i==L.length&&(str2!=str1))
        cout<<"没有该生的信息!"<<endl;
}

void Query(int pos,SqList &L){      //显示指定学生信息
    cout<<"姓名: "<<L.elem[pos-1].name<<endl;
    cout<<"学号: "<<L.elem[pos-1].no<<endl;
    cout<<"成绩: "<<L.elem[pos-1].score<<endl;
}

Status ListInsert(SqList &L,int i,ElemType p){       //在指定位置插入学生信息
    if((i<1)||(i>L.length+1))return ERROR;
    if(L.length==MAXSIZE)return ERROR;
    for(int j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
        L.elem[i-1]=p;
        ++L.length;
        return OK;
}

Status Alter(SqList &L){                    //学生信息更新
    string str1,str2;
    cout<<"请输入需要更新的学生的学号: "<<endl;
    cin>>str1;
    int i=0,choice;
    while(1)
    {
        if((i==L.length)&&(L.elem[i].no!=str1)){
            cout<<"没有该学生信息"<<endl;
            break;
        }
        else if((i<L.length)&&(L.elem[i].no!=str1)){
            i++;
            continue;
        }
        else if((i<L.length)&&(L.elem[i].no==str1)){
            break;
        }
        else{
            cout<<"请重新输入学号: "<<endl;
            cin>>str1;
            continue;
        }
    }
    for(i=0;i<L.length;i++){
        if(L.elem[i].no==str1){
            cout<<"请选择需要修改的信息"<<endl;
            cout<<"1.姓名"<<"2.学号"<<"3.成绩"<<endl;
        }
        cin>>choice;
        switch(choice){
            case 1:
                {
                    cout<<"请输入新的姓名"<<endl;
                    cin>>L.elem[i].name;
                    return OK;
                }
            case 2:
                {
                    cout<<"请输入新的学号"<<endl;
                    cin>>L.elem[i].no;
                    return OK;
                }
            case 3:
                {
                    cout<<"请输入新的成绩"<<endl;
                    cin>>L.elem[i].score;
                    return OK;
                }
        }
    }
}

void ListDelete(SqList &L,int pos)      //删除指定位置学生信息
{
    int i;
    for(i=pos;i<L.length;i++)
    {
        L.elem[i-1]=L.elem[i];
        --L.length;
    }
}

void CountData(SqList &L)
{
    cout<<"学生的个数是: "<<L.length<<endl;
}

int main()
{
    Menu();
    SqList L;
    int choose,i,pos;
    int ant=-1;
    L.length=0;
    while(1)
    {
        cout<<"请输入您的选择:"<<endl;
        cin>>choose;
        if(choose==10)
            break;
        if(choose<1||choose>10)
        {
            cout<<"对不起,输入非法!请重新输入:";
            continue;
        }
        switch(choose)
        {
            case 1:             //录入学生信息
                if(ant!=-1)
                {
                    cout<<"您已将学生信息录入!"<<endl;
                    continue;
                }
                cout<<"请输入学生人数:"<<endl;
                cin>>ant;
                CreatList(ant,L);
                continue;
            case 2:
                OpenFile(L);
                continue;
            case 3:             //输出所有学生信息
               DisplayList(L);
               continue;
            case 4:             //根据姓名查找学生信息
                SearchName(L);
                continue;
            case 5:   //显示指定学生信息
                cout<<"请输入需要查找的学生序号: ";
                cin>>pos;
                Query(pos,L);
                continue;
            case 6:             //在指定位置插入学生信息
                {
                    cout<<"请输入需要插入学生信息的位置: ";
                    cin>>i;         //输入指定位置
                    ElemType p;
                    cout<<"请输入学生的姓名: "<<endl;
                    cin>>p.name;
                    cout<<"请输入学生的学号: "<<endl;
                    cin>>p.no;
                    cout<<"请输入学生的成绩: "<<endl;
                    cin>>p.score;
                    ListInsert(L,i,p);
                }
               continue;
            case 7:             //学生信息更新
                Alter(L);
                continue;
            case 8:             //删除指定位置的学生信息
                cout<<"请输入需要删除的学生的序号: "<<endl;
                cin>>pos;
                ListDelete(L,pos);
                continue;
            case 9:             //统计学生个数
                CountData(L);
                continue;
            case 10:
                break;
    }
    cout<<"谢谢您的使用,请按任意键退出"<<endl;
    return 0;
    }
}

链表实现学生信息管理系统

#include <iostream>
#include<iomanip>
#include <fstream>
#include<string>

using namespace std;
fstream OpenFile();       //声明文件输出流

#define MAXSIZE 10000
#define OK 1
#define ERROR 0

typedef struct {
    string no;         //8位学号
    string name;      //姓名
    int score;          //成绩
}Student;

typedef int Status;
typedef Student ElemType;

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

void Menu(){
    cout<<"********欢迎使用学生成绩管理系统********"<<endl;
    cout<<"1.输入学生人数与信息"<<endl;
    cout<<"2.从指定文件输入学生信息来初始化线性表"<<endl;
    cout<<"3.显示学生信息"<<endl;
    cout<<"4.根据姓名查找学生信息"<<endl;
    cout<<"5.显示指定学生信息"<<endl;
    cout<<"6.在指定位置插入学生信息"<<endl;
    cout<<"7.学生信息更新"<<endl;
    cout<<"8.删除指定位置的学生信息"<<endl;
    cout<<"9.统计学生个数"<<endl;
    cout<<"10.***输出某个成绩区间的学生"<<endl;
    cout<<"11.退出程序"<<endl;
}

void CreatList(int n,LinkList &L){          //初始化链表
    LinkList r,p;
    L = new LNode;
    L->next = NULL;
    r=L;
    for(int i=0;i<n;++i){
        p = new LNode;
        cout<<"请输入学生的姓名: "<<endl;
        cin>>p->data.name;
        cout<<"请输入学生的学号: "<<endl;
        cin>>p->data.no;
        cout<<"请输入学生的成绩: "<<endl;
        cin>>p->data.score;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}

void OpenFile(LinkList &L){           //通过指定文件录入学生信息
    L=new LNode;
    LinkList p,r;
    r = L;
    char filename[20] = {0};
	cout<<"请输入文件的名称: ";
    cin>>filename;
    fstream file;
    file.open(filename);
    if (!file) {
		cout << "未找到相关文件,无法打开!" << endl<<endl;
        return;
	}
    while(!file.eof()){
        p = new LNode;
        file>>p->data.name>>p->data.no>>p->data.score;
        p->next = NULL;
        r->next = p;
        r = p;
    }
    cout<<"录入学生信息完毕"<<endl<<endl;
    file.close();
}

void DisplayList(LinkList &L){         //显示学生信息
    LinkList p;
    p=L->next;
    while(p){
        cout<<"学生的姓名是: "<<p->data.name<<endl;
        cout<<"学生的学号是: "<<p->data.no<<endl;
        cout<<"学生的成绩是: "<<p->data.score<<endl;
        p=p->next;
    }
}

void SearchName(LinkList &L){        //根据姓名查找学生信息
    string str1,str2;
    LinkList p;
    p=L->next;
    cout<<"请输入姓名: ";
    cin>>str1;
    while(p){
        str2=p->data.name;
        if(str2==str1){
            cout<<"该生的学号是: "<<p->data.no<<endl;
            cout<<"该生的成绩是: "<<p->data.score<<endl;
        }
        p=p->next;
    }
    if((p==NULL)&&(str2!=str1))
        cout<<"没有该生的信息!"<<endl;
}

Status Query(int pos,LinkList L){       //显示指定学生信息
    LinkList p;
    int j=1;
    p=L->next;
    while(p&&j<pos){
        p=p->next;
        ++j;
    }
    if(!p||j>pos)return ERROR;
    cout<<"该生的姓名是: "<<p->data.name<<endl;
    cout<<"该生的学号是: "<<p->data.no<<endl;
    cout<<"该生的成绩是: "<<p->data.score<<endl;
    return OK;
}

Status ListInsert(LinkList &L,int i,ElemType e){        //在指定位置插入学生信息
    LinkList p,s;
    int j=0;
    p=L;
    while(p&&(j<i-1)){
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)return ERROR;
    s=new LNode;
    s->data=e;
    s->next=p->next;
    p->next=s;
    return OK;
}

Status Alter(LinkList &L){       //学生信息更新
    string str1,str2;
    LinkList p;
    p=L->next;
    cout<<"请输入需要更新的学生的学号: "<<endl;
    cin>>str1;
    int choose;
    while(1){
        if((p==NULL)&&(p->data.no!=str1)){
            cout<<"没有该学生信息!"<<endl;
            break;
        }
        else if(p&&(p->data.no!=str1)){
            p=p->next;
            continue;
        }
        else if(p&&(p->data.no==str1)){
            break;
        }
        else{
            cout<<"请重新输入学号: "<<endl;
            cin>>str1;
            continue;
        }
    }
    if(p->data.no==str1){
        cout<<"请输入需要修改的信息"<<endl;
        cout<<"1.姓名"<<"2.学号"<<"3.成绩"<<endl;
        cin>>choose;
        switch(choose){
        case 1:
            cout<<"请输入新的姓名: "<<endl;
            cin>>p->data.name;
            return OK;
        case 2:
            cout<<"请输入新的学号: "<<endl;
            cin>>p->data.no;
            return OK;
        case 3:
            cout<<"请输入新的成绩: "<<endl;
            cin>>p->data.score;
            return OK;
        }
    }
    return OK;
}


Status ListDelete(LinkList &L,int pos){       //删除指定位置学生信息
    LinkList p,q;
    int j=0;
    p=L;
    while((p->next)&&(j<pos-1)){
        p=p->next;
        ++j;
    }
    if(!(p->next)||(j>pos-1))return ERROR;
    q=p->next;
    p=p->next=q->next;
    delete q;
    return OK;
}

void CountData(LinkList &L){           //统计学生的个数
    LinkList p;
    int i=1;
    p=L->next;
    while(p){
        p=p->next;
        i++;
    }
    cout<<"学生的个数是: "<<i-1<<"个。"<<endl;
}

void Range(LinkList &L,int smin,int smax){
    LinkList p;
    p=L->next;
    while(p){
        if((p->data.score>smin)&&(L->data.score<smax)){
            cout<<p->data.name<<" "<<p->data.no<<" "<<p->data.score;
        }
        p=p->next;
    }
    cout<<endl;
}

int main()
{
    Menu();
    LinkList L;
    int choose,pos,i,ant=-1;
    while(1){
        cout<<"请输入您的选择:"<<endl;
        cin>>choose;
        if(choose==11)
            break;
        if(choose<1||choose>11)
        {
            cout<<"对不起,输入非法!请重新输入:";
            continue;
        }
        switch(choose)
        {
            case 1:             //录入学生信息
                if(ant!=-1)
                {
                    cout<<"您已将学生信息录入!"<<endl;
                    continue;
                }
                cout<<"请输入学生人数:"<<endl;
                cin>>ant;
                CreatList(ant,L);
                continue;
            case 2:
                OpenFile(L);
                continue;
            case 3:
                DisplayList(L);
                continue;
            case 4:
                SearchName(L);
                continue;
            case 5:
                cout<<"请输入需要查找的学生序号: ";
                cin>>pos;
                Query(pos,L);
                continue;
            case 6:
                {
                    cout<<"请输入需要插入学生信息的位置: ";
                    cin>>i;         //输入指定位置
                    ElemType p;
                    cout<<"请输入学生的姓名: "<<endl;
                    cin>>p.name;
                    cout<<"请输入学生的学号: "<<endl;
                    cin>>p.no;
                    cout<<"请输入学生的成绩: "<<endl;
                    cin>>p.score;
                    ListInsert(L,i,p);
                }
               continue;
            case 7:
                Alter(L);
                continue;
            case 8:
                cout<<"请输入需要删除的学生的序号: "<<endl;
                cin>>pos;
                ListDelete(L,pos);
                continue;
            case 9:             //统计学生个数
                CountData(L);
                continue;
            case 10:
                int smin,smax;
                cout<<"请输入最小值smin: ";
                cin>>smin;
                cout<<"请输入最大值smax: ";
                cin>>smax;
                Range(L,smin,smax);
                continue;
            case 11:
                break;
        }
    }
    cout<<"谢谢您的使用,请按任意键退出"<<endl;
    return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!