c语言版数据结构课程设计学生成绩管理系统

#include
#include
#include
#include
#define N 200
typedef struct
{
char name[20];
char sex;
char age[3];
char adress[30];
char test[3][20];
char nums[20];
int k;
char testnumber[3][10];
}ElemType;
typedef struct
{
ElemType data[N];
int length;
}pnode;
bool judgename(ElemType &data) //判断姓名是否为字符型
{
char nam[20];
int k;
k=atoi(https://www.360docs.net/doc/e97909539.html,);
sprintf(nam,"%d",k);
if(strcmp(nam,https://www.360docs.net/doc/e97909539.html,)==0)
{
printf("输入非法字符,请重新输入!\n");
printf("请重新输入学生姓名:");
scanf("%s",https://www.360docs.net/doc/e97909539.html,);
return judgename(data);
}
return true;
}
void Initalist(pnode *&L)
{
L=(pnode *)malloc(sizeof(pnode));
L->length=0;
}
bool judgesex(ElemType &data) //对性别进行判定
{
if(data.sex=='M'||data.sex=='m'||data.sex=='W'||data.sex=='w')
{
return true;
}
else
{
printf("输入非法字符,请重新输入!\n");
printf("请重新输入学生学生性别(男生为M女生为W):");
scanf("%s",&data.sex);
return judgesex(data);
}
}
bool JudgeAge(ElemType &data) //对年龄进行判定
{
int k;
char age[3];
k=atoi(data.age);
sprintf(age,"%d",k);
if(strcmp(age,data.age)==0)
{
return true;
}
else
{
printf("输入非法字符,请重新输入!\n");
printf("请重新输入学生年龄:");
scanf("%s",&data.age);
return JudgeAge(data);
}

}
bool tesenumber(ElemType &data,int k,pnode *&L,int mk) //输入考号对考号进行判定
{
int kb=0,kl=0;
int i;
switch(k)
{
case 0:
if(data.testnumber[k][0]!='1')
{
printf("输入有误,该门学科考号以1开头!\n");
printf("请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
kb=strlen(data.testnumber[k]);
if(kb!=6)
{
printf("输入考号有误!\n");
printf("请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
if(mk==1)
{
for(i=0;ilength;i++)
{
if(strcmp(data.testnumber[k],L->data[i].testnumber[k])==0)
{
printf("输入考号已存在,请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
}
}
if(mk==0)
{
for(i=0;ilength;i++)
{
if(strcmp(data.testnumber[k],L->data[i].testnumber[k])==0)
{
kl=kl+1;
}
}
if(kl!=1)
{
printf("考号已存在,请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
else
{
return true;
}
}
break;
case 1:
if(data.testnumber[k][0]!='2')
{
printf("输入有误,该门学科考号以2开头!\n");
printf("请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
kb=strlen(data.testnumber[k]);
if(kb!=6)

{
printf("输入有误,考号长度不足6!\n");
printf("请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
if(mk==1)
{
for(i=0;ilength;i++)
{
if(strcmp(data.testnumber[k],L->data[i].testnumber[k])==0)
{
printf("输入考号已存在,请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
}
}
if(mk==0)
{
for(i=0;ilength;i++)
{
if(strcmp(data.testnumber[k],L->data[i].testnumber[k])==0)
{
kl=kl+1;
}
}
if(kl!=1)
{
printf("考号已存在,请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
else
{
return true;
}
}
break;
case 2:
if(data.testnumber[k][0]!='3')
{
printf("输入有误,该门学科考号以3开头!\n");
printf("请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data, k,L,mk);
}
kb=strlen(data.testnumber[k]);
if(kb!=6)
{
printf("输入有误,考号长度不足6!\n");
printf("请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
if(mk==1)
{
for(i=0;ilength;i++)
{
if(strcmp(data.testnumber[k],L->data[i].testnumber[k])==0)
{
printf("输入考号已存在,请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
}
}
if(mk==0)
{
for(i=0;ilength;i++)
{
if(strcmp(data.testnumber[k],L->data[i].testnumber[k])==0)
{
kl=kl+1;
}
}
if(kl!=1)
{
printf("考号已存在,请重新输入:");
scanf("%s",data.testnumber[k]);
return tesenumber(data,k,L,mk);
}
else
{
return true;
}
}
break;
default:
printf("输入有错,请重新输入");
scanf("%s",data.testnumber[k]);
return tesenumber(data, k,L,mk);

}
}
bool Judgenums(ElemType &data,pnode *L) //对学号进行判定
{
int num;
char nums[20];
for(int k=0;klength;k++)
{
if(strcmp(data.nums,L->data[k].nums)==0)
{
printf("输入学生学号已存在,请重新输入\n");
scanf("%s",data.nums);
return Judgenums(data,L);
}
}
num=atoi(data.nums);
sprintf(nums,"%d",num);
if(strcmp(nums,data.nums)!=NULL)
{
printf("输入非法字符,请重新输入!\n");
printf("请重新输入学生学号:");
scanf("%s",data.nums);
return Judgenums(data,L);
}
else
{
return true;
}

}
bool judgetest(ElemType &data,int n,pnode *L,char num[],int mk) //对科目进行判定,
{
int k=n-1,kb=0;
char subjectname[3][20]=
{
{"jisuanji"},
{"yingyusiji"},
{"shuzu"},
};
for(int i=0;i{
if(strcmp(num,data.test[

i])==NULL)
{
printf("课程重复,请重新输入:");
scanf("%s",num);
return judgetest(data,n,L,num,mk);
}
}
for(int t=0;t<3;t++)
{
if(strcmp(num,subjectname[t])==NULL)
{
strcpy(data.test[t],num);
printf("请输入考生考号:");
scanf("%s",data.testnumber[t]);
tesenumber(data,t,L,mk);
kb=1;
break;
}
}
if(kb!=1)
{
printf("不存在该门课程,!!!\n");
printf("请重新输入:");
scanf("%s",num);
return judgetest(data,n,L,num,mk);
}
return true;
}
bool Judgetest(ElemType &data,pnode *L,int mk) //对报考科目数量进行判定
{
int n=1;
char nums[20];
if(data.k<=3&&data.k>0)
{
n=1;
}
else
{
printf("输入有误,最多可报考三门!!!\n");
printf("请重新输入:");
scanf("%d",&data.k);
return Judgetest(data,L,mk);
}
switch(data.k)
{
case 1:
printf("请输入你想要报考的科目(仅可输入一门):\n");
scanf("%s",nums);
if(judgetest(data,n,L,nums,mk)==true)
{
printf("第一门考试信息输入成功\n");
}
break;
case 2:
n=0;
printf("请输入你想要报考的科目(仅可输入二门):\n");
printf("请输入第%d门考试信息:",++n);
scanf("%s",nums);
if(judgetest(data,n,L,nums,mk)==true)
{
printf("第一门考试信息输入成功\n");
}
printf("请输入第二门考试信息:",++n);
scanf("%s",nums);
if(judgetest(data,n,L,nums,mk)==true)
{
printf("第二门考试信息输入成功\n");
}
break;

case 3:
n=0;
printf("请输入你想要报考的科目(仅可输入三门):\n");
printf("请输入第%d门考试信息:",++n);
scanf("%s",nums);
if(judgetest(data,n,L,nums,mk)==true)
{
printf("第一门考试信息输入成功\n");
}
printf("请输入第%d门考试信息:",++n);
scanf("%s",nums);
if(judgetest(data,n,L,nums,mk)==true)
{
printf("第二门考试信息输入成功\n");
}
printf("请输入第%d门考试信息:",++n);
scanf("%s",nums);
if(judgetest(data,n,L,nums,mk)==true)
{
printf("第三门考试信息输入成功\n");
}
break;
}
}
void Insertlist(pnode *&L)
{
int mk=1;
if(L->length==N)
{
printf("报考学生信息已满!!!");
return ;
}
int k=3,i;
for(i=0;i{
strcpy( L->data[L->length].test[i]," ");
strcpy(L->data[L->length].testnumber[i]," ");
}
printf("请输入报考学生信息\n");
printf("请输入报考学生姓名:");
scanf("%s",L->data[L->length].name);
judgename(L->data[L->length]);
printf("请输入报考学生性别(男生为M女生为W):");
scanf("%s",&L->data[L->length].sex);
judgesex(L->data[L->length]);
printf("请输入报考学生年龄");
scanf("%s",L->data[L->length].age);
JudgeAge(L->data[L->length]);
printf("请输入学生家庭住址:");
scanf("%s",L->data[L->length].adress);
printf("请输入学生

学号(学号只能由数字组成):");
scanf("%s",L->data[L->length].nums);
Judgenums(L->data[L->length],L);
printf("请输入学生报考类数(最多可报考3种):");
scanf("%d",&L->data[L->length].k);
Judgetest(L->data[L->length],L,mk);
L->length=L->length+1;
}
void Showlist(pnode *L)
{
if(L->length==0)
{
printf("无任何考生信息,请完善考生信息!!!");
return ;
}
int nums=3;
printf("姓名 年龄 \n ");
for(int k=0;klength;k++)
{
printf("%-3s %-3s",L->data[k].name,L->data[k].age);
}
}
void Lookupfor(pnode *L)
{
if(L->length==0)
{
printf("没有任何学生信息,请完善功能在使用此功能序操作\n");
return ;
}
int nums,num=3,bz=0;
int m,k,p,i;
char numms[20];
if(L->length==0)
{
printf("请输入要查询的学生考号:\n");
}
printf("请选择查找方式\n");
printf("1:按考号查找|\n");
printf("2:按考试类别查询\n");
printf("请输入您的选项:");
scanf("%d",&nums);
while(1)
{
if(nums<3&&nums>0)
{
break;
}
else
{
printf("输入错误请重新输入:");
scanf("%d",&nums);
}
}
switch(nums)
{
case 1:
printf("请输入要查询的考号:");
scanf("%s",numms);
for( m=0;mlength;m++)
{
for( p=0;p{
if(strcmp(numms,L->data[m].testnumber[p])==0)
{
bz=1;
printf("以查找到该学生。该学生信息为\n");
printf("姓名 籍贯 学号 \n");
printf("%s %s %s",L->data[m].name,L->data[m].adress,L->data[m].nums);
}
}
}
if(bz==0)
{
printf("查找不到该生信息!!!\n");
}
break;
case 2:
printf("请输入要查询的考试类别(只可为jisuanji yingyusiji shuzu):");
scanf("%s",numms);
printf("姓名 籍贯 学号 \n");
for( i=0;ilength;i++)
{
for( k=0;k{
if(strcmp(numms,L->data[i].test[k])==0)
{
bz=1;
printf("%s %s %s\n",L->data[i].name,L->data[i].adress,L->data[i].nums);
}
}
}
if(bz==0)
{
printf("没有报考该类学生信息");
}
}
}
void sort1(int kz,pnode *L)
{
char nums[20]={" "};
ElemType tamp;
int max=L->length;
int k,i;
for(i=0;ilength;i++)
{
for(k=L->length-1;k>i;k--)
{
if(strcmp(L->data[k].testnumber[kz],L->data[k-1].testnumber[kz])<0)
{
tamp=L->data[k];
L->data[k]=L->data[k-1];
L->data[k-1]=tamp;
}
}
}
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].test[kz],nums)!=0)
{
printf("%-3s %-3s %-3s\n",L->data[i].name,L->data[i].test[kz],L->data[i].testnumber[kz]);
}
}
}
void sort(pnode *L)
{
ElemType tamp;
int k,i;
if(L->length==0)
{
printf("没有任何学生信息,请完善功能在使用此功能序操作\n");
return ;
}
printf("1:按考生的学号升序排序\n");
printf("2:按考试号进行升序排序\n");
printf("请

输入您的选择:");
scanf("%d",&k);
while(1)
{
if(k>0&&k<3)
{
break;
}
else
{
printf("输入有误,请根据选择重新输入:");
scanf("%d",&k);
}
}
switch(k)
{
case 1:
for(i=0;ilength;i++)
{
for(k=L->length-1;k>0;k--)
{
if(strcmp(L->data[k].nums,L->data[k-1].nums)<0)
{
tamp=L->data[k];
L->data[k]=L->data[k-1];
L->data[k-1]=tamp;
}
}
}
printf("姓名 学号 \n");
for(i=0;ilength;i++)
{
printf("%-3s %-3s \n",L->data[i].name,L->data[i].nums);
}
break;
case 2:
printf("姓名 学科 考号\n");
sort1(0,L);
sort1(1,L);
sort1(2,L);
break;
}
}
void Updatarlist(pnode *L)
{
int i,k=3,j,bz=0,mn,mk=0;
char nums[20];
if(L->length==0)
{
printf("没有任何学生信息,请完善功能在使用此功能序操作\n");
return ;
}
printf("请输入要修改的考号:");
scanf("%s",nums);
for(i=0;ilength;i++)
{
for(j=0;j{
if(strcmp(L->data[i].testnumber[j],nums)==0)
{
bz=1 ;
printf("请输入要修改的信息:");
printf("请修改姓名:");
scanf("%s",L->data[i].name);
judgename(L->data[i]);
printf("请修改性别(男生为M女生为W):");
scanf("%s",&L->data[i].sex);
judgesex(L->data[i]);
printf("请修改考学生年龄");
scanf("%s",L->data[i].age);
JudgeAge(L->data[i]);
printf("请修改住址:");
scanf("%s",L->data[i].adress);
printf("请修改学号(学号只能由数字组成):");
scanf("%s",L->data[i].nums);
while(1)
{
j=0;
for(int k=0;klength;k++)
{
if(strcmp(L->data[k].nums,L->data[i].nums)==0)
{
j++;
}
}
if(j==1)
{
mn=0;
break;
}
else
{
printf("修改学号已存在,请重新输入:");
scanf("%s",L->data[i].nums);
}
if(mn==0)
{
break;
}
}
printf("请修改(最多可报考3种):");
scanf("%d",&L->data[i].k);
Judgetest(L->data[i],L,mk);
printf("修改数据成功!!!\n");
return ;
}
}
}
if(bz==0)
{
printf("没有该学生信息\n");
}
}
void DeleteList(pnode *&L)
{
int i,k=3,j,bz=0,m ;
if(L->length==0)
{
printf("没有任何学生信息,请完善功能在使用此功能序操作\n");
return ;
}
char nums[20];
printf("请输入要删除考号的学生信息:");
scanf("%s",nums);
for(i=0;ilength;i++)
{
for(j=0;j{
if(strcmp(L->data[i].testnumber[j],nums)==0)
{
for(m=i;mlength;m++)
{
L->data[i]=L->data[i+1];
bz=1;
printf("数据删除成功!!!\n");
L->length--;
break;

}
}
}
}
if(bz==0)
{
printf("无该学生信息!!!");
}
}
void Display(pnode *L)
{
char subjectname[3][20]=
{
{"jisuanji"},
{"yin

gyusiji"},
{"shuzu"},
};
int k,b1,b2,b3,i;
b1=b2=b3=0;
if(L->length==0)
{
printf("无任何学生信息,请完善信息在使用此功能\n");
}
int nums;
printf("1:输出学生报考信息\n");
printf("2.输出报考科目信息\n");
printf("请输入您的选择:");
scanf("%d",&nums);
while(1)
{
if(0{
break;
}
else
{
printf("输入选择有误,请重新输入:");
scanf("%d",&nums);
}
}
switch(nums)
{
case 1:
printf("姓名 报考科目总数\n");
for(i=0;ilength;i++)
{
printf("%-3s%3d\n",L->data[i].name,L->data[i].k);
}
break;
case 2:
printf("学生总人数为%d\n",L->length);
for(i=0;ilength;i++)
{
for(k=0;k<3;k++)
{
if(strcmp(subjectname[0],L->data[i].test[k])==0)
{
b1++;
}
if(strcmp(subjectname[1],L->data[i].test[k])==0)
{
b2++;
}
if(strcmp(subjectname[2],L->data[i].test[k])==0)
{
b3++;
}
}
}
printf("报考计算机的总人数为:%d\n",b1);
printf("报考英语四级的总人数为%d\n",b2);
printf("报考数组的总人数为%d\n",b3);
break;
}
}
int main()
{
pnode *p;
Initalist(p);
printf("顺序表初始化成功!!!\n");
int num;
while(1)
{
printf("\n");
printf("******************************\n");
printf("******1 录入报考学生信息 *********\n");
printf("******2 查询报考学生信息 *********\n");
printf("******3 报考信息排序 *********\n");
printf("******4 按考号删除学生信息 *********\n");
printf("******5 输出学生信息 *********\n");
printf("******6 按考号修改学生信息 *********\n");
printf("******7 学生信息统计 *********\n");
printf("******0 退出管理系统 *********\n");
printf("******************************\n");
printf("请输入您的选择:");
scanf("%d",&num);
switch(num)
{
case 1:Insertlist(p);;break;
case 2:Lookupfor(p);break;
case 3:sort(p);break;
case 4:DeleteList(p);break;
case 5:Showlist(p);break;
case 6:Updatarlist(p);break;
case 7: Display(p);break;
case 0:printf("感谢使用本程序,下次再见\n");return 0;
default:printf("输入错误,请重新输入!!!");
}
}
}

相关文档
最新文档