用C++ STL 实现成绩管理系统
2017-01-05 22:44
267 查看
#include <iostream> #include <sstream> //字符串转换类型 #include <list> #include <string> #include <vector> #include <fstream> //登录,打印成绩 using namespace std; class Student { private: string m_strNO; //学号 string m_strName; //姓名 string m_strUniversity; //大学 int m_nTotal; //成绩 public: Student() { m_strNO = "0"; m_strName = "0"; m_strUniversity = "0"; m_nTotal = 0; } Student(string strNO , string strName, string strUniversity, int nTotal) : m_strNO(strNO), m_strName(strName), m_strUniversity(strUniversity), m_nTotal(nTotal) { } bool operator < (Student& s) { return m_strNO < s.GetNO(); } bool operator == (Student& s) { return m_strNO == s.GetNO(); } string GetNO() { return m_strNO; } string GetName() { return m_strName; } string GetUniversity() { return m_strUniversity; } int GetTotal() { return m_nTotal; } }; class Log { private: int m_type; //学生登录或者老师登录 string m_strUser; //账号 string m_strPassword; //密码 public: Log() { m_type = 0; m_strUser = "0"; m_strPassword = "0"; } Log(int type,string strUser, string strPassword) : m_type(type), m_strUser(strUser), m_strPassword(strPassword){} bool operator < (Log& s) { return m_strUser < s.GetUser(); } bool operator == (Log& s) { return m_strUser == s.GetUser(); } int GetType() { return m_type; } string GetUser() { return m_strUser; } string GetPassword() { return m_strPassword; } }; ostream& operator << (ostream& os, Student& s) { os << s.GetNO() << "\t" << s.GetName() << "\t" << s.GetUniversity() << "\t" << s.GetTotal(); return os; } ostream& operator << (ostream& os, Log& s) { os << s.GetType() << "\t" << s.GetUser() << "\t" << s.GetPassword(); return os; } typedef list<Student> LISTSTUD; typedef LISTSTUD::iterator iterator; typedef vector<Log> VECTORLOG; class StudManage { private: VECTORLOG m_LogVector; //登录容器 LISTSTUD m_stlList; //学生链表 string strNO; //学号 string strName; //姓名 string strUniversity; //大学 int nTotal; //成绩 int type; //学生登录或者老师登录 string strUser; //账号 string strPassword; //密码 public: void Log_init() { /*将文件的类型、账号和密码插入容器中*/ ifstream All_user; All_user.open("Alluser.txt"); if (!All_user) { cout << "打开文件失败" << endl; } while (All_user >> type >> strUser >> strPassword) { const Log s(type, strUser, strPassword); m_LogVector.push_back(s); } //for (VECTORLOG::iterator it = m_LogVector.begin(); it != m_LogVector.end(); it++) //{ // cout << *it << endl; //}//单元测试是否加入了登录的库 All_user.close(); } bool Log_In(int type,string strUser,string strPassword) { /*从容器中查找是否有匹配的值*/ stringstream m_ctoi; int m_1; int m_2; int m_3; int m_4; VECTORLOG::iterator it = m_LogVector.begin(); while (it != m_LogVector.end()) { Log& s = *it; m_ctoi << s.GetUser(); m_ctoi >> m_1; m_ctoi.clear(); m_ctoi << strUser; m_ctoi >> m_2; m_ctoi.clear(); m_ctoi << s.GetPassword(); m_ctoi >> m_3; m_ctoi.clear(); m_ctoi << strPassword; m_ctoi >> m_4; m_ctoi.clear(); if (type == s.GetType() && m_1 == m_2 && m_3 == m_4) { return true; } ++it; } if (it == m_LogVector.end()) { return false; } return true; } bool Add() //从 Allstudent表 中添加学生 { ifstream All_student; All_student.open("Allstudent.txt"); if (!All_student) { cout << "打开文件失败" << endl; } while (All_student >> strNO >> strName >> strUniversity >> nTotal) { const Student s(strNO, strName, strUniversity, nTotal); m_stlList.push_back(s); } All_student.close(); return true; } bool Merge(StudManage& stud) // 如果有两张表可以进行合并 { m_stlList.sort(); stud.m_stlList.sort(); //将两张表分别排序 m_stlList.merge(stud.m_stlList);//归并排序 m_stlList.unique();//去重 return true; } void Merge() //插入之后进行排序(去重) { fstream Merge_student; Merge_student.open("Allstudent.txt", ios::in | ios::out | ios::trunc); if (!Merge_student) { cout << "打开文件失败" << endl; } m_stlList.sort();//排序 m_stlList.unique();//去重 for (LISTSTUD::iterator it = m_stlList.begin(); it != m_stlList.end(); it++) { Merge_student << *it << endl; } Merge_student.close(); } void Show_All() //显示学生(教师功能) { for (LISTSTUD::iterator it = m_stlList.begin(); it != m_stlList.end(); it++) { cout << *it << endl; } } void Add_Student() //添加学生(教师功能) { fstream Add_student; Add_student.open("Allstudent.txt", ios::in | ios::out | ios::trunc); if (!Add_student) { cout << "打开文件失败!!" << endl; } cin>> strNO >> strName >> strUniversity >> nTotal; const Student s(strNO,strName,strUniversity,nTotal); m_stlList.push_back(s); for (LISTSTUD::iterator it = m_stlList.begin(); it != m_stlList.end(); it++) { Add_student << *it << endl; } Add_student.close(); cout << "插入成功!" << endl; } void Delete_Student() //删除学生(教师功能) { string Delete_student_No; /* 按学号删除 */ cin >> Delete_student_No; stringstream m_ctoi; bool bFind = false; int m_1; int m_2; fstream Delete_stu; Delete_stu.open("Allstudent.txt", ios::in | ios::out | ios::trunc); if (!Delete_stu) { cout << "打开文件失败!!" << endl; } LISTSTUD::iterator it = m_stlList.begin(); while (it != m_stlList.end()) { Student& s = *it; m_ctoi << s.GetNO(); m_ctoi >> m_1; m_ctoi.clear(); m_ctoi << Delete_student_No; m_ctoi >> m_2; m_ctoi.clear(); if (m_1 == m_2) // 字符串转换一下 { bFind = true; m_stlList.erase(it); cout << " 已经成功删除! " << endl; Delete_stu.close(); break; } ++it; if (it == m_stlList.end()) { cout << " 对不起,没有要删除的同学信息 " << endl; } } for (LISTSTUD::iterator it = m_stlList.begin(); it != m_stlList.end(); it++) { Delete_stu << *it << endl; } } void Show_Student(string strNO) //学生查询个人成绩(学生功能) { stringstream m_ctoi; bool bFind = false; int m_1; int m_2; LISTSTUD::iterator it = m_stlList.begin(); while (it != m_stlList.end()) { Student& s = *it; m_ctoi << s.GetNO(); m_ctoi >> m_1; m_ctoi.clear(); m_ctoi << strNO; m_ctoi >> m_2; m_ctoi.clear(); if (m_1 == m_2) // 字符串转换一下 { bFind = true; cout << *it << endl; break; } ++it; } if(it == m_stlList.end()) { system("cls"); cout << " 没有这个同学 " << endl; } } void Printf_Grade()//打印所有人的成绩(教师功能) { fstream printf_grade; printf_grade.open("Allstudent.txt", ios::in | ios::out | ios::trunc); if (!printf_grade) { cout << "打开文件失败!!" << endl; } for (LISTSTUD::iterator it = m_stlList.begin(); it != m_stlList.end(); it++) { printf_grade << *it << endl; } printf_grade.close(); cout << "打印成功!!" << endl; }//打印成绩 }; int main() { stringstream ctoi; stringstream itoc; int Log_in = 0; int Teacher_n = 0; int Student_n = 0; int Log_num = 0; string Student_No; string Log_Str_User; string Log_Str_Password; cout << "****************************************************" << endl; cout << "|****************学校成绩管理系统******************|" << endl; cout << "| |" << endl; cout << "| 1.老师登录 2.学生登录 其他.退出 |" << endl; cout << "| |" << endl; cout << "| |" << endl; cout << "| 请输出(1 或 2) : | "<< endl; cout << "****************************************************" << endl; /****************************创建原始表***********************************/ StudManage sm1; sm1.Add(); sm1.Merge(); sm1.Log_init(); /***************************************************************************/ while (1) { cin >> Log_in; switch (Log_in) { case 1: system("cls"); if(Log_num == 0) { for (Log_num = 1; Log_num < 4; Log_num++) { cout << "请输入第" << Log_num << "次密码(只能输入3次):"<< endl ; cin >> Log_Str_User >> Log_Str_Password; if (sm1.Log_In(Log_in, Log_Str_User, Log_Str_Password)) { break; } }//(Log_num = 1; Log_num < 4; Log_num++) if (Log_num > 3) { cout << "对不起输入超过限制,稍后重试!!" << endl; system("pause"); return 0; } }//(Log_num == 0) while (1) { system("cls"); cout << "*************************学校成绩管理系统*************************" << endl; cout << "| 欢迎教师登录 |" << endl; cout << "|****************************************************************|" << endl; cout << "|1.插入成绩 2.删除成绩 3.查询成绩 4.修改成绩 5.打印成绩 其他.退出|" << endl; cout << "| |" << endl; cout << "| |" << endl; cout << "| 请输出(1 、2 、3、 4 或 5: ) : |" << endl; cout << "******************************************************************" << endl; cin >> Teacher_n; switch (Teacher_n) { case 1: system("cls"); cout << "*****************学校成绩管理系统***************" << endl; cout << "************************************************" << endl; cout << " 请输入学生的信息(学号,姓名,学校,总分) :" << endl; sm1.Add_Student(); sm1.Merge(); Teacher_n = 0; system("pause"); break; case 2: system("cls"); cout << "******************学校成绩管理系统**************" << endl; cout << "************************************************" << endl; cout << " 请输入要删除的学生(学号) :" << endl; sm1.Delete_Student(); Teacher_n = 0; system("pause"); break; case 3: system("cls"); cout << "****************学校成绩管理系统***************" << endl; cout << "************************************************" << endl; sm1.Show_All(); Teacher_n = 0; system("pause"); break; case 4: break; case 5: system("cls"); sm1.Printf_Grade(); Teacher_n = 0; system("pause"); break; default: system("cls"); Teacher_n = 0; cout << "程序退出!!" << endl; system("pause"); return 0; }//while (1) } break; //case 1: case 2: system("cls"); if (Log_num == 0) { for (Log_num = 1; Log_num < 4; Log_num++) { cout << "请输入第" << Log_num << "次密码(只能输入3次):" << endl; cin >> Log_Str_User >> Log_Str_Password; if (sm1.Log_In(Log_in, Log_Str_User, Log_Str_Password)) { break; } }//(Log_num = 1; Log_num < 4; Log_num++) if (Log_num > 3) { cout << "对不起输入超过限制,稍后重试!!" << endl; system("pause"); return 0; } }//(Log_num == 0) while (1) { system("cls"); cout << "*************************学校成绩管理系统***********************" << endl; cout << "| |" << endl; cout << "| 欢迎学生登录 |" << endl; cout << "|**************************************************************|" << endl; cout << "| |" << endl; cout << "| 1.查询成绩 其他.退出 |" << endl; cout << "| |" << endl; cout << "| 请输出数字 1 : |" << endl; cout << "****************************************************************" << endl; cin >> Student_n; switch (Student_n) { case 1: cout << "请输入查询学号" << endl; cin >> Student_No; system("cls"); sm1.Show_Student(Student_No); Student_n = 0; system("pause"); break; default: Student_n = 0; system("pause"); return 0; } }// while (1) break; // case 2: default: cout << "程序退出!!" << endl; system("pause"); return 0; } // switch (n) }//while (1) cout << "程序退出!!" << endl; system("pause"); return 0; }
Allstudent.txt
1 1 1 1 10 hexin shan 100 2 2 2 2 3 3 3 3 5 5 5 5 6 6 6 6 7 7 77 7 8 8 8 88
Alluser.txt
1 1 1 2 2 2
相关文章推荐
- 成绩管理系统的C++实现
- c++实现简单的学生成绩管理系统
- 使用C++结合文件操作和链表实现学生成绩管理系统
- 成绩管理系统的C++实现
- C++实现成绩管理模拟系统
- c++链表实现学生成绩管理系统(简易版)
- C语言链表实现的简易学生成绩管理系统
- 成绩管理系统链表实现
- C_综合使用数组实现简单的学生成绩管理系统
- 用链表写的学生管理系统 成绩的录入与查询都已经是实现了
- 顺序表实现学生成绩管理系统
- c++ stl list实现简单的学生信息管理系统
- 用C++写的学生成绩管理系统(比较简单的没有使用链表,只是用到了类和对象)
- 简易学生成绩管理系统(c++)
- c实现学生成绩管理系统 MIS
- 简单学生成绩管理系统(Java实现)
- c++ stl list实现简单的学生信息管理系统
- 学生成绩管理系统的设计与实现:1
- STL实现图书管理系统
- 一个学生成绩管理系统的设计与实现:2