[C] 纯文本查看 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NUM 7
typedef enum{ //将性别定义成枚举类型 取别名为 Gender
GenderMan,
GenderWoman
}Gender;
int realLen = 7;
typedef struct { //定义一个结构体类型来保存学生信息
int id;
char* name;
Gender sex;
int age;
int score;
}Student;
Student students[NUM] = { //定义一个结构体数组来保存全班学生信息
{1,"tomo",GenderMan,20,78},
{2,"lucy",GenderWoman,25,98},
{3,"jimi",GenderMan,23,88},
{4,"kele",GenderMan,22,93},
{5,"maky",GenderMan,21,100},
{6,"lulu",GenderWoman,24,55},
{7,"lily",GenderWoman,22,67},
};
/**
显示一级菜单
@return 返回输入的选择
*/
int showMenu();
/**
显示二级菜单
*/
void showNextMenu();
/**
查看全部信息
*/
void showALL();
/**
根据编号
*/
void showByID();
/**
根据姓名
*/
void showByName();
/**
根据年龄
*/
void showByAge();
/**
根据性别
*/
void showByGender();
/**
根据成绩
*/
void showByScore();
/**
新增学生信息
*/
void addStudent();
/**
删除学生信息
*/
void deleteStudent();
/**
修改学生信息
*/
void changeStudent();
int main(int argc, const char * argv[]) {
while(1){
//显示一级菜单,并返回用户输入的数据
int num = showMenu();
//根据用户的选择来执行功能
switch(num){
case 1:
//学生查询
//显示二级菜单,并返回用户输入的数据
showNextMenu();
break;
case 2:
//新增学生
addStudent();
break;
case 3:
//删除学生
deleteStudent();
break;
case 4:
//修改学生
changeStudent();
break;
case 5:
//退出系统
printf("欢迎下次使用,再见!\n");
return 0;
default:
printf("输入错误!\n");
break;
}
}
return 0;
}
/**
显示一级菜单
@return 返回输入的选择
*/
int showMenu(){
printf("**********欢迎使用学生管理系统**********\n");
printf("**************1.学生查询**************\n");
printf("**************2.新增学生**************\n");
printf("**************3.删除学生**************\n");
printf("**************4.修改学生**************\n");
printf("**************5.退出系统**************\n");
printf("*************************************\n");
int num = 0;
printf("请输入选项:\n");
scanf("%d",&num);
return num;
}
/**
显示二级菜单
*/
void showNextMenu(){
printf("**********欢迎使用学生查询系统**********\n");
printf("**************1.全部学生信息***********\n");
printf("**************2.根据编号查询***********\n");
printf("**************3.根据姓名查询***********\n");
printf("**************4.根据年龄查询***********\n");
printf("**************5.根据性别查询***********\n");
printf("**************6.根据成绩查询***********\n");
printf("*************************************\n");
int num = 0;
printf("请输入选项:\n");
scanf("%d",&num);
switch(num){
case 1:
//全部学生信息
showALL();
break;
case 2:
//根据编号查询
showByID();
break;
case 3:
//根据姓名查询
showByName();
break;
case 4:
//根据年龄查询
showByAge();
break;
case 5:
//根据性别查询
showByGender();
break;
case 6:
//根据成绩查询
showByScore();
break;
default:
printf("输入有误!\n");
break;
}
}
/**
查看全部信息
*/
void showALL(){
printf("编号\t姓名\t\t性别\t年龄\t分数\n");
for(int i = 0;i < realLen;i++){
printf("%d\t%s\t%s\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex ? "女":"男",
students[i].age,
students[i].score
);
}
}
/**
根据编号
*/
void showByID(){
printf("请输入查询编号:"); //拿到用户输入的编号
int id = 0;
scanf("%d",&id);
//遍历数组 找出对应编号的结构体元素 打印出来
if(id < realLen){
printf("编号\t姓名\t\t性别\t年龄\t分数\n");
for(int i = 0;i < realLen;i++){
if(students[i].id == id){
printf("%d\t%s\t%s\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex ? "女":"男",
students[i].age,
students[i].score
);
}
}
}
else{
printf("抱歉,未找到指定编号\n");
}
}
/**
根据姓名
*/
void showByName(){
//请用户输入姓名
char name[10];
printf("请输入姓名");
rewind(stdin); //清空缓存区
fgets(name,10,stdin);
size_t len = strlen(name);
if(name[len - 1] == '\n'){
name[len - 1] = '\0';
}
//遍历数组,找出对应姓名的结构体元素 打印出来
printf("编号\t姓名\t\t性别\t年龄\t分数\n");
for(int i = 0;i < realLen;i++){
if(strcmp(students[i].name, name) == 0){
printf("%d\t%s\t%s\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex ? "女":"男",
students[i].age,
students[i].score
);
}
}
}
/**
根据年龄
*/
void showByAge(){
printf("请输入年龄:"); //拿到用户输入年龄
int age = 0;
scanf("%d",&age);
//遍历数组 找出对应年龄的结构体元素 打印出来
printf("编号\t姓名\t\t性别\t年龄\t分数\n");
for(int i = 0;i < realLen;i++){
if(students[i].age == age){
printf("%d\t%s\t%s\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex ? "女":"男",
students[i].age,
students[i].score
);
}
}
}
/**
根据性别
*/
void showByGender(){
printf("请输入性别: 0->男 1->女"); //拿到用户输入性别
int gender = 0;
scanf("%d",&gender);
//遍历数组 找出对应性别的结构体元素 打印出来
if(gender == 0 || gender == 1){
printf("编号\t姓名\t\t性别\t年龄\t分数\n");
for(int i = 0;i < realLen;i++){
if(students[i].sex == gender){
printf("%d\t%s\t%s\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex ? "女":"男",
students[i].age,
students[i].score
);
}
}
}
else{
printf("输入信息有误!\n");
}
}
/**
根据成绩
*/
void showByScore(){
printf("请输入最小值:"); //拿到用户输入最小值
int min = 0,max = 0;
scanf("%d",&min);
printf("请输入最大值:"); //拿到用户输入最大值
scanf("%d",&max);
//遍历数组 找出对应成绩范围的结构体元素 打印出来
if(min < max){
printf("编号\t姓名\t\t性别\t年龄\t分数\n");
for(int i = 0;i < realLen;i++){
if(students[i].score >= min && students[i].score <= max){
printf("%d\t%s\t%s\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex ? "女":"男",
students[i].age,
students[i].score
);
}
}
}
else{
printf("抱歉,范围输入有误\n");
}
}
/**
新增学生信息
*/
void addStudent(){
//先接受用户输入的数据 //编号自动生成
//接受姓名 性别 年龄 分数
char names[10];
rewind(stdin);
printf("请输入姓名");
fgets(names,10,stdin);
size_t len = strlen(names);
if(names[len - 1] == '\n'){
names[len - 1] = '\0';
}
char* name = calloc(len + 1,sizeof(char));//在堆区建一个指针变量
strcpy(name,names); //把这个局部变量COPY到堆区的指针变量中
//接受 性别 年龄 分数
int sex = 0,age = 0,score = 0;
printf("请输入性别: 0->男 1->女");
scanf("%d",&sex);
printf("请输入年龄:");
scanf("%d",&age);
printf("请输入分数:");
scanf("%d",&score);
//用结构体类型的变量存储这些数据
Student stu = {students[realLen - 1].id + 1,name,sex,age,score};
//把这个结构体变量放到数组中
students[realLen] = stu; // 编号自动生成 原来编号+1
realLen++; //长度自增+1 遍历时就会把这个新增的信息遍历出来
}
/**
删除学生信息
*/
void deleteStudent(){
printf("请输入要删除的学生编号:");
int id = 0;
scanf("%d",&id);
//遍历数组
if(id > 0 && id <= realLen) {
int count = 0;
for(int i = 0;i < realLen;i++){
if(students[i].id != id){
count++;
}
else {
break;
}
}
printf("%d",count);
//遍历下标count 到realLen-1 下标的元素 删除 就是 吧编号后面的值往前顶 id+1 ->id
for(int j = count;j <realLen;j++){
students[j] = students[j + 1]; //把后面的值往前面顶
students[j].id = students[j + 1].id - 1; //编号不变
}
realLen--;
printf("恭喜你删除成功!\n");}
else{
printf("输入信息错误\n");
}
}
/**
修改学生信息
*/
void changeStudent(){
printf("请输入要修改的学生编号:");
int id = 0;
scanf("%d",&id);
//遍历数组
if(id > 0 && id <= realLen) {
char names[10];
rewind(stdin);
printf("请输入姓名");
fgets(names,10,stdin);
size_t len = strlen(names);
if(names[len - 1] == '\n'){
names[len - 1] = '\0';
}
char* name = calloc(len + 1,sizeof(char));//在堆区建一个指针变量
strcpy(name,names); //把这个局部变量COPY到堆区的指针变量中
//接受 性别 年龄 分数
int sex = 0,age = 0,score = 0;
printf("请输入性别: 0->男 1->女");
scanf("%d",&sex);
printf("请输入年龄:");
scanf("%d",&age);
printf("请输入分数:");
scanf("%d",&score);
//用结构体类型的变量存储这些数据
Student stu = {id,name,sex,age,score};
//把这个结构体变量放到数组中
students[id - 1] = stu;
printf("恭喜你修改成功!\n");}
else{
printf("输入信息错误\n");
}
}