用顺序表实现学生健康系统

【问题描述】
实现学生健康情况管理的几个操作功能(新建、插入、删除、从文件读取、写入文件和查询、屏幕输出等功能)。健康表中学生的信息有学号、姓名、出生日期、性别、身体状况等。
系统的菜单功能项如下:
1——新建学生健康表
2——向学生健康表插入学生信息
3——在健康表删除学生信息
4——从文件中读取健康表信息
5——向文件写入学生健康表信息
6——在健康表中查询学生信息(按学生学号来进行查找)
7——在屏幕中输出全部学生信息
8—–退出

#include <iostream>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int defaultSize = 100;
int length;
//学生结构体
struct student {
    string num;
    string name;
    string sex;
    string birth;
    string exam;
};
template<class T>
class SeqList //顺序表类
{
protected:
    T *data;
    int maxSize;
    int last;
public:
    //构造函数
    SeqList(int sz) {
        if (sz>0) {
            maxSize = defaultSize;
            last = sz - 1;
            data = new T[maxSize];
            if (data == NULL) {
                cerr << "存储分配错误!" << endl;
                exit(1);
            }
        }
    }
    void copy(SeqList<T>&L);
    ~SeqList() { delete[] data; };
    bool Insert(int i, T &x);
    bool Remove(int i);
    void output();
    int Search(string x);
    void read();
    void write();
};
//复制函数
template<class T>
void SeqList<T>::copy(SeqList<T>&L){

    last = L.last-length+1;
    T value;
    data = new T[maxSize];
    for (int i = 0; i <= last; i++){
         data[i]=L.data[i];
    }
}

template <class T>
bool SeqList<T>::Insert(int i, T&x) {
    if (last == maxSize - 1) return false;
    if (i<0 || i>last + 1) return false;
    for (int j = last; j >= i; j--){
        data[j + 1] = data[j];

    }
    data[i] = x;
    last++;
    return true;
}
//删除
template <class T>
bool SeqList<T>::Remove(int i) {
    if (last == maxSize - 1) return false;
    if (i<0 || i>last + 1) return false;
    for (int j = i; j <= last; j++)
        data[j - 1] = data[j];
    last--;
    return true;
}

//输出
template <class T>
void SeqList<T>::output(){
    cout << "the last:" << last << endl;
    for (int i = 0; i < last; i++)
        cout << i + 1 << ":" << "学号: " << data[i].num << " " << "姓名:" << data[i].name << " " << "性别:" << data[i].sex << " "
        << "生日:" << data[i].birth << " " << "健康状况:" << data[i].exam << endl;
}
//查找
template <class T>
int SeqList<T>::Search(string x){
    for (int i = 0; i <= last; i++)
        if (data[i].num== x)
            return i+1;
    return 0;
}
//读文件,首先确保自己有文件
template<class T>
void SeqList<T>::read(){
    int i = 0;
    ifstream ifile("data.txt");
    while (!ifile.eof())
    {
        ifile >> data[i].num >> data[i].name >> data[i].sex >>data[i].birth>> data[i].exam;
        cout << i + 1 << ":" << "学号: " << data[i].num << " " << "姓名:" << data[i].name << " " << "性别:" << data[i].sex << " "
            << "生日:" << data[i].birth << " " <<"健康状况:"<< data[i].exam << endl;
        i++;
    }
    ifile.close();
}
//写入文件
template<class T>
void SeqList<T>::write(){
    ofstream ofile("data.txt");
    for (int i = 0; i < last; i++)
    {
        if (i == last - 1)
        {
            ofile << data[i].num << " " << data[i].name << " " << data[i].sex << " " << data[i].birth << " " << data[i].exam;
            break;
        }
        ofile << data[i].num << " " << data[i].name << " " << data[i].sex << " " << data[i].birth << " " << data[i].exam<<" ";
    }
    cout << "写入成功!\n";
    ofile.close();
}
//菜单函数
void set() {
    cout << "1.新建学生健康表\n";
    cout << "2.插入学生信息\n";
    cout << "3.删除学生信息\n";
    cout << "4.从文件中读取健康表信息\n";
    cout << "5.向文件写入学生健康表信息\n";
    cout << "6.在健康表中查询学生信息(按学生学号来进行查找)" << endl;
    cout << "7.在屏幕中输出全部学生信息" << endl;
    cout << "8.退出" << endl;
    cout << "输入数字:\n";
}
int main(){
    int n;
    int i;
    SeqList<student>stu(20);
    string x;
    student s = { "110","Li","f","1998.12","良好" };
    set();
    while (cin >> n&&n<8) {
        if (n == 1){
            cout << "请输入表的长度:\n"; cin >> length; 
            SeqList <student> stu1(length); 
            student stu2[100];
            cout << "输入表的信息:\n";
            for (int i = 0; i < length; i++){
                cout << "学号:"; cin >> stu2[i].num;
                cout << "姓名:"; cin >> stu2[i].name;
                cout << "性别:"; cin >> stu2[i].sex;
                cout << "生日:"; cin >> stu2[i].birth;
                cout << "健康状况:"; cin >> stu2[i].exam;
                stu1.Insert(i, stu2[i]);
            }
            stu.copy(stu1);

        }
        switch (n){
        case 2: cout << "请输入插入的位置:"; cin >> i; cout << "输入插入的信息:\n"; 
            cout << "学号:"; cin >> s.num;
            cout << "姓名:"; cin >> s.name;
            cout << "性别:"; cin >> s.sex;
            cout << "生日:"; cin >> s.birth;
            cout << "健康状况:"; cin >> s.exam; 
            stu.Insert(i - 1, s); break;
        case 3:cout << "请输入删除的位置:"; cin >> i; stu.Remove(i); break;
        case 4:stu.read(); break;
        case 5:stu.write(); break;
        case 6: cout << "请输入学生学号:"; cin >> x; i = stu.Search(x); cout << i; break;//返回学生所在顺序表的位置
        case 7:stu.output(); break;
        default:
            break;
        }
        system("pause");
        system("cls");
        set();
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值