1、哈希学生管理系统optionsh哈希学生管理系统options.h2009-12-26 19:58#include#include#include#include#includeusing namespace std;typedef struct/定义一个课程结构体char name15;int score;char teacher15;CourseNode,*m_class;typedef structint key;char number10;char name15;int age;int a,score; /a记录课程的个数char sex;m_class m_course10;/指向课
2、程的十个指针,不是链表结构StudentNode;#define SUCCESS 1#define ERROR 0#define FALSE 0#define TRUE 1int girl=0,boy=0;/定义两个全局变量,统计总人数int IntJudge(int up,int low,int num)/判断输入是否正确 if(numup|numlow) return FALSE; else return TRUE;int InitStudent(StudentNode &stu,char* num,int k)/增加学生的信息char choice=Y;int i=0,score=0;s
3、trcpy(stu.number,num);stu.key=(num6-0)*100+(num7-0)*10+(num8-0);coutstu.name; coutstu.sex;if(stu.sex=B) boy+;else if(stu.sex=G) girl+;else stu.key=-1; strcpy(stu.number,); strcpy(stu.name,);stu.sex=0; return ERROR; coutstu.age;coutchoice;while(1) if(choice=Y) stu.m_coursei=new CourseNode; coutstu.m_
4、coursei-name; coutstu.m_coursei-teacher; coutstu.m_coursei-score; i+; coutchoice; else if(choice=N) stu.a=i; break; else coutchoice; for(int j=0;jscore; stu.score=score; return SUCCESS;void ShowStudent(StudentNode stu)/显示全部学生信息 int i=0,n=1; coutsetw(12)stu.numbersetw(9)stu.namesetw(3)stu.sexsetw(4)s
5、tu.age;for(;i=3)coutendl |setw(9)namesetw(9)teachersetw(3)score; else cout|setw(9)namesetw(9)teachersetw(3)score; n+;coutendl;void ShowMenu()/显示学生信息导航coutendl 学号 姓名 性别 年龄| 课程 老师 成绩| 课程 老师 成绩 endl;int Key(int &k,StudentNode* stu,char*number)if(!strcmp(stuk.number,number) cout 该记录已经存在!; return ERROR;
6、while(k10) cout 存储已满!; return ERROR; else -k; return SUCCESS; void Display(StudentNode* stu)/显示已有学生信息 int i=0,j=0;/i是人数,j是结构体的下标ShowMenu(); if(girl+boy)=0) cout 现在没有任何学生记录!endl;while(i(girl+boy) for(;j10;j+) if(stuj.key!=-1) ShowStudent(stuj); i+; int NumSearch(StudentNode* stu,char* m_number)/按学号查找
7、学生信息int i=0,score=0,EveScore=0,n=0; ShowMenu();for(;i10;i+) if(!strcmp(m_number,stui.number) ShowStudent(stui); n+; break; if(stui.a!=0) cout 总成绩:stui.score; EveScore=stui.score/stui.a; cout 平均成绩:EveScoreendl; return SUCCESS;if(n=0) cout 没有这样的记录!endl; return ERROR; return SUCCESS;void NameSearch(Stu
8、dentNode* stu)/按姓名查找学生信息char m_name15;int i=0,n=0;coutm_name; ShowMenu();for(;i10;i+) if(!strcmp(m_name,stui.name) ShowStudent(stui); n+; if(n=0) cout 没有这样的记录!endl;void SexSearch(StudentNode* stu)/按性别查找学生信息char m_sex;int i=0,n=0;coutm_sex; while(1) if(m_sex=G|m_sex=B) ShowMenu(); for(;i10;i+) if(m_s
9、ex=stui.sex) ShowStudent(stui); n+; if(n=0) cout 没有这样的记录!endl; break; else coutm_sex;void CourseSearch(StudentNode* stu)/按课程查找学生信息char m_course15;int i=0,n=0;coutm_course; ShowMenu();for(;i10;i+) for(int j=0;jname) ShowStudent(stui); n+; if(n=0) cout 没有这样的记录!endl;/else return n;void TeachSearch(Stud
10、entNode* stu)/按教师查找学生信息char m_teacher15;int i=0,n=0;coutm_teacher; ShowMenu();for(;i10;i+) for(int j=0;jteacher) ShowStudent(stui); n+; if(n=0) cout 没有这样的记录!endl;void GradeSearch(StudentNode* stu)/按年级查找学生信息char m_grade5;int i=0,n=0;coutendlm_grade; ShowMenu();for(;i10;i+) if(stui.number2=m_grade2&st
11、ui.number3=m_grade3&stui.key!=-1) ShowStudent(stui); n+; if(n=0) cout 没有这样的记录!endl;void ClassScore(StudentNode* stu)/统计课程平均成绩 int score=0,i=0,n=0;char m_course15;coutm_course;for(;i10;i+) for(int j=0;jname) score+=stui.m_coursej-score; n+; break; if(n=0) cout 没有这样的记录!endl;else cout 这门课程的平均成绩:; score
12、/=n; coutscore分endl; void AgeStat(StudentNode* stu)/统计年级平均年龄 int age=0,i=0,n=0;char year5;coutyear;for(;i10;i+) if(stui.key!=-1&stui.number2=year2&stui.number3=year3) age+=stui.age; n+; if(n=0) cout 没有这样的记录!endl;else age/=n; cout 该年级的平均年龄为age岁endl; void Add(StudentNode* stu)/添加一个学生的信息 char m_number1
13、0,choice=Y;int k=0;/哈希地址while(1) if(choice=Y) coutendlm_number; k=(m_number6-0)*100+(m_number7-0)*10+(m_number8-0)%11; if(Key(k,stu,m_number) if(InitStudent(stuk,m_number,k) coutchoice; if(choice!=Y&choice!=N) coutchoice; else coutchoice; if(choice!=Y&choice!=N) coutchoice; else coutchoice; else if(
14、choice=N) break; else coutchoice; void Delete(StudentNode* stu)/删除一个学生全部信息char m_number10,choice;int i=0;coutendlm_number;if(NumSearch(stu,m_number) coutendlchoice; while(1) if(choice=Y) for(;i10;i+) if(!strcmp(m_number,stui.number) break; / 找到该同学的下标记录 stui.key=-1; stu i.a=0; stu i.age=0; strcpy( st
15、u i.name,); if(stu i.sex=G) -girl; else -boy; stu i.sex=0; strcpy( stu i.number,); for(int j=0;j10;j+) stu i.m_coursej=NULL; coutendl 操作成功!endl; break; else if(choice=N) break; else coutchoice; void Modify(StudentNode* stu)/修改一个学生的信息 char m_number10,choice;int i=0,opt=0,k=0,j=0;coutm_number;if(NumSe
16、arch(stu,m_number) coutendlchoice; while(1) if(choice=Y) for(;i10;i+) if(!strcmp(m_number,stui.number) break; / 找到该同学的下标记录 cout 以下是要修改的信息:endl; coutendl*endlendl; cout 1.学号 2.姓名 3.性别 4.年龄 5.课程 6.教师 7.成绩 endlendl; cout*endl; coutopt; if(IntJudge(7,1,opt) switch(opt) case 1: coutendlm_number; k=(m_num
17、ber6-0)*100+(m_number7-0)*10+(m_number8-0)%11; if(Key(k,stu,m_number) strcpy(stuk.number,m_number); stuk.key=(m_number6-0)*100+(m_number7-0)*10+(m_number8-0); stu k.a=stu i.a; stu k.age=stu i.age; strcpy( stu k.name,stu i.name); stu k.sex=stu i.sex; for(int j=0;j10;j+) stu k.m_coursej=stu i.m_course
18、j; stui.key=-1; stui.a=0; stui.age=0; strcpy( stui.name,); stui.sex=0; strcpy( stui.number,); for(j=0;j10;j+) stui.m_coursej=NULL; coutendl 操作成功!endl; break; else cout 操作失败!;break; case 2: coutendlstu i.name; coutendl 操作成功!endl; break; case 3: coutendlstu i.sex; if(stu i.sex=G) +girl;-boy; else -girl; +boy; coutendl 操作成功!end
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1