功能概括:
1.新建项目
2.定义学生数据类型
3、输入输出学生数据(文件)
4,模块化编程(定义函数)
5.查找学生信息数据(基于学号/姓名/成绩)
6.插入/删除学生信息数据(基于位置)
7、删除特定学生信息数据(基于属性)
8,有序插入学生信息
9.三种排序方法
10.用户界面(菜单)
步骤:
1.建立基本学生信息结构体struct
2.建立菜单
3.建立每个功能的函数体
4.利用switch case 语句在主函数实现功能选择
完整代码如下:
#include<stdio.h>
#include<string.h>
/*1.新建项目
2.定义学生数据类型
3、输入输出学生数据(文件)4,模块化编程(定义函数)
5.查找学生数据(基于学号/姓名/成绩)
6.插入/删除数据(基于位置)
7、删除特定数据(基于属性)8,有序插入
9.三种排序方法10.用户界面(菜单)
*/
struct Student
{
int id;
char name[10];
float score;
};
void Output(Student ss[],int n);
int Open(char fname[],Student ss[]);
int SearchbyId(Student ss[],int n,int id);
void SearchbyName(Student ss[],int n,char name[]);
int RemoveAt(Student ss[],int n,int k);//删除下标为k的学生数据
int InsertAt(Student ss[],int n,int l,struct Student s);//将学生s插入到下标为l的位置
int RemovebyId(Student ss[], int n, int id);//删除学号为id的学生
int RemovebyName(Student ss[], int n, char name1[]); //删除学生名为name的学生
void SelectSortbyScore(Student ss[], int n); // 选择排序
void BubbleSortbyId(Student ss[], int n); // 冒泡排序
void InsertSortbyName(Student ss[], int n); // 插入排序
int InsertbyId(Student ss[], int n, Student s);//有序表的插入(函数的嵌套)
int Menu();
int Menu()
{
int choice;
printf("1.....打开文件,读入学生成绩\n");
printf("2.....显示所有学生成绩\n");
printf("3.....按学号查找学生成绩\n");
printf("4.....删除下标为k的学生数据\n");
printf("5.....将学生s插入到下标为l的位置\n");
printf("6.....按学号删除学生成绩\n");
printf("7.....按学号倒序冒泡排序\n");
printf("8.....按学号正序选择法排序\n");
printf("9.....按学号插入学生信息\n");
printf("10.....按姓名查找学生成绩\n");
printf("0.....退出\n");
scanf("%d", &choice);
return choice;
}
int main()
{
int n,k,choice,id,j1,l,id1,p,q;
struct Student ss[10];
char name[10],name1[10];
while(1)
{
choice=Menu();
switch(choice)
{
case 0:
return 0;
case 1:
n=Open("data.txt",ss); //读取数据
break;
case 2:
Output(ss,n);
break; //输出所有数据
case 3:
printf("请输入要查找的学号:");
scanf("%d",&id);
SearchbyId(ss,n,id); //按学号查找学生
break;
case 4:
printf("请输入要删除的学生数据的下标:");
scanf("%d",&k);
n=RemoveAt(ss,n,k);
printf("删除后:\n");
Output(ss,n); // 删除下标为k的学生数据
break;
case 5:
struct Student s;
printf("请输入待添加的学生信息:\n");
scanf("%d%s%f",&s.id,&s.name,&s.score);
printf("请输入想要插入的下标位置:");
scanf("%d",&l);
n=InsertAt(ss,n,l,s);
printf("添加后:\n");
Output(ss,n); //将学生s插入到下标为l的位置 有序表的插入(函数的嵌套)
break;
case 6:
printf("请输入要删除的学号:");
scanf("%d",&id1);
n=RemovebyId(ss,n,id1);
Output(ss,n);
break;
case 7:
BubbleSortbyId(ss,n);
printf("倒序后:\n");
Output(ss,n); //选择法排序
break;
case 8:
SelectSortbyScore(ss,n);
printf("排序后:\n");
Output(ss,n);
break;
case 9:
struct Student s1;
printf("请输入待添加的学生信息:\n");
scanf("%d%s%f",&s1.id,&s1.name,&s1.score);
n=InsertbyId(ss,n,s1);
printf("添加后:\n");
Output(ss,n);
break;
case 10:
printf("请输入姓名:");
scanf("%s",name);
SearchbyName(ss,n,name);
break;
case 11:
printf("请输入要删除的学生数据的姓名:");
scanf("%s",name1);
n=RemovebyName(ss,n,name1);
printf("删除后:\n");
Output(ss,n); // 删除下标为k的学生数据
break;
}
}
return 0;
}
int Open(char fname[],Student ss[])
{
int i,n;
FILE *fp;
fp=fopen("d:\\data.txt","r");
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
{
fscanf(fp,"%d %s %f",&ss[i].id,&ss[i].name,&ss[i].score);
}
fclose(fp);
return n;
}
void Output(Student ss[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d %s %f\n",ss[i].id,ss[i].name,ss[i].score);
}
}
int RemoveAt(Student ss[],int n,int k)//删除下标为k的学生数据
{
int i,j;
for(i=0;i<n;i++)
{
if(i==k)
{
for(j=i;j<n;j++)
{
ss[j]=ss[j+1];
}
break;
}
}
return n-1;
}
int SearchbyId(Student ss[],int n,int id)
{
int i;
for(i=0;i<n;i++)
{
if(ss[i].id==id)
{
printf("学号:%d 姓名:%s 分数:%f\n",ss[i].id,ss[i].name,ss[i].score);
}
}
}
int InsertAt(Student ss[],int n,int l,struct Student s)
{
int i;
for(i=n-1;i>=0;i--)
{
ss[i+1]=ss[i];
if(i==l)
{
ss[i]=s;
break;
}
}
return n+1;
}
int RemovebyId(Student ss[], int n, int id)
{
int i,j;
for(i=0;i<n;i++)
{
if(ss[i].id==id)
{
for(j=i;j<n;j++)
{
ss[j]=ss[j+1];
}
break;
}
}
return n-1;
}
void SelectSortbyScore(Student ss[], int n)
{
int i,j;
struct Student h;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(ss[i].id>ss[j].id)
{
h=ss[i];
ss[i]=ss[j];
ss[j]=h;
}
}
}
}
void BubbleSortbyId(Student ss[], int n)
{
int i,j;
struct Student h;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i;j++)
{
if(ss[j].id<ss[j+1].id)
{
h=ss[j];
ss[j]=ss[j+1];
ss[j+1]=h;
}
}
}
}
int InsertbyId(Student ss[], int n, Student s)
{
int i,j;
for(i=0;i<n;i++)
{
if(ss[i].id>s.id)
{
for(j=n-1;j>=i;j--)
{
ss[j+1]=ss[j];
}
break;
}
}
ss[i]=s;
return n+1;
}
void SearchbyName(Student ss[],int n,char name[])
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(ss[i].name,name)==0)
{
printf("学号:%d 姓名:%s 分数:%f\n",ss[i].id,ss[i].name,ss[i].score);
}
}
}
int RemovebyName(Student ss[], int n,char name1[])
{
int i,j;
for(i=0;i<n;i++)
{
if(strcmp(ss[i].name,name1)==0)
{
for(j=i;j<n;j++)
{
ss[j]=ss[j+1];
}
break;
}
}
return n-1;
}