用c++语言实现学生管理系统

来源:互联网 发布:提现接口网站 php 编辑:程序博客网 时间:2024/05/17 15:39
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <conio.h>//用getch()#include <iomanip>#include <string>#include <stdlib.h>#include <fstream>using namespace std;class student//定义一个学生类{private:char name[20];char sex[4];int number;int score[7];int total;int average;int last;public:student();//定义构造函数,函数名与类名相同void input();void output();void find();void correct();void deleted();void logging();void read();student & operator=(student & T);//重载“=”运算符friend istream & operator >>(istream & scin, student &s1);//重载“>>”运算符friend ostream & operator <<(ostream & scout, student &s2);//重载“<<”运算符};student stu[200];int n = 0;void menu()//菜单函数{cout << "\t\t\t\t\t★*******★*****************★********★" << endl;cout << "\t\t\t\t\t★          学生管理系统主菜单        ★" << endl;cout << "\t\t\t\t\t★*******★*****************★********★" << endl;cout << "\t\t\t\t\t---------★ 1. 学生成绩录入 ★---------" << endl;cout << "\t\t\t\t\t---------★ 2. 浏览学生成绩 ★---------" << endl;cout << "\t\t\t\t\t---------★ 3. 查询学生成绩 ★---------" << endl;cout << "\t\t\t\t\t---------★ 4. 修改学生成绩 ★---------" << endl;cout << "\t\t\t\t\t---------★ 5. 删除存入文件 ★---------" << endl;cout << "\t\t\t\t\t---------★ 6. 数据存入文件 ★---------" << endl;cout << "\t\t\t\t\t---------★ 7. 文件读出数据 ★---------" << endl;cout << "\t\t\t\t\t---------★ 0. 安全退出系统 ★---------" << endl;cout << "\t\t\t\t\t 请输入数字(1-7)选择您所需的功能>:";}void student::input()//类外定义函数录入学生信息{char m = 'Y';while (toupper(m) == 'Y')//toupper的功能是将小写英文字母转换为对应的大写字母,否则返回原来的值{cin >> stu[n];//设置输入判断字符n++;cout << "请问需要继续录入吗?(y/n)";cin >> m;if (toupper(m) != 'Y'){if (toupper(m) == 'N'){break;}else{cout << "输入错误,请重新输入:";cin >> m;}}}}void student::output()//类外定义函数输出学生信息{if (n != 0){cout << "--------------------------------------------------------------------\n";cout << "学号  姓名  性别  语文  英语  数学  物理  化学  生物  平时成绩  总评\n";cout << "--------------------------------------------------------------------\n";for (int t = 0; t<n; t++){cout << stu[t];//重载后的输出运算,按照定义可以输出对象的各个成员,同时保留输出的原有功能}}_getch();//从控制台读取一个字符,但不显示在屏幕上}void student::find()//类外定义查询函数{bool count = 0;char name1[20];student temp;cout << "请输入你要查找的学生姓名:";cin >> name1;for (int j = 0; j<n; j++){if (strcmp(stu[j].name, name1) == 0)//字符串比较{temp = stu[j];count = 1;}}if (count == 0)cout << "对不起没有你要查找的学生" << endl;else{cout << "--------------------------------------------------------------------\n";cout << "学号  姓名  性别  语文  英语  数学  物理  化学  生物  平时成绩  总评\n";cout << "--------------------------------------------------------------------\n";cout << setw(5) << temp.number << setw(6) << temp.name << setw(6) << temp.sex << setw(6) << temp.score[0]<< setw(6) << temp.score[1] << setw(6) << temp.score[2] << setw(6) << temp.score[3] << setw(6) << temp.score[4]<< setw(6) << temp.score[5] << setw(6) << temp.score[6] << setw(9) << temp.last << endl;}_getch();}void student::correct()//类外定义修改函数{int count1 = 0;int t;char n2[50];cout << '\n';cout << "请输入你要修改的学生姓名:";cin >> n2;for (int j = 0; j<n; j++){if (strcmp(stu[j].name, n2) == 0)//字符串比较函数,对比输入的字符串是否和已有的数据相同{t = j;count1 = 1;}}if (count1 = 0)cout << "对不起,没有你要修改的学生";else{cout << "请输入修改后的学生学号:";cin >> stu[t].number;cout << "请输入修改后的学生姓名:";cin >> stu[t].name;cout << "请输入修改后的学生性别:";cin >> stu[t].sex;cout << "请输入修改后的语文成绩:";cin >> stu[t].score[0];cout << "请输入修改后的数学成绩:";cin >> stu[t].score[1];cout << "请输入修改后的英语成绩:";cin >> stu[t].score[2];cout << "请输入修改后的物理成绩:";cin >> stu[t].score[3];cout << "请输入修改后的化学成绩:";cin >> stu[t].score[4];cout << "请输入修改后的生物成绩:";cin >> stu[t].score[5];cout << "请输入修改后的平时成绩:";cin >> stu[t].score[6];stu[t].total = stu[t].score[0] + stu[t].score[1] + stu[t].score[2] + stu[t].score[3] + stu[t].score[4] + stu[t].score[5];stu[t].average = stu[t].total / 6;stu[t].last = (int)(stu[t].score[6] * 0.3 + stu[t].average * 0.7);}_getch();}void student::deleted()//类外定义删除函数{char n3[20];bool count2 = 0;char c;do{cout << '\n';cout << "请输入你要删除的学生姓名:";//根据姓名删除学生cin >> n3;for (int i = 0; i<n; i++){count2 = 1;n--;do{stu[i] = stu[i + 1];i++;} while (i <= n);}if (count2 == 0)cout << "你要删除的学生不存在";cout << "需要继续删除吗?(y/n)" << endl;cin >> c;if (toupper(c) != 'Y'&&toupper(c) != 'N'){cout << "输入错误,只能输入Y或N";cin >> c;}} while (toupper(c) == 'Y');_getch();}void student::logging()//类外定义读取函数{char filename1[20];cout << "请输入文件名:";cin >> filename1;ofstream fout(filename1,ios::app);//写入数据if (!fout)cout << "文件不能打开!";else{for (int i = 0; i<n; i++)fout << ' ' << stu[i].number << '  ' << stu[i].name << ' ' << stu[i].sex<< ' ' << stu[i].score[0] << ' ' << stu[i].score[2] << ' ' << stu[i].score[3]<< ' ' << stu[i].score[4] << ' ' << stu[i].score[5] << ' ' << stu[i].score[6]<< ' ' << stu[i].total << ' ' << stu[i].average << ' ' << stu[i].last;cout << "保存成功!" << endl;}fout.close();_getch();}void student::read(){char filename2[20];cout << "请输入要读取的文件:";cin >> filename2;ifstream fin(filename2, ios::in);//fin是从文件里读数据if (!fin)cout << "文件不能打开" << endl;else{for (int i = 0;i<n; i++){if (fin.eof())break;//错误文件fin >> stu[i].number >> stu[i].name >> stu[i].sex>> stu[i].score[0] >> stu[i].score[2] >> stu[i].score[3]>> stu[i].score[4] >> stu[i].score[5] >> stu[i].score[6]>> stu[i].total >> stu[i].average >> stu[i].last;}cout << "文件已读取" << endl;}fin.close();//关闭文件_getch();}student & student::operator=(student &T)//重载=预算定义{strcpy(name, T.name);strcpy(sex, T.sex);number = T.number;for (int i = 0; i<7; i++)score[i] = T.score[i];total = T.total;average = T.average;last = T.last;return(*this);}ostream & operator << (ostream & scout, student &s2)//重载流插入运算符<<运算定义{cout << setw(5) << s2.number << setw(6) << s2.name << setw(6) << setw(6) << s2.sex << setw(6) << s2.score[0]<< setw(6) << s2.score[1] << setw(6) << s2.score[2] << setw(6) << s2.score[3] << setw(6) << s2.score[4]<< setw(6) << s2.score[5] << setw(7) << s2.score[6] << setw(9) << s2.last << '\n';return scout;}istream & operator >>(istream & scin, student &s1)//重载流插入运算符>>运算定义{cout << '\n';cout << "学号:";scin >> s1.number;cout << "姓名:";scin >> s1.name;cout << "性别:";scin >> s1.sex;cout << "语文:";scin >> s1.score[0];cout << "英语:";scin >> s1.score[1];cout << "数学:";scin >> s1.score[2];cout << "物理:";scin >> s1.score[3];cout << "化学:";scin >> s1.score[4];cout << "生物:";scin >> s1.score[5];cout << "平时成绩:";scin >> s1.score[6];s1.total = s1.score[0] + s1.score[1] + s1.score[2] + s1.score[3] + s1.score[4] + s1.score[5];s1.average = s1.total / 6;s1.last = (int)(s1.score[6] * 0.3 + s1.average*0.7);return scin;}student::student()//构造函数完成初始化{strcpy(name, "NULL");strcpy(sex, "NULL");number = 0;for (int i = 0; i<7; i++)score[i] = 0;total = 0;average = 0;last = 0;}int main(){int choice;student s;do{menu();cin >> choice;switch (choice){case 1:s.input(); break;case 2:s.output(); break;case 3:s.find(); break;case 4:s.correct(); break;case 5:s.deleted(); break;case 6:s.logging(); break;case 7:s.read(); break;default:break;}} while (choice != 0);}

原创粉丝点击