/*
5.(用结构体数组来做,链表学完用链表做)
菜单:
********学生信息管理系统********
1. 添加信息
2. 删除信息
3. 修改信息
4. 查询信息
0. 退出系统
********************************
请输入你要想执行的操作(0-4):
//结构体元素
//指针写
struct std student[100];
int main()
{
while(1)
{
int num;
menu();
scanf(“%d”,num);
switch(num)
{
case 1:add();break;
case 2:dele();break;
case 3:change();break;
case 4:search();break;
case 0:retrun 0;break;
}
}
}
*/
//把老师的答案过一遍
/*
#include <string.h>
void *memset( void *buffer, int ch, size_t count );
功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。例如:
memset( the_array, '\0', sizeof(the_array) );
这是将一个数组的所有分量设置成零的很便捷的方法。
总结:给个地址,赋要填充的值,最后决定要添加的空间大小
*/
#include <stdio.h>
#include "string.h"
struct std
{
char name[20];
int id;
int score;
};
void menu(void);
int add(void);
int look(void);
int change(void);
int dele(void);
struct std student[100];
int main()
{
while(1)
{
int num = 0;
menu();
scanf("%d",&num);
switch(num)
{
case 0:return 0;break;
case 1:add();break;
case 2:dele();break;
case 3:change();break;
case 4:look();break;
}
}
}
void menu(void)
{
printf("1 添加信息\n");
printf("2 删除信息\n");
printf("3 修改信息\n");
printf("4 查询信息\n");
printf("0 退出系统\n");
}
/*
功能:添加学生信息
id name score
student[100];
*/
int add(void)
{
int id = 0;
printf("请输入学号:\n");
scanf("%d",&id);
if(student[id].id != 0)
{
printf("该学生已存在。\n");
return -1;
}
else
{
student[id].id = id;
printf("请输入姓名:\n");
scanf("%s",student[id].name);
printf("请输入成绩:\n");
scanf("%d",&student[id].score);
printf("添加成功。\n");
return 0;
}
}
int look(void)
{
int id = 0;
printf("请输入学号:\n");
scanf("%d",&id);
if(student[id].id == 0)
{
printf("没有学生存在。\n");
return -1;
}
else
{
printf("姓名:%s 学号:%d 成绩:%d\n",student[id].name,student[id].id,student[id].score);
return 0;
}
}
int change(void)
{
int id = 0;
printf("请输入要修改的学号:\n");
scanf("%d",&id);
if(student[id].id == 0)
{
printf("没有该学生。\n");
return -1;
}
else
{
printf("请输入新的姓名。\n");
scanf("%s",student[id].name);
printf("请输入新的成绩。\n");
scanf("%d",&student[id].score);
printf("修改成功。\n");
return 0;
}
}
int dele(void)
{
int id = 0;
printf("请输入删除学号:\n");
scanf("%d",&id);
if(student[id].id == 0)
{
printf("没有该学生。\n");
return -1;
}
else
{
//student[id];清空
memset(&student[id],0,sizeof(struct std));
printf("删除成功。\n");
return 0;
}
}
#include <stdio.h>
#include "string.h"
struct std{
int flag; //flag 用来判断数据是否存在
int num; //学号
char name[20]; //姓名
char gender[10];
int score;
};
struct std student[100] = {0};
void menu1(void); //主菜单
void add(void); //一级选项
void menu1_1(void); //二级菜单
void many(void); //二级选项
int panduan1_1_1(int a,int b);
void one(void); //二级选项
int panduan1_2_1(int a);
void dele(void); //一级选项
void menu2_1(void); //二级菜单
void killmany(void); //二级选项
int panduan2_1_1(int a,int b);
void killone(void); //二级选项
int panduan2_2_1(int a);
void change(void); //一级选项
void menu3_1(void); //二级菜单
void change1(void); //二级选项
int panduan3_1_1(int a);
void search(void); //一级选项
void menu4_1(void); //二级菜单
void many4(void); //二级选项
int panduan4_1_1(int a,int b);
int main()
{
while(1)
{
int num = 0;
menu1();
scanf("%d",&num);
switch(num)
{
case 1:add();break;
case 2:dele();break;
case 3:change();break;
case 4:search();break;
case 0:return 0;
default:printf("请正确输入。\n");break;
}
}
return 0;
}
void menu1(void) //主菜单
{
printf("菜单一级:\n");
printf("\t\t********学生信息管理系统********\n"); //下面都是一级选项
printf("\t\t\t 1.添加信息\n");
printf("\t\t\t 2.删除信息\n");
printf("\t\t\t 3.修改信息\n");
printf("\t\t\t 4.查询信息\n");
printf("\t\t\t 0.退出系统\n");
printf("\t\t********************************\n");
printf("请输入您要执行的操作(0~4):\n");
}
void add(void) //一级选项
{
while(1)
{
int num1_1 = 0;
menu1_1();
scanf("%d",&num1_1);
switch(num1_1)
{
case 1:many();break;
case 2:one();break;
case 0:return;
default:printf("请正确输入。\n");break;
}
}
}
void menu1_1(void) //二级菜单
{
printf("菜单二级:\n");
printf("\t\t********添加信息****************\n"); //下面都是二级选项
printf("\t\t\t 1.批量添加\n");
printf("\t\t\t 2.单个添加\n");
printf("\t\t\t 0.回到上级\n");
printf("\t\t********************************\n");
printf("请输入您要执行的操作(0~2):\n");
}
void many(void) //二级选项
{
F1_1:
printf("菜单三级:\n");
printf("\t\t********批量添加****************\n");
printf("\t请输入1~100的学生学号:\n");
printf("\t\t\t 起始学号:");
int num1_1_1 = 0;
scanf("%d",&num1_1_1);
printf("\n");
getchar();
printf("\t\t\t 添加学生个数:");
int num1_1_2 = 0;
scanf("%d",&num1_1_2);
printf("\n");
int flag1_1_1 = panduan1_1_1(num1_1_1,num1_1_2); // 判断欲输入区间是否均无数据存在
if(flag1_1_1 == 0)
goto F1_1;
else
{
printf("\t请依次输入每名学生的\n\t学号,姓名,性别,成绩:\n");
int i = 0;
for(i = 0;i < num1_1_2;i ++)
{
scanf("%d%s%s%d",&student[num1_1_1-1+i].num,student[num1_1_1-1+i].name,student[num1_1_1-1+i].gender,&student[num1_1_1-1+i].score);
student[num1_1_1-1+i].flag = 1;
}
if(i == num1_1_2)
{
printf("您已批量输入完毕,自动跳回上一级。\n");
}
}
}
int panduan1_1_1(int a,int b) // 判断欲输入区间是否均无数据存在
{
int i = 0;
int flag1_1_1_1 = 1;
for(i = a-1;i < a-1+b;i ++)
{
if(student[i].flag == 1)
{
printf("\t%d 学生信息已存入,不可再次存入。\n",i+1);
flag1_1_1_1 = 0;
}
}
return flag1_1_1_1;
}
void one(void) //二级选项
{
F1_2:
printf("菜单三级:\n");
printf("\t\t********单个添加****************\n");
printf("\t请输入1~100以内的学生学号:\n");
printf("\t\t\t 输入学号:");
int num1_2_1 = 0;
scanf("%d",&num1_2_1);
printf("\n");
int flag1_2_1 = panduan1_2_1(num1_2_1); //判断欲输入区间是否无数据存在
if(flag1_2_1 == 0)
goto F1_2;
else
{
printf("\t输入学生的姓名,性别,成绩:\n");
scanf("%s%s%d",student[num1_2_1-1].name,student[num1_2_1-1].gender,&student[num1_2_1-1].score);
student[num1_2_1-1].flag = 1;
printf("您已单个输入完毕,自动跳回上一级。\n");
}
}
int panduan1_2_1(int a)
{
int flag1_2_1_1 = 1;
if(student[a-1].flag == 1)
{
printf("\t此学生信息已存入,不可再次存入。\n");
flag1_2_1_1 = 0;
}
return flag1_2_1_1;
}
void dele(void) //一级选项
{
while(1)
{
int num2_1 = 0;
menu2_1();
scanf("%d",&num2_1);
switch(num2_1)
{
case 1:killmany();break;
case 2:killone();break;
case 0:return;
default:printf("请正确输入。\n");break;
}
}
}
void menu2_1(void) //二级菜单
{
printf("菜单二级:\n");
printf("\t\t********删除信息****************\n"); //下面都是二级选项
printf("\t\t\t 1.批量删除学生全部信息\n");
printf("\t\t\t 2.删除单个学生信息\n");
printf("\t\t\t 0.回到上级\n");
printf("\t\t********************************\n");
printf("请输入您要执行的操作(0~2):\n");
}
void killmany(void) //二级选项
{
printf("菜单三级:\n");
printf("\t\t*******批量删除学生全部信息*****\n");
printf("\t请输入1~100的学生学号:\n");
printf("\t\t\t 起始学号:");
int num2_1_1 = 0;
scanf("%d",&num2_1_1);
printf("\n");
printf("\t\t\t 删除学生个数:");
int num2_1_2 = 0;
scanf("%d",&num2_1_2);
printf("\n");
int flag2_1_1 = panduan2_1_1(num2_1_1,num2_1_2); // 判断欲输入区间是否有数据存在
if(flag2_1_1 == 0) //0代表没有数据存在,1代表有数据存在
return;
else
{ int i = 0;
for(i = 0;i < num2_1_2;i ++)
{
student[num2_1_1-1+i].flag = 0;
student[num2_1_1-1+i].num = 0;
strcpy(student[num2_1_1-1+i].name,"0");
strcpy(student[num2_1_1-1+i].gender,"0");
student[num2_1_1-1+i].score = 0;
}
if(i == num2_1_2)
{
printf("\t学号为%d开始的%d名学生信息已全部删除。\n\t自动返回上一级。\n",num2_1_1,num2_1_2);
}
}
}
int panduan2_1_1(int a,int b) // 判断欲输入区间是否有无数据存在
{
int i = 0;
int flag2_1_1_1 = 0; //0没有数据存在
for(i = a-1;i < a-1+b;i ++)
{
if(student[i].flag == 1)
{
flag2_1_1_1 = 1;
break;
}
}
if(flag2_1_1_1 == 0)
{
printf("欲删除的批量学生原无信息存入,故无法删除!\n\t自动返回上一级。\n");
}
return flag2_1_1_1;
}
void killone(void) //二级选项
{
printf("菜单三级:\n");
printf("\t\t******删除单个学生信息***********\n");
printf("\t请输入1~100以内的学生学号:\n");
printf("\t\t\t 输入学号:");
int num2_2_1 = 0;
scanf("%d",&num2_2_1);
printf("\n");
int flag2_2_1 = panduan2_2_1(num2_2_1); //判断欲输入区间是否有数据存在
if(flag2_2_1 == 0) //0代表没有数据存在,1代表有数据存在
return;
else
{
student[num2_2_1 - 1].flag = 0;
student[num2_2_1 - 1].num = 0;
strcpy(student[num2_2_1 - 1].name,"\0");
strcpy(student[num2_2_1 - 1].gender,"\0");
student[num2_2_1 - 1].score = 0;
printf("\t学号为%d的学生信息已删除\n",num2_2_1);
}
}
int panduan2_2_1(int a) //判断欲输入区间是否有数据存在
{
int flag2_2_1_1 = 0;
if(student[a-1].flag == 1)
{
flag2_2_1_1 = 1;
}
if(flag2_2_1_1 == 0)
printf("欲删除的批量学生原无信息存入,故无法删除!\n\t自动返回。\n");
return flag2_2_1_1; //0代表没有数据存在,1代表有数据存在
}
void change(void) //一级选项
{
while(1)
{
int num3_1 = 0;
menu3_1();
scanf("%d",&num3_1);
switch(num3_1)
{
case 1:change1();break;
case 0:return;
default:printf("请正确输入。\n");break;
}
}
}
void menu3_1(void) //二级菜单
{
printf("菜单二级:\n");
printf("\t\t********修改信息****************\n"); //下面都是二级选项
printf("\t\t\t 1.进行修改\n");
printf("\t\t\t 0.回到上级\n");
printf("\t\t********************************\n");
printf("请输入您要执行的操作(0~1):\n");
}
void change1(void) //二级选项
{
printf("菜单三级:\n");
printf("\t\t********进行修改****************\n"); //下面都是二级选项
printf("\t请输入1~100以内的学生学号:\n");
printf("\t\t\t 输入学号:");
int num3_1_1 = 0;
scanf("%d",&num3_1_1);
printf("\n");
int flag3_1_1 = panduan3_1_1(num3_1_1); //判断欲输入区间是否有数据存在
if(flag3_1_1 == 0) //0代表没有数据存在,1代表有数据存在
return;
else
{
printf("\t\t原数据为:\n");
printf("\t学号:%d 姓名:%s 性别:%s 成绩:%d \n",num3_1_1,student[num3_1_1-1].name,student[num3_1_1-1].gender,student[num3_1_1-1].score);
printf("\t\t请输入新数据(输入新的姓名、性别、成绩):\n");
scanf("%s%s%d",student[num3_1_1-1].name,student[num3_1_1-1].gender,&student[num3_1_1-1].score);
printf("\t修改完毕。\n\t自动返回上一级。\n");
}
}
int panduan3_1_1(int a) //判断欲输入区间是否有数据存在
{
int flag3_1_1_1 = 0;
if(student[a-1].flag == 1)
{
flag3_1_1_1 = 1;
}
if(flag3_1_1_1 == 0)
printf("欲修改的学生原无信息存入,故无法修改!\n\t自动返回。\n");
return flag3_1_1_1; //0代表没有数据存在,1代表有数据存在
}
void search(void) //一级选项
{
while(1)
{
int num4_1 = 0;
menu4_1();
scanf("%d",&num4_1);
switch(num4_1)
{
case 1:many4();break;
case 0:return;
default:printf("请正确输入。\n");break;
}
}
}
void menu4_1(void) //二级菜单
{
printf("菜单二级:\n");
printf("\t\t********查询信息****************\n"); //下面都是二级选项
printf("\t\t\t 1.进行查询\n");
printf("\t\t\t 0.回到上级\n");
printf("\t\t********************************\n");
printf("请输入您要执行的操作(0~1):\n");
}
void many4(void)
{
printf("菜单三级:\n");
printf("\t\t********进行查询****************\n");
printf("\t请输入1~100的学生学号:\n");
printf("\t\t\t 起始学号:");
int num4_1_1 = 0;
scanf("%d",&num4_1_1);
printf("\n");
printf("\t\t\t 添加学生个数:");
int num4_1_2 = 0;
scanf("%d",&num4_1_2);
printf("\n");
int flag4_1_1 = panduan4_1_1(num4_1_1,num4_1_2); // 判断欲输入区间是否均无数据存在
if(flag4_1_1 == 0)
return;
else
{
printf("下面依次输出每名学生的\n\t学号,姓名,性别,成绩:\n");
int i = 0;
for(i = 0;i < num4_1_2;i ++)
{
printf("学号:%d 姓名:%s 性别:%s 成绩:%d \n",student[num4_1_1-1+i].num,student[num4_1_1-1+i].name,student[num4_1_1-1+i].gender,student[num4_1_1-1+i].score);
}
if(i == num4_1_2)
{
printf("\t您已查询完毕,自动跳回上一级。\n");
}
}
}
int panduan4_1_1(int a,int b) // 判断欲输入区间是否均无数据存在
{
int i = 0;
int flag4_1_1_1 = 0;
for(i = a-1;i < a-1+b;i ++)
{
if(student[i].flag == 1)
{
flag4_1_1_1 = 1;
}
}
if(flag4_1_1_1 == 0)
{
printf("\t欲查询区域均无数据存入\n\t请重新输入。\n");
}
return flag4_1_1_1;
}