A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

谢谢了,刚点招完,想敲下那个代码

3 个回复

倒序浏览
给你上图吧,不知道怎么上传  用的C
回复 使用道具 举报
[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");
    }

}

回复 使用道具 举报
以前做作业自己打的,初始学生人数是 7个 ,后面加了个自动编号前移
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马