c++课程设计 学生基本信息管理系统

[基本要求]

学生基本信息包括:学号,姓名,所在院系等。

主要功能:

⑴ 添加和删除学生的基本信息;

⑵ 浏览所有学生信息;

⑶ 根据多种信息进行查询(根据姓名,所在院系等);

⑷ 统计特定院系的所有学生人数并排序;

⑸ 结果格式化显示。

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

代码如下:

#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
#include <cstdlib>
#include <cstdio>
#include <windows.h>
using namespace std;

/*学生数据元素*/
typedef struct {
    int num;         //学号
    string name;     //姓名
    string academy;  //院系

}ElemType;

/*链表*/
typedef struct Node {
    ElemType data;
    struct Node* next;
}Node, * LinkList;

/*函数声明列表*/
void Read_LinkList(LinkList& L);                         //读取信息
void Save_LinkList(const LinkList& L);                   //保存信息
void Init_LinkList(LinkList& L);                         //初始化链表
void Create_LinkList(LinkList& L);                       //添加学生信息 
void Delete_LinkList(LinkList& L);                       //删除学生信息 
void Query_LinkList(const LinkList& L);                  //查询
void Print_LinkList(const LinkList& L);                  //显示
bool compare(const ElemType& t1, const ElemType& t2);    //定义sort函数的关系
void count_LinkList(LinkList& L);                        //统计
void Sort_LinkList(LinkList& L);                         //排序
void menu(LinkList& L);                                  //主控菜单

/*程序入口---主函数*/
int main()
{

    LinkList L;
    Init_LinkList(L);
    Read_LinkList(L);
    menu(L);
    return 0;
}

/*读取信息函数*/
void Read_LinkList(LinkList& L)
{
    Node* p = L;
    ifstream infile("iox.txt", ios::in);
    int len = 0;
    infile >> len;
    ElemType tem;
    while (len--)
    {
        infile >> tem.num >> tem.name >> tem.academy ;
        Node* t = new Node;
        t->data = tem;
        t->next = NULL;
        p->next = t;
        p = p->next;
    }
    infile.close();
}

/*保存信息函数*/
void Save_LinkList(LinkList& L)
{
    Node* t = L, * cnt = L;
    ofstream outfile("iox.txt", ios::out);
    int len = 0;
    while (cnt->next)
    {
        len++;
        cnt = cnt->next;
    }
    outfile << len << endl;
    while (t)
    {
        if (t != L)
            outfile << t->data.num << "\t" << t->data.name << "\t" << t->data.academy << endl;
        t = t->next;
    }
    outfile.close();
}

/*初始化链表函数*/
void Init_LinkList(LinkList& L)
{
    L = new Node;
    L->next = NULL;
}

/*添加信息函数*/
void Create_LinkList(LinkList& L)
{
    system("cls");
    cout << "\t\t\t**************添加信息***************" << endl;
    Node* t = L;
    int i = 1, flag = 1;
    while (t->next)
    {
        i++;
        t = t->next;
    }
    while (flag)
    {
        Node* p = new Node;
        cout<<"\t\t\t输入学号:"; 
        cin>>p-> data.num;
        cout << "\t\t\t输入姓名:";
        cin >> p->data.name;
        cout << "\t\t\t输入院系:";
        cin >> p->data.academy;

        p->next = NULL;
        t->next = p;
        t = t->next;
        Save_LinkList(L); 
        cout << "\t\t\t添加成功!是否继续添加?(1 是 0 否)" << endl;
        cout << "\t\t\t请选择【0-1】:";
        cin >> flag;
    }
}

/*删除学生信息函数*/
void Delete_LinkList(LinkList& L)
{
    system("cls");
    cout << "\t\t\t**************删除信息***************" << endl;
    int sel = 0;
    Node* p = L, * t = NULL;
    ElemType tem;
    cout << "\t\t\t-----------------" << endl;
    cout << "\t\t\t1 按学号删除" << endl;
    cout << "\t\t\t2 按姓名删除" << endl;
    cout << "\t\t\t3 返回主菜单" << endl;
    cout << "\t\t\t-----------------" << endl;
    cout << "\t\t\t请选择【1-3】:";
    cin >> sel;
    while (sel < 1 || sel>3)
    {
        cout << "\t\t\t输入错误,请重新输入【1-3】:";
        cin >> sel;
    }
    if (sel == 1)
    {
        int flag = 0;
        cout << "\t\t\t请输入待删除学生的学号:";
        cin >> tem.num;
        while (p->next)
        {
            t = p->next;
            if (t->data.num == tem.num)
            {
                cout << "\t\t\t待删除学生的信息如下:" << endl;
                cout<<"\t\t\t**************************************"<<endl; 
                cout << "\t\t\t学号\t" << "姓名\t" << "院系" << endl;
                cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.academy << endl;
                cout<<"\t\t\t**************************************"<<endl;
                flag = 1;
                break;
            }
            p = p->next;
        }
        if (flag == 0) cout << "\t\t\t查无此人,无法删除!" << endl;
        else
        {
            cout << "\t\t\t确认删除?(1 是 0 否)" << endl;
            cout << "\t\t\t请选择【0-1】:";
            cin >> sel;
            while (sel < 0 || sel>1)
            {
                cout << "\t\t\t输入错误,请重新输入【0-1】:";
                cin >> sel;
            }
            if (sel == 0);
            else if (sel == 1)
            {
                p->next = t->next;
                delete t;
                cout << "\t\t\t删除成功!" << endl;
                Save_LinkList(L); //改动保存至文件中
            }
        }
        cout << "\n\t\t\t";
        system("pause");
        Delete_LinkList(L);
    }
    else if (sel == 2)
    {
        int flag = 0;
        cout << "\t\t\t请输入待删学生的姓名:";
        cin >> tem.name;
        while (p->next)
        {
            t = p->next;
            if (t->data.name == tem.name)
            {
                cout << "\t\t\t待删除的信息如下:" << endl;
                cout<<"\t\t\t**************************************"<<endl;
                cout << "\t\t\t学号\t" << "姓名\t" << "院系" << endl;
                cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.academy << endl;
                cout<<"\t\t\t**************************************"<<endl;
                flag = 1;
                break;
            }
            p = p->next;
        }
        if (flag == 0) cout << "\t\t\t查无此人,无法删除!" << endl;
        else
        {
            cout << "\t\t\t确认删除?(1 是 0 否)" << endl;
            cout << "\t\t\t请选择【0-1】:";
            cin >> sel;
            while (sel < 0 || sel>1)
            {
                cout << "\t\t\t输入错误,请重新输入【0-1】:";
                cin >> sel;
            }
            if (sel == 0);
            else if (sel == 1)
            {
                p->next = t->next;
                delete t;
                cout << "\t\t\t删除成功!" << endl;
                Save_LinkList(L); 
            }
        }
        cout << "\n\t\t\t";
        system("pause");
        Delete_LinkList(L);
    }
    else if (sel == 3) return;
}

/*查询函数*/
void Query_LinkList(const LinkList& L)
{
    system("cls");
    cout << "\t\t\t**************查询功能***************" << endl;
    int sel = 0;
    Node* t = L;
    ElemType tem;
    cout << "\t\t\t-----------------" << endl;
    cout << "\t\t\t1 按姓名查询" << endl;
    cout << "\t\t\t2 按院系查询" << endl;
    cout << "\t\t\t3 返回主菜单" << endl;
    cout << "\t\t\t-----------------" << endl;
    cout << "\t\t\t请选择【1-3】:";
    cin >> sel;
    while (sel < 1 || sel>3)
    {
        cout << "\t\t\t输入错误,请重新输入【1-3】:";
        cin >> sel;
    }
    if (sel == 1)
    {
        int flag = 0;
        cout << "\t\t\t请输入待查询的姓名:";
        cin >> tem.name;
        while (t->next)
        {
            t = t->next;
            if (t->data.name == tem.name)
            {
                cout << "\t\t\t待查询信息如下:" << endl;
                cout<<"\t\t\t**************************************"<<endl;
                cout << "\t\t\t学号\t" << "院系\t" << endl;
                cout << "\t\t\t" << t->data.num << "\t" << t->data.academy << endl;
                cout<<"\t\t\t**************************************"<<endl;
                flag = 1;
                break;
            }
        }
        if (flag == 0) cout << "\t\t\t查无此人!" << endl;
        cout << "\n\t\t\t";
        system("pause");
        Query_LinkList(L);
    }
    else if (sel == 2)
    {
        int flag = 0;
        cout << "\t\t\t请输入待查询学生的院系:";
        cin >> tem.academy;
        while (t->next)
        {
            t = t->next;
            if (t->data.academy == tem.academy)
            {
                cout << "\t\t\t待查询信息如下:" << endl;
                cout<<"\t\t\t**************************************"<<endl;
                cout << "\t\t\t学号" << "姓名\t" << endl;
                cout << "\t\t\t"<< t->data.num<< "\t" << t->data.name<< endl;
                cout<<"\t\t\t**************************************"<<endl;
                flag = 1;
                break;
            }
        }
        if (flag == 0) cout << "\t\t\t查无此人!" << endl;
        cout << "\n\t\t\t";
        system("pause");
        Query_LinkList(L);
    }
    else if (sel == 3)
    {
        return;
    }
}

/*学生信息显示函数*/
void Print_LinkList(const LinkList& L)
{
    system("cls");  
    cout << "\t\t\t***************学生信息***************" << endl;
    Node* t = L->next;
    cout << "\t\t\t-----------------------------------------------------" << endl;
    cout << "\t\t\t学号\t" << "姓名\t" << "院系" << endl;
    cout << "\t\t\t-----------------------------------------------------" << endl;
    while (t)
    {
        cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.academy<< endl;
        t = t->next;
    }
    cout << "\t\t\t-----------------------------------------------------" << endl;
    cout << "\t\t\t";
    system("pause");
}

/*排序函数中sort函数的第三个参数*/
bool compare(const ElemType& t1, const ElemType& t2)
{
    return t1.num < t2.num;
}

/*统计*/
void count_LinkList(LinkList& L)
{
    system("cls");
    cout << "\t\t\t***************统计功能***************" << endl;
    int sel = 0;
    int k=0;
    Node* t = L;
    ElemType tem;
    cout << "\t\t\t-----------------" << endl;
    cout << "\t\t\t1 按学院统计" << endl;
    cout << "\t\t\t-----------------" << endl;
    cout << "\t\t\t请选择【1】:";
    cin >> sel;
    if (sel == 1)
    {
        int flag = 0;
        cout << "\t\t\t请输入待查询学生的院系:";
        cin >> tem.academy;
        while (t->next)
        {
            t = t->next;
            if (t->data.academy == tem.academy)
            {
                cout << "\t\t\t待统计信息如下:" << endl;
                cout<<"\t\t\t**************************************"<<endl;
                cout << "\t\t\t学院人数为:"  << endl;
                cout << "\t\t\t"<< t->data.academy<< endl;
                cout<<"\t\t\t**************************************"<<endl;
                flag = 1;
                k++;
                break;
            }
        }
        if (flag == 0) cout << "\t\t\t无此专业!" << endl;
        cout << "\n\t\t\t";
        system("pause");
        count_LinkList(L);
    }
    
        {if(t->next==NULL) 
            cout<<"该专业不存在!";
            return;
        }
        cout<<"该学院的学生共有"<<k<<"名!";
        cout << "\t\t\t";
        system("pause");
}

/*排序函数*/
void Sort_LinkList(LinkList& L)
{
    system("cls");
    cout << "\t\t\t***************排序功能***************" << endl;
    Node* p = L;
    int cnt = 0, i = 0;
    while (p->next)
    {
        p = p->next;
        cnt++;
    }
    ElemType* arr = new ElemType[cnt];
    p = L;
    while (p->next)
    {
        p = p->next;
        arr[i++] = p->data;
    }
    sort(arr, arr + cnt, compare);
    p = L, i = 0;
    while (p->next)
    {
        p = p->next;
        p->data = arr[i++];
        p->data.num = i;
    }
    cout << "\t\t\t对信息进行排序并整理如下:" << endl;
    Node* t = L->next;
    cout << "\t\t\t-----------------------------------------------------" << endl;
    cout << "\t\t\t学号\t" << "姓名\t" << "院系" << endl;
    cout << "\t\t\t-----------------------------------------------------" << endl;
    while (t)
    {
        cout << "\t\t\t" << t->data.num << "\t" << t->data.name << "\t" << t->data.academy << endl;
        t = t->next;
    }
    cout << "\t\t\t-----------------------------------------------------" << endl;
    Save_LinkList(L);
    cout << "\t\t\t";
    system("pause");
}

/*主控菜单函数*/
void menu(LinkList& L)
{
    char sel;
    system("cls");
    cout << "\t\t\t********************************************" << endl;
    cout << "\t\t\t你可以进行以下操作:" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             1   添加学生信息             |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             2   删除学生信息             |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             3   查询学生信息             |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             4   浏览学生信息             |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             5   统计                     |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             6   排序                     |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t|             0   退出                     |" << endl;
    cout << "\t\t\t|------------------------------------------|" << endl;
    cout << "\t\t\t请选择【0-6】:";
    cin >> sel;
    while (sel < '0' || sel>'6')
    {
        cout << "\t\t\t输入非法,请重新选择【0-6】:";
        cin >> sel;
    }
    switch (sel)
    {
    case '1':
        Create_LinkList(L);
        menu(L);
        break;
    case '2':                          
        Delete_LinkList(L);
        menu(L);
        break;
    case '3':
        Query_LinkList(L);
        menu(L);
        break;
    case '4':
        Print_LinkList(L);
        menu(L);
        break;
    case '5':
        count_LinkList(L);
        menu(L);
        break;
    case '6':
        Sort_LinkList(L);
        menu(L);
        break;                     
    case '0':
        exit(0);
    default:
        menu(L);
    }
}
 

1、问题描述  学生信息包括:学号、姓名、性别、年龄、班级等信息。  小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。  中学生除了包括小学生所有信息外,还包括地理、历史成绩、家庭住址等信息。 大学生除了包括学生所有信息外,还包括专业、家庭地址、联系方式等信息。  2、功能要求  (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。  (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。  (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。  (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。  (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。  (6)统计功能:能根据多种参数进行统计。能统计学生人数、按性别统计、按年龄统计等。  (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。  (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值