菜单创建:
main.c
#include "list.h"
int main(int argc, const char *argv[])
{
int ch;
PList L;
while(1)
{
printf("\t\t\t1.输入学生信息\n");
printf("\t\t\t2.输出学生信息\n");
printf("\t\t\t3.按照学号查找\n");
printf("\t\t\t4.按照学号修改分数\n");
printf("\t\t\t5.按位置插入\n");
printf("\t\t\t6.按位置删除\n");
printf("\t\t\t7.按学号删除\n");
printf("\t\t\t8.删除重复学号学生\n");
printf("\t\t\t9.按姓名排序\n");
printf("\t\t\t10.按位置查找\n");
printf("\t\t\t11.按位置修改\n");
printf("请输入你的选择:");
scanf("%d",&ch);
getchar();//吸收enter键
switch(ch)
{
case 1:
L = create();
input_list(L);
break;
case 2:
output_list(L);
break;
case 3:
search(L);
break;
case 4:
find_id_score(L);
output_list(L);
break;
case 5:
{
stu e = {1009,"张永健",99.9};
insert_list(L,2,e);
output_list(L);
}
break;
case 6:
dele_list(L,2);
output_list(L);
break;
case 7:
find_id_dele(L,1002);
output_list(L);
break;
case 8:
dele_recover(L);
output_list(L);
break;
case 9:
maopao(L);
output_list(L);
break;
case 10:
find_pos(L,2);//按位置2查找
break;
case 11:
{
stu e = {1009,"杨铿",98};
change_pos(L,2,e);
}
break;
case 0:
break;
}
}
return 0;
}
list.c
#include"list.h"
PList create()
{
PList p = malloc(sizeof(list));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->len=0;
return p;
}
void input_list(PList L)
{
int n,i;
printf("请输入学生数量");
scanf("%d",&n);
for(i = 0;i<n;i++)
{
printf("请输入第%d个学生的信息:",i+1);
scanf("%d%s%f",&L->data[i].id,
L->data[i].name,&L->data[i].score);
L->len++;
}
}
void output_list(PList L)
{
int i;
printf("信息如下:\n");
for(i=0;i<L->len;i++)
{
printf("学号:%d\t姓名%s\t分数:%.2f\n",
L->data[i].id,L->data[i].name,L->data[i].score);
}
}
int search(PList L)
{
int id,i,sub=-1;
printf("请输入要查找的学号:");
scanf("%d",&id);
for(i = 0;i<L->len;i++)
{
if(id == L->data[i].id)
{
sub = i;
}
}
if(sub==-1)
{
printf("查找失败\n");
}
else
{
printf("查找成功,该学生在第%d个位置\n",sub+1);
return sub;
}
return -1;
}
void find_id_score(PList L)
{
float score;
int sub = search(L);
if(sub==-1)
{
printf("没有该学生无法修改\n");
}
else
{
printf("请输入要修改的成绩:");
scanf("%f",&score);
L->data[sub].score = score;
printf("修改成功\n");
}
printf("len = %d\n",L->len);
}
void insert_list(PList L,int pos,stu e)
{
int i,sub = pos-1;
if(sub<0||sub>L->len+1||L->len==MAX||L==NULL)
{
printf("插入失败\n");
}
else{
for(i = L->len-1;i>=sub;i--)
{
L->data[i+1] = L->data[i];
}
L->data[sub] = e;
L->len++;
printf("插入成功\n");
}
}
int empty(PList L)
{
if(L->len ==0)
{
return 1;
}
else
return 0;
}
void dele_list(PList L,int pos)
{
int i,sub=pos-1;
if(sub<0||sub>L->len-1||empty(L)||L==NULL)
{
printf("删除失败\n");
}
else{
for(i = sub;i<L->len;i++)
{
L->data[i] = L->data[i+1];
}
L->len--;
printf("删除成功\n");
}
}
void find_id_dele(PList L,int id)
{
int i=0,j=L->len-1,mid,sub;
while(i<=j)
{
mid = (i+j)/2;
if(id>L->data[mid].id)
{
i = mid+1;
}
else if(id<L->data[mid].id)
{
j = mid-1;
}
else{
sub = mid;
break;
}
}
if(sub==-1)
{
printf("孩子不存在\n");
}
else
{
printf("查找成功,该学生存在第%d个位置\n",sub);
dele_list(L,sub+1);
}
}
void dele_recover(PList L)
{
int i,j;
for(i = 0;i<L->len;i++)
{
for(j = i+1;j<L->len;j++)
{
if(L->data[i].id==L->data[j].id)
{
dele_list(L,i+1);
i--;
}
}
}
printf("len = %d\n",L->len);
}
void maopao(PList L)
{
int i,j;
stu t;
for(i = 1;i<L->len;i++)
{
for(j=0;j<L->len-i;j++)
{
if(strcmp(L->data[j].name,L->data[j+1].name)>0)
{
t= L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = t;
}
}
}
}
void find_pos(PList L,int pos)
{
int sub = pos -1;
if(sub<0||sub>L->len-1||empty(L)||L==NULL)
{
printf("查找失败\n");
}
else
{
printf("存在该学生\n");
printf("学生是:%s\n",L->data[sub].name);
}
}
void change_pos(PList L,int pos,stu e)
{
int sub = pos-1;
if(sub<0||sub>L->len-1||empty(L)||L==NULL)
{
printf("修改失败\n");
}
else
{
L->data[sub] = e;
printf("修改成功\n");
}
}
list.h
#ifndef _LIST_H_
#define _LIST_H_
#define MAX 1000
#include<myhead.h>
typedef struct
{
int id;
char name[20];
float score;
}stu;
typedef struct
{
stu data[MAX];
int len;
}list,*PList;//顺序结构表体
PList create();
void input_list(PList);
void output_list(PList);
int search(PList);
void find_id_score(PList);
void insert_list(PList,int,stu);
void dele_list(PList,int);
int fun(PList);
int empty(PList);
void find_id_dele(PList,int);
void dele_recover(PList);
void maopao(PList);
void find_pos(PList,int);
void change_pos(PList,int pos,stu e);
#endif
作业:
1、创建菜单
2、录入学生信息(姓名,年龄,分数,电话)
3、输入学生姓名,查找该学生是否存在,存在,就删除该学生前面的一个学生。
4、计算学生的平均成绩,删掉低于平均成绩的所有学生。
main.c
#include "list.h"
int main(int argc, const char *argv[])
{
int num;
int j;
Plist L;
while(1)
{
printf("\t\t\t1.录入学生信息\n");
printf("\t\t\t2.输入学生姓名,删除同学查找里的前一个学生\n");
printf("\t\t\t3.计算学生的平均成绩,删除低于平均成绩的所有学生\n");
scanf("%d",&num);
getchar();
switch(num)
{
case 1:
L = create();
input_list(L);
output_list(L);
break;
case 2:
j=find_name(L);
dele_list(L,j);
output_list(L);
break;
case 3:
avg_list(L);
dele_avg_list(L);
output_list(L);
break;
case 0:
break;
}
}
return 0;
}
list.c
#include "list.h"
Plist create()
{
Plist p = malloc(sizeof(list));
if(p == NULL)
{
printf("创建失败\n");
return NULL;
}
p->len=0;
return p;
}
void input_list(Plist L)
{
int n,i;
printf("请输入学生数量");
scanf("%d",&n);
for(i = 0;i<n;i++)
{
printf("请输入第%d个学生的信息:",i+1);
scanf("%s%d%f%d",L->data[i].name,&L->data[i].age,&L->data[i].score,&L->data[i].number);
L->len++;
}
}
void output_list(Plist L)
{
int i;
printf("信息如下:\n");
for(i = 0;i<L->len;i++)
{
printf("姓名:%s\t年龄:%d\t分数:%.2f\t号码:%d\n",\
L->data[i].name,L->data[i].age,L->data[i].score,L->data[i].number);
}
}
int find_name(Plist L)
{
char name[20];
printf("请输入要查找的学生姓名:");
scanf("%s",name);
for(int i = 0;i<L->len;i++)
{
if(strcmp(name,L->data[i].name)==0)
{
return i;
}
}
return -1;
}
list.h
#ifndef _LIST_H_
#define _LIST_H_
#define MAX 1000
#include<myhead.h>
typedef struct
{
char name[20];
int age;
float score;
int number;
}stu;
typedef struct
{
stu data[MAX];
int len;
}list,*Plist;
Plist create();
void input_list(Plist);
void output_list(Plist);
int find_name(Plist);
void dele_list(Plist,int);
float avg_list(Plist L);
void dele_avg_list(Plist L);
#endif