C++学生管理系统代码.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC+学生管理系统代码#include<iostream>#include<iostream> #include<fstream> #include<string> #include <iomanip> #include<windows.h> #include<ctime> using namespace std; const int NAME_NUM=30; struct student char nameNAME_NUM; float num; float chinaNum; float englishNum; float mathNum; float average; float result; int pos; student *next; ; void Print(student *head); void InsertFront(student* &head, student *pNew); void InsertRear(student* &head, student *pNew); student* Find(student *head, char *findStr, char type); student* Read(); void Write(student* head); void ShowList(student* head); int GetLength(student* head); void Delete(student* &head, char *delStr,int delNum); void FindMaxOrMin(student *head,char type,char maxOrMin); void Reword(student *pStd); void Sort(student *&head, char type,char maxOrMin); void Count(student *&head); void DeleteAll(student *&head); bool Enter(char type); void SetTitle(bool isLoad); void AboutMe(); void ChaXun(string str,student *head); void PaiMing(string str, student* head); void ShanChu(string str, student *&head); void XianShi(string str, student *head); void XuiGai(string str, student *&head); void ZengJia(string str, student* &head); int Run(); bool Enter(char type) ofstream out("Password.pwd",ios:app); ifstream in("Password.pwd"); string s2; int num=0; string zhangHao; string miMa; while(!in.eof() in>>snum; num+; if(num=2) break; if(s0.compare("")=0 | type='2' ) if(s0.compare("")=0 && type!='2') cout<<"你是第一次使用本程序,请设置帐号和密码."<<endl; else bool isLoad=false; isLoad=Enter('1'); if(isLoad=true) cout<<"修改用户."<<endl; out.close(); out.open("Password.pwd",ios:trunc); else cout<<"你输入的密码错误."<<endl; cout<<"你不是管理员不能修改密码."<<endl; return false; cout<<"请输入您的新帐号: " cin>>s0; cout<<"请输入您的新密码: " cin>>s1; string s1,s2; for(int i=0; i<s0.size(); i+) s1+=char(int(s0i)+11); for( i=0; i<s1.size(); i+) s2+=char(int(s1i)+11); s0=s1; s1=s2; for( i=0; i<=1; i+) out<<si<<" " out.close(); string s1,s2; for(int i=0; i<s0.size(); i+) s1+=char(int(s0i)-11); for( i=0; i<s1.size(); i+) s2+=char(int(s1i)-11); cout<<"请输入您的帐号: " cin>>zhangHao; cout<<"请输入您的密码: " cin>>miMa; if(zhangHpare(s1)=0 && miMpare(s2)=0) return true; else return false; return false; void Print(student *head) student *pHead=head; int num=strlen(head->name); while(head) if(num<strlen(head->name) num=strlen(head->name); head=head->next; head=pHead; cout<<setw(num)<<head->name<<setw(8) <<head->num<<setw(10)<<head->chinaNum <<setw(10)<<head->mathNum<<setw(10) <<head->englishNum<<setw(8)<<head->result <<setw(8)<<head->average<<setw(5)<<head->pos<<endl; void ShowList(student* head) cout<<"姓名:"<<setw(8)<<"座号:"<<setw(10) <<"语文分数:"<<setw(10) <<"数学分数:" <<setw(10)<<"英语分数:"<<setw(8)<<"总分数:" <<setw(8)<<"平均分:"<<setw(6)<<"名次:"<<endl<<endl; while(head) Count(head); Print(head); head=head->next; cout<<endl; void Write(student* head) ofstream out("Student.dat",ios:trunc); while(head) Count(head); out.write(char*)head,sizeof(student); head=head->next; out.close(); student* Read() ifstream in("Student.dat"); student *head; student *pP; student *pEnd; pP=new student; pEnd=head=pP; student *pS=new student; memset(pS->name,0,NAME_NUM); in.read(char*)pS,sizeof(student); if(strcmp(pS->name,"0")=0) return NULL; strcpy(pP->name,pS->name); pP->num=pS->num; pP->chinaNum=pS->chinaNum; pP->englishNum=pS->englishNum; pP->mathNum=pS->mathNum; while(!in.eof() in.read(char*)pS,sizeof(student); pEnd->next=pP; pEnd=pP; pP=new student; strcpy(pP->name,pS->name); pP->num=pS->num; pP->chinaNum=pS->chinaNum; pP->englishNum=pS->englishNum; pP->mathNum=pS->mathNum; pEnd->next=NULL; delete pP; return head; student* Find(student *head,char *findStr, char type) /*参数说明: type='1' 按 名字 查找 type='2' 按 座号 查找 type='3' 按 语文 查找 type='4' 按 数学 查找 type='5' 按 英语 查找 type='6' 按 总分 查找 type='7' 按 平均分 查找 type='8' 按 排名 查找 /没有实现 */ bool isFind=false; student *firstStd=NULL; cout<<"姓名:"<<setw(8)<<"座号:"<<setw(10) <<"语文分数:"<<setw(10) <<"数学分数:" <<setw(10)<<"英语分数:"<<setw(8)<<"总分数:" <<setw(8)<<"平均分:"<<setw(5)<<"名次:"<<endl<<endl; while(head) if(type='1') if(strcmp(head->name,findStr)=0) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='2') if(int(head->num)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='3') if(int(head->chinaNum)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='4') if(int(head->mathNum)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='5') if(int(head->englishNum)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='6') if(int(head->result)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='7') if(int(head->average)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; else if(type='8') if(int(head->pos)=int(atof(findStr) if(firstStd=NULL) firstStd=head; Print(head); isFind=true; if(head->next=NULL) return firstStd; head=head->next; if(isFind=false) cout<<"找不到你要找的记录."<<endl; return NULL; return firstStd; void InsertRear(student* &head,student *pNew) student *pEnd,*pHead,*pS=new student; if(head=NULL) InsertFront(head,pNew); return pHead=head; while(head) pEnd=head; if(head->next=NULL) break; head=head->next; strcpy(pS->name,pNew->name); pS->num=pNew->num; pS->chinaNum=pNew->chinaNum; pS->englishNum=pNew->englishNum; pS->mathNum=pNew->mathNum; pS->next=NULL; pEnd->next=pS; head=pHead; void InsertFront(student* &head, student *pNew) student *pHead=new student; strcpy(pHead->name,pNew->name); pHead->num=pNew->num; pHead->chinaNum=pNew->chinaNum; pHead->englishNum=pNew->englishNum; pHead->mathNum=pNew->mathNum; pHead->next=head; head=pHead; int GetLength(student *head) int len=0; while(head) len+; head=head->next; return len; void Delete(student* &head, char *delStr,int delNum) student* pDel,*pNew,*pHead; bool isFind=false; pHead=head; if(strcmp(head->name,delStr)=0) pNew=head->next; delete head; head=pNew; if(delNum=2) cout<<endl<<"因为要删除的记录在前面,所有只删除第一记录."<<endl; return while(head->next) if(delNum=2) if(strcmp(head->next->name,delStr)=0) pNew=head->next->next; pDel=head->next; delete pDel; head->next=pNew; head=pHead; isFind=true; else if(strcmp(head->next->name,delStr)=0) pNew=head->next->next; pDel=head->next; delete pDel; head->next=pNew; head=pHead; return head=head->next; head=pHead; if(isFind=false) cout<<"找不到你要删除的记录."<<endl; else cout<<"删除记录成功."<<endl; void FindMaxOrMin(student *head,char type,char maxOrMin) /*参数说明: type='1' 按 语文 查找 type='2' 按 数学 查找 type='3' 按 英语 查找 type='4' 按 总分 查找 type='5' 按 平均分 查找 type='6' 按 排名 查找 */ int maxNum; student *pHead=head; if(type='1') maxNum=int(head->chinaNum); else if (type='2') maxNum=int(head->mathNum); else if (type='3') maxNum=int(head->englishNum); else if (type='4') maxNum=int(head->result); else if (type='5') maxNum=int(head->average); else if (type='6') maxNum=head->pos; else cout<<"你输入错误,请重新输入."<<endl; return while(head) if(maxOrMin='1') if(type='1') if(maxNum<int(head->chinaNum) maxNum=int(head->chinaNum); else if (type='2') if(maxNum<int(head->mathNum) maxNum=int(head->mathNum); else if (type='3') if(maxNum<int(head->englishNum) maxNum=int(head->englishNum); else if (type='4') if(maxNum<int(head->result) maxNum=int(head->result); else if (type='5') if(maxNum<int(head->average) maxNum=int(head->average); else if (type='6') if(maxNum<head->pos) maxNum=head->pos; else if(type='1') if(maxNum>int(head->chinaNum) maxNum=int(head->chinaNum); else if (type='2') if(maxNum>int(head->mathNum) maxNum=int(head->mathNum); else if (type='3') if(maxNum>int(head->englishNum) maxNum=int(head->englishNum); else if (type='4') if(maxNum>int(head->result) maxNum=int(head->result); else if (type='5') if(maxNum>int(head->average) maxNum=int(head->average); else if (type='6') if(maxNum>head->pos) maxNum=head->pos; head=head->next; head=pHead; cout<<"姓名:"<<setw(8)<<"座号:"<<setw(10) <<"语文分数:"<<setw(10) <<"数学分数:" <<setw(10)<<"英语分数:"<<setw(8)<<"总分数:" <<setw(8)<<"平均分:"<<setw(5)<<"名次:"<<endl<<endl; while(head) if(type='1') if(int(head->chinaNum)=maxNum) Print(head); else if (type='2') if(int(head->mathNum)=maxNum) Print(head); else if (type='3') if(int(head->englishNum)=maxNum) Print(head); else if (type='4') if(int(head->result)=maxNum) Print(head); else if (type='5') if(int(head->average)=maxNum) Print(head); else if (type='6') if(head->pos=maxNum) Print(head); head=head->next; void Reword(student *pStd) if(pStd!=NULL) cout<<"请输入学生的新名字:"<<endl; cin>>pStd->name; cout<<"请输入学生的座号"<<endl; cin>>pStd->num; cout<<"请输入学生的语文分数"<<endl; cin>>pStd->chinaNum; cout<<"请输入学生的数学分数"<<endl; cin>>pStd->mathNum; cout<<"请输入学生的英语分数"<<endl; cin>>pStd->englishNum; else return void Sort(student *&head, char type,char maxOrMin) /*参数说明: type='1' 按 语文 排列 type='2' 按 数学 排列 type='3' 按 英语 排列 type='4' 按 总分 排列 type='5' 按 平均分 排列 type='6' 按 座号 排列 */ student *pHead,*pH; pHead=pH=head; int len=GetLength(head); float *array=new floatlen; int i; int x=0; float num=0; while(head) Count(head); if(type='1') num=head->chinaNum; else if(type='2') num=head->mathNum; else if(type='3') num=head->englishNum; else if(type='4') num=head->result; else if(type='5') num=head->average; else if(type='6') num=head->num; arrayx=num; x+; head=head->next; head=pHead; if(maxOrMin='1') for( i=1; i<len; i+) for(int j=0; j<len-i; j+) if(arrayj<arrayj+1) float num; num=arrayj; arrayj=arrayj+1; arrayj+1=num; else for( i=1; i<len; i+) for(int j=0; j<len-i; j+) if(arrayj>arrayj+1) float num; num=arrayj; arrayj=arrayj+1; arrayj+1=num; int pos=1; for(i=0; i<len; i+) head=pHead; while(head) if(type='1') num=head->chinaNum; else if(type='2') num=head->mathNum; else if(type='3') num=head->englishNum; else if(type='4') num=int(head->result); else if(type='5') num=int(head->average); else if(type='6') num=int(head->num); int n=0; if(int(arrayi)=int(num) if(int(arrayi)!=int(arrayi+1) if(n=0) n=pos; head->pos=pos; pos+; else head->pos=n; head=head->next; head=pH; delete array; void Count(student *&head) head->result=head->chinaNum+head->englishNum+head->mathNum; head->average=head->result/3; void DeleteAll(student* &head) student *cp,*np; cp=head; while(cp) np=cp->next; delete cp; cp=np; head=NULL; void ChaXun(string str,student *head) Sort(head,'4','1'); cout<<"欢迎使用查询功能"<<endl<<endl; cout<<"请输入你要按什么查询 1->一般查询 2->查找最多 3->查找最少"<<endl; string s; cin>>s; while(s0!='1'&&s0!='2'&&s0!='3') cout<<"你输入错误,请重新输入."<<endl; cin>>s; if(s0='1') cout<<"按什么查询?"<<endl; cout<<"1->姓名 2->座号 3->语文成绩 4->数学成绩 " <<"5->英语成绩 6->总分 7->平均分 8->排名"<<endl; cin>>str; while(str0!='1' && str0!='2' && str0!='3' && str0!='4' && str0!='5' && str0!='6' && str0!='7' && str0!='8' ) cout<<"你输入错误,请重新输入."<<endl; cin>>str; char findStr30; cout<<"请输入要查找的关键字或关键数:"<<endl; cin>>findStr; switch(str0) case '1': Find(head,findStr,'1'); break; case '2': Find(head,findStr,'2'); break; case '3': Find(head,findStr,'3'); break; case '4': Find(head,findStr,'4'); break; case '5': Find(head,findStr,'5'); break; case '6': Find(head,findStr,'6'); break; case '7': Find(head,findStr,'7'); break; case '8': Find(head,findStr,'8'); break; else if(s0='2') cout<<"请输入要按什么查询?"<<endl; cout<<"1->语文成绩 2->数学成绩 " <<"3->英语成绩 4->总分 5->平均分 6->排名"<<endl; string s; cin>>s; switch(s0) case '1': FindMaxOrMin(head,'1','1'); break; case '2': FindMaxOrMin(head,'2','1'); break; case '3': FindMaxOrMin(head,'3','1'); break; case '6': FindMaxOrMin(head,'6','1'); break; case '5': FindMaxOrMin(head,'5','1'); break; default: FindMaxOrMin(head,'4','1'); break; else if(s0='3') cout<<"请输入要按什么查询?"<<endl; cout<<"1->语文成绩 2->数学成绩 " <<"3->英语成绩 4->总分 5->平均分 6->排名"<<endl; string s; cin>>s; switch(s0) case '1': FindMaxOrMin(head,'1','2'); break; case '2': FindMaxOrMin(head,'2','2'); break; case '3': FindMaxOrMin(head,'3','2'); break; case '6': FindMaxOrMin(head,'6','2'); break; case '5': FindMaxOrMin(head,'5','2'); break; default: FindMaxOrMin(head,'4','2'); break; void ZengJia(string str, student* &head) student *pNew=new student; cout<<"欢迎使用增加功能"<<endl<<endl; cout<<"请输入新学生的名字 :"<<endl; cin>>pNew->name; cout<<"请输入新学生的座号 :"<<endl; cin>>pNew->num; cout