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

刚抽到这题的时候没在意,但是真正做起来的时候,才觉得这题对于零基础的人来说是十分的困难。首先从题目的字数来看题目字数已经不少,其次看了几遍题目之后还是无从下手。不管你们觉得难不难,反正对于零基础的我来说,不是一个难字可以了得。最后只能找资料来寻求一些思路,看了一些这样的帖子以后,思路明晰了不少,不过感觉他们搞的有些太复杂了,于是站在前人的肩膀上,再结合我自己的想法,创作出了我自己的作品,现在贴出来,给同样题目的童鞋一些参考。当然得申明一下,在写代码的时候,由于时间和学识的关系,只是奔着能运行的目的去的,没有做深一步的优化,基础好的朋友,可以自己优化一下,或者用帖子回复出来,共同学习进步,不过程序我是运行测试过的,没什么问题。

如果你觉得我写的还凑合,请麻烦给点个赞,不胜感激!3Q


#import <Foundation/Foundation.h>
//函数的申明
void in();        // 增加学生信息
void search();    // 查询学生信息
void del();       // 删除学生信息
void menu();  // 自定义函数实现菜单功能
void menu2();  // 删除功能的菜单
void step();  // 所有功能定义
// 定义一个学生的结构体
struct Student
{
    int number;     // 学号
    int age;        // 年龄
    char sex[10];   // 性别
    char name[10];  // 姓名
    double score;   // 分数
    
};




// 定义一个可放100人的学生组
struct Student str[100];


//自定义函数实现菜单功能
void menu()
{
    // 提示用户输入
    printf("\t\t\t\t\t\t*******************\n");
    printf("\t\t\t\t\t\t   1.增加学生信息\n");
    printf("\t\t\t\t\t\t   2.删除学生信息\n");
    printf("\t\t\t\t\t\t   3.查询学生信息\n");
    printf("\t\t\t\t\t\t   0.退出学生系统\n");
    printf("\t\t\t\t\t\t*******************\n");
    printf("请选择操作(0-3): ");
}






// 所有功能定义
void step ()
{
    menu();
    // 保证功能函数一直不退出循环,想退出的时候再退出(可退出的死循环)
    for (; ; )
    {
        
        // 定义功能的标识
        int n = -1;
        
        // 接收用户的选择
        scanf("%d", &n);
        
        // 定义用户所需进入的选择
        if (n == 1)
        {
            in();    // 增加
            break;
        }
        else if (n == 2)
        {
            del();   // 删除
        }
        else if (n == 3)
        {
            search(); // 查询
        }
        
        else
        {
            printf("\t\t\t\t\t\t****已退出学生系统****\n");
            
            break;    // 退出
            
        }
        
    }
}


//增加学生信息
void in()
{
    // 使用for循环接收100个学生的信息
    for ( int i = 0 ; i < 100; i++)
    {
        // 提示用户输入该生的姓名
        printf("请输入该学生的姓名\n");
        // 接收输入的姓名
        scanf("%s",str[i].name);
        
        // 提示用户输入该生的年龄
        printf("请输入该学生的年龄(5岁-30岁之间)\n");
        scanf("%d",&str[i].age);
        // 检查年龄是否适当(5岁-20岁之间)
        while  (str[i].age<5 || str[i].age>30)
        {
            printf("*对不起您的学生年龄输入可能有误*\n");
            printf("请重新输入该学生年龄\n");
            scanf("%d",&str[i].age);
        }
        
        // 提示用户输入该生的性别,定义性别为:man或者woman
        printf("请输入该学生的性别(man或woman)\n");
        while(getchar()!='\n');
        /*清空输入缓存,当碰到下一个输入数据是char类
         型,在第一次输入结束后加上这条语句*/
        scanf("%s",str[i].sex);
        
        // 提示用户输入该生的学号
        printf("请输入该学生的学号\n");
        scanf("%d",&str[i].number);
        // 检查学号是否相同,学号具有惟一性,不能同时给多人赋值
        for (int a = i-1; str[i].number == str[a].number; a--)
        {
            while (str[i].number == str[a].number)
            {
                printf("对不起该学号已经存在,请重新输入\n");
                scanf("%d",&str[a].number);
            }
        }
        
        // 提示用户输入该生分数
        printf("请输入该学生的分数\n");
        scanf("%f",&str[i].score);
        // 检查分数是否适当
        while  (str[i].score<0 || str[i].score>100)
        {
            printf("对不起您的考生考分不符合判卷标准\n");
            printf("请重新输入该学生的分数\n");
            scanf("%f",&str[i].score);
            
        }
        
        // 打印该生的所有个人信息
        printf("第%d次录入的学生信息为:\n姓名-%s\n年龄-%d\n性别-%s\n学号-%d\n分数-%f\n ",i+1, str[i].name, str[i].age, str[i].sex, str[i].number,str[i].score);
        
        // 判断是否继续录入
        printf("\t\t*继续添加 请按1;返回菜单请按任意键*\n");
        int m = 0;
        scanf("%d", &m);
        if (m == 1)
        {
            continue;
        }
        else
        {
            step();
        }
        break;
    }
    
}


// 删除功能的菜单,规定学号为唯一识别符,在最后删除信息的时才可以删除
void menu2()
{
    printf("\t\t\t\t\t\t\t请按照提示选择\n");
    printf("\t\t\t\t\t\t------------\n");
    printf("\t\t\t\t\t\t\t返回上一级菜单按0\n");
    printf("\t\t\t\t\t\t\t  删除姓名按1\n");
    printf("\t\t\t\t\t\t\t  删除年龄按2\n");
    printf("\t\t\t\t\t\t\t  删除性别按3\n");
    printf("\t\t\t\t\t\t\t  删除分数按4\n");
    printf("\t\t\t\t\t\t\t删除全部信息按5\n");
    printf("\t\t\t\t\t\t------------\n");
    printf("请选择操作(0-5): ");
    
}


// 删除学生信息,规定学生的学号为唯一识别码,用其进行学生身份的判断
void del()
{
    // 提示用户输入学号,进行身份核对
    printf("请输入该生的学号,进行身份验证:\n");
    int n = 0;
    scanf("%d",&n);
    // 用遍历的方法在系统里查找这个学号对应的数组
    for (int i = 0; i<100; i++)
    {
        
        // 判断输入的学号是否与已录入的学号相等
        if (str[i].number == n)
        {
            printf("该学生全部信息为:\n姓名是%s\n年龄是%d\n性别是%s\n学号是%d\n分数是%f\n",str[i].name, str[i].age, str[i].sex, str[i].number,str[i].score);
            
            // 如果学号匹配,调用删除功能的菜单,提示用户下一步操作
            menu2();
            
            // 判断要删除哪一项,
            int b = -1;
            scanf("%d",&b);
            // 返回上一级菜单
            if (b==0)
            {
                step();
                break;
            }
            // 删除姓名
            else if (b ==1)
            {
                strcpy(str[i].name, "0");
                printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
                menu2();
            }
            // 删除年龄
            else if (b ==2)
            {
                str[i].age = 0;
                printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
                menu2();
            }
            
            // 删除性别
            else if (b ==3)
            {
                strcpy(str[i].sex, "0");
                printf("学号是%d\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number, str[i].age, str[i].sex, str[i].score);
                menu2();
            }
            
            // 删除分数
            else if (b ==4)
            {
                str[i].score = 0;
                printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
                menu2();
            }
            
            // 删除全部信息
            else if (b ==5)
            {
                str[i].number = 0;
                strcpy(str[i].name, "0");
                str[i].age = 0;
                strcpy(str[i].sex, "0");
                str[i].score = 0;
                
                printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
            }
            break;
        }
        // 输入的学号与已经录入的不匹配
        else
        {
            printf("该学号不存在,请重新确认\n");
            printf("继续--请按1;返回主菜单--请按任意键\n");
            int b = 0;
            scanf("%d",&b);
            if (b == 1)
            {
                del();
            }
            else
            {
                menu();
            }
            
            break;
        }
    }
}
// 查询学生信息,规定学生的学号为唯一识别码,用其进行学生身份的判断
void search()
{
    // 提示用户输入该生的学号
    printf("*请输入该生学号:*\n");
    int n = 0;
    scanf("%d", &n);
    // 找到这个学号对应的数组
    for (int i = 0; i<100; i++)
    {
        // 判断输入学号是否与已录入的学号相匹配
        // 匹配
        if (str[i].number == n)
        {
            printf("该学生信息为:\n姓名是%s\n年龄是%d\n性别是%s\n学号是%d\n分数是%f\n",str[i].name, str[i].age, str[i].sex, str[i].number,str[i].score);
            break;
        }
        // 不匹配
        else
        {
            printf("\t\t\t\t\t**该学号不存在,请重新确认**\n");
            break;
        }
    }
    // 判断是否继续查询
    printf("\n");
    printf("继续查询--请按1;返回主菜单--请按任意键\n");
    int b = 0;
    scanf("%d",&b);
    if (b == 1)
    {
        search();
    }
    else
    {
        menu();
    }
}


int main(int argc, const char * argv[])
{
    
    @autoreleasepool
    {
        // 提示用户登陆学生管理系统
        printf("\n\n\n\n\t\t\t\t\t\t 欢迎使用学生管理系统!\n");
        
        // 调用主菜单,进行相应操作
        step();
        return 0;
    }
}

  • 54
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值