使用顺序表编写程序设计一个学生信息管理系统,实现对某个班级学生信息的录入建表、查询、删除、插入。基本要求为: (1) 建立一个班的学生信息表,每个学生的信息由学号、姓名、高数成绩、计算机成绩、数学成绩、三门课平均成绩六个数据项构成。 (2) 需要实现对学生信息表的查询、删除、插入、打印。
函数接口定义:
数据类型是定义为:
#include <stdio.h>
#define MAXSIZE 1000
typedef struct student
{
int num;
char name[20];
int math;
int english;
int computer;
double average;
}ElemType;
typedef struct List
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
需要完成的函数接口为:
void InitList(SeqList *L);
int GetData(SeqList *L,ElemType e);
int InsList(SeqList *L,int i,ElemType e);
int DelList(SeqList *L,int i,ElemType *e);
void OutputList(SeqList *L);
在这里解释接口参数。例如:其中 N
和 D
都是用户传入的参数。 N
的值不超过int
的范围; D
是[0, 9]区间内的个位数。函数须返回 N
中 D
出现的次数。
裁判测试程序样例:
#include <stdio.h>
#define MAXSIZE 1000
typedef struct student
{
int num;
char name[20];
int math;
int english;
int computer;
double average;
}ElemType;
typedef struct List
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
void InitList(SeqList *L);
int GetData(SeqList *L,ElemType e);
int InsList(SeqList *L,int i,ElemType e);
int DelList(SeqList *L,int i,ElemType *e);
void OutputList(SeqList *L);
void InputList(SeqList *L);
int main()
{
int i;
SeqList L;
ElemType t;
InitList(&L);
InputList(&L);
scanf("%d%d%d%d",&t.num,&t.math,&t.computer,&t.english);
getchar();
scanf("%s",t.name);
getchar();
scanf("%d",&i);
InsList(&L,i,t);
printf("%d\n",GetData(&L,t));
DelList(&L,i+3,&t);
OutputList(&L);
return 0;
}
/* 请在这里填写答案 */
void InitList(SeqList *L)
{
}
int GetData(SeqList *L,ElemType e)
{
}
int InsList(SeqList *L,int i,ElemType e)
{
}
int DelList(SeqList *L,int i,ElemType *e)
{
}
void OutputList(SeqList *L)
{
}
输入样例:
在这里给出一组输入。例如:
1 90 98 90
panfangfang
2 98 76 86
zhourui
3 98 89 80
wuhaifeng
4 89 97 67
zhouwenjing
5 89 36 78
mahaitao
9 69 98 70
xiangnian
2
输出样例:
在这里给出相应的输出。例如:
2
1 panfangfang 90 98 90 92.000000
9 xiangnian 69 98 70 0.000000
2 zhourui 98 76 86 86.000000
3 wuhaifeng 98 89 80 89.000000
5 mahaitao 89 36 78 67.000000
接口实现:
void InitList(SeqList *L)
{
L->last=-1;
}
int GetData(SeqList *L,ElemType e)
{
int i=0;
while(i<=L->last&&L->elem[i].num!=e.num)
{
i++;
}
if(i<=L->last)
return i+1;
else
return -1;
}
int InsList(SeqList *L,int i,ElemType e)
{
int k=0;
if(L->last>=MAXSIZE-1)
{
return -1;
}
if(i>L->last+2||i<1)
{
return -1;
}
for(k=L->last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->last++;
return 0;
}
int DelList(SeqList *L,int i,ElemType *e)
{
int k=0;
if(i<1||i>L->last+1)
{
return -1;
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
{
L->elem[k-1]=L->elem[k];
}
L->last--;
return 0;
}
void OutputList(SeqList *L)
{
int i=0;
for(i=0;i<=L->last;i++)
{
printf("%d %s %d %d %d %f\n",L->elem[i].num,L->elem[i].name,L->elem[i].math,L->elem[i].computer,L->elem[i].english,L->elem[i].average);
}
}