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

/*****************************************************  
* 版权所有(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("输入有误!");
		} 
	}
}


截图:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值