数据结构之链表的实现-------C++课程设计-----学生选课管理系统
2014-01-21 15:10
1221 查看
题目简介:
教师开设选修课程,每门选修课程有课程编号、课程名称、总学时、学分、授课教师信息;学生信息包括学号、姓名、专业、班级等信息,每位学生只能选修一门课程。试设计选修课程系统,使之能提供以下功能:
1、课程信息录入(课程信息用文件保存)
2、课程信息浏览、删除功能
3、学生信息录入功能(学生信息用文件保存)
4、学生信息浏览,删除功能
5、学生选修课程:按教师选择或学分选择
代码实现一:面向对象:
代码实现二:面向过程:
教师开设选修课程,每门选修课程有课程编号、课程名称、总学时、学分、授课教师信息;学生信息包括学号、姓名、专业、班级等信息,每位学生只能选修一门课程。试设计选修课程系统,使之能提供以下功能:
1、课程信息录入(课程信息用文件保存)
2、课程信息浏览、删除功能
3、学生信息录入功能(学生信息用文件保存)
4、学生信息浏览,删除功能
5、学生选修课程:按教师选择或学分选择
代码实现一:面向对象:
// file: FileDir.h #include <string> using namespace std; //////////////// class FileDir { public: FileDir(string &strFilePathName); ~FileDir(); bool FileExist(); string GetCreatTime(); char GetFileDrive(); long GetFileSize(); string GetModifiedTime(); bool IsDir(); public: string f_strFilePathName; }; // file: FileDir.cpp #include <string> #include <ctime> using namespace std; #include <sys\stat.h> #include "FileDir.h" ////////////////// FileDir::FileDir(string & strFilePathName) { f_strFilePathName = strFilePathName; }; FileDir::~FileDir() { }; bool FileDir::FileExist() { struct _stat buf; int result; result = _stat(f_strFilePathName.c_str(),&buf); return (result == 0); }; string FileDir::GetCreatTime() { struct _stat buf; int result; result = _stat(f_strFilePathName.c_str(),&buf); if(result == 0) { return string(ctime(&buf.st_ctime)); } return "0"; }; char FileDir::GetFileDrive() { struct _stat buf; int result ; result = _stat(f_strFilePathName.c_str() , &buf); if(result == 0) { return (buf.st_dev + 'A'); } return '0'; }; long FileDir::GetFileSize() { struct _stat buf; int result ; result = _stat(f_strFilePathName.c_str(),&buf); if(result == 0) { return (buf.st_size); } return 0; }; string FileDir::GetModifiedTime() { struct _stat buf; int result; result = _stat(f_strFilePathName.c_str(), &buf); if ( result == 0 ) { return ( ctime(&buf.st_atime) ); // st_atime 文件上一次被访问的时间 } return "0"; }; bool FileDir::IsDir() { struct _stat buf; ///////////////// if ( _stat(f_strFilePathName.c_str(), &buf) != 0 ) { return false; } return ( (buf.st_mode & S_IFDIR) !=0 ); // st_mode 文件权限和文件类型信息 }; // file: Students.h #include <string> using namespace std; class Students { public: Students(); void Display(int num = 0); // 输出 Students void SetnCourNum(int ncournum); void SetName(char chname[15]); void SetProfession(char chprofession[15]); void SetClass(char chclass[15]); void SetNum(int num); public: int nNum; // 学号 char chName[15]; // 姓名 char chProfession[15]; // 专业 char chClass[15]; // 班级 int nCourNum; // 已选课程编号 Students* pNext; // 指向下一个Students结点 }; // file: Students.cpp #include <iostream> #include <string> #include <iomanip> using namespace std; #include "Students.h" Students::Students() { strcpy(chClass,""); strcpy(chName,""); strcpy(chProfession,""); nCourNum = 0; nNum = 0; pNext = NULL; }; void Students::Display(int num) { if(num == 1) { cout << setw(15) << nNum; cout << setw(15) << chName ; cout << setw(15)<< chProfession ; cout << setw(15) << chClass ; cout << setw(15) << nCourNum << endl; } if(num == 0) { cout << setw(15) << nNum ; cout << setw(15) << chName ; cout << setw(15)<< chProfession ; cout << setw(15) << chClass ; cout << setw(15) << "未选课" <<endl; } }; void Students::SetnCourNum(int ncournum) { nCourNum = ncournum; } void Students::SetClass(char chclass[15]) { strcpy(chClass ,chclass); } void Students::SetName(char chname[15]) { strcpy(chName,chname); } void Students::SetProfession(char chprofession[15]) { strcpy(chProfession,chprofession); } void Students::SetNum(int num) { nNum = num; } // file: Course.h #include <string> using namespace std; class Course { public: Course(); ~Course(); void Display(int num = 0); // 输出 Course void SetName(char chname[15]); void SetHour(int nhour); void SetCredit(int ncredit); void SetTeacher(char chteacher[15]); void SetNum(int num); public: int nNum; // 编号 char chName[15]; // 课程名 int nHour; // 学时 int nCredit; // 学分 char chTeacher[15]; // 教师 Course* pNext; // 指向下一个 }; // file: Course.cpp #include <iostream> #include <string> #include <iomanip> using namespace std; #include "Course.h" ////////////////// Course::Course() { nNum = 0; strcpy(chName , ""); nHour = 0; nCredit = 0; strcpy(chTeacher,""); pNext = NULL; }; Course::~Course() { }; void Course::Display(int num) { if(num == 0) { cout << setw(15) << nNum ; cout << setw(15) << chName ; cout << setw(15) << nHour ; cout << setw(15) << nCredit ; cout << setw(15) << chTeacher << endl; } else { cout <<"课程编号:"<< nNum << endl; cout << "课程名称:" << chName << endl; cout << "课程学时:"<< nHour << endl; cout << "课程学分:"<< nCredit << endl; cout << "授课教师:" << chTeacher << endl; } }; void Course::SetCredit(int ncredit) { nCredit = ncredit; } void Course::SetHour(int nhour) { nHour = nhour; } void Course::SetName(char chname[15]) { strcpy(chName,chname); } void Course::SetTeacher(char chteacher[15]) { strcpy(chTeacher,chteacher); } void Course::SetNum(int num) { nNum = num; } // file: StuCourList.h #include <string> using namespace std; #include "Course.h" #include "Students.h" class StuCourList { public: StuCourList(string strCourPathName = "",string strStuPathName = ""); ~StuCourList(); // 析构 void SetStuPathName(string strStuPathName); // 设置文件路径 void SetCourPathName(string strCourPathName); void DisplayStu(); // 输出 void DisplayCour(); bool InputStu(int num = 0); // 录入 bool InputCour(int num = 0); bool FromFileStu(); // 从文件读取 bool FromFileCour(); bool ToFileStu(int num = 0); // 保存到文件 bool ToFileCour(int num = 0); void ChoiceByNum(int num); // 按编号选择 void ChoiceByTeach(char chTeach[15]); // 按教师选择 void DeleteStu(int num); // 删除 void DeleteCour(int num); void ModifyStu(int num); // 修改 void ModifyCour(int num); private: void FreeCour(); // 释放内存 void FreeStu(); private: Course* pCourHead; //course 链表头 string m_strCourPathName; //course 路径 Students* pStuHead; // students 链表头 string m_strStuPathName; // students 路径 }; // file: StuCourList.cpp #include <string> #include <iostream> #include <iomanip> #include <fstream> using namespace std; #include "StuCourList.h" #include "Course.h" #include "Students.h" StuCourList::StuCourList(string strCourPathName,string strStuPathName) { pCourHead = NULL; pStuHead = NULL; m_strCourPathName = strCourPathName; m_strStuPathName = strStuPathName; }; void StuCourList::SetCourPathName(string strCourPathName) { m_strCourPathName = strCourPathName; }; void StuCourList::SetStuPathName(string strStuPathName) { m_strStuPathName = strStuPathName; }; StuCourList::~StuCourList() { FreeCour(); FreeStu(); }; bool StuCourList::InputCour(int num) { Course *pCourNew ; Course *pCourPrev ; FreeCour(); cout << endl << "请依次输入每个课程信息,课程编号为 -1 结束 !" << endl; do { pCourNew = new Course; cout <<endl<< "课程编号:" ; cin >> pCourNew->nNum; if(pCourNew->nNum == -1) { delete pCourNew; break; } pCourNew->pNext = NULL; cout << "课程名称:" ; cin >> pCourNew->chName; cout << "课程学时:"; cin >> pCourNew->nHour; cout << "课程学分:"; cin >> pCourNew->nCredit; cout << "授课教师:"; cin >> pCourNew->chTeacher; if(pCourHead == NULL) { pCourHead = pCourNew; } else { pCourPrev = pCourHead; while(pCourPrev->pNext != NULL) pCourPrev = pCourPrev->pNext; pCourPrev->pNext = pCourNew; } }while(true); ToFileCour(num); return true; }; bool StuCourList::InputStu(int num) { Students *pStuNew ; Students *pStuPrev ; FreeStu(); cout <<endl<< "请依次输入每个学生信息,学生学号为 -1 结束 !" << endl; do { pStuNew = new Students; cout <<endl<< "学生学号:"; cin >> pStuNew->nNum; if(pStuNew->nNum == -1) { delete pStuNew ; break; } pStuNew->pNext = NULL; pStuNew->nCourNum = 0; cout << "学生姓名:"; cin >> pStuNew->chName; cout << "学生专业:"; cin >> pStuNew->chProfession; cout << "学生班级:"; cin >> pStuNew->chClass; if(pStuHead == NULL) { pStuHead = pStuNew; } else { pStuPrev = pStuHead; while(pStuPrev->pNext != NULL) pStuPrev = pStuPrev->pNext; pStuPrev->pNext = pStuNew; } }while(true); ToFileStu(num); return true; }; bool StuCourList::FromFileCour() { Course *pCourNew; ifstream fileIn; FreeCour(); fileIn.open(m_strCourPathName.c_str(),ios::in|ios::binary); if(fileIn.fail()) { cout <<endl<<"Can not open file:" << m_strCourPathName << endl; return false; } while(!fileIn.eof()) { pCourNew = new Course; fileIn.read((char *)pCourNew,sizeof(*pCourNew)); int ng = fileIn.gcount(); if(ng == 0) { delete pCourNew; break; } pCourNew->pNext = NULL; if(pCourHead == NULL) { pCourHead = pCourNew; } else { pCourNew->pNext = pCourHead; pCourHead = pCourNew; } } if(pCourHead == NULL) { cout <<endl<< "提示:" << m_strCourPathName<< "为空!" << endl; } fileIn.close(); return true; }; bool StuCourList::FromFileStu() { Students *pStuNew ; ifstream fileIn; FreeStu(); fileIn.open(m_strStuPathName.c_str(),ios::in|ios::binary); if(fileIn.fail()) { cout <<endl<< "Can not open file:" <<m_strStuPathName << endl; return false; } while(!fileIn.eof()) { pStuNew = new Students; pStuNew->nCourNum = 0; fileIn.read((char*)pStuNew,sizeof(*pStuNew)); int ng = fileIn.gcount(); if(ng == 0) { delete pStuNew; break; } pStuNew->pNext = NULL; if(pStuHead == NULL) { pStuHead = pStuNew; } else { pStuNew->pNext = pStuHead; pStuHead = pStuNew; } } if(pStuHead ==NULL) { cout <<endl<< "提示:"<<m_strStuPathName << "为空!"<< endl; } fileIn.close(); return true; }; bool StuCourList::ToFileCour(int num) { Course *pCourCur; ofstream fileOut; if(pCourHead == NULL) { fileOut.open(m_strCourPathName.c_str(),ios::out|ios::binary); return true; } if(num == 1) { fileOut.open(m_strCourPathName.c_str(),ios::out|ios::binary); } else { fileOut.open(m_strCourPathName.c_str(),ios::out|ios::app|ios::binary); } if(fileOut.fail()) { cout <<endl<< "Can not open file:" << m_strCourPathName<<endl; return false; } pCourCur = pCourHead; while(pCourCur != NULL) { int nSize = sizeof(*pCourCur); fileOut.write((char*)pCourCur ,sizeof(*pCourCur)); pCourCur = pCourCur->pNext; } fileOut.close(); FreeCour(); return true; }; bool StuCourList::ToFileStu(int num) { Students *pStuCur ; ofstream fileOut; if(pStuHead == NULL) { fileOut.open(m_strStuPathName.c_str(),ios::out|ios::binary); return true; } if(num == 1) { fileOut.open(m_strStuPathName.c_str(),ios::out|ios::binary); } else { fileOut.open(m_strStuPathName.c_str(),ios::out|ios::app|ios::binary); } if(fileOut.fail()) { cout<<endl <<"Can not open file:" << m_strStuPathName << endl; return false; } pStuCur = pStuHead; while(pStuCur != NULL) { int nSize = sizeof(*pStuCur); fileOut.write((char*)pStuCur,sizeof(*pStuCur)); pStuCur = pStuCur->pNext; } fileOut.close(); FreeStu(); return true; }; void StuCourList::DisplayCour() { Course *pCourCur; if(pCourHead == NULL) { return ; } pCourCur = pCourHead; cout <<endl <<setw(15)<< "课程编号:" <<setw(15)<<"课程名称:" <<setw(15)<<"课程学时:" <<setw(15)<<"课程学分:" <<setw(15)<<"授课教师:"<<endl; do { pCourCur->Display(); pCourCur = pCourCur->pNext; }while(pCourCur != NULL); }; void StuCourList::DisplayStu() { Students *pStuCur; if(pStuHead == NULL) { return ; } pStuCur = pStuHead; cout<<endl << setw(15)<<"学生学号:" <<setw(15)<<"学生姓名:" <<setw(15)<<"学生专业:" <<setw(15)<<"学生班级:" <<setw(15)<<"课程编号:"<<endl; do { if(pStuCur->nCourNum == 0) { pStuCur->Display(0); } else { pStuCur->Display(1); } pStuCur = pStuCur->pNext; }while(pStuCur != NULL); }; void StuCourList::ChoiceByNum(int num) // int num 是输入的课程学分 { int nNum1 = 0; // 判断该课程学分是否录入 int nNum2; // 学生学号 int nNum3 = 0; // 判断该学生是否录入 int nNum4; // 课程编号 Course *pCourCur; Students *pStuCur; if(pCourHead == NULL) return; if(pStuHead == NULL) return ; pCourCur = pCourHead; while(pCourCur != NULL) { if(pCourCur->nCredit == num) { pCourCur->Display(1); nNum1++; } pCourCur = pCourCur->pNext; } if(nNum1 == 0) { cout <<endl<< "编号为"<<num<<"的课程未被录入 !" << endl; return ; } cout <<endl<<"输入课程的编号:" ; cin>>nNum4 ; cout <<endl<<"输入学生的学号:" ; cin >> nNum2; pStuCur = pStuHead; while(pStuCur != NULL) { if(pStuCur->nNum == nNum2) { pStuCur->SetnCourNum(nNum4); nNum3++; break; } pStuCur = pStuCur->pNext; } if(nNum3 == 0) { cout <<endl<<"学号为"<<nNum2<<"的学生未被录入 !"<<endl; return ; } else { cout <<endl<< "选课成功 !"<<endl <<endl; } ToFileStu(1); }; void StuCourList::ChoiceByTeach(char chTeach[15]) { int nNum1 = 0; // 判断该课程是否录入 int nNum2 ; // 学生学号 int nNum3 = 0; // 判断该学号的学生是否录入 int nNum4 ; // 课程编号 Course *pCourCur; Students *pStuCur; if(pCourHead == NULL) return ; if(pStuHead == NULL) return ; pCourCur = pCourHead; while(pCourCur != NULL) { if(strcmp( pCourCur->chTeacher,chTeach) == 0) { pCourCur->Display(1); nNum1++; } pCourCur = pCourCur->pNext; } if(nNum1 == 0) { cout<<endl<<"授课教师为"<<chTeach<<"的课程未被录入 !"<<endl; return ; } cout <<endl<< "输入课程的编号:" ; cin >> nNum4; cout <<endl<< "输入学生的编号:"; cin >> nNum2; pStuCur = pStuHead; while(pStuCur != NULL) { if(pStuCur->nNum == nNum2) { pStuCur->SetnCourNum(nNum4); nNum3++; } pStuCur = pStuCur->pNext; } if(nNum3 == 0) { cout <<endl<< "学生学号为"<<nNum2<<"的学生未被录入 !"<<endl; return ; } else { cout << endl<< "选课成功 !"<< endl<<endl; } ToFileStu(1); }; void StuCourList::DeleteCour(int num) { int nDelete = 0; Course *pCourCur, *pCourPrev; if(pCourHead == NULL) return ; if(pCourHead->pNext == NULL) { if(pCourHead->nNum == num) { delete pCourHead; pCourHead = NULL; ToFileCour(1); cout <<endl<< "删除成功!"<<endl; return ; } else { cout <<endl<< "编号为"<<num<<"的课程未被录入!" <<endl; FreeCour(); return ; } } pCourCur = pCourHead; if(pCourHead ->nNum == num) { pCourHead = pCourHead->pNext; delete pCourCur; ToFileCour(1); cout <<endl<< "删除成功!" << endl; return ; } pCourPrev = pCourHead; pCourCur = pCourHead->pNext; while(pCourCur != NULL) { if(pCourCur->nNum == num) { pCourPrev->pNext = pCourCur->pNext; delete pCourCur; nDelete++; break; } pCourPrev = pCourCur; pCourCur = pCourCur->pNext; } if(nDelete == 0) { cout <<endl<< "编号为"<<num<<"的课程未被录入 !"<< endl; } else { cout <<endl<< "删除成功 !" << endl; } ToFileCour(1); }; void StuCourList::DeleteStu(int num) { int nDe = 0; Students *pStuCur, *pStuPrev, *pStuTemp; if(pStuHead == NULL) return ; if(pStuHead->pNext == NULL) { if(pStuHead->nNum == num) { delete pStuHead; pStuHead = NULL; cout <<endl<< "删除成功!" << endl; ToFileStu(1); return; } else { cout <<endl<< "学号为" <<num<<"的学生未被录入!"<< endl; FreeStu(); return; } } pStuCur = pStuHead; if(pStuHead ->nNum == num) { pStuHead = pStuHead->pNext; delete pStuCur; cout<<endl << "删除成功!" << endl; ToFileStu(1); return ; } pStuCur = pStuHead; pStuPrev = pStuHead->pNext; while(pStuCur != NULL) { if(pStuCur->nNum == num) { pStuPrev->pNext = pStuCur->pNext; delete pStuCur; nDe++; break; } pStuPrev = pStuCur; pStuCur = pStuCur->pNext; } if(nDe == 0) { cout <<endl<< "学号为" <<num << "的学生未被录入 !" << endl; } else { cout <<endl<< "删除成功 !" << endl; } ToFileStu(1); }; void StuCourList::ModifyCour(int num) { int nModify = 0; Course *pCourCur; Course *pCourNew; pCourNew = new Course; pCourNew->pNext = NULL; if(pCourHead == NULL) return ; cout << endl; cout << "课程名称:"; cin >> pCourNew->chName; cout << "课程学时:"; cin >> pCourNew->nHour; cout << "课程学分:"; cin >> pCourNew->nCredit; cout << "授课老师:"; cin >> pCourNew->chTeacher; pCourCur = pCourHead; while(pCourCur != NULL) { if(pCourCur->nNum == num) { pCourCur->SetName(pCourNew->chName); pCourCur->SetHour(pCourNew->nHour); pCourCur->SetCredit(pCourNew->nCredit); pCourCur->SetTeacher(pCourNew->chTeacher); nModify++; delete pCourNew; break; } pCourCur = pCourCur->pNext; } if(nModify == 0) { cout <<endl<< "编号为" <<num<< "的课程未被录入 !" << endl; } else { cout <<endl<< "修改成功 !" << endl; } ToFileCour(1); }; void StuCourList::ModifyStu(int num) { int nModify = 0; Students *pStuCur; Students *pStuNew; pStuNew = new Students; pStuNew->pNext = NULL; if(pStuHead == NULL) return ; cout << endl; cout<<"学生姓名:";cin>>pStuNew->chName; cout<<"学生专业:";cin>>pStuNew->chProfession; cout<<"学生班级:";cin>>pStuNew->chClass; pStuCur = pStuHead; while(pStuCur != NULL) { if(pStuCur->nNum == num) { pStuCur->SetClass(pStuNew->chClass); pStuCur->SetName(pStuNew->chName); pStuCur->SetProfession(pStuNew->chProfession); nModify++; delete pStuNew; break; } pStuCur = pStuCur->pNext; } if(nModify == 0) { cout <<endl<< "学号为"<<num << "的学生未被录入 !" << endl; } else { cout <<endl<< "修改成功 !" << endl; } ToFileStu(1); }; //-------------------私有函数-------------------// void StuCourList::FreeCour() { Course *pCourCur; if(pCourHead != NULL) { do { pCourCur = pCourHead; pCourHead = pCourHead->pNext; delete pCourCur; }while(pCourHead != NULL); } pCourHead = NULL; }; void StuCourList::FreeStu() { Students *pStuCur; if(pStuHead != NULL) { do { pStuCur = pStuHead; pStuHead = pStuHead->pNext; delete pStuCur; }while(pStuHead != NULL); } pStuHead = NULL; }; // file: CppRMS.h #include <string> using namespace std; class CppRMS { public: CppRMS(string strCourFileDir = "",string strCourFileName = "", string strStuFileDir = "" , string strStuFileName = ""); string GetCourPathName() {return c_strCourFilePathName;}; string GetStuPathName() {return c_strStuFilePathName;}; void SetCourFileName(string strCourFileName); void SetCourFileDir(string strCourFileDir); void SetStuFileName(string strStuFileName); void SetStuFileDir(string strStuFileDir); int MenuCour(); int MenuStu(); int MenuMain(); int MenuChoice(); private: void CreatCourFilePathName(); void CreatStuFilePathName(); private: // string c_strCourFileName; // 课程文件名 string c_strCourFileDir; // 课程文件目录 string c_strCourFilePathName; // 课程文件路径 // string c_strStuFileName; // 学生文件名 string c_strStuFileDir; // 学生文件目录 string c_strStuFilePathName; // 学生文件路径 }; // file: CppRMS.cpp #include <iostream> #include <string> using namespace std; #include "CppRMS.h" ////////////////// CppRMS::CppRMS(string strCourFileDir,string strCourFileName, string strStuFileDir ,string strStuFileName) { c_strCourFileDir = strCourFileDir; c_strCourFileName = strCourFileName; CreatCourFilePathName(); ///////////// c_strStuFileDir = strStuFileDir; c_strStuFileName = strStuFileName; CreatStuFilePathName(); }; int CppRMS::MenuCour() { int nChoice ; do { cout << endl; cout << "☆☆☆ 课程信息管理 ☆☆☆" <<endl<< endl; cout << " 1 课程信息录入" << endl; cout << " 2 课程信息浏览" << endl; cout << " 3 课程信息修改" << endl; cout << " 4 课程信息删除" << endl; cout << " 0 退出" << endl<< endl; cout << "请选择: " ; cin >> nChoice ; }while(nChoice < 0 || nChoice > 4); return nChoice ; } int CppRMS::MenuStu() { int nChoice ; do { cout << endl; cout << "☆☆☆ 学生信息管理 ☆☆☆" <<endl<< endl; cout << " 1 学生信息录入" << endl; cout << " 2 学生信息浏览" << endl; cout << " 3 学生信息修改" << endl; cout << " 4 学生信息删除" << endl; cout << " 0 退出" << endl<<endl; cout << "请选择: " ; cin >> nChoice ; }while(nChoice < 0 || nChoice > 4); return nChoice ; } int CppRMS::MenuMain() { int nChoice ; do { cout << endl ; cout << "☆☆☆ 学生选课管理系统 ☆☆☆" <<endl<<endl; cout << " 1 课程信息管理" << endl; cout << " 2 学生信息管理" << endl; cout << " 3 学生选课" << endl; cout << " 0 退出 " << endl << endl; cout << " 请选择:" ; cin >> nChoice ; }while(nChoice <0 || nChoice > 3); return nChoice ; }; int CppRMS::MenuChoice() { int nChoice; do { cout << endl << "☆☆☆ 学生选课 ☆☆☆" << endl << endl; cout << " 1 按教师选择 " << endl; cout << " 2 按学分选择 " << endl; cout << " 0 退出 " << endl << endl; cout << " 请选择:" ; cin >> nChoice ; }while(nChoice < 0 || nChoice > 2); return nChoice ; }; void CppRMS::SetCourFileDir(string strCourFileDir) { c_strCourFileDir = strCourFileDir; CreatCourFilePathName(); }; void CppRMS::SetCourFileName(string strCourFileName) { c_strCourFileName = strCourFileName; CreatCourFilePathName(); }; void CppRMS::SetStuFileDir(string strStuFileDir) { c_strStuFileDir = strStuFileDir; CreatStuFilePathName(); }; void CppRMS::SetStuFileName(string strStuFileName) { c_strStuFileName = strStuFileName; CreatStuFilePathName(); }; // -------------私有函数-------------- void CppRMS::CreatCourFilePathName() { int nLen = c_strCourFileDir.length(); int nPos = c_strCourFileDir.find_last_of('\\',nLen); if(nLen != nPos) { c_strCourFilePathName = c_strCourFileDir + string("\\") + c_strCourFileName + string(".dat"); } else { c_strCourFilePathName = c_strCourFileDir + c_strCourFileName + string(".dat"); } }; void CppRMS::CreatStuFilePathName() { int nLen = c_strStuFileDir.length(); int nPos = c_strStuFileDir.find_last_of('\\',nLen); if(nLen != nPos) { c_strStuFilePathName = c_strStuFileDir + string("\\") + c_strStuFileName + string(".dat"); } else { c_strStuFilePathName = c_strStuFileDir + c_strStuFileName + string(".dat"); } }; // file: ChoiceCouseSystem.cpp #include<iostream> #include <string> #include <iomanip> using namespace std; #include "StuCourList.h" #include "FileDir.h" #include "CppRMS.h" const int FilePathLen = 1024; const int FileNameLen = 32; // -------------------主函数中的函数---------------------// bool CourseMessage(string strCourPathName); // 课程管理信息 bool StudentsMessage(string strStuPathName);// 学生管理信息 bool CourseOfInput(string strCourPathName); //课程录入 bool CourseBrowser(string strCourPathName); // 课程浏览 bool CourseModify(string strCourPathName); //课程修改 bool CourseDelete(string strCourPathName); //课程删除 bool StudentsOfInput(string strStuPathName); // 学生录入 bool StudentsBrowser(string strStuPathName); // 学生浏览 bool StudentsModify(string strStuPathName); //学生修改 bool StudentsDelete(string strStuPathName); //学生删除 bool Choice(string strStuPathName,string strCourPathName); // 选课 ///////////////////////////// bool CourseOfInput(string strCourPathName) //课程录入 { char ch; StuCourList scList; scList.SetCourPathName(strCourPathName); FileDir fd(strCourPathName); bool bFileExist = fd.FileExist(); if(bFileExist) { cout <<"文件"<<strCourPathName <<"已存在,是否增加数据(Y/N): "; cin >> ch; if(toupper(ch) != 'Y') return false; if(scList.FromFileCour()) scList.InputCour(); } else { scList.InputCour(1); } //scList.ToFileCour(); return true; } bool CourseBrowser(string strCourPathName) // 课程浏览 { StuCourList scList; scList.SetCourPathName(strCourPathName); FileDir fd(strCourPathName); bool bFileExist = fd.FileExist(); if(!bFileExist) { cout << "文件不存在 :" << strCourPathName<<endl; return false; } if(scList.FromFileCour()) { scList.DisplayCour(); } else { return false; } return true; } bool CourseModify(string strCourPathName) //课程修改 { int nModify; // 课程的编号 StuCourList scList; scList.SetCourPathName(strCourPathName); FileDir fd(strCourPathName); bool bFileExist = fd.FileExist(); if(!bFileExist) { cout << "文件不存在:" << strCourPathName<<endl; return false; } if(scList.FromFileCour()) { cout <<"请输入要修改的课程编号:"; cin >> nModify; scList.ModifyCour(nModify); } else { return false; } //scList.ToFileCour(); return true; } bool CourseDelete(string strCourPathName) //课程删除 { int nDelete; StuCourList scList; scList.SetCourPathName(strCourPathName); FileDir fd(strCourPathName); bool bFileExist = fd.FileExist(); if(!bFileExist) { cout << "文件不存在:"<<strCourPathName<<endl; return false; } if(scList.FromFileCour()) { cout <<"请输入要删除的课程编号:"; cin >> nDelete; scList.DeleteCour(nDelete); } else { return false; } //scList.ToFileCour(); return true; } bool StudentsOfInput(string strStuPathName) // 学生录入 { char ch; StuCourList scList; scList.SetStuPathName( strStuPathName ); FileDir fd(strStuPathName); bool bFileExist = fd.FileExist(); if(bFileExist) { cout <<"文件"<<strStuPathName<<"已存在,是否增加数据(Y/N): "; cin >> ch; if(toupper(ch) != 'Y') return false; if(scList.FromFileStu()) { scList.InputStu(); } } else { scList.InputStu(1); } return true; } bool StudentsBrowser(string strStuPathName) // 学生浏览 { StuCourList scList; scList.SetStuPathName(strStuPathName); FileDir fd(strStuPathName); bool bFileExist = fd.FileExist(); if(!bFileExist) { cout << "文件不存在:"<<strStuPathName<<endl; return false; } if(scList.FromFileStu()) { scList.DisplayStu(); } else { return false; } return true; } bool StudentsModify(string strStuPathName) //学生修改 { int nMocify; StuCourList scList; scList.SetStuPathName(strStuPathName); FileDir fd(strStuPathName); bool bFileExist = fd.FileExist(); if(!bFileExist) { cout <<"文件不存在:"<<strStuPathName<<endl; return false; } if(scList.FromFileStu()) { cout << "请输入要修改的学生编号:"; cin >>nMocify; scList.ModifyStu(nMocify); } else { return false; } return true; } bool StudentsDelete(string strStuPathName) //学生删除 { int nDelete = 0; StuCourList scList; scList.SetStuPathName(strStuPathName); FileDir fd(strStuPathName); bool bFileExist = fd.FileExist(); if(!bFileExist) { cout <<"文件不存在:"<<strStuPathName<<endl; return false; } if(scList.FromFileStu()) { cout <<"请输入要删除的学生编号:"; cin >>nDelete; scList.DeleteStu(nDelete); } else { return false; } return false; } bool Choice(string strStuPathName,string strCourPathName) // 选课 { int nChoice; int nCredit; char chTeacher[15]; StuCourList scList; scList.SetCourPathName(strCourPathName); scList.SetStuPathName(strStuPathName); FileDir fdStu(strStuPathName); FileDir fdCour(strCourPathName); CppRMS cppRMS; bool bFileExistStu = fdStu.FileExist(); bool bFileExistCour = fdCour.FileExist(); if(!bFileExistCour || !bFileExistStu) { cout <<"文件不存在:"<<strCourPathName<<"或"<<strStuPathName<<endl; return false; } if(!scList.FromFileCour() || !scList.FromFileStu()) { return false; } do { nChoice = cppRMS.MenuChoice(); switch(nChoice) { case 0: break; case 1: cout << "请输入教师姓名:"; cin.ignore(); cin.getline(chTeacher,15); scList.ChoiceByTeach(chTeacher); //scList.ToFileStu(); break; case 2: cout <<"请输入学生学分:"; cin>>nCredit; scList.ChoiceByNum(nCredit); //scList.ToFileStu(); break; default: cout <<endl<<"选择错误 !"<<endl; break; } }while(nChoice != 0); return true; } bool CourseMessage(string strCourPathName) { int nChoice ; CppRMS cppRMS; do { nChoice = cppRMS.MenuCour(); switch(nChoice) { case 0: break; case 1: CourseOfInput(strCourPathName); break; case 2: CourseBrowser(strCourPathName); break; case 3: CourseModify(strCourPathName); break; case 4: CourseDelete(strCourPathName); break; default: cout <<endl<< "输入错误!" <<endl; break; } }while(nChoice != 0); return true; } bool StudentsMessage(string strStuPathName) { int nChoice ; CppRMS cppRMS; do { nChoice = cppRMS.MenuStu(); switch(nChoice ) { case 0: break; case 1: StudentsOfInput(strStuPathName); break; case 2: StudentsBrowser(strStuPathName); break; case 3: StudentsModify(strStuPathName); break; case 4: StudentsDelete(strStuPathName); break; default: cout <<endl<<"输入错误!"<<endl; break; } }while(nChoice != 0); return true; } int main() { char chCourFileDir[FilePathLen]; char chCourFileName[FileNameLen ]; char chStuFileDir[FilePathLen ]; char chStuFileName[FileNameLen ]; cout <<"请输入课程文件名:"; cin.getline(chCourFileName ,FileNameLen ); cout <<"请输入课程文件目录:"; cin.getline(chCourFileDir,FilePathLen ); cout <<"请输入学生文件名:"; cin.getline(chStuFileName ,FileNameLen ); cout <<"请输入学生文件目录:"; cin.getline(chStuFileDir ,FilePathLen); CppRMS cppRMS; string strCourPathName; string strStuPathName; cppRMS.SetCourFileName(string(chCourFileName)); cppRMS.SetCourFileDir(string(chCourFileDir)); cppRMS.SetStuFileName(string(chStuFileName)); cppRMS.SetStuFileDir(string(chStuFileDir)); strCourPathName = cppRMS.GetCourPathName(); strStuPathName = cppRMS.GetStuPathName(); int nChoice = 0; do { nChoice = cppRMS.MenuMain(); switch(nChoice) { case 0: break; case 1: CourseMessage(strCourPathName); break; case 2: StudentsMessage(strStuPathName); break; case 3: Choice(strStuPathName,strCourPathName); break; default: cout<<endl<<"输入错误 !"<<endl; break; } }while(nChoice != 0); return 0; }
代码实现二:面向过程:
#include <iostream> #include <iomanip> #include <cstring> #include <fstream> #include <sys\stat.h> using namespace std; const string StusPathName="D:\\Students.txt"; const string ProjPathName="D:\\Project.txt"; bool FileExist(string PathName) { int result; struct _stat buf; result = _stat(PathName.c_str(), &buf); return (result == 0); } struct Students//学生信息 { int StusNo;//学号 char StusNam[20];//姓名 char Prof[20];//专业 char ClaNam[20];//班级 char SeledProjNam[20];//选课名 Students *sNext; }; bool FreeMem(Students *sHead)//链表释放内存 { Students *sCur; if (sHead == NULL) return false; do { sCur=sHead; sHead=sHead->sNext; delete sCur; } while(sHead!=NULL); return true; } Students* StusFromFile(string StusPathName)//从文件中读出数据 { Students *pRsNew,*sHead=NULL; ifstream StusfileIn; StusfileIn.open(StusPathName.c_str(),ios::in); if(StusfileIn.fail()) { cout<<"Can not open file:"<<StusPathName<<endl; return sHead; } while(!StusfileIn.eof()) { pRsNew=new Students; StusfileIn.read((char*)pRsNew,sizeof(*pRsNew)); pRsNew->sNext=NULL; int ng=StusfileIn.gcount();//结尾处理 if(ng==0) { delete pRsNew; break; } if (sHead==NULL) sHead=pRsNew; else { pRsNew->sNext=sHead; sHead=pRsNew; } } StusfileIn.close(); return sHead; } bool StusToFile(string StusPathName,Students* sHead)//保存 { Students *sCur; ofstream StusfileOut; StusfileOut.open(StusPathName.c_str(),ios::out|ios::app|ios::binary); if(StusfileOut.fail()) { cout<<"Can not open file:"<<StusPathName<<endl; return false; } sCur=sHead; while(sCur!= NULL) { StusfileOut.write((char*)sCur,sizeof(*sCur)); sCur=sCur->sNext;//指向下一个 }; StusfileOut.close(); FreeMem(sHead); return true; } //保存 bool StusToFileDele(string StusPathName,Students* sHead) { Students *sCur; ofstream StusfileOut; StusfileOut.open(StusPathName.c_str(),ios::out); if(StusfileOut.fail()) { cout<<"Cant not open file:"<<StusPathName<<endl; return false; } sCur=sHead; while(sCur!= NULL) { StusfileOut.write((char*)sCur,sizeof(*sCur)); sCur=sCur->sNext; }; StusfileOut.close(); FreeMem(sHead); return true; } int MenuStus();//学生信息菜单 int MenuStusInquiry();//学生信息查询菜单 int MenuStusDelete();//学生信息删除菜单 bool StusInput();//录入 bool StusInquiry();//查询 void DispiayT();//浏览 bool Display(Students *sHead,int num); bool InquiryAllStus(Students *sHead); bool StusDelete(); bool DeleteByStusNo(Students *sHead); int MenuMain() { int nChoice=0; do { cout<<"学生选课系统"<<endl<<"1: 学生信息管理"<<endl<<"2: 课程信息管理"<<endl<<"3: 学生选课"<<endl <<"0: 退出"<<endl<<" 请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>3); return nChoice; } int MenuStus() { int nChoice=0; do { cout<<"学生信息管理"<<endl<<"1:录入学生信息"<<endl<<"2:浏览学生信息"<<endl<<"3:删除学生信息"<<endl <<"0:返回主菜单"<<endl<<"请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>3); switch(nChoice) { case 0: break; case 1: StusInput(); break; case 2: StusInquiry(); break; case 3: StusDelete(); break; } return 0; } int MenuStusInquiry() { int nChoice=0; do { cout<<"浏览学生信息"<<endl<<"1:查看全部信息"<<endl<<"2: 返回上一级"<<endl<<"0:返回主菜单"<<endl<<" 请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>2); return nChoice; } int MenuStusDelete() { int nChoice=0; do { cout<<"删除学生信息"<<endl<<"1:通过学号删除"<<endl <<"2: 返回上一级"<<endl<<"0:返回主菜单"<<endl<<" 请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>2); return nChoice; } bool StusInput() { char chChoice; Students *sHead = NULL; Students *pRsNew,*pRsPrev; if (FileExist(StusPathName)) { cout<<" 文件"<<StusPathName<<"已存在,是否继续(Y/N)?"; cin>>chChoice; if (toupper(chChoice) == 'N') return MenuStus(); } cout<<" 请依次输入每位学生信息,学号输入0 结束录入"<<endl; do { pRsNew = new Students; pRsNew->sNext=NULL; strcpy(pRsNew->SeledProjNam,"无"); cout<<"学号:"; cin>>pRsNew->StusNo; if (pRsNew->StusNo==0) { delete pRsNew; break; } cout<<"姓名:"; cin>>pRsNew->StusNam; cout<<"专业:"; cin>>pRsNew->Prof; cout<<"班级:"; cin>>pRsNew->ClaNam; if (sHead==NULL) sHead=pRsNew; else { pRsPrev=sHead; while(pRsPrev->sNext!=NULL) pRsPrev=pRsPrev->sNext; pRsPrev->sNext = pRsNew; } } while(true); bool bRet; bRet=StusToFile(StusPathName,sHead); if(bRet==true) cout<<" 存储成功"<<endl; else cout<<" 存储失败"<<endl; return MenuStus(); } bool StusInquiry() { int nChoice; Students* sHead=NULL; if(!FileExist(StusPathName)) { cout<<" 无法找到存储学生信息文件,请先录入学生信息"<<endl; return MenuStus(); } sHead =StusFromFile(StusPathName); if(sHead==NULL) { cout<<"无学生信息,请录入学生信息"<<endl; return MenuStus(); } do { nChoice=MenuStusInquiry(); switch(nChoice) { case 0: return 0; case 1: InquiryAllStus(sHead); return StusInquiry(); case 2: return MenuStus(); } break; } while(nChoice!=0); FreeMem(sHead); return MenuStus();; } void DispiayT() { cout<<" "<<"学号"<<setw(13)<<"姓名"<<setw(15)<<"专业"<<setw(13) <<"班级"<<setw(13)<<"已选课程"<<" "<<endl; return; } bool Display(Students *sHead,int num) { Students *sCur; if(sHead==NULL) return false; sCur=sHead; if(sCur->SeledProjNam!=0) { cout<<" "<<sCur->StusNo; cout<<setw(15)<<sCur->StusNam<<setw(15)<<sCur->Prof<<setw(13)<<sCur->ClaNam<<setw(13) <<sCur->SeledProjNam<<" "<<endl; } else { cout<<" "<<sCur->StusNo; cout<<setw(15)<<sCur->StusNam<<setw(15)<<sCur->Prof<<setw(13)<<sCur->ClaNam<<endl; } return true; } bool InquiryAllStus(Students *sHead) { int num=0; Students *sCur; sCur=sHead; DispiayT(); while(sCur!=NULL) { num++; Display(sCur,num); sCur=sCur->sNext; } return true; } bool StusDelete() { int nChoice; Students* sHead; if(!FileExist(StusPathName)) { cout<<" 无存储学生信息的外部文件,请录入"<<endl; return MenuStus(); } sHead = new Students; sHead->sNext=StusFromFile(StusPathName); if(sHead->sNext==NULL) { cout<<" 无没有学生信息,请录入"<<endl; return MenuStus(); } do { nChoice=MenuStusDelete(); switch(nChoice) { case 0: return 0; case 1: DeleteByStusNo(sHead); break; case 2: return MenuStus(); } break; } while(nChoice!=0); bool bRet; bRet=StusToFileDele(StusPathName,sHead->sNext); if(bRet==true) cout<<" 删除完毕"<<endl; else cout<<" 删除失败"<<endl; return StusDelete(); } Students* Delete(Students *sHead,Students *sCur) { Students *p; p=sHead; while(p!=NULL) { if(p->sNext==sCur) { p->sNext=sCur->sNext; delete sCur; return p->sNext; } p=p->sNext; } return p; } bool DeleteByStusNo(Students *sHead) { Students *sCur; int StusNo; int count=0; cout<<" 输入要删除学生学号:"; cin>>StusNo; sCur=sHead->sNext; while(sCur!=NULL) { while (sCur->StusNo==StusNo) { count++; sCur=Delete(sHead,sCur); if(sCur==NULL) return true; } sCur=sCur->sNext; } if(count==0) { cout<<"无"<<StusNo<<"的学生信息"; } return false; } struct Projects { int ProjNo;//课程编号 char ProjNam[16];//课程名 int Hours;//学时 float Score;//学分 char TNam[10];//教师名 Projects *pNext; }; bool FreeMem(Projects *pHead) { Projects *pCur; if (pHead == NULL) return false; do { pCur=pHead; pHead=pHead->pNext; delete pCur; } while(pHead!=NULL); return true; } Projects* ProjFromFile(string ProjPathName) { Projects *pRsNew,*pHead=NULL; ifstream ProjfileIn; ProjfileIn.open(ProjPathName.c_str(),ios::in); if(ProjfileIn.fail()) { cout<<"Can not open file:"<<ProjPathName<<endl; return pHead; } while(!ProjfileIn.eof()) { pRsNew=new Projects; ProjfileIn.read((char*)pRsNew,sizeof(*pRsNew)); pRsNew->pNext=NULL; int ng=ProjfileIn.gcount(); if(ng==0) { delete pRsNew; break; } if(pHead==NULL) pHead=pRsNew; else { pRsNew->pNext = pHead; pHead = pRsNew; } } ProjfileIn.close(); return pHead; } bool ProjToFile(string ProjPathName,Projects* pHead) { Projects *pCur; ofstream ProjfileOut; ProjfileOut.open(ProjPathName.c_str(),ios::out|ios::app); if(ProjfileOut.fail()) { cout<<"Can not open file:"<<ProjfileOut<<endl; return false; } pCur=pHead; while(pCur!= NULL) { ProjfileOut.write((char*)pCur,sizeof(*pCur)); pCur=pCur->pNext; }; ProjfileOut.close(); FreeMem(pHead); return true; } bool ProjToFileDele(string ProjPathName,Projects* pHead) { Projects *pCur; ofstream ProjfileOut; ProjfileOut.open(ProjPathName.c_str(),ios::out); if(ProjfileOut.fail()) { cout<<"Can not open file:"<<ProjfileOut<<endl; return false; } pCur=pHead; while(pCur!= NULL) { ProjfileOut.write((char*)pCur,sizeof(*pCur)); pCur=pCur->pNext; }; ProjfileOut.close(); FreeMem(pHead); return true; } int MenuProj(); int MenuProjInquiry(); int MenuProjDelete(); bool ProjInput(); bool ProjInquiry(); void DispiayP(); bool Display(Projects *pHead,int num); bool InquiryAllProj(Projects *pHead); bool ProjDelete(); bool DeleteByTNam(Projects *pHead); int MenuProj() { int nChoice=0; do { cout<<"课程信息管理"<<endl<<"1:录入课程信息"<<endl<<"2:浏览课程信息"<<endl<<"3:删除课程信息" <<endl<<"0:返回主菜单"<<endl<<" 请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>3); switch(nChoice) { case 0: break; case 1: ProjInput(); break; case 2: ProjInquiry(); break; case 3: ProjDelete(); break; } return 0; } int MenuProjInquiry() { int nChoice=0; do { cout<<" 浏览课程信息"<<endl<<"1:查看全部信息"<<endl <<"2: 返回上一级"<<endl<<"0:返回主菜单"<<endl<<"请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>2); return nChoice; } int MenuProjDelete() { int nChoice=0; do { cout<<"删除课程信息"<<endl<<"1:通过教师姓名删除" <<endl<<"2: 返回上一级"<<endl<<"0:返回主菜单"<<endl; cout<<" 请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>2); return nChoice; } bool ProjInput() { char chChoice; bool bFileExist; bFileExist = FileExist(ProjPathName); if (bFileExist) { cout<<" 文件"<<ProjPathName<<"已存在,是否继续(Y/N)?"; cin>>chChoice; if (toupper(chChoice) == 'N') return MenuProj(); } Projects *pHead = NULL; Projects *pRsNew,*pRsPrev; cout<<"录入课程信息,编号输入0 结束录入"<<endl; do { pRsNew = new Projects; pRsNew->pNext=NULL; cout<<"编号:"; cin>>pRsNew->ProjNo; if (pRsNew->ProjNo==0) { delete pRsNew; break; } cout<<"课名:"; cin>>pRsNew->ProjNam; cout<<"学时:"; cin>>pRsNew->Hours; cout<<"学分:"; cin>>pRsNew->Score; cout<<"授课老师:"; cin>>pRsNew->TNam; if (pHead==NULL) pHead=pRsNew; else { pRsPrev=pHead; while(pRsPrev->pNext!=NULL) pRsPrev=pRsPrev->pNext; pRsPrev->pNext = pRsNew; } } while(true); bool bRet; bRet=ProjToFile(ProjPathName,pHead); if(bRet==true) cout<<"录入成功"<<endl; else cout<<"存储失败"<<endl; return MenuProj(); } bool ProjInquiry() { int nChoice; Projects* pHead=NULL; if(!FileExist(ProjPathName)) { cout<<"找不到存储课程信息的文件,请录入"<<endl; return MenuProj(); } pHead =ProjFromFile(ProjPathName); if(pHead==NULL) { cout<<"无课程信息,请录入"<<endl; return MenuProj(); } do { nChoice=MenuProjInquiry(); switch(nChoice) { case 0: break; case 1: InquiryAllProj(pHead); return ProjInquiry(); case 2: return MenuProj(); } break; } while(nChoice!=0); FreeMem(pHead); return 1; } void DispiayP() { cout<<" "<<"编号"<<setw(13)<<"课名"<<setw(13)<<"学时"<<setw(13)<<"学分" <<setw(15)<<"授课老师"<<" "<<endl; return; } bool Display(Projects *pHead,int num) { Projects *pCur; if(pHead==NULL) return false; pCur=pHead; cout<<" "<<pCur->ProjNo<<setw(13)<<pCur->ProjNam<<setw(13)<<pCur->Hours<<setw(13) <<pCur->Score<<setw(13)<<pCur->TNam<<" "<<endl; return true; } bool InquiryAllProj(Projects *pHead) { int num=0; Projects *pCur; pCur=pHead; DispiayP(); while(pCur!=NULL) { num++; Display(pCur,num); pCur = pCur->pNext; } return true; } bool ProjDelete() { int nChoice; Projects* pHead; if(!FileExist(ProjPathName)) { cout<<" 无存储课程信息的外部文件,请先录入"<<endl; return MenuProj(); } pHead = new Projects; pHead->pNext=ProjFromFile(ProjPathName); if(pHead->pNext==NULL) { cout<<"外部文件内无课程信息,请先录入"<<endl; return MenuProj(); } do { nChoice=MenuProjDelete(); switch(nChoice) { case 0: return 0; case 1: DeleteByTNam(pHead); break; case 2: return MenuProj(); default: cout<<"选择错误"<<endl; break; } break; } while(nChoice!=0); bool bRet=false; bRet=ProjToFileDele(ProjPathName,pHead->pNext); if(bRet==true) cout<<"删除完毕"<<endl; else cout<<"删除失败"<<endl; return ProjDelete(); } Projects* Delete(Projects *pHead,Projects *pCur) { Projects *p; p=pHead; while(p!=NULL) { if(p->pNext==pCur) { p->pNext=pCur->pNext; delete pCur; return p->pNext; } p=p->pNext; } return p; } bool DeleteByTNam(Projects *pHead) { Projects *pCur; char TNam[10]; int count=0; cout<<"请输入要删除课程授课老师的姓名:"; cin>>TNam; pCur=pHead->pNext; while(pCur!=NULL) { while ((strcmp(pCur->TNam,TNam)==0)) { count++; pCur=Delete(pHead,pCur); if(pCur==NULL) return true; } pCur=pCur->pNext; } if(count==0) { cout<<"无授课老师为"<<TNam<<"的课程信息"<<endl; } return false; } int MenSeleProj() { int nChoice=0; do { cout<<"学生选课"<<endl<<"1:按学分选课"<<endl <<"2:按老师选课"<<endl<<"0:返回主菜单"<<endl<<" 请选择:"; cin>>nChoice; } while(nChoice<0 || nChoice>2); return nChoice; } Students *StudentNo(Students *sHead) { Students *sCur; sCur=sHead; int count=0; int StusNo; cout<<"请输入学生学号:"; cin>>StusNo; while(sCur!=NULL) { if(sCur->StusNo==StusNo) { count++; return sCur; } sCur=sCur->sNext; } if(count==0) cout<<"无"<<StusNo<<"的学生信息"<<endl; return sCur; } Projects *ProjectNo(Projects *pHead) { Projects *pCur; pCur=pHead; int count=0; int ProjNo; cout<<"输入课程编号:"; cin>>ProjNo; while(pCur!=NULL) { if (pCur->ProjNo==ProjNo) { count++; return pCur; } pCur=pCur->pNext; } if(count==0) cout<<"无编号为"<<ProjNo<<"的课程信息"<<endl; return pCur; } Projects *Score(Projects *pHead) { Projects *pCur; pCur=pHead; int count=0; float Score; cout<<"输入学分:"; cin>>Score; while(pCur!=NULL) { if (pCur->Score==Score) { count++; return pCur; } pCur=pCur->pNext; } if(count==0) cout<<"无学分为"<<Score<<" 的课程信息"<<endl; return pCur; } Projects *TNam(Projects *pHead) { Projects *pCur; pCur=pHead; int count=0; char TNam[16]; cout<<"输入老师姓名:"; cin>>TNam; while(pCur!=NULL) { if ((strcmp(pCur->TNam,TNam)==0)) { count++; return pCur; } pCur=pCur->pNext; } if(count==0) cout<<"无"<<TNam<<"老师的课程信息"<<endl; return pCur; } bool SeleProj() { Students *sHead; Students *sCur; Projects *pHead; Projects *pCur; if(!FileExist(ProjPathName)) { cout<<"无法找到储存课程信息的文件,请录入"<<endl; return false; } if(!FileExist(StusPathName)) { cout<<"无法找到储存课程信息的文件,请录入"<<endl; return false; } sHead=StusFromFile(StusPathName); if(sHead==NULL) { cout<<"无学生信息,请先录入"<<endl; return false; } pHead=ProjFromFile(ProjPathName); if(pHead==NULL) { cout<<"无课程信息,请先录入"<<endl; return false; } int nChoice=MenSeleProj(); switch(nChoice) { case 0: break; case 1: sCur=StudentNo(sHead); if(sCur==NULL) return false; pCur=Score(pHead); if(pCur==NULL) { cout<<"选课失败"<<endl; return SeleProj(); } strcpy(sCur->SeledProjNam,pCur->ProjNam); StusToFileDele(StusPathName,sHead); cout<<"选课成功"<<endl; FreeMem(pHead); return SeleProj(); case 2: sCur=StudentNo(sHead); if(sCur==NULL) return false; pCur=TNam(pHead); if(pCur==NULL) { cout<<"选课失败"<<endl; return SeleProj(); } strcpy(sCur->SeledProjNam,pCur->ProjNam); StusToFileDele(StusPathName,sHead); cout<<endl<<"选课成功"<<endl; FreeMem(pHead); return SeleProj(); default: cout<<"错误选择"<<endl; break; } return true; } int main() { int nChoice=0; do { nChoice = MenuMain(); switch(nChoice) { case 0: break; case 1: MenuStus(); break; case 2: MenuProj(); break; case 3: SeleProj(); break; } } while(nChoice!=0); return 0; }
相关文章推荐
- 数据结构课程设计-学生各方面信息管理系统
- 数据结构课程设计—学生信息管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计--学生成绩管理系统
- 数据结构实验课程----实验二(利用链表实现学生健康系统)
- 数据结构课程设计-------学生信息管理系统
- 数据结构课程设计-通讯录管理系统的设计与实现
- 数据结构课程设计-学生信息管理系统
- 学生信息管理系统-数据结构课程设计
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计学生成绩管理系统源代码
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计-通讯录管理系统c++版(顺序表存储,折半查找,递增排序)
- 数据结构课程设计---学生成绩管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计—学生系统管理
- 数据结构课程设计论文--学生信息管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计---学生信息管理系统
- 数据结构课程设计--学生信息管理系统