哈希の学生管理系统optionsh.docx
《哈希の学生管理系统optionsh.docx》由会员分享,可在线阅读,更多相关《哈希の学生管理系统optionsh.docx(11页珍藏版)》请在冰豆网上搜索。
![哈希の学生管理系统optionsh.docx](https://file1.bdocx.com/fileroot1/2023-1/8/a61d9954-337e-42e1-904b-b56f1c186717/a61d9954-337e-42e1-904b-b56f1c1867171.gif)
哈希の学生管理系统optionsh
哈希の学生管理系统~~options.h
2009-12-2619:
58
#include
#include
#include
#include
#include
usingnamespacestd;
typedefstruct//定义一个课程结构体
{
charname[15];
intscore;
charteacher[15];
}CourseNode,*m_class;
typedefstruct
{
int key;
charnumber[10];
charname[15];
int age;
int a,score;//a记录课程的个数
charsex;
m_classm_course[10];//指向课程的十个指针,不是链表结构
}StudentNode;
#defineSUCCESS 1
#defineERROR 0
#defineFALSE 0
#defineTRUE 1
intgirl=0,boy=0;//定义两个全局变量,统计总人数
intIntJudge(intup,intlow,intnum)//判断输入是否正确
{ if(num>up||num returnFALSE;
else
returnTRUE;
}
intInitStudent(StudentNode&stu,char*num,intk)//增加学生的信息
{
charchoice='Y';
inti=0,score=0;
strcpy(stu.number,num);
stu.key=(num[6]-'0')*100+(num[7]-'0')*10+(num[8]-'0');
cout<<" 姓名:
";
cin>>stu.name;
cout<<" 性别(G/B):
";
cin>>stu.sex;
if(stu.sex=='B')
boy++;
elseif(stu.sex=='G')
girl++;
else{stu.key=-1;strcpy(stu.number,"");strcpy(stu.name,"");stu.sex='0';returnERROR;}
cout<<" 年龄:
"; cin>>stu.age;
cout<<" 是否有课程?
(Y/N):
";cin>>choice;
while
(1)
{
if(choice=='Y')
{stu.m_course[i]=newCourseNode;
cout<<" 课程名:
"; cin>>stu.m_course[i]->name;
cout<<" 教师:
"; cin>>stu.m_course[i]->teacher;
cout<<" 分数:
"; cin>>stu.m_course[i]->score;
i++;
cout<<" 是否还有课程?
(Y/N):
"; cin>>choice;
}
elseif(choice=='N'){stu.a=i;break;}
else{ cout<<" 输入有错!
!
!
是否输入课程?
(Y/N):
"; cin>>choice;}
}
for(intj=0;jscore; stu.score=score;}
returnSUCCESS;
}
voidShowStudent(StudentNodestu)//显示全部学生信息
{ inti=0,n=1;
cout<<"->"<for(;i{ if(n>=3)cout<name<teacher<score;
else cout<<"||"<name<teacher<score;
n++;
}
cout<}
voidShowMenu()//显示学生信息导航
{
cout<}
intKey(int&k,StudentNode*stu,char*number)
{
if(!
strcmp(stu[k].number,number)) {cout<<" 该记录已经存在!
!
!
";returnERROR;}
while(k<=11&&stu[k++].key!
=-1);
if(k>10){ cout<<" 存储已满!
!
!
"; returnERROR; }
else{ --k;returnSUCCESS;}
}
voidDisplay(StudentNode*stu)//显示已有学生信息
{
inti=0,j=0;//i是人数,j是结构体的下标
ShowMenu();
if((girl+boy)==0) cout<<" 现在没有任何学生记录!
!
!
"<while(i<(girl+boy))
{ for(;j<10;j++)if(stu[j].key!
=-1) ShowStudent(stu[j]);
i++;
}
}
intNumSearch(StudentNode*stu,char*m_number)//按学号查找学生信息
{
inti=0,score=0,EveScore=0,n=0;
ShowMenu();
for(;i<10;i++) if(!
strcmp(m_number,stu[i].number)) {ShowStudent(stu[i]);n++;break;}
if(stu[i].a!
=0)
{
cout<<" 总成绩:
"<"< return SUCCESS;
}
if(n==0){cout<<" 没有这样的记录!
!
!
"< return SUCCESS;
}
voidNameSearch(StudentNode*stu)//按姓名查找学生信息
{
charm_name[15];
inti=0,n=0;
cout<<" 请输入您要查找的姓名:
"; cin>>m_name; ShowMenu();
for(;i<10;i++) if(!
strcmp(m_name,stu[i].name)) {ShowStudent(stu[i]); n++;}
if(n==0) cout<<" 没有这样的记录!
!
!
"<}
voidSexSearch(StudentNode*stu)//按性别查找学生信息
{
charm_sex;
inti=0,n=0;
cout<<" 请输入您要查找的学生的性别(G/B):
"; cin>>m_sex;
while
(1)
{
if(m_sex=='G'||m_sex=='B')
{ ShowMenu();
for(;i<10;i++) if(m_sex==stu[i].sex) { ShowStudent(stu[i]); n++;}
if(n==0) cout<<" 没有这样的记录!
!
!
"< }
else{cout<<" 输入有错!
!
!
重新输入(G/B):
"; cin>>m_sex;}
}
}
void CourseSearch(StudentNode*stu)//按课程查找学生信息
{
charm_course[15];
inti=0,n=0;
cout<<" 请输入您要查找的课程:
"; cin>>m_course; ShowMenu();
for(;i<10;i++)
for(intj=0;j if(!
strcmp(m_course,stu[i].m_course[j]->name)) { ShowStudent(stu[i]);n++;}
if(n==0) cout<<" 没有这样的记录!
!
!
"<//elsereturnn;
}
voidTeachSearch(StudentNode*stu)//按教师查找学生信息
{
charm_teacher[15];
inti=0,n=0;
cout<<" 请输入您要查找的教师姓名:
"; cin>>m_teacher; ShowMenu();
for(;i<10;i++)
for(intj=0;j if(!
strcmp(m_teacher,stu[i].m_course[j]->teacher)) { ShowStudent(stu[i]);n++;}
if(n==0) cout<<" 没有这样的记录!
!
!
"<}
voidGradeSearch(StudentNode*stu)//按年级查找学生信息
{
charm_grade[5];
inti=0,n=0;
cout<"; cin>>m_grade; ShowMenu();
for(;i<10;i++)
if(stu[i].number[2]==m_grade[2]&&stu[i].number[3]==m_grade[3]&&stu[i].key!
=-1) { ShowStudent(stu[i]);n++;}
if(n==0) cout<<" 没有这样的记录!
!
!
"<}
voidClassScore(StudentNode*stu)//统计课程平均成绩
{
intscore=0,i=0,n=0;
charm_course[15];
cout<<" 请输入您要统计的课程的名字:
"; cin>>m_course;
for(;i<10;i++)
for(intj=0;j if(!
strcmp(m_course,stu[i].m_course[j]->name)) { score+=stu[i].m_course[j]->score;n++;break;}
if(n==0) cout<<" 没有这样的记录!
!
!
"<else{cout<<" 这门课程的平均成绩:
"; score/=n; cout<}
voidAgeStat(StudentNode*stu)//统计年级平均年龄
{
int age=0,i=0,n=0;
charyear[5];
cout<<" 请输入您要统计的年级的年份:
(如2008)"; cin>>year;
for(;i<10;i++)
if(stu[i].key!
=-1&&stu[i].number[2]==year[2]&&stu[i].number[3]==year[3]){age+=stu[i].age;n++;}
if(n==0) cout<<" 没有这样的记录!
!
!
"<else{age/=n; cout<<" 该年级的平均年龄为"<
}
voidAdd(StudentNode*stu)//添加一个学生的信息
{
charm_number[10],choice='Y';
intk=0;//哈希地址
while
(1)
{
if(choice=='Y')
{ cout<";
cin>>m_number;
k=((m_number[6]-'0')*100+(m_number[7]-'0')*10+(m_number[8]-'0'))%11;
if(Key(k,stu,m_number))
if(InitStudent(stu[k],m_number,k))
{cout<<" 成功保存!
!
!
是否继续输入学生信息?
(Y/N):
"; cin>>choice;
if(choice!
='Y'&&choice!
='N')
{
cout<<" 输入有错!
!
!
是否继续输入学生信息?
(Y/N):
";cin>>choice;
}
}
else
{cout<<" 输入有错!
!
!
重新输入?
(Y/N):
"; cin>>choice;
if(choice!
='Y'&&choice!
='N') {cout<<" 输入有错!
!
!
重新输入(Y/N):
";cin>>choice;}
}
else{cout<<" 输入有错!
!
!
重新输入?
(Y/N):
"; cin>>choice;}
}
elseif(choice=='N')break;
else {cout<<" 输入有错!
!
!
重新输入?
(Y/N):
"; cin>>choice;}
}
}
void Delete(StudentNode*stu)//删除一个学生全部信息
{
charm_number[10],choice;
int i=0;
cout<"; cin>>m_number;
if(NumSearch(stu,m_number))
{ cout<(Y/N):
"; cin>>choice;
while
(1)
{if(choice=='Y')
{ for(;i<10;i++) if(!
strcmp(m_number,stu[i].number)) break;//找到该同学的下标记录
stu[i].key=-1; stu[i].a=0; stu[i].age=0;
strcpy(stu[i].name,"");
if(stu[i].sex='G')--girl;else--boy;
stu[i].sex='0';
strcpy(stu[i].number,"");
for(intj=0;j<10;j++) stu[i].m_course[j]=NULL;
cout<!
!
"< break;
}
elseif(choice=='N') break;
else{cout<<" 输入有误!
!
!
请重新选择:
";cin>>choice;}
}
}
}
void Modify(StudentNode*stu)//修改一个学生的信息
{
charm_number[10],choice;
int i=0,opt=0,k=0,j=0;
cout<<" 请输入要修改的同学的学号:
"; cin>>m_number;
if(NumSearch(stu,m_number))
{ cout<(Y/N):
"; cin>>choice;
while
(1)
{if(choice=='Y')
{
for(;i<10;i++) if(!
strcmp(m_number,stu[i].number)) break;//找到该同学的下标记录
cout<<" 以下是要修改的信息:
"< cout< cout<<" 1.学号 2.姓名 3.性别 4.年龄 5.课程 6.教师 7.成绩 "< cout<<"******************************************************************************"< cout<<" 请选择:
"; cin>>opt;
if(IntJudge(7,1,opt))
{
switch(opt)
{
case1:
cout<"; cin>>m_number;
k=((m_number[6]-'0')*100+(m_number[7]-'0')*10+(m_number[8]-'0'))%11;
if(Key(k,stu,m_number))
{ strcpy(stu[k].number,m_number);
stu[k].key=((m_number[6]-'0')*100+(m_number[7]-'0')*10+(m_number[8]-'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(intj=0;j<10;j++) stu[k].m_course[j]=stu[i].m_course[j];
stu[i].key=-1; stu[i].a=0;stu[i].age=0;
strcpy(stu[i].name,""); stu[i].sex='0';
strcpy(stu[i].number,"");
for(j=0;j<10;j++) stu[i].m_course[j]=NULL;
cout<!
!
"< }
elsecout<<" 操作失败!
!
!
";break;
case2:
cout<"; cin>>stu[i].name;cout<!
!
"< case3:
cout<"; cin>>stu[i].sex;
if(stu[i].sex=='G'){++girl;--boy;} else{--girl;++boy;}
cout<!
!
"<