首頁 > 軟體

C++實現宿舍管理查詢系統

2022-03-16 19:01:02

本文範例為大家分享了C++實現宿舍管理查詢系統的具體程式碼,供大家參考,具體內容如下

C++使用IO流關聯.txt檔案

各模組之間的呼叫關係如下:

函數的呼叫關係反映了演示程式的層次結構:

程式碼如下:

#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdlib>
#include<string>
using namespace std;
#define MAXSIZE 100     //順序表的最大長度
typedef struct {
    string name;        //姓名
    string id;          //學號
    string dormid;      //宿舍號
}Student;
typedef struct {
    Student r[MAXSIZE + 1];     //r[0]做單元哨兵
    int length;//長度
}SqList;


//用直接插入排序存入到student.txt檔案中
void InsertSort(SqList &stu)
{
    int i, j;
    for (i = 2; i <= stu.length; i++)
        if (stu.r[i].id < stu.r[i - 1].id)
        {
            stu.r[0] = stu.r[i];
            stu.r[i] = stu.r[i - 1];
            for (j = i - 2; stu.r[0].id < stu.r[j].id; j--)
                stu.r[j + 1] = stu.r[j];
            stu.r[j + 1] = stu.r[0];
        }
    ofstream outfile("student.txt", ios::out);
    if (!outfile) {                             //如果檔案開啟失敗
        cout << "檔案開啟失敗" << endl;
        exit(1);
    }
    //outfile << "學號" << setw(8) << "姓名" << setw(8) << "宿舍號" << endl;
    outfile << stu.length << endl;

    for (i = 1; i <= stu.length; i++) {
        outfile << stu.r[i].id << setw(8) << stu.r[i].name << setw(8) << stu.r[i].dormid << endl;
    }
    cout << "學生資訊數:" << stu.length << endl;
    outfile.close();
    cout << stu.length;
}

//建立學生資訊(只能建立一次,不然會被重新整理)
void InitList(SqList &stu)
{

    int i;
    cout << "學號" << setw(8) << "姓名" << setw(8) << "宿舍號" << endl;
    for (i = 1; i <= stu.length; i++) {
        cin >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
    }
    InsertSort(stu);
}

//增加學生資訊
void Addstudent(SqList &stu)
{
    int n;
    int i = stu.length + 1;
    cout << "輸入增加學生人數" << endl;
    cin >> n;
    cout << "學號" << setw(8) << "姓名" << setw(8) << "宿舍號" << endl;
    stu.length = stu.length + n;
    for (i; i <= stu.length; i++)
        cin >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
    InsertSort(stu);
}

//查詢學生資訊
void Findstudent(SqList &stu)
{
    string a, b, c;
    string name, id, dormid;
    cout << "1.學號查詢  2.姓名查詢  3.宿舍號查詢" << endl;
    cout << "請輸入你的查詢選擇(1~3)" << endl;
    int i;
    int n;
    cin >> n;
    if (n < 1 && n>3)
    {
        cout << "您輸入有誤,請重新輸入:" << endl;
        Findstudent(stu);
    }
    if (1 == n)
    {
        cout << "請輸入學生學號:" << endl;
        cin >> id;

        ifstream infile("student.txt", ios::in);//定義輸入檔案流物件,以輸入方式開啟磁碟檔案"student.txt"
        infile >> stu.length;
        for (i = 1; i <= stu.length; i++) {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
        }
        infile.close();
        for (i = 1; i <= stu.length; i++)
        {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
            if (stu.r[i].id == id)
                cout << stu.r[i].id << setw(8) << stu.r[i].name << setw(8) << stu.r[i].dormid << endl;
        }

        infile.close();//關閉磁碟檔案

    }
    if (2 == n)
    {
        cout << "請輸入學生姓名:" << endl;
        cin >> name;

        ifstream infile("student.txt", ios::in);//定義輸入檔案流物件,以輸入方式開啟磁碟檔案"student.txt"
        infile >> stu.length;
        for (i = 1; i <= stu.length; i++) {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
        }
        infile.close();
        for (i = 1; i <= stu.length; i++)
        {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
            if (stu.r[i].name == name)
                cout << stu.r[i].id << setw(8) << stu.r[i].name << setw(8) << stu.r[i].dormid << endl;
        }

        infile.close();//關閉磁碟檔案
    }
    if (3 == n)
    {
        cout << "請輸入學生宿舍號:" << endl;
        cin >> dormid;

        ifstream infile("student.txt", ios::in);//定義輸入檔案流物件,以輸入方式開啟磁碟檔案"student.txt"
        infile >> stu.length;
        for (i = 1; i <= stu.length; i++) {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
        }
        infile.close();
        for (i = 1; i <= stu.length; i++)
        {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
            if (stu.r[i].dormid == dormid)
                cout << stu.r[i].id << setw(8) << stu.r[i].name << setw(8) << stu.r[i].dormid << endl;
        }
    }

}

//修改學生資訊
void Renewstudent(SqList &stu)
{
    int n;
    string id, name, dormid;
    cout << "1.姓名  2.宿舍號" << endl;
    cout << "請輸入您的選擇(1~2):" << endl;
    cin >> n;
    cout << "請輸入需要修改學生的學號" << endl;
    cin >> id;
    if (n != 1 && n != 2)
    {
        cout << "輸入有誤,請重新輸入:" << endl;
        Renewstudent(stu);
    }
    if (1 == n)
    {
        cout << "請輸入修改姓名" << endl;
        cin >> name;
        int i = 0;
        ifstream infile("student.txt", ios::in);
        infile >> stu.length;
        for (i = 1; i <= stu.length; i++) {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
        }
        infile.close();
        for (i = 1; i <= stu.length; i++)//先找到再修改
        {
            if (stu.r[i].id == id)
            {
                stu.r[i].name = name;
                InsertSort(stu);
                return;
            }
        }
    }
    if (2 == n)
    {
        int i;
        cout << "請輸入修改宿舍號" << endl;
        cin >> dormid;
        ifstream infile("student.txt", ios::in);
        infile >> stu.length;
        for (i = 1; i <= stu.length; i++) {
            infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
        }
        infile.close();
        for (i = 1; i <= stu.length; i++)//先找到再修改
        {
            if (stu.r[i].id == id)
            {
                stu.r[i].dormid = dormid;
                InsertSort(stu);
                return;
            }
        }
    }

}

//顯示宿舍資訊
void Showstudent(SqList &stu)
{
    string a, b, c;
    int i;
    cout << "學生的資訊如下:" << endl;
    cout << "**********************************" << endl;
    ifstream infile("student.txt", ios::in);
    if (!infile) {                              //如果檔案開啟失敗
        cout << "檔案開啟失敗" << endl;
        exit(1);
    }
    /*infile >> a >> b >> c;//從磁碟檔案讀入
    cout << a << setw(8) << b << setw(8) << c << endl;//在顯示器上顯示*/
    infile >> stu.length;
    for (i = 1; i <= stu.length; i++) {
        infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
        cout << stu.r[i].id << setw(8) << stu.r[i].name << setw(8) << stu.r[i].dormid << endl;
    }
    infile.close();
}

//刪除宿舍資訊
void Deletstudent(SqList &stu)
{
    int  i, j;
    string a, b, c, id;
    cout << "請輸入刪除學生學號" << endl;
    cin >> id;
    ifstream infile("student.txt", ios::in);//定義輸入檔案流物件,以輸入方式開啟磁碟檔案"student.txt"
    infile >> stu.length;
    for (i = 1; i <= stu.length; i++) {
        infile >> stu.r[i].id >> stu.r[i].name >> stu.r[i].dormid;
    }
    infile.close();
    for (i = 1; i <= stu.length; i++)//先找到再刪除
    {
        if (stu.r[i].id == id)
        {
            for (j = i; j<stu.length; j++)
                stu.r[j] = stu.r[j + 1];
            stu.length--;
            InsertSort(stu);
            return;
        }
    }
}

//主函數
int main()
{
    SqList stu;
    int n;
    for (;;)
    {
        cout << "**************************宿舍管理查詢軟體**************************" << endl;
        cout << "1. 建立學生資訊" << endl;                        //InitList
        cout << "2. 增加學生資訊" << endl;                        //Addstudent    
        cout << "3. 查詢學生資訊" << endl;                        //Findstudent
        cout << "4. 顯示學生資訊" << endl;                        //Showstudent
        cout << "5. 修改學生資訊" << endl;                        //Renewstudent
        cout << "6. 刪除學生資訊" << endl;                        //Deletstudent
        cout << "0. 退出系統" << endl;
        cout << "*******************************************************************" << endl;
        cout << "請輸入你需要的操作(0~6):" << endl;
        cin >> n;
        switch (n)
        {
        case 1:
            cout << "輸入學生人數" << endl;
            cin >> stu.length;
            InitList(stu);
            cout << "###########################################" << endl;
            break;
        case 2:
            Addstudent(stu);
            cout << "###########################################" << endl;
            break;
        case 3:
            Findstudent(stu);
            cout << "###########################################" << endl;
            break;
        case 4:
            Showstudent(stu);
            cout << "###########################################" << endl;
            break;
        case 5:
            Renewstudent(stu);
            cout << "###########################################" << endl;
            break;
        case 6:
            Deletstudent(stu);
            cout << "###########################################" << endl;
            break;
        case 0:
            cout << "您已退出系統!" << endl;
            return 0;
        }

    }
    system("pause");
    return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com