学生信息管理系统
仅供参考,请不要直接用于实际用途
缺陷:对输入变量的管理存在漏洞
#include <iostream> #include <string> using namespace std; const int N = 20; // 定义普通函数 void Display() { cout << "\n************0.退 出*************" << endl; cout << "************1.录入信息*************" << endl; cout << "************2.查询信息*************" << endl; cout << "************3.浏览信息*************" << endl; } // 定义类 class Student { protected: string name; int number; char sex; int age; public: bool operator==(string p); virtual void input() = 0; virtual void output(); }; class Undergraduate : public Student { private: string speciality; public: virtual void input(); virtual void output(); }; class Pupil : public Student { private: string school; int start_year; public: virtual void input(); virtual void output(); }; class Interface { protected: public: Undergraduate dut[N]; Pupil pup[N]; int numU, numP; public: Interface(); void Browse(int c); void Run(int c); void Input(int c); bool Search(int c); }; // 成员函数定义 void Student::output() { cout << "Name " << '\t'; cout << "Number " << '\t'; cout << "Sex " << '\t'; cout << "Age " << '\t'; } bool Student::operator==(string p) { return (name == p); } void Undergraduate::input() { cout << "Enter name: "; cin >> name; cout << "Enter number: "; cin >> number; cout << "Enter sex: "; cin >> sex; cout << "Enter age: "; cin >> age; cout << "Enter speciality: "; cin >> speciality; } void Undergraduate::output() { Student::output(); cout << "Speciality " << '\n'; } void Pupil::input() { cout << "Enter name: "; cin >> name; cout << "Enter number: "; cin >> number; cout << "Enter sex: "; cin >> sex; cout << "Enter age: "; cin >> age; cout << "Enter school: "; cin >> school; cout << "Enter start year: "; cin >> start_year; } void Pupil::output() { Student::output(); cout << "School " << '\t'; cout << "Start year " << '\n'; } Interface::Interface() { numU = 0; numP = 0; } void Interface::Input(int c) { Student *p; switch (c) { case 1: if (numU == N) { cout << "The number of undergraduates is full." << endl; return; } p = &dut[numU]; p->input(); numU++; break; case 2: if (numP == N) { cout << "The number of pupils is full." << endl; return; } p = &pup[numP]; p->input(); numP++; } } void Interface::Browse(int c) { Student *p; int num; if (c == 1) num = numU; if (c == 2) num = numP; cout << "\n你要浏览的数据\n"; if (num == 0) { cout << "没有数据。" << endl; return; } switch (c) { case 1: cout << "Name" << '\t' << "Number" << '\t' << "Sex" << '\t' << "Age" << '\t' << "Speciality" << endl; for (int i = 0; i < numU; i++) { p = &dut[i]; p->output(); } break; case 2: cout << "Name" << '\t' << "Number" << '\t' << "Sex" << '\t' << "Age" << '\t' << "School" << '\t' << "Start year" << endl; for (int i = 0; i < numP; i++) { p = &pup[i]; p->output(); } break; } } bool Interface::Search(int c) { string name; Student *p; int num, i; if (c == 1) num = numU; if (c == 2) num = numP; cout << "请输入要查询的姓名:"; cin >> name; switch (c) { case 1: for (i = 0; i < num; i++) { p = &dut[i]; if (*p == name) break; } break; case 2: for (i = 0; i < num; i++) { p = &pup[i]; if (*p == name) break; } if (i == num) { cout << "没有找到该学生。" << endl; return false; } else p->output(); return true; } } void Interface::Run(int c) { int choice; do { Display(); cout << "请输入你的选择:"; cin >> choice; switch (choice) { case 1: Input(c); break; case 2: Search(c); break; case 3: Browse(c); break; case 0: break; default: cout << "Error input." << endl; break; } } while (choice); } int main() { Interface interface; cout << "大学生信息管理 >>> " << endl; interface.Run(1); cout << "小学生信息管理 >>> " << endl; interface.Run(2); return 0; }
多态性编程
#include <iostream> using namespace std; const double PI = 3.1415; class shape { public: virtual double volume() = 0; }; class cylinder : public shape { private: double r, h; public: cylinder(double r, double h) : r(r), h(h) {} double volume() { return PI * r * r * h; } }; class sphere : public shape { private: double r; public: sphere(double r) : r(r) {} double volume() { return 4.0 / 3.0 * PI * r * r * r; } }; int main() { shape *p; double r, h; cin >> r >> h; cylinder cy(r, h); sphere sp(r); p = &cy; cout << p->volume() << endl; p = &sp; cout << p->volume() << endl; return 0; }
运算符重载编程
#include<iostream> using namespace std; class Matrix { private: int row,col; int *m; public: Matrix(int r,int c):row(r),col(c) { m = new int[c*r]; for (int i=0;i<row;i++) { for (int j=0;j<col;j++) cin>>m[i*col+j]; } } Matrix() { m = new int[9]; } void disp() { for(int i=0;i<row;i++) { for(int j=0;j<col;j++) cout<<m[i*col+j]<<'\t'; cout<<endl; } } Matrix operator+(Matrix &O) { if (col!=O.col || row!=O.row) { cout<<"program terminated!"<<endl; exit(0); } Matrix temp; temp.col=col; temp.row=row; for(int i=0;i<row;i++) for(int j=0;j<col;j++) temp.m[i*col+j] = m[i*col+j] + O.m[i*col+j]; return temp; } Matrix operator=(Matrix D) { col=D.col; row=D.row; for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) m[i*col+j] = D.m[i*col+j]; } return *this; } }; int main() { int row_a,col_a,row_b,col_b; cin>>row_a>>col_a; Matrix A(row_a,col_a); cin>>row_b>>col_b; Matrix B(row_b,col_b),C; C = A + B; C.disp(); cout<<endl; A = B; A.disp(); return 0; }