思维导图
源文件:1.c
#include"1.h"
SqlListPtr creat()//创新顺序表
{
SqlListPtr p=(SqlListPtr )malloc(sizeof(SqlList));
if(NULL==p)
{
printf("创建失败");
return 0;
}
p->len=0;
bzero(p->name,sizeof(p->name));
bzero(p->age,sizeof(p->age));
bzero(p->Score,sizeof(p->Score));
printf("创建成功\n");
return p;
}
int empt(SqlListPtr p)//判空
{
if(NULL==p)
{
return -1;
}
return p->len==0;
}
int full(SqlListPtr p)//判满
{
if(NULL==p)
{
printf("判满失败");
return -1;
}
return p->len==max;
}
int add(SqlListPtr p,int b)//尾插数据
{
if(NULL==p||full(p))
{
printf("增加失败");
return -1;
}
else
{
for(int i=0;i<b;i++)
{
printf("请输入学生ID");
scanf("%d",&p->ID[p->len]);
printf("请输入姓名:");
scanf("%s",p->name[p->len]);
printf("请输入年龄:");
scanf("%d",&p->age[p->len]);
printf("请输入成绩:");
scanf("%f",&p->Score[p->len]);
p->len++;
}
return 1;
}
}
void show(SqlListPtr p)//打印数据
{
if(NULL==p||empt(p))
{
printf("查看失败\n");
return ;
}
for(int i=0;i<p->len;i++)
{
printf("%d的姓名为%s\t年龄为%d\t成绩为%.1f\n",p->ID[i],p->name[i],p->age[i],p->Score[i]);
}
}
void change(SqlListPtr p,int a)//修改数据
{
int n =0;
int flag =1;
for(int i=0;i<p->len&&flag==1;i++)
{
if(a==p->ID[i])
{
flag=0;
}
n++;
}
if(NULL==p||empt(p)||n>p->len)
{
printf("失败");
return ;
}
printf("请输入要修改的ID");
scanf("%d",&p->ID[n-1]);
printf("请输入要修改为的姓名");
scanf("%s",p->name[n-1]);
printf("请输入要修改为的年龄");
scanf("%d",&p->age[n-1]);
printf("请输入要修改为的成绩");
scanf("%1f",&p->Score[n-1]);
return ;
}
void del(SqlListPtr p,int a)//删除数据
{
int n =0;
int flag =1;
for(int i=0;i<p->len&&flag==1;i++)
{
if(a==p->ID[i])
{
flag=0;
}
n++;
}
if(NULL==p||empt(p)||n>p->len)
{
printf("失败");
return ;
}
for(int i=0;i<p->len-n;i++)
{
p->ID[n+i-1]=p->ID[n+i];
strcpy(p->name[n+i-1],p->name[n+i]);
p->age[n+i-1]=p->age[n+i];
p->Score[n+i-1]=p->Score[n+i];
}
p->len--;
return ;
}
void insert(SqlListPtr p,int a)//任意位置插入
{
int flag=1;
if(NULL==p||empt(p)||a>p->len+1)
{
printf("插入失败");
return;
}
for(int i=0;i<p->len+1-a;i++)
{
p->ID[p->len-i]=p->ID[p->len-1-i];
p->age[p->len-i]=p->age[p->len-1-i];
p->Score[p->len-i]=p->Score[p->len-1-i];
strcpy(p->name[p->len-i],p->name[p->len-1-i]);
}
printf("请输入要修改的ID");
scanf("%d",&p->ID[a-1]);
printf("请输入要修改为的姓名");
scanf("%s",p->name[a-1]);
printf("请输入要修改为的年龄");
scanf("%d",&p->age[a-1]);
printf("请输入要修改为的成绩");
scanf("%1f",&p->Score[a-1]);
p->len++;
return ;
}
void search(SqlListPtr p,int a)
{
int n =0;
int flag =1;
for(int i=0;i<p->len&&flag==1;i++)
{
if(a==p->ID[i])
{
flag=0;
}
n++;
}
if(NULL==p||empt(p)||n>p->len&&n<p->len)
{
printf("查找失败");
}
n=n-1;
printf("%d的姓名为%s\t年龄为%d\t成绩为%.1f\n",a,p->name[n],p->age[n],p->Score[n]);
}
void deduplicate(SqlListPtr p)
{
if(NULL==p||empt(p))
{
printf("去重失败");
}
for(int i=0;i<p->len;i++)
{
for(int j=i+1;j<p->len;j++)
{
if(p->ID[i]==p->ID[j])
{
del(p,j);
j--;
}
}
}
}
void myfree(SqlListPtr p)
{
if(NULL==p)
{
printf("销毁失败");
}
free(p);
printf("销毁成功");
p=NULL;
}
头文件:1.h
#ifndef __1__
#define __1__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 30
#endif
typedef struct student
{
int ID[30];
char name[max][30];
int age[max];
float Score[max];
int len;
}SqlList,*SqlListPtr ;
//创建顺序表
SqlListPtr creat();
//判空
int empt(SqlListPtr p);
//判满
int full(SqlListPtr p);
//增加数据
int add(SqlListPtr p,int b);
//展示数据
void show(SqlListPtr p);
//修改信息
void change(SqlListPtr p,int a);
//删除数据
void del(SqlListPtr p,int a);
//插入数据
void insert(SqlListPtr p,int a);
//按照ID查找学生信息
void search(SqlListPtr p,int a);
//去除学号相同的学生信息
void deduplicate(SqlListPtr p);
//销毁文件
void myfree(SqlListPtr p);
测试文件:main
文件名:2.c
#include"1.h"
int main(int argc, const char *argv[])
{
SqlListPtr p=NULL;
int flag=1;
while(flag)
{
printf("*************************************************************\n");
printf("1.创建顺序表\n");
printf("2,增加数据\t\t3.查看数据\t\t4.修改数据\n");
printf("5.删除数据\t\t6.插入\t\t 7.按ID查找\n");
printf("8.去重 \t\t9.退出\t\t 10.销毁文件\n");
printf("10.创建顺序表\n");
printf("**************************************************************\n");
printf("请输入功能:\n");
int a=0;
scanf("%d",&a);
switch(a)
{
case 1:
{
p=creat();
break;
}
case 2:
{
int b=0;
printf("请输入增加几个人的数据");
scanf("%d",&b);
add(p,b);
break;
}
case 3:
{
show(p);
break;
}
case 4:
{
int b=0;
printf("请输入要修改学生的ID");
scanf("%d",&b);
change(p,b);
break;
}
case 5:
{
int b=0;
printf("请输入要删除的学生ID:");
scanf("%d",&b);
del(p,b);
break;
}
case 6:
{
int b=0;
printf("请输入要插入的位置");
scanf("%d",&b);
insert(p,b);
break;
}
case 7:
{
int b=0;
printf("请输入你要查找的ID");
scanf("%d",&b);
search(p,b);
break;
}
case 8:
{
deduplicate(p);
break;
}
case 9:
{
flag=0;
break;
}
case 10:
{
myfree(p);
p=NULL;
}
}
}
return 0;
}
运行截图: