《C++学生管理系统代码.docx》由会员分享,可在线阅读,更多相关《C++学生管理系统代码.docx(33页珍藏版)》请在三一办公上搜索。
1、C+学生管理系统代码#include #include #include #include #include #include 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
2、(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 Fi
3、ndMaxOrMin(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
4、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); stri
5、ng s2; int num=0; string zhangHao; string miMa; while(!in.eof) insnum; num+; if(num=2) break; if(pare()=0 | type=2 ) if(pare()=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你输入的
6、密码错误.endl; cout你不是管理员不能修改密码.endl; return false; couts0; couts1; string s1,s2; for(int i=0; is0.size; i+) s1+=char(int(s0i)+11); for( i=0; is1.size; i+) s2+=char(int(s1i)+11); s0=s1; s1=s2; for( i=0; i=1; i+) outsi ; out.close; string s1,s2; for(int i=0; is0.size; i+) s1+=char(int(s0i)-11); for( i=0;
7、 is1.size; i+) s2+=char(int(s1i)-11); coutzhangHao; coutmiMa; 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(numname) num=strlen(head-name); head=head-next; head=pHead; coutse
8、tw(num)namesetw(8) numsetw(10)chinaNum setw(10)mathNumsetw(10) englishNumsetw(8)result setw(8)averagesetw(5)posendl; void ShowList(student* head) cout姓名:setw(8)座号:setw(10) 语文分数:setw(10) 数学分数: setw(10)英语分数:setw(8)总分数: setw(8)平均分:setw(6)名次:endlnext; coutnext; out.close; student* Read ifstream in(Stude
9、nt.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;
10、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
11、 *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)名次:endln
12、ame,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(a
13、tof(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)=in
14、t(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
15、(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找不到你要找的
16、记录.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,pN
17、ew-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* p
18、Del,*pNew,*pHead; bool isFind=false; pHead=head; if(strcmp(head-name,delStr)=0) pNew=head-next; delete head; head=pNew; if(delNum=2) coutendl因为要删除的记录在前面,所有只删除第一记录.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; isFi
19、nd=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删除记录成功.chinaNum); else if (type=2) maxNum=int(head-mathNum); else if (type=3) maxNum=int
20、(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(maxNumchinaNum) maxNum=int(head-chinaNum); else if (type=2) if(maxNummathNum) maxNum=
21、int(head-mathNum); else if (type=3) if(maxNumenglishNum) maxNum=int(head-englishNum); else if (type=4) if(maxNumresult) maxNum=int(head-result); else if (type=5) if(maxNumaverage) maxNum=int(head-average); else if (type=6) if(maxNumpos) maxNum=head-pos; else if(type=1) if(maxNumint(head-chinaNum) ma
22、xNum=int(head-chinaNum); else if (type=2) if(maxNumint(head-mathNum) maxNum=int(head-mathNum); else if (type=3) if(maxNumint(head-englishNum) maxNum=int(head-englishNum); else if (type=4) if(maxNumint(head-result) maxNum=int(head-result); else if (type=5) if(maxNumint(head-average) maxNum=int(head-a
23、verage); else if (type=6) if(maxNumhead-pos) maxNum=head-pos; head=head-next; head=pHead; cout姓名:setw(8)座号:setw(10) 语文分数:setw(10) 数学分数: setw(10)英语分数:setw(8)总分数: setw(8)平均分:setw(5)名次:endlchinaNum)=maxNum) Print(head); else if (type=2) if(int(head-mathNum)=maxNum) Print(head); else if (type=3) if(int(
24、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请输入学生的新名字:pStd-name; cout请输入学生的座号
25、pStd-num; cout请输入学生的语文分数pStd-chinaNum; cout请输入学生的数学分数pStd-mathNum; cout请输入学生的英语分数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;
26、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-n
27、um; arrayx=num; x+; head=head-next; head=pHead; if(maxOrMin=1) for( i=1; ilen; i+) for(int j=0; jlen-i; j+) if(arrayjarrayj+1) float num; num=arrayj; arrayj=arrayj+1; arrayj+1=num; else for( i=1; ilen; i+) for(int j=0; jarrayj+1) float num; num=arrayj; arrayj=arrayj+1; arrayj+1=num; int pos=1; for(i
28、=0; ichinaNum; 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
29、 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,studen
30、t *head) Sort(head,4,1); cout欢迎使用查询功能endlendl; cout一般查询 2-查找最多 3-查找最少s; while(s0!=1&s0!=2&s0!=3) cout你输入错误,请重新输入.s; if(s0=1) cout按什么查询?endl; cout姓名 2-座号 3-语文成绩 4-数学成绩 英语成绩 6-总分 7-平均分 8-排名str; while(str0!=1 & str0!=2 & str0!=3 & str0!=4 & str0!=5 & str0!=6 & str0!=7 & str0!=8 ) cout你输入错误,请重新输入.str; c
31、har findStr30; cout请输入要查找的关键字或关键数: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,find
32、Str,7); break; case 8: Find(head,findStr,8); break; else if(s0=2) cout请输入要按什么查询?endl; cout语文成绩 2-数学成绩 英语成绩 4-总分 5-平均分 6-排名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语文成绩 2-数学成绩 英语成绩 4-总分 5-