#include
#include
#include
#define LIST_INIT_SIZE 10
typedef struct Student{
char num[20],name[20];
float score;
}Student;
typedef struct sqlist{
Student *stu;
int listSize,length;
}sqlist;
//函数的声明
int InitList(sqlist &s1);
int CreateList(sqlist &s1);
int InsertEle(sqlist &s1);
int DeleteList(sqlist &s1);
int SearchList(sqlist &s1);
int ShowList(sqlist &s1);
int main(){
Student s;
sqlist s1;
int i=1,n;
char c;
InitList(s1);
printf("\n\n欢迎使用学生信息查询系统,请按提示使用!\n\n\n");
while(1){
printf("~~~~~~~~~~~~请选择要执行的操作:~~~~~~~~~~~~~~\n\n\n\n");
printf("`````````````````````````````````````````````\n");
printf("1、清空顺序表\n2、创建顺序表\n3、插入信息\n4、删除信息\n5、查找信息\n6、显示当前信息\n0、退出系统\n");
printf("`````````````````````````````````````````````\n");
printf("\n请从序号0--6中选择:");
scanf("%d",&n);
//0.退出系统
if(n==0){
printf("谢谢您的使用,再见!");
break;
}
//1.初始化顺序表
else if(n==1){
printf("\n此操作将创建顺序表,您是否继续?(n退出,其他任意键继续)\n");
scanf("%c",&c);//读掉回车的空格
scanf("%c",&c);
if(c=='n')
break;
else{
InitList(s1);
printf("顺序表已清空,你可以请进行其他操作\n");
}
}
//2.创建顺序表
else if(n==2){
printf("此操作将创建顺序表,您是否继续?(n退出,其他任意键继续)\n");
scanf("%c",&c);//读掉回车的空格
scanf("%c",&c);
if(c=='n')
break;
else
CreateList(s1);
}
// 3.插入学生信息
else if(n==3){
InsertEle(s1);
}
//4.删除学生信息
else if(n==4){
DeleteList(s1);
}
//5.查找信息
else if(n==5){
SearchList(s1);
}
//6.显示当前信息
else if(n==6){
ShowList(s1);
}
//输入有误,显示有误信息
else if(n!=1||n!=2||n!=3||n!=4||n!=5||n!=6||n!=0)
printf("您输入的值有误,请重新输入\n");
}
return 0;
}
/函数的定义
//1.初始化线性表
int InitList(sqlist &s1){
s1.stu=(Student*)malloc(LIST_INIT_SIZE*sizeof(Student));//申请存储空间
if(!s1.stu){
printf("分配失败\n");
return 0;
}
s1.length=0;
s1.listSize=LIST_INIT_SIZE;
return 1;
}
//2.创建线性表
int CreateList(sqlist &s1){
int n,i;
printf("下面创建学生信息查询系统,请按提示输入数据:\n");
s1.length=0;
printf("您一共要输入多少组学生数据?\n");
scanf("%d",&n);
for(i=0;i
printf("请输入第%d个同学的学号:\n",i+1);
scanf("%s",s1.stu[i].num);
printf("请输入第%d个同学的姓名:\n",i+1);
scanf("%s",s1.stu[i].name);
printf("请输入第%d个同学的成绩:\n",i+1);
scanf("%f",&s1.stu[i].score);
s1.length++;
}
printf("\n本次操作您一共输入了%d组数据\n",n);
return 1;
}
//3.插入操作
int InsertEle(sqlist &s1){
int pos,i;
struct Student *p,*q;
Student s;
printf("请输入插入的学生的信息:\n");
printf("请输入学生的学号:\n");
scanf("%s",s.num);
printf("请输入学生的姓名:\n");
scanf("%s",s.name);
printf("请输入学生的成绩:\n");
scanf("%f",&s.score);
printf("请输入您要插入的学生位置:\n");
scanf("%d",&pos);
if(pos<1||pos>s1.length+1){
printf("你输入的位置有误,请检查\n");
return 0;
}
for(i=0;i
if(strcmp(s.num,p->name)==0){
printf("输入的学号已存在!\n");
printf("该学生姓名为:%s\n",p->name);
printf("该学生的学号为%s\n",p->num);
printf("该学生的成绩为%f\n",p->score);
return 0;
}
q=&(s1.stu[pos-1]);
for(p=&(s1.stu[s1.length-1]);p>=q;p--)
*p=*(p-1);
*q=s;
s1.length++;
printf("插入学生信息成功!");
return 1;
}
//4.删除学生信息
int DeleteList(sqlist &s1){
int m,n,i,pos,flag=0;
struct Student *p,*q,s;
printf("1、我想按输入特定位置删除\n2、我想按输入学生学号删除\n");
scanf("%d",&m);
//(1)按照位置删除
if(m==1){
printf("请输入你要删除的学生的位置\n");
scanf("%d",&pos);
if(pos<1||pos>=s1.length+1){
printf("你输入的位置不存在!");
return 0;
}
p=&(s1.stu[pos-1]);
q=s1.stu+s1.length-1;
for(;p<=q;p++)
*p=*(p+1);
s1.length--;
printf("已删除,请检查输出");
return 1;
}
//(2)按照学号删除
else if(m==2){
printf("请输入要删除的学生的学号:\n");
scanf("%s",s.num);
p=s1.stu;
q=s1.stu+s1.length-1;
for(i=0;i
if(strcmp(s.num,p->num)==0){
flag=1;
break;
}
if(flag){
for(;p<=q;p++)
*p=*(p+1);
s1.length--;
printf("元素删除成功\n");
return 1;
}
else{
printf("不存在该学号的学生信息\n");
return 0;
}
}
else printf("你选择的序号不正确!\n");
}
//5.查询信息
int SearchList(sqlist &s1){
int pos;
printf("请输入你要查找的学生的位置:\n");
scanf("%d",&pos);
if(pos<1||pos>s1.length){
printf("该元素不存在\n");
return 0;
}
printf("你查找的学生信息如下:\n");
printf("该学生的学号是%s\n",s1.stu[pos-1].num);
printf("该学生的姓名是%s\n",s1.stu[pos-1].name);
printf("该学生的成绩是%f\n",s1.stu[pos-1].score);
return 1;
}
//6.显示所有信息
int ShowList(sqlist &s1){
int i;
struct Student *q;
if(s1.length==0){
printf("---------现在还没有任何信息,你可以先建立表:----------\n");
return 0;
}
else {
q=s1.stu;
for(i=0;i
printf("第%d名学生的信息:\n",i+1);
printf("第%d名学生的学号:%s\n",i+1,q->num);
printf("第%d名学生的姓名:%s\n",i+1,q->name);
printf("第%d名学生的成绩:%f\n",i+1,q->score);
q++;
}
printf("共有%d条信息\n",i);
return 1;
}
}