本程序是对学生的成绩管理做一个简单的模拟,用菜单选择方式完成下列功能: 登记学生成绩;查询学生成绩;插入学生成绩;删除学生成绩。把问题看作对线性表的 *** 作来完成。
#include#include #include #include #define MAXSIZE 100 int renshu; int true=1; int error=0; typedef struct Student{ //存放学生姓名的表 char name[20]; //姓名 int num; //学号 int math; int chinese; int sum; //总成绩 }Student; typedef struct{ Student elem[MAXSIZE]; //线性表占用的数组空间 int last; //最后一个元素的下标 }SeqList; //顺序表的输入 void InList(SeqList *L,int i){ //逐个输入学生信息 int x; printf("请输入学生数量:"); scanf("%d",&x); renshu=x; for(i=1;i<=x;i++){ printf("第%d位学生信息n",i); printf("———————————————n"); printf("姓名:"); scanf("%s",&L->elem[i].name); printf("———————————————n"); printf("学号:"); scanf("%d",&L->elem[i].num); printf("———————————————n"); printf("数学成绩:"); scanf("%d",&L->elem[i].math); printf("———————————————n"); printf("语文成绩:"); scanf("%d",&L->elem[i].chinese); printf("———————————————n"); L->elem[i].sum=L->elem[i].chinese+L->elem[i].math; //计算总成绩 } L->last=x; printf("n"); } //输出顺序表 void OutList(SeqList *L,int i){ //输出总成绩 for(i=1;i<=L->last;i++){ printf("姓名:%s 学号:%d 语文:%d 数学:%d 总分:%dn",L->elem[i].name,L->elem[i].num,L->elem[i].chinese,L->elem[i].math,L->elem[i].sum); } printf("n"); } //顺序表的查询 void Find(SeqList *L){ //顺序表的查询,按照学号查询该学生成绩 int i=1; int n; if(L->last<1){ //判断是否为空表 printf("没有成绩表n"); return; } printf("输入要查找学生的学号n"); scanf("%d",&n); while(i<=L->last && L->elem[i].num!=n){ //循环查找对应学号的下标 i++; } if(i<=L->last){ printf("该学生姓名为:%s 学号为:%d 语文成绩为:%d 数学成绩为:%d 总分为:%dn",L->elem[i].name,L->elem[i].num,L->elem[i].chinese,L->elem[i].math,L->elem[i].sum); return; } if(i>L->last){ printf("学号错误,未查询到该学生n"); return; } } //顺序表的删除 int Delete(SeqList *L, int i){ //从L中删除指定位序i的元素,该元素数组下标为i int j; int k; printf("请输入要删除的学生学号:"); scanf("%d",&i); if(L->last<1){ //检查是否为空表 printf("空表!"); return error; } for(k=1;k<=L->last;k++){ if(L->elem[k].num==i) break; } if(k>L->last){ printf("未找到该学生!n"); return error; } else{ for(j=k;j<=L->last;j++) L->elem[j]=L->elem[j+1]; //将位序j+1及以后的元素前移 L->last--; //last仍指向最后元素 return true; } } //顺序表的插入 int Insert(SeqList *L,int i,Student e){ //在L的指定位序i中插入一个新元素e;位序i元素的数组位置下表是i int j; if(L->last==MAXSIZE){ //表空间已满,不能插入 printf("表满n"); return 0; } if(i<1 || i>L->last+2){ //检查插入位序的合法性:是否在1~n。n为当前元素个数,即last printf("位序不合法n"); return 0; } for(j=L->last;j>=i-1;j--) //last指向序列最后元素 L->elem[j+1]=L->elem[j]; L->elem[i]=e; L->last++; return 1; } int main(){ int N=1,i,j; SeqList L; Student e,g; int renshu,a; printf("**********************n"); printf("*------选择 *** 作------*n"); printf("*------1 登记--------*n"); printf("*------2 输出--------*n"); printf("*------3 查询--------*n"); printf("*------4 删除--------*n"); printf("*------5 插入--------*n"); printf("*------0 退出--------*n"); printf("**********************n"); while(N){ printf("请选择 *** 作n"); scanf("%d",&N); if(N==1){ //登记成绩 InList(&L,i); } else if(N==2){ //输出成绩 OutList(&L,i); } else if(N==3){ //查询 Find(&L); } else if(N==4){ //删除 if(Delete(&L,j)){ renshu--; printf("删除成功n"); }else { printf("删除失败n"); } } else if(N==5){ //插入 printf("请输入要插入的位置:"); scanf("%d",&a); printf("请输入学生姓名:"); scanf("%s",&g.name); printf("请输入学生学号:"); scanf("%d",&g.num); printf("请输入学生数学成绩:"); scanf("%d",&g.math); printf("请输入学生语文成绩:"); scanf("%d",&g.chinese); g.sum=g.math+g.chinese; if(Insert(&L,a,g)){ renshu++; printf("插入成功n"); }else { printf("插入失败n"); } }else if(N==0){ printf("退出成功,按任意键结束n"); exit(0); } } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)