1、顺序表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建顺序表(堆区),2录入学生信息,3插入一个学生信息,4删除一个学生信息,5按照位置修改一个学生信息,6、按照姓名顺序查找一个学生是否存在7、对学生年龄直接插入排序(从小到大)
要求:
1、学生信息结构体姓名,分数,年龄,电话。
2、其他功能函数自定义,分文件
主函数文件 main.c
#include "link.h"
int main(int argc, const char *argv[])
//1、顺序表实现学生管理系统(参照顺序表技能)
//写出菜单界面switch选择,
//功能1创建顺序表(堆区),
//2录入学生信息,
//3插入一个学生信息,
//4删除一个学生信息,
//5按照位置修改一个学生信息,
//6、按照姓名顺序查找一个学生是否存在
//7、对学生年龄直接插入排序(从小到大)。
//要求:
//1、学生信息结构体姓名,分数,年龄,电话。
//2、其他功能函数自定义,分文件编译。
{
Pnode L=my_head();
while(L)
{
int a;//定义功能选择变量,通过变量控制输入的值来实现各模块的功能
printf("输入‘1’:录入学生信息\n输入‘2’:插入学生信息\n输入‘3’:删除学生信息\n输入‘4’:按位置修改信息\n输入‘5’:按姓名查找学生信息\n输入‘6’:学生信息年龄排序\n输入‘7’:查看全部学生信息\n");
scanf("%d",&a);
switch(a)
{
case 1: in_put(L);//录入
break;
case 2: interposition_my(L);//插入
break;
case 3: delete_my(L);//删除
break;
case 4: modification_my(L);//修改
break;
case 5: Single_target_search_my(L);//查找
break;
case 6: Direct_Insertion_Sort(L);//排序
break;
case 7:output_my(L);
break;
default :printf("输入序号为无效序号,请从新输入:\n");
break;
}
}
return 0;
}
功能函数文件 fun.c
#include "link.h"
//生成顺序表
Pnode my_head()
{
Pnode p=malloc(sizeof(Node));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->len=0;
memset(p->students,0,sizeof(p->students));
return p;
}
//输入函数
int scanf_my(Pnode L,int i)
{
printf("请输入:姓名 分数 年龄 电话号码\n");
scanf("%s%d%d%s",
L->students[i].name,
&L->students[i].score,
&L->students[i].age,
L->students[i].number);
return 0;
}
//输入数据
int in_put(Pnode L)
{
printf("感谢使用录入信息功能\n");
printf("请输入学生信息\n");
int i,key=0;
printf("请输入你要录入学生的个数\n");
scanf("%d",&key);
if(L->len+key>=MAX)
{
printf("输入总数超过存储上限制\n");
}
int aq=L->len;
for(i=aq;i<(aq+key);i++)
{
printf("请输入第%d位学生信息\n",i+1);
scanf_my(L,i);
L->len++;
}
return 0;
}
//插入
int interposition_my(Pnode L)
{
if(L->len>=MAX)
{
printf("位置已满");
return -1;
}
printf("输入要插入的位置:\n");
int a,i;
stu M;
scanf("%d",&a);
if(a<1||a>MAX-1||a>L->len)
{
printf("你输入的位置存在问题,请从新输入\n");
return -1;
}
for(i=L->len;i>=a-1;i--)
{
L->students[i+1]=L->students[i];
}
scanf_my(L,a-1);
L->len++;
return 0;
}
//删除
int delete_my(Pnode L)
{
//查找目标学生
//int Single_target_search_my(Pnode L)
//{
int i,c;
int temp=0;//对重名学生进行计数
int brr[MAX]={0};//存储重名的学生位置下标
char arr[30];//临时存储学生名字(查找)
char crr[30];//二次判断存储电话号码
printf("输入学生姓名\n");
scanf("%s",arr);
for(i=0;i<L->len;i++)//一次循环姓名判断
{
if(strcmp(L->students[i].name,arr)==0)
{
temp+=1;
brr[temp]=i;
}
}
if(temp>1)//重名则通过电话号码判断(分数和年龄可能也会相同,电话号码是唯一的)
{
printf("请输入电话号码来进一步判断\n");
scanf("%s",crr);
for(temp=1;temp<MAX;temp++)
{
if(strcmp(L->students[brr[temp]].number,crr)==0)
{
c=temp;
temp=1;
break;
}
}
}
if(temp==0)
{
printf("当下系统中没有查找到该学生\n");
return 0;
}
for(i=brr[c];i<L->len;i++)//删除找到的那名学生
{
L->students[i]=L->students[i+1];
}
printf("删除成功\n");
L->len--;//计数减一
}
//修改
int modification_my(Pnode L)
{
int i,temp=0;
int s;
char c;
printf("输入位置\n");
scanf("%d",&s);
printf("姓名:%s\t分数:%d\t年龄:%d\t电话号码:%s\n",
L->students[s-1].name,
L->students[s-1].score,
L->students[s-1].age,
L->students[s-1].number);
printf("请修改\n");
scanf_my(L,s-1);
printf("修改成功");
return 0;
}
//查找(顺序查找)
int Single_target_search_my(Pnode L)
{
int i;
char arr[MAX];
printf("输入姓名\n");
scanf("%s",arr);
for(i=0;i<L->len;i++)
{
if(strcmp(arr,L->students[i].name)==0)
{
printf("姓名:%s\t分数:%d\t年龄:%d\t电话号码:%s\n",
L->students[i].name,
L->students[i].score,
L->students[i].age,
L->students[i].number);
}
}
return 0;
}
//排序
int Direct_Insertion_Sort(Pnode L)
{
int i,j;
stu Q;
for(i=1;i<L->len;i++)
{
Q=L->students[i];
for(j=i-1;j>=0;j--)
{
if(Q.age<L->students[j].age)
{
L->students[j+1]=L->students[j];
}
else
{
break;
}
}
L->students[j+1]=Q;
}
printf("排序完成\n");
return 0;
}
//查看全部信息
int output_my(Pnode L)
{
if(L==NULL||L->len==0)
{
printf("该表为空\n");
return -1;
}
int i;
printf("全部的学生信息如下表\n");
for(i=0;i<L->len;i++)
{
printf("姓名:%s\t分数:%d\t年龄:%d\t电话号码:%s\n",
L->students[i].name,
L->students[i].score,
L->students[i].age,
L->students[i].number);
}
return 0;
}
声明文件 link.h
#ifndef __LINK_H__
#define __LINK_H__
#include <myhead.h>
#define MAX 30
#define AZ 100
typedef struct student//学生信息结构体
{
char name[MAX];
int score;
int age;
char number[MAX];
}stu;
typedef struct//主结构体
{
int len;
stu students[AZ];
}Node,*Pnode;
//创建
Pnode my_head();
//输入
int in_put(Pnode L);
//查看全部
int output_my(Pnode L);
//输入学生信息函数
int scanf_my(Pnode L,int i);
//插入
int interposition_my(Pnode L);
//删除
int delete_my(Pnode L);
//修改
int modification_my(Pnode L);
//查找目标学生
int Single_target_search_my(Pnode L);
//排序
int Direct_Insertion_Sort(Pnode L);