总代码
后期更新维护了一下,现暂存一个问题。在删除模块时即使有学号仍然会提示没有找到相关学号,但是实际上已经删除。
/*本代码用结构体的方式完成顺序学生表的增删改查,
因为用的是switch选择语句所以只能进行单步骤操作,
且初始结构体为空没有办法删除也没有办法修改,
相关模块代码也未注明提示信息(因为懒)。
代码中N控制了这个学生成绩表的总长度,
增加模块只是默认增加到表末尾,
删除、修改和查询模块用的是按照学号进行删除修改。
能力不足,还望海涵。*/
#include <stdio.h>
#include <string.h>
#define N 20
typedef struct student{ //单个学生结构
char name[10];
char sno[10];
int score;
}student;
typedef struct head{ //学生表结构,number表示表中实际信息数
int number;
student std[N];
}student_list;
void register_std(student_list *p){ //录入模块
int i,n;
printf("请输入你想登记几个学生成绩\n");
scanf("%d",&n);
if(n<1||n>N){
printf("您想录入的数量有误\n");
}
else{
for(i=0;i<n;i++){
printf("请输入第%d个学生的姓名\n",i+1);
scanf("%s",p->std[i].name);
printf("请输入第%d个学生的学号\n",i+1);
scanf("%s",p->std[i].sno);
printf("请输入第%d个学生的成绩\n",i+1);
scanf("%d",&p->std[i].score);
(p->number)++;
}
}
}
void print_std(student_list *p){ //打印模块
if(p->number==0){
printf("学生表为空\n");
}
else{
int i;
printf("姓名\t学号\t成绩\n");
for(i=0;i<p->number;i++){
printf("%s\t%s\t%d\n",p->std[i].name,p->std[i].sno,p->std[i].score);
}
}
}
void add_std(student_list *p){ //增加/插入模块
if(p->number==N){
printf("空间已满\n");
}
else{
student e;
printf("请输入想要插入的学生姓名\n");
scanf("%s",e.name);
printf("请输入想要插入的学生学号\n");
scanf("%s",e.sno);
printf("请输入想要插入的学生成绩\n");
scanf("%d",&e.score);
p->std[p->number]=e;
(p->number)++;
}
}
void delete_std(student_list *p){ //删除模块
char sno[10];
int i,judge,site;
printf("输入你想删除的学号\n");
scanf("%s",sno);
for(i=0;i<p->number;i++){
judge = strcmp(sno,p->std[i].sno);
if(judge==0){
site = i;
break;
}
else{
printf("该表中没有你要找的学号\n");
site = -1;
}
}
if(site != -1){
for(i=site;i<p->number;i++){
p->std[i] = p->std[i+1];
}
(p->number)--;
}
}
void alter_std(student_list *p){ //修改模块
char sno[10];
int i,judge,site;
printf("输入你想修改的学生的学号\n");
scanf("%s",sno);
for(i=0;i<p->number;i++){
judge = strcmp(sno,p->std[i].sno);
if(judge==0){
site = i;
break;
}
else{
printf("该表中没有你要找的学号\n");
site = -1;
}
}
if(site != -1){
printf("请输入修改的姓名\n");
scanf("%s",p->std[site].name);
printf("请输入修改的学号\n");
scanf("%s",p->std[site].sno);
printf("请输入修改的成绩\n");
scanf("%d",&p->std[site].score);
}
}
void search_std(student_list *p){ //查询模块
char sno[10];
int i,judge,site;
printf("输入你想查询的学生的学号\n");
scanf("%s",sno);
for(i=0;i<p->number;i++){
judge = strcmp(sno,p->std[i].sno);
if(judge==0){
site = i;
break;
}
else{
printf("该表中没有你要找的学号\n");
site = -1;
}
}
if(site != -1){
printf("姓名\t学号\t成绩\n");
printf("%s\t%s\t%d\n",p->std[site].name,p->std[site].sno,p->std[site].score);
}
}
int main(){
student_list ls;
student_list *p;
p = &ls;
p->number = 0;
int flag=1;
int caozuo;
while(flag){
printf("请输入你想进行的操作数:\n1代表登记学生的成绩\n2代表插入学生的成绩\n3代表删除学生的成绩\n4代表修改学生的成绩\n5代表查找学生的成绩\n6执行完毕显示信息\n");
scanf("%d",&caozuo);
switch(caozuo){
case 1:
register_std(p);
break;
case 2:
add_std(p);
break;
case 3:
delete_std(p);
break;
case 4:
alter_std(p);
break;
case 5:
search_std(p);
break;
case 6:
flag = 0;
break;
default :
printf("请规范输入\n");
}
}
print_std(p);
return 0;
}