https://note.youdao.com/s/SwyFfOgRhttps://note.youdao.com/s/SwyFfOgR
头文件
#ifndef _STULIST_H_
#define _STULIST_H_
#include
#include
#include
#define MAX 40
typedef struct STU{
char name[20];
char sex[10];
int score;
}datatype;
typedef struct {
datatype data[MAX];
int len;
}stuList,*stuListPtr;
//创建顺序表
stuListPtr list_create();
//判满
int list_full(stuListPtr S);
//判空
int list_empty(stuListPtr S);
//向顺序表中添加元素
int list_add(stuListPtr S);
//遍历顺序表
void list_show(stuListPtr S);
//任意位置插入元素
int list_insert_pos(stuListPtr S);
//任意位置删除元素
int list_delete_pos(stuListPtr S);
//按位置进行修改
int list_update_pos(stuListPtr S);
//按值进行修改
int list_update_value(stuListPtr S);
//查找指定位置的元素
datatype *list_search_pos(stuListPtr S);
//按值进行查找元素,返回查到的位置
int list_search_value(stuListPtr S);
//清空顺序表
void list_free(stuListPtr S);
//功能菜单
void menu();
#endif
函数功能具体实现
#include"stulist.h"
//创建班级顺序表****************************************
stuListPtr list_create(){
stuListPtr S=(stuListPtr)malloc(sizeof(stuList));
if(NULL==S){
printf("申请失败\n");
return NULL;
}
memset(S->data, 0, sizeof(S->data)); //清空数组
S->len = 0; //数组长度清零
printf("申请成功\n");
return S;
}
//判满***********************************************
int list_full(stuListPtr S){
if(NULL==S){
printf("不合法\n");
return 0;
}
return S->len==MAX;
}
//判空***************************************************
int list_empty(stuListPtr S){
if(NULL==S){
printf("不合法\n");
return 0;
}
return S->len==0;
}
//向班级中添加成员*****************************************
int list_add(stuListPtr S){
if(NULL==S||list_full(S)){
printf("不合法\n");
return 0;
}
for(S->len=0;S->lenlen++){
int value=0;
printf("是否添加学生信息?(1/0)\n");
scanf("%d",&value);
if(value==1){
puts("请按以下格式输入学生信息");
printf("第%d个学生:\n",S->len+1);
printf("姓名:");
scanf("%s",S->data[S->len].name);
printf("性别:");
scanf("%s",S->data[S->len].sex);
printf("成绩:");
scanf("%d",&S->data[S->len].score);
printf("添加成功\n");
}
else if(value==0){
printf("添加结束\n");
return 0;
}
}
}
//遍历顺序表**********************************
void list_show(stuListPtr S){
if(NULL==S||list_empty(S)){
printf("不合法\n");
return;
}
for(int i=0;ilen;i++){
printf("第个%d学生的信息为:\n",i+1);
printf("姓名:%s\n",S->data[i].name);
printf("性别:%s\n",S->data[i].sex);
printf("成绩:%d\n",S->data[i].score);
}
}
//任意位置插入元素***************************************
int list_insert_pos(stuListPtr S){
if(NULL==S||list_full(S)){
printf("不合法\n");
return 0;
}
int k,j;
printf("请问要不要添加学生信息?(1/0)\n");
scanf("%d",&j);
if(j==1){
printf("请问需要在哪插入学生信息?\n");
scanf("%d",&k);
if(k>S->len||k<1||j==0){
printf("插不了一点\n");
return 0;
}
for(int i=S->len-1;i>k-1;i--){
S->data[S->len]=S->data[S->len-1];
printf("请输入需要插入学员信息\n");
printf("姓名:");
scanf("%s",S->data[k-1].name);
printf("性别:");
scanf("%s",S->data[k-1].sex);
printf("成绩:");
scanf("%d",&S->data[k-1].score);
S->len++;
return 1;
}
}
}
//任意位置删除元素*******************************
int list_delete_pos(stuListPtr S){
if(NULL==S||list_empty(S)){
printf("空表删毛!\n");
return 0;
}
int i=0;
printf("请问想删第几个学生的信息?\n");
scanf("%d",&i);
if(i<1||i>S->len){
printf("删毛\n");
return 0;
}
for(int j=i;jlen;j++){
S->data[j-1]=S->data[j];
}
printf("删除成功\n");
S->len--;
return 1;
}
//按位置进行修改********************************
int list_update_pos(stuListPtr S){
if(NULL==S||list_empty(S)){
printf("空表改毛!\n");
return 0;
}
int pos=0;
printf("请问想修改哪个学生的信息?\n");
scanf("%d",&pos);
if(pos<1||pos>S->len){
printf("改毛\n");
return 0;
}
printf("请输入需要修改学员的信息\n");
printf("姓名:");
scanf("%s",S->data[pos-1].name);
printf("性别:");
scanf("%s",S->data[pos-1].sex);
printf("成绩:");
scanf("%d",&S->data[pos-1].score);
printf("修改成功\n");
return 1;
}
//按值进行修改***********************************
int list_update_value(stuListPtr S){
if(NULL==S||list_empty(S)){
printf("空表改毛!\n");
return 0;
}
char n[32];
int pos=0;
printf("请问要修改哪个学生的信息?\n");
scanf("%s",n);
for(int i=0;ilen;i++){
if(strcmp(S->data[i].name,n)!=0){
printf("查无此人\n");
return 0;
}
if(strcmp(S->data[i].name,n)==0){
pos=i+1;
printf("请输入需要修改学员的信息\n");
printf("姓名:");
scanf("%s",S->data[pos-1].name);
printf("性别:");
scanf("%s",S->data[pos-1].sex);
printf("成绩:");
scanf("%d",&S->data[pos-1].score);
printf("修改成功\n");
return 1;
}
}
}
//查找指定位置的元素*******************************
datatype *list_search_pos(stuListPtr S){
if(NULL==S||list_empty(S)){
printf("空表查毛!\n");
return NULL;
}
int pos=0;
printf("请输入需要查找学生编号\n");
scanf("%d",&pos);
if(pos<1||pos>S->len){
printf("查毛\n");
return NULL;
}
printf("该学生信息为:\n");
printf("姓名\t性别\t成绩\n%s\t%s\t%d\n",S->data[pos-1].name,S->data[pos-1].sex,S->data[pos-1].score);
printf("查找完成!\n");
return &S->data[pos-1];
}
//按值进行查找元素,返回查到的位置********************
int list_search_value(stuListPtr S){
if(NULL==S||list_empty(S)){
printf("空表查毛!\n");
return 0;
}
int pos=0;
char n[32];
printf("请输入需要查找学生姓名\n");
scanf("%s",n);
for(int i=0;ilen;i++){
if(strcmp(S->data[i].name,n)!=0){
printf("查无此人\n");
return 0;
}
if(strcmp(S->data[i].name,n)==0){
pos=i+1;
printf("该学生是%d号学生\n",pos);
printf("查找成功!\n");
return pos;
}
}
}
//清空顺序表********************************
void list_free(stuListPtr S){
if(NULL != S)
{
free(S);
S = NULL; //值传递
}
printf("释放表成功\n");
}
void menu()
{
puts("******************************************");
puts("+++++++++++欢迎来到学生管理系统+++++++++++");
puts("******************************************");
puts("+++++****** 1.添加学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 2.姓名查找学生 ******+++++++");
puts("******************************************");
puts("+++++****** 3.显示学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 4.删除学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 5.按号码查找学生 ******+++++++");
puts("******************************************");
puts("+++++****** 6.按姓名修改学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 7.清空学生信息 ******+++++++");
puts("******************************************");
puts("+++++****** 0.退出学生系统 ******+++++++");
puts("******************************************");
puts("+++++ 请输入对应序号执行对应的操作 +++++");
puts("******************************************");
}
主函数
#include"stulist.h"
int main(int argc, const char *argv[])
{
stuListPtr S=list_create();
if(S==0){
printf("申请失败\n");
return -1;
}
int a=0;
while(1)
{
menu();
scanf("%d",&a);
switch(a)
{
case 1 :
list_add(S);
break;//输入信息
case 2 :
list_search_value(S);
break;//根据name查找信息
case 3 :
list_show(S);
break;//显示所有学生信息
case 4 :
list_delete_pos(S);
break;//删除学生
case 5 :
list_search_pos(S);
break;//按号码查找学生
case 6 :
list_update_value(S);
break;//按姓名修改信息
case 7 :
list_free(S);
break;//清空学生信息
case 0 :return 0;
default:break;
}
}
return 0;
}