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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


/**
*编写一个学生管理系统程序,用来记录学生的信息(包括姓名、年龄、性别、学号、分数),提供增加、删除、查询学生信息的入口。
*/
#import <Foundation/Foundation.h>

//声明自定义的方法
void addStudent();
void removeStudent();
void selectStudent();
//定义一个存放学生信息的结构体,并定义一个结构体对象数组
struct Student{
    char name[10];
    int age;
    char sex[10];
    int number;
    float score;
}students[100];

//全局变量,用来记录学生的序号
int i = 0;

int main(int argc, const char * argv[]) {
    //设置一个循环,使程序可以一直运行
    while (true) {
        //定义一个接收输入操作的变量
        int n;
        //输出提示信息
        printf("1.增加学生信息\n");
        printf("2.删除学生信息\n");
        printf("3.查询学生信息\n");
        printf("4.退出系统\n");
        //接收从键盘输入的值给n
        scanf("%d",&n);
        //根据n的值进行方法的调用
        switch (n) {
            case 1:
                //增加学生信息
                addStudent();
                break;
            case 2:
                //删除学生信息
                removeStudent();
                break;
            case 3:
                //查找学生信息
                selectStudent();
                break;
            //没按要求输入,需重新输入值
            default:
                printf("输入有误,请重新输入");
                break;
        }
    }
   
    return 0;
}

//增加学生信息的方法
void addStudent(){
    //提示信息
    printf("请输入学生的姓名:");
    //接收姓名
    scanf("%s",students[i].name);
    //提示信息
    printf("请输入学生的年龄:");
    //接收年龄
    scanf("%d",&students[i].age);
    //判断学生的年龄是否在5~30之间,不再的话则需重新输入
    while (students[i].age < 5 || students[i].age>30) {
        printf("你输入的年龄有误,请重新输入(5~30):");
        getchar();
        scanf("%d",&students[i].age);
    }
   
    //提示信息
    printf("请输入学生的性别:");
    //接收性别
    scanf("%s",students[i].sex);
    //判断学生的性别是否为"man"或"woman",如果不是则需重新输入
    while (strcmp("man", students[i].sex) != 0&& strcmp("woman", students[i].sex) != 0) {
        printf("你输入的性别有误,请重新输入(man或woman):");
        getchar();
        scanf("%s",students[i].sex);
    }
   
    //提示信息
    printf("请输入学生的学号:");
    //接收学号
    scanf("%d",&students[i].number);
    //判断学生学号,如果不再0~100则需重新输入
    while (students[i].number < 0 || students[i].number>100) {
        printf("你输入的学号有误,请重新输入(0~100):");
        getchar();
        scanf("%d",&students[i].number);
    }
   
    //提示信息
    printf("请输入学生的分数:");
    //接收成绩
    scanf("%f",&students[i].score);
    //判断学生成绩,如果不是0~100则需重新输入
    while (students[i].score < 0 || students[i].score>100) {
        printf("你输入的分数有误,请重新输入(0~100):");
        getchar();
        scanf("%f",&students[i].score);
    }
    //全局变量i每增加一条学生信息加1
    i++;
}

//删除学生信息方法
void removeStudent(){
    //定义接收要删除学生的标号
    int m;
    //先查找下,使在删之前可以知道当前学生的信息
    selectStudent();
    //如果有学生信息则可以执行删除操作
    if (i>0) {
        //提示信息
        printf("请选择要删除的序号:");
        //接收要删除学生的标号
        scanf("%d",&m);
        //循环,使删除当前学生的后面信息放入到删除学生所在的位置
        for (int j=m; j<=i; j++) {
            //后面学生信息赋值给删除学生的位置
            students[j] = students[j+1];
        }
        //全局变量i每删除一条学生信息-1
        i--;
    }
}

//查找学生信息方法
void selectStudent(){
    //如果没有学生,则输出提示信息
    if (i==0) {
        printf("当前无学生信息!\n");
        //如果有学生信息,则输出学生的标号和学生的各个信息
    }else{
    for (int j=0; j<i; j++) {
            printf("%d---姓名:%s,年龄:%d,性别:%s,学号:%d,分数:%f\n",j,students[j].name,students[j].age,students[j].sex,students[j].number,students[j].score);
    }
    }
}

本帖被以下淘专辑推荐:

3 个回复

倒序浏览
存学生用 file存 (以 学号 作为 key , Student对象作为 value 的 Dictionary)
姓名(NSString *)、年龄(int)、性别(NSString *)、学号(NSString *)、分数(double)
输入方面: 直接让用户 输入  姓名,年龄,性别,学号,分数    用 逗号(,) 隔开 .... 拿到字符串之后, 切成 NSArray数组, 给Student对象赋值...
程序开始执行的时候 从 指定文件中 读取数据到  NSDictionary * dict 里,  查询, 删除 , 增加

以上是我的建议...
回复 使用道具 举报
大神,这题搞出来了,
回复 使用道具 举报
stein 发表于 2015-5-18 20:45
存学生用 file存 (以 学号 作为 key , Student对象作为 value 的 Dictionary)
姓名(NSString *)、年龄(int) ...

我也觉得这种方法更清晰,有层次感,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马