文档库 最新最全的文档下载
当前位置:文档库 › 考生报名管理系统(数据结构)

考生报名管理系统(数据结构)

#include
#include
#include
#define MaxSize 200
typedef struct
{ int num;
char name[20];
char sex[10];
char age[10];
char jg[20];
char kaoshi[20];
}student;
typedef struct
{ student data[MaxSize];
int length;
} SqList;
void InitList(SqList *&L)
{ L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
////////////////////////////////////////////////////////////////
void creatlist1(SqList *&L) //添加函数
{
int i;
if(L->length==0)
{
printf(" 请添加(学号为整形) :\n");
printf(" 学号 姓名 性别 年龄 籍贯 考试类别\n");
scanf("%d%s%s%s%s%s",&L->data[L->length].num,L->data[L->length].name,L->data[L->length].sex,L->data[L->length].age,L->data[L->length].jg,L->data[L->length].kaoshi );
L->length++;
printf(" 添加成功\n");printf(" 添加的成所有员是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );

}
else
{ int c;int a=0;
while(1)
{
c=1;
printf(" 请添加(学号为整形) :\n");
printf(" 学号 姓名 性别 年龄 籍贯 考试类别\n");
scanf("%d%s%s%s%s%s",&L->data[L->length].num,L->data[L->length].name,L->data[L->length].sex,L->data[L->length].age,L->data[L->length].jg,L->data[L->length].kaoshi );
for( i=0;ilength;i++)
{
if(L->data[i].num==L->data[L->length].num)//判断是否有重号
{
c=0;
if(strcmp(L->data[i].name,L->data[L->length].name)==0&&strcmp(L->data[i].sex,L->data[L->length].sex)==0&&strcmp(L->data[i].age,L->data[L->length].age)==0&&strcmp(L->data[i].jg,L->data[L->length].jg)==0)
{
if(strcmp(L->data[i].kaoshi,L->data[L->length].kaoshi)!=0)
{
L->length++; printf(" 添加成功\n");
printf(" 添加的所有成员是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
return;
}
else{ printf(" 这门课程该考生已报考\n");return;}
}
else a=1; //printf(" 输入的信息有误\n");

}
}
if(a==1) printf(" 输入的信息有误\n");
if(c==1)
{
L->length++;printf(" 添加成功\n"); printf(" 添加的成员是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->dat

a[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
return;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
void checklist1(SqList *&L) //利用学号查询函数 //查询1
{
if(L->length==0) printf(" 此表为空!\n");
else
{
int num; int c=0; int m=0; int i;
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
printf(" 请输入查找学生的学号(学号为整形):"); scanf("%d",&num);
for(i=0;ilength;i++)
{
if(L->data[i].num==num)
{
if(m==0)
{
printf(" 结果是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
}
c=1;m++;
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
}
}
if(c==0) printf(" 查无此学生!\n");
}
}
//////////////////////////////////////////////////////////////////////////////
void checklist2(SqList *&L) //利用考试的信息查询函数 //查询2
{
if(L->length==0) printf(" 此表为空!\n");
else
{
char kaoshi[20]; int c=0; int m=0; int i;
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
printf(" 请输入查找学生的考试类别:"); scanf("%s",kaoshi);
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].kaoshi,kaoshi)==0) //判断考试类别相同的语句
{
if(m==0)
{
printf(" 结果是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
}
c=1; m++;
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
}
}
if(c==0) printf(" 该课程无人报考!\n");
}
}
/////////////////////////////////////////////////////
void paixu1(SqList *&L) //根据学号排序函数
{
if(L->length==0) printf(" 此表为空!\n");
else
{
int num;char name[20];char sex[10];
char age[10];char jg[20];char kaoshi[20];
int i,j;
printf(" 排序前\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data

[i].jg,L->data[i].kaoshi );
for(j=0;jlength;j++) //冒泡排序法
{
for(i=L->length-1;i>j;i--)
if(L->data[i].numdata[i-1].num)
{
num=L->data[i].num;L->data[i].num=L->data[i-1].num;L->data[i-1].num=num;
strcpy(name,L->data[i].name);strcpy(L->data[i].name,L->data[i-1].name);
strcpy(L->data[i-1].name,name);
strcpy(sex,L->data[i].sex);strcpy(L->data[i].sex,L->data[i-1].sex);
strcpy(L->data[i-1].sex,sex);
strcpy(age,L->data[i].age);strcpy(L->data[i].age,L->data[i-1].age);
strcpy(L->data[i-1].age,age);
strcpy(jg,L->data[i].jg);strcpy(L->data[i].jg,L->data[i-1].jg);
strcpy(L->data[i-1].jg,jg);
strcpy(kaoshi,L->data[i].kaoshi);strcpy(L->data[i].kaoshi,L->data[i-1].kaoshi);
strcpy(L->data[i-1].kaoshi,kaoshi);
} //125行--135行是相邻的元素交换
}
for(j=0;jlength;j++) //冒泡排序法
{
for(i=L->length-1;i>j;i--)
if(L->data[i].num==L->data[i-1].num&&strcmp(L->data[i].kaoshi,L->data[i-1].kaoshi)==-1)
{
num=L->data[i].num;L->data[i].num=L->data[i-1].num;L->data[i-1].num=num;
strcpy(name,L->data[i].name);strcpy(L->data[i].name,L->data[i-1].name);
strcpy(L->data[i-1].name,name);
strcpy(sex,L->data[i].sex);strcpy(L->data[i].sex,L->data[i-1].sex);
strcpy(L->data[i-1].sex,sex);
strcpy(age,L->data[i].age);strcpy(L->data[i].age,L->data[i-1].age);
strcpy(L->data[i-1].age,age);
strcpy(jg,L->data[i].jg);strcpy(L->data[i].jg,L->data[i-1].jg);
strcpy(L->data[i-1].jg,jg);
strcpy(kaoshi,L->data[i].kaoshi);strcpy(L->data[i].kaoshi,L->data[i-1].kaoshi);
strcpy(L->data[i-1].kaoshi,kaoshi);
} //125行--135行是相邻的元素交换
}
printf(" 按学号升序结果是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
{
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi);
}
}
}
///////////////////////////////////////////////////////////////////////////////////
void paixu2(SqList *&L) //根据考试类别的信息排序函数
{
if(L->length==0) printf(" 此表为空!\n");
else
{
int num;char name[20];char sex[10];
char age[10];char jg[20];char kaoshi[20];
int i,j;
printf(" 排序前\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
for(j=0;jlength;j++) //冒泡法来处理考试信息
{
for(i=L->length-1;i>j;i--)
if(strcmp(L->data[i].kaoshi,L->data[i-1].kaoshi)==

-1) //判断条件
{
num=L->data[i].num;L->data[i].num=L->data[i-1].num;
L->data[i-1].num=num;
strcpy(name,L->data[i].name);strcpy(L->data[i].name,L->data[i-1].name);
strcpy(L->data[i-1].name,name);
strcpy(sex,L->data[i].sex);strcpy(L->data[i].sex,L->data[i-1].sex);
strcpy(L->data[i-1].sex,sex);
strcpy(age,L->data[i].age);strcpy(L->data[i].age,L->data[i-1].age);
strcpy(L->data[i-1].age,age);
strcpy(jg,L->data[i].jg);strcpy(L->data[i].jg,L->data[i-1].jg);
strcpy(L->data[i-1].jg,jg);
strcpy(kaoshi,L->data[i].kaoshi);strcpy(L->data[i].kaoshi,L->data[i-1].kaoshi);
strcpy(L->data[i-1].kaoshi,kaoshi);
}
}
for(j=0;jlength;j++) //当考试信息排好后再用冒泡去处理学号
{
for(i=L->length-1;i>j;i--)
if(strcmp(L->data[i].kaoshi,L->data[i-1].kaoshi)==-1&&L->data[i].numdata[i-1].num)
{
num=L->data[i].num;L->data[i].num=L->data[i-1].num;L->data[i-1].num=num;
strcpy(name,L->data[i].name);strcpy(L->data[i].name,L->data[i-1].name);
strcpy(L->data[i-1].name,name);
strcpy(sex,L->data[i].sex);strcpy(L->data[i].sex,L->data[i-1].sex);
strcpy(L->data[i-1].sex,sex);
strcpy(age,L->data[i].age);strcpy(L->data[i].age,L->data[i-1].age);
strcpy(L->data[i-1].age,age);
strcpy(jg,L->data[i].jg);strcpy(L->data[i].jg,L->data[i-1].jg);
strcpy(L->data[i-1].jg,jg);
strcpy(kaoshi,L->data[i].kaoshi);strcpy(L->data[i].kaoshi,L->data[i-1].kaoshi);
strcpy(L->data[i-1].kaoshi,kaoshi);
}
}
printf(" 按考试类别升序结果是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n:");
for(i=0;ilength;i++)
{
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi);
}
}
}
/////////////////////////////////////////////////// ///////////////////////////////
void changlist1(SqList *&L) //利用学号修改函数 //修改
{
if(L->length==0)printf(" 此表为空,无法修改!\n");
else
{

int num;char name[20];char sex[10];
char age[10];char jg[20];
int c=0; int i;
printf(" 修改前为\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
printf(" 请输入要修改学生的学号(学号为整形)");scanf("%d",&num);
int f=0;
for(i=0;ilength;i++)
{
if(L->data[i].num==num)
{
c=1;
if(f==0)
{
printf(" 输入要修改的内容\n");
printf(" 姓名 性别 年龄 籍贯\n");
scanf("%s%s%s%s",name,sex,age,jg );
f++;
}
strcpy(L->data[i].name,name); //226行--23

0行是输入的信息覆盖原有的信息
strcpy(L->data[i].sex,sex);
strcpy(L->data[i].age,age);
strcpy(L->data[i].jg,jg);
}
if(c==1&&i==L->length-1)
{
printf(" 修改成功\n");printf(" 修改后是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
}
}
if(c==0)printf(" 此表中无此学生!\n");
}
}
/////////////////////////////////////////////////////////////////////////////////////
void changlist2(SqList *&L) //利用学号修改函数 //修改
{
if(L->length==0)printf(" 此表为空,无法修改!\n");
else
{

int num;char kaoshi1[20];char kaoshi2[20];
int c=0; int i;
printf(" 修改前为\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
printf(" 请输入要修改学生的学号(学号为整形)");scanf("%d",&num);
int f=0;//int b=0;
for(i=0;ilength;i++)
{
if(L->data[i].num==num)
{
c=1;
if(f==0)
{
printf(" 输入该学生的考试类别");
scanf("%s",kaoshi1 );
f++;
}
if(strcmp(L->data[i].kaoshi,kaoshi1)==0)
{
printf(" 输入新的考试类别");
scanf("%s",kaoshi2);
int u=0;
for(int j=0;jlength;j++)
{
if(L->data[j].num==num&&strcmp(L->data[j].kaoshi,kaoshi2)==0)
{
u=1; printf(" 此课程该考生已报考 修改失败\n");return;
}
}
if(u==0)
{
strcpy(L->data[i].kaoshi,kaoshi2);
printf(" 修改成功\n");
printf(" 修改后是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
return;
}
}
}
if(c==1&&i==L->length-1)
printf(" 该学生没报这门课\n");
}
if(c==0)printf(" 此表中无此学生!\n");
}
}
///////////////////////////////////////////////////////////
void deletelist1(SqList *&L) //利用学号删除某个学生的所有信息
{
if(L->length==0) printf(" 此表为空,无法操作!\n");
else
{
int num; char kaoshi1[20]

;
int c=0; int i; int j;
printf(" 删除前\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
printf(" 输入删除的学号(学号为整形):"); scanf("%d",&num);
int f=0;int b=0;
for (i=0;ilength;i++)
{
if(L->data[i].num==num)
{
c=1;
if(f==0)
{
printf(" 输入该学生的考试类别");
scanf("%s",kaoshi1 );
f++;
}
if(strcmp(L->data[i].kaoshi,kaoshi1)==0)
{
b=1;
for (j=i;jlength-1;j++)//使被查到的后的数据前移进行覆盖从而删除查找的元素
{
L->data[j]=L->data[j+1];
}
L->length--;
printf(" 删除成功!\n");
printf(" 删除后是\n");
if(L->length==0){printf(" 此表为空\n"); return;}
else
{
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
return;
}
}
}
if(i==L->length-1&&c==1&&b==0)printf(" 该学生没报这门课\n");

}
if(c==0) printf(" 此表中无此人!\n");
}
}
//////////////////////////////////////////////////////////////////////////////
void deletelist2(SqList *&L) //利用学号删除某个学生的所有信息
{
if(L->length==0) printf(" 此表为空,无法操作!\n");
else
{
int num;
int c=0; int i; int j;
printf(" 删除前\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
printf(" 输入删除的学号(学号为整形):"); scanf("%d",&num);
for (i=0;ilength;i++)
{
if(L->data[i].num==num)
{
c=1;
for (j=i;jlength-1;j++)//使被查到的后的数据前移进行覆盖从而删除查找的元素
{
L->data[j]=L->data[j+1];
}
L->length--;i=-1;
}
}
if(c==1)
{
printf(" 删除成功!\n");
if(L->length==0)printf(" 删除后此表为空!\n");
else
{
printf(" 删除后是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
}
}
if

(c==0) printf(" 此表中无此人!\n");
}
}
///////////////////////////////////////////////////////////////////
void tongji(SqList *&L) //统计函数
{
if(L->length==0) printf(" 此表为空,无法操作!\n");
else
{
int i; int n1=0; int c;int j;
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;ilength;i++)
printf("\t%d\t%s\t%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].age,L->data[i].jg,L->data[i].kaoshi );
typedef struct
{
char num1[20];
int m;
}cunchu1;
cunchu1 a[100]; //基于cunchu定义一个数组
strcpy(a[0].num1,L->data[0].kaoshi);
a[0].m=0; n1++; i=1;
while(ilength) //找出所有学生考试类别的所有可能 并存放在数组a的num1中
{
c=0;
for(j=0;j{
if(strcmp(a[j].num1,L->data[i].kaoshi)==0)//表示与a的元素重合 用c来标记
c=1;

}
if(c==0)
{
strcpy(a[n1].num1,L->data[i].kaoshi); //不重合的存放在a中num1中
a[n1].m=0;
n1++;

}
i++;
}
for(i=0;i{
for(j=0;jlength;j++)
if(strcmp(a[i].num1,L->data[j].kaoshi)==0)
a[i].m++;
}
printf(" 每门科目的统计结果是\n");
printf("\t考试类别 人数\n");
for(i=0;i{
printf("\t%s\t%d\n",a[i].num1,a[i].m);
}
i=0;
int n2=0; int c2;
typedef struct
{
int xuehao;
int m2;
}cunchu2;
cunchu2 b[100]; //基于cunchu定义一个数组
b[0].xuehao=L->data[0].num;
b[0].m2=0; n2++; i=1;
while(ilength) //找出所有学生考试类别的所有可能 并存放在数组a的num1中
{
c2=0;
for(j=0;j{
if(b[j].xuehao==L->data[i].num)//表示与a的元素重合 用c来标记
c2=1;

}
if(c2==0)
{
b[n2].xuehao=L->data[i].num; //不重合的存放在a中num1中
b[n2].m2=0;
n2++;

}
i++;
}
for(i=0;i{
for(j=0;jlength;j++)
if(b[i].xuehao==L->data[j].num)
b[i].m2++;
}
printf(" 所有考生的情况是:\n");
printf("\t学号 报考数目\n");
for(i=0;iprintf("\t%d\t%d\n",b[i].xuehao,b[i].m2);
printf(" 报考人数是\t%d\n",L->length);
}
}
///////////////////////////////////////////////////////
void main()
{
SqList *L;
InitList(L);
printf("\t\t 欢

迎进入报考学生信息管理系统\n");
while(1)
{
int n ;
printf("\t\t\t\t功能菜单如下:\n");
printf("---------------------------------------------------------------------\n");
printf(" -添加功能\n");
printf(" 1.单个添加报考学生的基本信息\n");
printf(" -查询功能\n");
printf(" 2.按考号查询\n");
printf(" 3.按考试类别查询\n");
printf(" -排序功能\n");
printf(" 4.按学号排序\n");
printf(" 5.按考试类别排序\n");
printf(" -修改功能\n");
printf(" 6.修改某个学生的姓名,性别,年龄,籍贯的报考信息\n");
printf(" 7.修改某个学生某一科(表示一个考试类别)的报考信息\n");
printf(" -删除功能\n");
printf(" 8.删除某个学生某一科的报考信息\n");
printf(" 9.删除某个学生的所有报考信息(所有考试类别)\n");
printf(" -统计功能\n");
printf(" 10.对学生信息进行统计\n");
printf(" -结束功能\n");
printf(" 0.退出系统\n");
printf("------------------------------------------------------------------------\n");
printf("请输入菜单选项:");
scanf("%d",&n);
switch (n)
{ case 1: creatlist1(L); break;
case 2: checklist1(L);break;
case 3: checklist2(L);break;
case 4:paixu1(L); break;
case 5: paixu2(L); break;
case 6:changlist1(L);break;
case 7:changlist2(L);break;
case 8:deletelist1(L); break;
case 9:deletelist2(L);break;
case 10:tongji(L); break;
case 0: return;break;
default :printf("输入有误!");
}
}
}


相关文档
相关文档 最新文档