以前的作业——用顺序表编一个学生管理系统
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
int num;
char name[15];
double score;
}STD;
typedef struct
{
STD * data;
int length;
int listsize;
}sqlist;
{
int num;
char name[15];
double score;
}STD;
typedef struct
{
STD * data;
int length;
int listsize;
}sqlist;
int create(sqlist *l,int maxsize);
int insert(sqlist *l,int i,STD x);
int dele(sqlist *l,int i,STD *x);
int update(sqlist l,int i,STD x);
int location(sqlist l,int *x);
int findscore(sqlist l,double x);
int dispsqlist(sqlist l);
int fun(sqlist *l,int n);
int menu();
int insert(sqlist *l,int i,STD x);
int dele(sqlist *l,int i,STD *x);
int update(sqlist l,int i,STD x);
int location(sqlist l,int *x);
int findscore(sqlist l,double x);
int dispsqlist(sqlist l);
int fun(sqlist *l,int n);
int menu();
//主函数
void main()
{
int n,m,maxsize;
double h;
sqlist l;
STD s;
printf("请输入表长:");
scanf("%d",&maxsize);
create(&l,maxsize);
l.listsize =maxsize;
printf("请输入存入的学生信息个数:\n");
scanf("%d",&m);
l.length =m;
for(int i=0;i<m;i++)
{
printf("请输入第%d个学生的学号、姓名、成绩\n",i+1);
scanf("%d%s%lf",&l.data [i].num ,l.data [i].name ,&l.data [i].score );
}
while(1)
{
n=menu();
switch(n)
{
//创建新生数据表
case 1:printf("请输入需要创建的新生人数:");
scanf("%d",&maxsize);
create(&l,maxsize);
printf("按任意键继续!\n");
getch();
break;
//插入新生数据
case 2:printf("请输入插入的位置:\n");
scanf("%d",&n);
printf("请输入需要插入的新生学号、姓名、成绩,用空格隔开:\n");
scanf("%d%s%lf",&s.num ,s.name ,&s.score );
insert(&l,n,s);
printf("按任意键继续\n");
getch();
break;
//删除新生数据
case 3:printf("请输入需要删除新生的学号:\n");
scanf("%d",&s.num );
n=location(l,&s.num );
if(dele(&l,n,&s))
{
printf("删除学生数据为%d %s %.2f\n",s.num ,s.name ,s.score );
printf("按任意键继续!\n");
}
getch();
break;
//修改新生数据
case 4:printf("请输入需要修改的学生学号:\n");
scanf("%d",&s.num );
n=location(l,&s.num );
printf("请输入修改后的学生姓名、信息:\n");
scanf("%s%lf",s.name ,&s.score );
update(l,n,s);
printf("按任意键继续!\n");
getch();
break;
//查询成绩分段
case 5:printf("请输入需要查询的成绩的下线:\n");
scanf("%lf",&h);
printf("满足成绩大于等于%.2f的新生如下:\n",h);
findscore(l,h);
printf("\n");
printf("按任意键继续!\n");
getch();
break;
//显示新生数据
case 6:printf("新生成绩如下:\n");
dispsqlist(l);
printf("\n");
printf("按任意键继续!\n");
getch();
break;
case 7:fun(&l,l.length );
printf("排序后\n");
dispsqlist(l);
printf("按任意键继续!\n");
getch();
break;
case 0:exit(0);
}//switch
}//while
}
//
int create(sqlist *l,int maxsize)
{
l->data =new STD[maxsize];
if(l->data ==NULL){printf("申请内存失败!\n");return 0;}
l->length =0;
l->listsize =maxsize;
return 1;
}
//
int insert(sqlist *l,int i,STD x)
{
int k;
if(i<1||i>l->length +1){printf("插入位置异常!\n");return 0;}
if(l->length ==l->listsize ){printf("容量不够!\n");return 0;}
for(k=l->length ;k>=i;k--)
l->data[k]=l->data [k-1];
l->data [i-1]=x;
l->length ++;
return 1;
}
//
int dele(sqlist *l,int i,STD *x)
{
int k;
if(i<1||i>l->length ){printf("位置异常!\n");return 0;}
if(l->length ==0){printf("没有数据,不能删除!\n");return 0;}
*x=l->data [i-1];
for(k=i;k<l->length ;k++)
l->data [k-1]=l->data [k];
l->length --;
return 1;
}
//
int update(sqlist l,int i,STD x)
{
if(i<1||i>l.length ){printf("位置异常!\n");return 0;}
if(l.length ==0){printf("没有数据,不能更新!\n");return 0;}
l.data [i-1]=x;
return 1;
}
//
int location(sqlist l,int *x)
{
int i;
if(l.length ==0){printf("没有数据!\n");return 0;}
for(i=0;i<l.length ;i++)
if(*x==l.data [i].num )return i+1;
return 0;
}
//
int findscore(sqlist l,double x)
{
for(int i=0;i<l.length ;i++)
if(l.data [i].score>=x)
printf("%d %s %.2f\n",l.data [i].num ,l.data [i].name ,l.data [i].score);
return 1;
}
//
int dispsqlist(sqlist l)
{
int i;
if(l.length ==0){printf("没有数据!\n");return 0;}
for(i=0;i<l.length ;i++)
printf("%d %s %.2f\n",l.data [i].num ,l.data [i].name ,l.data [i].score );
return 1;
}
//
int fun(sqlist *l,int n)
{
STD st;
for(int t=0;t<n;t++)//冒泡排序
for(int i=0;i<n-t-1;i++)
if(l->data[i].score<l->data [i+1].score)//当分数比后边的小时就交换彼此的数据。
{
st=l->data[i];
l->data[i]=l->data[i+1] ;
l->data [i+1] = st;
}
return 1;
}
//
int menu()
{
int n;
while(1)
{
printf("******欢迎使用新生成及管理系统******\n");
printf("1.创建一个空表 2.插入新生数据\n");
printf("3.删除新生数据 4.修改新生数据\n");
printf("5.查询成绩分段 6.显示新生数据\n");
printf("7.新生成绩排序 0.退出\n");
printf("************************************\n");
printf("请选择功能编号(0-7):\n");
scanf("%d",&n);
getchar();//吃回车
if(n<0||n>8)
printf("输入有误,重新选择,按任意键继续!\n");
else return n;
}
}
scanf("%d",&m);
l.length =m;
for(int i=0;i<m;i++)
{
printf("请输入第%d个学生的学号、姓名、成绩\n",i+1);
scanf("%d%s%lf",&l.data [i].num ,l.data [i].name ,&l.data [i].score );
}
while(1)
{
n=menu();
switch(n)
{
//创建新生数据表
case 1:printf("请输入需要创建的新生人数:");
scanf("%d",&maxsize);
create(&l,maxsize);
printf("按任意键继续!\n");
getch();
break;
//插入新生数据
case 2:printf("请输入插入的位置:\n");
scanf("%d",&n);
printf("请输入需要插入的新生学号、姓名、成绩,用空格隔开:\n");
scanf("%d%s%lf",&s.num ,s.name ,&s.score );
insert(&l,n,s);
printf("按任意键继续\n");
getch();
break;
//删除新生数据
case 3:printf("请输入需要删除新生的学号:\n");
scanf("%d",&s.num );
n=location(l,&s.num );
if(dele(&l,n,&s))
{
printf("删除学生数据为%d %s %.2f\n",s.num ,s.name ,s.score );
printf("按任意键继续!\n");
}
getch();
break;
//修改新生数据
case 4:printf("请输入需要修改的学生学号:\n");
scanf("%d",&s.num );
n=location(l,&s.num );
printf("请输入修改后的学生姓名、信息:\n");
scanf("%s%lf",s.name ,&s.score );
update(l,n,s);
printf("按任意键继续!\n");
getch();
break;
//查询成绩分段
case 5:printf("请输入需要查询的成绩的下线:\n");
scanf("%lf",&h);
printf("满足成绩大于等于%.2f的新生如下:\n",h);
findscore(l,h);
printf("\n");
printf("按任意键继续!\n");
getch();
break;
//显示新生数据
case 6:printf("新生成绩如下:\n");
dispsqlist(l);
printf("\n");
printf("按任意键继续!\n");
getch();
break;
case 7:fun(&l,l.length );
printf("排序后\n");
dispsqlist(l);
printf("按任意键继续!\n");
getch();
break;
case 0:exit(0);
}//switch
}//while
}
//
int create(sqlist *l,int maxsize)
{
l->data =new STD[maxsize];
if(l->data ==NULL){printf("申请内存失败!\n");return 0;}
l->length =0;
l->listsize =maxsize;
return 1;
}
//
int insert(sqlist *l,int i,STD x)
{
int k;
if(i<1||i>l->length +1){printf("插入位置异常!\n");return 0;}
if(l->length ==l->listsize ){printf("容量不够!\n");return 0;}
for(k=l->length ;k>=i;k--)
l->data[k]=l->data [k-1];
l->data [i-1]=x;
l->length ++;
return 1;
}
//
int dele(sqlist *l,int i,STD *x)
{
int k;
if(i<1||i>l->length ){printf("位置异常!\n");return 0;}
if(l->length ==0){printf("没有数据,不能删除!\n");return 0;}
*x=l->data [i-1];
for(k=i;k<l->length ;k++)
l->data [k-1]=l->data [k];
l->length --;
return 1;
}
//
int update(sqlist l,int i,STD x)
{
if(i<1||i>l.length ){printf("位置异常!\n");return 0;}
if(l.length ==0){printf("没有数据,不能更新!\n");return 0;}
l.data [i-1]=x;
return 1;
}
//
int location(sqlist l,int *x)
{
int i;
if(l.length ==0){printf("没有数据!\n");return 0;}
for(i=0;i<l.length ;i++)
if(*x==l.data [i].num )return i+1;
return 0;
}
//
int findscore(sqlist l,double x)
{
for(int i=0;i<l.length ;i++)
if(l.data [i].score>=x)
printf("%d %s %.2f\n",l.data [i].num ,l.data [i].name ,l.data [i].score);
return 1;
}
//
int dispsqlist(sqlist l)
{
int i;
if(l.length ==0){printf("没有数据!\n");return 0;}
for(i=0;i<l.length ;i++)
printf("%d %s %.2f\n",l.data [i].num ,l.data [i].name ,l.data [i].score );
return 1;
}
//
int fun(sqlist *l,int n)
{
STD st;
for(int t=0;t<n;t++)//冒泡排序
for(int i=0;i<n-t-1;i++)
if(l->data[i].score<l->data [i+1].score)//当分数比后边的小时就交换彼此的数据。
{
st=l->data[i];
l->data[i]=l->data[i+1] ;
l->data [i+1] = st;
}
return 1;
}
//
int menu()
{
int n;
while(1)
{
printf("******欢迎使用新生成及管理系统******\n");
printf("1.创建一个空表 2.插入新生数据\n");
printf("3.删除新生数据 4.修改新生数据\n");
printf("5.查询成绩分段 6.显示新生数据\n");
printf("7.新生成绩排序 0.退出\n");
printf("************************************\n");
printf("请选择功能编号(0-7):\n");
scanf("%d",&n);
getchar();//吃回车
if(n<0||n>8)
printf("输入有误,重新选择,按任意键继续!\n");
else return n;
}
}