您的位置:首页 > 其它

课程设计: 学生信息管理系统

2016-12-29 16:09 423 查看
/*****************************************************
* 版权所有(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)
ba4d
//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("输入有误!");
}
}
}


截图:













内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: