1. 程式人生 > >用順序表實現學生健康系統

用順序表實現學生健康系統

【問題描述】
實現學生健康情況管理的幾個操作功能(新建、插入、刪除、從檔案讀取、寫入檔案和查詢、螢幕輸出等功能)。健康表中學生的資訊有學號、姓名、出生日期、性別、身體狀況等。
系統的選單功能項如下:
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; }