/*****************************************************
* 版权所有(C)2016,姜孝龙
*
*文件名称:A.C 学生信息管理系统
*文件标识:无
*内容摘要:
*其他说明:无
*当前版本:V1.0
*作者:姜孝龙
*完成日期:2016.12.29
*
******************************************************/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#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;//int型变量
} SqList;
void InitList(SqList *&L)//指针的引用顺序表创建
{
L=(SqList *)malloc(sizeof(SqList));//分配空间
L->length=0;//初始化顺序表
}
int system(const char *string); //清屏函数
/*********************************************************
* 功能描述: 增加新的学生
* 输入描述: 新增的学生相关信息
* 输出描述: 此生存在会输出"该生已存在"
* 返回值 : 无
* 其它说明:
************************************************************/
void creatlist1(SqList *&L) //1.添加报考学生信息
{
int i=0;
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");
}
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;i<L->length;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)//学科不重复
{
a=0;
L->length++;
printf(" 添加成功\n");
printf(" 添加的所有成员有:\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;i<L->length;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(c==1)
{
L->length++;
printf("添加成功!\n");
return;
}
}
}
}
/*********************************************************
* 功能描述: 查找学生信息
* 输入描述: 要查找学生的学号
* 输出描述: 此生不存在时会输出“此生不存在” 存在会输出该生的相应修改信息
* 返回值 : 无
* 其它说明:
************************************************************/
void checklist1(SqList *&L) //2.按考号查询
{
if(L->length==0)
printf(" 没有考生报考!\n");
else
{
int num, c=0; int m=0; int i;
printf(" 请输入查找学生的学号(学号为整形):");
scanf("%d",&num);
for(i=0;i<L->length;i++)
{
if(L->data[i].num==num)
{
if(m==0)
{
printf(" 结果是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
}
m++;
c=1;//找到
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) //3.按考试类别查询
{
if(L->length==0)
printf(" 没有考生报考!\n");
else
{
char kaoshi[20]; int c=0; int m=0; int i;
printf(" 请输入查找学生的考试类别:");
scanf("%s",kaoshi);
for(i=0;i<L->length;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) //4.按学号排序
/*********************************************************
* 功能描述: 排序
* 输入描述:
* 输出描述: 不存在学生时会输出"还没有学生信息,请增加学生信息" 不然就输出按成绩排序后的所有学生信息
* 返回值 : 无
* 其它说明:
************************************************************/
{
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;
for(j=0;j<L->length;j++) //冒泡排序法
{
for(i=L->length-1;i>j;i--)
if(L->data[i].num<L->data[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;i<L->length;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) //5.按考试类别排序
{
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;
for(j=0;j<L->length;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);
}
}
printf(" 按考试类别升序结果是\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n:");
for(i=0;i<L->length;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) //6.修改学生报考信息
{
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;
int f=0;
printf(" 请输入要修改学生的学号(学号为整形)");
scanf("%d",&num);
for(i=0;i<L->length;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);
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;i<L->length;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) //7.修改学生考试类型
{
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;i<L->length;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;i<L->length;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;j<L->length;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;i<L->length;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) //8.删除学生报考信息
{
if(L->length==0)
printf(" 没有考生报考!\n");
else
{
int num;
char kaoshi1[20];
int c=0 ,i,j;
printf(" 删除前:\n");
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;i<L->length;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,b=0;
for (i=0;i<L->length;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;j<L->length-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;i<L->length;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 tongji(SqList *&L) //9.学生信息统计
/*********************************************************
* 功能描述: 浏览全部学生信息
* 输入描述:
* 输出描述: 不存在学生时会输出"还没有学生信息,请增加学生信息" 不然就输出所有学生信息
* 返回值 : 无
* 其它说明:
************************************************************/
{
int i;
printf("\t学号\t姓名\t性别\t年龄\t籍贯\t考试类别\n");
for(i=0;i<L->length;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 main()
{
SqList *L;
InitList(L);
printf("\t\t \n");
printf("\t\t 欢迎进入学生信息管理系统\n");
while(1)
{
int 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(" 8.删除学生报考信息\n");
printf(" 9.学生信息统计\n");
printf(" 0.退出系统\n");
printf("---------------------------------------------------------------------\n");
printf("请输入菜单选项:");
scanf("%d",&n);
switch (n)
{
case 1: system("cls"); creatlist1(L); break;
case 2: system("cls"); checklist1(L); break;
case 3: system("cls"); checklist2(L); break;
case 4: system("cls"); paixu1(L); break;
case 5: system("cls"); paixu2(L); break;
case 6: system("cls"); changlist1(L); break;
case 7: system("cls"); changlist2(L); break;
case 8: system("cls"); deletelist1(L); break;
case 9: system("cls"); tongji(L); break;
case 0: return;break;
default: printf("输入有误!");
}
}
}
截图: