顺序表实现学生管理系统部分功能
头文件
#ifndef _STUDENT_H_
#define _STUDENT_H_
#define MAX 40 //班级最大容纳量
#include<string.h>
//定义学员类型
typedef struct
{
char name[20]; //姓名
char sex; //性别
double score; //分数
}Stu;
//定义班级类型
typedef struct
{
Stu data[MAX]; //存储学员的数组
int len; //当前班级人数
}Class, *Class_ptr;
//创建班级
Class_ptr class_create();
//判满
int class_full(Class_ptr C);
//判空
int class_empty(Class_ptr C);
//向指定位置添加学员
int class_add(Class_ptr C,int pos,Stu s);
//输入班级学员信息
void class_input(Stu s);
//输出班级学员信息
void class_show(Class_ptr C);
//根据姓名查找学员信息
int class_search(Class_ptr C,char name[]);
//显示指定位置学员信息
Stu class_pos(Class_ptr C,int pos);
//删除指定位置学员信息
int class_delete(Class_ptr C,int pos);
//释放内存
void class_free(Class_ptr C);
#endif
源文件
#include"student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//创建班级
Class_ptr class_create()
{
Class_ptr C=(Class_ptr)malloc(sizeof(Class));
if(NULL==C)
{
printf("班级创建失败\n");
return NULL;
}
memset(C->data,0,sizeof(C->data));
C->len=0;
printf("班级创建成功\n");
return C;
}
//判满
int class_full(Class_ptr C)
{
if(NULL==C)
{
printf("班级不合法\n");
return 0;
}
return C->len==MAX;
}
//判空
int class_empty(Class_ptr C)
{
if(NULL==C)
{
printf("班级不合法\n");
return 0;
}
return C->len==0;
}
//添加学员
int class_add(Class_ptr C,int pos,Stu s)
{
if(NULL==C||class_full(C)||pos<0||pos>=C->len)
{
printf("添加失败\n");
return 0;
}
for(int i=C->len-1;i>=pos;i--){
C->data[i+1]=C->data[i];
}
C->data[pos]=s;
C->len++;
printf("添加成功\n");
return 0;
}
//输入班级学员信息
void class_input(Stu s)
{
printf("请输入学员的姓名:");
scanf("%s",s.name);
printf("请输入学员的性别(M|W):");
scanf(" %c",&s.sex);
printf("请输入学员的分数:");
scanf(" %lf",&s.score);
}
//输出班级学员信息
void class_show(Class_ptr C)
{
if(NULL==C||class_empty(C)){
printf("操作失败\n");
return ;
}
printf("当前班级人员信息如下:\n");
printf("姓名\t性别\t分数\n");
for(int i=0;i<C->len;i++){
printf("%s\t%c\t%lf\n",C->data[i].name, C->data[i].sex,C->data[i].score);
}
}
//根据姓名查找学员信息
int class_search(Class_ptr C,char name[])
{
if(NULL==C||class_empty(C)){
printf("操作失败\n");
return -1;
}
for(int i=0;i<C->len;i++){
if(strcmp(C->data[i].name,name)==0){
return i;
printf("%s\t%c\t%lf\n",C->data[i].name,\
C->data[i].sex,\
C->data[i].score);
}else{
printf("查无此人\n");
}
}
return 0;
}
//显示指定位置学员信息
Stu class_pos(Class_ptr C,int pos)
{
if(NULL==C||class_empty(C)||pos<0||pos>=C->len){
printf("操作失败\n");
return ;
}
printf("%s\t%c\t%lf\n",C->data[pos].name,\
C->data[pos].sex,\
C->data[pos].score);
return C->data[pos];
}
//删除学员信息
int class_delete(Class_ptr C,int pos)
{
if(NULL==C||class_empty(C)||pos<0||pos>=C->len){
printf("删除失败\n");
return -1;
}
for(int i=pos+1;i<C->len;i++){
C->data[i-1]=C->data[i];
}
C->len--;
printf("删除成功\n");
return 1;
}
//释放内存
void class_free(Class_ptr C)
{
if(NULL!=C)
{
free(C);
C=NULL;
}
}
测试文件
#include"student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
Class_ptr C=class_create();
if(NULL==C){
return -1;
}
int choice,n,i;
Stu a,b,c;
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(1)
{
printf("请选择功能:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入学生人数:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("第%d个学生:\n",i+1);
class_input(C->data[i]);
}
C->len=n;
break;
case 2:
class_show(C);
break;
case 3:;
char name[20];
printf("请输入要查找学生的姓名:");
scanf("%s",name);
class_search(C,name);
break;
case 4:
printf("请输入要查询的位置:");
int pos1;
scanf("%d",&pos1);
class_pos(C,pos1);
break;
case 5:
printf("请输入要添加的位置:");
int pos2;
scanf("%d",&pos2);
printf("请输入此人信息:\n");
class_input(c);
if(class_add(C,pos2,c)){;
printf("插入成功\n");
}else{
printf("插入失败\n");
}
break;
case 6:
printf("请输入要删除学员的位置:");
int pos3;
scanf("%d",&pos3);
class_delete(C,pos3);
break;
case 7:
printf("已录入学员个数为:%d\n",C->len);
break;
case 8:
class_free(C);
break;
default:
printf("输入不合理\n");
}
}
return 0;
}