用顺序表实现学生信息管理系统

用顺序表实现学生信息管理系统

问题描述:
定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。

#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100

 
typedef struct{
     
	char no[20];       // 学号 
	char name[20];    // 姓名 
	int price;        // 成绩 
}Student;

typedef struct{
     
	Student elem[MAXSIZE]; //线性表占用的数组空间 
	int last;    //最后一个元素的下标
}SeqList;

int Locate(SeqList *L,Student e)   //按照姓名查找 
{
         /*用e返回L中第i个数据元素的值*/ 
    int i;
    for(i=0;i<L->last+1;i++)
	{
     
		if(!strcmp(L->elem[i].name,e.name)) //比较两个字符串是否相同 
		return i+1;  
    }
    return 0;
}

int InsList(SeqList *L,int i,Student e)   //插入学生信息 
{
         /*在L中第i个位置之前插入新的数据元素e,L的长度加1*/ 
	int k;
	if(i<1||(i>L->last+2))
	{
     
		return 0;
	}
	for(k=L->last;k>=i-1;k--) //元素向后移动位置
	L->elem[k+1]=L->elem[k];
	L->elem[i-1]=e;
	L->last++;
	return 1;
}

int DelList(SeqList *L,int i) //删除指定位置学生记录 
{
           
	int k;
	if(i<1||i>L->last+1)
	return 0;
	for(k=i;k<=L->last;k++) 
	{
     
		L->elem[k-1]=L->elem[k]; //将后面元素依次前移 
	}
	L->last--;
	return 1;
}

int main()
{
     
	int i,x,a,temp,select,sum=0,c;
	SeqList L;
	Student m,e;
	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("********************************************************************\n");
	printf("\n"); 
	while(select)
	{
     
		printf("请选择你要操作的选项:");
		scanf("%d",&select);
		printf("\n");
		switch(select)
		{
     
			case 1:
				
			    printf("请输入学生的数量:"); 
			    scanf("%d",&x);
			    printf("\n");
			    sum=x; 
			    for(i=0;i<x;i++)
			    {
     
			    	printf("第%d位学生信息\n",i+1);
			    	printf("\n");
				    printf("学号:");
				    scanf("%s",L.elem[i].no);
				    printf("-----------------------------\n");
				    printf("姓名:");
				    scanf("%s",L.elem[i].name);
				    printf("-----------------------------\n");
				    printf("成绩:");
				    scanf("%d",&L.elem[i].price);
				    printf("-----------------------------\n");
			    } 
			    L.last=x;
			    printf("\n");
			    break;
			    
			case 2:
				
			    printf("所有学生的相关信息为:\n\n");
			    for(i=0;i<L.last;i++)
			    {
     
			    	printf("学号:%s 姓名:%s 成绩:%d\n\n",L.elem[i].no,L.elem[i].name,L.elem[i].price);
				}
				printf("\n");
				break;
				 
			case 3:
				
			    printf("请输入你要查找的姓名:");
			    scanf("%s",e.name);
			    temp=Locate(&L,e);
			    if(temp!=0)
			    printf("学号:%s 成绩:%d\n\n",L.elem[temp-1].no,L.elem[temp-1].price);
			    else
			    printf("查找失败!\n\n");
			    break;
			    
			case 4:
				
			    printf("请输入你要查询的位置:");
				scanf("%d",&i);
				if(i<=0||i>L.last)
				printf("查询失败!\n\n");
				else
				printf("该位置的学生信息为\n学号:%s 姓名:%s 成绩:%d\n\n\n",
				L.elem[i-1].no,L.elem[i-1].name,L.elem[i-1].price);
				break; 
			    
			case 5:
				
				printf("请输入你要插入的位置:");
				scanf("%d",&a);
				printf("请输入插入学生信息:\n");
				printf("学号:");
				scanf("%s",m.no);
				printf("姓名:");
				scanf("%s",m.name);
				printf("成绩:");                                                                                
				scanf("%d",&m.price);
				if(InsList(&L,a,m))
				{
     
					sum++;
					printf("插入成功!\n\n"); 
				}
				else
				    printf("插入失败!\n\n");
				break;
				
			case 6:
				
				printf("请输入要删除学生的位置:");
			    scanf("%d",&c);
			    if(DelList(&L,c))
			    {
     
			    	sum--;
			    	printf("删除成功!\n\n");
				}
			    else
			        printf("删除失败!\n\n");
			    break;
			
			case 7:
				
				{
     
					printf("总学生个数为:%d\n\n",sum);
				}
				break;
			case 8:
			    {
     
			    	printf("\n退出系统成功!请按任意键结束!\n");
			    	exit(0);
				}
				break; 		
		} 
	}
	return 0;
} 

你可能感兴趣的:(C语言,顺序表)