顺序表(作业一)

题目:用顺序表实现学生信息管理系统。

代码:

#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define MASZIZE 100
#define OK	1
#define OVERFLOW -1
using namespace std;
typedef int Status;
//学生信息结构体 
typedef struct Student
{
	char num[20];     
	char name[20];   
	int score;   
}Student; 

typedef struct SqList
{
	Student *elem;   //指向数据元素的基地址
	int length;      //线性表的当前项的个数 
}SqList;

void InitList(SqList &L)
{      
	//构造一个空的顺序表 L
	//SqList L; 
 	L.elem = new Student[MASZIZE];   //为顺序表分配一个空间  
	L.length=0;                      //空表长度为0 
	printf("链表创建成功!\n");
}

//顺序表的取值 


//顺序表的查找,查找学生信息 
void  LocatedStud(SqList &L)
{  //查找指定元素
		Student e;//SqList L;
		int ans=0;
		printf("请输入您要查找的人的学号:\n");
		scanf("%s",&e.num);
		for(int i=0;i<L.length;i++)
		if(strcmp(L.elem[i].num,e.num)==0) 
		{
			ans=1; 
			cout<<"学号:"<<endl;
			cout<<L.elem[i].num<<endl;
			cout<<"姓名:"<<endl;
			cout<<L.elem[i].name<<endl;
			cout<<"成绩:"<<endl;
			cout<<L.elem[i].score<<endl;
		}
		if(ans==0)
		printf("对不起,没有您要查找的人!\n"); 
}	
 
void ListInsert(SqList &L)
{ 
	//顺序表的插入,插入学生信息
	Student e;
	Student p;
	//SqList L;
	int i,j;
	printf("请输入要插入的位置:\n");
	scanf("%d",&i);
   if(i<1||(i>L.length+1) ) 
  	{
  	 printf("输入插入位置错误,插入失败,请重新选择操作\n");  	
  	}
   else
   {
   	printf("请输入要插入的学生的信息:\n"); 
	printf("学号:");  
    scanf("%s",p.num); 
    printf("姓名:");  
    scanf("%s",p.name);  
	printf("成绩:");  
    scanf("%d",&p.score);
   	for(int j=L.length-1;j>=i-1;j--)
   	L.elem[j+1]=L.elem[j];      //插入位置及之后的元素后移 
   	L.elem[i-1]=p;            //将新元素p放入第i个位置 
   	++L.length;             //表长加1 
   	printf("插入成功\n");
   }
} 

//顺序表的删除,删除学生信息 
void ListDelete(SqList &L)
{	
//删除
	//SqList L;
	int i;
	printf("请输入您要删除信息的学生位置:\n");
	scanf("%d",&i);
	if((i<1)||i>L.length+1)	
	printf("输入删除位置错误,删除失败,请重新选择操作\n");	
	for(int j=i;j<=L.length-1;j++)		
	L.elem[j-1]=L.elem[j];
	--L.length;
	printf("删除成功!\n");  
}

//存储输入学生信息,姓名、学号、成绩 
void inputS(SqList &L)
{    
		int sum,i;
		//SqList L;
		Student e;
		printf("请输入学生个数:\n");
		scanf("%d",&sum);
		for(i=0;i<sum;i++)
		{
			printf("请输入学号:\n");
			scanf("%s",&L.elem[i].num); 
			printf("请输入姓名:\n");
			scanf("%s",&L.elem[i].name);
			printf("请输入成绩:\n");
			scanf("%d",&L.elem[i].score);
			L.length++;
		}	
}

//输出学生信息
void outputs(SqList &L)
{    
	Student e[MASZIZE];
	//SqList L;
	int i; 
	for(int i=0;i<L.length;i++)
	 {
	 	printf("学号:%s\n",L.elem[i].num);
		printf("姓名:%s\n",L.elem[i].name);
		printf("成绩:%d\n",L.elem[i].score);
	 }  	
}

//功能实现 
int main ()
{
   int n,s,m,len,t;
   SqList L;
	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");	
	while(OK)
	{
		scanf("%d",&n);
		switch(n)
		{
			case 1:
				InitList(L);
				break;
				
			case 2:
				inputS(L);
				break;
			case 3:
	            ListInsert(L); 
				break;
			case 4:
				LocatedStud(L);
				break;
			case 5:
				outputs(L);
				 break;
			case 6:
				 ListDelete(L); 
				    
				 	break;
			case 7:
				printf("学生总人数为:%d\n",L.length);
				break;
			case 8:
			  exit(0);
		} 
	 }
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值