目录
简介
- 创建学生结构体数组(结构成员名称如下)
学号 char sno[10];
姓名 char sname[5];
年龄 int sage;
性别 char ssex[4];
电话 char stel[15];
- 实现功能:写多个函数,独立完成各个功能
录入学生 函数Add();
按照学号删除学生 函数Delete();
按照名字查找学生 函数Search();
按照学号修改学生信息 函数Modify();
完整代码
#include<stdio.h>
#include<conio.h>//getch()的函数库。该函数可以接收单字符,无需按回车键就可自动结束
int num=1000;//学生数量
struct student{
char sno[10];//学号。如B22040_0_ 加一个\0,共10位
char sname[5];//名字。最多四个字吧?
int sage;//年龄
char stel[15];//电话。数字较大,不方便用整型,一般号码11位,15凑个整而且以防意外
char ssex[4];
}students[1000];//暂定学生人数1000,每个学生对应一个结构体
void Add()//录入学生信息
{ int i;
char judge;
for(i=0;i<num;i++)
{
printf("录入第%d名学生信息:\n",i+1);
printf("请输入姓名\n");
scanf("%s",&students[i].sname);
getchar();
printf("请输入学号\n");
scanf("%s",&students[i].sno);
getchar();
printf("请输入年龄\n");
scanf("%d",&students[i].sage);
getchar();
printf("请输入电话\n");
scanf("%s",&students[i].stel);
getchar();
printf("请输入性别(男/女)\n");
scanf("%s",&students[i].ssex);
getchar();
printf("\n");
printf("录入成功!\n") ;
printf("\n");
printf("是否继续录入?(y/n)\n\n");
judge=getchar();
if(judge=='n')
break;
}
printf("退出程序还是继续操作?(y/n)\n");
getchar();
int b=getchar();
if(b=='n')
exit(0);
else;
}
int searchname(char *name)//按照姓名查找学生
{
int i;
for(i=0;i<num;i++)
{
if(strcmp(students[i].sname,name)==0)
return i;
}
return -1;
}
int searchno(char *no)//按照学号查找学生
{
int i;
for(i=0;i<num;i++)
{
if(strcmp(students[i].sno,no)==0)
return i;
}
return -1;
}
void Search()
{
char name[5]={0}; //定义一个数组一定要初始化!!!
printf("请输入要查找学生姓名:\n");
scanf("%s",name);
getchar();
int the=searchname(name);
if(the>=0)
{
printf("学号为%s\n",students[the].sno) ;
printf("姓名为%s\n",students[the].sname) ;
printf("年龄为%d\n",students[the].sage) ;
printf("性别为%s\n",students[the].ssex) ;
printf("电话为%s\n",students[the].stel) ;
}
else
printf("该学生不存在!\n\n");
printf("是否继续操作?(y/n)\n\n");
char b=getchar();
if(b=='y');
else
exit(0);
}
void Delete()
{
int i;
printf("请输入要删除学生的学号:\n") ;
char no[10]={0};
scanf("%s",&no);
getchar();
int the=searchno(no);//这个学生在数组中代表的数字
printf("确定要删除?(y/n)\n");
char b=getchar();
if(b=='y')
{
if(the>=0)
{
for(i=the;i<num-1;i++)
students[i]=students[i+1];//结构体数组可以进行整体赋值
printf("删除成功!\n\n");
num--;//不在循环之内,删掉一个学生之后,整体学生数量-1
}
else
printf("该学生不存在!\n");
}
printf("是否继续操作?(y/n)\n\n");
getchar();
char c=getchar();
if(c=='n')
exit(0);
else;
}
void Modify()//按照学号修改学生信息
{
printf("请输入要修改学生的学号\n");
char modify[10];
scanf("%s",&modify);
getchar();
int x=searchno(modify);
printf("1.如果要修改学号请按1\n");
printf("2.如果要修改姓名请按2\n");
printf("3.如果要修改年龄请按3\n");
printf("4.如果要修改性别请按4\n");
printf("5.如果要修改电话请按5\n");
printf(" 如果要退出程序请按0\n");
int y;
scanf("%d",&y);
switch(y)
{
case 0:exit(0);
break;
case 1:{printf("请输入学号:\n");
scanf("%s",&students[x].sno);
getchar();
}break;
case 2:{printf("请输入姓名:\n");
scanf("%s",&students[x].sname);
getchar();
}break;
case 3:{printf("请输入年龄:\n");
scanf("%d",&students[x].sage);
getchar();
}break;
case 4:{printf("请输入性别(男/女):\n");
scanf("%s",&students[x].ssex);
getchar();
}break;
case 5:{printf("请输入电话:\n");
scanf("%s",&students[x].stel);
getchar();
}break;
default:;
}
printf("是否继续操作?(y/n)\n\n");
getchar();
char d=getchar();
if(d=='n')
exit(0);
else;
}
int main()
{
int a;
while(1)
{
printf("\t\t\t\t\t\t学生信息管理系统\n\n");
printf("1.添加学生请按1\n\n");
printf("2.删除学生请按2(按照学号删除)\n\n");
printf("3.查找学生请按3(按照姓名查找)\n\n");
printf("4.修改学生信息请按4(按照学号修改)\n\n");
printf(" 退出程序请按0\n");
scanf("%d",&a);
getchar();
switch(a)
{
case 0:exit(0);
break;
case 1:Add();
break;
case 2:Delete();
break;
case 3:Search();
break;
case 4:Modify();
break;
default:;
}
}
}
基本思路
- 在主函数中使用分支结构,用以选择各项服务(函数)。将选择服务语句和分支结构语句都放入while(1)无限循环中,如此,当结束一个服务之后,仍然可以返回到选择服务的页面。
- 为了写的实现功能的四个自定义函数,要写两个辅助函数进行配合:searchname和searchno,分别是按照姓名查找、按照学号查找。这两个函数会被四个功能函数多次调用。
- 每一个功能函数结尾处都询问是否继续进行操作,如果输入'n',则退出程序;输入'y',则重新显示选择服务页面。
其他难点主要在于知识点的掌握(尤其是指针,函数),不懂可以随时问我
就酱,拜拜~